gitlab.com/CoiaPrant/sqlite3@v1.19.1/internal/testfixture/testfixture_freebsd_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 -I/usr/local/include/tcl8.6 -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_freebsd_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', 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_cuserid = 17 46 L_tmpnam = 1024 47 NDEBUG = 1 48 NOT_WITHIN = 0 49 PARTLY_WITHIN = 1 50 P_tmpdir = "/tmp/" 51 SEEK_CUR = 1 52 SEEK_END = 2 53 SEEK_SET = 0 54 SQLITE3_H = 0 55 SQLITE3_TEXT = 3 56 SQLITEEXPERT_H = 1 57 SQLITE_ABORT = 4 58 SQLITE_ABORT_ROLLBACK = 516 59 SQLITE_ACCESS_EXISTS = 0 60 SQLITE_ACCESS_READ = 2 61 SQLITE_ACCESS_READWRITE = 1 62 SQLITE_ALTER_TABLE = 26 63 SQLITE_ANALYZE = 28 64 SQLITE_ANY = 5 65 SQLITE_API = 0 66 SQLITE_APICALL = 0 67 SQLITE_ATTACH = 24 68 SQLITE_AUTH = 23 69 SQLITE_AUTH_USER = 279 70 SQLITE_BLOB = 4 71 SQLITE_BUSY = 5 72 SQLITE_BUSY_RECOVERY = 261 73 SQLITE_BUSY_SNAPSHOT = 517 74 SQLITE_BUSY_TIMEOUT = 773 75 SQLITE_CALLBACK = 0 76 SQLITE_CANTOPEN = 14 77 SQLITE_CANTOPEN_CONVPATH = 1038 78 SQLITE_CANTOPEN_DIRTYWAL = 1294 79 SQLITE_CANTOPEN_FULLPATH = 782 80 SQLITE_CANTOPEN_ISDIR = 526 81 SQLITE_CANTOPEN_NOTEMPDIR = 270 82 SQLITE_CANTOPEN_SYMLINK = 1550 83 SQLITE_CDECL = 0 84 SQLITE_CHANGESETAPPLY_INVERT = 0x0002 85 SQLITE_CHANGESETAPPLY_NOSAVEPOINT = 0x0001 86 SQLITE_CHANGESETSTART_INVERT = 0x0002 87 SQLITE_CHANGESET_ABORT = 2 88 SQLITE_CHANGESET_CONFLICT = 3 89 SQLITE_CHANGESET_CONSTRAINT = 4 90 SQLITE_CHANGESET_DATA = 1 91 SQLITE_CHANGESET_FOREIGN_KEY = 5 92 SQLITE_CHANGESET_NOTFOUND = 2 93 SQLITE_CHANGESET_OMIT = 0 94 SQLITE_CHANGESET_REPLACE = 1 95 SQLITE_CHECKPOINT_FULL = 1 96 SQLITE_CHECKPOINT_PASSIVE = 0 97 SQLITE_CHECKPOINT_RESTART = 2 98 SQLITE_CHECKPOINT_TRUNCATE = 3 99 SQLITE_CKSUMVFS_STATIC = 1 100 SQLITE_CONFIG_COVERING_INDEX_SCAN = 20 101 SQLITE_CONFIG_GETMALLOC = 5 102 SQLITE_CONFIG_GETMUTEX = 11 103 SQLITE_CONFIG_GETPCACHE = 15 104 SQLITE_CONFIG_GETPCACHE2 = 19 105 SQLITE_CONFIG_HEAP = 8 106 SQLITE_CONFIG_LOG = 16 107 SQLITE_CONFIG_LOOKASIDE = 13 108 SQLITE_CONFIG_MALLOC = 4 109 SQLITE_CONFIG_MEMDB_MAXSIZE = 29 110 SQLITE_CONFIG_MEMSTATUS = 9 111 SQLITE_CONFIG_MMAP_SIZE = 22 112 SQLITE_CONFIG_MULTITHREAD = 2 113 SQLITE_CONFIG_MUTEX = 10 114 SQLITE_CONFIG_PAGECACHE = 7 115 SQLITE_CONFIG_PCACHE = 14 116 SQLITE_CONFIG_PCACHE2 = 18 117 SQLITE_CONFIG_PCACHE_HDRSZ = 24 118 SQLITE_CONFIG_PMASZ = 25 119 SQLITE_CONFIG_SCRATCH = 6 120 SQLITE_CONFIG_SERIALIZED = 3 121 SQLITE_CONFIG_SINGLETHREAD = 1 122 SQLITE_CONFIG_SMALL_MALLOC = 27 123 SQLITE_CONFIG_SORTERREF_SIZE = 28 124 SQLITE_CONFIG_SQLLOG = 21 125 SQLITE_CONFIG_STMTJRNL_SPILL = 26 126 SQLITE_CONFIG_URI = 17 127 SQLITE_CONFIG_WIN32_HEAPSIZE = 23 128 SQLITE_CONSTRAINT = 19 129 SQLITE_CONSTRAINT_CHECK = 275 130 SQLITE_CONSTRAINT_COMMITHOOK = 531 131 SQLITE_CONSTRAINT_DATATYPE = 3091 132 SQLITE_CONSTRAINT_FOREIGNKEY = 787 133 SQLITE_CONSTRAINT_FUNCTION = 1043 134 SQLITE_CONSTRAINT_NOTNULL = 1299 135 SQLITE_CONSTRAINT_PINNED = 2835 136 SQLITE_CONSTRAINT_PRIMARYKEY = 1555 137 SQLITE_CONSTRAINT_ROWID = 2579 138 SQLITE_CONSTRAINT_TRIGGER = 1811 139 SQLITE_CONSTRAINT_UNIQUE = 2067 140 SQLITE_CONSTRAINT_VTAB = 2323 141 SQLITE_COPY = 0 142 SQLITE_CORE = 1 143 SQLITE_CORRUPT = 11 144 SQLITE_CORRUPT_INDEX = 779 145 SQLITE_CORRUPT_SEQUENCE = 523 146 SQLITE_CORRUPT_VTAB = 267 147 SQLITE_CREATE_INDEX = 1 148 SQLITE_CREATE_TABLE = 2 149 SQLITE_CREATE_TEMP_INDEX = 3 150 SQLITE_CREATE_TEMP_TABLE = 4 151 SQLITE_CREATE_TEMP_TRIGGER = 5 152 SQLITE_CREATE_TEMP_VIEW = 6 153 SQLITE_CREATE_TRIGGER = 7 154 SQLITE_CREATE_VIEW = 8 155 SQLITE_CREATE_VTABLE = 29 156 SQLITE_DBCONFIG_DEFENSIVE = 1010 157 SQLITE_DBCONFIG_DQS_DDL = 1014 158 SQLITE_DBCONFIG_DQS_DML = 1013 159 SQLITE_DBCONFIG_ENABLE_FKEY = 1002 160 SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER = 1004 161 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION = 1005 162 SQLITE_DBCONFIG_ENABLE_QPSG = 1007 163 SQLITE_DBCONFIG_ENABLE_TRIGGER = 1003 164 SQLITE_DBCONFIG_ENABLE_VIEW = 1015 165 SQLITE_DBCONFIG_LEGACY_ALTER_TABLE = 1012 166 SQLITE_DBCONFIG_LEGACY_FILE_FORMAT = 1016 167 SQLITE_DBCONFIG_LOOKASIDE = 1001 168 SQLITE_DBCONFIG_MAINDBNAME = 1000 169 SQLITE_DBCONFIG_MAX = 1017 170 SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE = 1006 171 SQLITE_DBCONFIG_RESET_DATABASE = 1009 172 SQLITE_DBCONFIG_TRIGGER_EQP = 1008 173 SQLITE_DBCONFIG_TRUSTED_SCHEMA = 1017 174 SQLITE_DBCONFIG_WRITABLE_SCHEMA = 1011 175 SQLITE_DBSTATUS_CACHE_HIT = 7 176 SQLITE_DBSTATUS_CACHE_MISS = 8 177 SQLITE_DBSTATUS_CACHE_SPILL = 12 178 SQLITE_DBSTATUS_CACHE_USED = 1 179 SQLITE_DBSTATUS_CACHE_USED_SHARED = 11 180 SQLITE_DBSTATUS_CACHE_WRITE = 9 181 SQLITE_DBSTATUS_DEFERRED_FKS = 10 182 SQLITE_DBSTATUS_LOOKASIDE_HIT = 4 183 SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL = 6 184 SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE = 5 185 SQLITE_DBSTATUS_LOOKASIDE_USED = 0 186 SQLITE_DBSTATUS_MAX = 12 187 SQLITE_DBSTATUS_SCHEMA_USED = 2 188 SQLITE_DBSTATUS_STMT_USED = 3 189 SQLITE_DEFAULT_MEMSTATUS = 0 190 SQLITE_DEFAULT_PAGE_SIZE = 1024 191 SQLITE_DELETE = 9 192 SQLITE_DENY = 1 193 SQLITE_DEPRECATED = 0 194 SQLITE_DESERIALIZE_FREEONCLOSE = 1 195 SQLITE_DESERIALIZE_READONLY = 4 196 SQLITE_DESERIALIZE_RESIZEABLE = 2 197 SQLITE_DETACH = 25 198 SQLITE_DETERMINISTIC = 0x000000800 199 SQLITE_DIRECTONLY = 0x000080000 200 SQLITE_DONE = 101 201 SQLITE_DROP_INDEX = 10 202 SQLITE_DROP_TABLE = 11 203 SQLITE_DROP_TEMP_INDEX = 12 204 SQLITE_DROP_TEMP_TABLE = 13 205 SQLITE_DROP_TEMP_TRIGGER = 14 206 SQLITE_DROP_TEMP_VIEW = 15 207 SQLITE_DROP_TRIGGER = 16 208 SQLITE_DROP_VIEW = 17 209 SQLITE_DROP_VTABLE = 30 210 SQLITE_EMPTY = 16 211 SQLITE_ENABLE_BYTECODE_VTAB = 1 212 SQLITE_ENABLE_COLUMN_METADATA = 1 213 SQLITE_ENABLE_DBPAGE_VTAB = 1 214 SQLITE_ENABLE_DBSTAT_VTAB = 1 215 SQLITE_ENABLE_DESERIALIZE = 1 216 SQLITE_ENABLE_EXPLAIN_COMMENTS = 1 217 SQLITE_ENABLE_FTS5 = 1 218 SQLITE_ENABLE_GEOPOLY = 1 219 SQLITE_ENABLE_MATH_FUNCTIONS = 1 220 SQLITE_ENABLE_MEMORY_MANAGEMENT = 1 221 SQLITE_ENABLE_OFFSET_SQL_FUNC = 1 222 SQLITE_ENABLE_PREUPDATE_HOOK = 1 223 SQLITE_ENABLE_RBU = 1 224 SQLITE_ENABLE_RTREE = 1 225 SQLITE_ENABLE_SESSION = 1 226 SQLITE_ENABLE_SNAPSHOT = 1 227 SQLITE_ENABLE_STAT4 = 1 228 SQLITE_ENABLE_STMTVTAB = 1 229 SQLITE_ENABLE_UNLOCK_NOTIFY = 1 230 SQLITE_ERROR = 1 231 SQLITE_ERROR_MISSING_COLLSEQ = 257 232 SQLITE_ERROR_RETRY = 513 233 SQLITE_ERROR_SNAPSHOT = 769 234 SQLITE_EXPERIMENTAL = 0 235 SQLITE_FAIL = 3 236 SQLITE_FCNTL_BEGIN_ATOMIC_WRITE = 31 237 SQLITE_FCNTL_BUSYHANDLER = 15 238 SQLITE_FCNTL_CHUNK_SIZE = 6 239 SQLITE_FCNTL_CKPT_DONE = 37 240 SQLITE_FCNTL_CKPT_START = 39 241 SQLITE_FCNTL_CKSM_FILE = 41 242 SQLITE_FCNTL_COMMIT_ATOMIC_WRITE = 32 243 SQLITE_FCNTL_COMMIT_PHASETWO = 22 244 SQLITE_FCNTL_DATA_VERSION = 35 245 SQLITE_FCNTL_EXTERNAL_READER = 40 246 SQLITE_FCNTL_FILE_POINTER = 7 247 SQLITE_FCNTL_GET_LOCKPROXYFILE = 2 248 SQLITE_FCNTL_HAS_MOVED = 20 249 SQLITE_FCNTL_JOURNAL_POINTER = 28 250 SQLITE_FCNTL_LAST_ERRNO = 4 251 SQLITE_FCNTL_LOCKSTATE = 1 252 SQLITE_FCNTL_LOCK_TIMEOUT = 34 253 SQLITE_FCNTL_MMAP_SIZE = 18 254 SQLITE_FCNTL_OVERWRITE = 11 255 SQLITE_FCNTL_PDB = 30 256 SQLITE_FCNTL_PERSIST_WAL = 10 257 SQLITE_FCNTL_POWERSAFE_OVERWRITE = 13 258 SQLITE_FCNTL_PRAGMA = 14 259 SQLITE_FCNTL_RBU = 26 260 SQLITE_FCNTL_RESERVE_BYTES = 38 261 SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE = 33 262 SQLITE_FCNTL_SET_LOCKPROXYFILE = 3 263 SQLITE_FCNTL_SIZE_HINT = 5 264 SQLITE_FCNTL_SIZE_LIMIT = 36 265 SQLITE_FCNTL_SYNC = 21 266 SQLITE_FCNTL_SYNC_OMITTED = 8 267 SQLITE_FCNTL_TEMPFILENAME = 16 268 SQLITE_FCNTL_TRACE = 19 269 SQLITE_FCNTL_VFSNAME = 12 270 SQLITE_FCNTL_VFS_POINTER = 27 271 SQLITE_FCNTL_WAL_BLOCK = 24 272 SQLITE_FCNTL_WIN32_AV_RETRY = 9 273 SQLITE_FCNTL_WIN32_GET_HANDLE = 29 274 SQLITE_FCNTL_WIN32_SET_HANDLE = 23 275 SQLITE_FCNTL_ZIPVFS = 25 276 SQLITE_FLOAT = 2 277 SQLITE_FORMAT = 24 278 SQLITE_FULL = 13 279 SQLITE_FUNCTION = 31 280 SQLITE_GET_LOCKPROXYFILE = 2 281 SQLITE_IGNORE = 2 282 SQLITE_INDEX_CONSTRAINT_EQ = 2 283 SQLITE_INDEX_CONSTRAINT_FUNCTION = 150 284 SQLITE_INDEX_CONSTRAINT_GE = 32 285 SQLITE_INDEX_CONSTRAINT_GLOB = 66 286 SQLITE_INDEX_CONSTRAINT_GT = 4 287 SQLITE_INDEX_CONSTRAINT_IS = 72 288 SQLITE_INDEX_CONSTRAINT_ISNOT = 69 289 SQLITE_INDEX_CONSTRAINT_ISNOTNULL = 70 290 SQLITE_INDEX_CONSTRAINT_ISNULL = 71 291 SQLITE_INDEX_CONSTRAINT_LE = 8 292 SQLITE_INDEX_CONSTRAINT_LIKE = 65 293 SQLITE_INDEX_CONSTRAINT_LIMIT = 73 294 SQLITE_INDEX_CONSTRAINT_LT = 16 295 SQLITE_INDEX_CONSTRAINT_MATCH = 64 296 SQLITE_INDEX_CONSTRAINT_NE = 68 297 SQLITE_INDEX_CONSTRAINT_OFFSET = 74 298 SQLITE_INDEX_CONSTRAINT_REGEXP = 67 299 SQLITE_INDEX_SCAN_UNIQUE = 1 300 SQLITE_INNOCUOUS = 0x000200000 301 SQLITE_INSERT = 18 302 SQLITE_INTEGER = 1 303 SQLITE_INTERNAL = 2 304 SQLITE_INTERRUPT = 9 305 SQLITE_IOCAP_ATOMIC = 0x00000001 306 SQLITE_IOCAP_ATOMIC16K = 0x00000040 307 SQLITE_IOCAP_ATOMIC1K = 0x00000004 308 SQLITE_IOCAP_ATOMIC2K = 0x00000008 309 SQLITE_IOCAP_ATOMIC32K = 0x00000080 310 SQLITE_IOCAP_ATOMIC4K = 0x00000010 311 SQLITE_IOCAP_ATOMIC512 = 0x00000002 312 SQLITE_IOCAP_ATOMIC64K = 0x00000100 313 SQLITE_IOCAP_ATOMIC8K = 0x00000020 314 SQLITE_IOCAP_BATCH_ATOMIC = 0x00004000 315 SQLITE_IOCAP_IMMUTABLE = 0x00002000 316 SQLITE_IOCAP_POWERSAFE_OVERWRITE = 0x00001000 317 SQLITE_IOCAP_SAFE_APPEND = 0x00000200 318 SQLITE_IOCAP_SEQUENTIAL = 0x00000400 319 SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN = 0x00000800 320 SQLITE_IOERR = 10 321 SQLITE_IOERR_ACCESS = 3338 322 SQLITE_IOERR_AUTH = 7178 323 SQLITE_IOERR_BEGIN_ATOMIC = 7434 324 SQLITE_IOERR_BLOCKED = 2826 325 SQLITE_IOERR_CHECKRESERVEDLOCK = 3594 326 SQLITE_IOERR_CLOSE = 4106 327 SQLITE_IOERR_COMMIT_ATOMIC = 7690 328 SQLITE_IOERR_CONVPATH = 6666 329 SQLITE_IOERR_CORRUPTFS = 8458 330 SQLITE_IOERR_DATA = 8202 331 SQLITE_IOERR_DELETE = 2570 332 SQLITE_IOERR_DELETE_NOENT = 5898 333 SQLITE_IOERR_DIR_CLOSE = 4362 334 SQLITE_IOERR_DIR_FSYNC = 1290 335 SQLITE_IOERR_FSTAT = 1802 336 SQLITE_IOERR_FSYNC = 1034 337 SQLITE_IOERR_GETTEMPPATH = 6410 338 SQLITE_IOERR_LOCK = 3850 339 SQLITE_IOERR_MMAP = 6154 340 SQLITE_IOERR_NOMEM = 3082 341 SQLITE_IOERR_RDLOCK = 2314 342 SQLITE_IOERR_READ = 266 343 SQLITE_IOERR_ROLLBACK_ATOMIC = 7946 344 SQLITE_IOERR_SEEK = 5642 345 SQLITE_IOERR_SHMLOCK = 5130 346 SQLITE_IOERR_SHMMAP = 5386 347 SQLITE_IOERR_SHMOPEN = 4618 348 SQLITE_IOERR_SHMSIZE = 4874 349 SQLITE_IOERR_SHORT_READ = 522 350 SQLITE_IOERR_TRUNCATE = 1546 351 SQLITE_IOERR_UNLOCK = 2058 352 SQLITE_IOERR_VNODE = 6922 353 SQLITE_IOERR_WRITE = 778 354 SQLITE_LAST_ERRNO = 4 355 SQLITE_LIKE_DOESNT_MATCH_BLOBS = 1 356 SQLITE_LIMIT_ATTACHED = 7 357 SQLITE_LIMIT_COLUMN = 2 358 SQLITE_LIMIT_COMPOUND_SELECT = 4 359 SQLITE_LIMIT_EXPR_DEPTH = 3 360 SQLITE_LIMIT_FUNCTION_ARG = 6 361 SQLITE_LIMIT_LENGTH = 0 362 SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8 363 SQLITE_LIMIT_SQL_LENGTH = 1 364 SQLITE_LIMIT_TRIGGER_DEPTH = 10 365 SQLITE_LIMIT_VARIABLE_NUMBER = 9 366 SQLITE_LIMIT_VDBE_OP = 5 367 SQLITE_LIMIT_WORKER_THREADS = 11 368 SQLITE_LOCKED = 6 369 SQLITE_LOCKED_SHAREDCACHE = 262 370 SQLITE_LOCKED_VTAB = 518 371 SQLITE_LOCK_EXCLUSIVE = 4 372 SQLITE_LOCK_NONE = 0 373 SQLITE_LOCK_PENDING = 3 374 SQLITE_LOCK_RESERVED = 2 375 SQLITE_LOCK_SHARED = 1 376 SQLITE_MISMATCH = 20 377 SQLITE_MISUSE = 21 378 SQLITE_MUTEX_APPDEF = 1 379 SQLITE_MUTEX_FAST = 0 380 SQLITE_MUTEX_NOOP = 1 381 SQLITE_MUTEX_RECURSIVE = 1 382 SQLITE_MUTEX_STATIC_APP1 = 8 383 SQLITE_MUTEX_STATIC_APP2 = 9 384 SQLITE_MUTEX_STATIC_APP3 = 10 385 SQLITE_MUTEX_STATIC_LRU = 6 386 SQLITE_MUTEX_STATIC_LRU2 = 7 387 SQLITE_MUTEX_STATIC_MAIN = 2 388 SQLITE_MUTEX_STATIC_MASTER = 2 389 SQLITE_MUTEX_STATIC_MEM = 3 390 SQLITE_MUTEX_STATIC_MEM2 = 4 391 SQLITE_MUTEX_STATIC_OPEN = 4 392 SQLITE_MUTEX_STATIC_PMEM = 7 393 SQLITE_MUTEX_STATIC_PRNG = 5 394 SQLITE_MUTEX_STATIC_VFS1 = 11 395 SQLITE_MUTEX_STATIC_VFS2 = 12 396 SQLITE_MUTEX_STATIC_VFS3 = 13 397 SQLITE_NOLFS = 22 398 SQLITE_NOMEM = 7 399 SQLITE_NOTADB = 26 400 SQLITE_NOTFOUND = 12 401 SQLITE_NOTICE = 27 402 SQLITE_NOTICE_RECOVER_ROLLBACK = 539 403 SQLITE_NOTICE_RECOVER_WAL = 283 404 SQLITE_NULL = 5 405 SQLITE_OK = 0 406 SQLITE_OK_LOAD_PERMANENTLY = 256 407 SQLITE_OK_SYMLINK = 512 408 SQLITE_OMIT_LOAD_EXTENSION = 1 409 SQLITE_OPEN_AUTOPROXY = 0x00000020 410 SQLITE_OPEN_CREATE = 0x00000004 411 SQLITE_OPEN_DELETEONCLOSE = 0x00000008 412 SQLITE_OPEN_EXCLUSIVE = 0x00000010 413 SQLITE_OPEN_EXRESCODE = 0x02000000 414 SQLITE_OPEN_FULLMUTEX = 0x00010000 415 SQLITE_OPEN_MAIN_DB = 0x00000100 416 SQLITE_OPEN_MAIN_JOURNAL = 0x00000800 417 SQLITE_OPEN_MASTER_JOURNAL = 0x00004000 418 SQLITE_OPEN_MEMORY = 0x00000080 419 SQLITE_OPEN_NOFOLLOW = 0x01000000 420 SQLITE_OPEN_NOMUTEX = 0x00008000 421 SQLITE_OPEN_PRIVATECACHE = 0x00040000 422 SQLITE_OPEN_READONLY = 0x00000001 423 SQLITE_OPEN_READWRITE = 0x00000002 424 SQLITE_OPEN_SHAREDCACHE = 0x00020000 425 SQLITE_OPEN_SUBJOURNAL = 0x00002000 426 SQLITE_OPEN_SUPER_JOURNAL = 0x00004000 427 SQLITE_OPEN_TEMP_DB = 0x00000200 428 SQLITE_OPEN_TEMP_JOURNAL = 0x00001000 429 SQLITE_OPEN_TRANSIENT_DB = 0x00000400 430 SQLITE_OPEN_URI = 0x00000040 431 SQLITE_OPEN_WAL = 0x00080000 432 SQLITE_PERM = 3 433 SQLITE_PRAGMA = 19 434 SQLITE_PREPARE_NORMALIZE = 0x02 435 SQLITE_PREPARE_NO_VTAB = 0x04 436 SQLITE_PREPARE_PERSISTENT = 0x01 437 SQLITE_PROTOCOL = 15 438 SQLITE_RANGE = 25 439 SQLITE_READ = 20 440 SQLITE_READONLY = 8 441 SQLITE_READONLY_CANTINIT = 1288 442 SQLITE_READONLY_CANTLOCK = 520 443 SQLITE_READONLY_DBMOVED = 1032 444 SQLITE_READONLY_DIRECTORY = 1544 445 SQLITE_READONLY_RECOVERY = 264 446 SQLITE_READONLY_ROLLBACK = 776 447 SQLITE_RECURSIVE = 33 448 SQLITE_REINDEX = 27 449 SQLITE_REPLACE = 5 450 SQLITE_ROLLBACK = 1 451 SQLITE_ROW = 100 452 SQLITE_SAVEPOINT = 32 453 SQLITE_SCANSTAT_EST = 2 454 SQLITE_SCANSTAT_EXPLAIN = 4 455 SQLITE_SCANSTAT_NAME = 3 456 SQLITE_SCANSTAT_NLOOP = 0 457 SQLITE_SCANSTAT_NVISIT = 1 458 SQLITE_SCANSTAT_SELECTID = 5 459 SQLITE_SCHEMA = 17 460 SQLITE_SELECT = 21 461 SQLITE_SERIALIZE_NOCOPY = 0x001 462 SQLITE_SERIES_CONSTRAINT_VERIFY = 1 463 SQLITE_SERVER = 1 464 SQLITE_SESSION_CONFIG_STRMSIZE = 1 465 SQLITE_SESSION_OBJCONFIG_SIZE = 1 466 SQLITE_SET_LOCKPROXYFILE = 3 467 SQLITE_SHM_EXCLUSIVE = 8 468 SQLITE_SHM_LOCK = 2 469 SQLITE_SHM_NLOCK = 8 470 SQLITE_SHM_SHARED = 4 471 SQLITE_SHM_UNLOCK = 1 472 SQLITE_SOUNDEX = 1 473 SQLITE_SOURCE_ID = "2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8" 474 SQLITE_STATUS_MALLOC_COUNT = 9 475 SQLITE_STATUS_MALLOC_SIZE = 5 476 SQLITE_STATUS_MEMORY_USED = 0 477 SQLITE_STATUS_PAGECACHE_OVERFLOW = 2 478 SQLITE_STATUS_PAGECACHE_SIZE = 7 479 SQLITE_STATUS_PAGECACHE_USED = 1 480 SQLITE_STATUS_PARSER_STACK = 6 481 SQLITE_STATUS_SCRATCH_OVERFLOW = 4 482 SQLITE_STATUS_SCRATCH_SIZE = 8 483 SQLITE_STATUS_SCRATCH_USED = 3 484 SQLITE_STDCALL = 0 485 SQLITE_STMTSTATUS_AUTOINDEX = 3 486 SQLITE_STMTSTATUS_FILTER_HIT = 8 487 SQLITE_STMTSTATUS_FILTER_MISS = 7 488 SQLITE_STMTSTATUS_FULLSCAN_STEP = 1 489 SQLITE_STMTSTATUS_MEMUSED = 99 490 SQLITE_STMTSTATUS_REPREPARE = 5 491 SQLITE_STMTSTATUS_RUN = 6 492 SQLITE_STMTSTATUS_SORT = 2 493 SQLITE_STMTSTATUS_VM_STEP = 4 494 SQLITE_SUBTYPE = 0x000100000 495 SQLITE_SYNC_DATAONLY = 0x00010 496 SQLITE_SYNC_FULL = 0x00003 497 SQLITE_SYNC_NORMAL = 0x00002 498 SQLITE_SYSAPI = 0 499 SQLITE_TEMP_STORE = 1 500 SQLITE_TEST = 1 501 SQLITE_TESTCTRL_ALWAYS = 13 502 SQLITE_TESTCTRL_ASSERT = 12 503 SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS = 10 504 SQLITE_TESTCTRL_BITVEC_TEST = 8 505 SQLITE_TESTCTRL_BYTEORDER = 22 506 SQLITE_TESTCTRL_EXPLAIN_STMT = 19 507 SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS = 29 508 SQLITE_TESTCTRL_FAULT_INSTALL = 9 509 SQLITE_TESTCTRL_FIRST = 5 510 SQLITE_TESTCTRL_IMPOSTER = 25 511 SQLITE_TESTCTRL_INTERNAL_FUNCTIONS = 17 512 SQLITE_TESTCTRL_ISINIT = 23 513 SQLITE_TESTCTRL_ISKEYWORD = 16 514 SQLITE_TESTCTRL_LAST = 33 515 SQLITE_TESTCTRL_LOCALTIME_FAULT = 18 516 SQLITE_TESTCTRL_LOGEST = 33 517 SQLITE_TESTCTRL_NEVER_CORRUPT = 20 518 SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD = 19 519 SQLITE_TESTCTRL_OPTIMIZATIONS = 15 520 SQLITE_TESTCTRL_PARSER_COVERAGE = 26 521 SQLITE_TESTCTRL_PENDING_BYTE = 11 522 SQLITE_TESTCTRL_PRNG_RESET = 7 523 SQLITE_TESTCTRL_PRNG_RESTORE = 6 524 SQLITE_TESTCTRL_PRNG_SAVE = 5 525 SQLITE_TESTCTRL_PRNG_SEED = 28 526 SQLITE_TESTCTRL_RESERVE = 14 527 SQLITE_TESTCTRL_RESULT_INTREAL = 27 528 SQLITE_TESTCTRL_SCRATCHMALLOC = 17 529 SQLITE_TESTCTRL_SEEK_COUNT = 30 530 SQLITE_TESTCTRL_SORTER_MMAP = 24 531 SQLITE_TESTCTRL_TRACEFLAGS = 31 532 SQLITE_TESTCTRL_TUNE = 32 533 SQLITE_TESTCTRL_VDBE_COVERAGE = 21 534 SQLITE_TEXT = 3 535 SQLITE_THREADSAFE = 1 536 SQLITE_TOOBIG = 18 537 SQLITE_TRACE_CLOSE = 0x08 538 SQLITE_TRACE_PROFILE = 0x02 539 SQLITE_TRACE_ROW = 0x04 540 SQLITE_TRACE_STMT = 0x01 541 SQLITE_TRANSACTION = 22 542 SQLITE_TXN_NONE = 0 543 SQLITE_TXN_READ = 1 544 SQLITE_TXN_WRITE = 2 545 SQLITE_UPDATE = 23 546 SQLITE_UTF16 = 4 547 SQLITE_UTF16BE = 3 548 SQLITE_UTF16LE = 2 549 SQLITE_UTF16_ALIGNED = 8 550 SQLITE_UTF8 = 1 551 SQLITE_VERSION = "3.39.3" 552 SQLITE_VERSION_NUMBER = 3039003 553 SQLITE_VTAB_CONSTRAINT_SUPPORT = 1 554 SQLITE_VTAB_DIRECTONLY = 3 555 SQLITE_VTAB_INNOCUOUS = 2 556 SQLITE_WARNING = 28 557 SQLITE_WARNING_AUTOINDEX = 284 558 SQLITE_WIN32_DATA_DIRECTORY_TYPE = 1 559 SQLITE_WIN32_TEMP_DIRECTORY_TYPE = 2 560 TMP_MAX = 308915776 561 UNIQUE_TABLE_NAME = "t592690916721053953805701627921227776" 562 X_ASSERT_H_ = 0 563 X_ERRNO_T_DEFINED = 0 564 X_FILE_OFFSET_BITS = 64 565 X_FSTDIO = 0 566 X_FTRUNCATE_DECLARED = 0 567 X_FTS5_H = 0 568 X_HAVE_SQLITE_CONFIG_H = 1 569 X_IOFBF = 0 570 X_IOLBF = 1 571 X_IONBF = 2 572 X_LOCALE_T_DEFINED = 0 573 X_LP64 = 1 574 X_LSEEK_DECLARED = 0 575 X_MACHINE_STDARG_H_ = 0 576 X_MACHINE__LIMITS_H_ = 0 577 X_MACHINE__TYPES_H_ = 0 578 X_MMAP_DECLARED = 0 579 X_Nonnull = 0 580 X_Null_unspecified = 0 581 X_Nullable = 0 582 X_OFF64_T_DECLARED = 0 583 X_OFF_T_DECLARED = 0 584 X_RSIZE_T_DEFINED = 0 585 X_SIZE_T_DECLARED = 0 586 X_SQLITE3RTREE_H_ = 0 587 X_SSIZE_T_DECLARED = 0 588 X_STDFILE_DECLARED = 0 589 X_STDIO_H_ = 0 590 X_STDSTREAM_DECLARED = 0 591 X_STRINGS_H_ = 0 592 X_STRING_H_ = 0 593 X_SWAB_DECLARED = 0 594 X_SYS_CDEFS_H_ = 0 595 X_SYS__STDARG_H_ = 0 596 X_SYS__TYPES_H_ = 0 597 X_TRUNCATE_DECLARED = 0 598 X_VA_LIST_DECLARED = 0 599 X_XLOCALE_STRING1_H = 0 600 X_XLOCALE_STRINGS1_H = 0 601 Unix = 1 602 CRTIMPORT = 0 603 DLLIMPORT = 0 604 INLINE = 0 605 MP_DIGIT_DECLARED = 0 606 MP_INT_DECLARED = 0 607 NUM_STATIC_TOKENS = 20 608 SQLITE_TCLAPI = 0 609 TCL_ALLOW_INLINE_COMPILATION = 0x20000 610 TCL_ALL_EVENTS = -3 611 TCL_ALPHA_RELEASE = 0 612 TCL_APPEND_VALUE = 4 613 TCL_ARGV_CONSTANT = 15 614 TCL_ARGV_END = 23 615 TCL_ARGV_FLOAT = 19 616 TCL_ARGV_FUNC = 20 617 TCL_ARGV_GENFUNC = 21 618 TCL_ARGV_HELP = 22 619 TCL_ARGV_INT = 16 620 TCL_ARGV_REST = 18 621 TCL_ARGV_STRING = 17 622 TCL_BETA_RELEASE = 1 623 TCL_BREAK = 3 624 TCL_CANCEL_UNWIND = 0x100000 625 TCL_CHANNEL_THREAD_INSERT = 0 626 TCL_CHANNEL_THREAD_REMOVE = 1 627 TCL_CLOSE_READ = 2 628 TCL_CLOSE_WRITE = 4 629 TCL_CONTINUE = 4 630 TCL_CONVERT_MULTIBYTE = -1 631 TCL_CONVERT_NOSPACE = -4 632 TCL_CONVERT_SYNTAX = -2 633 TCL_CONVERT_UNKNOWN = -3 634 TCL_CREATE_HARD_LINK = 0x02 635 TCL_CREATE_SYMBOLIC_LINK = 0x01 636 TCL_CUSTOM_PTR_KEYS = -1 637 TCL_CUSTOM_TYPE_KEYS = -2 638 TCL_DONT_QUOTE_HASH = 8 639 TCL_DONT_USE_BRACES = 1 640 TCL_DONT_WAIT = 2 641 TCL_DOUBLE_SPACE = 27 642 TCL_DSTRING_STATIC_SIZE = 200 643 TCL_ENCODING_CHAR_LIMIT = 0x10 644 TCL_ENCODING_END = 0x02 645 TCL_ENCODING_NO_TERMINATE = 0x08 646 TCL_ENCODING_START = 0x01 647 TCL_ENCODING_STOPONERROR = 0x04 648 TCL_ENFORCE_MODE = 16 649 TCL_ENSEMBLE_PREFIX = 0x02 650 TCL_ERROR = 1 651 TCL_EVAL_DIRECT = 0x040000 652 TCL_EVAL_GLOBAL = 0x020000 653 TCL_EVAL_INVOKE = 0x080000 654 TCL_EVAL_NOERR = 0x200000 655 TCL_EXACT = 1 656 TCL_EXCEPTION = 8 657 TCL_FILE_EVENTS = 8 658 TCL_FINAL_RELEASE = 2 659 TCL_GLOBAL_ONLY = 1 660 TCL_GLOB_PERM_HIDDEN = 2 661 TCL_GLOB_PERM_R = 4 662 TCL_GLOB_PERM_RONLY = 1 663 TCL_GLOB_PERM_W = 8 664 TCL_GLOB_PERM_X = 16 665 TCL_GLOB_TYPE_BLOCK = 1 666 TCL_GLOB_TYPE_CHAR = 2 667 TCL_GLOB_TYPE_DIR = 4 668 TCL_GLOB_TYPE_FILE = 16 669 TCL_GLOB_TYPE_LINK = 32 670 TCL_GLOB_TYPE_MOUNT = 128 671 TCL_GLOB_TYPE_PIPE = 8 672 TCL_GLOB_TYPE_SOCK = 64 673 TCL_HASH_KEY_RANDOMIZE_HASH = 0x1 674 TCL_HASH_KEY_STORE_HASH = 1 675 TCL_HASH_KEY_SYSTEM_HASH = 0x2 676 TCL_HASH_KEY_TYPE_VERSION = 1 677 TCL_IDLE_EVENTS = 32 678 TCL_INTEGER_SPACE = 24 679 TCL_INTERP_DESTROYED = 0x100 680 TCL_LEAVE_ERR_MSG = 0x200 681 TCL_LIMIT_COMMANDS = 0x01 682 TCL_LIMIT_TIME = 0x02 683 TCL_LINK_BOOLEAN = 3 684 TCL_LINK_CHAR = 6 685 TCL_LINK_DOUBLE = 2 686 TCL_LINK_FLOAT = 13 687 TCL_LINK_INT = 1 688 TCL_LINK_LONG = 11 689 TCL_LINK_READ_ONLY = 0x80 690 TCL_LINK_SHORT = 8 691 TCL_LINK_STRING = 4 692 TCL_LINK_UCHAR = 7 693 TCL_LINK_UINT = 10 694 TCL_LINK_ULONG = 12 695 TCL_LINK_USHORT = 9 696 TCL_LINK_WIDE_INT = 5 697 TCL_LINK_WIDE_UINT = 14 698 TCL_LIST_ELEMENT = 8 699 TCL_LL_MODIFIER = "ll" 700 TCL_LOAD_GLOBAL = 1 701 TCL_LOAD_LAZY = 2 702 TCL_MAJOR_VERSION = 8 703 TCL_MATCH_NOCASE = 1 704 TCL_MAX_PREC = 17 705 TCL_MINOR_VERSION = 6 706 TCL_MODE_BLOCKING = 0 707 TCL_MODE_NONBLOCKING = 1 708 TCL_NAMESPACE_ONLY = 2 709 TCL_NORETURN1 = 0 710 TCL_NO_EVAL = 0x010000 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.6.12" 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 = 12 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.6" 784 TCL_WINDOW_EVENTS = 4 785 TCL_WRITABLE = 4 786 TCL_ZLIB_COMPRESS_BEST = 9 787 TCL_ZLIB_COMPRESS_DEFAULT = -1 788 TCL_ZLIB_COMPRESS_FAST = 1 789 TCL_ZLIB_COMPRESS_NONE = 0 790 TCL_ZLIB_FINALIZE = 4 791 TCL_ZLIB_FLUSH = 2 792 TCL_ZLIB_FORMAT_AUTO = 8 793 TCL_ZLIB_FORMAT_GZIP = 4 794 TCL_ZLIB_FORMAT_RAW = 1 795 TCL_ZLIB_FORMAT_ZLIB = 2 796 TCL_ZLIB_FULLFLUSH = 3 797 TCL_ZLIB_NO_FLUSH = 0 798 TCL_ZLIB_STREAM_DEFLATE = 16 799 TCL_ZLIB_STREAM_INFLATE = 32 800 X_CLIENTDATA = 0 801 X_TCL = 0 802 X_TCLDECLS = 0 803 X_TCLPLATDECLS = 0 804 X_FTSINT_H = 0 805 FTS3_TOK_SCHEMA = "CREATE TABLE x(input HIDDEN, token, start, end, position)" 806 APND_MARK_FOS_SZ = 8 807 APND_MARK_PREFIX = "Start-Of-SQLite3-" 808 APND_MARK_PREFIX_SZ = 17 809 APND_MARK_SIZE = 25 810 APND_MAX_SIZE = 1073741824 811 APND_ROUNDUP = 4096 812 SQLITE3EXT_H = 0 813 SQLITE_EXTENSION_INIT1 = 0 814 SQLITE_EXTENSION_INIT3 = 0 815 AMATCH_COL_COMMAND = 3 816 AMATCH_COL_DISTANCE = 1 817 AMATCH_COL_LANGUAGE = 2 818 AMATCH_COL_NWORD = 4 819 AMATCH_COL_WORD = 0 820 AMATCH_MX_COST = 1000 821 AMATCH_MX_LANGID = 2147483647 822 AMATCH_MX_LENGTH = 50 823 EXIT_FAILURE = 1 824 EXIT_SUCCESS = 0 825 RAND_MAX = 0x7fffffff 826 X_CACHED_RUNES = 256 827 X_CRMASK = -256 828 X_CTYPE_A = 0x00000100 829 X_CTYPE_B = 0x00020000 830 X_CTYPE_C = 0x00000200 831 X_CTYPE_D = 0x00000400 832 X_CTYPE_G = 0x00000800 833 X_CTYPE_H_ = 0 834 X_CTYPE_I = 0x00080000 835 X_CTYPE_L = 0x00001000 836 X_CTYPE_N = 0x00400000 837 X_CTYPE_P = 0x00002000 838 X_CTYPE_Q = 0x00200000 839 X_CTYPE_R = 0x00040000 840 X_CTYPE_S = 0x00004000 841 X_CTYPE_SW0 = 0x20000000 842 X_CTYPE_SW1 = 0x40000000 843 X_CTYPE_SW2 = 0x80000000 844 X_CTYPE_SW3 = 0xc0000000 845 X_CTYPE_SWM = 0xe0000000 846 X_CTYPE_SWS = 30 847 X_CTYPE_T = 0x00100000 848 X_CTYPE_U = 0x00008000 849 X_CTYPE_X = 0x00010000 850 X_MKDTEMP_DECLARED = 0 851 X_MKSTEMP_DECLARED = 0 852 X_MKTEMP_DECLARED = 0 853 X_RUNETYPE_H_ = 0 854 X_RUNE_MAGIC_1 = "RuneMagi" 855 X_RUNE_T_DECLARED = 0 856 X_STDLIB_H_ = 0 857 X_WCHAR_T_DECLARED = 0 858 X_XLOCALE_CTYPE_H = 0 859 X_XLOCALE_RUN_FUNCTIONS_DEFINED = 1 860 CARRAY_COLUMN_COUNT = 2 861 CARRAY_COLUMN_CTYPE = 3 862 CARRAY_COLUMN_POINTER = 1 863 CARRAY_COLUMN_VALUE = 0 864 CARRAY_DOUBLE = 2 865 CARRAY_INT32 = 0 866 CARRAY_INT64 = 1 867 CARRAY_TEXT = 3 868 CLOSURE_COL_DEPTH = 1 869 CLOSURE_COL_ID = 0 870 CLOSURE_COL_IDCOLUMN = 4 871 CLOSURE_COL_PARENTCOLUMN = 5 872 CLOSURE_COL_ROOT = 2 873 CLOSURE_COL_TABLENAME = 3 874 CSVTEST_FIDX = 0x0001 875 CSV_INBUFSZ = 1024 876 CSV_MXERR = 200 877 EXPLN_COLUMN_ADDR = 0 878 EXPLN_COLUMN_COMMENT = 7 879 EXPLN_COLUMN_OPCODE = 1 880 EXPLN_COLUMN_P1 = 2 881 EXPLN_COLUMN_P2 = 3 882 EXPLN_COLUMN_P3 = 4 883 EXPLN_COLUMN_P4 = 5 884 EXPLN_COLUMN_P5 = 6 885 EXPLN_COLUMN_SQL = 8 886 ACCESSPERMS = 511 887 ALLPERMS = 4095 888 AT_EACCESS = 0x0100 889 AT_EMPTY_PATH = 0x4000 890 AT_FDCWD = -100 891 AT_REMOVEDIR = 0x0800 892 AT_RESOLVE_BENEATH = 0x2000 893 AT_SYMLINK_FOLLOW = 0x0400 894 AT_SYMLINK_NOFOLLOW = 0x0200 895 BIG_ENDIAN = 4321 896 BYTE_ORDER = 1234 897 CLK_TCK = 128 898 CLOCKS_PER_SEC = 128 899 CLOCK_BOOTTIME = 5 900 CLOCK_MONOTONIC = 4 901 CLOCK_MONOTONIC_COARSE = 12 902 CLOCK_MONOTONIC_FAST = 12 903 CLOCK_MONOTONIC_PRECISE = 11 904 CLOCK_PROCESS_CPUTIME_ID = 15 905 CLOCK_PROF = 2 906 CLOCK_REALTIME = 0 907 CLOCK_REALTIME_COARSE = 10 908 CLOCK_REALTIME_FAST = 10 909 CLOCK_REALTIME_PRECISE = 9 910 CLOCK_SECOND = 13 911 CLOCK_THREAD_CPUTIME_ID = 14 912 CLOCK_UPTIME = 5 913 CLOCK_UPTIME_FAST = 8 914 CLOCK_UPTIME_PRECISE = 7 915 CLOCK_VIRTUAL = 1 916 CLOSE_RANGE_CLOEXEC = 4 917 CPUCLOCK_WHICH_PID = 0 918 CPUCLOCK_WHICH_TID = 1 919 DEFFILEMODE = 438 920 DIRBLKSIZ = 1024 921 DST_AUST = 2 922 DST_CAN = 6 923 DST_EET = 5 924 DST_MET = 4 925 DST_NONE = 0 926 DST_USA = 1 927 DST_WET = 3 928 DTF_HIDEW = 0x0001 929 DTF_NODUP = 0x0002 930 DTF_REWIND = 0x0004 931 DT_BLK = 6 932 DT_CHR = 2 933 DT_DIR = 4 934 DT_FIFO = 1 935 DT_LNK = 10 936 DT_REG = 8 937 DT_SOCK = 12 938 DT_UNKNOWN = 0 939 DT_WHT = 14 940 E2BIG = 7 941 EACCES = 13 942 EADDRINUSE = 48 943 EADDRNOTAVAIL = 49 944 EAFNOSUPPORT = 47 945 EAGAIN = 35 946 EALREADY = 37 947 EAUTH = 80 948 EBADF = 9 949 EBADMSG = 89 950 EBADRPC = 72 951 EBUSY = 16 952 ECANCELED = 85 953 ECAPMODE = 94 954 ECHILD = 10 955 ECONNABORTED = 53 956 ECONNREFUSED = 61 957 ECONNRESET = 54 958 EDEADLK = 11 959 EDESTADDRREQ = 39 960 EDOM = 33 961 EDOOFUS = 88 962 EDQUOT = 69 963 EEXIST = 17 964 EFAULT = 14 965 EFBIG = 27 966 EFTYPE = 79 967 EHOSTDOWN = 64 968 EHOSTUNREACH = 65 969 EIDRM = 82 970 EILSEQ = 86 971 EINPROGRESS = 36 972 EINTEGRITY = 97 973 EINTR = 4 974 EINVAL = 22 975 EIO = 5 976 EISCONN = 56 977 EISDIR = 21 978 ELAST = 97 979 ELOOP = 62 980 EMFILE = 24 981 EMLINK = 31 982 EMSGSIZE = 40 983 EMULTIHOP = 90 984 ENAMETOOLONG = 63 985 ENEEDAUTH = 81 986 ENETDOWN = 50 987 ENETRESET = 52 988 ENETUNREACH = 51 989 ENFILE = 23 990 ENOATTR = 87 991 ENOBUFS = 55 992 ENODEV = 19 993 ENOENT = 2 994 ENOEXEC = 8 995 ENOLCK = 77 996 ENOLINK = 91 997 ENOMEM = 12 998 ENOMSG = 83 999 ENOPROTOOPT = 42 1000 ENOSPC = 28 1001 ENOSYS = 78 1002 ENOTBLK = 15 1003 ENOTCAPABLE = 93 1004 ENOTCONN = 57 1005 ENOTDIR = 20 1006 ENOTEMPTY = 66 1007 ENOTRECOVERABLE = 95 1008 ENOTSOCK = 38 1009 ENOTSUP = 45 1010 ENOTTY = 25 1011 ENXIO = 6 1012 EOPNOTSUPP = 45 1013 EOVERFLOW = 84 1014 EOWNERDEAD = 96 1015 EPERM = 1 1016 EPFNOSUPPORT = 46 1017 EPIPE = 32 1018 EPROCLIM = 67 1019 EPROCUNAVAIL = 76 1020 EPROGMISMATCH = 75 1021 EPROGUNAVAIL = 74 1022 EPROTO = 92 1023 EPROTONOSUPPORT = 43 1024 EPROTOTYPE = 41 1025 ERANGE = 34 1026 EREMOTE = 71 1027 EROFS = 30 1028 ERPCMISMATCH = 73 1029 ESHUTDOWN = 58 1030 ESOCKTNOSUPPORT = 44 1031 ESPIPE = 29 1032 ESRCH = 3 1033 ESTALE = 70 1034 ETIMEDOUT = 60 1035 ETOOMANYREFS = 59 1036 ETXTBSY = 26 1037 EUSERS = 68 1038 EWOULDBLOCK = 35 1039 EXDEV = 18 1040 FAPPEND = 8 1041 FASYNC = 64 1042 FDSYNC = 16777216 1043 FD_CLOEXEC = 1 1044 FD_NONE = -200 1045 FD_SETSIZE = 1024 1046 FFSYNC = 128 1047 FNDELAY = 4 1048 FNONBLOCK = 4 1049 FRDAHEAD = 512 1050 FREAD = 0x0001 1051 FSDIR_COLUMN_DATA = 3 1052 FSDIR_COLUMN_DIR = 5 1053 FSDIR_COLUMN_MODE = 1 1054 FSDIR_COLUMN_MTIME = 2 1055 FSDIR_COLUMN_NAME = 0 1056 FSDIR_COLUMN_PATH = 4 1057 FSDIR_SCHEMA = "(name,mode,mtime,data,path HIDDEN,dir HIDDEN)" 1058 FWRITE = 0x0002 1059 F_ADD_SEALS = 19 1060 F_CANCEL = 5 1061 F_DUP2FD = 10 1062 F_DUP2FD_CLOEXEC = 18 1063 F_DUPFD = 0 1064 F_DUPFD_CLOEXEC = 17 1065 F_GETFD = 1 1066 F_GETFL = 3 1067 F_GETLK = 11 1068 F_GETOWN = 5 1069 F_GET_SEALS = 20 1070 F_ISUNIONSTACK = 21 1071 F_KINFO = 22 1072 F_LOCK = 1 1073 F_OGETLK = 7 1074 F_OK = 0 1075 F_OSETLK = 8 1076 F_OSETLKW = 9 1077 F_RDAHEAD = 16 1078 F_RDLCK = 1 1079 F_READAHEAD = 15 1080 F_SEAL_GROW = 0x0004 1081 F_SEAL_SEAL = 0x0001 1082 F_SEAL_SHRINK = 0x0002 1083 F_SEAL_WRITE = 0x0008 1084 F_SETFD = 2 1085 F_SETFL = 4 1086 F_SETLK = 12 1087 F_SETLKW = 13 1088 F_SETLK_REMOTE = 14 1089 F_SETOWN = 6 1090 F_TEST = 3 1091 F_TLOCK = 2 1092 F_ULOCK = 0 1093 F_UNLCK = 2 1094 F_UNLCKSYS = 4 1095 F_WRLCK = 3 1096 ITIMER_PROF = 2 1097 ITIMER_REAL = 0 1098 ITIMER_VIRTUAL = 1 1099 LITTLE_ENDIAN = 1234 1100 LOCK_EX = 0x02 1101 LOCK_NB = 0x04 1102 LOCK_SH = 0x01 1103 LOCK_UN = 0x08 1104 L_INCR = 1 1105 L_SET = 0 1106 L_XTND = 2 1107 MAXNAMLEN = 255 1108 O_ACCMODE = 0x0003 1109 O_APPEND = 0x0008 1110 O_ASYNC = 0x0040 1111 O_CLOEXEC = 0x00100000 1112 O_CREAT = 0x0200 1113 O_DIRECT = 0x00010000 1114 O_DIRECTORY = 0x00020000 1115 O_DSYNC = 0x01000000 1116 O_EMPTY_PATH = 0x02000000 1117 O_EXCL = 0x0800 1118 O_EXEC = 0x00040000 1119 O_EXLOCK = 0x0020 1120 O_FSYNC = 0x0080 1121 O_NDELAY = 4 1122 O_NOCTTY = 0x8000 1123 O_NOFOLLOW = 0x0100 1124 O_NONBLOCK = 0x0004 1125 O_PATH = 0x00400000 1126 O_RDONLY = 0x0000 1127 O_RDWR = 0x0002 1128 O_RESOLVE_BENEATH = 0x00800000 1129 O_SEARCH = 262144 1130 O_SHLOCK = 0x0010 1131 O_SYNC = 0x0080 1132 O_TRUNC = 0x0400 1133 O_TTY_INIT = 0x00080000 1134 O_VERIFY = 0x00200000 1135 O_WRONLY = 0x0001 1136 PDP_ENDIAN = 3412 1137 POSIX_FADV_DONTNEED = 4 1138 POSIX_FADV_NOREUSE = 5 1139 POSIX_FADV_NORMAL = 0 1140 POSIX_FADV_RANDOM = 1 1141 POSIX_FADV_SEQUENTIAL = 2 1142 POSIX_FADV_WILLNEED = 3 1143 RFCENVG = 2048 1144 RFCFDG = 4096 1145 RFCNAMEG = 1024 1146 RFENVG = 2 1147 RFFDG = 4 1148 RFFLAGS = 2416930932 1149 RFHIGHPID = 262144 1150 RFKERNELONLY = 268828672 1151 RFLINUXTHPN = 65536 1152 RFMEM = 32 1153 RFNAMEG = 1 1154 RFNOTEG = 8 1155 RFNOWAIT = 64 1156 RFPPWAIT = 2147483648 1157 RFPROC = 16 1158 RFPROCDESC = 268435456 1159 RFSIGSHARE = 16384 1160 RFSPAWN = 2147483648 1161 RFSTOPPED = 131072 1162 RFTHREAD = 8192 1163 RFTSIGMASK = 0xFF 1164 RFTSIGSHIFT = 20 1165 RFTSIGZMB = 524288 1166 R_OK = 0x04 1167 SBT_MAX = 0x7fffffffffffffff 1168 SEEK_DATA = 3 1169 SEEK_HOLE = 4 1170 SF_APPEND = 0x00040000 1171 SF_ARCHIVED = 0x00010000 1172 SF_IMMUTABLE = 0x00020000 1173 SF_NOUNLINK = 0x00100000 1174 SF_SETTABLE = 0xffff0000 1175 SF_SNAPSHOT = 0x00200000 1176 STDERR_FILENO = 2 1177 STDIN_FILENO = 0 1178 STDOUT_FILENO = 1 1179 SWAPOFF_FORCE = 0x00000001 1180 S_BLKSIZE = 512 1181 S_IEXEC = 64 1182 S_IFBLK = 0060000 1183 S_IFCHR = 0020000 1184 S_IFDIR = 0040000 1185 S_IFIFO = 0010000 1186 S_IFLNK = 0120000 1187 S_IFMT = 0170000 1188 S_IFREG = 0100000 1189 S_IFSOCK = 0140000 1190 S_IFWHT = 0160000 1191 S_IREAD = 256 1192 S_IRGRP = 0000040 1193 S_IROTH = 0000004 1194 S_IRUSR = 0000400 1195 S_IRWXG = 0000070 1196 S_IRWXO = 0000007 1197 S_IRWXU = 0000700 1198 S_ISGID = 0002000 1199 S_ISTXT = 0001000 1200 S_ISUID = 0004000 1201 S_ISVTX = 0001000 1202 S_IWGRP = 0000020 1203 S_IWOTH = 0000002 1204 S_IWRITE = 128 1205 S_IWUSR = 0000200 1206 S_IXGRP = 0000010 1207 S_IXOTH = 0000001 1208 S_IXUSR = 0000100 1209 TIMER_ABSTIME = 0x1 1210 TIMER_RELTIME = 0x0 1211 TIME_UTC = 1 1212 UF_APPEND = 0x00000004 1213 UF_ARCHIVE = 0x00000800 1214 UF_HIDDEN = 0x00008000 1215 UF_IMMUTABLE = 0x00000002 1216 UF_NODUMP = 0x00000001 1217 UF_NOUNLINK = 0x00000010 1218 UF_OFFLINE = 0x00000200 1219 UF_OPAQUE = 0x00000008 1220 UF_READONLY = 0x00001000 1221 UF_REPARSE = 0x00000400 1222 UF_SETTABLE = 0x0000ffff 1223 UF_SPARSE = 0x00000100 1224 UF_SYSTEM = 0x00000080 1225 UTIME_NOW = -1 1226 UTIME_OMIT = -2 1227 W_OK = 0x02 1228 X_OK = 0x01 1229 X_ACCMODE_T_DECLARED = 0 1230 X_BIG_ENDIAN = 4321 1231 X_BLKCNT_T_DECLARED = 0 1232 X_BLKSIZE_T_DECLARED = 0 1233 X_BYTE_ORDER = 1234 1234 X_CAP_IOCTL_T_DECLARED = 0 1235 X_CAP_RIGHTS_T_DECLARED = 0 1236 X_CLOCKID_T_DECLARED = 0 1237 X_CLOCK_T_DECLARED = 0 1238 X_CS_PATH = 1 1239 X_CS_POSIX_V6_ILP32_OFF32_CFLAGS = 2 1240 X_CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 3 1241 X_CS_POSIX_V6_ILP32_OFF32_LIBS = 4 1242 X_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 5 1243 X_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 6 1244 X_CS_POSIX_V6_ILP32_OFFBIG_LIBS = 7 1245 X_CS_POSIX_V6_LP64_OFF64_CFLAGS = 8 1246 X_CS_POSIX_V6_LP64_OFF64_LDFLAGS = 9 1247 X_CS_POSIX_V6_LP64_OFF64_LIBS = 10 1248 X_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 11 1249 X_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 12 1250 X_CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 13 1251 X_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = 14 1252 X_DEV_T_DECLARED = 0 1253 X_DIRENT_H_ = 0 1254 X_FFLAGS_T_DECLARED = 0 1255 X_FSBLKCNT_T_DECLARED = 0 1256 X_GETOPT_DECLARED = 0 1257 X_GID_T_DECLARED = 0 1258 X_ID_T_DECLARED = 0 1259 X_INO_T_DECLARED = 0 1260 X_INT16_T_DECLARED = 0 1261 X_INT32_T_DECLARED = 0 1262 X_INT64_T_DECLARED = 0 1263 X_INT8_T_DECLARED = 0 1264 X_INTMAX_T_DECLARED = 0 1265 X_INTPTR_T_DECLARED = 0 1266 X_IN_ADDR_T_DECLARED = 0 1267 X_IN_PORT_T_DECLARED = 0 1268 X_KEY_T_DECLARED = 0 1269 X_LITTLE_ENDIAN = 1234 1270 X_LWPID_T_DECLARED = 0 1271 X_MACHINE_ENDIAN_H_ = 0 1272 X_MKNOD_DECLARED = 0 1273 X_MODE_T_DECLARED = 0 1274 X_MQD_T_DECLARED = 0 1275 X_NLINK_T_DECLARED = 0 1276 X_OPTRESET_DECLARED = 0 1277 X_PC_ACL_EXTENDED = 59 1278 X_PC_ACL_NFS4 = 64 1279 X_PC_ACL_PATH_MAX = 60 1280 X_PC_ALLOC_SIZE_MIN = 10 1281 X_PC_ASYNC_IO = 53 1282 X_PC_CAP_PRESENT = 61 1283 X_PC_CHOWN_RESTRICTED = 7 1284 X_PC_FILESIZEBITS = 12 1285 X_PC_INF_PRESENT = 62 1286 X_PC_LINK_MAX = 1 1287 X_PC_MAC_PRESENT = 63 1288 X_PC_MAX_CANON = 2 1289 X_PC_MAX_INPUT = 3 1290 X_PC_MIN_HOLE_SIZE = 21 1291 X_PC_NAME_MAX = 4 1292 X_PC_NO_TRUNC = 8 1293 X_PC_PATH_MAX = 5 1294 X_PC_PIPE_BUF = 6 1295 X_PC_PRIO_IO = 54 1296 X_PC_REC_INCR_XFER_SIZE = 14 1297 X_PC_REC_MAX_XFER_SIZE = 15 1298 X_PC_REC_MIN_XFER_SIZE = 16 1299 X_PC_REC_XFER_ALIGN = 17 1300 X_PC_SYMLINK_MAX = 18 1301 X_PC_SYNC_IO = 55 1302 X_PC_VDISABLE = 9 1303 X_PDP_ENDIAN = 3412 1304 X_PID_T_DECLARED = 0 1305 X_POSIX2_CHAR_TERM = 1 1306 X_POSIX2_C_BIND = 200112 1307 X_POSIX2_C_DEV = -1 1308 X_POSIX2_FORT_DEV = -1 1309 X_POSIX2_FORT_RUN = 200112 1310 X_POSIX2_LOCALEDEF = -1 1311 X_POSIX2_PBS = -1 1312 X_POSIX2_PBS_ACCOUNTING = -1 1313 X_POSIX2_PBS_CHECKPOINT = -1 1314 X_POSIX2_PBS_LOCATE = -1 1315 X_POSIX2_PBS_MESSAGE = -1 1316 X_POSIX2_PBS_TRACK = -1 1317 X_POSIX2_SW_DEV = -1 1318 X_POSIX2_UPE = 200112 1319 X_POSIX2_VERSION = 199212 1320 X_POSIX_ADVISORY_INFO = 200112 1321 X_POSIX_ASYNCHRONOUS_IO = 200112 1322 X_POSIX_BARRIERS = 200112 1323 X_POSIX_CHOWN_RESTRICTED = 1 1324 X_POSIX_CLOCK_SELECTION = -1 1325 X_POSIX_CPUTIME = 200112 1326 X_POSIX_FSYNC = 200112 1327 X_POSIX_IPV6 = 0 1328 X_POSIX_JOB_CONTROL = 1 1329 X_POSIX_MAPPED_FILES = 200112 1330 X_POSIX_MEMLOCK = -1 1331 X_POSIX_MEMLOCK_RANGE = 200112 1332 X_POSIX_MEMORY_PROTECTION = 200112 1333 X_POSIX_MESSAGE_PASSING = 200112 1334 X_POSIX_MONOTONIC_CLOCK = 200112 1335 X_POSIX_NO_TRUNC = 1 1336 X_POSIX_PRIORITIZED_IO = -1 1337 X_POSIX_PRIORITY_SCHEDULING = 0 1338 X_POSIX_RAW_SOCKETS = 200112 1339 X_POSIX_READER_WRITER_LOCKS = 200112 1340 X_POSIX_REALTIME_SIGNALS = 200112 1341 X_POSIX_REGEXP = 1 1342 X_POSIX_SEMAPHORES = 200112 1343 X_POSIX_SHARED_MEMORY_OBJECTS = 200112 1344 X_POSIX_SHELL = 1 1345 X_POSIX_SPAWN = 200112 1346 X_POSIX_SPIN_LOCKS = 200112 1347 X_POSIX_SPORADIC_SERVER = -1 1348 X_POSIX_SYNCHRONIZED_IO = -1 1349 X_POSIX_THREADS = 200112 1350 X_POSIX_THREAD_ATTR_STACKADDR = 200112 1351 X_POSIX_THREAD_ATTR_STACKSIZE = 200112 1352 X_POSIX_THREAD_CPUTIME = 200112 1353 X_POSIX_THREAD_PRIORITY_SCHEDULING = 200112 1354 X_POSIX_THREAD_PRIO_INHERIT = 200112 1355 X_POSIX_THREAD_PRIO_PROTECT = 200112 1356 X_POSIX_THREAD_PROCESS_SHARED = 200112 1357 X_POSIX_THREAD_SAFE_FUNCTIONS = -1 1358 X_POSIX_THREAD_SPORADIC_SERVER = -1 1359 X_POSIX_TIMEOUTS = 200112 1360 X_POSIX_TIMERS = 200112 1361 X_POSIX_TRACE = -1 1362 X_POSIX_TRACE_EVENT_FILTER = -1 1363 X_POSIX_TRACE_INHERIT = -1 1364 X_POSIX_TRACE_LOG = -1 1365 X_POSIX_TYPED_MEMORY_OBJECTS = -1 1366 X_POSIX_VDISABLE = 0xff 1367 X_POSIX_VERSION = 200112 1368 X_PTHREAD_T_DECLARED = 0 1369 X_QUAD_HIGHWORD = 1 1370 X_QUAD_LOWWORD = 0 1371 X_RLIM_T_DECLARED = 0 1372 X_SC_2_CHAR_TERM = 20 1373 X_SC_2_C_BIND = 18 1374 X_SC_2_C_DEV = 19 1375 X_SC_2_FORT_DEV = 21 1376 X_SC_2_FORT_RUN = 22 1377 X_SC_2_LOCALEDEF = 23 1378 X_SC_2_PBS = 59 1379 X_SC_2_PBS_ACCOUNTING = 60 1380 X_SC_2_PBS_CHECKPOINT = 61 1381 X_SC_2_PBS_LOCATE = 62 1382 X_SC_2_PBS_MESSAGE = 63 1383 X_SC_2_PBS_TRACK = 64 1384 X_SC_2_SW_DEV = 24 1385 X_SC_2_UPE = 25 1386 X_SC_2_VERSION = 17 1387 X_SC_ADVISORY_INFO = 65 1388 X_SC_AIO_LISTIO_MAX = 42 1389 X_SC_AIO_MAX = 43 1390 X_SC_AIO_PRIO_DELTA_MAX = 44 1391 X_SC_ARG_MAX = 1 1392 X_SC_ASYNCHRONOUS_IO = 28 1393 X_SC_ATEXIT_MAX = 107 1394 X_SC_BARRIERS = 66 1395 X_SC_BC_BASE_MAX = 9 1396 X_SC_BC_DIM_MAX = 10 1397 X_SC_BC_SCALE_MAX = 11 1398 X_SC_BC_STRING_MAX = 12 1399 X_SC_CHILD_MAX = 2 1400 X_SC_CLK_TCK = 3 1401 X_SC_CLOCK_SELECTION = 67 1402 X_SC_COLL_WEIGHTS_MAX = 13 1403 X_SC_CPUSET_SIZE = 122 1404 X_SC_CPUTIME = 68 1405 X_SC_DELAYTIMER_MAX = 45 1406 X_SC_EXPR_NEST_MAX = 14 1407 X_SC_FILE_LOCKING = 69 1408 X_SC_FSYNC = 38 1409 X_SC_GETGR_R_SIZE_MAX = 70 1410 X_SC_GETPW_R_SIZE_MAX = 71 1411 X_SC_HOST_NAME_MAX = 72 1412 X_SC_IOV_MAX = 56 1413 X_SC_IPV6 = 118 1414 X_SC_JOB_CONTROL = 6 1415 X_SC_LINE_MAX = 15 1416 X_SC_LOGIN_NAME_MAX = 73 1417 X_SC_MAPPED_FILES = 29 1418 X_SC_MEMLOCK = 30 1419 X_SC_MEMLOCK_RANGE = 31 1420 X_SC_MEMORY_PROTECTION = 32 1421 X_SC_MESSAGE_PASSING = 33 1422 X_SC_MONOTONIC_CLOCK = 74 1423 X_SC_MQ_OPEN_MAX = 46 1424 X_SC_MQ_PRIO_MAX = 75 1425 X_SC_NGROUPS_MAX = 4 1426 X_SC_NPROCESSORS_CONF = 57 1427 X_SC_NPROCESSORS_ONLN = 58 1428 X_SC_OPEN_MAX = 5 1429 X_SC_PAGESIZE = 47 1430 X_SC_PAGE_SIZE = 47 1431 X_SC_PHYS_PAGES = 121 1432 X_SC_PRIORITIZED_IO = 34 1433 X_SC_PRIORITY_SCHEDULING = 35 1434 X_SC_RAW_SOCKETS = 119 1435 X_SC_READER_WRITER_LOCKS = 76 1436 X_SC_REALTIME_SIGNALS = 36 1437 X_SC_REGEXP = 77 1438 X_SC_RE_DUP_MAX = 16 1439 X_SC_RTSIG_MAX = 48 1440 X_SC_SAVED_IDS = 7 1441 X_SC_SEMAPHORES = 37 1442 X_SC_SEM_NSEMS_MAX = 49 1443 X_SC_SEM_VALUE_MAX = 50 1444 X_SC_SHARED_MEMORY_OBJECTS = 39 1445 X_SC_SHELL = 78 1446 X_SC_SIGQUEUE_MAX = 51 1447 X_SC_SPAWN = 79 1448 X_SC_SPIN_LOCKS = 80 1449 X_SC_SPORADIC_SERVER = 81 1450 X_SC_STREAM_MAX = 26 1451 X_SC_SYMLOOP_MAX = 120 1452 X_SC_SYNCHRONIZED_IO = 40 1453 X_SC_THREADS = 96 1454 X_SC_THREAD_ATTR_STACKADDR = 82 1455 X_SC_THREAD_ATTR_STACKSIZE = 83 1456 X_SC_THREAD_CPUTIME = 84 1457 X_SC_THREAD_DESTRUCTOR_ITERATIONS = 85 1458 X_SC_THREAD_KEYS_MAX = 86 1459 X_SC_THREAD_PRIORITY_SCHEDULING = 89 1460 X_SC_THREAD_PRIO_INHERIT = 87 1461 X_SC_THREAD_PRIO_PROTECT = 88 1462 X_SC_THREAD_PROCESS_SHARED = 90 1463 X_SC_THREAD_SAFE_FUNCTIONS = 91 1464 X_SC_THREAD_SPORADIC_SERVER = 92 1465 X_SC_THREAD_STACK_MIN = 93 1466 X_SC_THREAD_THREADS_MAX = 94 1467 X_SC_TIMEOUTS = 95 1468 X_SC_TIMERS = 41 1469 X_SC_TIMER_MAX = 52 1470 X_SC_TRACE = 97 1471 X_SC_TRACE_EVENT_FILTER = 98 1472 X_SC_TRACE_INHERIT = 99 1473 X_SC_TRACE_LOG = 100 1474 X_SC_TTY_NAME_MAX = 101 1475 X_SC_TYPED_MEMORY_OBJECTS = 102 1476 X_SC_TZNAME_MAX = 27 1477 X_SC_V6_ILP32_OFF32 = 103 1478 X_SC_V6_ILP32_OFFBIG = 104 1479 X_SC_V6_LP64_OFF64 = 105 1480 X_SC_V6_LPBIG_OFFBIG = 106 1481 X_SC_VERSION = 8 1482 X_SC_XOPEN_CRYPT = 108 1483 X_SC_XOPEN_ENH_I18N = 109 1484 X_SC_XOPEN_LEGACY = 110 1485 X_SC_XOPEN_REALTIME = 111 1486 X_SC_XOPEN_REALTIME_THREADS = 112 1487 X_SC_XOPEN_SHM = 113 1488 X_SC_XOPEN_STREAMS = 114 1489 X_SC_XOPEN_UNIX = 115 1490 X_SC_XOPEN_VERSION = 116 1491 X_SC_XOPEN_XCU_VERSION = 117 1492 X_SELECT_DECLARED = 0 1493 X_SIGSET_T_DECLARED = 0 1494 X_SIG_MAXSIG = 128 1495 X_SIG_WORDS = 4 1496 X_SUSECONDS_T_DECLARED = 0 1497 X_SYS_DIRENT_H_ = 0 1498 X_SYS_ERRNO_H_ = 0 1499 X_SYS_FCNTL_H_ = 0 1500 X_SYS_SELECT_H_ = 0 1501 X_SYS_STAT_H_ = 0 1502 X_SYS_SYS__CLOCK_ID_H = 0 1503 X_SYS_TIMESPEC_H_ = 0 1504 X_SYS_TIME_H_ = 0 1505 X_SYS_TYPES_H_ = 0 1506 X_SYS_UNISTD_H_ = 0 1507 X_SYS__ENDIAN_H_ = 0 1508 X_SYS__PTHREADTYPES_H_ = 0 1509 X_SYS__SIGSET_H_ = 0 1510 X_SYS__STDINT_H_ = 0 1511 X_SYS__TIMESPEC_H_ = 0 1512 X_SYS__TIMEVAL_H_ = 0 1513 X_TIMER_T_DECLARED = 0 1514 X_TIME_H_ = 0 1515 X_TIME_T_DECLARED = 0 1516 X_UID_T_DECLARED = 0 1517 X_UINT16_T_DECLARED = 0 1518 X_UINT32_T_DECLARED = 0 1519 X_UINT64_T_DECLARED = 0 1520 X_UINT8_T_DECLARED = 0 1521 X_UINTMAX_T_DECLARED = 0 1522 X_UINTPTR_T_DECLARED = 0 1523 X_UNISTD_H_ = 0 1524 X_USECONDS_T_DECLARED = 0 1525 X_UTIME_H_ = 0 1526 X_V6_ILP32_OFF32 = -1 1527 X_V6_ILP32_OFFBIG = 0 1528 X_V6_LP64_OFF64 = 0 1529 X_V6_LPBIG_OFFBIG = -1 1530 X_XLOCALE_LOCALE1_H = 0 1531 X_XOPEN_CRYPT = -1 1532 X_XOPEN_ENH_I18N = -1 1533 X_XOPEN_LEGACY = -1 1534 X_XOPEN_REALTIME = -1 1535 X_XOPEN_REALTIME_THREADS = -1 1536 X_XOPEN_SHM = 1 1537 X_XOPEN_STREAMS = -1 1538 X_XOPEN_UNIX = -1 1539 FUZZER_HASH = 4001 1540 FUZZER_MX_COST = 1000 1541 FUZZER_MX_LENGTH = 50 1542 FUZZER_MX_OUTPUT_LENGTH = 100 1543 FUZZER_MX_RULEID = 2147483647 1544 FUZZER_NQUEUE = 20 1545 CC_AND = 24 1546 CC_BANG = 15 1547 CC_COMMA = 23 1548 CC_DIGIT = 3 1549 CC_DOLLAR = 4 1550 CC_DOT = 26 1551 CC_EQ = 14 1552 CC_GT = 13 1553 CC_ID = 2 1554 CC_ILLEGAL = 27 1555 CC_KYWD = 1 1556 CC_LP = 17 1557 CC_LT = 12 1558 CC_MINUS = 11 1559 CC_PERCENT = 22 1560 CC_PIPE = 10 1561 CC_PLUS = 20 1562 CC_QUOTE = 8 1563 CC_QUOTE2 = 9 1564 CC_RP = 18 1565 CC_SEMI = 19 1566 CC_SLASH = 16 1567 CC_SPACE = 7 1568 CC_STAR = 21 1569 CC_TILDA = 25 1570 CC_VARALPHA = 5 1571 CC_VARNUM = 6 1572 CC_X = 0 1573 TK_BITAND = 3 1574 TK_BITNOT = 3 1575 TK_BITOR = 3 1576 TK_BLOB = 2 1577 TK_COMMA = 3 1578 TK_CONCAT = 3 1579 TK_DOT = 3 1580 TK_EQ = 3 1581 TK_ERROR = 4 1582 TK_FLOAT = 2 1583 TK_GE = 3 1584 TK_GT = 3 1585 TK_ID = 1 1586 TK_ILLEGAL = 4 1587 TK_INTEGER = 2 1588 TK_LE = 3 1589 TK_LITERAL = 2 1590 TK_LP = 3 1591 TK_LSHIFT = 3 1592 TK_LT = 3 1593 TK_MINUS = 3 1594 TK_NAME = 1 1595 TK_NE = 3 1596 TK_PLUS = 3 1597 TK_PUNCT = 3 1598 TK_REM = 3 1599 TK_RP = 3 1600 TK_RSHIFT = 3 1601 TK_SEMI = 3 1602 TK_SLASH = 3 1603 TK_SPACE = 0 1604 TK_STAR = 3 1605 TK_STRING = 2 1606 TK_VARIABLE = 2 1607 Deliberate_fall_through = 0 1608 QPVTAB_A = 6 1609 QPVTAB_B = 7 1610 QPVTAB_C = 8 1611 QPVTAB_CN = 2 1612 QPVTAB_D = 9 1613 QPVTAB_E = 10 1614 QPVTAB_FLAGS = 11 1615 QPVTAB_IX = 1 1616 QPVTAB_NONE = 12 1617 QPVTAB_OP = 3 1618 QPVTAB_RHS = 5 1619 QPVTAB_UX = 4 1620 QPVTAB_VN = 0 1621 RE_EOF = 0 1622 RE_OP_ACCEPT = 6 1623 RE_OP_ANY = 2 1624 RE_OP_ANYSTAR = 3 1625 RE_OP_BOUNDARY = 17 1626 RE_OP_CC_EXC = 8 1627 RE_OP_CC_INC = 7 1628 RE_OP_CC_RANGE = 10 1629 RE_OP_CC_VALUE = 9 1630 RE_OP_DIGIT = 13 1631 RE_OP_FORK = 4 1632 RE_OP_GOTO = 5 1633 RE_OP_MATCH = 1 1634 RE_OP_NOTDIGIT = 14 1635 RE_OP_NOTSPACE = 16 1636 RE_OP_NOTWORD = 12 1637 RE_OP_SPACE = 15 1638 RE_OP_WORD = 11 1639 SERIES_COLUMN_START = 1 1640 SERIES_COLUMN_STEP = 3 1641 SERIES_COLUMN_STOP = 2 1642 SERIES_COLUMN_VALUE = 0 1643 CCLASS_B = 2 1644 CCLASS_C = 3 1645 CCLASS_D = 4 1646 CCLASS_DIGIT = 10 1647 CCLASS_H = 5 1648 CCLASS_L = 6 1649 CCLASS_M = 8 1650 CCLASS_OTHER = 12 1651 CCLASS_R = 7 1652 CCLASS_SILENT = 0 1653 CCLASS_SPACE = 11 1654 CCLASS_VOWEL = 1 1655 CCLASS_Y = 9 1656 FINAL_INS_COST_DIV = 4 1657 SCRIPT_ARABIC = 0x0010 1658 SCRIPT_CYRILLIC = 0x0002 1659 SCRIPT_GREEK = 0x0004 1660 SCRIPT_HEBREW = 0x0008 1661 SCRIPT_LATIN = 0x0001 1662 SPELLFIX_COL_COMMAND = 11 1663 SPELLFIX_COL_DISTANCE = 2 1664 SPELLFIX_COL_LANGID = 3 1665 SPELLFIX_COL_MATCHLEN = 5 1666 SPELLFIX_COL_PHONEHASH = 6 1667 SPELLFIX_COL_RANK = 1 1668 SPELLFIX_COL_SCOPE = 8 1669 SPELLFIX_COL_SCORE = 4 1670 SPELLFIX_COL_SOUNDSLIKE = 10 1671 SPELLFIX_COL_SRCHCNT = 9 1672 SPELLFIX_COL_TOP = 7 1673 SPELLFIX_COL_WORD = 0 1674 SPELLFIX_IDXNUM_DIST = 48 1675 SPELLFIX_IDXNUM_DISTLE = 0x20 1676 SPELLFIX_IDXNUM_DISTLT = 0x10 1677 SPELLFIX_IDXNUM_LANGID = 0x02 1678 SPELLFIX_IDXNUM_MATCH = 0x01 1679 SPELLFIX_IDXNUM_ROWID = 0x40 1680 SPELLFIX_IDXNUM_SCOPE = 0x08 1681 SPELLFIX_IDXNUM_TOP = 0x04 1682 SPELLFIX_MX_HASH = 32 1683 SPELLFIX_MX_RUN = 1 1684 SQLITE_SPELLFIX_STACKALLOC_SZ = 1024 1685 TOTYPE_BIGENDIAN = 0 1686 TOTYPE_LITTLEENDIAN = 1 1687 SWARMVTAB_MAX_OPEN = 9 1688 SQLITE_RBU_STATE_CHECKPOINT = 3 1689 SQLITE_RBU_STATE_DONE = 4 1690 SQLITE_RBU_STATE_ERROR = 5 1691 SQLITE_RBU_STATE_MOVE = 2 1692 SQLITE_RBU_STATE_OAL = 1 1693 X_SQLITE3RBU_H = 0 1694 BTREE_APPEND = 0x08 1695 BTREE_APPLICATION_ID = 8 1696 BTREE_AUTOVACUUM_FULL = 1 1697 BTREE_AUTOVACUUM_INCR = 2 1698 BTREE_AUTOVACUUM_NONE = 0 1699 BTREE_AUXDELETE = 0x04 1700 BTREE_BLOBKEY = 2 1701 BTREE_BULKLOAD = 0x00000001 1702 BTREE_DATA_VERSION = 15 1703 BTREE_DEFAULT_CACHE_SIZE = 3 1704 BTREE_FILE_FORMAT = 2 1705 BTREE_FORDELETE = 0x00000008 1706 BTREE_FREE_PAGE_COUNT = 0 1707 BTREE_HINT_RANGE = 0 1708 BTREE_INCR_VACUUM = 7 1709 BTREE_INTKEY = 1 1710 BTREE_LARGEST_ROOT_PAGE = 4 1711 BTREE_MEMORY = 2 1712 BTREE_OMIT_JOURNAL = 1 1713 BTREE_PREFORMAT = 0x80 1714 BTREE_SAVEPOSITION = 0x02 1715 BTREE_SCHEMA_VERSION = 1 1716 BTREE_SEEK_EQ = 0x00000002 1717 BTREE_SINGLE = 4 1718 BTREE_TEXT_ENCODING = 5 1719 BTREE_UNORDERED = 8 1720 BTREE_USER_VERSION = 6 1721 BTREE_WRCSR = 0x00000004 1722 COLFLAG_BUSY = 0x0100 1723 COLFLAG_GENERATED = 0x0060 1724 COLFLAG_HASCOLL = 0x0200 1725 COLFLAG_HASTYPE = 0x0004 1726 COLFLAG_HIDDEN = 0x0002 1727 COLFLAG_NOEXPAND = 0x0400 1728 COLFLAG_NOINSERT = 0x0062 1729 COLFLAG_NOTAVAIL = 0x0080 1730 COLFLAG_PRIMKEY = 0x0001 1731 COLFLAG_SORTERREF = 0x0010 1732 COLFLAG_STORED = 0x0040 1733 COLFLAG_UNIQUE = 0x0008 1734 COLFLAG_VIRTUAL = 0x0020 1735 COLNAME_COLUMN = 4 1736 COLNAME_DATABASE = 2 1737 COLNAME_DECLTYPE = 1 1738 COLNAME_N = 5 1739 COLNAME_NAME = 0 1740 COLNAME_TABLE = 3 1741 COLTYPE_ANY = 1 1742 COLTYPE_BLOB = 2 1743 COLTYPE_CUSTOM = 0 1744 COLTYPE_INT = 3 1745 COLTYPE_INTEGER = 4 1746 COLTYPE_REAL = 5 1747 COLTYPE_TEXT = 6 1748 DBFLAG_EncodingFixed = 0x0040 1749 DBFLAG_InternalFunc = 0x0020 1750 DBFLAG_PreferBuiltin = 0x0002 1751 DBFLAG_SchemaChange = 0x0001 1752 DBFLAG_SchemaKnownOk = 0x0010 1753 DBFLAG_Vacuum = 0x0004 1754 DBFLAG_VacuumInto = 0x0008 1755 DB_ResetWanted = 0x0008 1756 DB_SchemaLoaded = 0x0001 1757 DB_UnresetViews = 0x0002 1758 ENAME_NAME = 0 1759 ENAME_SPAN = 1 1760 ENAME_TAB = 2 1761 EP_Agg = 0x000010 1762 EP_CanBeNull = 0x200000 1763 EP_Collate = 0x000200 1764 EP_Commuted = 0x000400 1765 EP_ConstFunc = 0x100000 1766 EP_DblQuoted = 0x000080 1767 EP_Distinct = 0x000004 1768 EP_FixedCol = 0x000020 1769 EP_FromDDL = 0x40000000 1770 EP_HasFunc = 0x000008 1771 EP_IfNullRow = 0x040000 1772 EP_Immutable = 0x02 1773 EP_InfixFunc = 0x000100 1774 EP_InnerON = 0x000002 1775 EP_IntValue = 0x000800 1776 EP_IsFalse = 0x20000000 1777 EP_IsTrue = 0x10000000 1778 EP_Leaf = 0x800000 1779 EP_MemToken = 0x020000 1780 EP_NoReduce = 0x01 1781 EP_OuterON = 0x000001 1782 EP_Propagate = 4194824 1783 EP_Quoted = 0x4000000 1784 EP_Reduced = 0x004000 1785 EP_Skip = 0x002000 1786 EP_Static = 0x8000000 1787 EP_Subquery = 0x400000 1788 EP_Subrtn = 0x2000000 1789 EP_TokenOnly = 0x010000 1790 EP_Unlikely = 0x080000 1791 EP_VarSelect = 0x000040 1792 EP_Win = 0x008000 1793 EP_WinFunc = 0x1000000 1794 EP_xIsSelect = 0x001000 1795 EU4_EXPR = 2 1796 EU4_IDX = 1 1797 EU4_NONE = 0 1798 EXCLUSIVE_LOCK = 4 1799 EXPRDUP_REDUCE = 0x0001 1800 GCC_VERSION = 4002001 1801 HAVE_DLFCN_H = 1 1802 HAVE_FCHOWN = 1 1803 HAVE_FDATASYNC = 1 1804 HAVE_GMTIME_R = 1 1805 HAVE_INT16_T = 1 1806 HAVE_INT32_T = 1 1807 HAVE_INT64_T = 1 1808 HAVE_INT8_T = 1 1809 HAVE_INTPTR_T = 1 1810 HAVE_INTTYPES_H = 1 1811 HAVE_ISNAN = 1 1812 HAVE_LOCALTIME_R = 1 1813 HAVE_LSTAT = 1 1814 HAVE_MALLOC_H = 1 1815 HAVE_MALLOC_USABLE_SIZE = 1 1816 HAVE_MEMORY_H = 1 1817 HAVE_PREAD = 1 1818 HAVE_PWRITE = 1 1819 HAVE_READLINK = 1 1820 HAVE_STDINT_H = 1 1821 HAVE_STDLIB_H = 1 1822 HAVE_STRCHRNUL = 1 1823 HAVE_STRINGS_H = 1 1824 HAVE_STRING_H = 1 1825 HAVE_SYS_STAT_H = 1 1826 HAVE_SYS_TYPES_H = 1 1827 HAVE_UINT16_T = 1 1828 HAVE_UINT32_T = 1 1829 HAVE_UINT64_T = 1 1830 HAVE_UINT8_T = 1 1831 HAVE_UINTPTR_T = 1 1832 HAVE_UNISTD_H = 1 1833 HAVE_UTIME = 1 1834 INITFLAG_AlterAdd = 0x0003 1835 INITFLAG_AlterDrop = 0x0002 1836 INITFLAG_AlterMask = 0x0003 1837 INITFLAG_AlterRename = 0x0001 1838 INLINEFUNC_affinity = 4 1839 INLINEFUNC_coalesce = 0 1840 INLINEFUNC_expr_compare = 3 1841 INLINEFUNC_expr_implies_expr = 2 1842 INLINEFUNC_iif = 5 1843 INLINEFUNC_implies_nonnull_row = 1 1844 INLINEFUNC_sqlite_offset = 6 1845 INLINEFUNC_unlikely = 99 1846 INT16_MAX = 0x7fff 1847 INT16_MIN = -32768 1848 INT32_MAX = 0x7fffffff 1849 INT32_MIN = -2147483648 1850 INT64_MAX = 0x7fffffffffffffff 1851 INT64_MIN = -9223372036854775808 1852 INT8_MAX = 0x7f 1853 INT8_MIN = -128 1854 INTMAX_MAX = 9223372036854775807 1855 INTMAX_MIN = -9223372036854775808 1856 INTPTR_MAX = 9223372036854775807 1857 INTPTR_MIN = -9223372036854775808 1858 INT_FAST16_MAX = 2147483647 1859 INT_FAST16_MIN = -2147483648 1860 INT_FAST32_MAX = 2147483647 1861 INT_FAST32_MIN = -2147483648 1862 INT_FAST64_MAX = 9223372036854775807 1863 INT_FAST64_MIN = -9223372036854775808 1864 INT_FAST8_MAX = 2147483647 1865 INT_FAST8_MIN = -2147483648 1866 INT_LEAST16_MAX = 32767 1867 INT_LEAST16_MIN = -32768 1868 INT_LEAST32_MAX = 2147483647 1869 INT_LEAST32_MIN = -2147483648 1870 INT_LEAST64_MAX = 9223372036854775807 1871 INT_LEAST64_MIN = -9223372036854775808 1872 INT_LEAST8_MAX = 127 1873 INT_LEAST8_MIN = -128 1874 IN_INDEX_EPH = 2 1875 IN_INDEX_INDEX_ASC = 3 1876 IN_INDEX_INDEX_DESC = 4 1877 IN_INDEX_LOOP = 0x0004 1878 IN_INDEX_MEMBERSHIP = 0x0002 1879 IN_INDEX_NOOP = 5 1880 IN_INDEX_NOOP_OK = 0x0001 1881 IN_INDEX_ROWID = 1 1882 JT_CROSS = 0x02 1883 JT_ERROR = 0x80 1884 JT_INNER = 0x01 1885 JT_LEFT = 0x08 1886 JT_LTORJ = 0x40 1887 JT_NATURAL = 0x04 1888 JT_OUTER = 0x20 1889 JT_RIGHT = 0x10 1890 KEYINFO_ORDER_BIGNULL = 0x02 1891 KEYINFO_ORDER_DESC = 0x01 1892 LEGACY_SCHEMA_TABLE = "sqlite_master" 1893 LEGACY_TEMP_SCHEMA_TABLE = "sqlite_temp_master" 1894 LOCATE_NOERR = 0x02 1895 LOCATE_VIEW = 0x01 1896 LOOKASIDE_SMALL = 128 1897 LT_OBJDIR = ".libs/" 1898 M10d_Any = 1 1899 M10d_No = 2 1900 M10d_Yes = 0 1901 MEMTYPE_HEAP = 0x01 1902 MEMTYPE_LOOKASIDE = 0x02 1903 MEMTYPE_PCACHE = 0x04 1904 MSVC_VERSION = 0 1905 NC_AllowAgg = 0x000001 1906 NC_AllowWin = 0x004000 1907 NC_Complex = 0x002000 1908 NC_FromDDL = 0x040000 1909 NC_GenCol = 0x000008 1910 NC_HasAgg = 0x000010 1911 NC_HasWin = 0x008000 1912 NC_IdxExpr = 0x000020 1913 NC_InAggFunc = 0x020000 1914 NC_IsCheck = 0x000004 1915 NC_IsDDL = 0x010000 1916 NC_MinMaxAgg = 0x001000 1917 NC_NoSelect = 0x080000 1918 NC_OrderAgg = 0x8000000 1919 NC_PartIdx = 0x000002 1920 NC_SelfRef = 0x00002e 1921 NC_UAggInfo = 0x000100 1922 NC_UBaseReg = 0x000400 1923 NC_UEList = 0x000080 1924 NC_UUpsert = 0x000200 1925 NC_VarSelect = 0x000040 1926 NO_LOCK = 0 1927 OE_Abort = 2 1928 OE_Cascade = 10 1929 OE_Default = 11 1930 OE_Fail = 3 1931 OE_Ignore = 4 1932 OE_None = 0 1933 OE_Replace = 5 1934 OE_Restrict = 7 1935 OE_Rollback = 1 1936 OE_SetDflt = 9 1937 OE_SetNull = 8 1938 OE_Update = 6 1939 OMIT_TEMPDB = 0 1940 ONEPASS_MULTI = 2 1941 ONEPASS_OFF = 0 1942 ONEPASS_SINGLE = 1 1943 OPFLAG_APPEND = 0x08 1944 OPFLAG_AUXDELETE = 0x04 1945 OPFLAG_BULKCSR = 0x01 1946 OPFLAG_EPHEM = 0x01 1947 OPFLAG_FORDELETE = 0x08 1948 OPFLAG_ISNOOP = 0x40 1949 OPFLAG_ISUPDATE = 0x04 1950 OPFLAG_LASTROWID = 0x20 1951 OPFLAG_LENGTHARG = 0x40 1952 OPFLAG_NCHANGE = 0x01 1953 OPFLAG_NOCHNG = 0x01 1954 OPFLAG_NOCHNG_MAGIC = 0x6d 1955 OPFLAG_P2ISREG = 0x10 1956 OPFLAG_PERMUTE = 0x01 1957 OPFLAG_PREFORMAT = 0x80 1958 OPFLAG_SAVEPOSITION = 0x02 1959 OPFLAG_SEEKEQ = 0x02 1960 OPFLAG_TYPEOFARG = 0x80 1961 OPFLAG_USESEEKRESULT = 0x10 1962 OPFLG_IN1 = 0x02 1963 OPFLG_IN2 = 0x04 1964 OPFLG_IN3 = 0x08 1965 OPFLG_JUMP = 0x01 1966 OPFLG_OUT2 = 0x10 1967 OPFLG_OUT3 = 0x20 1968 OP_Abortable = 186 1969 OP_Add = 106 1970 OP_AddImm = 86 1971 OP_Affinity = 96 1972 OP_AggFinal = 165 1973 OP_AggInverse = 161 1974 OP_AggStep = 162 1975 OP_AggStep1 = 163 1976 OP_AggValue = 164 1977 OP_And = 44 1978 OP_AutoCommit = 1 1979 OP_BeginSubrtn = 74 1980 OP_BitAnd = 102 1981 OP_BitNot = 114 1982 OP_BitOr = 103 1983 OP_Blob = 77 1984 OP_Cast = 88 1985 OP_Checkpoint = 3 1986 OP_Clear = 145 1987 OP_Close = 122 1988 OP_ClrSubtype = 179 1989 OP_CollSeq = 85 1990 OP_Column = 94 1991 OP_ColumnsUsed = 123 1992 OP_Compare = 90 1993 OP_Concat = 111 1994 OP_Copy = 80 1995 OP_Count = 98 1996 OP_CreateBtree = 147 1997 OP_CursorHint = 182 1998 OP_CursorLock = 167 1999 OP_CursorUnlock = 168 2000 OP_DecrJumpZero = 60 2001 OP_DeferredSeek = 141 2002 OP_Delete = 130 2003 OP_Destroy = 144 2004 OP_Divide = 109 2005 OP_DropIndex = 152 2006 OP_DropTable = 151 2007 OP_DropTrigger = 154 2008 OP_ElseEq = 58 2009 OP_EndCoroutine = 68 2010 OP_Eq = 53 2011 OP_Expire = 166 2012 OP_Explain = 185 2013 OP_Filter = 63 2014 OP_FilterAdd = 180 2015 OP_FinishSeek = 143 2016 OP_FkCheck = 83 2017 OP_FkCounter = 158 2018 OP_FkIfZero = 48 2019 OP_Found = 28 2020 OP_Function = 66 2021 OP_Ge = 57 2022 OP_Gosub = 9 2023 OP_Goto = 8 2024 OP_Gt = 54 2025 OP_Halt = 70 2026 OP_HaltIfNull = 69 2027 OP_IdxDelete = 140 2028 OP_IdxGE = 42 2029 OP_IdxGT = 40 2030 OP_IdxInsert = 138 2031 OP_IdxLE = 39 2032 OP_IdxLT = 41 2033 OP_IdxRowid = 142 2034 OP_If = 15 2035 OP_IfNoHope = 25 2036 OP_IfNot = 16 2037 OP_IfNotOpen = 24 2038 OP_IfNotZero = 59 2039 OP_IfNullRow = 18 2040 OP_IfPos = 49 2041 OP_IfSmaller = 32 2042 OP_IncrVacuum = 61 2043 OP_Init = 64 2044 OP_InitCoroutine = 10 2045 OP_Insert = 128 2046 OP_Int64 = 72 2047 OP_IntCopy = 82 2048 OP_Integer = 71 2049 OP_IntegrityCk = 155 2050 OP_IsNull = 50 2051 OP_IsNullOrType = 17 2052 OP_IsTrue = 91 2053 OP_JournalMode = 4 2054 OP_Jump = 13 2055 OP_Last = 31 2056 OP_Le = 55 2057 OP_LoadAnalysis = 150 2058 OP_Lt = 56 2059 OP_MakeRecord = 97 2060 OP_MaxPgcnt = 178 2061 OP_MemMax = 159 2062 OP_Move = 79 2063 OP_Multiply = 108 2064 OP_MustBeInt = 12 2065 OP_Ne = 52 2066 OP_NewRowid = 127 2067 OP_Next = 38 2068 OP_NoConflict = 26 2069 OP_Noop = 184 2070 OP_Not = 19 2071 OP_NotExists = 30 2072 OP_NotFound = 27 2073 OP_NotNull = 51 2074 OP_Null = 75 2075 OP_NullRow = 136 2076 OP_Offset = 93 2077 OP_OffsetLimit = 160 2078 OP_Once = 14 2079 OP_OpenAutoindex = 116 2080 OP_OpenDup = 115 2081 OP_OpenEphemeral = 118 2082 OP_OpenPseudo = 121 2083 OP_OpenRead = 112 2084 OP_OpenWrite = 113 2085 OP_Or = 43 2086 OP_Pagecount = 177 2087 OP_Param = 157 2088 OP_ParseSchema = 149 2089 OP_Permutation = 89 2090 OP_Prev = 37 2091 OP_Program = 47 2092 OP_PureFunc = 65 2093 OP_ReadCookie = 99 2094 OP_Real = 153 2095 OP_RealAffinity = 87 2096 OP_ReleaseReg = 183 2097 OP_Remainder = 110 2098 OP_ReopenIdx = 101 2099 OP_ResetCount = 131 2100 OP_ResetSorter = 146 2101 OP_ResultRow = 84 2102 OP_Return = 67 2103 OP_Rewind = 35 2104 OP_RowCell = 129 2105 OP_RowData = 134 2106 OP_RowSetAdd = 156 2107 OP_RowSetRead = 45 2108 OP_RowSetTest = 46 2109 OP_Rowid = 135 2110 OP_SCopy = 81 2111 OP_Savepoint = 0 2112 OP_SeekEnd = 137 2113 OP_SeekGE = 22 2114 OP_SeekGT = 23 2115 OP_SeekHit = 125 2116 OP_SeekLE = 21 2117 OP_SeekLT = 20 2118 OP_SeekRowid = 29 2119 OP_SeekScan = 124 2120 OP_Sequence = 126 2121 OP_SequenceTest = 120 2122 OP_SetCookie = 100 2123 OP_ShiftLeft = 104 2124 OP_ShiftRight = 105 2125 OP_SoftNull = 76 2126 OP_Sort = 34 2127 OP_SorterCompare = 132 2128 OP_SorterData = 133 2129 OP_SorterInsert = 139 2130 OP_SorterNext = 36 2131 OP_SorterOpen = 119 2132 OP_SorterSort = 33 2133 OP_SqlExec = 148 2134 OP_String = 73 2135 OP_String8 = 117 2136 OP_Subtract = 107 2137 OP_TableLock = 169 2138 OP_Trace = 181 2139 OP_Transaction = 2 2140 OP_TypeCheck = 95 2141 OP_VBegin = 170 2142 OP_VColumn = 175 2143 OP_VCreate = 171 2144 OP_VDestroy = 172 2145 OP_VFilter = 6 2146 OP_VInitIn = 174 2147 OP_VNext = 62 2148 OP_VOpen = 173 2149 OP_VRename = 176 2150 OP_VUpdate = 7 2151 OP_Vacuum = 5 2152 OP_Variable = 78 2153 OP_Yield = 11 2154 OP_ZeroOrNull = 92 2155 OS_VXWORKS = 0 2156 P4_COLLSEQ = -2 2157 P4_DYNAMIC = -6 2158 P4_EXPR = -9 2159 P4_FREE_IF_LE = -6 2160 P4_FUNCCTX = -15 2161 P4_FUNCDEF = -7 2162 P4_INT32 = -3 2163 P4_INT64 = -13 2164 P4_INTARRAY = -14 2165 P4_KEYINFO = -8 2166 P4_MEM = -10 2167 P4_NOTUSED = 0 2168 P4_REAL = -12 2169 P4_STATIC = -1 2170 P4_SUBPROGRAM = -4 2171 P4_TABLE = -5 2172 P4_TRANSIENT = 0 2173 P4_VTAB = -11 2174 P5_ConstraintCheck = 3 2175 P5_ConstraintFK = 4 2176 P5_ConstraintNotNull = 1 2177 P5_ConstraintUnique = 2 2178 PACKAGE_BUGREPORT = "" 2179 PACKAGE_NAME = "sqlite" 2180 PACKAGE_STRING = "sqlite 3.39.3" 2181 PACKAGE_TARNAME = "sqlite" 2182 PACKAGE_VERSION = "3.39.3" 2183 PAGER_CACHESPILL = 0x20 2184 PAGER_CKPT_FULLFSYNC = 0x10 2185 PAGER_FLAGS_MASK = 0x38 2186 PAGER_FULLFSYNC = 0x08 2187 PAGER_GET_NOCONTENT = 0x01 2188 PAGER_GET_READONLY = 0x02 2189 PAGER_JOURNALMODE_DELETE = 0 2190 PAGER_JOURNALMODE_MEMORY = 4 2191 PAGER_JOURNALMODE_OFF = 2 2192 PAGER_JOURNALMODE_PERSIST = 1 2193 PAGER_JOURNALMODE_QUERY = -1 2194 PAGER_JOURNALMODE_TRUNCATE = 3 2195 PAGER_JOURNALMODE_WAL = 5 2196 PAGER_LOCKINGMODE_EXCLUSIVE = 1 2197 PAGER_LOCKINGMODE_NORMAL = 0 2198 PAGER_LOCKINGMODE_QUERY = -1 2199 PAGER_MEMORY = 0x0002 2200 PAGER_OMIT_JOURNAL = 0x0001 2201 PAGER_SYNCHRONOUS_EXTRA = 0x04 2202 PAGER_SYNCHRONOUS_FULL = 0x03 2203 PAGER_SYNCHRONOUS_MASK = 0x07 2204 PAGER_SYNCHRONOUS_NORMAL = 0x02 2205 PAGER_SYNCHRONOUS_OFF = 0x01 2206 PARSE_MODE_DECLARE_VTAB = 1 2207 PARSE_MODE_NORMAL = 0 2208 PARSE_MODE_RENAME = 2 2209 PARSE_MODE_UNMAP = 3 2210 PENDING_LOCK = 3 2211 PGHDR_CLEAN = 0x001 2212 PGHDR_DIRTY = 0x002 2213 PGHDR_DONT_WRITE = 0x010 2214 PGHDR_MMAP = 0x020 2215 PGHDR_NEED_SYNC = 0x008 2216 PGHDR_WAL_APPEND = 0x040 2217 PGHDR_WRITEABLE = 0x004 2218 PREFERRED_SCHEMA_TABLE = "sqlite_schema" 2219 PREFERRED_TEMP_SCHEMA_TABLE = "sqlite_temp_schema" 2220 PRIX16 = "X" 2221 PRIX32 = "X" 2222 PRIX8 = "X" 2223 PRIXFAST16 = "X" 2224 PRIXFAST32 = "X" 2225 PRIXFAST8 = "X" 2226 PRIXLEAST16 = "X" 2227 PRIXLEAST32 = "X" 2228 PRIXLEAST8 = "X" 2229 PRIXMAX = "jX" 2230 PRId16 = "d" 2231 PRId32 = "d" 2232 PRId8 = "d" 2233 PRIdFAST16 = "d" 2234 PRIdFAST32 = "d" 2235 PRIdFAST8 = "d" 2236 PRIdLEAST16 = "d" 2237 PRIdLEAST32 = "d" 2238 PRIdLEAST8 = "d" 2239 PRIdMAX = "jd" 2240 PRIi16 = "i" 2241 PRIi32 = "i" 2242 PRIi8 = "i" 2243 PRIiFAST16 = "i" 2244 PRIiFAST32 = "i" 2245 PRIiFAST8 = "i" 2246 PRIiLEAST16 = "i" 2247 PRIiLEAST32 = "i" 2248 PRIiLEAST8 = "i" 2249 PRIiMAX = "ji" 2250 PRIo16 = "o" 2251 PRIo32 = "o" 2252 PRIo8 = "o" 2253 PRIoFAST16 = "o" 2254 PRIoFAST32 = "o" 2255 PRIoFAST8 = "o" 2256 PRIoLEAST16 = "o" 2257 PRIoLEAST32 = "o" 2258 PRIoLEAST8 = "o" 2259 PRIoMAX = "jo" 2260 PRIu16 = "u" 2261 PRIu32 = "u" 2262 PRIu8 = "u" 2263 PRIuFAST16 = "u" 2264 PRIuFAST32 = "u" 2265 PRIuFAST8 = "u" 2266 PRIuLEAST16 = "u" 2267 PRIuLEAST32 = "u" 2268 PRIuLEAST8 = "u" 2269 PRIuMAX = "ju" 2270 PRIx16 = "x" 2271 PRIx32 = "x" 2272 PRIx8 = "x" 2273 PRIxFAST16 = "x" 2274 PRIxFAST32 = "x" 2275 PRIxFAST8 = "x" 2276 PRIxLEAST16 = "x" 2277 PRIxLEAST32 = "x" 2278 PRIxLEAST8 = "x" 2279 PRIxMAX = "jx" 2280 PTRDIFF_MAX = 9223372036854775807 2281 PTRDIFF_MIN = -9223372036854775808 2282 RESERVED_LOCK = 2 2283 RSIZE_MAX = 9223372036854775807 2284 SAVEPOINT_BEGIN = 0 2285 SAVEPOINT_RELEASE = 1 2286 SAVEPOINT_ROLLBACK = 2 2287 SCHEMA_ROOT = 1 2288 SCNd16 = "hd" 2289 SCNd32 = "d" 2290 SCNd8 = "hhd" 2291 SCNdFAST16 = "d" 2292 SCNdFAST32 = "d" 2293 SCNdFAST8 = "d" 2294 SCNdLEAST16 = "hd" 2295 SCNdLEAST32 = "d" 2296 SCNdLEAST8 = "hhd" 2297 SCNdMAX = "jd" 2298 SCNi16 = "hi" 2299 SCNi32 = "i" 2300 SCNi8 = "hhi" 2301 SCNiFAST16 = "i" 2302 SCNiFAST32 = "i" 2303 SCNiFAST8 = "i" 2304 SCNiLEAST16 = "hi" 2305 SCNiLEAST32 = "i" 2306 SCNiLEAST8 = "hhi" 2307 SCNiMAX = "ji" 2308 SCNo16 = "ho" 2309 SCNo32 = "o" 2310 SCNo8 = "hho" 2311 SCNoFAST16 = "o" 2312 SCNoFAST32 = "o" 2313 SCNoFAST8 = "o" 2314 SCNoLEAST16 = "ho" 2315 SCNoLEAST32 = "o" 2316 SCNoLEAST8 = "hho" 2317 SCNoMAX = "jo" 2318 SCNu16 = "hu" 2319 SCNu32 = "u" 2320 SCNu8 = "hhu" 2321 SCNuFAST16 = "u" 2322 SCNuFAST32 = "u" 2323 SCNuFAST8 = "u" 2324 SCNuLEAST16 = "hu" 2325 SCNuLEAST32 = "u" 2326 SCNuLEAST8 = "hhu" 2327 SCNuMAX = "ju" 2328 SCNx16 = "hx" 2329 SCNx32 = "x" 2330 SCNx8 = "hhx" 2331 SCNxFAST16 = "x" 2332 SCNxFAST32 = "x" 2333 SCNxFAST8 = "x" 2334 SCNxLEAST16 = "hx" 2335 SCNxLEAST32 = "x" 2336 SCNxLEAST8 = "hhx" 2337 SCNxMAX = "jx" 2338 SF_Aggregate = 0x0000008 2339 SF_All = 0x0000002 2340 SF_ComplexResult = 0x0040000 2341 SF_Compound = 0x0000100 2342 SF_Converted = 0x0010000 2343 SF_CopyCte = 0x4000000 2344 SF_Distinct = 0x0000001 2345 SF_Expanded = 0x0000040 2346 SF_FixedLimit = 0x0004000 2347 SF_HasAgg = 0x0000010 2348 SF_HasTypeInfo = 0x0000080 2349 SF_IncludeHidden = 0x0020000 2350 SF_MaybeConvert = 0x0008000 2351 SF_MinMaxAgg = 0x0001000 2352 SF_MultiPart = 0x2000000 2353 SF_MultiValue = 0x0000400 2354 SF_NestedFrom = 0x0000800 2355 SF_NoopOrderBy = 0x0400000 2356 SF_OrderByReqd = 0x8000000 2357 SF_PushDown = 0x1000000 2358 SF_Recursive = 0x0002000 2359 SF_Resolved = 0x0000004 2360 SF_UFSrcCheck = 0x0800000 2361 SF_UsesEphemeral = 0x0000020 2362 SF_Values = 0x0000200 2363 SF_View = 0x0200000 2364 SF_WhereBegin = 0x0080000 2365 SF_WinRewrite = 0x0100000 2366 SHARED_LOCK = 1 2367 SHARED_SIZE = 510 2368 SIG_ATOMIC_MAX = 9223372036854775807 2369 SIG_ATOMIC_MIN = -9223372036854775808 2370 SIZE_MAX = 18446744073709551615 2371 SQLITECONFIG_H = 1 2372 SQLITEINT_H = 0 2373 SQLITE_AFF_BLOB = 0x41 2374 SQLITE_AFF_INTEGER = 0x44 2375 SQLITE_AFF_MASK = 0x47 2376 SQLITE_AFF_NONE = 0x40 2377 SQLITE_AFF_NUMERIC = 0x43 2378 SQLITE_AFF_REAL = 0x45 2379 SQLITE_AFF_TEXT = 0x42 2380 SQLITE_ASCII = 1 2381 SQLITE_ATOMIC_INTRINSICS = 0 2382 SQLITE_AllOpts = 0xffffffff 2383 SQLITE_AutoIndex = 0x00008000 2384 SQLITE_BIGENDIAN = 0 2385 SQLITE_BTREE_H = 0 2386 SQLITE_BYTEORDER = 1234 2387 SQLITE_BalancedMerge = 0x00200000 2388 SQLITE_BloomFilter = 0x00080000 2389 SQLITE_BloomPulldown = 0x00100000 2390 SQLITE_CacheSpill = 0x00000020 2391 SQLITE_CellSizeCk = 0x00200000 2392 SQLITE_CkptFullFSync = 0x00000010 2393 SQLITE_CountOfView = 0x00000200 2394 SQLITE_CoverIdxScan = 0x00000020 2395 SQLITE_CursorHints = 0x00000400 2396 SQLITE_DEFAULT_AUTOVACUUM = 0 2397 SQLITE_DEFAULT_CACHE_SIZE = -2000 2398 SQLITE_DEFAULT_FILE_FORMAT = 4 2399 SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT = -1 2400 SQLITE_DEFAULT_MMAP_SIZE = 0 2401 SQLITE_DEFAULT_PCACHE_INITSZ = 20 2402 SQLITE_DEFAULT_RECURSIVE_TRIGGERS = 0 2403 SQLITE_DEFAULT_SECTOR_SIZE = 4096 2404 SQLITE_DEFAULT_SORTERREF_SIZE = 0x7fffffff 2405 SQLITE_DEFAULT_SYNCHRONOUS = 2 2406 SQLITE_DEFAULT_WAL_AUTOCHECKPOINT = 1000 2407 SQLITE_DEFAULT_WAL_SYNCHRONOUS = 2 2408 SQLITE_DEFAULT_WORKER_THREADS = 0 2409 SQLITE_Defensive = 0x10000000 2410 SQLITE_DeferFKs = 0x00080000 2411 SQLITE_DistinctOpt = 0x00000010 2412 SQLITE_DqsDDL = 0x20000000 2413 SQLITE_DqsDML = 0x40000000 2414 SQLITE_ECEL_DUP = 0x01 2415 SQLITE_ECEL_FACTOR = 0x02 2416 SQLITE_ECEL_OMITREF = 0x08 2417 SQLITE_ECEL_REF = 0x04 2418 SQLITE_EnableQPSG = 0x00800000 2419 SQLITE_EnableTrigger = 0x00040000 2420 SQLITE_EnableView = 0x80000000 2421 SQLITE_FAULTINJECTOR_COUNT = 1 2422 SQLITE_FAULTINJECTOR_MALLOC = 0 2423 SQLITE_FCNTL_DB_UNCHANGED = 0xca093fa0 2424 SQLITE_FUNC_ANYORDER = 0x08000000 2425 SQLITE_FUNC_BUILTIN = 0x00800000 2426 SQLITE_FUNC_CASE = 0x0008 2427 SQLITE_FUNC_CONSTANT = 0x0800 2428 SQLITE_FUNC_COUNT = 0x0100 2429 SQLITE_FUNC_DIRECT = 0x00080000 2430 SQLITE_FUNC_ENCMASK = 0x0003 2431 SQLITE_FUNC_EPHEM = 0x0010 2432 SQLITE_FUNC_HASH_SZ = 23 2433 SQLITE_FUNC_INLINE = 0x00400000 2434 SQLITE_FUNC_INTERNAL = 0x00040000 2435 SQLITE_FUNC_LENGTH = 0x0040 2436 SQLITE_FUNC_LIKE = 0x0004 2437 SQLITE_FUNC_MINMAX = 0x1000 2438 SQLITE_FUNC_NEEDCOLL = 0x0020 2439 SQLITE_FUNC_SLOCHNG = 0x2000 2440 SQLITE_FUNC_SUBTYPE = 0x00100000 2441 SQLITE_FUNC_TEST = 0x4000 2442 SQLITE_FUNC_TYPEOF = 0x0080 2443 SQLITE_FUNC_UNLIKELY = 0x0400 2444 SQLITE_FUNC_UNSAFE = 0x00200000 2445 SQLITE_FUNC_WINDOW = 0x00010000 2446 SQLITE_FactorOutConst = 0x00000008 2447 SQLITE_FlttnUnionAll = 0x00800000 2448 SQLITE_ForeignKeys = 0x00004000 2449 SQLITE_Fts3Tokenizer = 0x00400000 2450 SQLITE_FullColNames = 0x00000004 2451 SQLITE_FullFSync = 0x00000008 2452 SQLITE_GroupByOrder = 0x00000004 2453 SQLITE_HASH_H = 0 2454 SQLITE_HAVE_C99_MATH_FUNCS = 1 2455 SQLITE_HAVE_OS_TRACE = 0 2456 SQLITE_IDXTYPE_APPDEF = 0 2457 SQLITE_IDXTYPE_IPK = 3 2458 SQLITE_IDXTYPE_PRIMARYKEY = 2 2459 SQLITE_IDXTYPE_UNIQUE = 1 2460 SQLITE_IOERR_NOMEM_BKPT = 3082 2461 SQLITE_IgnoreChecks = 0x00000200 2462 SQLITE_JUMPIFNULL = 0x10 2463 SQLITE_LITTLEENDIAN = 1 2464 SQLITE_LegacyAlter = 0x04000000 2465 SQLITE_LegacyFileFmt = 0x00000002 2466 SQLITE_LoadExtFunc = 0x00020000 2467 SQLITE_LoadExtension = 0x00010000 2468 SQLITE_MALLOC_SOFT_LIMIT = 1024 2469 SQLITE_MAX_ATTACHED = 10 2470 SQLITE_MAX_COLUMN = 2000 2471 SQLITE_MAX_COMPOUND_SELECT = 500 2472 SQLITE_MAX_DB = 12 2473 SQLITE_MAX_DEFAULT_PAGE_SIZE = 8192 2474 SQLITE_MAX_EXPR_DEPTH = 1000 2475 SQLITE_MAX_FILE_FORMAT = 4 2476 SQLITE_MAX_FUNCTION_ARG = 127 2477 SQLITE_MAX_LENGTH = 1000000000 2478 SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000 2479 SQLITE_MAX_MMAP_SIZE = 0x7fff0000 2480 SQLITE_MAX_PAGE_COUNT = 1073741823 2481 SQLITE_MAX_PAGE_SIZE = 65536 2482 SQLITE_MAX_PATHLEN = 1024 2483 SQLITE_MAX_SQL_LENGTH = 1000000000 2484 SQLITE_MAX_SYMLINK = 200 2485 SQLITE_MAX_TRIGGER_DEPTH = 1000 2486 SQLITE_MAX_VARIABLE_NUMBER = 32766 2487 SQLITE_MAX_VDBE_OP = 250000000 2488 SQLITE_MAX_WORKER_THREADS = 8 2489 SQLITE_MSVC_H = 0 2490 SQLITE_MUTEX_STATIC_TEMPDIR = 11 2491 SQLITE_MX_JUMP_OPCODE = 64 2492 SQLITE_MinMaxOpt = 0x00010000 2493 SQLITE_NEED_ERR_NAME = 0 2494 SQLITE_NOMEM_BKPT = 7 2495 SQLITE_NOTNULL = 0x90 2496 SQLITE_NTUNE = 6 2497 SQLITE_NULLEQ = 0x80 2498 SQLITE_N_BTREE_META = 16 2499 SQLITE_N_LIMIT = 12 2500 SQLITE_N_STDTYPE = 6 2501 SQLITE_NoCkptOnClose = 0x00000800 2502 SQLITE_NoSchemaError = 0x08000000 2503 SQLITE_NullCallback = 0x00000100 2504 SQLITE_OS_OTHER = 0 2505 SQLITE_OS_SETUP_H = 0 2506 SQLITE_OS_UNIX = 1 2507 SQLITE_OS_WIN = 0 2508 SQLITE_OmitNoopJoin = 0x00000100 2509 SQLITE_OmitOrderBy = 0x00040000 2510 SQLITE_OrderByIdxJoin = 0x00000040 2511 SQLITE_PAGER_H = 0 2512 SQLITE_POWERSAFE_OVERWRITE = 1 2513 SQLITE_PREPARE_MASK = 0x0f 2514 SQLITE_PREPARE_SAVESQL = 0x80 2515 SQLITE_PRINTF_INTERNAL = 0x01 2516 SQLITE_PRINTF_MALLOCED = 0x04 2517 SQLITE_PRINTF_SQLFUNC = 0x02 2518 SQLITE_PTRSIZE = 8 2519 SQLITE_PropagateConst = 0x00008000 2520 SQLITE_PushDown = 0x00001000 2521 SQLITE_QueryFlattener = 0x00000001 2522 SQLITE_QueryOnly = 0x00100000 2523 SQLITE_ReadUncommit = 0x00000400 2524 SQLITE_RecTriggers = 0x00002000 2525 SQLITE_ReleaseReg = 0x00400000 2526 SQLITE_ResetDatabase = 0x02000000 2527 SQLITE_ReverseOrder = 0x00001000 2528 SQLITE_SO_ASC = 0 2529 SQLITE_SO_DESC = 1 2530 SQLITE_SO_UNDEFINED = -1 2531 SQLITE_STATE_BUSY = 0x6d 2532 SQLITE_STATE_CLOSED = 0xce 2533 SQLITE_STATE_ERROR = 0xd5 2534 SQLITE_STATE_OPEN = 0x76 2535 SQLITE_STATE_SICK = 0xba 2536 SQLITE_STATE_ZOMBIE = 0xa7 2537 SQLITE_SYSTEM_MALLOC = 1 2538 SQLITE_SeekScan = 0x00020000 2539 SQLITE_ShortColNames = 0x00000040 2540 SQLITE_SimplifyJoin = 0x00002000 2541 SQLITE_SkipScan = 0x00004000 2542 SQLITE_Stat4 = 0x00000800 2543 SQLITE_TEMP_FILE_PREFIX = "etilqs_" 2544 SQLITE_TOKEN_KEYWORD = 0x2 2545 SQLITE_TOKEN_QUOTED = 0x1 2546 SQLITE_TRACE_LEGACY = 0x40 2547 SQLITE_TRACE_NONLEGACY_MASK = 0x0f 2548 SQLITE_TRACE_XPROFILE = 0x80 2549 SQLITE_Transitive = 0x00000080 2550 SQLITE_TriggerEQP = 0x01000000 2551 SQLITE_TrustedSchema = 0x00000080 2552 SQLITE_UTF16NATIVE = 2 2553 SQLITE_VDBE_H = 0 2554 SQLITE_VTABRISK_High = 2 2555 SQLITE_VTABRISK_Low = 0 2556 SQLITE_VTABRISK_Normal = 1 2557 SQLITE_WSD = 0 2558 SQLITE_WindowFunc = 0x00000002 2559 SQLITE_WriteSchema = 0x00000001 2560 SRT_Coroutine = 13 2561 SRT_Discard = 4 2562 SRT_DistFifo = 5 2563 SRT_DistQueue = 6 2564 SRT_EphemTab = 12 2565 SRT_Except = 2 2566 SRT_Exists = 3 2567 SRT_Fifo = 8 2568 SRT_Mem = 10 2569 SRT_Output = 9 2570 SRT_Queue = 7 2571 SRT_Set = 11 2572 SRT_Table = 14 2573 SRT_Union = 1 2574 SRT_Upfrom = 15 2575 STDC_HEADERS = 1 2576 TABTYP_NORM = 0 2577 TABTYP_VIEW = 2 2578 TABTYP_VTAB = 1 2579 TF_Autoincrement = 0x00000008 2580 TF_Ephemeral = 0x00004000 2581 TF_Eponymous = 0x00008000 2582 TF_HasGenerated = 0x00000060 2583 TF_HasHidden = 0x00000002 2584 TF_HasNotNull = 0x00000800 2585 TF_HasPrimaryKey = 0x00000004 2586 TF_HasStat1 = 0x00000010 2587 TF_HasStat4 = 0x00002000 2588 TF_HasStored = 0x00000040 2589 TF_HasVirtual = 0x00000020 2590 TF_NoVisibleRowid = 0x00000200 2591 TF_OOOHidden = 0x00000400 2592 TF_Readonly = 0x00000001 2593 TF_Shadow = 0x00001000 2594 TF_StatsUsed = 0x00000100 2595 TF_Strict = 0x00010000 2596 TF_WithoutRowid = 0x00000080 2597 TK_ABORT = 27 2598 TK_ACTION = 28 2599 TK_ADD = 163 2600 TK_AFTER = 29 2601 TK_AGG_COLUMN = 169 2602 TK_AGG_FUNCTION = 168 2603 TK_ALL = 135 2604 TK_ALTER = 162 2605 TK_ALWAYS = 96 2606 TK_ANALYZE = 30 2607 TK_AND = 44 2608 TK_ANY = 101 2609 TK_AS = 24 2610 TK_ASC = 31 2611 TK_ASTERISK = 180 2612 TK_ATTACH = 32 2613 TK_AUTOINCR = 126 2614 TK_BEFORE = 33 2615 TK_BEGIN = 5 2616 TK_BETWEEN = 48 2617 TK_BY = 34 2618 TK_CASCADE = 35 2619 TK_CASE = 157 2620 TK_CAST = 36 2621 TK_CHECK = 124 2622 TK_COLLATE = 113 2623 TK_COLUMN = 167 2624 TK_COLUMNKW = 60 2625 TK_COMMIT = 10 2626 TK_CONFLICT = 37 2627 TK_CONSTRAINT = 119 2628 TK_CREATE = 17 2629 TK_CTIME_KW = 100 2630 TK_CURRENT = 85 2631 TK_DATABASE = 38 2632 TK_DEFAULT = 120 2633 TK_DEFERRABLE = 131 2634 TK_DEFERRED = 7 2635 TK_DELETE = 128 2636 TK_DESC = 39 2637 TK_DETACH = 40 2638 TK_DISTINCT = 140 2639 TK_DO = 61 2640 TK_DROP = 133 2641 TK_EACH = 41 2642 TK_ELSE = 160 2643 TK_END = 11 2644 TK_ESCAPE = 58 2645 TK_EXCEPT = 136 2646 TK_EXCLUDE = 91 2647 TK_EXCLUSIVE = 9 2648 TK_EXISTS = 20 2649 TK_EXPLAIN = 2 2650 TK_FAIL = 42 2651 TK_FILTER = 166 2652 TK_FIRST = 83 2653 TK_FOLLOWING = 86 2654 TK_FOR = 62 2655 TK_FOREIGN = 132 2656 TK_FROM = 142 2657 TK_FUNCTION = 172 2658 TK_GENERATED = 95 2659 TK_GROUP = 146 2660 TK_GROUPS = 92 2661 TK_HAVING = 147 2662 TK_IF = 18 2663 TK_IF_NULL_ROW = 179 2664 TK_IGNORE = 63 2665 TK_IMMEDIATE = 8 2666 TK_IN = 49 2667 TK_INDEX = 161 2668 TK_INDEXED = 116 2669 TK_INITIALLY = 64 2670 TK_INSERT = 127 2671 TK_INSTEAD = 65 2672 TK_INTERSECT = 137 2673 TK_INTO = 151 2674 TK_IS = 45 2675 TK_ISNOT = 171 2676 TK_ISNULL = 50 2677 TK_JOIN = 143 2678 TK_JOIN_KW = 118 2679 TK_KEY = 67 2680 TK_LAST = 84 2681 TK_LIKE_KW = 47 2682 TK_LIMIT = 148 2683 TK_MATCH = 46 2684 TK_MATERIALIZED = 97 2685 TK_NO = 66 2686 TK_NOT = 19 2687 TK_NOTHING = 152 2688 TK_NOTNULL = 51 2689 TK_NULL = 121 2690 TK_NULLS = 82 2691 TK_OF = 68 2692 TK_OFFSET = 69 2693 TK_ON = 115 2694 TK_OR = 43 2695 TK_ORDER = 145 2696 TK_OTHERS = 93 2697 TK_OVER = 165 2698 TK_PARTITION = 87 2699 TK_PLAN = 4 2700 TK_PRAGMA = 70 2701 TK_PRECEDING = 88 2702 TK_PRIMARY = 122 2703 TK_PTR = 112 2704 TK_QUERY = 3 2705 TK_RAISE = 71 2706 TK_RANGE = 89 2707 TK_RECURSIVE = 72 2708 TK_REFERENCES = 125 2709 TK_REGISTER = 176 2710 TK_REINDEX = 98 2711 TK_RELEASE = 14 2712 TK_RENAME = 99 2713 TK_REPLACE = 73 2714 TK_RESTRICT = 74 2715 TK_RETURNING = 150 2716 TK_ROLLBACK = 12 2717 TK_ROW = 75 2718 TK_ROWS = 76 2719 TK_SAVEPOINT = 13 2720 TK_SELECT = 138 2721 TK_SELECT_COLUMN = 178 2722 TK_SET = 130 2723 TK_SPAN = 181 2724 TK_TABLE = 16 2725 TK_TEMP = 21 2726 TK_THEN = 159 2727 TK_TIES = 94 2728 TK_TO = 15 2729 TK_TRANSACTION = 6 2730 TK_TRIGGER = 77 2731 TK_TRUEFALSE = 170 2732 TK_TRUTH = 175 2733 TK_UMINUS = 173 2734 TK_UNBOUNDED = 90 2735 TK_UNION = 134 2736 TK_UNIQUE = 123 2737 TK_UPDATE = 129 2738 TK_UPLUS = 174 2739 TK_USING = 144 2740 TK_VACUUM = 78 2741 TK_VALUES = 139 2742 TK_VECTOR = 177 2743 TK_VIEW = 79 2744 TK_VIRTUAL = 80 2745 TK_WHEN = 158 2746 TK_WHERE = 149 2747 TK_WINDOW = 164 2748 TK_WITH = 81 2749 TK_WITHOUT = 26 2750 TREETRACE_ENABLED = 0 2751 TRIGGER_AFTER = 2 2752 TRIGGER_BEFORE = 1 2753 UINT16_MAX = 0xffff 2754 UINT32_MAX = 0xffffffff 2755 UINT64_MAX = 0xffffffffffffffff 2756 UINT8_MAX = 0xff 2757 UINTMAX_MAX = 18446744073709551615 2758 UINTPTR_MAX = 18446744073709551615 2759 UINT_FAST16_MAX = 4294967295 2760 UINT_FAST32_MAX = 4294967295 2761 UINT_FAST64_MAX = 18446744073709551615 2762 UINT_FAST8_MAX = 4294967295 2763 UINT_LEAST16_MAX = 65535 2764 UINT_LEAST32_MAX = 4294967295 2765 UINT_LEAST64_MAX = 18446744073709551615 2766 UINT_LEAST8_MAX = 255 2767 WCHAR_MAX = 2147483647 2768 WCHAR_MIN = -2147483648 2769 WHERE_AGG_DISTINCT = 0x0400 2770 WHERE_DISTINCTBY = 0x0080 2771 WHERE_DISTINCT_NOOP = 0 2772 WHERE_DISTINCT_ORDERED = 2 2773 WHERE_DISTINCT_UNIQUE = 1 2774 WHERE_DISTINCT_UNORDERED = 3 2775 WHERE_DUPLICATES_OK = 0x0010 2776 WHERE_GROUPBY = 0x0040 2777 WHERE_ONEPASS_DESIRED = 0x0004 2778 WHERE_ONEPASS_MULTIROW = 0x0008 2779 WHERE_ORDERBY_LIMIT = 0x0800 2780 WHERE_ORDERBY_MAX = 0x0002 2781 WHERE_ORDERBY_MIN = 0x0001 2782 WHERE_ORDERBY_NORMAL = 0x0000 2783 WHERE_OR_SUBCLAUSE = 0x0020 2784 WHERE_RIGHT_JOIN = 0x1000 2785 WHERE_SORTBYGROUP = 0x0200 2786 WHERE_USE_LIMIT = 0x4000 2787 WHERE_WANT_DISTINCT = 0x0100 2788 WINT_MAX = 2147483647 2789 WINT_MIN = -2147483648 2790 WRC_Abort = 2 2791 WRC_Continue = 0 2792 WRC_Prune = 1 2793 XN_EXPR = -2 2794 XN_ROWID = -1 2795 X_GCC_MAX_ALIGN_T = 0 2796 X_GNU_SOURCE = 0 2797 X_INTTYPES_H_ = 0 2798 X_LARGEFILE_SOURCE = 1 2799 X_LARGE_FILE = 1 2800 X_MACHINE_INTTYPES_H_ = 0 2801 X_MACHINE__STDINT_H_ = 0 2802 X_PTRDIFF_T_DECLARED = 0 2803 X_SQLITE_OS_H_ = 0 2804 X_STDDEF_H_ = 0 2805 X_SYS_STDINT_H_ = 0 2806 X_XOPEN_SOURCE = 600 2807 SESSION_STREAM_TCL_VAR = "sqlite3session_streams" 2808 BUS_ADRALN = 1 2809 BUS_ADRERR = 2 2810 BUS_OBJERR = 3 2811 BUS_OOMERR = 100 2812 CLD_CONTINUED = 6 2813 CLD_DUMPED = 3 2814 CLD_EXITED = 1 2815 CLD_KILLED = 2 2816 CLD_STOPPED = 5 2817 CLD_TRAPPED = 4 2818 FPE_FLTDIV = 3 2819 FPE_FLTINV = 7 2820 FPE_FLTOVF = 4 2821 FPE_FLTRES = 6 2822 FPE_FLTSUB = 8 2823 FPE_FLTUND = 5 2824 FPE_INTDIV = 2 2825 FPE_INTOVF = 1 2826 ILL_BADSTK = 8 2827 ILL_COPROC = 7 2828 ILL_ILLADR = 3 2829 ILL_ILLOPC = 1 2830 ILL_ILLOPN = 2 2831 ILL_ILLTRP = 4 2832 ILL_PRVOPC = 5 2833 ILL_PRVREG = 6 2834 MAX_PREPARED_STMTS = 100 2835 MINSIGSTKSZ = 2048 2836 NSIG = 32 2837 NUM_PREPARED_STMTS = 10 2838 POLL_ERR = 4 2839 POLL_HUP = 6 2840 POLL_IN = 1 2841 POLL_MSG = 3 2842 POLL_OUT = 2 2843 POLL_PRI = 5 2844 SA_NOCLDSTOP = 0x0008 2845 SA_NOCLDWAIT = 0x0020 2846 SA_NODEFER = 0x0010 2847 SA_ONSTACK = 0x0001 2848 SA_RESETHAND = 0x0004 2849 SA_RESTART = 0x0002 2850 SA_SIGINFO = 0x0040 2851 SEGV_ACCERR = 2 2852 SEGV_MAPERR = 1 2853 SEGV_PKUERR = 100 2854 SIGABRT = 6 2855 SIGALRM = 14 2856 SIGBUS = 10 2857 SIGCHLD = 20 2858 SIGCONT = 19 2859 SIGEMT = 7 2860 SIGEV_KEVENT = 3 2861 SIGEV_NONE = 0 2862 SIGEV_SIGNAL = 1 2863 SIGEV_THREAD = 2 2864 SIGEV_THREAD_ID = 4 2865 SIGFPE = 8 2866 SIGHUP = 1 2867 SIGILL = 4 2868 SIGINFO = 29 2869 SIGINT = 2 2870 SIGIO = 23 2871 SIGIOT = 6 2872 SIGKILL = 9 2873 SIGLIBRT = 33 2874 SIGLWP = 32 2875 SIGPIPE = 13 2876 SIGPROF = 27 2877 SIGQUIT = 3 2878 SIGRTMAX = 126 2879 SIGRTMIN = 65 2880 SIGSEGV = 11 2881 SIGSTKSZ = 34816 2882 SIGSTOP = 17 2883 SIGSYS = 12 2884 SIGTERM = 15 2885 SIGTHR = 32 2886 SIGTRAP = 5 2887 SIGTSTP = 18 2888 SIGTTIN = 21 2889 SIGTTOU = 22 2890 SIGURG = 16 2891 SIGUSR1 = 30 2892 SIGUSR2 = 31 2893 SIGVTALRM = 26 2894 SIGWINCH = 28 2895 SIGXCPU = 24 2896 SIGXFSZ = 25 2897 SIG_BLOCK = 1 2898 SIG_SETMASK = 3 2899 SIG_UNBLOCK = 2 2900 SI_ASYNCIO = 0x10004 2901 SI_KERNEL = 0x10006 2902 SI_LWP = 0x10007 2903 SI_MESGQ = 0x10005 2904 SI_NOINFO = 0 2905 SI_QUEUE = 0x10002 2906 SI_TIMER = 0x10003 2907 SI_UNDEFINED = 0 2908 SI_USER = 0x10001 2909 SQLITE_EVAL_WITHOUTNULLS = 0x00001 2910 SQLITE_TCL_NRE = 1 2911 SS_DISABLE = 0x0004 2912 SS_ONSTACK = 0x0001 2913 SV_INTERRUPT = 2 2914 SV_NOCLDSTOP = 8 2915 SV_NODEFER = 16 2916 SV_ONSTACK = 1 2917 SV_RESETHAND = 4 2918 SV_SIGINFO = 64 2919 TCLSH = 1 2920 TRAP_BRKPT = 1 2921 TRAP_CAP = 4 2922 TRAP_DTRACE = 3 2923 TRAP_TRACE = 2 2924 X_MC_FLAG_MASK = 7 2925 X_MC_FPFMT_NODEV = 0x10000 2926 X_MC_FPFMT_XMM = 0x10002 2927 X_MC_FPOWNED_FPU = 0x20001 2928 X_MC_FPOWNED_NONE = 0x20000 2929 X_MC_FPOWNED_PCB = 0x20002 2930 X_MC_HASBASES = 0x2 2931 X_MC_HASFPXSTATE = 0x4 2932 X_MC_HASSEGS = 0x1 2933 X_SIGNAL_H_ = 0 2934 X_SYS_SIGNAL_H_ = 0 2935 X_SYS__UCONTEXT_H_ = 0 2936 X_X86_SIGNAL_H = 1 2937 X_X86_UCONTEXT_H_ = 0 2938 CACHE_STALE = 0 2939 CPUSTATES = 5 2940 CP_IDLE = 4 2941 CP_INTR = 3 2942 CP_NICE = 1 2943 CP_SYS = 2 2944 CP_USER = 0 2945 CURTYPE_BTREE = 0 2946 CURTYPE_PSEUDO = 3 2947 CURTYPE_SORTER = 1 2948 CURTYPE_VTAB = 2 2949 MEM_AffMask = 0x003f 2950 MEM_Agg = 0x8000 2951 MEM_Blob = 0x0010 2952 MEM_Cleared = 0x0100 2953 MEM_Dyn = 0x1000 2954 MEM_Ephem = 0x4000 2955 MEM_FromBind = 0x0040 2956 MEM_Int = 0x0004 2957 MEM_IntReal = 0x0020 2958 MEM_Null = 0x0001 2959 MEM_Real = 0x0008 2960 MEM_Static = 0x2000 2961 MEM_Str = 0x0002 2962 MEM_Subtype = 0x0800 2963 MEM_Term = 0x0200 2964 MEM_TypeMask = 0x0dbf 2965 MEM_Undefined = 0x0000 2966 MEM_Zero = 0x0400 2967 PRIO_MAX = 20 2968 PRIO_MIN = -20 2969 PRIO_PGRP = 1 2970 PRIO_PROCESS = 0 2971 PRIO_USER = 2 2972 RLIMIT_AS = 10 2973 RLIMIT_CORE = 4 2974 RLIMIT_CPU = 0 2975 RLIMIT_DATA = 2 2976 RLIMIT_FSIZE = 1 2977 RLIMIT_KQUEUES = 13 2978 RLIMIT_MEMLOCK = 6 2979 RLIMIT_NOFILE = 8 2980 RLIMIT_NPROC = 7 2981 RLIMIT_NPTS = 11 2982 RLIMIT_RSS = 5 2983 RLIMIT_SBSIZE = 9 2984 RLIMIT_STACK = 3 2985 RLIMIT_SWAP = 12 2986 RLIMIT_UMTXP = 14 2987 RLIMIT_VMEM = 10 2988 RLIM_NLIMITS = 15 2989 RUSAGE_CHILDREN = -1 2990 RUSAGE_SELF = 0 2991 RUSAGE_THREAD = 1 2992 SQLITE_ENABLE_LOCKING_STYLE = 0 2993 SQLITE_FRAME_MAGIC = 0x879fb71e 2994 SQLITE_MAX_SCHEMA_RETRY = 50 2995 SQLITE_VDBEINT_H = 0 2996 VDBE_DISPLAY_P4 = 1 2997 VDBE_HALT_STATE = 3 2998 VDBE_INIT_STATE = 0 2999 VDBE_READY_STATE = 1 3000 VDBE_RUN_STATE = 2 3001 X_SYS_RESOURCE_H_ = 0 3002 BTCF_AtLast = 0x08 3003 BTCF_Incrblob = 0x10 3004 BTCF_Multiple = 0x20 3005 BTCF_Pinned = 0x40 3006 BTCF_ValidNKey = 0x02 3007 BTCF_ValidOvfl = 0x04 3008 BTCF_WriteFlag = 0x01 3009 BTCURSOR_MAX_DEPTH = 20 3010 BTS_EXCLUSIVE = 0x0040 3011 BTS_FAST_SECURE = 0x000c 3012 BTS_INITIALLY_EMPTY = 0x0010 3013 BTS_NO_WAL = 0x0020 3014 BTS_OVERWRITE = 0x0008 3015 BTS_PAGESIZE_FIXED = 0x0002 3016 BTS_PENDING = 0x0080 3017 BTS_READ_ONLY = 0x0001 3018 BTS_SECURE_DELETE = 0x0004 3019 CURSOR_FAULT = 4 3020 CURSOR_INVALID = 1 3021 CURSOR_REQUIRESEEK = 3 3022 CURSOR_SKIPNEXT = 2 3023 CURSOR_VALID = 0 3024 PTF_INTKEY = 0x01 3025 PTF_LEAF = 0x08 3026 PTF_LEAFDATA = 0x04 3027 PTF_ZERODATA = 0x02 3028 PTRMAP_BTREE = 5 3029 PTRMAP_FREEPAGE = 2 3030 PTRMAP_OVERFLOW1 = 3 3031 PTRMAP_OVERFLOW2 = 4 3032 PTRMAP_ROOTPAGE = 1 3033 READ_LOCK = 1 3034 SQLITE_FILE_HEADER = "SQLite format 3" 3035 TRANS_NONE = 0 3036 TRANS_READ = 1 3037 TRANS_WRITE = 2 3038 WRITE_LOCK = 2 3039 CPUSET_DEFAULT = 0 3040 CPUSET_INVALID = -1 3041 CPU_LEVEL_CPUSET = 2 3042 CPU_LEVEL_ROOT = 1 3043 CPU_LEVEL_WHICH = 3 3044 CPU_MAXSIZE = 256 3045 CPU_SETSIZE = 256 3046 CPU_WHICH_CPUSET = 3 3047 CPU_WHICH_DOMAIN = 6 3048 CPU_WHICH_INTRHANDLER = 7 3049 CPU_WHICH_IRQ = 4 3050 CPU_WHICH_ITHREAD = 8 3051 CPU_WHICH_JAIL = 5 3052 CPU_WHICH_PID = 2 3053 CPU_WHICH_TID = 1 3054 N_THREAD = 26 3055 PTHREAD_BARRIER_SERIAL_THREAD = -1 3056 PTHREAD_CANCEL_ASYNCHRONOUS = 2 3057 PTHREAD_CANCEL_DEFERRED = 0 3058 PTHREAD_CANCEL_DISABLE = 1 3059 PTHREAD_CANCEL_ENABLE = 0 3060 PTHREAD_CREATE_DETACHED = 1 3061 PTHREAD_CREATE_JOINABLE = 0 3062 PTHREAD_DESTRUCTOR_ITERATIONS = 4 3063 PTHREAD_DETACHED = 0x1 3064 PTHREAD_DONE_INIT = 1 3065 PTHREAD_EXPLICIT_SCHED = 0 3066 PTHREAD_INHERIT_SCHED = 0x4 3067 PTHREAD_KEYS_MAX = 256 3068 PTHREAD_MUTEX_ROBUST = 1 3069 PTHREAD_MUTEX_STALLED = 0 3070 PTHREAD_NEEDS_INIT = 0 3071 PTHREAD_NOFLOAT = 0x8 3072 PTHREAD_PRIO_INHERIT = 1 3073 PTHREAD_PRIO_NONE = 0 3074 PTHREAD_PRIO_PROTECT = 2 3075 PTHREAD_PROCESS_PRIVATE = 0 3076 PTHREAD_PROCESS_SHARED = 1 3077 PTHREAD_SCOPE_PROCESS = 0 3078 PTHREAD_SCOPE_SYSTEM = 0x2 3079 PTHREAD_STACK_MIN = 2048 3080 PTHREAD_THREADS_MAX = 18446744073709551615 3081 SCHED_FIFO = 1 3082 SCHED_OTHER = 2 3083 SCHED_RR = 3 3084 X_PTHREAD_H_ = 0 3085 X_SCHED_H_ = 0 3086 X_SYS_BITSET_H_ = 0 3087 X_SYS_CPUSET_H_ = 0 3088 X_SYS__BITSET_H_ = 0 3089 X_SYS__CPUSET_H_ = 0 3090 TCL_THREADS = 0 3091 MX_CHUNK_NUMBER = 299 3092 SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET = 400 3093 SQLITE_MULTIPLEX_WAL_8_3_OFFSET = 700 3094 DEVSYM_MAX_PATHNAME = 512 3095 DEVSYM_VFS_NAME = "devsym" 3096 WRITECRASH_NAME = "writecrash" 3097 SQLITE_INTARRAY_H = 0 3098 JT_MAX_PATHNAME = 512 3099 JT_VFS_NAME = "jt" 3100 MALLOC_LOG_FRAMES = 10 3101 DEFAULT_SECTOR_SIZE = 0x1000 3102 MAX_PAGE_SIZE = 0x10000 3103 MULTIPLEX_CTRL_ENABLE = 214014 3104 MULTIPLEX_CTRL_SET_CHUNK_SIZE = 214015 3105 MULTIPLEX_CTRL_SET_MAX_CHUNKS = 214016 3106 SQLITE_MULTIPLEX_CHUNK_SIZE = 2147418112 3107 SQLITE_MULTIPLEX_MAX_CHUNKS = 12 3108 SQLITE_MULTIPLEX_VFS_NAME = "multiplex" 3109 SQLITE_TEST_MULTIPLEX_H = 0 3110 MAX_MUTEXES = 14 3111 STATIC_MUTEXES = 12 3112 BLOBSIZE = 10485760 3113 BLOCKSIZE = 512 3114 DATABASE_FILE = 1 3115 FS_VFS_NAME = "fs" 3116 JOURNAL_FILE = 2 3117 INST_MAX_PATHNAME = 512 3118 OS_ACCESS = 1 3119 OS_ANNOTATE = 28 3120 OS_CHECKRESERVEDLOCK = 2 3121 OS_CLOSE = 3 3122 OS_CURRENTTIME = 4 3123 OS_DELETE = 5 3124 OS_DEVCHAR = 6 3125 OS_FILECONTROL = 7 3126 OS_FILESIZE = 8 3127 OS_FULLPATHNAME = 9 3128 OS_LOCK = 11 3129 OS_NUMEVENTS = 29 3130 OS_OPEN = 12 3131 OS_RANDOMNESS = 13 3132 OS_READ = 14 3133 OS_SECTORSIZE = 15 3134 OS_SHMBARRIER = 26 3135 OS_SHMLOCK = 25 3136 OS_SHMMAP = 23 3137 OS_SHMUNMAP = 22 3138 OS_SLEEP = 16 3139 OS_SYNC = 17 3140 OS_TRUNCATE = 18 3141 OS_UNLOCK = 19 3142 OS_WRITE = 20 3143 VFSLOG_BUFFERSIZE = 8192 3144 TESTPCACHE_CLEAR = 0xd42670d4 3145 TESTPCACHE_NPAGE = 217 3146 TESTPCACHE_RESERVE = 17 3147 TESTPCACHE_VALID = 0x364585fd 3148 MSG_Close = 6 3149 MSG_Done = 7 3150 MSG_Finalize = 5 3151 MSG_Open = 1 3152 MSG_Prepare = 2 3153 MSG_Reset = 4 3154 MSG_Step = 3 3155 INHERIT_COPY = 1 3156 INHERIT_NONE = 2 3157 INHERIT_SHARE = 0 3158 INHERIT_ZERO = 3 3159 MADV_AUTOSYNC = 7 3160 MADV_CORE = 9 3161 MADV_DONTNEED = 4 3162 MADV_FREE = 5 3163 MADV_NOCORE = 8 3164 MADV_NORMAL = 0 3165 MADV_NOSYNC = 6 3166 MADV_PROTECT = 10 3167 MADV_RANDOM = 1 3168 MADV_SEQUENTIAL = 2 3169 MADV_WILLNEED = 3 3170 MAP_32BIT = 0x00080000 3171 MAP_ALIGNED_SUPER = 16777216 3172 MAP_ALIGNMENT_MASK = 4278190080 3173 MAP_ALIGNMENT_SHIFT = 24 3174 MAP_ANON = 0x1000 3175 MAP_ANONYMOUS = 4096 3176 MAP_COPY = 2 3177 MAP_EXCL = 0x00004000 3178 MAP_FILE = 0x0000 3179 MAP_FIXED = 0x0010 3180 MAP_GUARD = 0x00002000 3181 MAP_HASSEMAPHORE = 0x0200 3182 MAP_NOCORE = 0x00020000 3183 MAP_NOSYNC = 0x0800 3184 MAP_PREFAULT_READ = 0x00040000 3185 MAP_PRIVATE = 0x0002 3186 MAP_RESERVED0020 = 0x0020 3187 MAP_RESERVED0040 = 0x0040 3188 MAP_RESERVED0080 = 0x0080 3189 MAP_RESERVED0100 = 0x0100 3190 MAP_SHARED = 0x0001 3191 MAP_STACK = 0x0400 3192 MCL_CURRENT = 0x0001 3193 MCL_FUTURE = 0x0002 3194 MFD_ALLOW_SEALING = 0x00000002 3195 MFD_CLOEXEC = 0x00000001 3196 MFD_HUGETLB = 0x00000004 3197 MFD_HUGE_16GB = 2281701376 3198 MFD_HUGE_16MB = 1610612736 3199 MFD_HUGE_1GB = 2013265920 3200 MFD_HUGE_1MB = 1342177280 3201 MFD_HUGE_256MB = 1879048192 3202 MFD_HUGE_2GB = 2080374784 3203 MFD_HUGE_2MB = 1409286144 3204 MFD_HUGE_32MB = 1677721600 3205 MFD_HUGE_512KB = 1275068416 3206 MFD_HUGE_512MB = 1946157056 3207 MFD_HUGE_64KB = 1073741824 3208 MFD_HUGE_8MB = 1543503872 3209 MFD_HUGE_MASK = 0xFC000000 3210 MFD_HUGE_SHIFT = 26 3211 MINCORE_INCORE = 0x1 3212 MINCORE_MODIFIED = 0x4 3213 MINCORE_MODIFIED_OTHER = 0x10 3214 MINCORE_REFERENCED = 0x2 3215 MINCORE_REFERENCED_OTHER = 0x8 3216 MINCORE_SUPER = 0x60 3217 MS_ASYNC = 0x0001 3218 MS_INVALIDATE = 0x0002 3219 MS_SYNC = 0x0000 3220 POSIX_MADV_DONTNEED = 4 3221 POSIX_MADV_NORMAL = 0 3222 POSIX_MADV_RANDOM = 1 3223 POSIX_MADV_SEQUENTIAL = 2 3224 POSIX_MADV_WILLNEED = 3 3225 PROT_EXEC = 0x04 3226 PROT_NONE = 0x00 3227 PROT_READ = 0x01 3228 PROT_WRITE = 0x02 3229 SHM_ALLOW_SEALING = 0x00000001 3230 SHM_GROW_ON_WRITE = 0x00000002 3231 SHM_LARGEPAGE = 0x00000004 3232 SHM_LARGEPAGE_ALLOC_DEFAULT = 0 3233 SHM_LARGEPAGE_ALLOC_HARD = 2 3234 SHM_LARGEPAGE_ALLOC_NOWAIT = 1 3235 SHM_RENAME_EXCHANGE = 2 3236 SHM_RENAME_NOREPLACE = 1 3237 X_MADV_DONTNEED = 4 3238 X_MADV_NORMAL = 0 3239 X_MADV_RANDOM = 1 3240 X_MADV_SEQUENTIAL = 2 3241 X_MADV_WILLNEED = 3 3242 X_PROT_ALL = 7 3243 X_PROT_MAX_SHIFT = 16 3244 X_SYS_MMAN_H_ = 0 3245 TCLVAR_NAME_EQ = 101 3246 TCLVAR_NAME_MATCH = 109 3247 TCLVAR_VALUE_GLOB = 103 3248 TCLVAR_VALUE_LIKE = 108 3249 TCLVAR_VALUE_REGEXP = 114 3250 FAULT_INJECT_NONE = 0 3251 FAULT_INJECT_PERSISTENT = 2 3252 FAULT_INJECT_TRANSIENT = 1 3253 TESTVFS_ACCESS_MASK = 0x00004000 3254 TESTVFS_ALL_MASK = 0x001FFFFF 3255 TESTVFS_CKLOCK_MASK = 0x00080000 3256 TESTVFS_CLOSE_MASK = 0x00000800 3257 TESTVFS_DELETE_MASK = 0x00000400 3258 TESTVFS_FCNTL_MASK = 0x00100000 3259 TESTVFS_FULLPATHNAME_MASK = 0x00008000 3260 TESTVFS_LOCK_MASK = 0x00040000 3261 TESTVFS_MAX_ARGS = 12 3262 TESTVFS_MAX_PAGES = 1024 3263 TESTVFS_OPEN_MASK = 0x00000100 3264 TESTVFS_READ_MASK = 0x00010000 3265 TESTVFS_SHMBARRIER_MASK = 0x00000040 3266 TESTVFS_SHMCLOSE_MASK = 0x00000080 3267 TESTVFS_SHMLOCK_MASK = 0x00000010 3268 TESTVFS_SHMMAP_MASK = 0x00000020 3269 TESTVFS_SHMOPEN_MASK = 0x00000001 3270 TESTVFS_SYNC_MASK = 0x00000200 3271 TESTVFS_TRUNCATE_MASK = 0x00002000 3272 TESTVFS_UNLOCK_MASK = 0x00020000 3273 TESTVFS_WRITE_MASK = 0x00001000 3274 ) 3275 3276 const ( 3277 PTHREAD_MUTEX_ERRORCHECK = 1 3278 PTHREAD_MUTEX_RECURSIVE = 2 3279 PTHREAD_MUTEX_NORMAL = 3 3280 PTHREAD_MUTEX_ADAPTIVE_NP = 4 3281 PTHREAD_MUTEX_TYPE_MAX = 5 3282 ) 3283 3284 const ( 3285 TCL_QUEUE_TAIL = 0 3286 TCL_QUEUE_HEAD = 1 3287 TCL_QUEUE_MARK = 2 3288 ) 3289 3290 const ( 3291 TCL_PATH_ABSOLUTE = 0 3292 TCL_PATH_RELATIVE = 1 3293 TCL_PATH_VOLUME_RELATIVE = 2 3294 ) 3295 3296 const ( 3297 TCL_INT = 0 3298 TCL_DOUBLE = 1 3299 TCL_EITHER = 2 3300 TCL_WIDE_INT = 3 3301 ) 3302 3303 type ptrdiff_t = int64 3304 3305 type size_t = uint64 3306 3307 type wchar_t = int32 3308 3309 type va_list = uintptr 3310 3311 type sqlite32 = struct { 3312 FpVfs uintptr 3313 FpVdbe uintptr 3314 FpDfltColl uintptr 3315 Fmutex uintptr 3316 FaDb uintptr 3317 FnDb int32 3318 FmDbFlags u32 3319 Fflags u64 3320 FlastRowid i64 3321 FszMmap i64 3322 FnSchemaLock u32 3323 FopenFlags uint32 3324 FerrCode int32 3325 FerrByteOffset int32 3326 FerrMask int32 3327 FiSysErrno int32 3328 FdbOptFlags u32 3329 Fenc u8 3330 FautoCommit u8 3331 Ftemp_store u8 3332 FmallocFailed u8 3333 FbBenignMalloc u8 3334 FdfltLockMode u8 3335 FnextAutovac int8 3336 FsuppressErr u8 3337 FvtabOnConflict u8 3338 FisTransactionSavepoint u8 3339 FmTrace u8 3340 FnoSharedCache u8 3341 FnSqlExec u8 3342 FeOpenState u8 3343 F__ccgo_pad1 [2]byte 3344 FnextPagesize int32 3345 FnChange i64 3346 FnTotalChange i64 3347 FaLimit [12]int32 3348 FnMaxSorterMmap int32 3349 F__ccgo_pad2 [4]byte 3350 Finit struct { 3351 FnewTnum Pgno 3352 FiDb u8 3353 Fbusy u8 3354 F__ccgo_pad1 [2]byte 3355 ForphanTrigger uint8 3356 F__ccgo_pad2 [7]byte 3357 FazInit uintptr 3358 } 3359 FnVdbeActive int32 3360 FnVdbeRead int32 3361 FnVdbeWrite int32 3362 FnVdbeExec int32 3363 FnVDestroy int32 3364 FnExtension int32 3365 FaExtension uintptr 3366 Ftrace struct{ FxLegacy uintptr } 3367 FpTraceArg uintptr 3368 FxProfile uintptr 3369 FpProfileArg uintptr 3370 FpCommitArg uintptr 3371 FxCommitCallback uintptr 3372 FpRollbackArg uintptr 3373 FxRollbackCallback uintptr 3374 FpUpdateArg uintptr 3375 FxUpdateCallback uintptr 3376 FpAutovacPagesArg uintptr 3377 FxAutovacDestr uintptr 3378 FxAutovacPages uintptr 3379 FpParse uintptr 3380 FpPreUpdateArg uintptr 3381 FxPreUpdateCallback uintptr 3382 FpPreUpdate uintptr 3383 FxWalCallback uintptr 3384 FpWalArg uintptr 3385 FxCollNeeded uintptr 3386 FxCollNeeded16 uintptr 3387 FpCollNeededArg uintptr 3388 FpErr uintptr 3389 Fu1 struct { 3390 F__ccgo_pad1 [0]uint64 3391 FisInterrupted int32 3392 F__ccgo_pad2 [4]byte 3393 } 3394 Flookaside Lookaside 3395 FxAuth sqlite3_xauth 3396 FpAuthArg uintptr 3397 FxProgress uintptr 3398 FpProgressArg uintptr 3399 FnProgressOps uint32 3400 FnVTrans int32 3401 FaModule Hash 3402 FpVtabCtx uintptr 3403 FaVTrans uintptr 3404 FpDisconnect uintptr 3405 FaFunc Hash 3406 FaCollSeq Hash 3407 FbusyHandler BusyHandler 3408 FaDbStatic [2]Db 3409 FpSavepoint uintptr 3410 FnAnalysisLimit int32 3411 FbusyTimeout int32 3412 FnSavepoint int32 3413 FnStatement int32 3414 FnDeferredCons i64 3415 FnDeferredImmCons i64 3416 FpnBytesFreed uintptr 3417 FpBlockingConnection uintptr 3418 FpUnlockConnection uintptr 3419 FpUnlockArg uintptr 3420 FxUnlockNotify uintptr 3421 FpNextBlocked uintptr 3422 } 3423 3424 type sqlite_int64 = int64 3425 type sqlite_uint64 = uint64 3426 type sqlite3_int64 = sqlite_int64 3427 type sqlite3_uint64 = sqlite_uint64 3428 3429 type sqlite3_callback = uintptr 3430 3431 type sqlite3_file1 = struct{ FpMethods uintptr } 3432 3433 type sqlite3_file = sqlite3_file1 3434 type sqlite3_io_methods1 = struct { 3435 FiVersion int32 3436 F__ccgo_pad1 [4]byte 3437 FxClose uintptr 3438 FxRead uintptr 3439 FxWrite uintptr 3440 FxTruncate uintptr 3441 FxSync uintptr 3442 FxFileSize uintptr 3443 FxLock uintptr 3444 FxUnlock uintptr 3445 FxCheckReservedLock uintptr 3446 FxFileControl uintptr 3447 FxSectorSize uintptr 3448 FxDeviceCharacteristics uintptr 3449 FxShmMap uintptr 3450 FxShmLock uintptr 3451 FxShmBarrier uintptr 3452 FxShmUnmap uintptr 3453 FxFetch uintptr 3454 FxUnfetch uintptr 3455 } 3456 3457 type sqlite3_io_methods = sqlite3_io_methods1 3458 3459 type sqlite3_mutex1 = struct { 3460 FpReal uintptr 3461 FeType int32 3462 F__ccgo_pad1 [4]byte 3463 } 3464 3465 type sqlite3_api_routines1 = struct { 3466 Faggregate_context uintptr 3467 Faggregate_count uintptr 3468 Fbind_blob uintptr 3469 Fbind_double uintptr 3470 Fbind_int uintptr 3471 Fbind_int64 uintptr 3472 Fbind_null uintptr 3473 Fbind_parameter_count uintptr 3474 Fbind_parameter_index uintptr 3475 Fbind_parameter_name uintptr 3476 Fbind_text uintptr 3477 Fbind_text16 uintptr 3478 Fbind_value uintptr 3479 Fbusy_handler uintptr 3480 Fbusy_timeout uintptr 3481 Fchanges uintptr 3482 Fclose uintptr 3483 Fcollation_needed uintptr 3484 Fcollation_needed16 uintptr 3485 Fcolumn_blob uintptr 3486 Fcolumn_bytes uintptr 3487 Fcolumn_bytes16 uintptr 3488 Fcolumn_count uintptr 3489 Fcolumn_database_name uintptr 3490 Fcolumn_database_name16 uintptr 3491 Fcolumn_decltype uintptr 3492 Fcolumn_decltype16 uintptr 3493 Fcolumn_double uintptr 3494 Fcolumn_int uintptr 3495 Fcolumn_int64 uintptr 3496 Fcolumn_name uintptr 3497 Fcolumn_name16 uintptr 3498 Fcolumn_origin_name uintptr 3499 Fcolumn_origin_name16 uintptr 3500 Fcolumn_table_name uintptr 3501 Fcolumn_table_name16 uintptr 3502 Fcolumn_text uintptr 3503 Fcolumn_text16 uintptr 3504 Fcolumn_type uintptr 3505 Fcolumn_value uintptr 3506 Fcommit_hook uintptr 3507 Fcomplete uintptr 3508 Fcomplete16 uintptr 3509 Fcreate_collation uintptr 3510 Fcreate_collation16 uintptr 3511 Fcreate_function uintptr 3512 Fcreate_function16 uintptr 3513 Fcreate_module uintptr 3514 Fdata_count uintptr 3515 Fdb_handle uintptr 3516 Fdeclare_vtab uintptr 3517 Fenable_shared_cache uintptr 3518 Ferrcode uintptr 3519 Ferrmsg uintptr 3520 Ferrmsg16 uintptr 3521 Fexec uintptr 3522 Fexpired uintptr 3523 Ffinalize uintptr 3524 Ffree uintptr 3525 Ffree_table uintptr 3526 Fget_autocommit uintptr 3527 Fget_auxdata uintptr 3528 Fget_table uintptr 3529 Fglobal_recover uintptr 3530 Finterruptx uintptr 3531 Flast_insert_rowid uintptr 3532 Flibversion uintptr 3533 Flibversion_number uintptr 3534 Fmalloc uintptr 3535 Fmprintf uintptr 3536 Fopen uintptr 3537 Fopen16 uintptr 3538 Fprepare uintptr 3539 Fprepare16 uintptr 3540 Fprofile uintptr 3541 Fprogress_handler uintptr 3542 Frealloc uintptr 3543 Freset uintptr 3544 Fresult_blob uintptr 3545 Fresult_double uintptr 3546 Fresult_error uintptr 3547 Fresult_error16 uintptr 3548 Fresult_int uintptr 3549 Fresult_int64 uintptr 3550 Fresult_null uintptr 3551 Fresult_text uintptr 3552 Fresult_text16 uintptr 3553 Fresult_text16be uintptr 3554 Fresult_text16le uintptr 3555 Fresult_value uintptr 3556 Frollback_hook uintptr 3557 Fset_authorizer uintptr 3558 Fset_auxdata uintptr 3559 Fxsnprintf uintptr 3560 Fstep uintptr 3561 Ftable_column_metadata uintptr 3562 Fthread_cleanup uintptr 3563 Ftotal_changes uintptr 3564 Ftrace uintptr 3565 Ftransfer_bindings uintptr 3566 Fupdate_hook uintptr 3567 Fuser_data uintptr 3568 Fvalue_blob uintptr 3569 Fvalue_bytes uintptr 3570 Fvalue_bytes16 uintptr 3571 Fvalue_double uintptr 3572 Fvalue_int uintptr 3573 Fvalue_int64 uintptr 3574 Fvalue_numeric_type uintptr 3575 Fvalue_text uintptr 3576 Fvalue_text16 uintptr 3577 Fvalue_text16be uintptr 3578 Fvalue_text16le uintptr 3579 Fvalue_type uintptr 3580 Fvmprintf uintptr 3581 Foverload_function uintptr 3582 Fprepare_v2 uintptr 3583 Fprepare16_v2 uintptr 3584 Fclear_bindings uintptr 3585 Fcreate_module_v2 uintptr 3586 Fbind_zeroblob uintptr 3587 Fblob_bytes uintptr 3588 Fblob_close uintptr 3589 Fblob_open uintptr 3590 Fblob_read uintptr 3591 Fblob_write uintptr 3592 Fcreate_collation_v2 uintptr 3593 Ffile_control uintptr 3594 Fmemory_highwater uintptr 3595 Fmemory_used uintptr 3596 Fmutex_alloc uintptr 3597 Fmutex_enter uintptr 3598 Fmutex_free uintptr 3599 Fmutex_leave uintptr 3600 Fmutex_try uintptr 3601 Fopen_v2 uintptr 3602 Frelease_memory uintptr 3603 Fresult_error_nomem uintptr 3604 Fresult_error_toobig uintptr 3605 Fsleep uintptr 3606 Fsoft_heap_limit uintptr 3607 Fvfs_find uintptr 3608 Fvfs_register uintptr 3609 Fvfs_unregister uintptr 3610 Fxthreadsafe uintptr 3611 Fresult_zeroblob uintptr 3612 Fresult_error_code uintptr 3613 Ftest_control uintptr 3614 Frandomness uintptr 3615 Fcontext_db_handle uintptr 3616 Fextended_result_codes uintptr 3617 Flimit uintptr 3618 Fnext_stmt uintptr 3619 Fsql uintptr 3620 Fstatus uintptr 3621 Fbackup_finish uintptr 3622 Fbackup_init uintptr 3623 Fbackup_pagecount uintptr 3624 Fbackup_remaining uintptr 3625 Fbackup_step uintptr 3626 Fcompileoption_get uintptr 3627 Fcompileoption_used uintptr 3628 Fcreate_function_v2 uintptr 3629 Fdb_config uintptr 3630 Fdb_mutex uintptr 3631 Fdb_status uintptr 3632 Fextended_errcode uintptr 3633 Flog uintptr 3634 Fsoft_heap_limit64 uintptr 3635 Fsourceid uintptr 3636 Fstmt_status uintptr 3637 Fstrnicmp uintptr 3638 Funlock_notify uintptr 3639 Fwal_autocheckpoint uintptr 3640 Fwal_checkpoint uintptr 3641 Fwal_hook uintptr 3642 Fblob_reopen uintptr 3643 Fvtab_config uintptr 3644 Fvtab_on_conflict uintptr 3645 Fclose_v2 uintptr 3646 Fdb_filename uintptr 3647 Fdb_readonly uintptr 3648 Fdb_release_memory uintptr 3649 Ferrstr uintptr 3650 Fstmt_busy uintptr 3651 Fstmt_readonly uintptr 3652 Fstricmp uintptr 3653 Furi_boolean uintptr 3654 Furi_int64 uintptr 3655 Furi_parameter uintptr 3656 Fxvsnprintf uintptr 3657 Fwal_checkpoint_v2 uintptr 3658 Fauto_extension uintptr 3659 Fbind_blob64 uintptr 3660 Fbind_text64 uintptr 3661 Fcancel_auto_extension uintptr 3662 Fload_extension uintptr 3663 Fmalloc64 uintptr 3664 Fmsize uintptr 3665 Frealloc64 uintptr 3666 Freset_auto_extension uintptr 3667 Fresult_blob64 uintptr 3668 Fresult_text64 uintptr 3669 Fstrglob uintptr 3670 Fvalue_dup uintptr 3671 Fvalue_free uintptr 3672 Fresult_zeroblob64 uintptr 3673 Fbind_zeroblob64 uintptr 3674 Fvalue_subtype uintptr 3675 Fresult_subtype uintptr 3676 Fstatus64 uintptr 3677 Fstrlike uintptr 3678 Fdb_cacheflush uintptr 3679 Fsystem_errno uintptr 3680 Ftrace_v2 uintptr 3681 Fexpanded_sql uintptr 3682 Fset_last_insert_rowid uintptr 3683 Fprepare_v3 uintptr 3684 Fprepare16_v3 uintptr 3685 Fbind_pointer uintptr 3686 Fresult_pointer uintptr 3687 Fvalue_pointer uintptr 3688 Fvtab_nochange uintptr 3689 Fvalue_nochange uintptr 3690 Fvtab_collation uintptr 3691 Fkeyword_count uintptr 3692 Fkeyword_name uintptr 3693 Fkeyword_check uintptr 3694 Fstr_new uintptr 3695 Fstr_finish uintptr 3696 Fstr_appendf uintptr 3697 Fstr_vappendf uintptr 3698 Fstr_append uintptr 3699 Fstr_appendall uintptr 3700 Fstr_appendchar uintptr 3701 Fstr_reset uintptr 3702 Fstr_errcode uintptr 3703 Fstr_length uintptr 3704 Fstr_value uintptr 3705 Fcreate_window_function uintptr 3706 Fnormalized_sql uintptr 3707 Fstmt_isexplain uintptr 3708 Fvalue_frombind uintptr 3709 Fdrop_modules uintptr 3710 Fhard_heap_limit64 uintptr 3711 Furi_key uintptr 3712 Ffilename_database uintptr 3713 Ffilename_journal uintptr 3714 Ffilename_wal uintptr 3715 Fcreate_filename uintptr 3716 Ffree_filename uintptr 3717 Fdatabase_file_object uintptr 3718 Ftxn_state uintptr 3719 Fchanges64 uintptr 3720 Ftotal_changes64 uintptr 3721 Fautovacuum_pages uintptr 3722 Ferror_offset uintptr 3723 Fvtab_rhs_value uintptr 3724 Fvtab_distinct uintptr 3725 Fvtab_in uintptr 3726 Fvtab_in_first uintptr 3727 Fvtab_in_next uintptr 3728 Fdeserialize uintptr 3729 Fserialize uintptr 3730 Fdb_name uintptr 3731 } 3732 3733 type sqlite3_vfs1 = struct { 3734 FiVersion int32 3735 FszOsFile int32 3736 FmxPathname int32 3737 F__ccgo_pad1 [4]byte 3738 FpNext uintptr 3739 FzName uintptr 3740 FpAppData uintptr 3741 FxOpen uintptr 3742 FxDelete uintptr 3743 FxAccess uintptr 3744 FxFullPathname uintptr 3745 FxDlOpen uintptr 3746 FxDlError uintptr 3747 FxDlSym uintptr 3748 FxDlClose uintptr 3749 FxRandomness uintptr 3750 FxSleep uintptr 3751 FxCurrentTime uintptr 3752 FxGetLastError uintptr 3753 FxCurrentTimeInt64 uintptr 3754 FxSetSystemCall uintptr 3755 FxGetSystemCall uintptr 3756 FxNextSystemCall uintptr 3757 } 3758 3759 type sqlite3_vfs = sqlite3_vfs1 3760 type sqlite3_syscall_ptr = uintptr 3761 3762 type sqlite3_mem_methods1 = struct { 3763 FxMalloc uintptr 3764 FxFree uintptr 3765 FxRealloc uintptr 3766 FxSize uintptr 3767 FxRoundup uintptr 3768 FxInit uintptr 3769 FxShutdown uintptr 3770 FpAppData uintptr 3771 } 3772 3773 type sqlite3_mem_methods = sqlite3_mem_methods1 3774 3775 type sqlite3_value1 = struct { 3776 Fu struct{ Fr float64 } 3777 Fz uintptr 3778 Fn int32 3779 Fflags u16 3780 Fenc u8 3781 FeSubtype u8 3782 Fdb uintptr 3783 FszMalloc int32 3784 FuTemp u32 3785 FzMalloc uintptr 3786 FxDel uintptr 3787 } 3788 3789 type sqlite3_context1 = struct { 3790 FpOut uintptr 3791 FpFunc uintptr 3792 FpMem uintptr 3793 FpVdbe uintptr 3794 FiOp int32 3795 FisError int32 3796 Fenc u8 3797 FskipFlag u8 3798 Fargc u8 3799 F__ccgo_pad1 [5]byte 3800 Fargv [1]uintptr 3801 } 3802 3803 type sqlite3_destructor_type = uintptr 3804 3805 type sqlite3_vtab1 = struct { 3806 FpModule uintptr 3807 FnRef int32 3808 F__ccgo_pad1 [4]byte 3809 FzErrMsg uintptr 3810 } 3811 3812 type sqlite3_vtab = sqlite3_vtab1 3813 type sqlite3_index_info1 = struct { 3814 FnConstraint int32 3815 F__ccgo_pad1 [4]byte 3816 FaConstraint uintptr 3817 FnOrderBy int32 3818 F__ccgo_pad2 [4]byte 3819 FaOrderBy uintptr 3820 FaConstraintUsage uintptr 3821 FidxNum int32 3822 F__ccgo_pad3 [4]byte 3823 FidxStr uintptr 3824 FneedToFreeIdxStr int32 3825 ForderByConsumed int32 3826 FestimatedCost float64 3827 FestimatedRows sqlite3_int64 3828 FidxFlags int32 3829 F__ccgo_pad4 [4]byte 3830 FcolUsed sqlite3_uint64 3831 } 3832 3833 type sqlite3_index_info = sqlite3_index_info1 3834 type sqlite3_vtab_cursor1 = struct{ FpVtab uintptr } 3835 3836 type sqlite3_vtab_cursor = sqlite3_vtab_cursor1 3837 type sqlite3_module1 = struct { 3838 FiVersion int32 3839 F__ccgo_pad1 [4]byte 3840 FxCreate uintptr 3841 FxConnect uintptr 3842 FxBestIndex uintptr 3843 FxDisconnect uintptr 3844 FxDestroy uintptr 3845 FxOpen uintptr 3846 FxClose uintptr 3847 FxFilter uintptr 3848 FxNext uintptr 3849 FxEof uintptr 3850 FxColumn uintptr 3851 FxRowid uintptr 3852 FxUpdate uintptr 3853 FxBegin uintptr 3854 FxSync uintptr 3855 FxCommit uintptr 3856 FxRollback uintptr 3857 FxFindFunction uintptr 3858 FxRename uintptr 3859 FxSavepoint uintptr 3860 FxRelease uintptr 3861 FxRollbackTo uintptr 3862 FxShadowName uintptr 3863 } 3864 3865 type sqlite3_module = sqlite3_module1 3866 3867 type sqlite3_index_constraint = struct { 3868 FiColumn int32 3869 Fop uint8 3870 Fusable uint8 3871 F__ccgo_pad1 [2]byte 3872 FiTermOffset int32 3873 } 3874 3875 type sqlite3_index_orderby = struct { 3876 FiColumn int32 3877 Fdesc uint8 3878 F__ccgo_pad1 [3]byte 3879 } 3880 3881 type sqlite3_index_constraint_usage = struct { 3882 FargvIndex int32 3883 Fomit uint8 3884 F__ccgo_pad1 [3]byte 3885 } 3886 3887 type sqlite3_mutex_methods1 = struct { 3888 FxMutexInit uintptr 3889 FxMutexEnd uintptr 3890 FxMutexAlloc uintptr 3891 FxMutexFree uintptr 3892 FxMutexEnter uintptr 3893 FxMutexTry uintptr 3894 FxMutexLeave uintptr 3895 FxMutexHeld uintptr 3896 FxMutexNotheld uintptr 3897 } 3898 3899 type sqlite3_mutex_methods = sqlite3_mutex_methods1 3900 3901 type sqlite3_str1 = struct { 3902 Fdb uintptr 3903 FzText uintptr 3904 FnAlloc u32 3905 FmxAlloc u32 3906 FnChar u32 3907 FaccError u8 3908 FprintfFlags u8 3909 F__ccgo_pad1 [2]byte 3910 } 3911 3912 type sqlite3_pcache_page1 = struct { 3913 FpBuf uintptr 3914 FpExtra uintptr 3915 } 3916 3917 type sqlite3_pcache_page = sqlite3_pcache_page1 3918 3919 type sqlite3_pcache_methods21 = struct { 3920 FiVersion int32 3921 F__ccgo_pad1 [4]byte 3922 FpArg uintptr 3923 FxInit uintptr 3924 FxShutdown uintptr 3925 FxCreate uintptr 3926 FxCachesize uintptr 3927 FxPagecount uintptr 3928 FxFetch uintptr 3929 FxUnpin uintptr 3930 FxRekey uintptr 3931 FxTruncate uintptr 3932 FxDestroy uintptr 3933 FxShrink uintptr 3934 } 3935 3936 type sqlite3_pcache_methods2 = sqlite3_pcache_methods21 3937 3938 type sqlite3_pcache_methods1 = struct { 3939 FpArg uintptr 3940 FxInit uintptr 3941 FxShutdown uintptr 3942 FxCreate uintptr 3943 FxCachesize uintptr 3944 FxPagecount uintptr 3945 FxFetch uintptr 3946 FxUnpin uintptr 3947 FxRekey uintptr 3948 FxTruncate uintptr 3949 FxDestroy uintptr 3950 } 3951 3952 type sqlite3_pcache_methods = sqlite3_pcache_methods1 3953 3954 type sqlite3_snapshot1 = struct{ Fhidden [48]uint8 } 3955 3956 type sqlite3_snapshot = sqlite3_snapshot1 3957 3958 type sqlite3_rtree_geometry1 = struct { 3959 FpContext uintptr 3960 FnParam int32 3961 F__ccgo_pad1 [4]byte 3962 FaParam uintptr 3963 FpUser uintptr 3964 FxDelUser uintptr 3965 } 3966 3967 type sqlite3_rtree_geometry = sqlite3_rtree_geometry1 3968 type sqlite3_rtree_query_info1 = struct { 3969 FpContext uintptr 3970 FnParam int32 3971 F__ccgo_pad1 [4]byte 3972 FaParam uintptr 3973 FpUser uintptr 3974 FxDelUser uintptr 3975 FaCoord uintptr 3976 FanQueue uintptr 3977 FnCoord int32 3978 FiLevel int32 3979 FmxLevel int32 3980 F__ccgo_pad2 [4]byte 3981 FiRowid sqlite3_int64 3982 FrParentScore sqlite3_rtree_dbl 3983 FeParentWithin int32 3984 FeWithin int32 3985 FrScore sqlite3_rtree_dbl 3986 FapSqlParam uintptr 3987 } 3988 3989 type sqlite3_rtree_query_info = sqlite3_rtree_query_info1 3990 3991 type sqlite3_rtree_dbl = float64 3992 3993 type Fts5ExtensionApi1 = struct { 3994 FiVersion int32 3995 F__ccgo_pad1 [4]byte 3996 FxUserData uintptr 3997 FxColumnCount uintptr 3998 FxRowCount uintptr 3999 FxColumnTotalSize uintptr 4000 FxTokenize uintptr 4001 FxPhraseCount uintptr 4002 FxPhraseSize uintptr 4003 FxInstCount uintptr 4004 FxInst uintptr 4005 FxRowid uintptr 4006 FxColumnText uintptr 4007 FxColumnSize uintptr 4008 FxQueryPhrase uintptr 4009 FxSetAuxdata uintptr 4010 FxGetAuxdata uintptr 4011 FxPhraseFirst uintptr 4012 FxPhraseNext uintptr 4013 FxPhraseFirstColumn uintptr 4014 FxPhraseNextColumn uintptr 4015 } 4016 4017 type Fts5ExtensionApi = Fts5ExtensionApi1 4018 type Fts5PhraseIter1 = struct { 4019 Fa uintptr 4020 Fb uintptr 4021 } 4022 4023 type Fts5PhraseIter = Fts5PhraseIter1 4024 4025 type fts5_extension_function = uintptr 4026 type fts5_tokenizer1 = struct { 4027 FxCreate uintptr 4028 FxDelete uintptr 4029 FxTokenize uintptr 4030 } 4031 4032 type fts5_tokenizer = fts5_tokenizer1 4033 4034 type fts5_api1 = struct { 4035 FiVersion int32 4036 F__ccgo_pad1 [4]byte 4037 FxCreateTokenizer uintptr 4038 FxFindTokenizer uintptr 4039 FxCreateFunction uintptr 4040 } 4041 4042 type fts5_api = fts5_api1 4043 4044 type sqlite3expert1 = struct { 4045 FiSample int32 4046 F__ccgo_pad1 [4]byte 4047 Fdb uintptr 4048 Fdbm uintptr 4049 Fdbv uintptr 4050 FpTable uintptr 4051 FpScan uintptr 4052 FpWrite uintptr 4053 FpStatement uintptr 4054 FbRun int32 4055 F__ccgo_pad2 [4]byte 4056 FpzErrmsg uintptr 4057 Frc int32 4058 F__ccgo_pad3 [4]byte 4059 FhIdx IdxHash 4060 FzCandidates uintptr 4061 } 4062 4063 type sqlite3expert = sqlite3expert1 4064 4065 type locale_t = uintptr 4066 4067 type ssize_t = int64 4068 4069 type rsize_t = size_t 4070 4071 type errno_t = int32 4072 4073 type fpos_t = int64 4074 4075 type off_t = int64 4076 4077 type off64_t = int64 4078 4079 type __sbuf = struct { 4080 F_base uintptr 4081 F_size int32 4082 F__ccgo_pad1 [4]byte 4083 } 4084 4085 type __sFILE = struct { 4086 F_p uintptr 4087 F_r int32 4088 F_w int32 4089 F_flags int16 4090 F_file int16 4091 F__ccgo_pad1 [4]byte 4092 F_bf struct { 4093 F_base uintptr 4094 F_size int32 4095 F__ccgo_pad1 [4]byte 4096 } 4097 F_lbfsize int32 4098 F__ccgo_pad2 [4]byte 4099 F_cookie uintptr 4100 F_close uintptr 4101 F_read uintptr 4102 F_seek uintptr 4103 F_write uintptr 4104 F_ub struct { 4105 F_base uintptr 4106 F_size int32 4107 F__ccgo_pad1 [4]byte 4108 } 4109 F_up uintptr 4110 F_ur int32 4111 F_ubuf [3]uint8 4112 F_nbuf [1]uint8 4113 F_lb struct { 4114 F_base uintptr 4115 F_size int32 4116 F__ccgo_pad1 [4]byte 4117 } 4118 F_blksize int32 4119 F__ccgo_pad3 [4]byte 4120 F_offset fpos_t 4121 F_fl_mutex uintptr 4122 F_fl_owner uintptr 4123 F_fl_count int32 4124 F_orientation int32 4125 F_mbstate struct { 4126 F__ccgo_pad1 [0]uint64 4127 F__mbstate8 [128]int8 4128 } 4129 F_flags2 int32 4130 F__ccgo_pad4 [4]byte 4131 } 4132 4133 type FILE = __sFILE 4134 type cookie_io_functions_t = struct { 4135 Fread uintptr 4136 Fwrite uintptr 4137 Fseek uintptr 4138 Fclose uintptr 4139 } 4140 4141 type i64 = sqlite3_int64 4142 type u64 = sqlite3_uint64 4143 4144 type IdxColumn1 = struct { 4145 FzName uintptr 4146 FzColl uintptr 4147 FiPk int32 4148 F__ccgo_pad1 [4]byte 4149 } 4150 4151 type IdxColumn = IdxColumn1 4152 type IdxConstraint1 = struct { 4153 FzColl uintptr 4154 FbRange int32 4155 FiCol int32 4156 FbFlag int32 4157 FbDesc int32 4158 FpNext uintptr 4159 FpLink uintptr 4160 } 4161 4162 type IdxConstraint = IdxConstraint1 4163 type IdxScan1 = struct { 4164 FpTab uintptr 4165 FiDb int32 4166 F__ccgo_pad1 [4]byte 4167 Fcovering i64 4168 FpOrder uintptr 4169 FpEq uintptr 4170 FpRange uintptr 4171 FpNextScan uintptr 4172 } 4173 4174 type IdxScan = IdxScan1 4175 type IdxStatement1 = struct { 4176 FiId int32 4177 F__ccgo_pad1 [4]byte 4178 FzSql uintptr 4179 FzIdx uintptr 4180 FzEQP uintptr 4181 FpNext uintptr 4182 } 4183 4184 type IdxStatement = IdxStatement1 4185 type IdxTable1 = struct { 4186 FnCol int32 4187 F__ccgo_pad1 [4]byte 4188 FzName uintptr 4189 FaCol uintptr 4190 FpNext uintptr 4191 } 4192 4193 type IdxTable = IdxTable1 4194 type IdxWrite1 = struct { 4195 FpTab uintptr 4196 FeOp int32 4197 F__ccgo_pad1 [4]byte 4198 FpNext uintptr 4199 } 4200 4201 type IdxWrite = IdxWrite1 4202 4203 type IdxHashEntry1 = struct { 4204 FzKey uintptr 4205 FzVal uintptr 4206 FzVal2 uintptr 4207 FpHashNext uintptr 4208 FpNext uintptr 4209 } 4210 4211 type IdxHashEntry = IdxHashEntry1 4212 type IdxHash1 = struct { 4213 FpFirst uintptr 4214 FaHash [1023]uintptr 4215 } 4216 4217 type IdxHash = IdxHash1 4218 4219 func idxMalloc(tls *libc.TLS, pRc uintptr, nByte int32) uintptr { 4220 var pRet uintptr 4221 4222 pRet = sqlite3.Xsqlite3_malloc(tls, nByte) 4223 if pRet != 0 { 4224 libc.Xmemset(tls, pRet, 0, uint64(nByte)) 4225 } else { 4226 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4227 } 4228 return pRet 4229 } 4230 4231 func idxHashInit(tls *libc.TLS, pHash uintptr) { 4232 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 4233 } 4234 4235 func idxHashClear(tls *libc.TLS, pHash uintptr) { 4236 var i int32 4237 for i = 0; i < IDX_HASH_SIZE; i++ { 4238 var pEntry uintptr 4239 var pNext uintptr 4240 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(i)*8)); pEntry != 0; pEntry = pNext { 4241 pNext = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext 4242 sqlite3.Xsqlite3_free(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2) 4243 sqlite3.Xsqlite3_free(tls, pEntry) 4244 } 4245 } 4246 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 4247 } 4248 4249 func idxHashString(tls *libc.TLS, z uintptr, n int32) int32 { 4250 var ret uint32 = uint32(0) 4251 var i int32 4252 for i = 0; i < n; i++ { 4253 ret = ret + (ret<<3 + uint32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))))) 4254 } 4255 return int32(ret % uint32(IDX_HASH_SIZE)) 4256 } 4257 4258 func idxHashAdd(tls *libc.TLS, pRc uintptr, pHash uintptr, zKey uintptr, zVal uintptr) int32 { 4259 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 4260 var iHash int32 = idxHashString(tls, zKey, nKey) 4261 var nVal int32 = func() int32 { 4262 if zVal != 0 { 4263 return int32(libc.Xstrlen(tls, zVal)) 4264 } 4265 return 0 4266 }() 4267 var pEntry uintptr 4268 4269 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4270 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 4271 return 1 4272 } 4273 } 4274 pEntry = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxHashEntry{}))+uint64(nKey)+uint64(1)+uint64(nVal)+uint64(1))) 4275 if pEntry != 0 { 4276 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey = pEntry + 1*40 4277 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) 4278 if zVal != 0 { 4279 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey + uintptr(nKey+1) 4280 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, zVal, uint64(nVal)) 4281 } 4282 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) 4283 *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) = pEntry 4284 4285 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext = (*IdxHash)(unsafe.Pointer(pHash)).FpFirst 4286 (*IdxHash)(unsafe.Pointer(pHash)).FpFirst = pEntry 4287 } 4288 return 0 4289 } 4290 4291 func idxHashFind(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4292 var iHash int32 4293 var pEntry uintptr 4294 if nKey < 0 { 4295 nKey = int32(libc.Xstrlen(tls, zKey)) 4296 } 4297 iHash = idxHashString(tls, zKey, nKey) 4298 4299 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4300 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 4301 return pEntry 4302 } 4303 } 4304 return uintptr(0) 4305 } 4306 4307 func idxHashSearch(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4308 var pEntry uintptr = idxHashFind(tls, pHash, zKey, nKey) 4309 if pEntry != 0 { 4310 return (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal 4311 } 4312 return uintptr(0) 4313 } 4314 4315 func idxNewConstraint(tls *libc.TLS, pRc uintptr, zColl uintptr) uintptr { 4316 var pNew uintptr 4317 var nColl int32 = int32(libc.Xstrlen(tls, zColl)) 4318 4319 pNew = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxConstraint{}))*uint64(nColl)+uint64(1))) 4320 if pNew != 0 { 4321 (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl = pNew + 1*40 4322 libc.Xmemcpy(tls, (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl, zColl, uint64(nColl+1)) 4323 } 4324 return pNew 4325 } 4326 4327 func idxDatabaseError(tls *libc.TLS, db uintptr, pzErrmsg uintptr) { 4328 bp := tls.Alloc(8) 4329 defer tls.Free(8) 4330 4331 *(*uintptr)(unsafe.Pointer(pzErrmsg)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 4332 } 4333 4334 func idxPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zSql uintptr) int32 { 4335 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, ppStmt, uintptr(0)) 4336 if rc != SQLITE_OK { 4337 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 4338 idxDatabaseError(tls, db, pzErrmsg) 4339 } 4340 return rc 4341 } 4342 4343 func idxPrintfPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zFmt uintptr, va uintptr) int32 { 4344 var ap va_list 4345 _ = ap 4346 var rc int32 4347 var zSql uintptr 4348 ap = va 4349 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 4350 if zSql == uintptr(0) { 4351 rc = SQLITE_NOMEM 4352 } else { 4353 rc = idxPrepareStmt(tls, db, ppStmt, pzErrmsg, zSql) 4354 sqlite3.Xsqlite3_free(tls, zSql) 4355 } 4356 _ = ap 4357 return rc 4358 } 4359 4360 type ExpertVtab1 = struct { 4361 Fbase sqlite3_vtab 4362 FpTab uintptr 4363 FpExpert uintptr 4364 } 4365 4366 type ExpertVtab = ExpertVtab1 4367 4368 type ExpertCsr1 = struct { 4369 Fbase sqlite3_vtab_cursor 4370 FpData uintptr 4371 } 4372 4373 type ExpertCsr = ExpertCsr1 4374 4375 func expertDequote(tls *libc.TLS, zIn uintptr) uintptr { 4376 var n int32 = int32(libc.Xstrlen(tls, zIn)) 4377 var zRet uintptr = sqlite3.Xsqlite3_malloc(tls, n) 4378 4379 if zRet != 0 { 4380 var iOut int32 = 0 4381 var iIn int32 = 0 4382 for iIn = 1; iIn < n-1; iIn++ { 4383 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == '\'' { 4384 iIn++ 4385 } 4386 *(*int8)(unsafe.Pointer(zRet + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 4387 } 4388 *(*int8)(unsafe.Pointer(zRet + uintptr(iOut))) = int8(0) 4389 } 4390 4391 return zRet 4392 } 4393 4394 func expertConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 4395 bp := tls.Alloc(4) 4396 defer tls.Free(4) 4397 4398 var pExpert uintptr = pAux 4399 var p uintptr = uintptr(0) 4400 4401 if argc != 4 { 4402 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3, 0) 4403 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 4404 } else { 4405 var zCreateTable uintptr = expertDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 4406 if zCreateTable != 0 { 4407 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 4408 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4409 p = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertVtab{}))) 4410 } 4411 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4412 (*ExpertVtab)(unsafe.Pointer(p)).FpExpert = pExpert 4413 (*ExpertVtab)(unsafe.Pointer(p)).FpTab = (*sqlite3expert)(unsafe.Pointer(pExpert)).FpTable 4414 4415 } 4416 sqlite3.Xsqlite3_free(tls, zCreateTable) 4417 } else { 4418 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 4419 } 4420 } 4421 4422 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 4423 return *(*int32)(unsafe.Pointer(bp)) 4424 } 4425 4426 func expertDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 4427 var p uintptr = pVtab 4428 sqlite3.Xsqlite3_free(tls, p) 4429 return SQLITE_OK 4430 } 4431 4432 func expertBestIndex(tls *libc.TLS, pVtab uintptr, pIdxInfo uintptr) int32 { 4433 bp := tls.Alloc(4) 4434 defer tls.Free(4) 4435 4436 var p uintptr = pVtab 4437 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4438 var n int32 = 0 4439 var pScan uintptr 4440 var opmask int32 = SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | SQLITE_INDEX_CONSTRAINT_LE 4441 4442 pScan = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxScan{}))) 4443 if pScan != 0 { 4444 var i int32 4445 4446 (*IdxScan)(unsafe.Pointer(pScan)).FpTab = (*ExpertVtab)(unsafe.Pointer(p)).FpTab 4447 (*IdxScan)(unsafe.Pointer(pScan)).FpNextScan = (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan 4448 (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan = pScan 4449 4450 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 4451 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 4452 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 4453 (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn >= 0 && 4454 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)*24)).FiPk == 0 && 4455 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop)&opmask != 0 { 4456 var pNew uintptr 4457 var zColl uintptr = sqlite3.Xsqlite3_vtab_collation(tls, pIdxInfo, i) 4458 pNew = idxNewConstraint(tls, bp, zColl) 4459 if pNew != 0 { 4460 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn 4461 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 4462 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpEq 4463 (*IdxScan)(unsafe.Pointer(pScan)).FpEq = pNew 4464 } else { 4465 (*IdxConstraint)(unsafe.Pointer(pNew)).FbRange = 1 4466 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpRange 4467 (*IdxScan)(unsafe.Pointer(pScan)).FpRange = pNew 4468 } 4469 } 4470 n++ 4471 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = n 4472 } 4473 } 4474 4475 for i = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy - 1; i >= 0; i-- { 4476 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 4477 if iCol >= 0 { 4478 var pNew uintptr = idxNewConstraint(tls, bp, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr(iCol)*24)).FzColl) 4479 if pNew != 0 { 4480 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = iCol 4481 (*IdxConstraint)(unsafe.Pointer(pNew)).FbDesc = int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).Fdesc) 4482 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4483 (*IdxConstraint)(unsafe.Pointer(pNew)).FpLink = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4484 (*IdxScan)(unsafe.Pointer(pScan)).FpOrder = pNew 4485 n++ 4486 } 4487 } 4488 } 4489 } 4490 4491 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000.0 / float64(n+1) 4492 return *(*int32)(unsafe.Pointer(bp)) 4493 } 4494 4495 func expertUpdate(tls *libc.TLS, pVtab uintptr, nData int32, azData uintptr, pRowid uintptr) int32 { 4496 _ = pVtab 4497 _ = nData 4498 _ = azData 4499 _ = pRowid 4500 return SQLITE_OK 4501 } 4502 4503 func expertOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 4504 bp := tls.Alloc(4) 4505 defer tls.Free(4) 4506 4507 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4508 var pCsr uintptr 4509 _ = pVTab 4510 pCsr = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertCsr{}))) 4511 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 4512 return *(*int32)(unsafe.Pointer(bp)) 4513 } 4514 4515 func expertClose(tls *libc.TLS, cur uintptr) int32 { 4516 var pCsr uintptr = cur 4517 sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4518 sqlite3.Xsqlite3_free(tls, pCsr) 4519 return SQLITE_OK 4520 } 4521 4522 func expertEof(tls *libc.TLS, cur uintptr) int32 { 4523 var pCsr uintptr = cur 4524 return libc.Bool32((*ExpertCsr)(unsafe.Pointer(pCsr)).FpData == uintptr(0)) 4525 } 4526 4527 func expertNext(tls *libc.TLS, cur uintptr) int32 { 4528 var pCsr uintptr = cur 4529 var rc int32 = SQLITE_OK 4530 4531 rc = sqlite3.Xsqlite3_step(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4532 if rc != SQLITE_ROW { 4533 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4534 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4535 } else { 4536 rc = SQLITE_OK 4537 } 4538 4539 return rc 4540 } 4541 4542 func expertRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 4543 _ = cur 4544 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 4545 return SQLITE_OK 4546 } 4547 4548 func expertColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 4549 var pCsr uintptr = cur 4550 var pVal uintptr 4551 pVal = sqlite3.Xsqlite3_column_value(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData, i) 4552 if pVal != 0 { 4553 sqlite3.Xsqlite3_result_value(tls, ctx, pVal) 4554 } 4555 return SQLITE_OK 4556 } 4557 4558 func expertFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 4559 bp := tls.Alloc(8) 4560 defer tls.Free(8) 4561 4562 var pCsr uintptr = cur 4563 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 4564 var pExpert uintptr = (*ExpertVtab)(unsafe.Pointer(pVtab)).FpExpert 4565 var rc int32 4566 4567 _ = idxNum 4568 _ = idxStr 4569 _ = argc 4570 _ = argv 4571 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4572 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4573 if rc == SQLITE_OK { 4574 rc = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pExpert)).Fdb, pCsr+8, pVtab+16, 4575 ts+19, libc.VaList(bp, (*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(pVtab)).FpTab)).FzName)) 4576 } 4577 4578 if rc == SQLITE_OK { 4579 rc = expertNext(tls, cur) 4580 } 4581 return rc 4582 } 4583 4584 func idxRegisterVtab(tls *libc.TLS, p uintptr) int32 { 4585 return sqlite3.Xsqlite3_create_module(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+56, uintptr(unsafe.Pointer(&expertModule)), p) 4586 } 4587 4588 var expertModule = sqlite3_module{ 4589 FiVersion: 2, 4590 FxCreate: 0, 4591 FxConnect: 0, 4592 FxBestIndex: 0, 4593 FxDisconnect: 0, 4594 FxDestroy: 0, 4595 FxOpen: 0, 4596 FxClose: 0, 4597 FxFilter: 0, 4598 FxNext: 0, 4599 FxEof: 0, 4600 FxColumn: 0, 4601 FxRowid: 0, 4602 FxUpdate: 0, 4603 } 4604 4605 func idxFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr) { 4606 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 4607 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 4608 *(*int32)(unsafe.Pointer(pRc)) = rc 4609 } 4610 } 4611 4612 func idxGetTableInfo(tls *libc.TLS, db uintptr, zTab uintptr, ppOut uintptr, pzErrmsg uintptr) int32 { 4613 bp := tls.Alloc(40) 4614 defer tls.Free(40) 4615 4616 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 4617 var nCol int32 = 0 4618 var nTab int32 4619 var nByte int32 4620 var pNew uintptr = uintptr(0) 4621 4622 var rc2 int32 4623 var pCsr uintptr = uintptr(0) 4624 var nPk int32 = 0 4625 4626 *(*uintptr)(unsafe.Pointer(ppOut)) = uintptr(0) 4627 if zTab == uintptr(0) { 4628 return SQLITE_ERROR 4629 } 4630 nTab = int32(libc.Xstrlen(tls, zTab)) 4631 nByte = int32(uint64(unsafe.Sizeof(IdxTable{})) + uint64(nTab) + uint64(1)) 4632 *(*int32)(unsafe.Pointer(bp + 24)) = idxPrintfPrepareStmt(tls, db, bp+8, pzErrmsg, ts+63, libc.VaList(bp, zTab)) 4633 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 4634 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 4635 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 4636 if zCol == uintptr(0) { 4637 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ERROR 4638 break 4639 } 4640 nByte = nByte + (1 + int32(libc.Xstrlen(tls, zCol))) 4641 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 4642 db, ts+85, zTab, zCol, uintptr(0), bp+16, uintptr(0), uintptr(0), uintptr(0)) 4643 if *(*uintptr)(unsafe.Pointer(bp + 16)) == uintptr(0) { 4644 *(*uintptr)(unsafe.Pointer(bp + 16)) = ts + 90 4645 } 4646 nByte = nByte + (1 + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 16))))) 4647 nCol++ 4648 nPk = nPk + libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) > 0) 4649 } 4650 rc2 = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 4651 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4652 *(*int32)(unsafe.Pointer(bp + 24)) = rc2 4653 } 4654 4655 nByte = int32(uint64(nByte) + uint64(unsafe.Sizeof(IdxColumn{}))*uint64(nCol)) 4656 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4657 pNew = idxMalloc(tls, bp+24, nByte) 4658 } 4659 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4660 (*IdxTable)(unsafe.Pointer(pNew)).FaCol = pNew + 1*32 4661 (*IdxTable)(unsafe.Pointer(pNew)).FnCol = nCol 4662 pCsr = (*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24 4663 } 4664 4665 nCol = 0 4666 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 4667 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 4668 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 4669 var nCopy int32 4670 if zCol == uintptr(0) { 4671 continue 4672 } 4673 nCopy = int32(libc.Xstrlen(tls, zCol)) + 1 4674 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzName = pCsr 4675 (*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) 4676 libc.Xmemcpy(tls, pCsr, zCol, uint64(nCopy)) 4677 pCsr += uintptr(nCopy) 4678 4679 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 4680 db, ts+85, zTab, zCol, uintptr(0), bp+32, uintptr(0), uintptr(0), uintptr(0)) 4681 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4682 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 4683 *(*uintptr)(unsafe.Pointer(bp + 32)) = ts + 90 4684 } 4685 nCopy = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 32)))) + 1 4686 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzColl = pCsr 4687 libc.Xmemcpy(tls, pCsr, *(*uintptr)(unsafe.Pointer(bp + 32)), uint64(nCopy)) 4688 pCsr += uintptr(nCopy) 4689 } 4690 4691 nCol++ 4692 } 4693 idxFinalize(tls, bp+24, *(*uintptr)(unsafe.Pointer(bp + 8))) 4694 4695 if *(*int32)(unsafe.Pointer(bp + 24)) != SQLITE_OK { 4696 sqlite3.Xsqlite3_free(tls, pNew) 4697 pNew = uintptr(0) 4698 } else if pNew != uintptr(0) { 4699 (*IdxTable)(unsafe.Pointer(pNew)).FzName = pCsr 4700 if (*IdxTable)(unsafe.Pointer(pNew)).FzName != uintptr(0) { 4701 libc.Xmemcpy(tls, (*IdxTable)(unsafe.Pointer(pNew)).FzName, zTab, uint64(nTab+1)) 4702 } 4703 } 4704 4705 *(*uintptr)(unsafe.Pointer(ppOut)) = pNew 4706 return *(*int32)(unsafe.Pointer(bp + 24)) 4707 } 4708 4709 func idxAppendText(tls *libc.TLS, pRc uintptr, zIn uintptr, zFmt uintptr, va uintptr) uintptr { 4710 var ap va_list 4711 _ = ap 4712 var zAppend uintptr = uintptr(0) 4713 var zRet uintptr = uintptr(0) 4714 var nIn int32 4715 if zIn != 0 { 4716 nIn = int32(libc.Xstrlen(tls, zIn)) 4717 } else { 4718 nIn = 0 4719 } 4720 var nAppend int32 = 0 4721 ap = va 4722 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 4723 zAppend = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 4724 if zAppend != 0 { 4725 nAppend = int32(libc.Xstrlen(tls, zAppend)) 4726 zRet = sqlite3.Xsqlite3_malloc(tls, nIn+nAppend+1) 4727 } 4728 if zAppend != 0 && zRet != 0 { 4729 if nIn != 0 { 4730 libc.Xmemcpy(tls, zRet, zIn, uint64(nIn)) 4731 } 4732 libc.Xmemcpy(tls, zRet+uintptr(nIn), zAppend, uint64(nAppend+1)) 4733 } else { 4734 sqlite3.Xsqlite3_free(tls, zRet) 4735 zRet = uintptr(0) 4736 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4737 } 4738 sqlite3.Xsqlite3_free(tls, zAppend) 4739 sqlite3.Xsqlite3_free(tls, zIn) 4740 } 4741 _ = ap 4742 return zRet 4743 } 4744 4745 func idxIdentifierRequiresQuotes(tls *libc.TLS, zId uintptr) int32 { 4746 var i int32 4747 for i = 0; *(*int8)(unsafe.Pointer(zId + uintptr(i))) != 0; i++ { 4748 if !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) == '_') && 4749 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= '0' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= '9') && 4750 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'a' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'z') && 4751 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'A' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'Z') { 4752 return 1 4753 } 4754 } 4755 return 0 4756 } 4757 4758 func idxAppendColDefn(tls *libc.TLS, pRc uintptr, zIn uintptr, pTab uintptr, pCons uintptr) uintptr { 4759 bp := tls.Alloc(32) 4760 defer tls.Free(32) 4761 4762 var zRet uintptr = zIn 4763 var p uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FaCol + uintptr((*IdxConstraint)(unsafe.Pointer(pCons)).FiCol)*24 4764 if zRet != 0 { 4765 zRet = idxAppendText(tls, pRc, zRet, ts+97, 0) 4766 } 4767 4768 if idxIdentifierRequiresQuotes(tls, (*IdxColumn)(unsafe.Pointer(p)).FzName) != 0 { 4769 zRet = idxAppendText(tls, pRc, zRet, ts+100, libc.VaList(bp, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 4770 } else { 4771 zRet = idxAppendText(tls, pRc, zRet, ts, libc.VaList(bp+8, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 4772 } 4773 4774 if sqlite3.Xsqlite3_stricmp(tls, (*IdxColumn)(unsafe.Pointer(p)).FzColl, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 4775 if idxIdentifierRequiresQuotes(tls, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 4776 zRet = idxAppendText(tls, pRc, zRet, ts+103, libc.VaList(bp+16, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 4777 } else { 4778 zRet = idxAppendText(tls, pRc, zRet, ts+115, libc.VaList(bp+24, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 4779 } 4780 } 4781 4782 if (*IdxConstraint)(unsafe.Pointer(pCons)).FbDesc != 0 { 4783 zRet = idxAppendText(tls, pRc, zRet, ts+127, 0) 4784 } 4785 return zRet 4786 } 4787 4788 func idxFindCompatible(tls *libc.TLS, pRc uintptr, dbm uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 4789 bp := tls.Alloc(36) 4790 defer tls.Free(36) 4791 4792 var zTbl uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 4793 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 4794 var pIter uintptr 4795 var nEq int32 = 0 4796 4797 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4798 nEq++ 4799 } 4800 4801 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+16, uintptr(0), ts+133, libc.VaList(bp, zTbl)) 4802 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW { 4803 var bMatch int32 = 1 4804 var pT uintptr = pTail 4805 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 4806 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 4807 if zIdx == uintptr(0) { 4808 continue 4809 } 4810 4811 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4812 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 0 4813 } 4814 4815 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+24, uintptr(0), ts+154, libc.VaList(bp+8, zIdx)) 4816 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW { 4817 var iIdx int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 4818 var iCol int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 4819 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 4) 4820 4821 if iIdx < nEq { 4822 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4823 if (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag != 0 { 4824 continue 4825 } 4826 if (*IdxConstraint)(unsafe.Pointer(pIter)).FiCol != iCol { 4827 continue 4828 } 4829 if sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pIter)).FzColl, zColl) != 0 { 4830 continue 4831 } 4832 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 1 4833 break 4834 } 4835 if pIter == uintptr(0) { 4836 bMatch = 0 4837 break 4838 } 4839 } else { 4840 if pT != 0 { 4841 if (*IdxConstraint)(unsafe.Pointer(pT)).FiCol != iCol || sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pT)).FzColl, zColl) != 0 { 4842 bMatch = 0 4843 break 4844 } 4845 pT = (*IdxConstraint)(unsafe.Pointer(pT)).FpLink 4846 } 4847 } 4848 } 4849 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 24))) 4850 4851 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && bMatch != 0 { 4852 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 4853 return 1 4854 } 4855 } 4856 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 16))) 4857 4858 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 32)) 4859 return 0 4860 } 4861 4862 func countNonzeros(tls *libc.TLS, pCount uintptr, nc int32, azResults uintptr, azColumns uintptr) int32 { 4863 _ = azColumns 4864 if nc > 0 && (int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults))))) != '0' || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults)) + 1))) != 0) { 4865 *(*int32)(unsafe.Pointer(pCount)) += 1 4866 } 4867 return 0 4868 } 4869 4870 func idxCreateFromCons(tls *libc.TLS, p uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 4871 bp := tls.Alloc(56) 4872 defer tls.Free(56) 4873 4874 var dbm uintptr = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 4875 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_OK 4876 if (pEq != 0 || pTail != 0) && 0 == idxFindCompatible(tls, bp+48, dbm, pScan, pEq, pTail) { 4877 var pTab uintptr = (*IdxScan)(unsafe.Pointer(pScan)).FpTab 4878 var zCols uintptr = uintptr(0) 4879 var zIdx uintptr = uintptr(0) 4880 var pCons uintptr 4881 var h uint32 = uint32(0) 4882 var zFmt uintptr 4883 4884 for pCons = pEq; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 4885 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 4886 } 4887 for pCons = pTail; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 4888 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 4889 } 4890 4891 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 4892 var zTable uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 4893 var quoteTable int32 = idxIdentifierRequiresQuotes(tls, zTable) 4894 var zName uintptr = uintptr(0) 4895 var collisions int32 = 0 4896 for __ccgo := true; __ccgo; __ccgo = collisions < 50 && zName != uintptr(0) { 4897 var zFind uintptr 4898 for *(*int32)(unsafe.Pointer(bp + 52)) = 0; *(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))) != 0; *(*int32)(unsafe.Pointer(bp + 52))++ { 4899 h = h + (h<<3 + uint32(*(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))))) 4900 } 4901 sqlite3.Xsqlite3_free(tls, zName) 4902 zName = sqlite3.Xsqlite3_mprintf(tls, ts+176, libc.VaList(bp, zTable, h)) 4903 if zName == uintptr(0) { 4904 break 4905 } 4906 4907 zFmt = ts + 188 4908 zFind = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+16, zName)) 4909 *(*int32)(unsafe.Pointer(bp + 52)) = 0 4910 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zFind, *(*uintptr)(unsafe.Pointer(&struct { 4911 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 4912 }{countNonzeros})), bp+52, uintptr(0)) 4913 4914 sqlite3.Xsqlite3_free(tls, zFind) 4915 if *(*int32)(unsafe.Pointer(bp + 52)) == 0 { 4916 collisions = 0 4917 break 4918 } 4919 collisions++ 4920 } 4921 if collisions != 0 { 4922 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 4923 } else if zName == uintptr(0) { 4924 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 4925 } else { 4926 if quoteTable != 0 { 4927 zFmt = ts + 274 4928 } else { 4929 zFmt = ts + 304 4930 } 4931 zIdx = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+24, zName, zTable, zCols)) 4932 if !(zIdx != 0) { 4933 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 4934 } else { 4935 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zIdx, uintptr(0), uintptr(0), (*sqlite3expert)(unsafe.Pointer(p)).FpzErrmsg) 4936 if *(*int32)(unsafe.Pointer(bp + 48)) != SQLITE_OK { 4937 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 4938 } else { 4939 idxHashAdd(tls, bp+48, p+88, zName, zIdx) 4940 } 4941 } 4942 sqlite3.Xsqlite3_free(tls, zName) 4943 sqlite3.Xsqlite3_free(tls, zIdx) 4944 } 4945 } 4946 4947 sqlite3.Xsqlite3_free(tls, zCols) 4948 } 4949 return *(*int32)(unsafe.Pointer(bp + 48)) 4950 } 4951 4952 func idxFindConstraint(tls *libc.TLS, pList uintptr, p uintptr) int32 { 4953 var pCmp uintptr 4954 for pCmp = pList; pCmp != 0; pCmp = (*IdxConstraint)(unsafe.Pointer(pCmp)).FpLink { 4955 if (*IdxConstraint)(unsafe.Pointer(p)).FiCol == (*IdxConstraint)(unsafe.Pointer(pCmp)).FiCol { 4956 return 1 4957 } 4958 } 4959 return 0 4960 } 4961 4962 func idxCreateFromWhere(tls *libc.TLS, p uintptr, pScan uintptr, pTail uintptr) int32 { 4963 var p1 uintptr = uintptr(0) 4964 var pCon uintptr 4965 var rc int32 4966 4967 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpEq; pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 4968 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 4969 (*IdxConstraint)(unsafe.Pointer(pCon)).FpLink = p1 4970 p1 = pCon 4971 } 4972 } 4973 4974 rc = idxCreateFromCons(tls, p, pScan, p1, pTail) 4975 4976 if pTail == uintptr(0) { 4977 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpRange; rc == SQLITE_OK && pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 4978 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 4979 rc = idxCreateFromCons(tls, p, pScan, p1, pCon) 4980 } 4981 } 4982 } 4983 4984 return rc 4985 } 4986 4987 func idxCreateCandidates(tls *libc.TLS, p uintptr) int32 { 4988 var rc int32 = SQLITE_OK 4989 var pIter uintptr 4990 4991 for pIter = (*sqlite3expert)(unsafe.Pointer(p)).FpScan; pIter != 0 && rc == SQLITE_OK; pIter = (*IdxScan)(unsafe.Pointer(pIter)).FpNextScan { 4992 rc = idxCreateFromWhere(tls, p, pIter, uintptr(0)) 4993 if rc == SQLITE_OK && (*IdxScan)(unsafe.Pointer(pIter)).FpOrder != 0 { 4994 rc = idxCreateFromWhere(tls, p, pIter, (*IdxScan)(unsafe.Pointer(pIter)).FpOrder) 4995 } 4996 } 4997 4998 return rc 4999 } 5000 5001 func idxConstraintFree(tls *libc.TLS, pConstraint uintptr) { 5002 var pNext uintptr 5003 var p uintptr 5004 5005 for p = pConstraint; p != 0; p = pNext { 5006 pNext = (*IdxConstraint)(unsafe.Pointer(p)).FpNext 5007 sqlite3.Xsqlite3_free(tls, p) 5008 } 5009 } 5010 5011 func idxScanFree(tls *libc.TLS, pScan uintptr, pLast uintptr) { 5012 var p uintptr 5013 var pNext uintptr 5014 for p = pScan; p != pLast; p = pNext { 5015 pNext = (*IdxScan)(unsafe.Pointer(p)).FpNextScan 5016 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpOrder) 5017 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpEq) 5018 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpRange) 5019 sqlite3.Xsqlite3_free(tls, p) 5020 } 5021 } 5022 5023 func idxStatementFree(tls *libc.TLS, pStatement uintptr, pLast uintptr) { 5024 var p uintptr 5025 var pNext uintptr 5026 for p = pStatement; p != pLast; p = pNext { 5027 pNext = (*IdxStatement)(unsafe.Pointer(p)).FpNext 5028 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzEQP) 5029 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzIdx) 5030 sqlite3.Xsqlite3_free(tls, p) 5031 } 5032 } 5033 5034 func idxTableFree(tls *libc.TLS, pTab uintptr) { 5035 var pIter uintptr 5036 var pNext uintptr 5037 for pIter = pTab; pIter != 0; pIter = pNext { 5038 pNext = (*IdxTable)(unsafe.Pointer(pIter)).FpNext 5039 sqlite3.Xsqlite3_free(tls, pIter) 5040 } 5041 } 5042 5043 func idxWriteFree(tls *libc.TLS, pTab uintptr) { 5044 var pIter uintptr 5045 var pNext uintptr 5046 for pIter = pTab; pIter != 0; pIter = pNext { 5047 pNext = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext 5048 sqlite3.Xsqlite3_free(tls, pIter) 5049 } 5050 } 5051 5052 func idxFindIndexes(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5053 bp := tls.Alloc(8228) 5054 defer tls.Free(8228) 5055 5056 var pStmt uintptr 5057 var dbm uintptr 5058 5059 var zSql uintptr 5060 var nIdx int32 5061 var zIdx uintptr 5062 5063 var zDetail uintptr 5064 var nDetail int32 5065 var i int32 5066 var pEntry uintptr 5067 5068 dbm = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5069 *(*int32)(unsafe.Pointer(bp + 8224)) = SQLITE_OK 5070 idxHashInit(tls, bp+24) 5071 5072 pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5073 __1: 5074 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && pStmt != 0) { 5075 goto __3 5076 } 5077 *(*uintptr)(unsafe.Pointer(bp + 8216)) = uintptr(0) 5078 idxHashClear(tls, bp+24) 5079 *(*int32)(unsafe.Pointer(bp + 8224)) = idxPrintfPrepareStmt(tls, dbm, bp+8216, pzErr, 5080 ts+330, libc.VaList(bp, (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql)) 5081 __4: 5082 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8216))) == SQLITE_ROW) { 5083 goto __5 5084 } 5085 5086 zDetail = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8216)), 3) 5087 5088 if !!(zDetail != 0) { 5089 goto __6 5090 } 5091 goto __4 5092 __6: 5093 ; 5094 nDetail = int32(libc.Xstrlen(tls, zDetail)) 5095 5096 i = 0 5097 __7: 5098 if !(i < nDetail) { 5099 goto __9 5100 } 5101 zIdx = uintptr(0) 5102 if !(i+13 < nDetail && libc.Xmemcmp(tls, zDetail+uintptr(i), ts+352, uint64(13)) == 0) { 5103 goto __10 5104 } 5105 zIdx = zDetail + uintptr(i+13) 5106 goto __11 5107 __10: 5108 if !(i+22 < nDetail && 5109 libc.Xmemcmp(tls, zDetail+uintptr(i), ts+366, uint64(22)) == 0) { 5110 goto __12 5111 } 5112 zIdx = zDetail + uintptr(i+22) 5113 __12: 5114 ; 5115 __11: 5116 ; 5117 if !(zIdx != 0) { 5118 goto __13 5119 } 5120 nIdx = 0 5121 __14: 5122 if !(int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != 0 && (int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != ' ' || int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx+1)))) != '(')) { 5123 goto __15 5124 } 5125 nIdx++ 5126 goto __14 5127 __15: 5128 ; 5129 zSql = idxHashSearch(tls, p+88, zIdx, nIdx) 5130 if !(zSql != 0) { 5131 goto __16 5132 } 5133 idxHashAdd(tls, bp+8224, bp+24, zSql, uintptr(0)) 5134 if !(*(*int32)(unsafe.Pointer(bp + 8224)) != 0) { 5135 goto __17 5136 } 5137 goto find_indexes_out 5138 __17: 5139 ; 5140 __16: 5141 ; 5142 goto __9 5143 __13: 5144 ; 5145 goto __8 5146 __8: 5147 i++ 5148 goto __7 5149 goto __9 5150 __9: 5151 ; 5152 if !(int32(*(*int8)(unsafe.Pointer(zDetail))) != '-') { 5153 goto __18 5154 } 5155 (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP = idxAppendText(tls, bp+8224, (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP, ts+389, libc.VaList(bp+8, zDetail)) 5156 __18: 5157 ; 5158 goto __4 5159 __5: 5160 ; 5161 pEntry = (*IdxHash)(unsafe.Pointer(bp + 24)).FpFirst 5162 __19: 5163 if !(pEntry != 0) { 5164 goto __21 5165 } 5166 (*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)) 5167 goto __20 5168 __20: 5169 pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext 5170 goto __19 5171 goto __21 5172 __21: 5173 ; 5174 idxFinalize(tls, bp+8224, *(*uintptr)(unsafe.Pointer(bp + 8216))) 5175 goto __2 5176 __2: 5177 pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext 5178 goto __1 5179 goto __3 5180 __3: 5181 ; 5182 find_indexes_out: 5183 idxHashClear(tls, bp+24) 5184 return *(*int32)(unsafe.Pointer(bp + 8224)) 5185 } 5186 5187 func idxAuthCallback(tls *libc.TLS, pCtx uintptr, eOp int32, z3 uintptr, z4 uintptr, zDb uintptr, zTrigger uintptr) int32 { 5188 bp := tls.Alloc(4) 5189 defer tls.Free(4) 5190 5191 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5192 _ = z4 5193 _ = zTrigger 5194 if eOp == SQLITE_INSERT || eOp == SQLITE_UPDATE || eOp == SQLITE_DELETE { 5195 if sqlite3.Xsqlite3_stricmp(tls, zDb, ts+85) == 0 { 5196 var p uintptr = pCtx 5197 var pTab uintptr 5198 for pTab = (*sqlite3expert)(unsafe.Pointer(p)).FpTable; pTab != 0; pTab = (*IdxTable)(unsafe.Pointer(pTab)).FpNext { 5199 if 0 == sqlite3.Xsqlite3_stricmp(tls, z3, (*IdxTable)(unsafe.Pointer(pTab)).FzName) { 5200 break 5201 } 5202 } 5203 if pTab != 0 { 5204 var pWrite uintptr 5205 for pWrite = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite; pWrite != 0; pWrite = (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext { 5206 if (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab == pTab && (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp == eOp { 5207 break 5208 } 5209 } 5210 if pWrite == uintptr(0) { 5211 pWrite = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxWrite{}))) 5212 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5213 (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab = pTab 5214 (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp = eOp 5215 (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5216 (*sqlite3expert)(unsafe.Pointer(p)).FpWrite = pWrite 5217 } 5218 } 5219 } 5220 } 5221 } 5222 return *(*int32)(unsafe.Pointer(bp)) 5223 } 5224 5225 func idxProcessOneTrigger(tls *libc.TLS, p uintptr, pWrite uintptr, pzErr uintptr) int32 { 5226 bp := tls.Alloc(104) 5227 defer tls.Free(104) 5228 5229 var pTab uintptr = (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab 5230 var zTab uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FzName 5231 var zSql uintptr = ts + 398 5232 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 5233 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_OK 5234 var zWrite uintptr = uintptr(0) 5235 5236 *(*int32)(unsafe.Pointer(bp + 88)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+80, pzErr, zSql, libc.VaList(bp, zTab, zTab)) 5237 for *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) { 5238 var zCreate uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 5239 if zCreate == uintptr(0) { 5240 continue 5241 } 5242 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zCreate, uintptr(0), uintptr(0), pzErr) 5243 } 5244 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 80))) 5245 5246 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5247 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+524, libc.VaList(bp+16, zTab, zInt)) 5248 if z == uintptr(0) { 5249 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 5250 } else { 5251 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, z, uintptr(0), uintptr(0), pzErr) 5252 sqlite3.Xsqlite3_free(tls, z) 5253 } 5254 } 5255 5256 switch (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp { 5257 case SQLITE_INSERT: 5258 { 5259 var i int32 5260 zWrite = idxAppendText(tls, bp+88, zWrite, ts+557, libc.VaList(bp+32, zInt)) 5261 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5262 zWrite = idxAppendText(tls, bp+88, zWrite, ts+580, libc.VaList(bp+40, func() uintptr { 5263 if i == 0 { 5264 return ts + 584 5265 } 5266 return ts + 97 5267 }())) 5268 } 5269 zWrite = idxAppendText(tls, bp+88, zWrite, ts+585, 0) 5270 break 5271 5272 } 5273 case SQLITE_UPDATE: 5274 { 5275 var i int32 5276 zWrite = idxAppendText(tls, bp+88, zWrite, ts+587, libc.VaList(bp+48, zInt)) 5277 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5278 zWrite = idxAppendText(tls, bp+88, zWrite, ts+602, libc.VaList(bp+56, func() uintptr { 5279 if i == 0 { 5280 return ts + 584 5281 } 5282 return ts + 97 5283 }(), 5284 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pTab)).FaCol+uintptr(i)*24)).FzName)) 5285 } 5286 break 5287 5288 } 5289 default: 5290 { 5291 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5292 zWrite = sqlite3.Xsqlite3_mprintf(tls, ts+609, libc.VaList(bp+72, zInt)) 5293 if zWrite == uintptr(0) { 5294 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 5295 } 5296 } 5297 5298 } 5299 } 5300 5301 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5302 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 5303 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zWrite, -1, bp+96, uintptr(0)) 5304 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 96))) 5305 if *(*int32)(unsafe.Pointer(bp + 88)) != SQLITE_OK { 5306 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 5307 } 5308 } 5309 sqlite3.Xsqlite3_free(tls, zWrite) 5310 5311 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5312 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zDrop, uintptr(0), uintptr(0), pzErr) 5313 } 5314 5315 return *(*int32)(unsafe.Pointer(bp + 88)) 5316 } 5317 5318 var zInt uintptr = ts + 624 5319 var zDrop uintptr = ts + 662 5320 5321 func idxProcessTriggers(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5322 var rc int32 = SQLITE_OK 5323 var pEnd uintptr = uintptr(0) 5324 var pFirst uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5325 5326 for rc == SQLITE_OK && pFirst != pEnd { 5327 var pIter uintptr 5328 for pIter = pFirst; rc == SQLITE_OK && pIter != pEnd; pIter = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext { 5329 rc = idxProcessOneTrigger(tls, p, pIter, pzErr) 5330 } 5331 pEnd = pFirst 5332 pFirst = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5333 } 5334 5335 return rc 5336 } 5337 5338 func idxCreateVtabSchema(tls *libc.TLS, p uintptr, pzErrmsg uintptr) int32 { 5339 bp := tls.Alloc(60) 5340 defer tls.Free(60) 5341 5342 *(*int32)(unsafe.Pointer(bp + 56)) = idxRegisterVtab(tls, p) 5343 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 5344 5345 *(*int32)(unsafe.Pointer(bp + 56)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+40, pzErrmsg, 5346 ts+711) 5347 for *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 5348 var zType uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 5349 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 5350 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 5351 5352 if zType == uintptr(0) || zName == uintptr(0) { 5353 continue 5354 } 5355 if int32(*(*int8)(unsafe.Pointer(zType))) == 'v' || int32(*(*int8)(unsafe.Pointer(zType + 1))) == 'r' { 5356 if zSql != 0 { 5357 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), pzErrmsg) 5358 } 5359 } else { 5360 *(*int32)(unsafe.Pointer(bp + 56)) = idxGetTableInfo(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, zName, bp+48, pzErrmsg) 5361 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 5362 var i int32 5363 var zInner uintptr = uintptr(0) 5364 var zOuter uintptr = uintptr(0) 5365 (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpTable 5366 (*sqlite3expert)(unsafe.Pointer(p)).FpTable = *(*uintptr)(unsafe.Pointer(bp + 48)) 5367 5368 zInner = idxAppendText(tls, bp+56, uintptr(0), ts+979, 0) 5369 for i = 0; i < (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FnCol; i++ { 5370 zInner = idxAppendText(tls, bp+56, zInner, ts+995, 5371 libc.VaList(bp, func() uintptr { 5372 if i == 0 { 5373 return ts + 584 5374 } 5375 return ts + 97 5376 }(), (*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)) 5377 } 5378 zInner = idxAppendText(tls, bp+56, zInner, ts+585, 0) 5379 5380 zOuter = idxAppendText(tls, bp+56, uintptr(0), 5381 ts+1011, libc.VaList(bp+24, zName, zInner)) 5382 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 5383 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zOuter, uintptr(0), uintptr(0), pzErrmsg) 5384 } 5385 sqlite3.Xsqlite3_free(tls, zInner) 5386 sqlite3.Xsqlite3_free(tls, zOuter) 5387 } 5388 } 5389 } 5390 idxFinalize(tls, bp+56, *(*uintptr)(unsafe.Pointer(bp + 40))) 5391 return *(*int32)(unsafe.Pointer(bp + 56)) 5392 } 5393 5394 type IdxSampleCtx = struct { 5395 FiTarget int32 5396 F__ccgo_pad1 [4]byte 5397 Ftarget float64 5398 FnRow float64 5399 FnRet float64 5400 } 5401 5402 func idxSampleFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5403 bp := tls.Alloc(2) 5404 defer tls.Free(2) 5405 5406 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5407 var bRet int32 5408 5409 _ = argv 5410 5411 if (*IdxSampleCtx)(unsafe.Pointer(p)).FnRow == 0.0 { 5412 bRet = 1 5413 } else { 5414 bRet = libc.Bool32((*IdxSampleCtx)(unsafe.Pointer(p)).FnRet/(*IdxSampleCtx)(unsafe.Pointer(p)).FnRow <= (*IdxSampleCtx)(unsafe.Pointer(p)).Ftarget) 5415 if bRet == 0 { 5416 sqlite3.Xsqlite3_randomness(tls, 2, bp) 5417 bRet = libc.Bool32(int32(*(*uint16)(unsafe.Pointer(bp)))%100 <= (*IdxSampleCtx)(unsafe.Pointer(p)).FiTarget) 5418 } 5419 } 5420 5421 sqlite3.Xsqlite3_result_int(tls, pCtx, bRet) 5422 *(*float64)(unsafe.Pointer(p + 16)) += 1.0 5423 *(*float64)(unsafe.Pointer(p + 24)) += float64(bRet) 5424 } 5425 5426 type IdxRemCtx = struct { 5427 FnSlot int32 5428 F__ccgo_pad1 [4]byte 5429 FaSlot [1]struct { 5430 FeType int32 5431 F__ccgo_pad1 [4]byte 5432 FiVal i64 5433 FrVal float64 5434 FnByte int32 5435 Fn int32 5436 Fz uintptr 5437 } 5438 } 5439 5440 type IdxRemSlot = struct { 5441 FeType int32 5442 F__ccgo_pad1 [4]byte 5443 FiVal i64 5444 FrVal float64 5445 FnByte int32 5446 Fn int32 5447 Fz uintptr 5448 } 5449 5450 func idxRemFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5451 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5452 var pSlot uintptr 5453 var iSlot int32 5454 5455 iSlot = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 5456 5457 pSlot = p + 8 + uintptr(iSlot)*40 5458 5459 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5460 case SQLITE_NULL: 5461 break 5462 5463 case SQLITE_INTEGER: 5464 sqlite3.Xsqlite3_result_int64(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal) 5465 break 5466 5467 case SQLITE_FLOAT: 5468 sqlite3.Xsqlite3_result_double(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal) 5469 break 5470 5471 case SQLITE_BLOB: 5472 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5473 break 5474 5475 case SQLITE_TEXT: 5476 sqlite3.Xsqlite3_result_text(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5477 break 5478 } 5479 5480 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5481 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5482 case SQLITE_NULL: 5483 break 5484 5485 case SQLITE_INTEGER: 5486 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5487 break 5488 5489 case SQLITE_FLOAT: 5490 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5491 break 5492 5493 case SQLITE_BLOB: 5494 fallthrough 5495 case SQLITE_TEXT: 5496 { 5497 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5498 var pData uintptr = uintptr(0) 5499 if nByte > (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte { 5500 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, nByte*2) 5501 if zNew == uintptr(0) { 5502 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 5503 return 5504 } 5505 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte = nByte * 2 5506 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz = zNew 5507 } 5508 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn = nByte 5509 if (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType == SQLITE_BLOB { 5510 pData = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5511 if pData != 0 { 5512 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 5513 } 5514 } else { 5515 pData = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5516 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 5517 } 5518 break 5519 5520 } 5521 } 5522 } 5523 5524 func idxLargestIndex(tls *libc.TLS, db uintptr, pnMax uintptr, pzErr uintptr) int32 { 5525 bp := tls.Alloc(12) 5526 defer tls.Free(12) 5527 5528 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OK 5529 var zMax uintptr = ts + 1052 5530 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 5531 5532 *(*int32)(unsafe.Pointer(pnMax)) = 0 5533 *(*int32)(unsafe.Pointer(bp + 8)) = idxPrepareStmt(tls, db, bp, pzErr, zMax) 5534 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 5535 *(*int32)(unsafe.Pointer(pnMax)) = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) + 1 5536 } 5537 idxFinalize(tls, bp+8, *(*uintptr)(unsafe.Pointer(bp))) 5538 5539 return *(*int32)(unsafe.Pointer(bp + 8)) 5540 } 5541 5542 func idxPopulateOneStat1(tls *libc.TLS, p uintptr, pIndexXInfo uintptr, pWriteStat uintptr, zTab uintptr, zIdx uintptr, pzErr uintptr) int32 { 5543 bp := tls.Alloc(128) 5544 defer tls.Free(128) 5545 5546 var zCols uintptr = uintptr(0) 5547 var zOrder uintptr = uintptr(0) 5548 var zQuery uintptr = uintptr(0) 5549 var nCol int32 = 0 5550 var i int32 5551 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 5552 var aStat uintptr = uintptr(0) 5553 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_OK 5554 5555 sqlite3.Xsqlite3_bind_text(tls, pIndexXInfo, 1, zIdx, -1, uintptr(0)) 5556 for SQLITE_OK == *(*int32)(unsafe.Pointer(bp + 112)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pIndexXInfo) { 5557 var zComma uintptr 5558 if zCols == uintptr(0) { 5559 zComma = ts + 584 5560 } else { 5561 zComma = ts + 97 5562 } 5563 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 0) 5564 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 1) 5565 zCols = idxAppendText(tls, bp+112, zCols, 5566 ts+1189, libc.VaList(bp, zComma, zName, nCol, zName, zColl)) 5567 zOrder = idxAppendText(tls, bp+112, zOrder, ts+1224, libc.VaList(bp+40, zComma, libc.PreIncInt32(&nCol, 1))) 5568 } 5569 sqlite3.Xsqlite3_reset(tls, pIndexXInfo) 5570 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5571 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5572 zQuery = sqlite3.Xsqlite3_mprintf(tls, 5573 ts+1229, libc.VaList(bp+56, zCols, zTab, zOrder)) 5574 } else { 5575 zQuery = sqlite3.Xsqlite3_mprintf(tls, 5576 ts+1261, libc.VaList(bp+80, zCols, zOrder)) 5577 } 5578 } 5579 sqlite3.Xsqlite3_free(tls, zCols) 5580 sqlite3.Xsqlite3_free(tls, zOrder) 5581 5582 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5583 var dbrem uintptr = func() uintptr { 5584 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5585 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 5586 } 5587 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 5588 }() 5589 *(*int32)(unsafe.Pointer(bp + 112)) = idxPrepareStmt(tls, dbrem, bp+120, pzErr, zQuery) 5590 } 5591 sqlite3.Xsqlite3_free(tls, zQuery) 5592 5593 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5594 aStat = idxMalloc(tls, bp+112, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nCol+1))) 5595 } 5596 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 5597 var pEntry uintptr 5598 var zStat uintptr = uintptr(0) 5599 for i = 0; i <= nCol; i++ { 5600 *(*int32)(unsafe.Pointer(aStat + uintptr(i)*4)) = 1 5601 } 5602 for *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 5603 *(*int32)(unsafe.Pointer(aStat))++ 5604 for i = 0; i < nCol; i++ { 5605 if sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 120)), i) == 0 { 5606 break 5607 } 5608 } 5609 for ; i < nCol; i++ { 5610 *(*int32)(unsafe.Pointer(aStat + uintptr(i+1)*4))++ 5611 } 5612 } 5613 5614 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5615 var s0 int32 = *(*int32)(unsafe.Pointer(aStat)) 5616 zStat = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+96, s0)) 5617 if zStat == uintptr(0) { 5618 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_NOMEM 5619 } 5620 for i = 1; *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && i <= nCol; i++ { 5621 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)))) 5622 } 5623 } 5624 5625 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5626 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 1, zTab, -1, uintptr(0)) 5627 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 2, zIdx, -1, uintptr(0)) 5628 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 3, zStat, -1, uintptr(0)) 5629 sqlite3.Xsqlite3_step(tls, pWriteStat) 5630 *(*int32)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_reset(tls, pWriteStat) 5631 } 5632 5633 pEntry = idxHashFind(tls, p+88, zIdx, int32(libc.Xstrlen(tls, zIdx))) 5634 if pEntry != 0 { 5635 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 = zStat 5636 } else { 5637 sqlite3.Xsqlite3_free(tls, zStat) 5638 } 5639 } 5640 sqlite3.Xsqlite3_free(tls, aStat) 5641 idxFinalize(tls, bp+112, *(*uintptr)(unsafe.Pointer(bp + 120))) 5642 5643 return *(*int32)(unsafe.Pointer(bp + 112)) 5644 } 5645 5646 func idxBuildSampleTable(tls *libc.TLS, p uintptr, zTab uintptr) int32 { 5647 bp := tls.Alloc(8) 5648 defer tls.Free(8) 5649 5650 var rc int32 5651 var zSql uintptr 5652 5653 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5654 if rc != SQLITE_OK { 5655 return rc 5656 } 5657 5658 zSql = sqlite3.Xsqlite3_mprintf(tls, 5659 ts+1404, libc.VaList(bp, zTab)) 5660 if zSql == uintptr(0) { 5661 return SQLITE_NOMEM 5662 } 5663 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), uintptr(0)) 5664 sqlite3.Xsqlite3_free(tls, zSql) 5665 5666 return rc 5667 } 5668 5669 func idxPopulateStat1(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5670 bp := tls.Alloc(64) 5671 defer tls.Free(64) 5672 5673 *(*int32)(unsafe.Pointer(bp + 4)) = SQLITE_OK 5674 *(*int32)(unsafe.Pointer(bp)) = 0 5675 var pCtx uintptr = uintptr(0) 5676 5677 var i int32 5678 var iPrev i64 = int64(-100000) 5679 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 5680 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 5681 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 5682 5683 var zAllIndex uintptr = ts + 1480 5684 var zIndexXInfo uintptr = ts + 1594 5685 var zWrite uintptr = ts + 1649 5686 5687 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 0 { 5688 return SQLITE_OK 5689 } 5690 5691 *(*int32)(unsafe.Pointer(bp + 4)) = idxLargestIndex(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp, pzErr) 5692 if *(*int32)(unsafe.Pointer(bp)) <= 0 || *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 5693 return *(*int32)(unsafe.Pointer(bp + 4)) 5694 } 5695 5696 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1690, uintptr(0), uintptr(0), uintptr(0)) 5697 5698 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5699 var nByte int32 = int32(uint64(unsafe.Sizeof(IdxRemCtx{})) + uint64(unsafe.Sizeof(IdxRemSlot{}))*uint64(*(*int32)(unsafe.Pointer(bp)))) 5700 pCtx = idxMalloc(tls, bp+4, nByte) 5701 } 5702 5703 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5704 var dbrem uintptr = func() uintptr { 5705 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5706 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 5707 } 5708 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 5709 }() 5710 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 5711 dbrem, ts+1724, 2, SQLITE_UTF8, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 5712 f func(*libc.TLS, uintptr, int32, uintptr) 5713 }{idxRemFunc})), uintptr(0), uintptr(0)) 5714 } 5715 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5716 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 5717 (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1728, 0, SQLITE_UTF8, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 5718 f func(*libc.TLS, uintptr, int32, uintptr) 5719 }{idxSampleFunc})), uintptr(0), uintptr(0)) 5720 } 5721 5722 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5723 (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot = *(*int32)(unsafe.Pointer(bp)) + 1 5724 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+40, pzErr, zAllIndex) 5725 } 5726 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5727 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+48, pzErr, zIndexXInfo) 5728 } 5729 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5730 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+56, pzErr, zWrite) 5731 } 5732 5733 for *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 5734 var iRowid i64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 5735 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 5736 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 5737 if zTab == uintptr(0) || zIdx == uintptr(0) { 5738 continue 5739 } 5740 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 && iPrev != iRowid { 5741 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).Ftarget = float64((*sqlite3expert)(unsafe.Pointer(p)).FiSample) / 100.0 5742 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FiTarget = (*sqlite3expert)(unsafe.Pointer(p)).FiSample 5743 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRow = 0.0 5744 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRet = 0.0 5745 *(*int32)(unsafe.Pointer(bp + 4)) = idxBuildSampleTable(tls, p, zTab) 5746 if *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 5747 break 5748 } 5749 } 5750 *(*int32)(unsafe.Pointer(bp + 4)) = idxPopulateOneStat1(tls, p, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56)), zTab, zIdx, pzErr) 5751 iPrev = iRowid 5752 } 5753 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 { 5754 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, 5755 ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5756 } 5757 5758 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 40))) 5759 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 48))) 5760 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 56))) 5761 5762 if pCtx != 0 { 5763 for i = 0; i < (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot; i++ { 5764 sqlite3.Xsqlite3_free(tls, (*IdxRemSlot)(unsafe.Pointer(pCtx+8+uintptr(i)*40)).Fz) 5765 } 5766 sqlite3.Xsqlite3_free(tls, pCtx) 5767 } 5768 5769 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5770 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1735, uintptr(0), uintptr(0), uintptr(0)) 5771 } 5772 5773 sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5774 return *(*int32)(unsafe.Pointer(bp + 4)) 5775 } 5776 5777 func sqlite3_expert_new(tls *libc.TLS, db uintptr, pzErrmsg uintptr) uintptr { 5778 bp := tls.Alloc(32) 5779 defer tls.Free(32) 5780 5781 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 5782 var pNew uintptr 5783 5784 pNew = idxMalloc(tls, bp+16, int32(unsafe.Sizeof(sqlite3expert{}))) 5785 5786 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5787 (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb = db 5788 (*sqlite3expert)(unsafe.Pointer(pNew)).FiSample = 100 5789 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+24) 5790 } 5791 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5792 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+16) 5793 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5794 sqlite3.Xsqlite3_db_config(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, SQLITE_DBCONFIG_TRIGGER_EQP, libc.VaList(bp, 1, uintptr(0))) 5795 } 5796 } 5797 5798 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5799 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 5800 *(*int32)(unsafe.Pointer(bp + 16)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb, bp+24, pzErrmsg, 5801 ts+1766, 0) 5802 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) { 5803 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 5804 if zSql != 0 { 5805 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, zSql, uintptr(0), uintptr(0), pzErrmsg) 5806 } 5807 } 5808 idxFinalize(tls, bp+16, *(*uintptr)(unsafe.Pointer(bp + 24))) 5809 } 5810 5811 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5812 *(*int32)(unsafe.Pointer(bp + 16)) = idxCreateVtabSchema(tls, pNew, pzErrmsg) 5813 } 5814 5815 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5816 sqlite3.Xsqlite3_set_authorizer(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbv, *(*uintptr)(unsafe.Pointer(&struct { 5817 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 5818 }{idxAuthCallback})), pNew) 5819 } 5820 5821 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 5822 sqlite3_expert_destroy(tls, pNew) 5823 pNew = uintptr(0) 5824 } 5825 return pNew 5826 } 5827 5828 func sqlite3_expert_config(tls *libc.TLS, p uintptr, op int32, va uintptr) int32 { 5829 var rc int32 = SQLITE_OK 5830 var ap va_list 5831 _ = ap 5832 ap = va 5833 switch op { 5834 case EXPERT_CONFIG_SAMPLE: 5835 { 5836 var iVal int32 = libc.VaInt32(&ap) 5837 if iVal < 0 { 5838 iVal = 0 5839 } 5840 if iVal > 100 { 5841 iVal = 100 5842 } 5843 (*sqlite3expert)(unsafe.Pointer(p)).FiSample = iVal 5844 break 5845 5846 } 5847 default: 5848 rc = SQLITE_NOTFOUND 5849 break 5850 } 5851 5852 _ = ap 5853 return rc 5854 } 5855 5856 func sqlite3_expert_sql(tls *libc.TLS, p uintptr, zSql uintptr, pzErr uintptr) int32 { 5857 bp := tls.Alloc(20) 5858 defer tls.Free(20) 5859 5860 var pScanOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpScan 5861 var pStmtOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5862 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 5863 *(*uintptr)(unsafe.Pointer(bp + 8)) = zSql 5864 5865 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun != 0 { 5866 return SQLITE_MISUSE 5867 } 5868 5869 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 { 5870 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 5871 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, *(*uintptr)(unsafe.Pointer(bp + 8)), -1, bp, bp+8) 5872 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5873 if *(*uintptr)(unsafe.Pointer(bp)) != 0 { 5874 var pNew uintptr 5875 var z uintptr = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 5876 var n int32 = int32(libc.Xstrlen(tls, z)) 5877 pNew = idxMalloc(tls, bp+16, int32(uint64(unsafe.Sizeof(IdxStatement{}))+uint64(n)+uint64(1))) 5878 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5879 (*IdxStatement)(unsafe.Pointer(pNew)).FzSql = pNew + 1*40 5880 libc.Xmemcpy(tls, (*IdxStatement)(unsafe.Pointer(pNew)).FzSql, z, uint64(n+1)) 5881 (*IdxStatement)(unsafe.Pointer(pNew)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5882 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 5883 (*IdxStatement)(unsafe.Pointer(pNew)).FiId = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 5884 } 5885 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pNew 5886 } 5887 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 5888 } 5889 } else { 5890 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 5891 } 5892 } 5893 5894 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 5895 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, pScanOrig) 5896 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, pStmtOrig) 5897 (*sqlite3expert)(unsafe.Pointer(p)).FpScan = pScanOrig 5898 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pStmtOrig 5899 } 5900 5901 return *(*int32)(unsafe.Pointer(bp + 16)) 5902 } 5903 5904 func sqlite3_expert_analyze(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5905 bp := tls.Alloc(28) 5906 defer tls.Free(28) 5907 5908 var pEntry uintptr 5909 5910 *(*int32)(unsafe.Pointer(bp + 24)) = idxProcessTriggers(tls, p, pzErr) 5911 5912 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5913 *(*int32)(unsafe.Pointer(bp + 24)) = idxCreateCandidates(tls, p) 5914 } else if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_BUSY|int32(3)<<8 { 5915 if pzErr != 0 { 5916 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+1865, 0) 5917 } 5918 return *(*int32)(unsafe.Pointer(bp + 24)) 5919 } 5920 5921 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5922 *(*int32)(unsafe.Pointer(bp + 24)) = idxPopulateStat1(tls, p, pzErr) 5923 } 5924 5925 for pEntry = (*sqlite3expert)(unsafe.Pointer(p)).FhIdx.FpFirst; pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext { 5926 (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates = idxAppendText(tls, bp+24, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates, 5927 ts+1909, libc.VaList(bp, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, 5928 func() uintptr { 5929 if (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 != 0 { 5930 return ts + 1918 5931 } 5932 return ts + 584 5933 }(), (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2)) 5934 } 5935 5936 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5937 *(*int32)(unsafe.Pointer(bp + 24)) = idxFindIndexes(tls, p, pzErr) 5938 } 5939 5940 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5941 (*sqlite3expert)(unsafe.Pointer(p)).FbRun = 1 5942 } 5943 return *(*int32)(unsafe.Pointer(bp + 24)) 5944 } 5945 5946 func sqlite3_expert_count(tls *libc.TLS, p uintptr) int32 { 5947 var nRet int32 = 0 5948 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 5949 nRet = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 5950 } 5951 return nRet 5952 } 5953 5954 func sqlite3_expert_report(tls *libc.TLS, p uintptr, iStmt int32, eReport int32) uintptr { 5955 var zRet uintptr = uintptr(0) 5956 var pStmt uintptr 5957 5958 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun == 0 { 5959 return uintptr(0) 5960 } 5961 for pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement; pStmt != 0 && (*IdxStatement)(unsafe.Pointer(pStmt)).FiId != iStmt; pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext { 5962 } 5963 switch eReport { 5964 case EXPERT_REPORT_SQL: 5965 if pStmt != 0 { 5966 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql 5967 } 5968 break 5969 case EXPERT_REPORT_INDEXES: 5970 if pStmt != 0 { 5971 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx 5972 } 5973 break 5974 case EXPERT_REPORT_PLAN: 5975 if pStmt != 0 { 5976 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP 5977 } 5978 break 5979 case EXPERT_REPORT_CANDIDATES: 5980 zRet = (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates 5981 break 5982 } 5983 return zRet 5984 } 5985 5986 func sqlite3_expert_destroy(tls *libc.TLS, p uintptr) { 5987 if p != 0 { 5988 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm) 5989 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv) 5990 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, uintptr(0)) 5991 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, uintptr(0)) 5992 idxTableFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpTable) 5993 idxWriteFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpWrite) 5994 idxHashClear(tls, p+88) 5995 sqlite3.Xsqlite3_free(tls, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates) 5996 sqlite3.Xsqlite3_free(tls, p) 5997 } 5998 } 5999 6000 type ClientData = uintptr 6001 6002 type Tcl_WideInt = int64 6003 type Tcl_WideUInt = uint64 6004 6005 type stat = struct { 6006 Fst_dev dev_t 6007 Fst_ino ino_t 6008 Fst_nlink nlink_t 6009 Fst_mode mode_t 6010 Fst_padding0 int16 6011 Fst_uid uid_t 6012 Fst_gid gid_t 6013 Fst_padding1 int32 6014 Fst_rdev dev_t 6015 Fst_atim struct { 6016 Ftv_sec time_t 6017 Ftv_nsec int64 6018 } 6019 Fst_mtim struct { 6020 Ftv_sec time_t 6021 Ftv_nsec int64 6022 } 6023 Fst_ctim struct { 6024 Ftv_sec time_t 6025 Ftv_nsec int64 6026 } 6027 Fst_birthtim struct { 6028 Ftv_sec time_t 6029 Ftv_nsec int64 6030 } 6031 Fst_size off_t 6032 Fst_blocks blkcnt_t 6033 Fst_blksize blksize_t 6034 Fst_flags fflags_t 6035 Fst_gen uint64 6036 Fst_spare [10]uint64 6037 } 6038 6039 type Tcl_Interp1 = struct { 6040 FresultDontUse uintptr 6041 FfreeProcDontUse uintptr 6042 FerrorLineDontUse int32 6043 F__ccgo_pad1 [4]byte 6044 } 6045 6046 type Tcl_Interp = Tcl_Interp1 6047 6048 type Tcl_AsyncHandler = uintptr 6049 type Tcl_Channel = uintptr 6050 type Tcl_ChannelTypeVersion = uintptr 6051 type Tcl_Command = uintptr 6052 type Tcl_Condition = uintptr 6053 type Tcl_Dict = uintptr 6054 type Tcl_EncodingState = uintptr 6055 type Tcl_Encoding = uintptr 6056 type Tcl_Event1 = struct { 6057 Fproc uintptr 6058 FnextPtr uintptr 6059 } 6060 6061 type Tcl_Event = Tcl_Event1 6062 type Tcl_InterpState = uintptr 6063 type Tcl_LoadHandle = uintptr 6064 type Tcl_Mutex = uintptr 6065 type Tcl_Pid = uintptr 6066 type Tcl_RegExp = uintptr 6067 type Tcl_ThreadDataKey = uintptr 6068 type Tcl_ThreadId = uintptr 6069 type Tcl_TimerToken = uintptr 6070 type Tcl_Trace = uintptr 6071 type Tcl_Var = uintptr 6072 type Tcl_ZlibStream = uintptr 6073 6074 type Tcl_RegExpIndices1 = struct { 6075 Fstart int64 6076 Fend int64 6077 } 6078 6079 type Tcl_RegExpIndices = Tcl_RegExpIndices1 6080 6081 type Tcl_RegExpInfo1 = struct { 6082 Fnsubs int32 6083 F__ccgo_pad1 [4]byte 6084 Fmatches uintptr 6085 FextendStart int64 6086 Freserved int64 6087 } 6088 6089 type Tcl_RegExpInfo = Tcl_RegExpInfo1 6090 6091 type Tcl_Stat_ = uintptr 6092 type Tcl_OldStat_ = uintptr 6093 6094 type Tcl_ValueType = uint32 6095 6096 type Tcl_Value1 = struct { 6097 Ftype Tcl_ValueType 6098 F__ccgo_pad1 [4]byte 6099 FintValue int64 6100 FdoubleValue float64 6101 FwideValue Tcl_WideInt 6102 } 6103 6104 type Tcl_Value = Tcl_Value1 6105 6106 type Tcl_Obj1 = struct { 6107 FrefCount int32 6108 F__ccgo_pad1 [4]byte 6109 Fbytes uintptr 6110 Flength int32 6111 F__ccgo_pad2 [4]byte 6112 FtypePtr uintptr 6113 FinternalRep struct { 6114 FlongValue int64 6115 F__ccgo_pad1 [8]byte 6116 } 6117 } 6118 6119 type Tcl_ObjType1 = struct { 6120 Fname uintptr 6121 FfreeIntRepProc uintptr 6122 FdupIntRepProc uintptr 6123 FupdateStringProc uintptr 6124 FsetFromAnyProc uintptr 6125 } 6126 6127 type Tcl_ObjType = Tcl_ObjType1 6128 6129 type Tcl_Obj = Tcl_Obj1 6130 6131 type Tcl_SavedResult1 = struct { 6132 Fresult uintptr 6133 FfreeProc uintptr 6134 FobjResultPtr uintptr 6135 FappendResult uintptr 6136 FappendAvl int32 6137 FappendUsed int32 6138 FresultSpace [201]int8 6139 F__ccgo_pad1 [7]byte 6140 } 6141 6142 type Tcl_SavedResult = Tcl_SavedResult1 6143 6144 type Tcl_Namespace1 = struct { 6145 Fname uintptr 6146 FfullName uintptr 6147 FclientData ClientData 6148 FdeleteProc uintptr 6149 FparentPtr uintptr 6150 } 6151 6152 type Tcl_Namespace = Tcl_Namespace1 6153 6154 type Tcl_CallFrame1 = struct { 6155 FnsPtr uintptr 6156 Fdummy1 int32 6157 Fdummy2 int32 6158 Fdummy3 uintptr 6159 Fdummy4 uintptr 6160 Fdummy5 uintptr 6161 Fdummy6 int32 6162 F__ccgo_pad1 [4]byte 6163 Fdummy7 uintptr 6164 Fdummy8 uintptr 6165 Fdummy9 int32 6166 F__ccgo_pad2 [4]byte 6167 Fdummy10 uintptr 6168 Fdummy11 uintptr 6169 Fdummy12 uintptr 6170 Fdummy13 uintptr 6171 } 6172 6173 type Tcl_CallFrame = Tcl_CallFrame1 6174 6175 type Tcl_CmdInfo1 = struct { 6176 FisNativeObjectProc int32 6177 F__ccgo_pad1 [4]byte 6178 FobjProc uintptr 6179 FobjClientData ClientData 6180 Fproc uintptr 6181 FclientData ClientData 6182 FdeleteProc uintptr 6183 FdeleteData ClientData 6184 FnamespacePtr uintptr 6185 } 6186 6187 type Tcl_CmdInfo = Tcl_CmdInfo1 6188 6189 type Tcl_DString1 = struct { 6190 Fstring uintptr 6191 Flength int32 6192 FspaceAvl int32 6193 FstaticSpace [200]int8 6194 } 6195 6196 type Tcl_DString = Tcl_DString1 6197 6198 type Tcl_HashKeyType1 = struct { 6199 Fversion int32 6200 Fflags int32 6201 FhashKeyProc uintptr 6202 FcompareKeysProc uintptr 6203 FallocEntryProc uintptr 6204 FfreeEntryProc uintptr 6205 } 6206 6207 type Tcl_HashKeyType = Tcl_HashKeyType1 6208 type Tcl_HashTable1 = struct { 6209 Fbuckets uintptr 6210 FstaticBuckets [4]uintptr 6211 FnumBuckets int32 6212 FnumEntries int32 6213 FrebuildSize int32 6214 FdownShift int32 6215 Fmask int32 6216 FkeyType int32 6217 FfindProc uintptr 6218 FcreateProc uintptr 6219 FtypePtr uintptr 6220 } 6221 6222 type Tcl_HashTable = Tcl_HashTable1 6223 type Tcl_HashEntry1 = struct { 6224 FnextPtr uintptr 6225 FtablePtr uintptr 6226 Fhash uintptr 6227 FclientData ClientData 6228 Fkey struct{ FoneWordValue uintptr } 6229 } 6230 6231 type Tcl_HashEntry = Tcl_HashEntry1 6232 6233 type Tcl_HashSearch1 = struct { 6234 FtablePtr uintptr 6235 FnextIndex int32 6236 F__ccgo_pad1 [4]byte 6237 FnextEntryPtr uintptr 6238 } 6239 6240 type Tcl_HashSearch = Tcl_HashSearch1 6241 6242 type Tcl_DictSearch = struct { 6243 Fnext uintptr 6244 Fepoch int32 6245 F__ccgo_pad1 [4]byte 6246 FdictionaryPtr Tcl_Dict 6247 } 6248 6249 type Tcl_QueuePosition = uint32 6250 6251 type Tcl_Time1 = struct { 6252 Fsec int64 6253 Fusec int64 6254 } 6255 6256 type Tcl_Time = Tcl_Time1 6257 6258 type Tcl_ChannelType1 = struct { 6259 FtypeName uintptr 6260 Fversion Tcl_ChannelTypeVersion 6261 FcloseProc uintptr 6262 FinputProc uintptr 6263 FoutputProc uintptr 6264 FseekProc uintptr 6265 FsetOptionProc uintptr 6266 FgetOptionProc uintptr 6267 FwatchProc uintptr 6268 FgetHandleProc uintptr 6269 Fclose2Proc uintptr 6270 FblockModeProc uintptr 6271 FflushProc uintptr 6272 FhandlerProc uintptr 6273 FwideSeekProc uintptr 6274 FthreadActionProc uintptr 6275 FtruncateProc uintptr 6276 } 6277 6278 type Tcl_ChannelType = Tcl_ChannelType1 6279 6280 type Tcl_PathType = uint32 6281 6282 type Tcl_GlobTypeData1 = struct { 6283 Ftype int32 6284 Fperm int32 6285 FmacType uintptr 6286 FmacCreator uintptr 6287 } 6288 6289 type Tcl_GlobTypeData = Tcl_GlobTypeData1 6290 6291 type utimbuf = struct { 6292 Factime time_t 6293 Fmodtime time_t 6294 } 6295 6296 type Tcl_FSVersion = uintptr 6297 6298 type Tcl_Filesystem1 = struct { 6299 FtypeName uintptr 6300 FstructureLength int32 6301 F__ccgo_pad1 [4]byte 6302 Fversion Tcl_FSVersion 6303 FpathInFilesystemProc uintptr 6304 FdupInternalRepProc uintptr 6305 FfreeInternalRepProc uintptr 6306 FinternalToNormalizedProc uintptr 6307 FcreateInternalRepProc uintptr 6308 FnormalizePathProc uintptr 6309 FfilesystemPathTypeProc uintptr 6310 FfilesystemSeparatorProc uintptr 6311 FstatProc uintptr 6312 FaccessProc uintptr 6313 FopenFileChannelProc uintptr 6314 FmatchInDirectoryProc uintptr 6315 FutimeProc uintptr 6316 FlinkProc uintptr 6317 FlistVolumesProc uintptr 6318 FfileAttrStringsProc uintptr 6319 FfileAttrsGetProc uintptr 6320 FfileAttrsSetProc uintptr 6321 FcreateDirectoryProc uintptr 6322 FremoveDirectoryProc uintptr 6323 FdeleteFileProc uintptr 6324 FcopyFileProc uintptr 6325 FrenameFileProc uintptr 6326 FcopyDirectoryProc uintptr 6327 FlstatProc uintptr 6328 FloadFileProc uintptr 6329 FgetCwdProc uintptr 6330 FchdirProc uintptr 6331 } 6332 6333 type Tcl_Filesystem = Tcl_Filesystem1 6334 6335 type Tcl_NotifierProcs1 = struct { 6336 FsetTimerProc uintptr 6337 FwaitForEventProc uintptr 6338 FcreateFileHandlerProc uintptr 6339 FdeleteFileHandlerProc uintptr 6340 FinitNotifierProc uintptr 6341 FfinalizeNotifierProc uintptr 6342 FalertNotifierProc uintptr 6343 FserviceModeHookProc uintptr 6344 } 6345 6346 type Tcl_NotifierProcs = Tcl_NotifierProcs1 6347 6348 type Tcl_Token1 = struct { 6349 Ftype int32 6350 F__ccgo_pad1 [4]byte 6351 Fstart uintptr 6352 Fsize int32 6353 FnumComponents int32 6354 } 6355 6356 type Tcl_Token = Tcl_Token1 6357 6358 type Tcl_Parse1 = struct { 6359 FcommentStart uintptr 6360 FcommentSize int32 6361 F__ccgo_pad1 [4]byte 6362 FcommandStart uintptr 6363 FcommandSize int32 6364 FnumWords int32 6365 FtokenPtr uintptr 6366 FnumTokens int32 6367 FtokensAvailable int32 6368 FerrorType int32 6369 F__ccgo_pad2 [4]byte 6370 Fstring uintptr 6371 Fend uintptr 6372 Finterp uintptr 6373 Fterm uintptr 6374 Fincomplete int32 6375 F__ccgo_pad3 [4]byte 6376 FstaticTokens [20]Tcl_Token 6377 } 6378 6379 type Tcl_Parse = Tcl_Parse1 6380 6381 type Tcl_EncodingType1 = struct { 6382 FencodingName uintptr 6383 FtoUtfProc uintptr 6384 FfromUtfProc uintptr 6385 FfreeProc uintptr 6386 FclientData ClientData 6387 FnullSize int32 6388 F__ccgo_pad1 [4]byte 6389 } 6390 6391 type Tcl_EncodingType = Tcl_EncodingType1 6392 6393 type Tcl_UniChar = uint16 6394 6395 type Tcl_Config1 = struct { 6396 Fkey uintptr 6397 Fvalue uintptr 6398 } 6399 6400 type Tcl_Config = Tcl_Config1 6401 type mp_digit = uint32 6402 6403 type Tcl_ArgvInfo = struct { 6404 Ftype int32 6405 F__ccgo_pad1 [4]byte 6406 FkeyStr uintptr 6407 FsrcPtr uintptr 6408 FdstPtr uintptr 6409 FhelpStr uintptr 6410 FclientData ClientData 6411 } 6412 6413 type TclPlatStubs1 = struct { 6414 Fmagic int32 6415 F__ccgo_pad1 [4]byte 6416 Fhooks uintptr 6417 } 6418 6419 type TclStubHooks = struct { 6420 FtclPlatStubs uintptr 6421 FtclIntStubs uintptr 6422 FtclIntPlatStubs uintptr 6423 } 6424 6425 type TclStubs1 = struct { 6426 Fmagic int32 6427 F__ccgo_pad1 [4]byte 6428 Fhooks uintptr 6429 Ftcl_PkgProvideEx uintptr 6430 Ftcl_PkgRequireEx uintptr 6431 Ftcl_Panic uintptr 6432 Ftcl_Alloc uintptr 6433 Ftcl_Free uintptr 6434 Ftcl_Realloc uintptr 6435 Ftcl_DbCkalloc uintptr 6436 Ftcl_DbCkfree uintptr 6437 Ftcl_DbCkrealloc uintptr 6438 Ftcl_CreateFileHandler uintptr 6439 Ftcl_DeleteFileHandler uintptr 6440 Ftcl_SetTimer uintptr 6441 Ftcl_Sleep uintptr 6442 Ftcl_WaitForEvent uintptr 6443 Ftcl_AppendAllObjTypes uintptr 6444 Ftcl_AppendStringsToObj uintptr 6445 Ftcl_AppendToObj uintptr 6446 Ftcl_ConcatObj uintptr 6447 Ftcl_ConvertToType uintptr 6448 Ftcl_DbDecrRefCount uintptr 6449 Ftcl_DbIncrRefCount uintptr 6450 Ftcl_DbIsShared uintptr 6451 Ftcl_DbNewBooleanObj uintptr 6452 Ftcl_DbNewByteArrayObj uintptr 6453 Ftcl_DbNewDoubleObj uintptr 6454 Ftcl_DbNewListObj uintptr 6455 Ftcl_DbNewLongObj uintptr 6456 Ftcl_DbNewObj uintptr 6457 Ftcl_DbNewStringObj uintptr 6458 Ftcl_DuplicateObj uintptr 6459 FtclFreeObj uintptr 6460 Ftcl_GetBoolean uintptr 6461 Ftcl_GetBooleanFromObj uintptr 6462 Ftcl_GetByteArrayFromObj uintptr 6463 Ftcl_GetDouble uintptr 6464 Ftcl_GetDoubleFromObj uintptr 6465 Ftcl_GetIndexFromObj uintptr 6466 Ftcl_GetInt uintptr 6467 Ftcl_GetIntFromObj uintptr 6468 Ftcl_GetLongFromObj uintptr 6469 Ftcl_GetObjType uintptr 6470 Ftcl_GetStringFromObj uintptr 6471 Ftcl_InvalidateStringRep uintptr 6472 Ftcl_ListObjAppendList uintptr 6473 Ftcl_ListObjAppendElement uintptr 6474 Ftcl_ListObjGetElements uintptr 6475 Ftcl_ListObjIndex uintptr 6476 Ftcl_ListObjLength uintptr 6477 Ftcl_ListObjReplace uintptr 6478 Ftcl_NewBooleanObj uintptr 6479 Ftcl_NewByteArrayObj uintptr 6480 Ftcl_NewDoubleObj uintptr 6481 Ftcl_NewIntObj uintptr 6482 Ftcl_NewListObj uintptr 6483 Ftcl_NewLongObj uintptr 6484 Ftcl_NewObj uintptr 6485 Ftcl_NewStringObj uintptr 6486 Ftcl_SetBooleanObj uintptr 6487 Ftcl_SetByteArrayLength uintptr 6488 Ftcl_SetByteArrayObj uintptr 6489 Ftcl_SetDoubleObj uintptr 6490 Ftcl_SetIntObj uintptr 6491 Ftcl_SetListObj uintptr 6492 Ftcl_SetLongObj uintptr 6493 Ftcl_SetObjLength uintptr 6494 Ftcl_SetStringObj uintptr 6495 Ftcl_AddErrorInfo uintptr 6496 Ftcl_AddObjErrorInfo uintptr 6497 Ftcl_AllowExceptions uintptr 6498 Ftcl_AppendElement uintptr 6499 Ftcl_AppendResult uintptr 6500 Ftcl_AsyncCreate uintptr 6501 Ftcl_AsyncDelete uintptr 6502 Ftcl_AsyncInvoke uintptr 6503 Ftcl_AsyncMark uintptr 6504 Ftcl_AsyncReady uintptr 6505 Ftcl_BackgroundError uintptr 6506 Ftcl_Backslash uintptr 6507 Ftcl_BadChannelOption uintptr 6508 Ftcl_CallWhenDeleted uintptr 6509 Ftcl_CancelIdleCall uintptr 6510 Ftcl_Close uintptr 6511 Ftcl_CommandComplete uintptr 6512 Ftcl_Concat uintptr 6513 Ftcl_ConvertElement uintptr 6514 Ftcl_ConvertCountedElement uintptr 6515 Ftcl_CreateAlias uintptr 6516 Ftcl_CreateAliasObj uintptr 6517 Ftcl_CreateChannel uintptr 6518 Ftcl_CreateChannelHandler uintptr 6519 Ftcl_CreateCloseHandler uintptr 6520 Ftcl_CreateCommand uintptr 6521 Ftcl_CreateEventSource uintptr 6522 Ftcl_CreateExitHandler uintptr 6523 Ftcl_CreateInterp uintptr 6524 Ftcl_CreateMathFunc uintptr 6525 Ftcl_CreateObjCommand uintptr 6526 Ftcl_CreateSlave uintptr 6527 Ftcl_CreateTimerHandler uintptr 6528 Ftcl_CreateTrace uintptr 6529 Ftcl_DeleteAssocData uintptr 6530 Ftcl_DeleteChannelHandler uintptr 6531 Ftcl_DeleteCloseHandler uintptr 6532 Ftcl_DeleteCommand uintptr 6533 Ftcl_DeleteCommandFromToken uintptr 6534 Ftcl_DeleteEvents uintptr 6535 Ftcl_DeleteEventSource uintptr 6536 Ftcl_DeleteExitHandler uintptr 6537 Ftcl_DeleteHashEntry uintptr 6538 Ftcl_DeleteHashTable uintptr 6539 Ftcl_DeleteInterp uintptr 6540 Ftcl_DetachPids uintptr 6541 Ftcl_DeleteTimerHandler uintptr 6542 Ftcl_DeleteTrace uintptr 6543 Ftcl_DontCallWhenDeleted uintptr 6544 Ftcl_DoOneEvent uintptr 6545 Ftcl_DoWhenIdle uintptr 6546 Ftcl_DStringAppend uintptr 6547 Ftcl_DStringAppendElement uintptr 6548 Ftcl_DStringEndSublist uintptr 6549 Ftcl_DStringFree uintptr 6550 Ftcl_DStringGetResult uintptr 6551 Ftcl_DStringInit uintptr 6552 Ftcl_DStringResult uintptr 6553 Ftcl_DStringSetLength uintptr 6554 Ftcl_DStringStartSublist uintptr 6555 Ftcl_Eof uintptr 6556 Ftcl_ErrnoId uintptr 6557 Ftcl_ErrnoMsg uintptr 6558 Ftcl_Eval uintptr 6559 Ftcl_EvalFile uintptr 6560 Ftcl_EvalObj uintptr 6561 Ftcl_EventuallyFree uintptr 6562 Ftcl_Exit uintptr 6563 Ftcl_ExposeCommand uintptr 6564 Ftcl_ExprBoolean uintptr 6565 Ftcl_ExprBooleanObj uintptr 6566 Ftcl_ExprDouble uintptr 6567 Ftcl_ExprDoubleObj uintptr 6568 Ftcl_ExprLong uintptr 6569 Ftcl_ExprLongObj uintptr 6570 Ftcl_ExprObj uintptr 6571 Ftcl_ExprString uintptr 6572 Ftcl_Finalize uintptr 6573 Ftcl_FindExecutable uintptr 6574 Ftcl_FirstHashEntry uintptr 6575 Ftcl_Flush uintptr 6576 Ftcl_FreeResult uintptr 6577 Ftcl_GetAlias uintptr 6578 Ftcl_GetAliasObj uintptr 6579 Ftcl_GetAssocData uintptr 6580 Ftcl_GetChannel uintptr 6581 Ftcl_GetChannelBufferSize uintptr 6582 Ftcl_GetChannelHandle uintptr 6583 Ftcl_GetChannelInstanceData uintptr 6584 Ftcl_GetChannelMode uintptr 6585 Ftcl_GetChannelName uintptr 6586 Ftcl_GetChannelOption uintptr 6587 Ftcl_GetChannelType uintptr 6588 Ftcl_GetCommandInfo uintptr 6589 Ftcl_GetCommandName uintptr 6590 Ftcl_GetErrno uintptr 6591 Ftcl_GetHostName uintptr 6592 Ftcl_GetInterpPath uintptr 6593 Ftcl_GetMaster uintptr 6594 Ftcl_GetNameOfExecutable uintptr 6595 Ftcl_GetObjResult uintptr 6596 Ftcl_GetOpenFile uintptr 6597 Ftcl_GetPathType uintptr 6598 Ftcl_Gets uintptr 6599 Ftcl_GetsObj uintptr 6600 Ftcl_GetServiceMode uintptr 6601 Ftcl_GetSlave uintptr 6602 Ftcl_GetStdChannel uintptr 6603 Ftcl_GetStringResult uintptr 6604 Ftcl_GetVar uintptr 6605 Ftcl_GetVar2 uintptr 6606 Ftcl_GlobalEval uintptr 6607 Ftcl_GlobalEvalObj uintptr 6608 Ftcl_HideCommand uintptr 6609 Ftcl_Init uintptr 6610 Ftcl_InitHashTable uintptr 6611 Ftcl_InputBlocked uintptr 6612 Ftcl_InputBuffered uintptr 6613 Ftcl_InterpDeleted uintptr 6614 Ftcl_IsSafe uintptr 6615 Ftcl_JoinPath uintptr 6616 Ftcl_LinkVar uintptr 6617 Freserved188 uintptr 6618 Ftcl_MakeFileChannel uintptr 6619 Ftcl_MakeSafe uintptr 6620 Ftcl_MakeTcpClientChannel uintptr 6621 Ftcl_Merge uintptr 6622 Ftcl_NextHashEntry uintptr 6623 Ftcl_NotifyChannel uintptr 6624 Ftcl_ObjGetVar2 uintptr 6625 Ftcl_ObjSetVar2 uintptr 6626 Ftcl_OpenCommandChannel uintptr 6627 Ftcl_OpenFileChannel uintptr 6628 Ftcl_OpenTcpClient uintptr 6629 Ftcl_OpenTcpServer uintptr 6630 Ftcl_Preserve uintptr 6631 Ftcl_PrintDouble uintptr 6632 Ftcl_PutEnv uintptr 6633 Ftcl_PosixError uintptr 6634 Ftcl_QueueEvent uintptr 6635 Ftcl_Read uintptr 6636 Ftcl_ReapDetachedProcs uintptr 6637 Ftcl_RecordAndEval uintptr 6638 Ftcl_RecordAndEvalObj uintptr 6639 Ftcl_RegisterChannel uintptr 6640 Ftcl_RegisterObjType uintptr 6641 Ftcl_RegExpCompile uintptr 6642 Ftcl_RegExpExec uintptr 6643 Ftcl_RegExpMatch uintptr 6644 Ftcl_RegExpRange uintptr 6645 Ftcl_Release uintptr 6646 Ftcl_ResetResult uintptr 6647 Ftcl_ScanElement uintptr 6648 Ftcl_ScanCountedElement uintptr 6649 Ftcl_SeekOld uintptr 6650 Ftcl_ServiceAll uintptr 6651 Ftcl_ServiceEvent uintptr 6652 Ftcl_SetAssocData uintptr 6653 Ftcl_SetChannelBufferSize uintptr 6654 Ftcl_SetChannelOption uintptr 6655 Ftcl_SetCommandInfo uintptr 6656 Ftcl_SetErrno uintptr 6657 Ftcl_SetErrorCode uintptr 6658 Ftcl_SetMaxBlockTime uintptr 6659 Ftcl_SetPanicProc uintptr 6660 Ftcl_SetRecursionLimit uintptr 6661 Ftcl_SetResult uintptr 6662 Ftcl_SetServiceMode uintptr 6663 Ftcl_SetObjErrorCode uintptr 6664 Ftcl_SetObjResult uintptr 6665 Ftcl_SetStdChannel uintptr 6666 Ftcl_SetVar uintptr 6667 Ftcl_SetVar2 uintptr 6668 Ftcl_SignalId uintptr 6669 Ftcl_SignalMsg uintptr 6670 Ftcl_SourceRCFile uintptr 6671 Ftcl_SplitList uintptr 6672 Ftcl_SplitPath uintptr 6673 Ftcl_StaticPackage uintptr 6674 Ftcl_StringMatch uintptr 6675 Ftcl_TellOld uintptr 6676 Ftcl_TraceVar uintptr 6677 Ftcl_TraceVar2 uintptr 6678 Ftcl_TranslateFileName uintptr 6679 Ftcl_Ungets uintptr 6680 Ftcl_UnlinkVar uintptr 6681 Ftcl_UnregisterChannel uintptr 6682 Ftcl_UnsetVar uintptr 6683 Ftcl_UnsetVar2 uintptr 6684 Ftcl_UntraceVar uintptr 6685 Ftcl_UntraceVar2 uintptr 6686 Ftcl_UpdateLinkedVar uintptr 6687 Ftcl_UpVar uintptr 6688 Ftcl_UpVar2 uintptr 6689 Ftcl_VarEval uintptr 6690 Ftcl_VarTraceInfo uintptr 6691 Ftcl_VarTraceInfo2 uintptr 6692 Ftcl_Write uintptr 6693 Ftcl_WrongNumArgs uintptr 6694 Ftcl_DumpActiveMemory uintptr 6695 Ftcl_ValidateAllMemory uintptr 6696 Ftcl_AppendResultVA uintptr 6697 Ftcl_AppendStringsToObjVA uintptr 6698 Ftcl_HashStats uintptr 6699 Ftcl_ParseVar uintptr 6700 Ftcl_PkgPresent uintptr 6701 Ftcl_PkgPresentEx uintptr 6702 Ftcl_PkgProvide uintptr 6703 Ftcl_PkgRequire uintptr 6704 Ftcl_SetErrorCodeVA uintptr 6705 Ftcl_VarEvalVA uintptr 6706 Ftcl_WaitPid uintptr 6707 Ftcl_PanicVA uintptr 6708 Ftcl_GetVersion uintptr 6709 Ftcl_InitMemory uintptr 6710 Ftcl_StackChannel uintptr 6711 Ftcl_UnstackChannel uintptr 6712 Ftcl_GetStackedChannel uintptr 6713 Ftcl_SetMainLoop uintptr 6714 Freserved285 uintptr 6715 Ftcl_AppendObjToObj uintptr 6716 Ftcl_CreateEncoding uintptr 6717 Ftcl_CreateThreadExitHandler uintptr 6718 Ftcl_DeleteThreadExitHandler uintptr 6719 Ftcl_DiscardResult uintptr 6720 Ftcl_EvalEx uintptr 6721 Ftcl_EvalObjv uintptr 6722 Ftcl_EvalObjEx uintptr 6723 Ftcl_ExitThread uintptr 6724 Ftcl_ExternalToUtf uintptr 6725 Ftcl_ExternalToUtfDString uintptr 6726 Ftcl_FinalizeThread uintptr 6727 Ftcl_FinalizeNotifier uintptr 6728 Ftcl_FreeEncoding uintptr 6729 Ftcl_GetCurrentThread uintptr 6730 Ftcl_GetEncoding uintptr 6731 Ftcl_GetEncodingName uintptr 6732 Ftcl_GetEncodingNames uintptr 6733 Ftcl_GetIndexFromObjStruct uintptr 6734 Ftcl_GetThreadData uintptr 6735 Ftcl_GetVar2Ex uintptr 6736 Ftcl_InitNotifier uintptr 6737 Ftcl_MutexLock uintptr 6738 Ftcl_MutexUnlock uintptr 6739 Ftcl_ConditionNotify uintptr 6740 Ftcl_ConditionWait uintptr 6741 Ftcl_NumUtfChars uintptr 6742 Ftcl_ReadChars uintptr 6743 Ftcl_RestoreResult uintptr 6744 Ftcl_SaveResult uintptr 6745 Ftcl_SetSystemEncoding uintptr 6746 Ftcl_SetVar2Ex uintptr 6747 Ftcl_ThreadAlert uintptr 6748 Ftcl_ThreadQueueEvent uintptr 6749 Ftcl_UniCharAtIndex uintptr 6750 Ftcl_UniCharToLower uintptr 6751 Ftcl_UniCharToTitle uintptr 6752 Ftcl_UniCharToUpper uintptr 6753 Ftcl_UniCharToUtf uintptr 6754 Ftcl_UtfAtIndex uintptr 6755 Ftcl_UtfCharComplete uintptr 6756 Ftcl_UtfBackslash uintptr 6757 Ftcl_UtfFindFirst uintptr 6758 Ftcl_UtfFindLast uintptr 6759 Ftcl_UtfNext uintptr 6760 Ftcl_UtfPrev uintptr 6761 Ftcl_UtfToExternal uintptr 6762 Ftcl_UtfToExternalDString uintptr 6763 Ftcl_UtfToLower uintptr 6764 Ftcl_UtfToTitle uintptr 6765 Ftcl_UtfToUniChar uintptr 6766 Ftcl_UtfToUpper uintptr 6767 Ftcl_WriteChars uintptr 6768 Ftcl_WriteObj uintptr 6769 Ftcl_GetString uintptr 6770 Ftcl_GetDefaultEncodingDir uintptr 6771 Ftcl_SetDefaultEncodingDir uintptr 6772 Ftcl_AlertNotifier uintptr 6773 Ftcl_ServiceModeHook uintptr 6774 Ftcl_UniCharIsAlnum uintptr 6775 Ftcl_UniCharIsAlpha uintptr 6776 Ftcl_UniCharIsDigit uintptr 6777 Ftcl_UniCharIsLower uintptr 6778 Ftcl_UniCharIsSpace uintptr 6779 Ftcl_UniCharIsUpper uintptr 6780 Ftcl_UniCharIsWordChar uintptr 6781 Ftcl_UniCharLen uintptr 6782 Ftcl_UniCharNcmp uintptr 6783 Ftcl_UniCharToUtfDString uintptr 6784 Ftcl_UtfToUniCharDString uintptr 6785 Ftcl_GetRegExpFromObj uintptr 6786 Ftcl_EvalTokens uintptr 6787 Ftcl_FreeParse uintptr 6788 Ftcl_LogCommandInfo uintptr 6789 Ftcl_ParseBraces uintptr 6790 Ftcl_ParseCommand uintptr 6791 Ftcl_ParseExpr uintptr 6792 Ftcl_ParseQuotedString uintptr 6793 Ftcl_ParseVarName uintptr 6794 Ftcl_GetCwd uintptr 6795 Ftcl_Chdir uintptr 6796 Ftcl_Access uintptr 6797 Ftcl_Stat uintptr 6798 Ftcl_UtfNcmp uintptr 6799 Ftcl_UtfNcasecmp uintptr 6800 Ftcl_StringCaseMatch uintptr 6801 Ftcl_UniCharIsControl uintptr 6802 Ftcl_UniCharIsGraph uintptr 6803 Ftcl_UniCharIsPrint uintptr 6804 Ftcl_UniCharIsPunct uintptr 6805 Ftcl_RegExpExecObj uintptr 6806 Ftcl_RegExpGetInfo uintptr 6807 Ftcl_NewUnicodeObj uintptr 6808 Ftcl_SetUnicodeObj uintptr 6809 Ftcl_GetCharLength uintptr 6810 Ftcl_GetUniChar uintptr 6811 Ftcl_GetUnicode uintptr 6812 Ftcl_GetRange uintptr 6813 Ftcl_AppendUnicodeToObj uintptr 6814 Ftcl_RegExpMatchObj uintptr 6815 Ftcl_SetNotifier uintptr 6816 Ftcl_GetAllocMutex uintptr 6817 Ftcl_GetChannelNames uintptr 6818 Ftcl_GetChannelNamesEx uintptr 6819 Ftcl_ProcObjCmd uintptr 6820 Ftcl_ConditionFinalize uintptr 6821 Ftcl_MutexFinalize uintptr 6822 Ftcl_CreateThread uintptr 6823 Ftcl_ReadRaw uintptr 6824 Ftcl_WriteRaw uintptr 6825 Ftcl_GetTopChannel uintptr 6826 Ftcl_ChannelBuffered uintptr 6827 Ftcl_ChannelName uintptr 6828 Ftcl_ChannelVersion uintptr 6829 Ftcl_ChannelBlockModeProc uintptr 6830 Ftcl_ChannelCloseProc uintptr 6831 Ftcl_ChannelClose2Proc uintptr 6832 Ftcl_ChannelInputProc uintptr 6833 Ftcl_ChannelOutputProc uintptr 6834 Ftcl_ChannelSeekProc uintptr 6835 Ftcl_ChannelSetOptionProc uintptr 6836 Ftcl_ChannelGetOptionProc uintptr 6837 Ftcl_ChannelWatchProc uintptr 6838 Ftcl_ChannelGetHandleProc uintptr 6839 Ftcl_ChannelFlushProc uintptr 6840 Ftcl_ChannelHandlerProc uintptr 6841 Ftcl_JoinThread uintptr 6842 Ftcl_IsChannelShared uintptr 6843 Ftcl_IsChannelRegistered uintptr 6844 Ftcl_CutChannel uintptr 6845 Ftcl_SpliceChannel uintptr 6846 Ftcl_ClearChannelHandlers uintptr 6847 Ftcl_IsChannelExisting uintptr 6848 Ftcl_UniCharNcasecmp uintptr 6849 Ftcl_UniCharCaseMatch uintptr 6850 Ftcl_FindHashEntry uintptr 6851 Ftcl_CreateHashEntry uintptr 6852 Ftcl_InitCustomHashTable uintptr 6853 Ftcl_InitObjHashTable uintptr 6854 Ftcl_CommandTraceInfo uintptr 6855 Ftcl_TraceCommand uintptr 6856 Ftcl_UntraceCommand uintptr 6857 Ftcl_AttemptAlloc uintptr 6858 Ftcl_AttemptDbCkalloc uintptr 6859 Ftcl_AttemptRealloc uintptr 6860 Ftcl_AttemptDbCkrealloc uintptr 6861 Ftcl_AttemptSetObjLength uintptr 6862 Ftcl_GetChannelThread uintptr 6863 Ftcl_GetUnicodeFromObj uintptr 6864 Ftcl_GetMathFuncInfo uintptr 6865 Ftcl_ListMathFuncs uintptr 6866 Ftcl_SubstObj uintptr 6867 Ftcl_DetachChannel uintptr 6868 Ftcl_IsStandardChannel uintptr 6869 Ftcl_FSCopyFile uintptr 6870 Ftcl_FSCopyDirectory uintptr 6871 Ftcl_FSCreateDirectory uintptr 6872 Ftcl_FSDeleteFile uintptr 6873 Ftcl_FSLoadFile uintptr 6874 Ftcl_FSMatchInDirectory uintptr 6875 Ftcl_FSLink uintptr 6876 Ftcl_FSRemoveDirectory uintptr 6877 Ftcl_FSRenameFile uintptr 6878 Ftcl_FSLstat uintptr 6879 Ftcl_FSUtime uintptr 6880 Ftcl_FSFileAttrsGet uintptr 6881 Ftcl_FSFileAttrsSet uintptr 6882 Ftcl_FSFileAttrStrings uintptr 6883 Ftcl_FSStat uintptr 6884 Ftcl_FSAccess uintptr 6885 Ftcl_FSOpenFileChannel uintptr 6886 Ftcl_FSGetCwd uintptr 6887 Ftcl_FSChdir uintptr 6888 Ftcl_FSConvertToPathType uintptr 6889 Ftcl_FSJoinPath uintptr 6890 Ftcl_FSSplitPath uintptr 6891 Ftcl_FSEqualPaths uintptr 6892 Ftcl_FSGetNormalizedPath uintptr 6893 Ftcl_FSJoinToPath uintptr 6894 Ftcl_FSGetInternalRep uintptr 6895 Ftcl_FSGetTranslatedPath uintptr 6896 Ftcl_FSEvalFile uintptr 6897 Ftcl_FSNewNativePath uintptr 6898 Ftcl_FSGetNativePath uintptr 6899 Ftcl_FSFileSystemInfo uintptr 6900 Ftcl_FSPathSeparator uintptr 6901 Ftcl_FSListVolumes uintptr 6902 Ftcl_FSRegister uintptr 6903 Ftcl_FSUnregister uintptr 6904 Ftcl_FSData uintptr 6905 Ftcl_FSGetTranslatedStringPath uintptr 6906 Ftcl_FSGetFileSystemForPath uintptr 6907 Ftcl_FSGetPathType uintptr 6908 Ftcl_OutputBuffered uintptr 6909 Ftcl_FSMountsChanged uintptr 6910 Ftcl_EvalTokensStandard uintptr 6911 Ftcl_GetTime uintptr 6912 Ftcl_CreateObjTrace uintptr 6913 Ftcl_GetCommandInfoFromToken uintptr 6914 Ftcl_SetCommandInfoFromToken uintptr 6915 Ftcl_DbNewWideIntObj uintptr 6916 Ftcl_GetWideIntFromObj uintptr 6917 Ftcl_NewWideIntObj uintptr 6918 Ftcl_SetWideIntObj uintptr 6919 Ftcl_AllocStatBuf uintptr 6920 Ftcl_Seek uintptr 6921 Ftcl_Tell uintptr 6922 Ftcl_ChannelWideSeekProc uintptr 6923 Ftcl_DictObjPut uintptr 6924 Ftcl_DictObjGet uintptr 6925 Ftcl_DictObjRemove uintptr 6926 Ftcl_DictObjSize uintptr 6927 Ftcl_DictObjFirst uintptr 6928 Ftcl_DictObjNext uintptr 6929 Ftcl_DictObjDone uintptr 6930 Ftcl_DictObjPutKeyList uintptr 6931 Ftcl_DictObjRemoveKeyList uintptr 6932 Ftcl_NewDictObj uintptr 6933 Ftcl_DbNewDictObj uintptr 6934 Ftcl_RegisterConfig uintptr 6935 Ftcl_CreateNamespace uintptr 6936 Ftcl_DeleteNamespace uintptr 6937 Ftcl_AppendExportList uintptr 6938 Ftcl_Export uintptr 6939 Ftcl_Import uintptr 6940 Ftcl_ForgetImport uintptr 6941 Ftcl_GetCurrentNamespace uintptr 6942 Ftcl_GetGlobalNamespace uintptr 6943 Ftcl_FindNamespace uintptr 6944 Ftcl_FindCommand uintptr 6945 Ftcl_GetCommandFromObj uintptr 6946 Ftcl_GetCommandFullName uintptr 6947 Ftcl_FSEvalFileEx uintptr 6948 Ftcl_SetExitProc uintptr 6949 Ftcl_LimitAddHandler uintptr 6950 Ftcl_LimitRemoveHandler uintptr 6951 Ftcl_LimitReady uintptr 6952 Ftcl_LimitCheck uintptr 6953 Ftcl_LimitExceeded uintptr 6954 Ftcl_LimitSetCommands uintptr 6955 Ftcl_LimitSetTime uintptr 6956 Ftcl_LimitSetGranularity uintptr 6957 Ftcl_LimitTypeEnabled uintptr 6958 Ftcl_LimitTypeExceeded uintptr 6959 Ftcl_LimitTypeSet uintptr 6960 Ftcl_LimitTypeReset uintptr 6961 Ftcl_LimitGetCommands uintptr 6962 Ftcl_LimitGetTime uintptr 6963 Ftcl_LimitGetGranularity uintptr 6964 Ftcl_SaveInterpState uintptr 6965 Ftcl_RestoreInterpState uintptr 6966 Ftcl_DiscardInterpState uintptr 6967 Ftcl_SetReturnOptions uintptr 6968 Ftcl_GetReturnOptions uintptr 6969 Ftcl_IsEnsemble uintptr 6970 Ftcl_CreateEnsemble uintptr 6971 Ftcl_FindEnsemble uintptr 6972 Ftcl_SetEnsembleSubcommandList uintptr 6973 Ftcl_SetEnsembleMappingDict uintptr 6974 Ftcl_SetEnsembleUnknownHandler uintptr 6975 Ftcl_SetEnsembleFlags uintptr 6976 Ftcl_GetEnsembleSubcommandList uintptr 6977 Ftcl_GetEnsembleMappingDict uintptr 6978 Ftcl_GetEnsembleUnknownHandler uintptr 6979 Ftcl_GetEnsembleFlags uintptr 6980 Ftcl_GetEnsembleNamespace uintptr 6981 Ftcl_SetTimeProc uintptr 6982 Ftcl_QueryTimeProc uintptr 6983 Ftcl_ChannelThreadActionProc uintptr 6984 Ftcl_NewBignumObj uintptr 6985 Ftcl_DbNewBignumObj uintptr 6986 Ftcl_SetBignumObj uintptr 6987 Ftcl_GetBignumFromObj uintptr 6988 Ftcl_TakeBignumFromObj uintptr 6989 Ftcl_TruncateChannel uintptr 6990 Ftcl_ChannelTruncateProc uintptr 6991 Ftcl_SetChannelErrorInterp uintptr 6992 Ftcl_GetChannelErrorInterp uintptr 6993 Ftcl_SetChannelError uintptr 6994 Ftcl_GetChannelError uintptr 6995 Ftcl_InitBignumFromDouble uintptr 6996 Ftcl_GetNamespaceUnknownHandler uintptr 6997 Ftcl_SetNamespaceUnknownHandler uintptr 6998 Ftcl_GetEncodingFromObj uintptr 6999 Ftcl_GetEncodingSearchPath uintptr 7000 Ftcl_SetEncodingSearchPath uintptr 7001 Ftcl_GetEncodingNameFromEnvironment uintptr 7002 Ftcl_PkgRequireProc uintptr 7003 Ftcl_AppendObjToErrorInfo uintptr 7004 Ftcl_AppendLimitedToObj uintptr 7005 Ftcl_Format uintptr 7006 Ftcl_AppendFormatToObj uintptr 7007 Ftcl_ObjPrintf uintptr 7008 Ftcl_AppendPrintfToObj uintptr 7009 Ftcl_CancelEval uintptr 7010 Ftcl_Canceled uintptr 7011 Ftcl_CreatePipe uintptr 7012 Ftcl_NRCreateCommand uintptr 7013 Ftcl_NREvalObj uintptr 7014 Ftcl_NREvalObjv uintptr 7015 Ftcl_NRCmdSwap uintptr 7016 Ftcl_NRAddCallback uintptr 7017 Ftcl_NRCallObjProc uintptr 7018 Ftcl_GetFSDeviceFromStat uintptr 7019 Ftcl_GetFSInodeFromStat uintptr 7020 Ftcl_GetModeFromStat uintptr 7021 Ftcl_GetLinkCountFromStat uintptr 7022 Ftcl_GetUserIdFromStat uintptr 7023 Ftcl_GetGroupIdFromStat uintptr 7024 Ftcl_GetDeviceTypeFromStat uintptr 7025 Ftcl_GetAccessTimeFromStat uintptr 7026 Ftcl_GetModificationTimeFromStat uintptr 7027 Ftcl_GetChangeTimeFromStat uintptr 7028 Ftcl_GetSizeFromStat uintptr 7029 Ftcl_GetBlocksFromStat uintptr 7030 Ftcl_GetBlockSizeFromStat uintptr 7031 Ftcl_SetEnsembleParameterList uintptr 7032 Ftcl_GetEnsembleParameterList uintptr 7033 Ftcl_ParseArgsObjv uintptr 7034 Ftcl_GetErrorLine uintptr 7035 Ftcl_SetErrorLine uintptr 7036 Ftcl_TransferResult uintptr 7037 Ftcl_InterpActive uintptr 7038 Ftcl_BackgroundException uintptr 7039 Ftcl_ZlibDeflate uintptr 7040 Ftcl_ZlibInflate uintptr 7041 Ftcl_ZlibCRC32 uintptr 7042 Ftcl_ZlibAdler32 uintptr 7043 Ftcl_ZlibStreamInit uintptr 7044 Ftcl_ZlibStreamGetCommandName uintptr 7045 Ftcl_ZlibStreamEof uintptr 7046 Ftcl_ZlibStreamChecksum uintptr 7047 Ftcl_ZlibStreamPut uintptr 7048 Ftcl_ZlibStreamGet uintptr 7049 Ftcl_ZlibStreamClose uintptr 7050 Ftcl_ZlibStreamReset uintptr 7051 Ftcl_SetStartupScript uintptr 7052 Ftcl_GetStartupScript uintptr 7053 Ftcl_CloseEx uintptr 7054 Ftcl_NRExprObj uintptr 7055 Ftcl_NRSubstObj uintptr 7056 Ftcl_LoadFile uintptr 7057 Ftcl_FindSymbol uintptr 7058 Ftcl_FSUnloadFile uintptr 7059 Ftcl_ZlibStreamSetCompressionDictionary uintptr 7060 Freserved631 uintptr 7061 Freserved632 uintptr 7062 Freserved633 uintptr 7063 Freserved634 uintptr 7064 Freserved635 uintptr 7065 Freserved636 uintptr 7066 Freserved637 uintptr 7067 Freserved638 uintptr 7068 Freserved639 uintptr 7069 Freserved640 uintptr 7070 Freserved641 uintptr 7071 Freserved642 uintptr 7072 Freserved643 uintptr 7073 Freserved644 uintptr 7074 Freserved645 uintptr 7075 Freserved646 uintptr 7076 Freserved647 uintptr 7077 Freserved648 uintptr 7078 Freserved649 uintptr 7079 Freserved650 uintptr 7080 Freserved651 uintptr 7081 Freserved652 uintptr 7082 Freserved653 uintptr 7083 Freserved654 uintptr 7084 Freserved655 uintptr 7085 Freserved656 uintptr 7086 Freserved657 uintptr 7087 Freserved658 uintptr 7088 Freserved659 uintptr 7089 FtclUnusedStubEntry uintptr 7090 } 7091 7092 type TclStubs = TclStubs1 7093 7094 type TclPlatStubs = TclPlatStubs1 7095 7096 func dbHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 7097 bp := tls.Alloc(88) 7098 defer tls.Free(88) 7099 7100 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 7101 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 7102 return TCL_ERROR 7103 } 7104 7105 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 7106 return TCL_OK 7107 } 7108 7109 func testExpertCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7110 bp := tls.Alloc(212) 7111 defer tls.Free(212) 7112 7113 var pExpert uintptr = clientData 7114 *(*[6]Subcmd)(unsafe.Pointer(bp)) = [6]Subcmd{ 7115 {FzSub: ts + 1947, FnArg: 1, FzMsg: ts + 1951}, 7116 {FzSub: ts + 1957, FzMsg: ts + 584}, 7117 {FzSub: ts + 1965, FzMsg: ts + 584}, 7118 {FzSub: ts + 1971, FnArg: 2, FzMsg: ts + 1978}, 7119 {FzSub: ts + 1991, FzMsg: ts + 584}, 7120 {}, 7121 } 7122 7123 var rc int32 = TCL_OK 7124 *(*uintptr)(unsafe.Pointer(bp + 152)) = uintptr(0) 7125 7126 if objc < 2 { 7127 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 7128 return TCL_ERROR 7129 } 7130 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 7131 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(Subcmd{})), ts+2014, 0, bp+144) 7132 if rc != TCL_OK { 7133 return rc 7134 } 7135 if objc != 2+(*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FnArg { 7136 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FzMsg) 7137 return TCL_ERROR 7138 } 7139 7140 switch *(*int32)(unsafe.Pointer(bp + 144)) { 7141 case 0: 7142 { 7143 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7144 rc = sqlite3_expert_sql(tls, pExpert, zArg, bp+152) 7145 break 7146 7147 } 7148 7149 case 1: 7150 { 7151 rc = sqlite3_expert_analyze(tls, pExpert, bp+152) 7152 break 7153 7154 } 7155 7156 case 2: 7157 { 7158 var n int32 = sqlite3_expert_count(tls, pExpert) 7159 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, n)) 7160 break 7161 7162 } 7163 7164 case 3: 7165 { 7166 *(*[5]uintptr)(unsafe.Pointer(bp + 168)) = [5]uintptr{ 7167 ts + 1947, ts + 2026, ts + 2034, ts + 2039, uintptr(0), 7168 } 7169 7170 var zReport uintptr 7171 7172 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+160) != 0 || 7173 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168, int32(unsafe.Sizeof(uintptr(0))), ts+1971, 0, bp+208) != 0 { 7174 return TCL_ERROR 7175 } 7176 7177 zReport = sqlite3_expert_report(tls, pExpert, *(*int32)(unsafe.Pointer(bp + 160)), 1+*(*int32)(unsafe.Pointer(bp + 208))) 7178 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zReport, -1)) 7179 break 7180 7181 } 7182 7183 default: 7184 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 7185 break 7186 } 7187 7188 if rc != TCL_OK { 7189 if *(*uintptr)(unsafe.Pointer(bp + 152)) != 0 { 7190 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 152)), -1)) 7191 } else { 7192 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 7193 } 7194 } 7195 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 152))) 7196 return rc 7197 } 7198 7199 type Subcmd = struct { 7200 FzSub uintptr 7201 FnArg int32 7202 F__ccgo_pad1 [4]byte 7203 FzMsg uintptr 7204 } 7205 7206 func testExpertDel(tls *libc.TLS, clientData uintptr) { 7207 var pExpert uintptr = clientData 7208 sqlite3_expert_destroy(tls, pExpert) 7209 } 7210 7211 func test_sqlite3_expert_new(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7212 bp := tls.Alloc(56) 7213 defer tls.Free(56) 7214 7215 var zCmd uintptr = uintptr(0) 7216 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7217 var pExpert uintptr 7218 var rc int32 = TCL_OK 7219 7220 if objc != 2 { 7221 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 7222 return TCL_ERROR 7223 } 7224 if dbHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) != 0 { 7225 return TCL_ERROR 7226 } 7227 7228 zCmd = sqlite3.Xsqlite3_mprintf(tls, ts+2053, libc.VaList(bp, libc.PreIncInt32(&iCmd, 1))) 7229 if zCmd == uintptr(0) { 7230 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, ts+2069, uintptr(0))) 7231 return TCL_ERROR 7232 } 7233 7234 pExpert = sqlite3_expert_new(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48) 7235 if pExpert == uintptr(0) { 7236 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 48)), uintptr(0))) 7237 rc = TCL_ERROR 7238 } else { 7239 var p uintptr = pExpert 7240 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 7241 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7242 }{testExpertCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testExpertDel}))) 7243 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zCmd, -1)) 7244 } 7245 7246 sqlite3.Xsqlite3_free(tls, zCmd) 7247 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 7248 return rc 7249 } 7250 7251 var iCmd int32 = 0 7252 7253 func TestExpert_Init(tls *libc.TLS, interp uintptr) int32 { 7254 bp := tls.Alloc(16) 7255 defer tls.Free(16) 7256 7257 *(*[1]struct { 7258 FzCmd uintptr 7259 FxProc uintptr 7260 })(unsafe.Pointer(bp)) = [1]struct { 7261 FzCmd uintptr 7262 FxProc uintptr 7263 }{ 7264 {FzCmd: ts + 2083, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 7265 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7266 }{test_sqlite3_expert_new}))}, 7267 } 7268 var i int32 7269 7270 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]struct { 7271 FzCmd uintptr 7272 FxProc uintptr 7273 }{}))/uint64(unsafe.Sizeof(struct { 7274 FzCmd uintptr 7275 FxProc uintptr 7276 }{})); i++ { 7277 var p uintptr = bp + uintptr(i)*16 7278 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 7279 FzCmd uintptr 7280 FxProc uintptr 7281 })(unsafe.Pointer(p)).FzCmd, (*struct { 7282 FzCmd uintptr 7283 FxProc uintptr 7284 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 7285 } 7286 return TCL_OK 7287 } 7288 7289 func f5tDbPointer(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr) int32 { 7290 bp := tls.Alloc(64) 7291 defer tls.Free(64) 7292 7293 var p uintptr 7294 7295 var z uintptr = tcl.XTcl_GetString(tls, pObj) 7296 if tcl.XTcl_GetCommandInfo(tls, interp, z, bp) != 0 { 7297 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 7298 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 7299 return TCL_OK 7300 } 7301 return TCL_ERROR 7302 } 7303 7304 func f5tResultToErrorCode(tls *libc.TLS, zRes uintptr) int32 { 7305 bp := tls.Alloc(64) 7306 defer tls.Free(64) 7307 7308 *(*[4]ErrorCode)(unsafe.Pointer(bp)) = [4]ErrorCode{ 7309 {Frc: SQLITE_DONE, FzError: ts + 2102}, 7310 {Frc: SQLITE_ERROR, FzError: ts + 2114}, 7311 {FzError: ts + 2127}, 7312 {FzError: ts + 584}, 7313 } 7314 var i int32 7315 7316 for i = 0; uint64(i) < uint64(unsafe.Sizeof([4]ErrorCode{}))/uint64(unsafe.Sizeof(ErrorCode{})); i++ { 7317 if 0 == sqlite3.Xsqlite3_stricmp(tls, zRes, (*ErrorCode)(unsafe.Pointer(bp+uintptr(i)*16)).FzError) { 7318 return (*ErrorCode)(unsafe.Pointer(bp + uintptr(i)*16)).Frc 7319 } 7320 } 7321 7322 return SQLITE_ERROR 7323 } 7324 7325 type ErrorCode = struct { 7326 Frc int32 7327 F__ccgo_pad1 [4]byte 7328 FzError uintptr 7329 } 7330 7331 func f5tDbAndApi(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr, ppApi uintptr) int32 { 7332 bp := tls.Alloc(72) 7333 defer tls.Free(72) 7334 7335 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7336 var rc int32 = f5tDbPointer(tls, interp, pObj, bp+48) 7337 if rc != TCL_OK { 7338 return TCL_ERROR 7339 } else { 7340 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 7341 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 7342 7343 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+2137, -1, bp+56, uintptr(0)) 7344 if rc != SQLITE_OK { 7345 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7346 return TCL_ERROR 7347 } 7348 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), 1, bp+64, ts+2161, uintptr(0)) 7349 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 7350 7351 if sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != SQLITE_OK { 7352 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7353 return TCL_ERROR 7354 } 7355 7356 *(*uintptr)(unsafe.Pointer(ppDb)) = *(*uintptr)(unsafe.Pointer(bp + 48)) 7357 *(*uintptr)(unsafe.Pointer(ppApi)) = *(*uintptr)(unsafe.Pointer(bp + 64)) 7358 } 7359 7360 return TCL_OK 7361 } 7362 7363 type F5tFunction1 = struct { 7364 Finterp uintptr 7365 FpScript uintptr 7366 } 7367 7368 type F5tFunction = F5tFunction1 7369 7370 type F5tApi1 = struct { 7371 FpApi uintptr 7372 FpFts uintptr 7373 } 7374 7375 type F5tApi = F5tApi1 7376 7377 type F5tAuxData1 = struct{ FpObj uintptr } 7378 7379 type F5tAuxData = F5tAuxData1 7380 7381 func xTokenizeCb(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 7382 var p uintptr = pCtx 7383 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7384 var rc int32 7385 7386 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7387 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7388 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iStart)) 7389 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iEnd)) 7390 7391 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7392 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7393 var _objPtr uintptr = pEval 7394 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7395 tcl.XTclFreeObj(tls, _objPtr) 7396 } 7397 } 7398 if rc == TCL_OK { 7399 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7400 } 7401 7402 return rc 7403 } 7404 7405 func xQueryPhraseCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr) int32 { 7406 bp := tls.Alloc(88) 7407 defer tls.Free(88) 7408 7409 var p uintptr = pCtx 7410 var pEval uintptr 7411 var rc int32 7412 7413 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 7414 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 7415 libc.Xsprintf(tls, bp+8, ts+2174, libc.VaList(bp, libc.PostIncInt64(&iCmd1, 1))) 7416 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 7417 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7418 }{xF5tApi})), bp+72, uintptr(0)) 7419 7420 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7421 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7422 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 7423 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7424 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7425 var _objPtr uintptr = pEval 7426 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7427 tcl.XTclFreeObj(tls, _objPtr) 7428 } 7429 } 7430 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 7431 7432 if rc == TCL_OK { 7433 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7434 } 7435 7436 return rc 7437 } 7438 7439 var iCmd1 sqlite3_int64 = int64(0) 7440 7441 func xSetAuxdataDestructor(tls *libc.TLS, p uintptr) { 7442 var pData uintptr = p 7443 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7444 var _objPtr uintptr = (*F5tAuxData)(unsafe.Pointer(pData)).FpObj 7445 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7446 tcl.XTclFreeObj(tls, _objPtr) 7447 } 7448 } 7449 sqlite3.Xsqlite3_free(tls, pData) 7450 } 7451 7452 func xF5tApi(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7453 bp := tls.Alloc(684) 7454 defer tls.Free(684) 7455 7456 *(*[19]Sub)(unsafe.Pointer(bp + 32)) = [19]Sub{ 7457 {FzName: ts + 2185, FzMsg: ts + 584}, 7458 {FzName: ts + 2198, FzMsg: ts + 584}, 7459 {FzName: ts + 2208, FnArg: 1, FzMsg: ts + 2225}, 7460 {FzName: ts + 2229, FnArg: 2, FzMsg: ts + 2239}, 7461 {FzName: ts + 2251, FzMsg: ts + 584}, 7462 {FzName: ts + 2264, FnArg: 1, FzMsg: ts + 2276}, 7463 {FzName: ts + 2283, FzMsg: ts + 584}, 7464 {FzName: ts + 2294, FnArg: 1, FzMsg: ts + 2300}, 7465 {FzName: ts + 2304, FzMsg: ts + 584}, 7466 {FzName: ts + 2311, FnArg: 1, FzMsg: ts + 2225}, 7467 {FzName: ts + 2323, FnArg: 1, FzMsg: ts + 2225}, 7468 {FzName: ts + 2335, FnArg: 2, FzMsg: ts + 2348}, 7469 {FzName: ts + 2362, FnArg: 1, FzMsg: ts + 2374}, 7470 {FzName: ts + 2380, FnArg: 1, FzMsg: ts + 2392}, 7471 {FzName: ts + 2398, FnArg: 1, FzMsg: ts + 2413}, 7472 {FzName: ts + 2421, FnArg: 1, FzMsg: ts + 2392}, 7473 {FzName: ts + 2436, FnArg: 4, FzMsg: ts + 2451}, 7474 {FzName: ts + 2480, FnArg: 3, FzMsg: ts + 2501}, 7475 {}, 7476 } 7477 var rc int32 7478 *(*int32)(unsafe.Pointer(bp + 488)) = 0 7479 var p uintptr = clientData 7480 7481 if objc < 2 { 7482 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 7483 return TCL_ERROR 7484 } 7485 7486 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 7487 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32, int32(unsafe.Sizeof(Sub{})), ts+2523, 0, bp+488) 7488 if rc != TCL_OK { 7489 return rc 7490 } 7491 if (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FnArg != objc-2 { 7492 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FzMsg) 7493 return TCL_ERROR 7494 } 7495 7496 switch *(*int32)(unsafe.Pointer(bp + 488)) { 7497 case 0: 7498 { 7499 var nCol int32 7500 nCol = (*struct { 7501 f func(*libc.TLS, uintptr) int32 7502 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7503 if rc == SQLITE_OK { 7504 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol)) 7505 } 7506 break 7507 7508 } 7509 case 1: 7510 { 7511 rc = (*struct { 7512 f func(*libc.TLS, uintptr, uintptr) int32 7513 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+496) 7514 if rc == SQLITE_OK { 7515 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 496)))) 7516 } 7517 break 7518 7519 } 7520 case 2: 7521 { 7522 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+504) != 0 { 7523 return TCL_ERROR 7524 } 7525 rc = (*struct { 7526 f func(*libc.TLS, uintptr, int32, uintptr) int32 7527 })(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) 7528 if rc == SQLITE_OK { 7529 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 512)))) 7530 } 7531 break 7532 7533 } 7534 case 3: 7535 { 7536 var zText uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+520) 7537 7538 (*F5tFunction)(unsafe.Pointer(bp + 528)).Finterp = interp 7539 (*F5tFunction)(unsafe.Pointer(bp + 528)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7540 rc = (*struct { 7541 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr) int32 7542 })(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 { 7543 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 7544 }{xTokenizeCb}))) 7545 if rc == SQLITE_OK { 7546 tcl.XTcl_ResetResult(tls, interp) 7547 } 7548 return rc 7549 7550 } 7551 case 4: 7552 { 7553 var nPhrase int32 7554 nPhrase = (*struct { 7555 f func(*libc.TLS, uintptr) int32 7556 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7557 if rc == SQLITE_OK { 7558 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPhrase)) 7559 } 7560 break 7561 7562 } 7563 case 5: 7564 { 7565 var sz int32 7566 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+544) != 0 { 7567 return TCL_ERROR 7568 } 7569 sz = (*struct { 7570 f func(*libc.TLS, uintptr, int32) int32 7571 })(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))) 7572 if rc == SQLITE_OK { 7573 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sz)) 7574 } 7575 break 7576 7577 } 7578 case 6: 7579 { 7580 rc = (*struct { 7581 f func(*libc.TLS, uintptr, uintptr) int32 7582 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInstCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+548) 7583 if rc == SQLITE_OK { 7584 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 548)))) 7585 } 7586 break 7587 7588 } 7589 case 7: 7590 { 7591 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+552) != 0 { 7592 return TCL_ERROR 7593 } 7594 rc = (*struct { 7595 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 7596 })(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) 7597 if rc == SQLITE_OK { 7598 var pList uintptr = tcl.XTcl_NewObj(tls) 7599 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 556)))) 7600 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 560)))) 7601 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 564)))) 7602 tcl.XTcl_SetObjResult(tls, interp, pList) 7603 } 7604 break 7605 7606 } 7607 case 8: 7608 { 7609 var iRowid sqlite3_int64 = (*struct { 7610 f func(*libc.TLS, uintptr) sqlite3_int64 7611 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowid})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7612 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iRowid)) 7613 break 7614 7615 } 7616 case 9: 7617 { 7618 *(*uintptr)(unsafe.Pointer(bp + 576)) = uintptr(0) 7619 *(*int32)(unsafe.Pointer(bp + 584)) = 0 7620 7621 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+568) != 0 { 7622 return TCL_ERROR 7623 } 7624 rc = (*struct { 7625 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7626 })(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) 7627 if rc == SQLITE_OK { 7628 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 576)), *(*int32)(unsafe.Pointer(bp + 584)))) 7629 } 7630 break 7631 7632 } 7633 case 10: 7634 { 7635 *(*int32)(unsafe.Pointer(bp + 592)) = 0 7636 7637 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+588) != 0 { 7638 return TCL_ERROR 7639 } 7640 rc = (*struct { 7641 f func(*libc.TLS, uintptr, int32, uintptr) int32 7642 })(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) 7643 if rc == SQLITE_OK { 7644 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 592)))) 7645 } 7646 break 7647 7648 } 7649 case 11: 7650 { 7651 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+596) != 0 { 7652 return TCL_ERROR 7653 } 7654 (*F5tFunction)(unsafe.Pointer(bp + 600)).Finterp = interp 7655 (*F5tFunction)(unsafe.Pointer(bp + 600)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7656 rc = (*struct { 7657 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7658 })(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 { 7659 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7660 }{xQueryPhraseCb}))) 7661 if rc == SQLITE_OK { 7662 tcl.XTcl_ResetResult(tls, interp) 7663 } 7664 break 7665 7666 } 7667 case 12: 7668 { 7669 var pData uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(F5tAuxData{}))) 7670 if pData == uintptr(0) { 7671 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, 0)) 7672 return TCL_ERROR 7673 } 7674 (*F5tAuxData)(unsafe.Pointer(pData)).FpObj = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 7675 (*Tcl_Obj)(unsafe.Pointer((*F5tAuxData)(unsafe.Pointer(pData)).FpObj)).FrefCount++ 7676 rc = (*struct { 7677 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7678 })(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}))) 7679 break 7680 7681 } 7682 case 13: 7683 { 7684 var pData uintptr 7685 7686 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+616) != 0 { 7687 return TCL_ERROR 7688 } 7689 pData = (*struct { 7690 f func(*libc.TLS, uintptr, int32) uintptr 7691 })(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))) 7692 if pData == uintptr(0) { 7693 tcl.XTcl_ResetResult(tls, interp) 7694 } else { 7695 tcl.XTcl_SetObjResult(tls, interp, (*F5tAuxData)(unsafe.Pointer(pData)).FpObj) 7696 if *(*int32)(unsafe.Pointer(bp + 616)) != 0 { 7697 xSetAuxdataDestructor(tls, pData) 7698 } 7699 } 7700 break 7701 7702 } 7703 7704 case 14: 7705 { 7706 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+620) != 0 { 7707 return TCL_ERROR 7708 } 7709 rc = (*struct { 7710 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7711 })(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)) 7712 break 7713 7714 } 7715 case 15: 7716 { 7717 var iVal int32 7718 7719 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+624) != 0 { 7720 return TCL_ERROR 7721 } 7722 iVal = int32((int64((*struct { 7723 f func(*libc.TLS, uintptr, int32) uintptr 7724 })(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) 7725 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iVal)) 7726 break 7727 7728 } 7729 7730 case 16: 7731 { 7732 var zColvar uintptr 7733 var zOffvar uintptr 7734 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 5*8)) 7735 7736 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+628) != 0 { 7737 return TCL_ERROR 7738 } 7739 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 7740 zOffvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 7741 7742 rc = (*struct { 7743 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 7744 })(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) 7745 if rc != SQLITE_OK { 7746 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 7747 return TCL_ERROR 7748 } 7749 for ; *(*int32)(unsafe.Pointer(bp + 648)) >= 0; (*struct { 7750 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 7751 })(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) { 7752 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 648))), 0) 7753 tcl.XTcl_SetVar2Ex(tls, interp, zOffvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 652))), 0) 7754 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 7755 if rc == TCL_CONTINUE { 7756 rc = TCL_OK 7757 } 7758 if rc != TCL_OK { 7759 if rc == TCL_BREAK { 7760 rc = TCL_OK 7761 } 7762 break 7763 } 7764 } 7765 7766 break 7767 7768 } 7769 7770 case 17: 7771 { 7772 var zColvar uintptr 7773 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 7774 7775 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+656) != 0 { 7776 return TCL_ERROR 7777 } 7778 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 7779 7780 rc = (*struct { 7781 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7782 })(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) 7783 if rc != SQLITE_OK { 7784 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 7785 return TCL_ERROR 7786 } 7787 for ; *(*int32)(unsafe.Pointer(bp + 680)) >= 0; (*struct { 7788 f func(*libc.TLS, uintptr, uintptr, uintptr) 7789 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNextColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+664, bp+680) { 7790 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 680))), 0) 7791 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 7792 if rc == TCL_CONTINUE { 7793 rc = TCL_OK 7794 } 7795 if rc != TCL_OK { 7796 if rc == TCL_BREAK { 7797 rc = TCL_OK 7798 } 7799 break 7800 } 7801 } 7802 7803 break 7804 7805 } 7806 7807 default: 7808 break 7809 } 7810 7811 if rc != SQLITE_OK { 7812 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 7813 return TCL_ERROR 7814 } 7815 7816 return TCL_OK 7817 } 7818 7819 type Sub = struct { 7820 FzName uintptr 7821 FnArg int32 7822 F__ccgo_pad1 [4]byte 7823 FzMsg uintptr 7824 } 7825 7826 func xF5tFunction(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 7827 bp := tls.Alloc(112) 7828 defer tls.Free(112) 7829 7830 var p uintptr = (*struct { 7831 f func(*libc.TLS, uintptr) uintptr 7832 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxUserData})).f(tls, pFts) 7833 var pEval uintptr 7834 var i int32 7835 var rc int32 7836 7837 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 7838 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 7839 7840 libc.Xsprintf(tls, bp+8, ts+2535, libc.VaList(bp, libc.PostIncInt64(&iCmd2, 1))) 7841 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 7842 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7843 }{xF5tApi})), bp+72, uintptr(0)) 7844 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7845 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7846 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 7847 7848 for i = 0; i < nVal; i++ { 7849 var pObj uintptr = uintptr(0) 7850 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))) { 7851 case SQLITE_TEXT: 7852 pObj = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), -1) 7853 break 7854 case SQLITE_BLOB: 7855 pObj = tcl.XTcl_NewByteArrayObj(tls, 7856 sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7857 break 7858 case SQLITE_INTEGER: 7859 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7860 break 7861 case SQLITE_FLOAT: 7862 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7863 break 7864 default: 7865 pObj = tcl.XTcl_NewObj(tls) 7866 break 7867 } 7868 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, pObj) 7869 } 7870 7871 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, TCL_GLOBAL_ONLY) 7872 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7873 var _objPtr uintptr = pEval 7874 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7875 tcl.XTclFreeObj(tls, _objPtr) 7876 } 7877 } 7878 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 7879 7880 if rc != TCL_OK { 7881 sqlite3.Xsqlite3_result_error(tls, pCtx, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp), -1) 7882 } else { 7883 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp) 7884 7885 var zType uintptr = func() uintptr { 7886 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 7887 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 7888 } 7889 return ts + 584 7890 }() 7891 var c int8 = *(*int8)(unsafe.Pointer(zType)) 7892 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 7893 var data uintptr = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+88) 7894 sqlite3.Xsqlite3_result_blob(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 7895 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 7896 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pVar, bp+88) 7897 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(bp + 88))) 7898 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 7899 tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+96) 7900 sqlite3.Xsqlite3_result_double(tls, pCtx, *(*float64)(unsafe.Pointer(bp + 96))) 7901 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 7902 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+104) 7903 sqlite3.Xsqlite3_result_int64(tls, pCtx, *(*Tcl_WideInt)(unsafe.Pointer(bp + 104))) 7904 } else { 7905 var data uintptr = tcl.XTcl_GetStringFromObj(tls, pVar, bp+88) 7906 sqlite3.Xsqlite3_result_text(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 7907 } 7908 } 7909 } 7910 7911 var iCmd2 sqlite3_int64 = int64(0) 7912 7913 func xF5tDestroy(tls *libc.TLS, pCtx uintptr) { 7914 var p uintptr = pCtx 7915 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7916 var _objPtr uintptr = (*F5tFunction)(unsafe.Pointer(p)).FpScript 7917 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7918 tcl.XTclFreeObj(tls, _objPtr) 7919 } 7920 } 7921 tcl.XTcl_Free(tls, p) 7922 } 7923 7924 func f5tCreateFunction(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7925 bp := tls.Alloc(40) 7926 defer tls.Free(40) 7927 7928 var zName uintptr 7929 var pScript uintptr 7930 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 7931 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 7932 var pCtx uintptr = uintptr(0) 7933 var rc int32 7934 7935 if objc != 4 { 7936 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 7937 return TCL_ERROR 7938 } 7939 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, bp+32) != 0 { 7940 return TCL_ERROR 7941 } 7942 7943 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7944 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7945 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tFunction{}))) 7946 (*F5tFunction)(unsafe.Pointer(pCtx)).Finterp = interp 7947 (*F5tFunction)(unsafe.Pointer(pCtx)).FpScript = pScript 7948 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 7949 7950 rc = (*struct { 7951 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 7952 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FxCreateFunction})).f(tls, 7953 *(*uintptr)(unsafe.Pointer(bp + 32)), zName, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 7954 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 7955 }{xF5tFunction})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{xF5tDestroy}))) 7956 if rc != SQLITE_OK { 7957 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 24))), 0)) 7958 return TCL_ERROR 7959 } 7960 7961 return TCL_OK 7962 } 7963 7964 type F5tTokenizeCtx1 = struct { 7965 FpRet uintptr 7966 FbSubst int32 7967 F__ccgo_pad1 [4]byte 7968 FzInput uintptr 7969 } 7970 7971 type F5tTokenizeCtx = F5tTokenizeCtx1 7972 7973 func xTokenizeCb2(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 7974 var p uintptr = pCtx 7975 if (*F5tTokenizeCtx)(unsafe.Pointer(p)).FbSubst != 0 { 7976 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7977 tcl.XTcl_ListObjAppendElement(tls, 7978 uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, (*F5tTokenizeCtx)(unsafe.Pointer(p)).FzInput+uintptr(iStart), iEnd-iStart)) 7979 } else { 7980 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7981 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iStart)) 7982 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iEnd)) 7983 } 7984 return SQLITE_OK 7985 } 7986 7987 func f5tTokenize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7988 bp := tls.Alloc(200) 7989 defer tls.Free(200) 7990 7991 var zText uintptr 7992 7993 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 7994 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 7995 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 7996 7997 var pRet uintptr = uintptr(0) 7998 7999 var rc int32 8000 8001 if objc != 4 && objc != 5 { 8002 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2596) 8003 return TCL_ERROR 8004 } 8005 if objc == 5 { 8006 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 8007 if libc.Xstrcmp(tls, ts+2618, zOpt) != 0 { 8008 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2625, zOpt, 0)) 8009 return TCL_ERROR 8010 } 8011 } 8012 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+96, bp+104) != 0 { 8013 return TCL_ERROR 8014 } 8015 if tcl.XTcl_SplitList(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))), bp+112, bp+120) != 0 { 8016 return TCL_ERROR 8017 } 8018 if *(*int32)(unsafe.Pointer(bp + 112)) == 0 { 8019 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2647, 0)) 8020 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8021 return TCL_ERROR 8022 } 8023 zText = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+128) 8024 8025 rc = (*struct { 8026 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 8027 })(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) 8028 if rc != SQLITE_OK { 8029 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2647, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 120)))), 0)) 8030 return TCL_ERROR 8031 } 8032 8033 rc = (*struct { 8034 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8035 })(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) 8036 if rc != SQLITE_OK { 8037 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+2667, 0)) 8038 return TCL_ERROR 8039 } 8040 8041 pRet = tcl.XTcl_NewObj(tls) 8042 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 8043 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FbSubst = libc.Bool32(objc == 5) 8044 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FpRet = pRet 8045 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FzInput = zText 8046 rc = (*struct { 8047 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8048 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxTokenize})).f(tls, 8049 *(*uintptr)(unsafe.Pointer(bp + 168)), bp+176, FTS5_TOKENIZE_DOCUMENT, zText, *(*int32)(unsafe.Pointer(bp + 128)), *(*uintptr)(unsafe.Pointer(&struct { 8050 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8051 }{xTokenizeCb2}))) 8052 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxDelete})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 8053 if rc != SQLITE_OK { 8054 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+80, ts+2696, 0)) 8055 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8056 var _objPtr uintptr = pRet 8057 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8058 tcl.XTclFreeObj(tls, _objPtr) 8059 } 8060 } 8061 return TCL_ERROR 8062 } 8063 8064 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8065 tcl.XTcl_SetObjResult(tls, interp, pRet) 8066 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 8067 var _objPtr uintptr = pRet 8068 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8069 tcl.XTclFreeObj(tls, _objPtr) 8070 } 8071 } 8072 return TCL_OK 8073 } 8074 8075 type F5tTokenizerContext1 = struct { 8076 FpCtx uintptr 8077 FxToken uintptr 8078 } 8079 8080 type F5tTokenizerContext = F5tTokenizerContext1 8081 type F5tTokenizerModule1 = struct { 8082 Finterp uintptr 8083 FpScript uintptr 8084 FpContext uintptr 8085 } 8086 8087 type F5tTokenizerModule = F5tTokenizerModule1 8088 type F5tTokenizerInstance1 = struct { 8089 Finterp uintptr 8090 FpScript uintptr 8091 FpContext uintptr 8092 } 8093 8094 type F5tTokenizerInstance = F5tTokenizerInstance1 8095 8096 func f5tTokenizerCreate(tls *libc.TLS, pCtx uintptr, azArg uintptr, nArg int32, ppOut uintptr) int32 { 8097 var pMod uintptr = pCtx 8098 var pEval uintptr 8099 var rc int32 = TCL_OK 8100 var i int32 8101 8102 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript) 8103 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8104 for i = 0; rc == TCL_OK && i < nArg; i++ { 8105 var pObj uintptr = tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)), -1) 8106 rc = tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, pObj) 8107 } 8108 8109 if rc == TCL_OK { 8110 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, TCL_GLOBAL_ONLY) 8111 } 8112 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8113 var _objPtr uintptr = pEval 8114 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8115 tcl.XTclFreeObj(tls, _objPtr) 8116 } 8117 } 8118 8119 if rc == TCL_OK { 8120 var pInst uintptr 8121 pInst = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerInstance{}))) 8122 libc.Xmemset(tls, pInst, 0, uint64(unsafe.Sizeof(F5tTokenizerInstance{}))) 8123 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp 8124 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript = tcl.XTcl_GetObjResult(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp) 8125 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext 8126 (*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript)).FrefCount++ 8127 *(*uintptr)(unsafe.Pointer(ppOut)) = pInst 8128 } 8129 8130 return rc 8131 } 8132 8133 func f5tTokenizerDelete(tls *libc.TLS, p uintptr) { 8134 var pInst uintptr = p 8135 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8136 var _objPtr uintptr = (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript 8137 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8138 tcl.XTclFreeObj(tls, _objPtr) 8139 } 8140 } 8141 tcl.XTcl_Free(tls, pInst) 8142 } 8143 8144 func f5tTokenizerTokenize(tls *libc.TLS, p uintptr, pCtx uintptr, flags int32, pText uintptr, nText int32, xToken uintptr) int32 { 8145 var pInst uintptr = p 8146 var pOldCtx uintptr 8147 var xOldToken uintptr 8148 var pEval uintptr 8149 var rc int32 8150 var zFlags uintptr 8151 8152 pOldCtx = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx 8153 xOldToken = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken 8154 8155 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pCtx 8156 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xToken 8157 8158 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript) 8159 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8160 switch flags { 8161 case FTS5_TOKENIZE_DOCUMENT: 8162 zFlags = ts + 2727 8163 break 8164 case FTS5_TOKENIZE_AUX: 8165 zFlags = ts + 2736 8166 break 8167 case FTS5_TOKENIZE_QUERY: 8168 zFlags = ts + 2740 8169 break 8170 case FTS5_TOKENIZE_PREFIX | FTS5_TOKENIZE_QUERY: 8171 zFlags = ts + 2746 8172 break 8173 default: 8174 zFlags = ts + 2758 8175 break 8176 } 8177 8178 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zFlags, -1)) 8179 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, pText, nText)) 8180 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, TCL_GLOBAL_ONLY) 8181 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8182 var _objPtr uintptr = pEval 8183 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8184 tcl.XTclFreeObj(tls, _objPtr) 8185 } 8186 } 8187 8188 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pOldCtx 8189 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xOldToken 8190 return rc 8191 } 8192 8193 func f5tTokenizerReturn(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8194 bp := tls.Alloc(32) 8195 defer tls.Free(32) 8196 8197 var p uintptr 8198 8199 var tflags int32 8200 var zToken uintptr 8201 var rc int32 8202 8203 var zArg uintptr 8204 p = clientData 8205 tflags = 0 8206 8207 if !(objc == 5) { 8208 goto __1 8209 } 8210 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 8211 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) { 8212 goto __3 8213 } 8214 tflags = tflags | FTS5_TOKEN_COLOCATED 8215 goto __4 8216 __3: 8217 goto usage 8218 __4: 8219 ; 8220 goto __2 8221 __1: 8222 if !(objc != 4) { 8223 goto __5 8224 } 8225 goto usage 8226 __5: 8227 ; 8228 __2: 8229 ; 8230 zToken = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+20) 8231 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+24) != 0 || 8232 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+28) != 0) { 8233 goto __6 8234 } 8235 return TCL_ERROR 8236 __6: 8237 ; 8238 if !((*F5tTokenizerContext)(unsafe.Pointer(p)).FxToken == uintptr(0)) { 8239 goto __7 8240 } 8241 tcl.XTcl_AppendResult(tls, interp, 8242 libc.VaList(bp, ts+2777, 0)) 8243 return TCL_ERROR 8244 __7: 8245 ; 8246 rc = (*struct { 8247 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8248 })(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))) 8249 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8250 if rc == SQLITE_OK { 8251 return TCL_OK 8252 } 8253 return TCL_ERROR 8254 8255 usage: 8256 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2835) 8257 return TCL_ERROR 8258 } 8259 8260 func f5tDelTokenizer(tls *libc.TLS, pCtx uintptr) { 8261 var pMod uintptr = pCtx 8262 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8263 var _objPtr uintptr = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript 8264 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8265 tcl.XTclFreeObj(tls, _objPtr) 8266 } 8267 } 8268 tcl.XTcl_Free(tls, pMod) 8269 } 8270 8271 func f5tCreateTokenizer(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 8272 bp := tls.Alloc(56) 8273 defer tls.Free(56) 8274 8275 var pContext uintptr = clientData 8276 8277 var zName uintptr 8278 var pScript uintptr 8279 8280 var pMod uintptr 8281 var rc int32 8282 8283 if objc != 4 { 8284 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8285 return TCL_ERROR 8286 } 8287 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, bp+24) != 0 { 8288 return TCL_ERROR 8289 } 8290 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 8291 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8292 8293 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxCreate = *(*uintptr)(unsafe.Pointer(&struct { 8294 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8295 }{f5tTokenizerCreate})) 8296 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxTokenize = *(*uintptr)(unsafe.Pointer(&struct { 8297 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8298 }{f5tTokenizerTokenize})) 8299 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxDelete = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tTokenizerDelete})) 8300 8301 pMod = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerModule{}))) 8302 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp = interp 8303 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript = pScript 8304 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext = pContext 8305 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8306 rc = (*struct { 8307 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr, uintptr) int32 8308 })(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}))) 8309 if rc != SQLITE_OK { 8310 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2863, 0)) 8311 return TCL_ERROR 8312 } 8313 8314 return TCL_OK 8315 } 8316 8317 func xF5tFree(tls *libc.TLS, clientData ClientData) { 8318 tcl.XTcl_Free(tls, clientData) 8319 } 8320 8321 func f5tMayBeCorrupt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8322 return TCL_OK 8323 } 8324 8325 func f5t_fts5HashKey(tls *libc.TLS, nSlot int32, p uintptr, n int32) uint32 { 8326 var i int32 8327 var h uint32 = uint32(13) 8328 for i = n - 1; i >= 0; i-- { 8329 h = h<<3 ^ h ^ uint32(*(*int8)(unsafe.Pointer(p + uintptr(i)))) 8330 } 8331 return h % uint32(nSlot) 8332 } 8333 8334 func f5tTokenHash(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8335 bp := tls.Alloc(8) 8336 defer tls.Free(8) 8337 8338 var z uintptr 8339 8340 var iVal uint32 8341 8342 if objc != 3 { 8343 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2900) 8344 return TCL_ERROR 8345 } 8346 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 8347 return TCL_ERROR 8348 } 8349 z = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 8350 8351 iVal = f5t_fts5HashKey(tls, *(*int32)(unsafe.Pointer(bp)), z, *(*int32)(unsafe.Pointer(bp + 4))) 8352 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(iVal))) 8353 return TCL_OK 8354 } 8355 8356 func f5tRegisterMatchinfo(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8357 bp := tls.Alloc(8) 8358 defer tls.Free(8) 8359 8360 var rc int32 8361 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8362 8363 if objc != 2 { 8364 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8365 return TCL_ERROR 8366 } 8367 if f5tDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 8368 return TCL_ERROR 8369 } 8370 8371 rc = sqlite3Fts5TestRegisterMatchinfo(tls, *(*uintptr)(unsafe.Pointer(bp))) 8372 if rc != SQLITE_OK { 8373 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8374 return TCL_ERROR 8375 } 8376 return TCL_OK 8377 } 8378 8379 func f5tRegisterTok(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8380 bp := tls.Alloc(16) 8381 defer tls.Free(16) 8382 8383 var rc int32 8384 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8385 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 8386 8387 if objc != 2 { 8388 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8389 return TCL_ERROR 8390 } 8391 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 8392 return TCL_ERROR 8393 } 8394 8395 rc = sqlite3Fts5TestRegisterTok(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 8396 if rc != SQLITE_OK { 8397 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8398 return TCL_ERROR 8399 } 8400 return TCL_OK 8401 } 8402 8403 func Fts5tcl_Init(tls *libc.TLS, interp uintptr) int32 { 8404 var i int32 8405 var pContext uintptr 8406 8407 pContext = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerContext{}))) 8408 libc.Xmemset(tls, pContext, 0, uint64(unsafe.Sizeof(F5tTokenizerContext{}))) 8409 8410 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd))/uint64(unsafe.Sizeof(struct { 8411 FzName uintptr 8412 FxProc uintptr 8413 FbTokenizeCtx int32 8414 F__ccgo_pad1 [4]byte 8415 }{})); i++ { 8416 var p uintptr = uintptr(unsafe.Pointer(&aCmd)) + uintptr(i)*24 8417 var pCtx uintptr = uintptr(0) 8418 if (*struct { 8419 FzName uintptr 8420 FxProc uintptr 8421 FbTokenizeCtx int32 8422 F__ccgo_pad1 [4]byte 8423 })(unsafe.Pointer(p)).FbTokenizeCtx != 0 { 8424 pCtx = pContext 8425 } 8426 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 8427 FzName uintptr 8428 FxProc uintptr 8429 FbTokenizeCtx int32 8430 F__ccgo_pad1 [4]byte 8431 })(unsafe.Pointer(p)).FzName, (*struct { 8432 FzName uintptr 8433 FxProc uintptr 8434 FbTokenizeCtx int32 8435 F__ccgo_pad1 [4]byte 8436 })(unsafe.Pointer(p)).FxProc, pCtx, func() uintptr { 8437 if i != 0 { 8438 return uintptr(0) 8439 } 8440 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{xF5tFree})) 8441 }()) 8442 } 8443 8444 return TCL_OK 8445 } 8446 8447 var aCmd = [8]struct { 8448 FzName uintptr 8449 FxProc uintptr 8450 FbTokenizeCtx int32 8451 F__ccgo_pad1 [4]byte 8452 }{ 8453 {FzName: ts + 2912, FxProc: 0, FbTokenizeCtx: 1}, 8454 {FzName: ts + 2942, FxProc: 0, FbTokenizeCtx: 1}, 8455 {FzName: ts + 2961, FxProc: 0}, 8456 {FzName: ts + 2983, FxProc: 0}, 8457 {FzName: ts + 3012, FxProc: 0}, 8458 {FzName: ts + 3040, FxProc: 0}, 8459 {FzName: ts + 3064, FxProc: 0}, 8460 {FzName: ts + 3096, FxProc: 0}, 8461 } 8462 8463 type Fts5MatchinfoCtx1 = struct { 8464 FnCol int32 8465 FnPhrase int32 8466 FzArg uintptr 8467 FnRet int32 8468 F__ccgo_pad1 [4]byte 8469 FaRet uintptr 8470 } 8471 8472 type Fts5MatchinfoCtx = Fts5MatchinfoCtx1 8473 8474 type u32 = uint32 8475 8476 func fts5_api_from_db(tls *libc.TLS, db uintptr, ppApi uintptr) int32 { 8477 bp := tls.Alloc(8) 8478 defer tls.Free(8) 8479 8480 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8481 var rc int32 8482 8483 *(*uintptr)(unsafe.Pointer(ppApi)) = uintptr(0) 8484 rc = sqlite3.Xsqlite3_prepare(tls, db, ts+2137, -1, bp, uintptr(0)) 8485 if rc == SQLITE_OK { 8486 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, ppApi, ts+2161, uintptr(0)) 8487 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) 8488 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 8489 } 8490 8491 return rc 8492 } 8493 8494 func fts5MatchinfoFlagsize(tls *libc.TLS, nCol int32, nPhrase int32, f int8) int32 { 8495 var ret int32 = -1 8496 switch int32(f) { 8497 case 'p': 8498 ret = 1 8499 break 8500 case 'c': 8501 ret = 1 8502 break 8503 case 'x': 8504 ret = 3 * nCol * nPhrase 8505 break 8506 case 'y': 8507 ret = nCol * nPhrase 8508 break 8509 case 'b': 8510 ret = (nCol + 31) / 32 * nPhrase 8511 break 8512 case 'n': 8513 ret = 1 8514 break 8515 case 'a': 8516 ret = nCol 8517 break 8518 case 'l': 8519 ret = nCol 8520 break 8521 case 's': 8522 ret = nCol 8523 break 8524 } 8525 return ret 8526 } 8527 8528 func fts5MatchinfoIter(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, x uintptr) int32 { 8529 var i int32 8530 var n int32 = 0 8531 var rc int32 = SQLITE_OK 8532 var f int8 8533 for i = 0; libc.AssignInt8(&f, *(*int8)(unsafe.Pointer((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg + uintptr(i)))) != 0; i++ { 8534 rc = (*struct { 8535 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8536 })(unsafe.Pointer(&struct{ uintptr }{x})).f(tls, pApi, pFts, p, f, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet+uintptr(n)*4) 8537 if rc != SQLITE_OK { 8538 break 8539 } 8540 n = n + fts5MatchinfoFlagsize(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase, f) 8541 } 8542 return rc 8543 } 8544 8545 func fts5MatchinfoXCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pUserData uintptr) int32 { 8546 bp := tls.Alloc(24) 8547 defer tls.Free(24) 8548 8549 var aOut uintptr = pUserData 8550 var iPrev int32 = -1 8551 8552 for (*struct { 8553 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8554 })(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 { 8555 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8556 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp, bp+16, bp+20) { 8557 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+1)*4))++ 8558 if *(*int32)(unsafe.Pointer(bp + 16)) != iPrev { 8559 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+2)*4))++ 8560 } 8561 iPrev = *(*int32)(unsafe.Pointer(bp + 16)) 8562 } 8563 8564 return SQLITE_OK 8565 } 8566 8567 func fts5MatchinfoGlobalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 8568 bp := tls.Alloc(24) 8569 defer tls.Free(24) 8570 8571 var rc int32 = SQLITE_OK 8572 switch int32(f) { 8573 case 'p': 8574 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase) 8575 break 8576 8577 case 'c': 8578 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol) 8579 break 8580 8581 case 'x': 8582 { 8583 var i int32 8584 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase && rc == SQLITE_OK; i++ { 8585 var pPtr uintptr = aOut + uintptr(i*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*3)*4 8586 rc = (*struct { 8587 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8588 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxQueryPhrase})).f(tls, pFts, i, pPtr, *(*uintptr)(unsafe.Pointer(&struct { 8589 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8590 }{fts5MatchinfoXCb}))) 8591 } 8592 break 8593 8594 } 8595 8596 case 'n': 8597 { 8598 rc = (*struct { 8599 f func(*libc.TLS, uintptr, uintptr) int32 8600 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp) 8601 *(*u32)(unsafe.Pointer(aOut)) = u32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 8602 break 8603 8604 } 8605 8606 case 'a': 8607 { 8608 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = int64(0) 8609 rc = (*struct { 8610 f func(*libc.TLS, uintptr, uintptr) int32 8611 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp+8) 8612 if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 8613 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 8614 } else { 8615 var i int32 8616 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 8617 rc = (*struct { 8618 f func(*libc.TLS, uintptr, int32, uintptr) int32 8619 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnTotalSize})).f(tls, pFts, i, bp+16) 8620 if rc == SQLITE_OK { 8621 *(*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)))) 8622 } 8623 } 8624 } 8625 break 8626 8627 } 8628 8629 } 8630 return rc 8631 } 8632 8633 func fts5MatchinfoLocalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 8634 bp := tls.Alloc(80) 8635 defer tls.Free(80) 8636 8637 var i int32 8638 var rc int32 = SQLITE_OK 8639 8640 switch int32(f) { 8641 case 'b': 8642 { 8643 var iPhrase int32 8644 var nInt int32 = ((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol + 31) / 32 * (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase 8645 for i = 0; i < nInt; i++ { 8646 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(0) 8647 } 8648 8649 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 8650 for (*struct { 8651 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8652 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirstColumn})).f(tls, pFts, iPhrase, bp, bp+16); *(*int32)(unsafe.Pointer(bp + 16)) >= 0; (*struct { 8653 f func(*libc.TLS, uintptr, uintptr, uintptr) 8654 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNextColumn})).f(tls, pFts, bp, bp+16) { 8655 *(*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) 8656 } 8657 } 8658 8659 break 8660 8661 } 8662 8663 case 'x': 8664 fallthrough 8665 case 'y': 8666 { 8667 var nMul int32 = func() int32 { 8668 if int32(f) == 'x' { 8669 return 3 8670 } 8671 return 1 8672 }() 8673 var iPhrase int32 8674 8675 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; i++ { 8676 *(*u32)(unsafe.Pointer(aOut + uintptr(i*nMul)*4)) = u32(0) 8677 } 8678 8679 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 8680 for (*struct { 8681 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8682 })(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 { 8683 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8684 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp+24, bp+40, bp+44) { 8685 *(*u32)(unsafe.Pointer(aOut + uintptr(nMul*(*(*int32)(unsafe.Pointer(bp + 40))+iPhrase*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol))*4))++ 8686 } 8687 } 8688 8689 break 8690 8691 } 8692 8693 case 'l': 8694 { 8695 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 8696 rc = (*struct { 8697 f func(*libc.TLS, uintptr, int32, uintptr) int32 8698 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnSize})).f(tls, pFts, i, bp+48) 8699 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 48))) 8700 } 8701 break 8702 8703 } 8704 8705 case 's': 8706 { 8707 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 8708 8709 rc = (*struct { 8710 f func(*libc.TLS, uintptr, uintptr) int32 8711 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInstCount})).f(tls, pFts, bp+52) 8712 for i = 0; rc == SQLITE_OK && i < *(*int32)(unsafe.Pointer(bp + 52)); i++ { 8713 *(*int32)(unsafe.Pointer(bp + 60)) = 0 8714 var iNextPhrase int32 8715 var iNextOff int32 8716 var nSeq u32 = u32(1) 8717 var j int32 8718 8719 rc = (*struct { 8720 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8721 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, i, bp+56, bp+60, bp+64) 8722 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 56)) + 1 8723 iNextOff = *(*int32)(unsafe.Pointer(bp + 64)) + (*struct { 8724 f func(*libc.TLS, uintptr, int32) int32 8725 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, 0) 8726 for j = i + 1; rc == SQLITE_OK && j < *(*int32)(unsafe.Pointer(bp + 52)); j++ { 8727 rc = (*struct { 8728 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8729 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, j, bp+68, bp+72, bp+76) 8730 if *(*int32)(unsafe.Pointer(bp + 72)) != *(*int32)(unsafe.Pointer(bp + 60)) || *(*int32)(unsafe.Pointer(bp + 76)) > iNextOff { 8731 break 8732 } 8733 if *(*int32)(unsafe.Pointer(bp + 68)) == iNextPhrase && *(*int32)(unsafe.Pointer(bp + 76)) == iNextOff { 8734 nSeq++ 8735 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 68)) + 1 8736 iNextOff = *(*int32)(unsafe.Pointer(bp + 76)) + (*struct { 8737 f func(*libc.TLS, uintptr, int32) int32 8738 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, *(*int32)(unsafe.Pointer(bp + 68))) 8739 } 8740 } 8741 8742 if nSeq > *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) { 8743 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) = nSeq 8744 } 8745 } 8746 8747 break 8748 8749 } 8750 } 8751 return rc 8752 } 8753 8754 func fts5MatchinfoNew(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, zArg uintptr) uintptr { 8755 bp := tls.Alloc(8) 8756 defer tls.Free(8) 8757 8758 var p uintptr 8759 var nCol int32 8760 var nPhrase int32 8761 var i int32 8762 var nInt int32 8763 var nByte sqlite3_int64 8764 var rc int32 8765 8766 nCol = (*struct { 8767 f func(*libc.TLS, uintptr) int32 8768 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnCount})).f(tls, pFts) 8769 nPhrase = (*struct { 8770 f func(*libc.TLS, uintptr) int32 8771 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseCount})).f(tls, pFts) 8772 8773 nInt = 0 8774 for i = 0; *(*int8)(unsafe.Pointer(zArg + uintptr(i))) != 0; i++ { 8775 var n int32 = fts5MatchinfoFlagsize(tls, nCol, nPhrase, *(*int8)(unsafe.Pointer(zArg + uintptr(i)))) 8776 if n < 0 { 8777 var zErr uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+3131, libc.VaList(bp, int32(*(*int8)(unsafe.Pointer(zArg + uintptr(i)))))) 8778 sqlite3.Xsqlite3_result_error(tls, pCtx, zErr, -1) 8779 sqlite3.Xsqlite3_free(tls, zErr) 8780 return uintptr(0) 8781 } 8782 nInt = nInt + n 8783 } 8784 8785 nByte = sqlite3_int64(uint64(unsafe.Sizeof(Fts5MatchinfoCtx{})) + 8786 uint64(unsafe.Sizeof(u32(0)))*uint64(nInt) + 8787 uint64(i+1)) 8788 p = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 8789 if p == uintptr(0) { 8790 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 8791 return uintptr(0) 8792 } 8793 libc.Xmemset(tls, p, 0, uint64(nByte)) 8794 8795 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol = nCol 8796 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase = nPhrase 8797 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet = p + 1*32 8798 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet = nInt 8799 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg = (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet + uintptr(nInt)*4 8800 libc.Xmemcpy(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg, zArg, uint64(i)) 8801 8802 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 8803 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8804 }{fts5MatchinfoGlobalCb}))) 8805 if rc != SQLITE_OK { 8806 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 8807 sqlite3.Xsqlite3_free(tls, p) 8808 p = uintptr(0) 8809 } 8810 8811 return p 8812 } 8813 8814 func fts5MatchinfoFunc(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 8815 var zArg uintptr 8816 var p uintptr 8817 var rc int32 = SQLITE_OK 8818 8819 if nVal > 0 { 8820 zArg = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 8821 } else { 8822 zArg = ts + 3163 8823 } 8824 8825 p = (*struct { 8826 f func(*libc.TLS, uintptr, int32) uintptr 8827 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxGetAuxdata})).f(tls, pFts, 0) 8828 if p == uintptr(0) || sqlite3.Xsqlite3_stricmp(tls, zArg, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg) != 0 { 8829 p = fts5MatchinfoNew(tls, pApi, pFts, pCtx, zArg) 8830 if p == uintptr(0) { 8831 rc = SQLITE_NOMEM 8832 } else { 8833 rc = (*struct { 8834 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8835 })(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}))) 8836 } 8837 } 8838 8839 if rc == SQLITE_OK { 8840 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 8841 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8842 }{fts5MatchinfoLocalCb}))) 8843 } 8844 if rc != SQLITE_OK { 8845 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 8846 } else { 8847 var nByte int32 = int32(uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet) * uint64(unsafe.Sizeof(u32(0)))) 8848 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet, nByte, libc.UintptrFromInt32(-1)) 8849 } 8850 } 8851 8852 func sqlite3Fts5TestRegisterMatchinfo(tls *libc.TLS, db uintptr) int32 { 8853 bp := tls.Alloc(8) 8854 defer tls.Free(8) 8855 8856 var rc int32 8857 8858 rc = fts5_api_from_db(tls, db, bp) 8859 if rc != SQLITE_OK { 8860 return rc 8861 } 8862 8863 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) || (*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FiVersion < 2 { 8864 return SQLITE_ERROR 8865 } 8866 8867 rc = (*struct { 8868 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 8869 })(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 { 8870 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 8871 }{fts5MatchinfoFunc})), uintptr(0)) 8872 8873 return rc 8874 } 8875 8876 type Fts5tokTable1 = struct { 8877 Fbase sqlite3_vtab 8878 Ftok fts5_tokenizer 8879 FpTok uintptr 8880 } 8881 8882 type Fts5tokTable = Fts5tokTable1 8883 type Fts5tokCursor1 = struct { 8884 Fbase sqlite3_vtab_cursor 8885 FiRowid int32 8886 F__ccgo_pad1 [4]byte 8887 FzInput uintptr 8888 FnRow int32 8889 F__ccgo_pad2 [4]byte 8890 FaRow uintptr 8891 } 8892 8893 type Fts5tokCursor = Fts5tokCursor1 8894 type Fts5tokRow1 = struct { 8895 FzToken uintptr 8896 FiStart int32 8897 FiEnd int32 8898 FiPos int32 8899 F__ccgo_pad1 [4]byte 8900 } 8901 8902 type Fts5tokRow = Fts5tokRow1 8903 8904 func fts5tokDequote(tls *libc.TLS, z uintptr) { 8905 var q int8 = *(*int8)(unsafe.Pointer(z)) 8906 8907 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 8908 var iIn int32 = 1 8909 var iOut int32 = 0 8910 if int32(q) == '[' { 8911 q = int8(']') 8912 } 8913 8914 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 8915 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 8916 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 8917 iIn++ 8918 break 8919 } else { 8920 iIn = iIn + 2 8921 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 8922 } 8923 } else { 8924 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 8925 } 8926 } 8927 8928 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 8929 } 8930 } 8931 8932 func fts5tokDequoteArray(tls *libc.TLS, argc int32, argv uintptr, pazDequote uintptr) int32 { 8933 var rc int32 = SQLITE_OK 8934 if argc == 0 { 8935 *(*uintptr)(unsafe.Pointer(pazDequote)) = uintptr(0) 8936 } else { 8937 var i int32 8938 var nByte int32 = 0 8939 var azDequote uintptr 8940 8941 for i = 0; i < argc; i++ { 8942 nByte = nByte + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))+uint64(1)) 8943 } 8944 8945 *(*uintptr)(unsafe.Pointer(pazDequote)) = libc.AssignUintptr(&azDequote, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(argc)+uint64(nByte))) 8946 if azDequote == uintptr(0) { 8947 rc = SQLITE_NOMEM 8948 } else { 8949 var pSpace uintptr = azDequote + uintptr(argc)*8 8950 for i = 0; i < argc; i++ { 8951 var n int32 = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 8952 *(*uintptr)(unsafe.Pointer(azDequote + uintptr(i)*8)) = pSpace 8953 libc.Xmemcpy(tls, pSpace, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), uint64(n+1)) 8954 fts5tokDequote(tls, pSpace) 8955 pSpace += uintptr(n + 1) 8956 } 8957 } 8958 } 8959 8960 return rc 8961 } 8962 8963 func fts5tokConnectMethod(tls *libc.TLS, db uintptr, pCtx uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 8964 bp := tls.Alloc(16) 8965 defer tls.Free(16) 8966 8967 var pApi uintptr = pCtx 8968 var pTab uintptr = uintptr(0) 8969 var rc int32 8970 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8971 var nDequote int32 = 0 8972 8973 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 8974 ts+3177) 8975 8976 if rc == SQLITE_OK { 8977 nDequote = argc - 3 8978 rc = fts5tokDequoteArray(tls, nDequote, argv+3*8, bp) 8979 } 8980 8981 if rc == SQLITE_OK { 8982 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokTable{}))) 8983 if pTab == uintptr(0) { 8984 rc = SQLITE_NOMEM 8985 } else { 8986 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(Fts5tokTable{}))) 8987 } 8988 } 8989 8990 if rc == SQLITE_OK { 8991 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 8992 var zModule uintptr = uintptr(0) 8993 if nDequote > 0 { 8994 zModule = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) 8995 } 8996 8997 rc = (*struct { 8998 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 8999 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(pApi)).FxFindTokenizer})).f(tls, pApi, zModule, bp+8, pTab+24) 9000 if rc == SQLITE_OK { 9001 var azArg uintptr = func() uintptr { 9002 if nDequote > 1 { 9003 return *(*uintptr)(unsafe.Pointer(bp)) + 1*8 9004 } 9005 return uintptr(0) 9006 }() 9007 var nArg int32 9008 if nDequote > 0 { 9009 nArg = nDequote - 1 9010 } else { 9011 nArg = 0 9012 } 9013 rc = (*struct { 9014 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9015 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), azArg, nArg, pTab+48) 9016 } 9017 } 9018 9019 if rc != SQLITE_OK { 9020 sqlite3.Xsqlite3_free(tls, pTab) 9021 pTab = uintptr(0) 9022 } 9023 9024 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 9025 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 9026 return rc 9027 } 9028 9029 func fts5tokDisconnectMethod(tls *libc.TLS, pVtab uintptr) int32 { 9030 var pTab uintptr = pVtab 9031 if (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok != 0 { 9032 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxDelete})).f(tls, (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok) 9033 } 9034 sqlite3.Xsqlite3_free(tls, pTab) 9035 return SQLITE_OK 9036 } 9037 9038 func fts5tokBestIndexMethod(tls *libc.TLS, pVTab uintptr, pInfo uintptr) int32 { 9039 var i int32 9040 9041 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FnConstraint; i++ { 9042 if (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 && 9043 (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).FiColumn == 0 && 9044 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 9045 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 1 9046 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 9047 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 9048 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FestimatedCost = float64(1) 9049 return SQLITE_OK 9050 } 9051 } 9052 9053 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 0 9054 9055 return SQLITE_OK 9056 } 9057 9058 func fts5tokOpenMethod(tls *libc.TLS, pVTab uintptr, ppCsr uintptr) int32 { 9059 var pCsr uintptr 9060 9061 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokCursor{}))) 9062 if pCsr == uintptr(0) { 9063 return SQLITE_NOMEM 9064 } 9065 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(Fts5tokCursor{}))) 9066 9067 *(*uintptr)(unsafe.Pointer(ppCsr)) = pCsr 9068 return SQLITE_OK 9069 } 9070 9071 func fts5tokResetCursor(tls *libc.TLS, pCsr uintptr) { 9072 var i int32 9073 for i = 0; i < (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow; i++ { 9074 sqlite3.Xsqlite3_free(tls, (*Fts5tokRow)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow+uintptr(i)*24)).FzToken) 9075 } 9076 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput) 9077 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow) 9078 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = uintptr(0) 9079 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = uintptr(0) 9080 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow = 0 9081 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid = 0 9082 } 9083 9084 func fts5tokCloseMethod(tls *libc.TLS, pCursor uintptr) int32 { 9085 var pCsr uintptr = pCursor 9086 fts5tokResetCursor(tls, pCsr) 9087 sqlite3.Xsqlite3_free(tls, pCsr) 9088 return SQLITE_OK 9089 } 9090 9091 func fts5tokNextMethod(tls *libc.TLS, pCursor uintptr) int32 { 9092 var pCsr uintptr = pCursor 9093 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid++ 9094 return SQLITE_OK 9095 } 9096 9097 func fts5tokCb(tls *libc.TLS, pCtx uintptr, tflags int32, pToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 9098 var pCsr uintptr = pCtx 9099 var pRow uintptr 9100 9101 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow&((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow-1) == 0 { 9102 var nNew int32 9103 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9104 nNew = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow * 2 9105 } else { 9106 nNew = 32 9107 } 9108 var aNew uintptr 9109 aNew = sqlite3.Xsqlite3_realloc64(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow, uint64(nNew)*uint64(unsafe.Sizeof(Fts5tokRow{}))) 9110 if aNew == uintptr(0) { 9111 return SQLITE_NOMEM 9112 } 9113 libc.Xmemset(tls, aNew+uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24, 0, uint64(unsafe.Sizeof(Fts5tokRow{}))*uint64(nNew-(*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)) 9114 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = aNew 9115 } 9116 9117 pRow = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24 9118 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart = iStart 9119 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd = iEnd 9120 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9121 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos = (*Fts5tokRow)(unsafe.Pointer(pRow+libc.UintptrFromInt32(-1)*24)).FiPos + func() int32 { 9122 if tflags&FTS5_TOKEN_COLOCATED != 0 { 9123 return 0 9124 } 9125 return 1 9126 }() 9127 } 9128 (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken = sqlite3.Xsqlite3_malloc(tls, nToken+1) 9129 if (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken == uintptr(0) { 9130 return SQLITE_NOMEM 9131 } 9132 libc.Xmemcpy(tls, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, pToken, uint64(nToken)) 9133 *(*int8)(unsafe.Pointer((*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken + uintptr(nToken))) = int8(0) 9134 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow++ 9135 9136 return SQLITE_OK 9137 } 9138 9139 func fts5tokFilterMethod(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, nVal int32, apVal uintptr) int32 { 9140 var rc int32 = SQLITE_ERROR 9141 var pCsr uintptr = pCursor 9142 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 9143 9144 fts5tokResetCursor(tls, pCsr) 9145 if idxNum == 1 { 9146 var zByte uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9147 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9148 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = sqlite3.Xsqlite3_malloc(tls, nByte+1) 9149 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput == uintptr(0) { 9150 rc = SQLITE_NOMEM 9151 } else { 9152 if nByte > 0 { 9153 libc.Xmemcpy(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, zByte, uint64(nByte)) 9154 } 9155 *(*int8)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput + uintptr(nByte))) = int8(0) 9156 rc = (*struct { 9157 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 9158 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxTokenize})).f(tls, 9159 (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok, pCsr, 0, zByte, nByte, *(*uintptr)(unsafe.Pointer(&struct { 9160 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 9161 }{fts5tokCb}))) 9162 } 9163 } 9164 9165 if rc != SQLITE_OK { 9166 return rc 9167 } 9168 return fts5tokNextMethod(tls, pCursor) 9169 } 9170 9171 func fts5tokEofMethod(tls *libc.TLS, pCursor uintptr) int32 { 9172 var pCsr uintptr = pCursor 9173 return libc.Bool32((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid > (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow) 9174 } 9175 9176 func fts5tokColumnMethod(tls *libc.TLS, pCursor uintptr, pCtx uintptr, iCol int32) int32 { 9177 var pCsr uintptr = pCursor 9178 var pRow uintptr = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid-1)*24 9179 9180 switch iCol { 9181 case 0: 9182 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, -1, libc.UintptrFromInt32(-1)) 9183 break 9184 case 1: 9185 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, -1, libc.UintptrFromInt32(-1)) 9186 break 9187 case 2: 9188 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart) 9189 break 9190 case 3: 9191 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd) 9192 break 9193 default: 9194 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos) 9195 break 9196 } 9197 return SQLITE_OK 9198 } 9199 9200 func fts5tokRowidMethod(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 9201 var pCsr uintptr = pCursor 9202 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3_int64((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid) 9203 return SQLITE_OK 9204 } 9205 9206 func sqlite3Fts5TestRegisterTok(tls *libc.TLS, db uintptr, pApi uintptr) int32 { 9207 var rc int32 9208 9209 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3235, uintptr(unsafe.Pointer(&fts5tok_module)), pApi) 9210 return rc 9211 } 9212 9213 var fts5tok_module = sqlite3_module{ 9214 FxCreate: 0, 9215 FxConnect: 0, 9216 FxBestIndex: 0, 9217 FxDisconnect: 0, 9218 FxDestroy: 0, 9219 FxOpen: 0, 9220 FxClose: 0, 9221 FxFilter: 0, 9222 FxNext: 0, 9223 FxEof: 0, 9224 FxColumn: 0, 9225 FxRowid: 0, 9226 } 9227 9228 type sqlite3_api_routines = sqlite3_api_routines1 9229 9230 type sqlite3_loadext_entry = uintptr 9231 9232 type ApndVfs = sqlite3_vfs1 9233 type ApndFile1 = struct { 9234 Fbase sqlite3_file 9235 FiPgOne sqlite3_int64 9236 FiMark sqlite3_int64 9237 } 9238 9239 type ApndFile = ApndFile1 9240 9241 var apnd_vfs = sqlite3_vfs{ 9242 FiVersion: 3, 9243 FmxPathname: 1024, 9244 FzName: ts + 3248, 9245 FxOpen: 0, 9246 FxDelete: 0, 9247 FxAccess: 0, 9248 FxFullPathname: 0, 9249 FxDlOpen: 0, 9250 FxDlError: 0, 9251 FxDlSym: 0, 9252 FxDlClose: 0, 9253 FxRandomness: 0, 9254 FxSleep: 0, 9255 FxCurrentTime: 0, 9256 FxGetLastError: 0, 9257 FxCurrentTimeInt64: 0, 9258 FxSetSystemCall: 0, 9259 FxGetSystemCall: 0, 9260 FxNextSystemCall: 0, 9261 } 9262 9263 var apnd_io_methods = sqlite3_io_methods{ 9264 FiVersion: 3, 9265 FxClose: 0, 9266 FxRead: 0, 9267 FxWrite: 0, 9268 FxTruncate: 0, 9269 FxSync: 0, 9270 FxFileSize: 0, 9271 FxLock: 0, 9272 FxUnlock: 0, 9273 FxCheckReservedLock: 0, 9274 FxFileControl: 0, 9275 FxSectorSize: 0, 9276 FxDeviceCharacteristics: 0, 9277 FxShmMap: 0, 9278 FxShmLock: 0, 9279 FxShmBarrier: 0, 9280 FxShmUnmap: 0, 9281 FxFetch: 0, 9282 FxUnfetch: 0, 9283 } 9284 9285 func apndClose(tls *libc.TLS, pFile uintptr) int32 { 9286 pFile = pFile + uintptr(1)*24 9287 return (*struct { 9288 f func(*libc.TLS, uintptr) int32 9289 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 9290 } 9291 9292 func apndRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9293 var paf uintptr = pFile 9294 pFile = pFile + uintptr(1)*24 9295 return (*struct { 9296 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9297 })(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) 9298 } 9299 9300 func apndWriteMark(tls *libc.TLS, paf uintptr, pFile uintptr, iWriteEnd sqlite_int64) int32 { 9301 bp := tls.Alloc(25) 9302 defer tls.Free(25) 9303 9304 var iPgOne sqlite_int64 = (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9305 9306 var i int32 = APND_MARK_FOS_SZ 9307 var rc int32 9308 9309 libc.Xmemcpy(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) 9310 for libc.PreDecInt32(&i, 1) >= 0 { 9311 *(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))) = uint8(iPgOne & int64(0xff)) 9312 iPgOne >>= 8 9313 } 9314 iWriteEnd = iWriteEnd + (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9315 if SQLITE_OK == libc.AssignInt32(&rc, (*struct { 9316 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9317 })(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)) { 9318 (*ApndFile)(unsafe.Pointer(paf)).FiMark = iWriteEnd 9319 } 9320 return rc 9321 } 9322 9323 func apndWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9324 var paf uintptr = pFile 9325 var iWriteEnd sqlite_int64 = iOfst + sqlite_int64(iAmt) 9326 if iWriteEnd >= int64(0x40000000) { 9327 return SQLITE_FULL 9328 } 9329 pFile = pFile + uintptr(1)*24 9330 9331 if (*ApndFile)(unsafe.Pointer(paf)).FiMark < int64(0) || (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iWriteEnd > (*ApndFile)(unsafe.Pointer(paf)).FiMark { 9332 var rc int32 = apndWriteMark(tls, paf, pFile, iWriteEnd) 9333 if SQLITE_OK != rc { 9334 return rc 9335 } 9336 } 9337 return (*struct { 9338 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9339 })(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) 9340 } 9341 9342 func apndTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 9343 var paf uintptr = pFile 9344 pFile = pFile + uintptr(1)*24 9345 9346 if SQLITE_OK != apndWriteMark(tls, paf, pFile, size) { 9347 return SQLITE_IOERR 9348 } 9349 9350 return (*struct { 9351 f func(*libc.TLS, uintptr, sqlite3_int64) int32 9352 })(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)) 9353 } 9354 9355 func apndSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 9356 pFile = pFile + uintptr(1)*24 9357 return (*struct { 9358 f func(*libc.TLS, uintptr, int32) int32 9359 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 9360 } 9361 9362 func apndFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 9363 var paf uintptr = pFile 9364 *(*sqlite_int64)(unsafe.Pointer(pSize)) = func() int64 { 9365 if (*ApndFile)(unsafe.Pointer(paf)).FiMark >= int64(0) { 9366 return (*ApndFile)(unsafe.Pointer(paf)).FiMark - (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9367 } 9368 return int64(0) 9369 }() 9370 return SQLITE_OK 9371 } 9372 9373 func apndLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9374 pFile = pFile + uintptr(1)*24 9375 return (*struct { 9376 f func(*libc.TLS, uintptr, int32) int32 9377 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 9378 } 9379 9380 func apndUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9381 pFile = pFile + uintptr(1)*24 9382 return (*struct { 9383 f func(*libc.TLS, uintptr, int32) int32 9384 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 9385 } 9386 9387 func apndCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 9388 pFile = pFile + uintptr(1)*24 9389 return (*struct { 9390 f func(*libc.TLS, uintptr, uintptr) int32 9391 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 9392 } 9393 9394 func apndFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 9395 bp := tls.Alloc(16) 9396 defer tls.Free(16) 9397 9398 var paf uintptr = pFile 9399 var rc int32 9400 pFile = pFile + uintptr(1)*24 9401 if op == SQLITE_FCNTL_SIZE_HINT { 9402 *(*sqlite3_int64)(unsafe.Pointer(pArg)) += (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9403 } 9404 rc = (*struct { 9405 f func(*libc.TLS, uintptr, int32, uintptr) int32 9406 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 9407 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 9408 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+3274, libc.VaList(bp, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne, *(*uintptr)(unsafe.Pointer(pArg)))) 9409 } 9410 return rc 9411 } 9412 9413 func apndSectorSize(tls *libc.TLS, pFile uintptr) int32 { 9414 pFile = pFile + uintptr(1)*24 9415 return (*struct { 9416 f func(*libc.TLS, uintptr) int32 9417 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 9418 } 9419 9420 func apndDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 9421 pFile = pFile + uintptr(1)*24 9422 return (*struct { 9423 f func(*libc.TLS, uintptr) int32 9424 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 9425 } 9426 9427 func apndShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 9428 pFile = pFile + uintptr(1)*24 9429 return (*struct { 9430 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 9431 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 9432 } 9433 9434 func apndShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 9435 pFile = pFile + uintptr(1)*24 9436 return (*struct { 9437 f func(*libc.TLS, uintptr, int32, int32, int32) int32 9438 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 9439 } 9440 9441 func apndShmBarrier(tls *libc.TLS, pFile uintptr) { 9442 pFile = pFile + uintptr(1)*24 9443 (*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) 9444 } 9445 9446 func apndShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 9447 pFile = pFile + uintptr(1)*24 9448 return (*struct { 9449 f func(*libc.TLS, uintptr, int32) int32 9450 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 9451 } 9452 9453 func apndFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 9454 var p uintptr = pFile 9455 if (*ApndFile)(unsafe.Pointer(p)).FiMark < int64(0) || iOfst+sqlite3_int64(iAmt) > (*ApndFile)(unsafe.Pointer(p)).FiMark { 9456 return SQLITE_IOERR 9457 } 9458 pFile = pFile + uintptr(1)*24 9459 return (*struct { 9460 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 9461 })(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) 9462 } 9463 9464 func apndUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 9465 var p uintptr = pFile 9466 pFile = pFile + uintptr(1)*24 9467 return (*struct { 9468 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 9469 })(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) 9470 } 9471 9472 func apndReadMark(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) sqlite3_int64 { 9473 bp := tls.Alloc(25) 9474 defer tls.Free(25) 9475 9476 var rc int32 9477 var i int32 9478 var iMark sqlite3_int64 9479 var msbs int32 = 8 * (APND_MARK_FOS_SZ - 1) 9480 9481 if int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) != sz&int64(0x1ff) { 9482 return int64(-1) 9483 } 9484 rc = (*struct { 9485 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9486 })(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)) 9487 if rc != 0 { 9488 return int64(-1) 9489 } 9490 if libc.Xmemcmp(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) != 0 { 9491 return int64(-1) 9492 } 9493 iMark = sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(bp + 17)))&0x7f) << msbs 9494 for i = 1; i < 8; i++ { 9495 msbs = msbs - 8 9496 iMark = iMark | sqlite3_int64(*(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))))<<msbs 9497 } 9498 if iMark > sz-int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)-int64(512) { 9499 return int64(-1) 9500 } 9501 if iMark&int64(0x1ff) != 0 { 9502 return int64(-1) 9503 } 9504 return iMark 9505 } 9506 9507 var apvfsSqliteHdr = *(*[16]int8)(unsafe.Pointer(ts + 3288)) 9508 9509 func apndIsAppendvfsDatabase(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9510 bp := tls.Alloc(16) 9511 defer tls.Free(16) 9512 9513 var rc int32 9514 9515 var iMark sqlite3_int64 = apndReadMark(tls, sz, pFile) 9516 if iMark >= int64(0) { 9517 rc = (*struct { 9518 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9519 })(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) 9520 if SQLITE_OK == rc && 9521 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]int8{}))) == 0 && 9522 sz&int64(0x1ff) == int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) && 9523 sz >= int64(512+(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) { 9524 return 1 9525 } 9526 } 9527 return 0 9528 } 9529 9530 func apndIsOrdinaryDatabaseFile(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9531 bp := tls.Alloc(16) 9532 defer tls.Free(16) 9533 9534 if apndIsAppendvfsDatabase(tls, sz, pFile) != 0 || 9535 sz&int64(0x1ff) != int64(0) || 9536 SQLITE_OK != (*struct { 9537 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9538 })(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)) || 9539 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]int8{}))) != 0 { 9540 return 0 9541 } else { 9542 return 1 9543 } 9544 return int32(0) 9545 } 9546 9547 func apndOpen(tls *libc.TLS, pApndVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 9548 bp := tls.Alloc(8) 9549 defer tls.Free(8) 9550 9551 var pApndFile uintptr = pFile 9552 var pBaseFile uintptr = pFile + uintptr(1)*24 9553 var pBaseVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pApndVfs)).FpAppData 9554 var rc int32 9555 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 9556 if flags&SQLITE_OPEN_MAIN_DB == 0 { 9557 return (*struct { 9558 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9559 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pFile, flags, pOutFlags) 9560 } 9561 libc.Xmemset(tls, pApndFile, 0, uint64(unsafe.Sizeof(ApndFile{}))) 9562 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&apnd_io_methods)) 9563 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = int64(-1) 9564 9565 rc = (*struct { 9566 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9567 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pBaseFile, flags, pOutFlags) 9568 if rc == SQLITE_OK { 9569 rc = (*struct { 9570 f func(*libc.TLS, uintptr, uintptr) int32 9571 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxFileSize})).f(tls, pBaseFile, bp) 9572 if rc != 0 { 9573 (*struct { 9574 f func(*libc.TLS, uintptr) int32 9575 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9576 } 9577 } 9578 if rc != 0 { 9579 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9580 return rc 9581 } 9582 if apndIsOrdinaryDatabaseFile(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pBaseFile) != 0 { 9583 libc.Xmemmove(tls, pApndFile, pBaseFile, uint64((*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FszOsFile)) 9584 return SQLITE_OK 9585 } 9586 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = apndReadMark(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pFile) 9587 if (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne >= int64(0) { 9588 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = *(*sqlite3_int64)(unsafe.Pointer(bp)) - int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) 9589 return SQLITE_OK 9590 } 9591 if flags&SQLITE_OPEN_CREATE == 0 { 9592 (*struct { 9593 f func(*libc.TLS, uintptr) int32 9594 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9595 rc = SQLITE_CANTOPEN 9596 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9597 } else { 9598 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = (*(*sqlite3_int64)(unsafe.Pointer(bp)) + int64(APND_ROUNDUP-1)) & libc.CplInt64(int64(APND_ROUNDUP-1)) 9599 } 9600 return rc 9601 } 9602 9603 func apndDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 9604 return (*struct { 9605 f func(*libc.TLS, uintptr, uintptr, int32) int32 9606 })(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) 9607 } 9608 9609 func apndAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 9610 return (*struct { 9611 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9612 })(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) 9613 } 9614 9615 func apndFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 9616 return (*struct { 9617 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9618 })(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) 9619 } 9620 9621 func apndDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 9622 return (*struct { 9623 f func(*libc.TLS, uintptr, uintptr) uintptr 9624 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 9625 } 9626 9627 func apndDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 9628 (*struct { 9629 f func(*libc.TLS, uintptr, int32, uintptr) 9630 })(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) 9631 } 9632 9633 func apndDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 9634 return (*struct { 9635 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 9636 })(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) 9637 } 9638 9639 func apndDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 9640 (*struct { 9641 f func(*libc.TLS, uintptr, uintptr) 9642 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 9643 } 9644 9645 func apndRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 9646 return (*struct { 9647 f func(*libc.TLS, uintptr, int32, uintptr) int32 9648 })(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) 9649 } 9650 9651 func apndSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 9652 return (*struct { 9653 f func(*libc.TLS, uintptr, int32) int32 9654 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 9655 } 9656 9657 func apndCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 9658 return (*struct { 9659 f func(*libc.TLS, uintptr, uintptr) int32 9660 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 9661 } 9662 9663 func apndGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 9664 return (*struct { 9665 f func(*libc.TLS, uintptr, int32, uintptr) int32 9666 })(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) 9667 } 9668 9669 func apndCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 9670 return (*struct { 9671 f func(*libc.TLS, uintptr, uintptr) int32 9672 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTimeInt64})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p) 9673 } 9674 9675 func apndSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 9676 return (*struct { 9677 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 9678 })(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) 9679 } 9680 9681 func apndGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 9682 return (*struct { 9683 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 9684 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 9685 } 9686 9687 func apndNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 9688 return (*struct { 9689 f func(*libc.TLS, uintptr, uintptr) uintptr 9690 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 9691 } 9692 9693 func sqlite3_appendvfs_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 9694 var rc int32 = SQLITE_OK 9695 var pOrig uintptr 9696 _ = pApi 9697 9698 _ = pzErrMsg 9699 _ = db 9700 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 9701 if pOrig == uintptr(0) { 9702 return SQLITE_ERROR 9703 } 9704 apnd_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 9705 apnd_vfs.FpAppData = pOrig 9706 apnd_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(ApndFile{}))) 9707 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&apnd_vfs)), 0) 9708 if rc == SQLITE_OK { 9709 rc = SQLITE_OK | int32(1)<<8 9710 } 9711 return rc 9712 } 9713 9714 type rune_t = int32 9715 9716 type div_t = struct { 9717 Fquot int32 9718 Frem int32 9719 } 9720 9721 type ldiv_t = struct { 9722 Fquot int64 9723 Frem int64 9724 } 9725 9726 type lldiv_t = struct { 9727 Fquot int64 9728 Frem int64 9729 } 9730 9731 type constraint_handler_t = uintptr 9732 9733 type _RuneEntry = struct { 9734 F__min int32 9735 F__max int32 9736 F__map int32 9737 F__ccgo_pad1 [4]byte 9738 F__types uintptr 9739 } 9740 9741 type _RuneRange = struct { 9742 F__nranges int32 9743 F__ccgo_pad1 [4]byte 9744 F__ranges uintptr 9745 } 9746 9747 type _RuneLocale = struct { 9748 F__magic [8]int8 9749 F__encoding [32]int8 9750 F__sgetrune uintptr 9751 F__sputrune uintptr 9752 F__invalid_rune int32 9753 F__ccgo_pad1 [4]byte 9754 F__runetype [256]uint64 9755 F__maplower [256]int32 9756 F__mapupper [256]int32 9757 F__runetype_ext _RuneRange 9758 F__maplower_ext _RuneRange 9759 F__mapupper_ext _RuneRange 9760 F__variable uintptr 9761 F__variable_len int32 9762 F__ccgo_pad2 [4]byte 9763 } 9764 9765 func __getCurrentRuneLocale(tls *libc.TLS) uintptr { 9766 if libc.X_ThreadRuneLocale != 0 { 9767 return libc.X_ThreadRuneLocale 9768 } 9769 return libc.X_CurrentRuneLocale 9770 } 9771 9772 func __maskrune(tls *libc.TLS, _c int32, _f uint64) int32 { 9773 return int32(func() uint64 { 9774 if _c < 0 || _c >= int32(1)<<8 { 9775 return libc.X___runetype(tls, _c) 9776 } 9777 return *(*uint64)(unsafe.Pointer(__getCurrentRuneLocale(tls) + 64 + uintptr(_c)*8)) 9778 }() & _f) 9779 } 9780 9781 func __sbmaskrune(tls *libc.TLS, _c int32, _f uint64) int32 { 9782 if _c < 0 || _c >= libc.X__mb_sb_limit { 9783 return 0 9784 } 9785 return int32(*(*uint64)(unsafe.Pointer(__getCurrentRuneLocale(tls) + 64 + uintptr(_c)*8)) & _f) 9786 } 9787 9788 func __sbistype(tls *libc.TLS, _c int32, _f uint64) int32 { 9789 return libc.BoolInt32(!!(__sbmaskrune(tls, _c, _f) != 0)) 9790 } 9791 9792 func __sbmaskrune_l(tls *libc.TLS, __c int32, __f uint64, __loc locale_t) int32 { 9793 bp := tls.Alloc(4) 9794 defer tls.Free(4) 9795 9796 var runes uintptr = libc.X__runes_for_locale(tls, __loc, bp) 9797 if __c < 0 || __c >= *(*int32)(unsafe.Pointer(bp)) { 9798 return 0 9799 } 9800 return int32(*(*uint64)(unsafe.Pointer(runes + 64 + uintptr(__c)*8)) & __f) 9801 } 9802 9803 func __sbistype_l(tls *libc.TLS, __c int32, __f uint64, __loc locale_t) int32 { 9804 return libc.BoolInt32(!!(tcl.X__sbmaskrune_l(tls, __c, __f, __loc) != 0)) 9805 } 9806 9807 func isalnum_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9808 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_A|X_CTYPE_D|X_CTYPE_N), __l) 9809 } 9810 9811 func isalpha_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9812 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_A), __l) 9813 } 9814 9815 func isblank_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9816 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_B), __l) 9817 } 9818 9819 func iscntrl_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9820 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_C), __l) 9821 } 9822 9823 func isdigit_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9824 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_D), __l) 9825 } 9826 9827 func isgraph_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9828 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_G), __l) 9829 } 9830 9831 func ishexnumber_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9832 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_X), __l) 9833 } 9834 9835 func isideogram_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9836 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_I), __l) 9837 } 9838 9839 func islower_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9840 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_L), __l) 9841 } 9842 9843 func isnumber_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9844 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_D|X_CTYPE_N), __l) 9845 } 9846 9847 func isphonogram_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9848 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_Q), __l) 9849 } 9850 9851 func isprint_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9852 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_R), __l) 9853 } 9854 9855 func ispunct_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9856 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_P), __l) 9857 } 9858 9859 func isrune_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9860 return tcl.X__sbistype_l(tls, __c, uint64(0xFFFFFF00), __l) 9861 } 9862 9863 func isspace_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9864 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_S), __l) 9865 } 9866 9867 func isspecial_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9868 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_T), __l) 9869 } 9870 9871 func isupper_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9872 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_U), __l) 9873 } 9874 9875 func isxdigit_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9876 return tcl.X__sbistype_l(tls, __c, uint64(X_CTYPE_X), __l) 9877 } 9878 9879 func digittoint_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9880 return tcl.X__sbmaskrune_l(tls, __c, uint64(0xFF), __l) 9881 } 9882 9883 func tolower_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9884 bp := tls.Alloc(4) 9885 defer tls.Free(4) 9886 9887 var __runes uintptr = libc.X__runes_for_locale(tls, __l, bp) 9888 if __c < 0 || __c >= *(*int32)(unsafe.Pointer(bp)) { 9889 return __c 9890 } 9891 return *(*int32)(unsafe.Pointer(__runes + 2112 + uintptr(__c)*4)) 9892 } 9893 9894 func toupper_l(tls *libc.TLS, __c int32, __l locale_t) int32 { 9895 bp := tls.Alloc(4) 9896 defer tls.Free(4) 9897 9898 var __runes uintptr = libc.X__runes_for_locale(tls, __l, bp) 9899 if __c < 0 || __c >= *(*int32)(unsafe.Pointer(bp)) { 9900 return __c 9901 } 9902 return *(*int32)(unsafe.Pointer(__runes + 3136 + uintptr(__c)*4)) 9903 } 9904 9905 type amatch_vtab1 = struct { 9906 Fbase sqlite3_vtab 9907 FzClassName uintptr 9908 FzDb uintptr 9909 FzSelf uintptr 9910 FzCostTab uintptr 9911 FzVocabTab uintptr 9912 FzVocabWord uintptr 9913 FzVocabLang uintptr 9914 FpRule uintptr 9915 FrIns amatch_cost 9916 FrDel amatch_cost 9917 FrSub amatch_cost 9918 F__ccgo_pad1 [4]byte 9919 Fdb uintptr 9920 FpVCheck uintptr 9921 FnCursor int32 9922 F__ccgo_pad2 [4]byte 9923 } 9924 9925 type amatch_vtab = amatch_vtab1 9926 type amatch_cursor1 = struct { 9927 Fbase sqlite3_vtab_cursor 9928 FiRowid sqlite3_int64 9929 FiLang amatch_langid 9930 FrLimit amatch_cost 9931 FnBuf int32 9932 FoomErr int32 9933 FnWord int32 9934 F__ccgo_pad1 [4]byte 9935 FzBuf uintptr 9936 FzInput uintptr 9937 FpVtab uintptr 9938 FpAllWords uintptr 9939 FpCurrent uintptr 9940 FpCost uintptr 9941 FpWord uintptr 9942 } 9943 9944 type amatch_cursor = amatch_cursor1 9945 type amatch_rule1 = struct { 9946 FpNext uintptr 9947 FzFrom uintptr 9948 FrCost amatch_cost 9949 FiLang amatch_langid 9950 FnFrom amatch_len 9951 FnTo amatch_len 9952 FzTo [4]int8 9953 F__ccgo_pad1 [2]byte 9954 } 9955 9956 type amatch_rule = amatch_rule1 9957 type amatch_word1 = struct { 9958 FpNext uintptr 9959 FsCost amatch_avl 9960 FsWord amatch_avl 9961 FrCost amatch_cost 9962 FiSeq int32 9963 FzCost [10]int8 9964 FnMatch int16 9965 FzWord [4]int8 9966 } 9967 9968 type amatch_word = amatch_word1 9969 type amatch_avl1 = struct { 9970 FpWord uintptr 9971 FzKey uintptr 9972 FpBefore uintptr 9973 FpAfter uintptr 9974 FpUp uintptr 9975 Fheight int16 9976 Fimbalance int16 9977 F__ccgo_pad1 [4]byte 9978 } 9979 9980 type amatch_avl = amatch_avl1 9981 9982 func amatchAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 9983 var hBefore int16 9984 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 9985 hBefore = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 9986 } else { 9987 hBefore = int16(0) 9988 } 9989 var hAfter int16 9990 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 9991 hAfter = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 9992 } else { 9993 hAfter = int16(0) 9994 } 9995 (*amatch_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 9996 (*amatch_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 9997 if int32(hBefore) > int32(hAfter) { 9998 return int32(hBefore) 9999 } 10000 return int32(hAfter) 10001 }() + 1) 10002 } 10003 10004 func amatchAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 10005 var pB uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpBefore 10006 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pB)).FpAfter 10007 (*amatch_avl)(unsafe.Pointer(pB)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 10008 (*amatch_avl)(unsafe.Pointer(pB)).FpAfter = pP 10009 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pB 10010 (*amatch_avl)(unsafe.Pointer(pP)).FpBefore = pY 10011 if pY != 0 { 10012 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 10013 } 10014 amatchAvlRecomputeHeight(tls, pP) 10015 amatchAvlRecomputeHeight(tls, pB) 10016 return pB 10017 } 10018 10019 func amatchAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 10020 var pA uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpAfter 10021 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pA)).FpBefore 10022 (*amatch_avl)(unsafe.Pointer(pA)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 10023 (*amatch_avl)(unsafe.Pointer(pA)).FpBefore = pP 10024 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pA 10025 (*amatch_avl)(unsafe.Pointer(pP)).FpAfter = pY 10026 if pY != 0 { 10027 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 10028 } 10029 amatchAvlRecomputeHeight(tls, pP) 10030 amatchAvlRecomputeHeight(tls, pA) 10031 return pA 10032 } 10033 10034 func amatchAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 10035 var pUp uintptr = (*amatch_avl)(unsafe.Pointer(p)).FpUp 10036 if pUp == uintptr(0) { 10037 return pp 10038 } 10039 if (*amatch_avl)(unsafe.Pointer(pUp)).FpAfter == p { 10040 return pUp + 24 10041 } 10042 return pUp + 16 10043 } 10044 10045 func amatchAvlBalance(tls *libc.TLS, p uintptr) uintptr { 10046 bp := tls.Alloc(8) 10047 defer tls.Free(8) 10048 *(*uintptr)(unsafe.Pointer(bp)) = p 10049 10050 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 10051 var pp uintptr 10052 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 10053 amatchAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 10054 if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 10055 var pB uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 10056 if int32((*amatch_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 10057 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = amatchAvlRotateAfter(tls, pB) 10058 } 10059 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 10060 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 10061 } else if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 10062 var pA uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 10063 if int32((*amatch_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 10064 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = amatchAvlRotateBefore(tls, pA) 10065 } 10066 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 10067 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 10068 } 10069 pTop = *(*uintptr)(unsafe.Pointer(bp)) 10070 *(*uintptr)(unsafe.Pointer(bp)) = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 10071 } 10072 return pTop 10073 } 10074 10075 func amatchAvlSearch(tls *libc.TLS, p uintptr, zKey uintptr) uintptr { 10076 var c int32 10077 for p != 0 && libc.AssignInt32(&c, libc.Xstrcmp(tls, zKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey)) != 0 { 10078 if c < 0 { 10079 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10080 } else { 10081 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 10082 } 10083 } 10084 return p 10085 } 10086 10087 func amatchAvlFirst(tls *libc.TLS, p uintptr) uintptr { 10088 if p != 0 { 10089 for (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10090 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10091 } 10092 } 10093 return p 10094 } 10095 10096 func amatchAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 10097 var c int32 10098 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 10099 if p == uintptr(0) { 10100 p = pNew 10101 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 10102 } else { 10103 for p != 0 { 10104 c = libc.Xstrcmp(tls, (*amatch_avl)(unsafe.Pointer(pNew)).FzKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey) 10105 if c < 0 { 10106 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10107 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10108 } else { 10109 (*amatch_avl)(unsafe.Pointer(p)).FpBefore = pNew 10110 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 10111 break 10112 } 10113 } else if c > 0 { 10114 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 10115 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 10116 } else { 10117 (*amatch_avl)(unsafe.Pointer(p)).FpAfter = pNew 10118 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 10119 break 10120 } 10121 } else { 10122 return p 10123 } 10124 } 10125 } 10126 (*amatch_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 10127 (*amatch_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 10128 (*amatch_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 10129 (*amatch_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 10130 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, p) 10131 10132 return uintptr(0) 10133 } 10134 10135 func amatchAvlRemove(tls *libc.TLS, ppHead uintptr, pOld uintptr) { 10136 var ppParent uintptr 10137 var pBalance uintptr = uintptr(0) 10138 10139 ppParent = amatchAvlFromPtr(tls, pOld, ppHead) 10140 if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 10141 *(*uintptr)(unsafe.Pointer(ppParent)) = uintptr(0) 10142 pBalance = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10143 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore != 0 && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter != 0 { 10144 var pX uintptr 10145 var pY uintptr 10146 pX = amatchAvlFirst(tls, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 10147 *(*uintptr)(unsafe.Pointer(amatchAvlFromPtr(tls, pX, uintptr(0)))) = (*amatch_avl)(unsafe.Pointer(pX)).FpAfter 10148 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 10149 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 10150 } 10151 pBalance = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 10152 (*amatch_avl)(unsafe.Pointer(pX)).FpAfter = (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter 10153 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 10154 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = pX 10155 } else { 10156 pBalance = pX 10157 } 10158 (*amatch_avl)(unsafe.Pointer(pX)).FpBefore = libc.AssignUintptr(&pY, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 10159 if pY != 0 { 10160 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pX 10161 } 10162 (*amatch_avl)(unsafe.Pointer(pX)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10163 *(*uintptr)(unsafe.Pointer(ppParent)) = pX 10164 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) { 10165 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 10166 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10167 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 10168 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 10169 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10170 } 10171 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, pBalance) 10172 (*amatch_avl)(unsafe.Pointer(pOld)).FpUp = uintptr(0) 10173 (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore = uintptr(0) 10174 (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter = uintptr(0) 10175 10176 } 10177 10178 type amatch_cost = int32 10179 type amatch_len = int8 10180 type amatch_langid = int32 10181 10182 func amatchMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 10183 bp := tls.Alloc(32) 10184 defer tls.Free(32) 10185 10186 var pTail uintptr 10187 10188 pTail = bp 10189 for pA != 0 && pB != 0 { 10190 if (*amatch_rule)(unsafe.Pointer(pA)).FrCost <= (*amatch_rule)(unsafe.Pointer(pB)).FrCost { 10191 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 10192 pTail = pA 10193 pA = (*amatch_rule)(unsafe.Pointer(pA)).FpNext 10194 } else { 10195 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 10196 pTail = pB 10197 pB = (*amatch_rule)(unsafe.Pointer(pB)).FpNext 10198 } 10199 } 10200 if pA == uintptr(0) { 10201 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 10202 } else { 10203 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 10204 } 10205 return (*amatch_rule)(unsafe.Pointer(bp)).FpNext 10206 } 10207 10208 func amatchLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 10209 bp := tls.Alloc(48) 10210 defer tls.Free(48) 10211 10212 var iLang sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 10213 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 10214 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 10215 var rCost amatch_cost = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 10216 10217 var rc int32 = SQLITE_OK 10218 var nFrom int32 10219 var nTo int32 10220 var pRule uintptr = uintptr(0) 10221 10222 if zFrom == uintptr(0) { 10223 zFrom = ts + 584 10224 } 10225 if zTo == uintptr(0) { 10226 zTo = ts + 584 10227 } 10228 nFrom = int32(libc.Xstrlen(tls, zFrom)) 10229 nTo = int32(libc.Xstrlen(tls, zTo)) 10230 10231 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 10232 if int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zFrom + 1))) == 0 { 10233 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrSub > rCost { 10234 (*amatch_vtab)(unsafe.Pointer(p)).FrSub = rCost 10235 } 10236 } 10237 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 10238 return SQLITE_OK 10239 } 10240 10241 if rCost <= 0 || rCost > AMATCH_MX_COST { 10242 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 10243 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_COST)) 10244 rc = SQLITE_ERROR 10245 } else if nFrom > AMATCH_MX_LENGTH || nTo > AMATCH_MX_LENGTH { 10246 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 10247 libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LENGTH)) 10248 rc = SQLITE_ERROR 10249 } else if iLang < int64(0) || iLang > int64(AMATCH_MX_LANGID) { 10250 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3370, 10251 libc.VaList(bp+32, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LANGID)) 10252 rc = SQLITE_ERROR 10253 } else if libc.Xstrcmp(tls, zFrom, ts+584) == 0 && libc.Xstrcmp(tls, zTo, ts+3405) == 0 { 10254 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrIns > rCost { 10255 (*amatch_vtab)(unsafe.Pointer(p)).FrIns = rCost 10256 } 10257 } else if libc.Xstrcmp(tls, zFrom, ts+3405) == 0 && libc.Xstrcmp(tls, zTo, ts+584) == 0 { 10258 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrDel > rCost { 10259 (*amatch_vtab)(unsafe.Pointer(p)).FrDel = rCost 10260 } 10261 } else { 10262 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_rule{}))+uint64(nFrom)+uint64(nTo)) 10263 if pRule == uintptr(0) { 10264 rc = SQLITE_NOMEM 10265 } else { 10266 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(amatch_rule{}))) 10267 (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 26 + uintptr(nTo+1) 10268 (*amatch_rule)(unsafe.Pointer(pRule)).FnFrom = amatch_len(nFrom) 10269 libc.Xmemcpy(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 10270 libc.Xmemcpy(tls, pRule+26, zTo, uint64(nTo+1)) 10271 (*amatch_rule)(unsafe.Pointer(pRule)).FnTo = amatch_len(nTo) 10272 (*amatch_rule)(unsafe.Pointer(pRule)).FrCost = rCost 10273 (*amatch_rule)(unsafe.Pointer(pRule)).FiLang = int32(iLang) 10274 } 10275 } 10276 10277 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 10278 return rc 10279 } 10280 10281 func amatchFreeRules(tls *libc.TLS, p uintptr) { 10282 for (*amatch_vtab)(unsafe.Pointer(p)).FpRule != 0 { 10283 var pRule uintptr = (*amatch_vtab)(unsafe.Pointer(p)).FpRule 10284 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext 10285 sqlite3.Xsqlite3_free(tls, pRule) 10286 } 10287 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = uintptr(0) 10288 } 10289 10290 func amatchLoadRules(tls *libc.TLS, db uintptr, p uintptr, pzErr uintptr) int32 { 10291 bp := tls.Alloc(192) 10292 defer tls.Free(192) 10293 10294 var rc int32 = SQLITE_OK 10295 var zSql uintptr 10296 var pHead uintptr = uintptr(0) 10297 10298 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzDb, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab)) 10299 if zSql == uintptr(0) { 10300 rc = SQLITE_NOMEM 10301 } else { 10302 var rc2 int32 10303 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 10304 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 10305 if rc != SQLITE_OK { 10306 *(*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))) 10307 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 10308 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 10309 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))))) 10310 rc = SQLITE_ERROR 10311 } else { 10312 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 10313 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 10314 rc = amatchLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 10315 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 10316 (*amatch_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 10317 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 10318 } 10319 } 10320 } 10321 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 10322 if rc == SQLITE_OK { 10323 rc = rc2 10324 } 10325 } 10326 sqlite3.Xsqlite3_free(tls, zSql) 10327 10328 if rc == SQLITE_OK { 10329 var i uint32 10330 var pX uintptr 10331 10332 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 10333 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 10334 } 10335 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 10336 pHead = (*amatch_rule)(unsafe.Pointer(pX)).FpNext 10337 (*amatch_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 10338 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++ { 10339 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10340 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 10341 } 10342 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10343 } 10344 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 10345 i = uint32(1) 10346 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 10347 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10348 } 10349 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = amatchMergeRules(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpRule, pX) 10350 } else { 10351 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = pHead 10352 } 10353 10354 return rc 10355 } 10356 10357 func amatchDequote(tls *libc.TLS, zIn uintptr) uintptr { 10358 var nIn sqlite3_int64 10359 var zOut uintptr 10360 10361 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 10362 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 10363 if zOut != 0 { 10364 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 10365 10366 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 10367 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 10368 } else { 10369 var iOut int32 = 0 10370 var iIn int32 10371 10372 if int32(q) == '[' { 10373 q = int8(']') 10374 } 10375 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 10376 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 10377 iIn++ 10378 } 10379 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 10380 } 10381 } 10382 10383 } 10384 return zOut 10385 } 10386 10387 func amatchVCheckClear(tls *libc.TLS, p uintptr) { 10388 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck != 0 { 10389 sqlite3.Xsqlite3_finalize(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10390 (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck = uintptr(0) 10391 } 10392 } 10393 10394 func amatchFree(tls *libc.TLS, p uintptr) { 10395 if p != 0 { 10396 amatchFreeRules(tls, p) 10397 amatchVCheckClear(tls, p) 10398 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName) 10399 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzDb) 10400 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab) 10401 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab) 10402 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord) 10403 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang) 10404 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf) 10405 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 10406 sqlite3.Xsqlite3_free(tls, p) 10407 } 10408 } 10409 10410 func amatchDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 10411 var p uintptr = pVtab 10412 10413 amatchFree(tls, p) 10414 return SQLITE_OK 10415 } 10416 10417 func amatchValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 10418 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 10419 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 10420 var i int32 10421 if nStr < nKey+1 { 10422 return uintptr(0) 10423 } 10424 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 10425 return uintptr(0) 10426 } 10427 for i = nKey; __sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i))))), uint64(X_CTYPE_S)) != 0; i++ { 10428 } 10429 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 10430 return uintptr(0) 10431 } 10432 i++ 10433 for __sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i))))), uint64(X_CTYPE_S)) != 0 { 10434 i++ 10435 } 10436 return zStr + uintptr(i) 10437 } 10438 10439 func amatchConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 10440 bp := tls.Alloc(32) 10441 defer tls.Free(32) 10442 10443 var rc int32 10444 var pNew uintptr 10445 var zModule uintptr 10446 var zDb uintptr 10447 var zVal uintptr 10448 var i int32 10449 rc = SQLITE_OK 10450 pNew = uintptr(0) 10451 zModule = *(*uintptr)(unsafe.Pointer(argv)) 10452 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 10453 10454 _ = pAux 10455 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10456 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_vtab{}))) 10457 if !(pNew == uintptr(0)) { 10458 goto __1 10459 } 10460 return SQLITE_NOMEM 10461 __1: 10462 ; 10463 rc = SQLITE_NOMEM 10464 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 10465 (*amatch_vtab)(unsafe.Pointer(pNew)).Fdb = db 10466 (*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zModule)) 10467 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName == uintptr(0)) { 10468 goto __2 10469 } 10470 goto amatchConnectError 10471 __2: 10472 ; 10473 (*amatch_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zDb)) 10474 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 10475 goto __3 10476 } 10477 goto amatchConnectError 10478 __3: 10479 ; 10480 (*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 10481 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 10482 goto __4 10483 } 10484 goto amatchConnectError 10485 __4: 10486 ; 10487 i = 3 10488 __5: 10489 if !(i < argc) { 10490 goto __7 10491 } 10492 zVal = amatchValueOfKey(tls, ts+3468, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10493 if !(zVal != 0) { 10494 goto __8 10495 } 10496 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab) 10497 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab = amatchDequote(tls, zVal) 10498 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab == uintptr(0)) { 10499 goto __9 10500 } 10501 goto amatchConnectError 10502 __9: 10503 ; 10504 goto __6 10505 __8: 10506 ; 10507 zVal = amatchValueOfKey(tls, ts+3485, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10508 if !(zVal != 0) { 10509 goto __10 10510 } 10511 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord) 10512 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord = amatchDequote(tls, zVal) 10513 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord == uintptr(0)) { 10514 goto __11 10515 } 10516 goto amatchConnectError 10517 __11: 10518 ; 10519 goto __6 10520 __10: 10521 ; 10522 zVal = amatchValueOfKey(tls, ts+3501, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10523 if !(zVal != 0) { 10524 goto __12 10525 } 10526 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang) 10527 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang = amatchDequote(tls, zVal) 10528 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang == uintptr(0)) { 10529 goto __13 10530 } 10531 goto amatchConnectError 10532 __13: 10533 ; 10534 goto __6 10535 __12: 10536 ; 10537 zVal = amatchValueOfKey(tls, ts+3521, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10538 if !(zVal != 0) { 10539 goto __14 10540 } 10541 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab) 10542 (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab = amatchDequote(tls, zVal) 10543 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10544 goto __15 10545 } 10546 goto amatchConnectError 10547 __15: 10548 ; 10549 goto __6 10550 __14: 10551 ; 10552 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 10553 amatchFree(tls, pNew) 10554 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10555 return SQLITE_ERROR 10556 goto __6 10557 __6: 10558 i++ 10559 goto __5 10560 goto __7 10561 __7: 10562 ; 10563 rc = SQLITE_OK 10564 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10565 goto __16 10566 } 10567 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3565, 0) 10568 rc = SQLITE_ERROR 10569 goto __17 10570 __16: 10571 rc = amatchLoadRules(tls, db, pNew, pzErr) 10572 __17: 10573 ; 10574 if !(rc == SQLITE_OK) { 10575 goto __18 10576 } 10577 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 10578 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 10579 ts+3599) 10580 __18: 10581 ; 10582 if !(rc != SQLITE_OK) { 10583 goto __19 10584 } 10585 amatchFree(tls, pNew) 10586 __19: 10587 ; 10588 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 10589 return rc 10590 10591 amatchConnectError: 10592 amatchFree(tls, pNew) 10593 return rc 10594 } 10595 10596 func amatchOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 10597 var p uintptr = pVTab 10598 var pCur uintptr 10599 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_cursor{}))) 10600 if pCur == uintptr(0) { 10601 return SQLITE_NOMEM 10602 } 10603 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(amatch_cursor{}))) 10604 (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab = p 10605 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 10606 (*amatch_vtab)(unsafe.Pointer(p)).FnCursor++ 10607 return SQLITE_OK 10608 } 10609 10610 func amatchClearCursor(tls *libc.TLS, pCur uintptr) { 10611 var pWord uintptr 10612 var pNextWord uintptr 10613 for pWord = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords; pWord != 0; pWord = pNextWord { 10614 pNextWord = (*amatch_word)(unsafe.Pointer(pWord)).FpNext 10615 sqlite3.Xsqlite3_free(tls, pWord) 10616 } 10617 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = uintptr(0) 10618 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput) 10619 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = uintptr(0) 10620 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10621 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = uintptr(0) 10622 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 10623 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost = uintptr(0) 10624 (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord = uintptr(0) 10625 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 10626 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = 1000000 10627 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = 0 10628 (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord = 0 10629 } 10630 10631 func amatchClose(tls *libc.TLS, cur uintptr) int32 { 10632 var pCur uintptr = cur 10633 amatchClearCursor(tls, pCur) 10634 (*amatch_vtab)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 10635 sqlite3.Xsqlite3_free(tls, pCur) 10636 return SQLITE_OK 10637 } 10638 10639 func amatchEncodeInt(tls *libc.TLS, x int32, z uintptr) { 10640 *(*int8)(unsafe.Pointer(z)) = a[x>>18&0x3f] 10641 *(*int8)(unsafe.Pointer(z + 1)) = a[x>>12&0x3f] 10642 *(*int8)(unsafe.Pointer(z + 2)) = a[x>>6&0x3f] 10643 *(*int8)(unsafe.Pointer(z + 3)) = a[x&0x3f] 10644 } 10645 10646 var a = *(*[65]int8)(unsafe.Pointer(ts + 3666)) 10647 10648 func amatchWriteCost(tls *libc.TLS, pWord uintptr) { 10649 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, pWord+112) 10650 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FiSeq, pWord+112+uintptr(4)) 10651 *(*int8)(unsafe.Pointer(pWord + 112 + 8)) = int8(0) 10652 } 10653 10654 func amatchStrcpy(tls *libc.TLS, dest uintptr, src uintptr) { 10655 for int32(libc.AssignPtrInt8(libc.PostIncUintptr(&dest, 1), *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&src, 1))))) != 0 { 10656 } 10657 } 10658 10659 func amatchStrcat(tls *libc.TLS, dest uintptr, src uintptr) { 10660 for *(*int8)(unsafe.Pointer(dest)) != 0 { 10661 dest++ 10662 } 10663 amatchStrcpy(tls, dest, src) 10664 } 10665 10666 func amatchAddWord(tls *libc.TLS, pCur uintptr, rCost amatch_cost, nMatch int32, zWordBase uintptr, zWordTail uintptr) { 10667 bp := tls.Alloc(4) 10668 defer tls.Free(4) 10669 10670 var pWord uintptr 10671 var pNode uintptr 10672 var pOther uintptr 10673 _ = pOther 10674 var nBase int32 10675 var nTail int32 10676 10677 if rCost > (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit { 10678 return 10679 } 10680 nBase = int32(libc.Xstrlen(tls, zWordBase)) 10681 nTail = int32(libc.Xstrlen(tls, zWordTail)) 10682 if nBase+nTail+3 > (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf { 10683 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = nBase + nTail + 100 10684 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = sqlite3.Xsqlite3_realloc(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf) 10685 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf == uintptr(0) { 10686 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 10687 return 10688 } 10689 } 10690 amatchEncodeInt(tls, nMatch, bp) 10691 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, bp+uintptr(2), uint64(2)) 10692 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2), zWordBase, uint64(nBase)) 10693 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2)+uintptr(nBase), zWordTail, uint64(nTail+1)) 10694 pNode = amatchAvlSearch(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10695 if pNode != 0 { 10696 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 10697 if (*amatch_word)(unsafe.Pointer(pWord)).FrCost > rCost { 10698 amatchAvlRemove(tls, pCur+80, pWord+8) 10699 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 10700 amatchWriteCost(tls, pWord) 10701 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 10702 _ = pOther 10703 } 10704 return 10705 } 10706 pWord = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_word{}))+uint64(nBase)+uint64(nTail)-uint64(1)) 10707 if pWord == uintptr(0) { 10708 return 10709 } 10710 libc.Xmemset(tls, pWord, 0, uint64(unsafe.Sizeof(amatch_word{}))) 10711 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 10712 (*amatch_word)(unsafe.Pointer(pWord)).FiSeq = libc.PostIncInt32(&(*amatch_cursor)(unsafe.Pointer(pCur)).FnWord, 1) 10713 amatchWriteCost(tls, pWord) 10714 (*amatch_word)(unsafe.Pointer(pWord)).FnMatch = int16(nMatch) 10715 (*amatch_word)(unsafe.Pointer(pWord)).FpNext = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords 10716 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = pWord 10717 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FzKey = pWord + 112 10718 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FpWord = pWord 10719 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 10720 _ = pOther 10721 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FzKey = pWord + 124 10722 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FpWord = pWord 10723 amatchStrcpy(tls, pWord+124, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10724 pOther = amatchAvlInsert(tls, pCur+88, pWord+56) 10725 _ = pOther 10726 } 10727 10728 func amatchNext(tls *libc.TLS, cur uintptr) int32 { 10729 bp := tls.Alloc(80) 10730 defer tls.Free(80) 10731 10732 var pCur uintptr = cur 10733 var pWord uintptr = uintptr(0) 10734 var pNode uintptr 10735 var isMatch int32 = 0 10736 var p uintptr = (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab 10737 var nWord int32 10738 var rc int32 10739 var i int32 10740 var zW uintptr 10741 var pRule uintptr 10742 var zBuf uintptr = uintptr(0) 10743 var nBuf int8 = int8(0) 10744 10745 var nNextIn int32 10746 10747 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck == uintptr(0) { 10748 var zSql uintptr 10749 if (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang != 0 && *(*int8)(unsafe.Pointer((*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) != 0 { 10750 zSql = sqlite3.Xsqlite3_mprintf(tls, 10751 ts+3731, 10752 libc.VaList(bp, ts+3753, 10753 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 10754 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) 10755 } else { 10756 zSql = sqlite3.Xsqlite3_mprintf(tls, 10757 ts+3792, 10758 libc.VaList(bp+40, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 10759 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord)) 10760 } 10761 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*amatch_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, p+112, uintptr(0)) 10762 sqlite3.Xsqlite3_free(tls, zSql) 10763 if rc != 0 { 10764 return rc 10765 } 10766 } 10767 sqlite3.Xsqlite3_bind_int(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 2, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 10768 10769 for __ccgo := true; __ccgo; __ccgo = !(isMatch != 0) { 10770 pNode = amatchAvlFirst(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost) 10771 if pNode == uintptr(0) { 10772 pWord = uintptr(0) 10773 break 10774 } 10775 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 10776 amatchAvlRemove(tls, pCur+80, pWord+8) 10777 10778 nWord = int32(libc.Xstrlen(tls, pWord+124+uintptr(2))) 10779 if nWord+20 > int32(nBuf) { 10780 nBuf = int8(nWord + 100) 10781 zBuf = sqlite3.Xsqlite3_realloc(tls, zBuf, int32(nBuf)) 10782 if zBuf == uintptr(0) { 10783 return SQLITE_NOMEM 10784 } 10785 } 10786 amatchStrcpy(tls, zBuf, pWord+124+uintptr(2)) 10787 *(*int8)(unsafe.Pointer(bp + 64)) = int8(0) 10788 *(*int8)(unsafe.Pointer(bp + 72)) = *(*int8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch))) 10789 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 { 10790 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++ { 10791 *(*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))) 10792 } 10793 *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i))) = int8(0) 10794 nNextIn = i 10795 } else { 10796 nNextIn = 0 10797 } 10798 10799 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 && int32(*(*int8)(unsafe.Pointer(bp + 72))) != '*' { 10800 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10801 amatchStrcat(tls, zBuf, bp+72) 10802 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, nWord+nNextIn, uintptr(0)) 10803 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10804 if rc == SQLITE_ROW { 10805 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 10806 if libc.Xstrncmp(tls, zBuf, zW, uint64(nWord+nNextIn)) == 0 { 10807 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, zBuf, ts+584) 10808 } 10809 } 10810 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10811 } 10812 10813 for 1 != 0 { 10814 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 10815 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10816 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, -1, libc.UintptrFromInt32(-1)) 10817 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10818 if rc != SQLITE_ROW { 10819 break 10820 } 10821 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 10822 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 10823 if libc.Xstrncmp(tls, zW, zBuf, uint64(nWord)) != 0 { 10824 break 10825 } 10826 if int32(*(*int8)(unsafe.Pointer(bp + 72))) == '*' && int32(*(*int8)(unsafe.Pointer(bp + 72 + 1))) == 0 || 10827 int32(*(*int8)(unsafe.Pointer(bp + 72))) == 0 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord)))) == 0 { 10828 isMatch = 1 10829 *(*int8)(unsafe.Pointer(bp + 72)) = int8(0) 10830 nNextIn = 0 10831 break 10832 } 10833 *(*int8)(unsafe.Pointer(bp + 64)) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord))) 10834 for i = 1; i <= 4 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))))&0xc0 == 0x80; i++ { 10835 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))) 10836 } 10837 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = int8(0) 10838 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10839 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns > 0 { 10840 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrIns, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), 10841 zBuf, bp+64) 10842 } 10843 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub > 0 { 10844 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrSub, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 10845 zBuf, bp+64) 10846 } 10847 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns < 0 && (*amatch_vtab)(unsafe.Pointer(p)).FrSub < 0 { 10848 break 10849 } 10850 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i-1)))++ 10851 } 10852 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10853 10854 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel > 0 { 10855 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10856 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrDel, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 10857 zBuf, ts+584) 10858 } 10859 10860 for pRule = (*amatch_vtab)(unsafe.Pointer(p)).FpRule; pRule != 0; pRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext { 10861 if (*amatch_rule)(unsafe.Pointer(pRule)).FiLang != (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang { 10862 continue 10863 } 10864 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 { 10865 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_rule)(unsafe.Pointer(pRule)).FrCost, 10866 int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+int32((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom), pWord+124+uintptr(2), pRule+26) 10867 } 10868 } 10869 } 10870 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = pWord 10871 sqlite3.Xsqlite3_free(tls, zBuf) 10872 return SQLITE_OK 10873 } 10874 10875 func amatchFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 10876 bp := tls.Alloc(8) 10877 defer tls.Free(8) 10878 10879 var pCur uintptr = pVtabCursor 10880 var zWord uintptr = ts + 3840 10881 var idx int32 10882 10883 amatchClearCursor(tls, pCur) 10884 idx = 0 10885 if idxNum&1 != 0 { 10886 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 10887 idx++ 10888 } 10889 if idxNum&2 != 0 { 10890 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 10891 idx++ 10892 } 10893 if idxNum&4 != 0 { 10894 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 10895 idx++ 10896 } 10897 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zWord)) 10898 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput == uintptr(0) { 10899 return SQLITE_NOMEM 10900 } 10901 amatchAddWord(tls, pCur, 0, 0, ts+584, ts+584) 10902 amatchNext(tls, pVtabCursor) 10903 10904 return SQLITE_OK 10905 } 10906 10907 func amatchColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 10908 var pCur uintptr = cur 10909 switch i { 10910 case AMATCH_COL_WORD: 10911 { 10912 sqlite3.Xsqlite3_result_text(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent+124+uintptr(2), -1, uintptr(0)) 10913 break 10914 10915 } 10916 case AMATCH_COL_DISTANCE: 10917 { 10918 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_word)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FrCost) 10919 break 10920 10921 } 10922 case AMATCH_COL_LANGUAGE: 10923 { 10924 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 10925 break 10926 10927 } 10928 case AMATCH_COL_NWORD: 10929 { 10930 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord) 10931 break 10932 10933 } 10934 default: 10935 { 10936 sqlite3.Xsqlite3_result_null(tls, ctx) 10937 break 10938 10939 } 10940 } 10941 return SQLITE_OK 10942 } 10943 10944 func amatchRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 10945 var pCur uintptr = cur 10946 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*amatch_cursor)(unsafe.Pointer(pCur)).FiRowid 10947 return SQLITE_OK 10948 } 10949 10950 func amatchEof(tls *libc.TLS, cur uintptr) int32 { 10951 var pCur uintptr = cur 10952 return libc.Bool32((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 10953 } 10954 10955 func amatchBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 10956 var iPlan int32 = 0 10957 var iDistTerm int32 = -1 10958 var iLangTerm int32 = -1 10959 var i int32 10960 var pConstraint uintptr 10961 10962 _ = tab 10963 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 10964 i = 0 10965 __1: 10966 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 10967 goto __3 10968 } 10969 { 10970 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 10971 goto __2 10972 } 10973 if iPlan&1 == 0 && 10974 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 10975 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 10976 iPlan = iPlan | 1 10977 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 10978 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 10979 } 10980 if iPlan&2 == 0 && 10981 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 10982 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 10983 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 10984 iPlan = iPlan | 2 10985 iDistTerm = i 10986 } 10987 if iPlan&4 == 0 && 10988 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 10989 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 10990 iPlan = iPlan | 4 10991 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 10992 iLangTerm = i 10993 } 10994 10995 } 10996 goto __2 10997 __2: 10998 i++ 10999 pConstraint += 12 11000 goto __1 11001 goto __3 11002 __3: 11003 ; 11004 if iPlan&2 != 0 { 11005 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 11006 } 11007 if iPlan&4 != 0 { 11008 var idx int32 = 1 11009 if iPlan&1 != 0 { 11010 idx++ 11011 } 11012 if iPlan&2 != 0 { 11013 idx++ 11014 } 11015 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = idx 11016 } 11017 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 11018 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 11019 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 11020 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 11021 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 11022 } 11023 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10000) 11024 11025 return SQLITE_OK 11026 } 11027 11028 func amatchUpdate(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 11029 bp := tls.Alloc(24) 11030 defer tls.Free(24) 11031 11032 var p uintptr = pVTab 11033 var zCmd uintptr 11034 _ = pRowid 11035 if argc == 1 { 11036 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3842, 11037 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11038 return SQLITE_ERROR 11039 } 11040 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_NULL { 11041 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3872, 11042 libc.VaList(bp+8, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11043 return SQLITE_ERROR 11044 } 11045 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) != SQLITE_NULL || 11046 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) != SQLITE_NULL || 11047 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) != SQLITE_NULL { 11048 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11049 ts+3900, libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11050 return SQLITE_ERROR 11051 } 11052 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 11053 if zCmd == uintptr(0) { 11054 return SQLITE_OK 11055 } 11056 11057 return SQLITE_OK 11058 } 11059 11060 var amatchModule = sqlite3_module{ 11061 FxCreate: 0, 11062 FxConnect: 0, 11063 FxBestIndex: 0, 11064 FxDisconnect: 0, 11065 FxDestroy: 0, 11066 FxOpen: 0, 11067 FxClose: 0, 11068 FxFilter: 0, 11069 FxNext: 0, 11070 FxEof: 0, 11071 FxColumn: 0, 11072 FxRowid: 0, 11073 FxUpdate: 0, 11074 } 11075 11076 func sqlite3_amatch_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11077 var rc int32 = SQLITE_OK 11078 _ = pApi 11079 11080 _ = pzErrMsg 11081 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3949, uintptr(unsafe.Pointer(&amatchModule)), uintptr(0)) 11082 return rc 11083 } 11084 11085 var azType = [4]uintptr{ts + 3967, ts + 3973, ts + 2562, ts + 3979} 11086 11087 type carray_bind1 = struct { 11088 FaData uintptr 11089 FnData int32 11090 FmFlags int32 11091 FxDel uintptr 11092 } 11093 11094 type carray_bind = carray_bind1 11095 11096 type carray_cursor1 = struct { 11097 Fbase sqlite3_vtab_cursor 11098 FiRowid sqlite3_int64 11099 FpPtr uintptr 11100 FiCnt sqlite3_int64 11101 FeType uint8 11102 F__ccgo_pad1 [7]byte 11103 } 11104 11105 type carray_cursor = carray_cursor1 11106 11107 func carrayConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 11108 var pNew uintptr 11109 var rc int32 11110 11111 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 11112 ts+3985) 11113 if rc == SQLITE_OK { 11114 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 11115 if pNew == uintptr(0) { 11116 return SQLITE_NOMEM 11117 } 11118 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 11119 } 11120 return rc 11121 } 11122 11123 func carrayDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 11124 sqlite3.Xsqlite3_free(tls, pVtab) 11125 return SQLITE_OK 11126 } 11127 11128 func carrayOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 11129 var pCur uintptr 11130 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(carray_cursor{}))) 11131 if pCur == uintptr(0) { 11132 return SQLITE_NOMEM 11133 } 11134 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(carray_cursor{}))) 11135 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 11136 return SQLITE_OK 11137 } 11138 11139 func carrayClose(tls *libc.TLS, cur uintptr) int32 { 11140 sqlite3.Xsqlite3_free(tls, cur) 11141 return SQLITE_OK 11142 } 11143 11144 func carrayNext(tls *libc.TLS, cur uintptr) int32 { 11145 var pCur uintptr = cur 11146 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid++ 11147 return SQLITE_OK 11148 } 11149 11150 func carrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 11151 var pCur uintptr = cur 11152 var x sqlite3_int64 = int64(0) 11153 switch i { 11154 case CARRAY_COLUMN_POINTER: 11155 return SQLITE_OK 11156 case CARRAY_COLUMN_COUNT: 11157 x = (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt 11158 break 11159 case CARRAY_COLUMN_CTYPE: 11160 { 11161 sqlite3.Xsqlite3_result_text(tls, ctx, azType[(*carray_cursor)(unsafe.Pointer(pCur)).FeType], -1, uintptr(0)) 11162 return SQLITE_OK 11163 11164 } 11165 default: 11166 { 11167 switch int32((*carray_cursor)(unsafe.Pointer(pCur)).FeType) { 11168 case CARRAY_INT32: 11169 { 11170 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11171 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*4))) 11172 return SQLITE_OK 11173 11174 } 11175 case CARRAY_INT64: 11176 { 11177 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11178 sqlite3.Xsqlite3_result_int64(tls, ctx, *(*sqlite3_int64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 11179 return SQLITE_OK 11180 11181 } 11182 case CARRAY_DOUBLE: 11183 { 11184 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11185 sqlite3.Xsqlite3_result_double(tls, ctx, *(*float64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 11186 return SQLITE_OK 11187 11188 } 11189 case CARRAY_TEXT: 11190 { 11191 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11192 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8)), -1, libc.UintptrFromInt32(-1)) 11193 return SQLITE_OK 11194 11195 } 11196 } 11197 11198 } 11199 } 11200 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 11201 return SQLITE_OK 11202 } 11203 11204 func carrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 11205 var pCur uintptr = cur 11206 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid 11207 return SQLITE_OK 11208 } 11209 11210 func carrayEof(tls *libc.TLS, cur uintptr) int32 { 11211 var pCur uintptr = cur 11212 return libc.Bool32((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid > (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt) 11213 } 11214 11215 func carrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 11216 bp := tls.Alloc(8) 11217 defer tls.Free(8) 11218 11219 var pCur uintptr = pVtabCursor 11220 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = uintptr(0) 11221 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = int64(0) 11222 switch idxNum { 11223 case 1: 11224 { 11225 var pBind uintptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4048) 11226 if pBind == uintptr(0) { 11227 break 11228 } 11229 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = (*carray_bind)(unsafe.Pointer(pBind)).FaData 11230 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = sqlite3_int64((*carray_bind)(unsafe.Pointer(pBind)).FnData) 11231 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8((*carray_bind)(unsafe.Pointer(pBind)).FmFlags & 0x03) 11232 break 11233 11234 } 11235 case 2: 11236 fallthrough 11237 case 3: 11238 { 11239 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4060) 11240 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = func() int64 { 11241 if (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr != 0 { 11242 return sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 11243 } 11244 return int64(0) 11245 }() 11246 if idxNum < 3 { 11247 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8(CARRAY_INT32) 11248 } else { 11249 var i uint8 11250 var zType uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 11251 for i = uint8(0); uint64(i) < uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 11252 if sqlite3.Xsqlite3_stricmp(tls, zType, azType[i]) == 0 { 11253 break 11254 } 11255 } 11256 if uint64(i) >= uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))) { 11257 (*sqlite3_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11258 ts+4067, libc.VaList(bp, zType)) 11259 return SQLITE_ERROR 11260 } else { 11261 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = i 11262 } 11263 } 11264 break 11265 11266 } 11267 } 11268 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 11269 return SQLITE_OK 11270 } 11271 11272 func carrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 11273 var i int32 11274 var ptrIdx int32 = -1 11275 var cntIdx int32 = -1 11276 var ctypeIdx int32 = -1 11277 11278 var pConstraint uintptr 11279 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 11280 i = 0 11281 __1: 11282 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 11283 goto __3 11284 } 11285 { 11286 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 11287 goto __2 11288 } 11289 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 11290 goto __2 11291 } 11292 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 11293 case CARRAY_COLUMN_POINTER: 11294 ptrIdx = i 11295 break 11296 case CARRAY_COLUMN_COUNT: 11297 cntIdx = i 11298 break 11299 case CARRAY_COLUMN_CTYPE: 11300 ctypeIdx = i 11301 break 11302 } 11303 11304 } 11305 goto __2 11306 __2: 11307 i++ 11308 pConstraint += 12 11309 goto __1 11310 goto __3 11311 __3: 11312 ; 11313 if ptrIdx >= 0 { 11314 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).FargvIndex = 1 11315 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).Fomit = uint8(1) 11316 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 11317 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(100) 11318 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 11319 if cntIdx >= 0 { 11320 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).FargvIndex = 2 11321 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).Fomit = uint8(1) 11322 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 11323 if ctypeIdx >= 0 { 11324 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).FargvIndex = 3 11325 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).Fomit = uint8(1) 11326 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 3 11327 } 11328 } 11329 } else { 11330 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2147483647) 11331 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 11332 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 11333 } 11334 return SQLITE_OK 11335 } 11336 11337 var carrayModule = sqlite3_module{ 11338 FxConnect: 0, 11339 FxBestIndex: 0, 11340 FxDisconnect: 0, 11341 FxOpen: 0, 11342 FxClose: 0, 11343 FxFilter: 0, 11344 FxNext: 0, 11345 FxEof: 0, 11346 FxColumn: 0, 11347 FxRowid: 0, 11348 } 11349 11350 func carrayBindDel(tls *libc.TLS, pPtr uintptr) { 11351 var p uintptr = pPtr 11352 if (*carray_bind)(unsafe.Pointer(p)).FxDel != uintptr(0) { 11353 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*carray_bind)(unsafe.Pointer(p)).FxDel})).f(tls, (*carray_bind)(unsafe.Pointer(p)).FaData) 11354 } 11355 sqlite3.Xsqlite3_free(tls, p) 11356 } 11357 11358 func sqlite3_carray_bind(tls *libc.TLS, pStmt uintptr, idx int32, aData uintptr, nData int32, mFlags int32, xDestroy uintptr) int32 { 11359 var pNew uintptr 11360 var i int32 11361 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(carray_bind{}))) 11362 if pNew == uintptr(0) { 11363 if xDestroy != uintptr(0) && xDestroy != libc.UintptrFromInt32(-1) { 11364 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, aData) 11365 } 11366 return SQLITE_NOMEM 11367 } 11368 (*carray_bind)(unsafe.Pointer(pNew)).FnData = nData 11369 (*carray_bind)(unsafe.Pointer(pNew)).FmFlags = mFlags 11370 if xDestroy == libc.UintptrFromInt32(-1) { 11371 var sz sqlite3_int64 = sqlite3_int64(nData) 11372 switch mFlags & 0x03 { 11373 case CARRAY_INT32: 11374 sz = sz * int64(4) 11375 break 11376 fallthrough 11377 case CARRAY_INT64: 11378 sz = sz * int64(8) 11379 break 11380 fallthrough 11381 case CARRAY_DOUBLE: 11382 sz = sz * int64(8) 11383 break 11384 fallthrough 11385 case CARRAY_TEXT: 11386 sz = int64(uint64(sz) * uint64(unsafe.Sizeof(uintptr(0)))) 11387 break 11388 } 11389 if mFlags&0x03 == CARRAY_TEXT { 11390 for i = 0; i < nData; i++ { 11391 var z uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 11392 if z != 0 { 11393 sz = sqlite3_int64(uint64(sz) + (libc.Xstrlen(tls, z) + uint64(1))) 11394 } 11395 } 11396 } 11397 (*carray_bind)(unsafe.Pointer(pNew)).FaData = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 11398 if (*carray_bind)(unsafe.Pointer(pNew)).FaData == uintptr(0) { 11399 sqlite3.Xsqlite3_free(tls, pNew) 11400 return SQLITE_NOMEM 11401 } 11402 if mFlags&0x03 == CARRAY_TEXT { 11403 var az uintptr = (*carray_bind)(unsafe.Pointer(pNew)).FaData 11404 var z uintptr = az + uintptr(nData)*8 11405 for i = 0; i < nData; i++ { 11406 var zData uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 11407 var n sqlite3_int64 11408 if zData == uintptr(0) { 11409 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = uintptr(0) 11410 continue 11411 } 11412 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = z 11413 n = sqlite3_int64(libc.Xstrlen(tls, zData)) 11414 libc.Xmemcpy(tls, z, zData, uint64(n+int64(1))) 11415 z += uintptr(n + int64(1)) 11416 } 11417 } else { 11418 libc.Xmemcpy(tls, (*carray_bind)(unsafe.Pointer(pNew)).FaData, aData, uint64(sz)) 11419 } 11420 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 11421 } else { 11422 (*carray_bind)(unsafe.Pointer(pNew)).FaData = aData 11423 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = xDestroy 11424 } 11425 return sqlite3.Xsqlite3_bind_pointer(tls, pStmt, idx, pNew, ts+4048, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{carrayBindDel}))) 11426 } 11427 11428 func inttoptrFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11429 bp := tls.Alloc(20) 11430 defer tls.Free(20) 11431 11432 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 11433 if uint64(unsafe.Sizeof(sqlite3_int64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 11434 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 11435 } else { 11436 *(*int32)(unsafe.Pointer(bp + 16)) = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)) & int64(0xffffffff)) 11437 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 11438 } 11439 sqlite3.Xsqlite3_result_pointer(tls, context, *(*uintptr)(unsafe.Pointer(bp)), ts+4060, uintptr(0)) 11440 } 11441 11442 func sqlite3_carray_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11443 var rc int32 = SQLITE_OK 11444 _ = pApi 11445 11446 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4060, uintptr(unsafe.Pointer(&carrayModule)), uintptr(0)) 11447 if rc == SQLITE_OK { 11448 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4088, 1, SQLITE_UTF8, uintptr(0), 11449 *(*uintptr)(unsafe.Pointer(&struct { 11450 f func(*libc.TLS, uintptr, int32, uintptr) 11451 }{inttoptrFunc})), uintptr(0), uintptr(0)) 11452 } 11453 return rc 11454 } 11455 11456 type CksmVfs = sqlite3_vfs1 11457 type CksmFile1 = struct { 11458 Fbase sqlite3_file 11459 FzFName uintptr 11460 FcomputeCksm int8 11461 FverifyCksm int8 11462 FisWal int8 11463 FinCkpt int8 11464 F__ccgo_pad1 [4]byte 11465 FpPartner uintptr 11466 } 11467 11468 type CksmFile = CksmFile1 11469 11470 type u8 = uint8 11471 11472 var cksm_vfs = sqlite3_vfs{ 11473 FiVersion: 3, 11474 FmxPathname: 1024, 11475 FzName: ts + 4097, 11476 FxOpen: 0, 11477 FxDelete: 0, 11478 FxAccess: 0, 11479 FxFullPathname: 0, 11480 FxDlOpen: 0, 11481 FxDlError: 0, 11482 FxDlSym: 0, 11483 FxDlClose: 0, 11484 FxRandomness: 0, 11485 FxSleep: 0, 11486 FxCurrentTime: 0, 11487 FxGetLastError: 0, 11488 FxCurrentTimeInt64: 0, 11489 FxSetSystemCall: 0, 11490 FxGetSystemCall: 0, 11491 FxNextSystemCall: 0, 11492 } 11493 11494 var cksm_io_methods = sqlite3_io_methods{ 11495 FiVersion: 3, 11496 FxClose: 0, 11497 FxRead: 0, 11498 FxWrite: 0, 11499 FxTruncate: 0, 11500 FxSync: 0, 11501 FxFileSize: 0, 11502 FxLock: 0, 11503 FxUnlock: 0, 11504 FxCheckReservedLock: 0, 11505 FxFileControl: 0, 11506 FxSectorSize: 0, 11507 FxDeviceCharacteristics: 0, 11508 FxShmMap: 0, 11509 FxShmLock: 0, 11510 FxShmBarrier: 0, 11511 FxShmUnmap: 0, 11512 FxFetch: 0, 11513 FxUnfetch: 0, 11514 } 11515 11516 func cksmCompute(tls *libc.TLS, a uintptr, nByte int32, aOut uintptr) { 11517 bp := tls.Alloc(12) 11518 defer tls.Free(12) 11519 11520 *(*u32)(unsafe.Pointer(bp + 4)) = u32(0) 11521 *(*u32)(unsafe.Pointer(bp + 8)) = u32(0) 11522 var aData uintptr = a 11523 var aEnd uintptr = a + uintptr(nByte) 11524 *(*u32)(unsafe.Pointer(bp)) = u32(1) 11525 11526 if 1 == int32(*(*u8)(unsafe.Pointer(bp))) { 11527 for __ccgo := true; __ccgo; __ccgo = aData < aEnd { 11528 *(*u32)(unsafe.Pointer(bp + 4)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 8)) 11529 *(*u32)(unsafe.Pointer(bp + 8)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 4)) 11530 } 11531 } else { 11532 for __ccgo1 := true; __ccgo1; __ccgo1 = aData < aEnd { 11533 *(*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)) 11534 *(*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)) 11535 aData += 4 * uintptr(2) 11536 } 11537 *(*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 11538 *(*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 11539 } 11540 libc.Xmemcpy(tls, aOut, bp+4, uint64(4)) 11541 libc.Xmemcpy(tls, aOut+uintptr(4), bp+8, uint64(4)) 11542 } 11543 11544 func cksmVerifyFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11545 bp := tls.Alloc(8) 11546 defer tls.Free(8) 11547 11548 var nByte int32 11549 var data uintptr 11550 11551 data = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 11552 if data == uintptr(0) { 11553 return 11554 } 11555 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_BLOB { 11556 return 11557 } 11558 nByte = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 11559 if nByte < 512 || nByte > 65536 || nByte&(nByte-1) != 0 { 11560 return 11561 } 11562 cksmCompute(tls, data, nByte-8, bp) 11563 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(libc.Xmemcmp(tls, data+uintptr(nByte)-uintptr(8), bp, uint64(8)) == 0)) 11564 } 11565 11566 func cksmClose(tls *libc.TLS, pFile uintptr) int32 { 11567 var p uintptr = pFile 11568 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11569 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = uintptr(0) 11570 (*CksmFile)(unsafe.Pointer(p)).FpPartner = uintptr(0) 11571 } 11572 pFile = pFile + uintptr(1)*32 11573 return (*struct { 11574 f func(*libc.TLS, uintptr) int32 11575 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 11576 } 11577 11578 func cksmSetFlags(tls *libc.TLS, p uintptr, hasCorrectReserveSize int32) { 11579 if hasCorrectReserveSize != int32((*CksmFile)(unsafe.Pointer(p)).FcomputeCksm) { 11580 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = libc.AssignPtrInt8(p+17, int8(hasCorrectReserveSize)) 11581 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11582 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = int8(hasCorrectReserveSize) 11583 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm = int8(hasCorrectReserveSize) 11584 } 11585 } 11586 } 11587 11588 func cksmRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 11589 bp := tls.Alloc(24) 11590 defer tls.Free(24) 11591 11592 var rc int32 11593 var p uintptr = pFile 11594 pFile = pFile + uintptr(1)*32 11595 rc = (*struct { 11596 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 11597 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, zBuf, iAmt, iOfst) 11598 if rc == SQLITE_OK { 11599 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 11600 var d uintptr = zBuf 11601 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 11602 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 11603 } 11604 11605 if iAmt >= 512 && 11606 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm != 0 && 11607 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 11608 cksmCompute(tls, zBuf, iAmt-8, bp+16) 11609 if libc.Xmemcmp(tls, zBuf+uintptr(iAmt)-uintptr(8), bp+16, uint64(8)) != 0 { 11610 sqlite3.Xsqlite3_log(tls, SQLITE_IOERR|int32(32)<<8, 11611 ts+4109, 11612 libc.VaList(bp, iOfst, (*CksmFile)(unsafe.Pointer(p)).FzFName)) 11613 rc = SQLITE_IOERR | int32(32)<<8 11614 } 11615 } 11616 } 11617 return rc 11618 } 11619 11620 func cksmWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 11621 var p uintptr = pFile 11622 pFile = pFile + uintptr(1)*32 11623 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 11624 var d uintptr = zBuf 11625 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 11626 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 11627 } 11628 11629 if iAmt >= 512 && 11630 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && 11631 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 11632 cksmCompute(tls, zBuf, iAmt-8, zBuf+uintptr(iAmt)-uintptr(8)) 11633 } 11634 return (*struct { 11635 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 11636 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, zBuf, iAmt, iOfst) 11637 } 11638 11639 func cksmTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 11640 pFile = pFile + uintptr(1)*32 11641 return (*struct { 11642 f func(*libc.TLS, uintptr, sqlite3_int64) int32 11643 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxTruncate})).f(tls, pFile, size) 11644 } 11645 11646 func cksmSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 11647 pFile = pFile + uintptr(1)*32 11648 return (*struct { 11649 f func(*libc.TLS, uintptr, int32) int32 11650 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 11651 } 11652 11653 func cksmFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 11654 var p uintptr = pFile 11655 pFile = p + uintptr(1)*32 11656 return (*struct { 11657 f func(*libc.TLS, uintptr, uintptr) int32 11658 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileSize})).f(tls, pFile, pSize) 11659 } 11660 11661 func cksmLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 11662 pFile = pFile + uintptr(1)*32 11663 return (*struct { 11664 f func(*libc.TLS, uintptr, int32) int32 11665 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 11666 } 11667 11668 func cksmUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 11669 pFile = pFile + uintptr(1)*32 11670 return (*struct { 11671 f func(*libc.TLS, uintptr, int32) int32 11672 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 11673 } 11674 11675 func cksmCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 11676 pFile = pFile + uintptr(1)*32 11677 return (*struct { 11678 f func(*libc.TLS, uintptr, uintptr) int32 11679 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 11680 } 11681 11682 func cksmFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 11683 bp := tls.Alloc(16) 11684 defer tls.Free(16) 11685 11686 var rc int32 11687 var p uintptr = pFile 11688 pFile = pFile + uintptr(1)*32 11689 if op == SQLITE_FCNTL_PRAGMA { 11690 var azArg uintptr = pArg 11691 11692 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4144) == 0 { 11693 var zArg uintptr = *(*uintptr)(unsafe.Pointer(azArg + 2*8)) 11694 if zArg != uintptr(0) { 11695 if int32(*(*int8)(unsafe.Pointer(zArg))) >= '1' && int32(*(*int8)(unsafe.Pointer(zArg))) <= '9' || 11696 sqlite3.Xsqlite3_strlike(tls, ts+4166, zArg, uint32(0)) == 0 || 11697 sqlite3.Xsqlite3_stricmp(tls, ts+4174, zArg) == 0 || 11698 sqlite3.Xsqlite3_stricmp(tls, ts+4178, zArg) == 0 { 11699 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm 11700 } else { 11701 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = int8(0) 11702 } 11703 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11704 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FverifyCksm 11705 } 11706 } 11707 *(*uintptr)(unsafe.Pointer(azArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, int32((*CksmFile)(unsafe.Pointer(p)).FverifyCksm))) 11708 return SQLITE_OK 11709 } else if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && *(*uintptr)(unsafe.Pointer(azArg + 2*8)) != uintptr(0) && 11710 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4181) == 0 { 11711 return SQLITE_OK 11712 } 11713 } else if op == SQLITE_FCNTL_CKPT_START || op == SQLITE_FCNTL_CKPT_DONE { 11714 (*CksmFile)(unsafe.Pointer(p)).FinCkpt = int8(libc.Bool32(op == SQLITE_FCNTL_CKPT_START)) 11715 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11716 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FinCkpt = (*CksmFile)(unsafe.Pointer(p)).FinCkpt 11717 } 11718 } else if op == SQLITE_FCNTL_CKSM_FILE { 11719 var ppFile uintptr = pArg 11720 *(*uintptr)(unsafe.Pointer(ppFile)) = p 11721 return SQLITE_OK 11722 } 11723 rc = (*struct { 11724 f func(*libc.TLS, uintptr, int32, uintptr) int32 11725 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 11726 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 11727 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+4191, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(pArg)))) 11728 } 11729 return rc 11730 } 11731 11732 func cksmSectorSize(tls *libc.TLS, pFile uintptr) int32 { 11733 pFile = pFile + uintptr(1)*32 11734 return (*struct { 11735 f func(*libc.TLS, uintptr) int32 11736 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 11737 } 11738 11739 func cksmDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 11740 pFile = pFile + uintptr(1)*32 11741 return (*struct { 11742 f func(*libc.TLS, uintptr) int32 11743 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 11744 } 11745 11746 func cksmShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 11747 pFile = pFile + uintptr(1)*32 11748 return (*struct { 11749 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 11750 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 11751 } 11752 11753 func cksmShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 11754 pFile = pFile + uintptr(1)*32 11755 return (*struct { 11756 f func(*libc.TLS, uintptr, int32, int32, int32) int32 11757 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 11758 } 11759 11760 func cksmShmBarrier(tls *libc.TLS, pFile uintptr) { 11761 pFile = pFile + uintptr(1)*32 11762 (*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) 11763 } 11764 11765 func cksmShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 11766 pFile = pFile + uintptr(1)*32 11767 return (*struct { 11768 f func(*libc.TLS, uintptr, int32) int32 11769 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 11770 } 11771 11772 func cksmFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 11773 var p uintptr = pFile 11774 if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 { 11775 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 11776 return SQLITE_OK 11777 } 11778 pFile = pFile + uintptr(1)*32 11779 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 { 11780 return (*struct { 11781 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 11782 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch})).f(tls, pFile, iOfst, iAmt, pp) 11783 } 11784 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 11785 return SQLITE_OK 11786 } 11787 11788 func cksmUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 11789 pFile = pFile + uintptr(1)*32 11790 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 { 11791 return (*struct { 11792 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 11793 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch})).f(tls, pFile, iOfst, pPage) 11794 } 11795 return SQLITE_OK 11796 } 11797 11798 func cksmOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 11799 bp := tls.Alloc(8) 11800 defer tls.Free(8) 11801 11802 var p uintptr 11803 var pSubFile uintptr 11804 var pSubVfs uintptr 11805 var rc int32 11806 11807 pSubVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 11808 if !(flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0) { 11809 goto __1 11810 } 11811 return (*struct { 11812 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 11813 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pFile, flags, pOutFlags) 11814 __1: 11815 ; 11816 p = pFile 11817 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CksmFile{}))) 11818 pSubFile = pFile + uintptr(1)*32 11819 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&cksm_io_methods)) 11820 rc = (*struct { 11821 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 11822 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pSubFile, flags, pOutFlags) 11823 if !(rc != 0) { 11824 goto __2 11825 } 11826 goto cksm_open_done 11827 __2: 11828 ; 11829 if !(flags&SQLITE_OPEN_WAL != 0) { 11830 goto __3 11831 } 11832 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_database_file_object(tls, zName) 11833 rc = (*struct { 11834 f func(*libc.TLS, uintptr, int32, uintptr) int32 11835 })(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) 11836 11837 (*CksmFile)(unsafe.Pointer(p)).FpPartner = *(*uintptr)(unsafe.Pointer(bp)) 11838 11839 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = p 11840 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(1) 11841 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm 11842 goto __4 11843 __3: 11844 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(0) 11845 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = int8(0) 11846 __4: 11847 ; 11848 (*CksmFile)(unsafe.Pointer(p)).FzFName = zName 11849 cksm_open_done: 11850 if !(rc != 0) { 11851 goto __5 11852 } 11853 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 11854 __5: 11855 ; 11856 return rc 11857 } 11858 11859 func cksmDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 11860 return (*struct { 11861 f func(*libc.TLS, uintptr, uintptr, int32) int32 11862 })(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) 11863 } 11864 11865 func cksmAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 11866 return (*struct { 11867 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 11868 })(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) 11869 } 11870 11871 func cksmFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 11872 return (*struct { 11873 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 11874 })(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) 11875 } 11876 11877 func cksmDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 11878 return (*struct { 11879 f func(*libc.TLS, uintptr, uintptr) uintptr 11880 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 11881 } 11882 11883 func cksmDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 11884 (*struct { 11885 f func(*libc.TLS, uintptr, int32, uintptr) 11886 })(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) 11887 } 11888 11889 func cksmDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 11890 return (*struct { 11891 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 11892 })(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) 11893 } 11894 11895 func cksmDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 11896 (*struct { 11897 f func(*libc.TLS, uintptr, uintptr) 11898 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 11899 } 11900 11901 func cksmRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 11902 return (*struct { 11903 f func(*libc.TLS, uintptr, int32, uintptr) int32 11904 })(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) 11905 } 11906 11907 func cksmSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 11908 return (*struct { 11909 f func(*libc.TLS, uintptr, int32) int32 11910 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 11911 } 11912 11913 func cksmCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 11914 return (*struct { 11915 f func(*libc.TLS, uintptr, uintptr) int32 11916 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 11917 } 11918 11919 func cksmGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 11920 return (*struct { 11921 f func(*libc.TLS, uintptr, int32, uintptr) int32 11922 })(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) 11923 } 11924 11925 func cksmCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 11926 bp := tls.Alloc(8) 11927 defer tls.Free(8) 11928 11929 var pOrig uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 11930 var rc int32 11931 11932 if (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64 != 0 { 11933 rc = (*struct { 11934 f func(*libc.TLS, uintptr, uintptr) int32 11935 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64})).f(tls, pOrig, p) 11936 } else { 11937 rc = (*struct { 11938 f func(*libc.TLS, uintptr, uintptr) int32 11939 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTime})).f(tls, pOrig, bp) 11940 *(*sqlite3_int64)(unsafe.Pointer(p)) = libc.Int64FromFloat64(*(*float64)(unsafe.Pointer(bp)) * 86400000.0) 11941 } 11942 return rc 11943 } 11944 11945 func cksmSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 11946 return (*struct { 11947 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 11948 })(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) 11949 } 11950 11951 func cksmGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 11952 return (*struct { 11953 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 11954 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 11955 } 11956 11957 func cksmNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 11958 return (*struct { 11959 f func(*libc.TLS, uintptr, uintptr) uintptr 11960 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 11961 } 11962 11963 func cksmRegisterFunc(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11964 var rc int32 11965 if db == uintptr(0) { 11966 return SQLITE_OK 11967 } 11968 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4199, 1, 11969 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 11970 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 11971 f func(*libc.TLS, uintptr, int32, uintptr) 11972 }{cksmVerifyFunc})), uintptr(0), uintptr(0)) 11973 return rc 11974 } 11975 11976 func cksmRegisterVfs(tls *libc.TLS) int32 { 11977 var rc int32 = SQLITE_OK 11978 var pOrig uintptr 11979 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != uintptr(0) { 11980 return SQLITE_OK 11981 } 11982 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 11983 if pOrig == uintptr(0) { 11984 return SQLITE_ERROR 11985 } 11986 cksm_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 11987 cksm_vfs.FpAppData = pOrig 11988 cksm_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(CksmFile{}))) 11989 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&cksm_vfs)), 1) 11990 if rc == SQLITE_OK { 11991 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 11992 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 11993 }{cksmRegisterFunc}))) 11994 } 11995 return rc 11996 } 11997 11998 func sqlite3_register_cksumvfs(tls *libc.TLS, NotUsed uintptr) int32 { 11999 _ = NotUsed 12000 return cksmRegisterVfs(tls) 12001 } 12002 12003 func sqlite3_unregister_cksumvfs(tls *libc.TLS) int32 { 12004 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != 0 { 12005 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&cksm_vfs))) 12006 sqlite3.Xsqlite3_cancel_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 12007 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 12008 }{cksmRegisterFunc}))) 12009 } 12010 return SQLITE_OK 12011 } 12012 12013 type closure_vtab1 = struct { 12014 Fbase sqlite3_vtab 12015 FzDb uintptr 12016 FzSelf uintptr 12017 FzTableName uintptr 12018 FzIdColumn uintptr 12019 FzParentColumn uintptr 12020 Fdb uintptr 12021 FnCursor int32 12022 F__ccgo_pad1 [4]byte 12023 } 12024 12025 type closure_vtab = closure_vtab1 12026 type closure_cursor1 = struct { 12027 Fbase sqlite3_vtab_cursor 12028 FpVtab uintptr 12029 FzTableName uintptr 12030 FzIdColumn uintptr 12031 FzParentColumn uintptr 12032 FpCurrent uintptr 12033 FpClosure uintptr 12034 } 12035 12036 type closure_cursor = closure_cursor1 12037 type closure_queue1 = struct { 12038 FpFirst uintptr 12039 FpLast uintptr 12040 } 12041 12042 type closure_queue = closure_queue1 12043 type closure_avl1 = struct { 12044 Fid sqlite3_int64 12045 FiGeneration int32 12046 F__ccgo_pad1 [4]byte 12047 FpList uintptr 12048 FpBefore uintptr 12049 FpAfter uintptr 12050 FpUp uintptr 12051 Fheight int16 12052 Fimbalance int16 12053 F__ccgo_pad2 [4]byte 12054 } 12055 12056 type closure_avl = closure_avl1 12057 12058 func closureAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 12059 var hBefore int16 12060 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12061 hBefore = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 12062 } else { 12063 hBefore = int16(0) 12064 } 12065 var hAfter int16 12066 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12067 hAfter = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 12068 } else { 12069 hAfter = int16(0) 12070 } 12071 (*closure_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 12072 (*closure_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 12073 if int32(hBefore) > int32(hAfter) { 12074 return int32(hBefore) 12075 } 12076 return int32(hAfter) 12077 }() + 1) 12078 } 12079 12080 func closureAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 12081 var pB uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpBefore 12082 var pY uintptr = (*closure_avl)(unsafe.Pointer(pB)).FpAfter 12083 (*closure_avl)(unsafe.Pointer(pB)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 12084 (*closure_avl)(unsafe.Pointer(pB)).FpAfter = pP 12085 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pB 12086 (*closure_avl)(unsafe.Pointer(pP)).FpBefore = pY 12087 if pY != 0 { 12088 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 12089 } 12090 closureAvlRecomputeHeight(tls, pP) 12091 closureAvlRecomputeHeight(tls, pB) 12092 return pB 12093 } 12094 12095 func closureAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 12096 var pA uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpAfter 12097 var pY uintptr = (*closure_avl)(unsafe.Pointer(pA)).FpBefore 12098 (*closure_avl)(unsafe.Pointer(pA)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 12099 (*closure_avl)(unsafe.Pointer(pA)).FpBefore = pP 12100 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pA 12101 (*closure_avl)(unsafe.Pointer(pP)).FpAfter = pY 12102 if pY != 0 { 12103 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 12104 } 12105 closureAvlRecomputeHeight(tls, pP) 12106 closureAvlRecomputeHeight(tls, pA) 12107 return pA 12108 } 12109 12110 func closureAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 12111 var pUp uintptr = (*closure_avl)(unsafe.Pointer(p)).FpUp 12112 if pUp == uintptr(0) { 12113 return pp 12114 } 12115 if (*closure_avl)(unsafe.Pointer(pUp)).FpAfter == p { 12116 return pUp + 32 12117 } 12118 return pUp + 24 12119 } 12120 12121 func closureAvlBalance(tls *libc.TLS, p uintptr) uintptr { 12122 bp := tls.Alloc(8) 12123 defer tls.Free(8) 12124 *(*uintptr)(unsafe.Pointer(bp)) = p 12125 12126 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 12127 var pp uintptr 12128 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 12129 closureAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 12130 if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 12131 var pB uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 12132 if int32((*closure_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 12133 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = closureAvlRotateAfter(tls, pB) 12134 } 12135 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12136 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12137 } else if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 12138 var pA uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 12139 if int32((*closure_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 12140 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = closureAvlRotateBefore(tls, pA) 12141 } 12142 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12143 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12144 } 12145 pTop = *(*uintptr)(unsafe.Pointer(bp)) 12146 *(*uintptr)(unsafe.Pointer(bp)) = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 12147 } 12148 return pTop 12149 } 12150 12151 func closureAvlSearch(tls *libc.TLS, p uintptr, id sqlite3_int64) uintptr { 12152 for p != 0 && id != (*closure_avl)(unsafe.Pointer(p)).Fid { 12153 if id < (*closure_avl)(unsafe.Pointer(p)).Fid { 12154 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12155 } else { 12156 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 12157 } 12158 } 12159 return p 12160 } 12161 12162 func closureAvlFirst(tls *libc.TLS, p uintptr) uintptr { 12163 if p != 0 { 12164 for (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12165 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12166 } 12167 } 12168 return p 12169 } 12170 12171 func closureAvlNext(tls *libc.TLS, p uintptr) uintptr { 12172 var pPrev uintptr = uintptr(0) 12173 for p != 0 && (*closure_avl)(unsafe.Pointer(p)).FpAfter == pPrev { 12174 pPrev = p 12175 p = (*closure_avl)(unsafe.Pointer(p)).FpUp 12176 } 12177 if p != 0 && pPrev == uintptr(0) { 12178 p = closureAvlFirst(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter) 12179 } 12180 return p 12181 } 12182 12183 func closureAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 12184 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 12185 if p == uintptr(0) { 12186 p = pNew 12187 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 12188 } else { 12189 for p != 0 { 12190 if (*closure_avl)(unsafe.Pointer(pNew)).Fid < (*closure_avl)(unsafe.Pointer(p)).Fid { 12191 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12192 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12193 } else { 12194 (*closure_avl)(unsafe.Pointer(p)).FpBefore = pNew 12195 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 12196 break 12197 } 12198 } else if (*closure_avl)(unsafe.Pointer(pNew)).Fid > (*closure_avl)(unsafe.Pointer(p)).Fid { 12199 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12200 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 12201 } else { 12202 (*closure_avl)(unsafe.Pointer(p)).FpAfter = pNew 12203 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 12204 break 12205 } 12206 } else { 12207 return p 12208 } 12209 } 12210 } 12211 (*closure_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 12212 (*closure_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 12213 (*closure_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 12214 (*closure_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 12215 *(*uintptr)(unsafe.Pointer(ppHead)) = closureAvlBalance(tls, p) 12216 return uintptr(0) 12217 } 12218 12219 func closureAvlDestroy(tls *libc.TLS, p uintptr, xDestroy uintptr) { 12220 if p != 0 { 12221 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpBefore, xDestroy) 12222 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter, xDestroy) 12223 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, p) 12224 } 12225 } 12226 12227 func queuePush(tls *libc.TLS, pQueue uintptr, pNode uintptr) { 12228 (*closure_avl)(unsafe.Pointer(pNode)).FpList = uintptr(0) 12229 if (*closure_queue)(unsafe.Pointer(pQueue)).FpLast != 0 { 12230 (*closure_avl)(unsafe.Pointer((*closure_queue)(unsafe.Pointer(pQueue)).FpLast)).FpList = pNode 12231 } else { 12232 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = pNode 12233 } 12234 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = pNode 12235 } 12236 12237 func queuePull(tls *libc.TLS, pQueue uintptr) uintptr { 12238 var p uintptr = (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst 12239 if p != 0 { 12240 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = (*closure_avl)(unsafe.Pointer(p)).FpList 12241 if (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst == uintptr(0) { 12242 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = uintptr(0) 12243 } 12244 } 12245 return p 12246 } 12247 12248 func closureDequote(tls *libc.TLS, zIn uintptr) uintptr { 12249 var nIn sqlite3_int64 12250 var zOut uintptr 12251 12252 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 12253 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 12254 if zOut != 0 { 12255 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 12256 12257 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 12258 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 12259 } else { 12260 var iOut int32 = 0 12261 var iIn int32 12262 12263 if int32(q) == '[' { 12264 q = int8(']') 12265 } 12266 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 12267 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 12268 iIn++ 12269 } 12270 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 12271 } 12272 } 12273 12274 } 12275 return zOut 12276 } 12277 12278 func closureFree(tls *libc.TLS, p uintptr) { 12279 if p != 0 { 12280 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzDb) 12281 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzSelf) 12282 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzTableName) 12283 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzIdColumn) 12284 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzParentColumn) 12285 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 12286 sqlite3.Xsqlite3_free(tls, p) 12287 } 12288 } 12289 12290 func closureDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 12291 var p uintptr = pVtab 12292 12293 closureFree(tls, p) 12294 return SQLITE_OK 12295 } 12296 12297 func closureValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 12298 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 12299 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 12300 var i int32 12301 if nStr < nKey+1 { 12302 return uintptr(0) 12303 } 12304 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 12305 return uintptr(0) 12306 } 12307 for i = nKey; __sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i))))), uint64(X_CTYPE_S)) != 0; i++ { 12308 } 12309 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 12310 return uintptr(0) 12311 } 12312 i++ 12313 for __sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i))))), uint64(X_CTYPE_S)) != 0 { 12314 i++ 12315 } 12316 return zStr + uintptr(i) 12317 } 12318 12319 func closureConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 12320 bp := tls.Alloc(24) 12321 defer tls.Free(24) 12322 12323 var rc int32 12324 var pNew uintptr 12325 var zDb uintptr 12326 var zVal uintptr 12327 var i int32 12328 rc = SQLITE_OK 12329 pNew = uintptr(0) 12330 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 12331 12332 _ = pAux 12333 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12334 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_vtab{}))) 12335 if !(pNew == uintptr(0)) { 12336 goto __1 12337 } 12338 return SQLITE_NOMEM 12339 __1: 12340 ; 12341 rc = SQLITE_NOMEM 12342 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 12343 (*closure_vtab)(unsafe.Pointer(pNew)).Fdb = db 12344 (*closure_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zDb)) 12345 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 12346 goto __2 12347 } 12348 goto closureConnectError 12349 __2: 12350 ; 12351 (*closure_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 12352 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 12353 goto __3 12354 } 12355 goto closureConnectError 12356 __3: 12357 ; 12358 i = 3 12359 __4: 12360 if !(i < argc) { 12361 goto __6 12362 } 12363 zVal = closureValueOfKey(tls, ts+4215, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12364 if !(zVal != 0) { 12365 goto __7 12366 } 12367 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName) 12368 (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName = closureDequote(tls, zVal) 12369 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0)) { 12370 goto __8 12371 } 12372 goto closureConnectError 12373 __8: 12374 ; 12375 goto __5 12376 __7: 12377 ; 12378 zVal = closureValueOfKey(tls, ts+4225, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12379 if !(zVal != 0) { 12380 goto __9 12381 } 12382 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn) 12383 (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn = closureDequote(tls, zVal) 12384 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn == uintptr(0)) { 12385 goto __10 12386 } 12387 goto closureConnectError 12388 __10: 12389 ; 12390 goto __5 12391 __9: 12392 ; 12393 zVal = closureValueOfKey(tls, ts+4234, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12394 if !(zVal != 0) { 12395 goto __11 12396 } 12397 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn) 12398 (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn = closureDequote(tls, zVal) 12399 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn == uintptr(0)) { 12400 goto __12 12401 } 12402 goto closureConnectError 12403 __12: 12404 ; 12405 goto __5 12406 __11: 12407 ; 12408 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 12409 closureFree(tls, pNew) 12410 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12411 return SQLITE_ERROR 12412 goto __5 12413 __5: 12414 i++ 12415 goto __4 12416 goto __6 12417 __6: 12418 ; 12419 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 12420 ts+4247) 12421 if !(rc != SQLITE_OK) { 12422 goto __13 12423 } 12424 closureFree(tls, pNew) 12425 __13: 12426 ; 12427 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 12428 return rc 12429 12430 closureConnectError: 12431 closureFree(tls, pNew) 12432 return rc 12433 } 12434 12435 func closureOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 12436 var p uintptr = pVTab 12437 var pCur uintptr 12438 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_cursor{}))) 12439 if pCur == uintptr(0) { 12440 return SQLITE_NOMEM 12441 } 12442 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(closure_cursor{}))) 12443 (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab = p 12444 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 12445 (*closure_vtab)(unsafe.Pointer(p)).FnCursor++ 12446 return SQLITE_OK 12447 } 12448 12449 func closureClearCursor(tls *libc.TLS, pCur uintptr) { 12450 closureAvlDestroy(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 12451 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName) 12452 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn) 12453 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn) 12454 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = uintptr(0) 12455 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = uintptr(0) 12456 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = uintptr(0) 12457 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 12458 (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure = uintptr(0) 12459 } 12460 12461 func closureClose(tls *libc.TLS, cur uintptr) int32 { 12462 var pCur uintptr = cur 12463 closureClearCursor(tls, pCur) 12464 (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 12465 sqlite3.Xsqlite3_free(tls, pCur) 12466 return SQLITE_OK 12467 } 12468 12469 func closureNext(tls *libc.TLS, cur uintptr) int32 { 12470 var pCur uintptr = cur 12471 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlNext(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent) 12472 return SQLITE_OK 12473 } 12474 12475 func closureInsertNode(tls *libc.TLS, pQueue uintptr, pCur uintptr, id sqlite3_int64, iGeneration int32) int32 { 12476 var pNew uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_avl{}))) 12477 if pNew == uintptr(0) { 12478 return SQLITE_NOMEM 12479 } 12480 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_avl{}))) 12481 (*closure_avl)(unsafe.Pointer(pNew)).Fid = id 12482 (*closure_avl)(unsafe.Pointer(pNew)).FiGeneration = iGeneration 12483 closureAvlInsert(tls, pCur+48, pNew) 12484 queuePush(tls, pQueue, pNew) 12485 return SQLITE_OK 12486 } 12487 12488 func closureFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 12489 bp := tls.Alloc(96) 12490 defer tls.Free(96) 12491 12492 var pCur uintptr = pVtabCursor 12493 var pVtab uintptr = (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab 12494 var iRoot sqlite3_int64 12495 var mxGen int32 = 999999999 12496 var zSql uintptr 12497 12498 var pAvl uintptr 12499 var rc int32 = SQLITE_OK 12500 var zTableName uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName 12501 var zIdColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn 12502 var zParentColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn 12503 12504 _ = idxStr 12505 _ = argc 12506 closureClearCursor(tls, pCur) 12507 libc.Xmemset(tls, bp+72, 0, uint64(unsafe.Sizeof(closure_queue{}))) 12508 if idxNum&1 == 0 { 12509 return SQLITE_OK 12510 } 12511 iRoot = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 12512 if idxNum&0x000f0 != 0 { 12513 mxGen = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>4&0x0f)*8))) 12514 if idxNum&0x00002 != 0 { 12515 mxGen-- 12516 } 12517 } 12518 if idxNum&0x00f00 != 0 { 12519 zTableName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>8&0x0f)*8))) 12520 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 12521 } 12522 if idxNum&0x0f000 != 0 { 12523 zIdColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>12&0x0f)*8))) 12524 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zIdColumn)) 12525 } 12526 if idxNum&0x0f0000 != 0 { 12527 zParentColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>16&0x0f)*8))) 12528 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zParentColumn)) 12529 } 12530 12531 zSql = sqlite3.Xsqlite3_mprintf(tls, 12532 ts+4337, 12533 libc.VaList(bp+24, zTableName, zIdColumn, zTableName, zTableName, zParentColumn)) 12534 if zSql == uintptr(0) { 12535 return SQLITE_NOMEM 12536 } else { 12537 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, bp+88, uintptr(0)) 12538 sqlite3.Xsqlite3_free(tls, zSql) 12539 if rc != 0 { 12540 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fbase.FzErrMsg) 12541 (*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))) 12542 return rc 12543 } 12544 } 12545 if rc == SQLITE_OK { 12546 rc = closureInsertNode(tls, bp+72, pCur, iRoot, 0) 12547 } 12548 for libc.AssignUintptr(&pAvl, queuePull(tls, bp+72)) != uintptr(0) { 12549 if (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration >= mxGen { 12550 continue 12551 } 12552 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 1, (*closure_avl)(unsafe.Pointer(pAvl)).Fid) 12553 for rc == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) == SQLITE_ROW { 12554 if sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) == SQLITE_INTEGER { 12555 var iNew sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) 12556 if closureAvlSearch(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, iNew) == uintptr(0) { 12557 rc = closureInsertNode(tls, bp+72, pCur, iNew, (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration+1) 12558 } 12559 } 12560 } 12561 sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 12562 } 12563 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 12564 if rc == SQLITE_OK { 12565 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlFirst(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure) 12566 } 12567 12568 return rc 12569 } 12570 12571 func closureColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 12572 var pCur uintptr = cur 12573 switch i { 12574 case CLOSURE_COL_ID: 12575 { 12576 sqlite3.Xsqlite3_result_int64(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid) 12577 break 12578 12579 } 12580 case CLOSURE_COL_DEPTH: 12581 { 12582 sqlite3.Xsqlite3_result_int(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FiGeneration) 12583 break 12584 12585 } 12586 case CLOSURE_COL_ROOT: 12587 { 12588 sqlite3.Xsqlite3_result_null(tls, ctx) 12589 break 12590 12591 } 12592 case CLOSURE_COL_TABLENAME: 12593 { 12594 sqlite3.Xsqlite3_result_text(tls, ctx, 12595 func() uintptr { 12596 if (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName != 0 { 12597 return (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName 12598 } 12599 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzTableName 12600 }(), 12601 -1, libc.UintptrFromInt32(-1)) 12602 break 12603 12604 } 12605 case CLOSURE_COL_IDCOLUMN: 12606 { 12607 sqlite3.Xsqlite3_result_text(tls, ctx, 12608 func() uintptr { 12609 if (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn != 0 { 12610 return (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn 12611 } 12612 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzIdColumn 12613 }(), 12614 -1, libc.UintptrFromInt32(-1)) 12615 break 12616 12617 } 12618 case CLOSURE_COL_PARENTCOLUMN: 12619 { 12620 sqlite3.Xsqlite3_result_text(tls, ctx, 12621 func() uintptr { 12622 if (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn != 0 { 12623 return (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn 12624 } 12625 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzParentColumn 12626 }(), 12627 -1, libc.UintptrFromInt32(-1)) 12628 break 12629 12630 } 12631 } 12632 return SQLITE_OK 12633 } 12634 12635 func closureRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 12636 var pCur uintptr = cur 12637 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid 12638 return SQLITE_OK 12639 } 12640 12641 func closureEof(tls *libc.TLS, cur uintptr) int32 { 12642 var pCur uintptr = cur 12643 return libc.Bool32((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 12644 } 12645 12646 func closureBestIndex(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) int32 { 12647 var iPlan int32 = 0 12648 var i int32 12649 var idx int32 = 1 12650 var pConstraint uintptr 12651 var pVtab uintptr = pTab 12652 var rCost float64 = 10000000.0 12653 12654 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 12655 i = 0 12656 __1: 12657 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 12658 goto __3 12659 } 12660 { 12661 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 12662 goto __2 12663 } 12664 if iPlan&1 == 0 && 12665 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_ROOT && 12666 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12667 iPlan = iPlan | 1 12668 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 12669 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12670 rCost = rCost / 100.0 12671 } 12672 if iPlan&0x0000f0 == 0 && 12673 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_DEPTH && 12674 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 12675 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE || 12676 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 12677 iPlan = iPlan | idx<<4 12678 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12679 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 12680 iPlan = iPlan | 0x000002 12681 } 12682 rCost = rCost / 5.0 12683 } 12684 if iPlan&0x000f00 == 0 && 12685 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_TABLENAME && 12686 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12687 iPlan = iPlan | idx<<8 12688 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12689 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12690 rCost = rCost / 5.0 12691 } 12692 if iPlan&0x00f000 == 0 && 12693 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_IDCOLUMN && 12694 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12695 iPlan = iPlan | idx<<12 12696 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12697 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12698 } 12699 if iPlan&0x0f0000 == 0 && 12700 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_PARENTCOLUMN && 12701 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12702 iPlan = iPlan | idx<<16 12703 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12704 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12705 } 12706 12707 } 12708 goto __2 12709 __2: 12710 i++ 12711 pConstraint += 12 12712 goto __1 12713 goto __3 12714 __3: 12715 ; 12716 if (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName == uintptr(0) && iPlan&0x000f00 == 0 || 12717 (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn == uintptr(0) && iPlan&0x00f000 == 0 || 12718 (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn == uintptr(0) && iPlan&0x0f0000 == 0 { 12719 iPlan = 0 12720 } 12721 if iPlan&1 == 0 { 12722 rCost = rCost * 1e30 12723 i = 0 12724 __4: 12725 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 12726 goto __6 12727 } 12728 { 12729 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 0 12730 12731 } 12732 goto __5 12733 __5: 12734 i++ 12735 pConstraint += 12 12736 goto __4 12737 goto __6 12738 __6: 12739 ; 12740 iPlan = 0 12741 } 12742 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 12743 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 12744 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == CLOSURE_COL_ID && 12745 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 12746 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 12747 } 12748 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 12749 12750 return SQLITE_OK 12751 } 12752 12753 var closureModule = sqlite3_module{ 12754 FxCreate: 0, 12755 FxConnect: 0, 12756 FxBestIndex: 0, 12757 FxDisconnect: 0, 12758 FxDestroy: 0, 12759 FxOpen: 0, 12760 FxClose: 0, 12761 FxFilter: 0, 12762 FxNext: 0, 12763 FxEof: 0, 12764 FxColumn: 0, 12765 FxRowid: 0, 12766 } 12767 12768 func sqlite3_closure_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 12769 var rc int32 = SQLITE_OK 12770 _ = pApi 12771 12772 _ = pzErrMsg 12773 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4383, uintptr(unsafe.Pointer(&closureModule)), uintptr(0)) 12774 return rc 12775 } 12776 12777 type CsvReader1 = struct { 12778 Fin uintptr 12779 Fz uintptr 12780 Fn int32 12781 FnAlloc int32 12782 FnLine int32 12783 FbNotFirst int32 12784 FcTerm int32 12785 F__ccgo_pad1 [4]byte 12786 FiIn size_t 12787 FnIn size_t 12788 FzIn uintptr 12789 FzErr [200]int8 12790 } 12791 12792 type CsvReader = CsvReader1 12793 12794 func csv_reader_init(tls *libc.TLS, p uintptr) { 12795 (*CsvReader)(unsafe.Pointer(p)).Fin = uintptr(0) 12796 (*CsvReader)(unsafe.Pointer(p)).Fz = uintptr(0) 12797 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12798 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = 0 12799 (*CsvReader)(unsafe.Pointer(p)).FnLine = 0 12800 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 0 12801 (*CsvReader)(unsafe.Pointer(p)).FnIn = uint64(0) 12802 (*CsvReader)(unsafe.Pointer(p)).FzIn = uintptr(0) 12803 *(*int8)(unsafe.Pointer(p + 64)) = int8(0) 12804 } 12805 12806 func csv_reader_reset(tls *libc.TLS, p uintptr) { 12807 if (*CsvReader)(unsafe.Pointer(p)).Fin != 0 { 12808 libc.Xfclose(tls, (*CsvReader)(unsafe.Pointer(p)).Fin) 12809 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 12810 } 12811 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).Fz) 12812 csv_reader_init(tls, p) 12813 } 12814 12815 func csv_errmsg(tls *libc.TLS, p uintptr, zFormat uintptr, va uintptr) { 12816 var ap va_list 12817 _ = ap 12818 ap = va 12819 sqlite3.Xsqlite3_vsnprintf(tls, CSV_MXERR, p+64, zFormat, ap) 12820 _ = ap 12821 } 12822 12823 func csv_reader_open(tls *libc.TLS, p uintptr, zFilename uintptr, zData uintptr) int32 { 12824 bp := tls.Alloc(8) 12825 defer tls.Free(8) 12826 12827 if zFilename != 0 { 12828 (*CsvReader)(unsafe.Pointer(p)).FzIn = sqlite3.Xsqlite3_malloc(tls, CSV_INBUFSZ) 12829 if (*CsvReader)(unsafe.Pointer(p)).FzIn == uintptr(0) { 12830 csv_errmsg(tls, p, ts+2069, 0) 12831 return 1 12832 } 12833 (*CsvReader)(unsafe.Pointer(p)).Fin = libc.Xfopen(tls, zFilename, ts+4402) 12834 if (*CsvReader)(unsafe.Pointer(p)).Fin == uintptr(0) { 12835 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 12836 csv_reader_reset(tls, p) 12837 csv_errmsg(tls, p, ts+4405, libc.VaList(bp, zFilename)) 12838 return 1 12839 } 12840 } else { 12841 (*CsvReader)(unsafe.Pointer(p)).FzIn = zData 12842 (*CsvReader)(unsafe.Pointer(p)).FnIn = libc.Xstrlen(tls, zData) 12843 } 12844 return 0 12845 } 12846 12847 func csv_getc_refill(tls *libc.TLS, p uintptr) int32 { 12848 var got size_t 12849 12850 got = libc.Xfread(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn, uint64(1), uint64(CSV_INBUFSZ), (*CsvReader)(unsafe.Pointer(p)).Fin) 12851 if got == uint64(0) { 12852 return -1 12853 } 12854 (*CsvReader)(unsafe.Pointer(p)).FnIn = got 12855 (*CsvReader)(unsafe.Pointer(p)).FiIn = uint64(1) 12856 return int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn))) 12857 } 12858 12859 func csv_getc(tls *libc.TLS, p uintptr) int32 { 12860 if (*CsvReader)(unsafe.Pointer(p)).FiIn >= (*CsvReader)(unsafe.Pointer(p)).FnIn { 12861 if (*CsvReader)(unsafe.Pointer(p)).Fin != uintptr(0) { 12862 return csv_getc_refill(tls, p) 12863 } 12864 return -1 12865 } 12866 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn + uintptr(libc.PostIncUint64(&(*CsvReader)(unsafe.Pointer(p)).FiIn, 1))))) 12867 } 12868 12869 func csv_resize_and_append(tls *libc.TLS, p uintptr, c int8) int32 { 12870 var zNew uintptr 12871 var nNew int32 = (*CsvReader)(unsafe.Pointer(p)).FnAlloc*2 + 100 12872 zNew = sqlite3.Xsqlite3_realloc64(tls, (*CsvReader)(unsafe.Pointer(p)).Fz, uint64(nNew)) 12873 if zNew != 0 { 12874 (*CsvReader)(unsafe.Pointer(p)).Fz = zNew 12875 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = nNew 12876 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 12877 return 0 12878 } else { 12879 csv_errmsg(tls, p, ts+2069, 0) 12880 return 1 12881 } 12882 return int32(0) 12883 } 12884 12885 func csv_append(tls *libc.TLS, p uintptr, c int8) int32 { 12886 if (*CsvReader)(unsafe.Pointer(p)).Fn >= (*CsvReader)(unsafe.Pointer(p)).FnAlloc-1 { 12887 return csv_resize_and_append(tls, p, c) 12888 } 12889 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 12890 return 0 12891 } 12892 12893 func csv_read_one_field(tls *libc.TLS, p uintptr) uintptr { 12894 bp := tls.Alloc(32) 12895 defer tls.Free(32) 12896 12897 var c int32 12898 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12899 c = csv_getc(tls, p) 12900 if c == -1 { 12901 (*CsvReader)(unsafe.Pointer(p)).FcTerm = -1 12902 return uintptr(0) 12903 } 12904 if c == '"' { 12905 var pc int32 12906 var ppc int32 12907 var startLine int32 = (*CsvReader)(unsafe.Pointer(p)).FnLine 12908 pc = libc.AssignInt32(&ppc, 0) 12909 for 1 != 0 { 12910 c = csv_getc(tls, p) 12911 if c <= '"' || pc == '"' { 12912 if c == '\n' { 12913 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 12914 } 12915 if c == '"' { 12916 if pc == '"' { 12917 pc = 0 12918 continue 12919 } 12920 } 12921 if c == ',' && pc == '"' || 12922 c == '\n' && pc == '"' || 12923 c == '\n' && pc == '\r' && ppc == '"' || 12924 c == -1 && pc == '"' { 12925 for __ccgo := true; __ccgo; __ccgo = int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn)))) != '"' { 12926 (*CsvReader)(unsafe.Pointer(p)).Fn-- 12927 } 12928 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12929 break 12930 } 12931 if pc == '"' && c != '\r' { 12932 csv_errmsg(tls, p, ts+4434, libc.VaList(bp, (*CsvReader)(unsafe.Pointer(p)).FnLine, '"')) 12933 break 12934 } 12935 if c == -1 { 12936 csv_errmsg(tls, p, ts+4466, 12937 libc.VaList(bp+16, startLine, '"')) 12938 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12939 break 12940 } 12941 } 12942 if csv_append(tls, p, int8(c)) != 0 { 12943 return uintptr(0) 12944 } 12945 ppc = pc 12946 pc = c 12947 } 12948 } else { 12949 if c&0xff == 0xef && (*CsvReader)(unsafe.Pointer(p)).FbNotFirst == 0 { 12950 csv_append(tls, p, int8(c)) 12951 c = csv_getc(tls, p) 12952 if c&0xff == 0xbb { 12953 csv_append(tls, p, int8(c)) 12954 c = csv_getc(tls, p) 12955 if c&0xff == 0xbf { 12956 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 12957 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12958 return csv_read_one_field(tls, p) 12959 } 12960 } 12961 } 12962 for c > ',' || c != -1 && c != ',' && c != '\n' { 12963 if csv_append(tls, p, int8(c)) != 0 { 12964 return uintptr(0) 12965 } 12966 c = csv_getc(tls, p) 12967 } 12968 if c == '\n' { 12969 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 12970 if (*CsvReader)(unsafe.Pointer(p)).Fn > 0 && int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn-1)))) == '\r' { 12971 (*CsvReader)(unsafe.Pointer(p)).Fn-- 12972 } 12973 } 12974 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12975 } 12976 if (*CsvReader)(unsafe.Pointer(p)).Fz != 0 { 12977 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn))) = int8(0) 12978 } 12979 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 12980 return (*CsvReader)(unsafe.Pointer(p)).Fz 12981 } 12982 12983 type CsvTable1 = struct { 12984 Fbase sqlite3_vtab 12985 FzFilename uintptr 12986 FzData uintptr 12987 FiStart int64 12988 FnCol int32 12989 FtstFlags uint32 12990 } 12991 12992 type CsvTable = CsvTable1 12993 12994 type CsvCursor1 = struct { 12995 Fbase sqlite3_vtab_cursor 12996 Frdr CsvReader 12997 FazVal uintptr 12998 FaLen uintptr 12999 FiRowid sqlite3_int64 13000 } 13001 13002 type CsvCursor = CsvCursor1 13003 13004 func csv_xfer_error(tls *libc.TLS, pTab uintptr, pRdr uintptr) { 13005 bp := tls.Alloc(8) 13006 defer tls.Free(8) 13007 13008 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg) 13009 (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, pRdr+64)) 13010 } 13011 13012 func csvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 13013 var p uintptr = pVtab 13014 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzFilename) 13015 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzData) 13016 sqlite3.Xsqlite3_free(tls, p) 13017 return SQLITE_OK 13018 } 13019 13020 func csv_skip_whitespace(tls *libc.TLS, z uintptr) uintptr { 13021 for __sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(z)))), uint64(X_CTYPE_S)) != 0 { 13022 z++ 13023 } 13024 return z 13025 } 13026 13027 func csv_trim_whitespace(tls *libc.TLS, z uintptr) { 13028 var n size_t = libc.Xstrlen(tls, z) 13029 for n > uint64(0) && __sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(n))))), uint64(X_CTYPE_S)) != 0 { 13030 n-- 13031 } 13032 *(*int8)(unsafe.Pointer(z + uintptr(n))) = int8(0) 13033 } 13034 13035 func csv_dequote(tls *libc.TLS, z uintptr) { 13036 var j int32 13037 var cQuote int8 = *(*int8)(unsafe.Pointer(z)) 13038 var i size_t 13039 var n size_t 13040 13041 if int32(cQuote) != '\'' && int32(cQuote) != '"' { 13042 return 13043 } 13044 n = libc.Xstrlen(tls, z) 13045 if n < uint64(2) || int32(*(*int8)(unsafe.Pointer(z + uintptr(n-uint64(1))))) != int32(*(*int8)(unsafe.Pointer(z))) { 13046 return 13047 } 13048 i = uint64(1) 13049 j = 0 13050 for ; i < n-uint64(1); i++ { 13051 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == int32(cQuote) && int32(*(*int8)(unsafe.Pointer(z + uintptr(i+uint64(1))))) == int32(cQuote) { 13052 i++ 13053 } 13054 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 13055 } 13056 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 13057 } 13058 13059 func csv_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr) uintptr { 13060 z = csv_skip_whitespace(tls, z) 13061 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 13062 return uintptr(0) 13063 } 13064 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 13065 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 13066 return uintptr(0) 13067 } 13068 return csv_skip_whitespace(tls, z+uintptr(1)) 13069 } 13070 13071 func csv_string_parameter(tls *libc.TLS, p uintptr, zParam uintptr, zArg uintptr, pzVal uintptr) int32 { 13072 bp := tls.Alloc(16) 13073 defer tls.Free(16) 13074 13075 var zValue uintptr 13076 zValue = csv_parameter(tls, zParam, int32(libc.Xstrlen(tls, zParam)), zArg) 13077 if zValue == uintptr(0) { 13078 return 0 13079 } 13080 *(*int8)(unsafe.Pointer(p + 64)) = int8(0) 13081 if *(*uintptr)(unsafe.Pointer(pzVal)) != 0 { 13082 csv_errmsg(tls, p, ts+4505, libc.VaList(bp, zParam)) 13083 return 1 13084 } 13085 *(*uintptr)(unsafe.Pointer(pzVal)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zValue)) 13086 if *(*uintptr)(unsafe.Pointer(pzVal)) == uintptr(0) { 13087 csv_errmsg(tls, p, ts+2069, 0) 13088 return 1 13089 } 13090 csv_trim_whitespace(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 13091 csv_dequote(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 13092 return 1 13093 } 13094 13095 func csv_boolean(tls *libc.TLS, z uintptr) int32 { 13096 if sqlite3.Xsqlite3_stricmp(tls, ts+4174, z) == 0 || 13097 sqlite3.Xsqlite3_stricmp(tls, ts+4178, z) == 0 || 13098 sqlite3.Xsqlite3_stricmp(tls, ts+4534, z) == 0 || 13099 int32(*(*int8)(unsafe.Pointer(z))) == '1' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 13100 return 1 13101 } 13102 if sqlite3.Xsqlite3_stricmp(tls, ts+4539, z) == 0 || 13103 sqlite3.Xsqlite3_stricmp(tls, ts+4542, z) == 0 || 13104 sqlite3.Xsqlite3_stricmp(tls, ts+4546, z) == 0 || 13105 int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 13106 return 0 13107 } 13108 return -1 13109 } 13110 13111 func csv_boolean_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr, pValue uintptr) int32 { 13112 var b int32 13113 z = csv_skip_whitespace(tls, z) 13114 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 13115 return 0 13116 } 13117 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 13118 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 13119 *(*int32)(unsafe.Pointer(pValue)) = 1 13120 return 1 13121 } 13122 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 13123 return 0 13124 } 13125 z = csv_skip_whitespace(tls, z+uintptr(1)) 13126 b = csv_boolean(tls, z) 13127 if b >= 0 { 13128 *(*int32)(unsafe.Pointer(pValue)) = b 13129 return 1 13130 } 13131 return 0 13132 } 13133 13134 func csvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13135 bp := tls.Alloc(372) 13136 defer tls.Free(372) 13137 13138 var pNew uintptr 13139 var bHeader int32 13140 var rc int32 13141 var i int32 13142 var j int32 13143 var tstFlags int32 13144 13145 var nCol int32 13146 13147 var z uintptr 13148 var zValue uintptr 13149 var z1 uintptr 13150 var pStr uintptr 13151 var zSep uintptr 13152 var iCol int32 13153 pNew = uintptr(0) 13154 bHeader = -1 13155 rc = SQLITE_OK 13156 tstFlags = 0 13157 nCol = -99 13158 13159 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(CsvReader{}))) 13160 libc.Xmemset(tls, bp+344, 0, uint64(unsafe.Sizeof([3]uintptr{}))) 13161 i = 3 13162 __1: 13163 if !(i < argc) { 13164 goto __3 13165 } 13166 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 13167 j = 0 13168 __4: 13169 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 13170 goto __6 13171 } 13172 if !(csv_string_parameter(tls, bp+80, azParam[j], z, bp+344+uintptr(j)*8) != 0) { 13173 goto __7 13174 } 13175 goto __6 13176 __7: 13177 ; 13178 goto __5 13179 __5: 13180 j++ 13181 goto __4 13182 goto __6 13183 __6: 13184 ; 13185 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 13186 goto __8 13187 } 13188 if !(*(*int8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 13189 goto __10 13190 } 13191 goto csvtab_connect_error 13192 __10: 13193 ; 13194 goto __9 13195 __8: 13196 if !(csv_boolean_parameter(tls, ts+4552, 6, z, bp+368) != 0) { 13197 goto __11 13198 } 13199 if !(bHeader >= 0) { 13200 goto __13 13201 } 13202 csv_errmsg(tls, bp+80, ts+4559, 0) 13203 goto csvtab_connect_error 13204 __13: 13205 ; 13206 bHeader = *(*int32)(unsafe.Pointer(bp + 368)) 13207 goto __12 13208 __11: 13209 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4592, 9, z)) != uintptr(0)) { 13210 goto __14 13211 } 13212 tstFlags = int32(uint32(libc.Xatoi(tls, zValue))) 13213 goto __15 13214 __14: 13215 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4602, 7, z)) != uintptr(0)) { 13216 goto __16 13217 } 13218 if !(nCol > 0) { 13219 goto __18 13220 } 13221 csv_errmsg(tls, bp+80, ts+4610, 0) 13222 goto csvtab_connect_error 13223 __18: 13224 ; 13225 nCol = libc.Xatoi(tls, zValue) 13226 if !(nCol <= 0) { 13227 goto __19 13228 } 13229 csv_errmsg(tls, bp+80, ts+4644, 0) 13230 goto csvtab_connect_error 13231 __19: 13232 ; 13233 goto __17 13234 __16: 13235 csv_errmsg(tls, bp+80, ts+4675, libc.VaList(bp, z)) 13236 goto csvtab_connect_error 13237 __17: 13238 ; 13239 __15: 13240 ; 13241 __12: 13242 ; 13243 __9: 13244 ; 13245 goto __2 13246 __2: 13247 i++ 13248 goto __1 13249 goto __3 13250 __3: 13251 ; 13252 if !(libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344)) == uintptr(0)) == libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) == uintptr(0))) { 13253 goto __20 13254 } 13255 csv_errmsg(tls, bp+80, ts+4695, 0) 13256 goto csvtab_connect_error 13257 __20: 13258 ; 13259 if !((nCol <= 0 || bHeader == 1) && 13260 csv_reader_open(tls, bp+80, *(*uintptr)(unsafe.Pointer(bp + 344)), *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8))) != 0) { 13261 goto __21 13262 } 13263 goto csvtab_connect_error 13264 __21: 13265 ; 13266 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CsvTable{}))) 13267 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 13268 if !(pNew == uintptr(0)) { 13269 goto __22 13270 } 13271 goto csvtab_connect_oom 13272 __22: 13273 ; 13274 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(CsvTable{}))) 13275 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 13276 goto __23 13277 } 13278 pStr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 13279 zSep = ts + 584 13280 iCol = 0 13281 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+979, 0) 13282 if !(nCol < 0 && bHeader < 1) { 13283 goto __25 13284 } 13285 nCol = 0 13286 __26: 13287 csv_read_one_field(tls, bp+80) 13288 nCol++ 13289 goto __27 13290 __27: 13291 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13292 goto __26 13293 } 13294 goto __28 13295 __28: 13296 ; 13297 __25: 13298 ; 13299 if !(nCol > 0 && bHeader < 1) { 13300 goto __29 13301 } 13302 iCol = 0 13303 __31: 13304 if !(iCol < nCol) { 13305 goto __33 13306 } 13307 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+8, zSep, iCol)) 13308 zSep = ts + 4758 13309 goto __32 13310 __32: 13311 iCol++ 13312 goto __31 13313 goto __33 13314 __33: 13315 ; 13316 goto __30 13317 __29: 13318 __34: 13319 z1 = csv_read_one_field(tls, bp+80) 13320 if !(nCol > 0 && iCol < nCol || nCol < 0 && bHeader != 0) { 13321 goto __37 13322 } 13323 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4760, libc.VaList(bp+24, zSep, z1)) 13324 zSep = ts + 4758 13325 iCol++ 13326 __37: 13327 ; 13328 goto __35 13329 __35: 13330 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13331 goto __34 13332 } 13333 goto __36 13334 __36: 13335 ; 13336 if !(nCol < 0) { 13337 goto __38 13338 } 13339 nCol = iCol 13340 goto __39 13341 __38: 13342 __40: 13343 if !(iCol < nCol) { 13344 goto __41 13345 } 13346 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+40, zSep, libc.PreIncInt32(&iCol, 1))) 13347 zSep = ts + 4758 13348 goto __40 13349 __41: 13350 ; 13351 __39: 13352 ; 13353 __30: 13354 ; 13355 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13356 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+585, 0) 13357 *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) = sqlite3.Xsqlite3_str_finish(tls, pStr) 13358 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 13359 goto __42 13360 } 13361 goto csvtab_connect_oom 13362 __42: 13363 ; 13364 goto __24 13365 __23: 13366 if !(nCol < 0) { 13367 goto __43 13368 } 13369 __45: 13370 csv_read_one_field(tls, bp+80) 13371 (*CsvTable)(unsafe.Pointer(pNew)).FnCol++ 13372 goto __46 13373 __46: 13374 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13375 goto __45 13376 } 13377 goto __47 13378 __47: 13379 ; 13380 goto __44 13381 __43: 13382 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13383 __44: 13384 ; 13385 __24: 13386 ; 13387 (*CsvTable)(unsafe.Pointer(pNew)).FzFilename = *(*uintptr)(unsafe.Pointer(bp + 344)) 13388 *(*uintptr)(unsafe.Pointer(bp + 344)) = uintptr(0) 13389 (*CsvTable)(unsafe.Pointer(pNew)).FzData = *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) 13390 *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) = uintptr(0) 13391 (*CsvTable)(unsafe.Pointer(pNew)).FtstFlags = uint32(tstFlags) 13392 if !(bHeader != 1) { 13393 goto __48 13394 } 13395 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(0) 13396 goto __49 13397 __48: 13398 if !((*CsvTable)(unsafe.Pointer(pNew)).FzData != 0) { 13399 goto __50 13400 } 13401 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(int32((*CsvReader)(unsafe.Pointer(bp + 80)).FiIn)) 13402 goto __51 13403 __50: 13404 (*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)) 13405 __51: 13406 ; 13407 __49: 13408 ; 13409 csv_reader_reset(tls, bp+80) 13410 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8))) 13411 if !(rc != 0) { 13412 goto __52 13413 } 13414 csv_errmsg(tls, bp+80, ts+4772, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)), sqlite3.Xsqlite3_errmsg(tls, db))) 13415 goto csvtab_connect_error 13416 __52: 13417 ; 13418 i = 0 13419 __53: 13420 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 13421 goto __55 13422 } 13423 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 13424 goto __54 13425 __54: 13426 i++ 13427 goto __53 13428 goto __55 13429 __55: 13430 ; 13431 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 13432 return SQLITE_OK 13433 13434 csvtab_connect_oom: 13435 rc = SQLITE_NOMEM 13436 csv_errmsg(tls, bp+80, ts+2069, 0) 13437 13438 csvtab_connect_error: 13439 if !(pNew != 0) { 13440 goto __56 13441 } 13442 csvtabDisconnect(tls, pNew) 13443 __56: 13444 ; 13445 i = 0 13446 __57: 13447 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 13448 goto __59 13449 } 13450 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 13451 goto __58 13452 __58: 13453 i++ 13454 goto __57 13455 goto __59 13456 __59: 13457 ; 13458 if !(*(*int8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 13459 goto __60 13460 } 13461 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(pzErr))) 13462 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, bp+80+64)) 13463 __60: 13464 ; 13465 csv_reader_reset(tls, bp+80) 13466 if !(rc == SQLITE_OK) { 13467 goto __61 13468 } 13469 rc = SQLITE_ERROR 13470 __61: 13471 ; 13472 return rc 13473 } 13474 13475 var azParam = [3]uintptr{ 13476 ts + 4794, ts + 4803, ts + 4808, 13477 } 13478 13479 func csvtabCursorRowReset(tls *libc.TLS, pCur uintptr) { 13480 var pTab uintptr = (*CsvCursor)(unsafe.Pointer(pCur)).Fbase.FpVtab 13481 var i int32 13482 for i = 0; i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol; i++ { 13483 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 13484 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 13485 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13486 } 13487 } 13488 13489 func csvtabCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13490 return csvtabConnect(tls, db, pAux, argc, argv, ppVtab, pzErr) 13491 } 13492 13493 func csvtabClose(tls *libc.TLS, cur uintptr) int32 { 13494 var pCur uintptr = cur 13495 csvtabCursorRowReset(tls, pCur) 13496 csv_reader_reset(tls, pCur+8) 13497 sqlite3.Xsqlite3_free(tls, cur) 13498 return SQLITE_OK 13499 } 13500 13501 func csvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 13502 var pTab uintptr = p 13503 var pCur uintptr 13504 var nByte size_t 13505 nByte = uint64(unsafe.Sizeof(CsvCursor{})) + (uint64(unsafe.Sizeof(uintptr(0)))+uint64(unsafe.Sizeof(int32(0))))*uint64((*CsvTable)(unsafe.Pointer(pTab)).FnCol) 13506 pCur = sqlite3.Xsqlite3_malloc64(tls, nByte) 13507 if pCur == uintptr(0) { 13508 return SQLITE_NOMEM 13509 } 13510 libc.Xmemset(tls, pCur, 0, nByte) 13511 (*CsvCursor)(unsafe.Pointer(pCur)).FazVal = pCur + 1*296 13512 (*CsvCursor)(unsafe.Pointer(pCur)).FaLen = (*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr((*CsvTable)(unsafe.Pointer(pTab)).FnCol)*8 13513 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 13514 if csv_reader_open(tls, pCur+8, (*CsvTable)(unsafe.Pointer(pTab)).FzFilename, (*CsvTable)(unsafe.Pointer(pTab)).FzData) != 0 { 13515 csv_xfer_error(tls, pTab, pCur+8) 13516 return SQLITE_ERROR 13517 } 13518 return SQLITE_OK 13519 } 13520 13521 func csvtabNext(tls *libc.TLS, cur uintptr) int32 { 13522 var pCur uintptr = cur 13523 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13524 var i int32 = 0 13525 var z uintptr 13526 for __ccgo := true; __ccgo; __ccgo = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == ',' { 13527 z = csv_read_one_field(tls, pCur+8) 13528 if z == uintptr(0) { 13529 break 13530 } 13531 if i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13532 if *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) < (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1 { 13533 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)) 13534 if zNew == uintptr(0) { 13535 csv_errmsg(tls, pCur+8, ts+2069, 0) 13536 csv_xfer_error(tls, pTab, pCur+8) 13537 break 13538 } 13539 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = zNew 13540 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn + 1 13541 } 13542 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), z, uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 13543 i++ 13544 } 13545 } 13546 if z == uintptr(0) || (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == -1 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13547 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(-1) 13548 } else { 13549 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid++ 13550 for i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13551 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 13552 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 13553 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13554 i++ 13555 } 13556 } 13557 return SQLITE_OK 13558 } 13559 13560 func csvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 13561 var pCur uintptr = cur 13562 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13563 if i >= 0 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol && *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) != uintptr(0) { 13564 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), -1, libc.UintptrFromInt32(-1)) 13565 } 13566 return SQLITE_OK 13567 } 13568 13569 func csvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13570 var pCur uintptr = cur 13571 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid 13572 return SQLITE_OK 13573 } 13574 13575 func csvtabEof(tls *libc.TLS, cur uintptr) int32 { 13576 var pCur uintptr = cur 13577 return libc.Bool32((*CsvCursor)(unsafe.Pointer(pCur)).FiRowid < int64(0)) 13578 } 13579 13580 func csvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 13581 var pCur uintptr = pVtabCursor 13582 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 13583 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 13584 if (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin == uintptr(0) { 13585 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = size_t((*CsvTable)(unsafe.Pointer(pTab)).FiStart) 13586 } else { 13587 libc.Xfseek(tls, (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin, (*CsvTable)(unsafe.Pointer(pTab)).FiStart, SEEK_SET) 13588 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = uint64(0) 13589 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FnIn = uint64(0) 13590 } 13591 return csvtabNext(tls, pVtabCursor) 13592 } 13593 13594 func csvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 13595 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000) 13596 if (*CsvTable)(unsafe.Pointer(tab)).FtstFlags&uint32(CSVTEST_FIDX) != uint32(0) { 13597 var i int32 13598 var nConst int32 = 0 13599 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 13600 var op uint8 13601 if int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable) == 0 { 13602 continue 13603 } 13604 op = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop 13605 if int32(op) == SQLITE_INDEX_CONSTRAINT_EQ || 13606 int32(op) == SQLITE_INDEX_CONSTRAINT_LIKE || 13607 int32(op) == SQLITE_INDEX_CONSTRAINT_GLOB { 13608 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 13609 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(nConst)*8)).FargvIndex = nConst + 1 13610 nConst++ 13611 } 13612 } 13613 } 13614 return SQLITE_OK 13615 } 13616 13617 var CsvModule = sqlite3_module{ 13618 FxCreate: 0, 13619 FxConnect: 0, 13620 FxBestIndex: 0, 13621 FxDisconnect: 0, 13622 FxDestroy: 0, 13623 FxOpen: 0, 13624 FxClose: 0, 13625 FxFilter: 0, 13626 FxNext: 0, 13627 FxEof: 0, 13628 FxColumn: 0, 13629 FxRowid: 0, 13630 } 13631 13632 func csvtabUpdate(tls *libc.TLS, p uintptr, n int32, v uintptr, x uintptr) int32 { 13633 return SQLITE_READONLY 13634 } 13635 13636 var CsvModuleFauxWrite = sqlite3_module{ 13637 FxCreate: 0, 13638 FxConnect: 0, 13639 FxBestIndex: 0, 13640 FxDisconnect: 0, 13641 FxDestroy: 0, 13642 FxOpen: 0, 13643 FxClose: 0, 13644 FxFilter: 0, 13645 FxNext: 0, 13646 FxEof: 0, 13647 FxColumn: 0, 13648 FxRowid: 0, 13649 FxUpdate: 0, 13650 } 13651 13652 func sqlite3_csv_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 13653 var rc int32 13654 _ = pApi 13655 13656 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4815, uintptr(unsafe.Pointer(&CsvModule)), uintptr(0)) 13657 if rc == SQLITE_OK { 13658 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4819, uintptr(unsafe.Pointer(&CsvModuleFauxWrite)), uintptr(0)) 13659 } 13660 return rc 13661 } 13662 13663 type Decimal1 = struct { 13664 Fsign int8 13665 Foom int8 13666 FisNull int8 13667 FisInit int8 13668 FnDigit int32 13669 FnFrac int32 13670 F__ccgo_pad1 [4]byte 13671 Fa uintptr 13672 } 13673 13674 type Decimal = Decimal1 13675 13676 func decimal_clear(tls *libc.TLS, p uintptr) { 13677 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(p)).Fa) 13678 } 13679 13680 func decimal_free(tls *libc.TLS, p uintptr) { 13681 if p != 0 { 13682 decimal_clear(tls, p) 13683 sqlite3.Xsqlite3_free(tls, p) 13684 } 13685 } 13686 13687 func decimal_new(tls *libc.TLS, pCtx uintptr, pIn uintptr, nAlt int32, zAlt uintptr) uintptr { 13688 var p uintptr 13689 var n int32 13690 var i int32 13691 var zIn uintptr 13692 var iExp int32 13693 var j int32 13694 var neg int32 13695 var c int8 13696 var nExtra int32 13697 iExp = 0 13698 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Decimal{}))) 13699 if !(p == uintptr(0)) { 13700 goto __1 13701 } 13702 goto new_no_mem 13703 __1: 13704 ; 13705 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 13706 (*Decimal)(unsafe.Pointer(p)).Foom = int8(0) 13707 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 13708 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(0) 13709 (*Decimal)(unsafe.Pointer(p)).FnDigit = 0 13710 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 13711 if !(zAlt != 0) { 13712 goto __2 13713 } 13714 n = nAlt 13715 zIn = zAlt 13716 goto __3 13717 __2: 13718 if !(sqlite3.Xsqlite3_value_type(tls, pIn) == SQLITE_NULL) { 13719 goto __4 13720 } 13721 (*Decimal)(unsafe.Pointer(p)).Fa = uintptr(0) 13722 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(1) 13723 return p 13724 __4: 13725 ; 13726 n = sqlite3.Xsqlite3_value_bytes(tls, pIn) 13727 zIn = sqlite3.Xsqlite3_value_text(tls, pIn) 13728 __3: 13729 ; 13730 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc64(tls, uint64(n+1)) 13731 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13732 goto __5 13733 } 13734 goto new_no_mem 13735 __5: 13736 ; 13737 i = 0 13738 __6: 13739 if !(__sbistype(tls, int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))), uint64(X_CTYPE_S)) != 0) { 13740 goto __8 13741 } 13742 goto __7 13743 __7: 13744 i++ 13745 goto __6 13746 goto __8 13747 __8: 13748 ; 13749 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '-') { 13750 goto __9 13751 } 13752 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(1) 13753 i++ 13754 goto __10 13755 __9: 13756 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '+') { 13757 goto __11 13758 } 13759 i++ 13760 __11: 13761 ; 13762 __10: 13763 ; 13764 __12: 13765 if !(i < n && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '0') { 13766 goto __13 13767 } 13768 i++ 13769 goto __12 13770 __13: 13771 ; 13772 __14: 13773 if !(i < n) { 13774 goto __15 13775 } 13776 c = int8(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) 13777 if !(int32(c) >= '0' && int32(c) <= '9') { 13778 goto __16 13779 } 13780 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncInt32(&(*Decimal)(unsafe.Pointer(p)).FnDigit, 1)))) = int8(int32(c) - '0') 13781 goto __17 13782 __16: 13783 if !(int32(c) == '.') { 13784 goto __18 13785 } 13786 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit + 1 13787 goto __19 13788 __18: 13789 if !(int32(c) == 'e' || int32(c) == 'E') { 13790 goto __20 13791 } 13792 j = i + 1 13793 neg = 0 13794 if !(j >= n) { 13795 goto __21 13796 } 13797 goto __15 13798 __21: 13799 ; 13800 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '-') { 13801 goto __22 13802 } 13803 neg = 1 13804 j++ 13805 goto __23 13806 __22: 13807 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '+') { 13808 goto __24 13809 } 13810 j++ 13811 __24: 13812 ; 13813 __23: 13814 ; 13815 __25: 13816 if !(j < n && iExp < 1000000) { 13817 goto __26 13818 } 13819 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) <= '9') { 13820 goto __27 13821 } 13822 iExp = iExp*10 + int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) - '0' 13823 __27: 13824 ; 13825 j++ 13826 goto __25 13827 __26: 13828 ; 13829 if !(neg != 0) { 13830 goto __28 13831 } 13832 iExp = -iExp 13833 __28: 13834 ; 13835 goto __15 13836 __20: 13837 ; 13838 __19: 13839 ; 13840 __17: 13841 ; 13842 i++ 13843 goto __14 13844 __15: 13845 ; 13846 if !((*Decimal)(unsafe.Pointer(p)).FnFrac != 0) { 13847 goto __29 13848 } 13849 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - ((*Decimal)(unsafe.Pointer(p)).FnFrac - 1) 13850 __29: 13851 ; 13852 if !(iExp > 0) { 13853 goto __30 13854 } 13855 if !((*Decimal)(unsafe.Pointer(p)).FnFrac > 0) { 13856 goto __32 13857 } 13858 if !(iExp <= (*Decimal)(unsafe.Pointer(p)).FnFrac) { 13859 goto __33 13860 } 13861 *(*int32)(unsafe.Pointer(p + 8)) -= iExp 13862 iExp = 0 13863 goto __34 13864 __33: 13865 iExp = iExp - (*Decimal)(unsafe.Pointer(p)).FnFrac 13866 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 13867 __34: 13868 ; 13869 __32: 13870 ; 13871 if !(iExp > 0) { 13872 goto __35 13873 } 13874 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 13875 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13876 goto __36 13877 } 13878 goto new_no_mem 13879 __36: 13880 ; 13881 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(iExp)) 13882 *(*int32)(unsafe.Pointer(p + 4)) += iExp 13883 __35: 13884 ; 13885 goto __31 13886 __30: 13887 if !(iExp < 0) { 13888 goto __37 13889 } 13890 iExp = -iExp 13891 nExtra = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac - 1 13892 if !(nExtra != 0) { 13893 goto __38 13894 } 13895 if !(nExtra >= iExp) { 13896 goto __39 13897 } 13898 *(*int32)(unsafe.Pointer(p + 8)) += iExp 13899 iExp = 0 13900 goto __40 13901 __39: 13902 iExp = iExp - nExtra 13903 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - 1 13904 __40: 13905 ; 13906 __38: 13907 ; 13908 if !(iExp > 0) { 13909 goto __41 13910 } 13911 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 13912 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13913 goto __42 13914 } 13915 goto new_no_mem 13916 __42: 13917 ; 13918 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(iExp), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 13919 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(iExp)) 13920 *(*int32)(unsafe.Pointer(p + 4)) += iExp 13921 *(*int32)(unsafe.Pointer(p + 8)) += iExp 13922 __41: 13923 ; 13924 __37: 13925 ; 13926 __31: 13927 ; 13928 return p 13929 13930 new_no_mem: 13931 if !(pCtx != 0) { 13932 goto __43 13933 } 13934 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13935 __43: 13936 ; 13937 sqlite3.Xsqlite3_free(tls, p) 13938 return uintptr(0) 13939 } 13940 13941 func decimal_result(tls *libc.TLS, pCtx uintptr, p uintptr) { 13942 var z uintptr 13943 var i int32 13944 var j int32 13945 var n int32 13946 if p == uintptr(0) || (*Decimal)(unsafe.Pointer(p)).Foom != 0 { 13947 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13948 return 13949 } 13950 if (*Decimal)(unsafe.Pointer(p)).FisNull != 0 { 13951 sqlite3.Xsqlite3_result_null(tls, pCtx) 13952 return 13953 } 13954 z = sqlite3.Xsqlite3_malloc(tls, (*Decimal)(unsafe.Pointer(p)).FnDigit+4) 13955 if z == uintptr(0) { 13956 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13957 return 13958 } 13959 i = 0 13960 if (*Decimal)(unsafe.Pointer(p)).FnDigit == 0 || (*Decimal)(unsafe.Pointer(p)).FnDigit == 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa))) == 0 { 13961 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 13962 } 13963 if (*Decimal)(unsafe.Pointer(p)).Fsign != 0 { 13964 *(*int8)(unsafe.Pointer(z)) = int8('-') 13965 i = 1 13966 } 13967 n = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac 13968 if n <= 0 { 13969 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('0') 13970 } 13971 j = 0 13972 for n > 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) == 0 { 13973 j++ 13974 n-- 13975 } 13976 for n > 0 { 13977 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 13978 j++ 13979 n-- 13980 } 13981 if (*Decimal)(unsafe.Pointer(p)).FnFrac != 0 { 13982 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('.') 13983 for __ccgo := true; __ccgo; __ccgo = j < (*Decimal)(unsafe.Pointer(p)).FnDigit { 13984 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 13985 j++ 13986 } 13987 } 13988 *(*int8)(unsafe.Pointer(z + uintptr(i))) = int8(0) 13989 sqlite3.Xsqlite3_result_text(tls, pCtx, z, i, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 13990 } 13991 13992 func decimalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13993 var p uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13994 _ = argc 13995 decimal_result(tls, context, p) 13996 decimal_free(tls, p) 13997 } 13998 13999 func decimal_cmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 14000 var nASig int32 14001 var nBSig int32 14002 var rc int32 14003 var n int32 14004 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) != int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 14005 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 14006 return -1 14007 } 14008 return +1 14009 } 14010 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 14011 var pTemp uintptr = pA 14012 pA = pB 14013 pB = pTemp 14014 } 14015 nASig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 14016 nBSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 14017 if nASig != nBSig { 14018 return nASig - nBSig 14019 } 14020 n = (*Decimal)(unsafe.Pointer(pA)).FnDigit 14021 if n > (*Decimal)(unsafe.Pointer(pB)).FnDigit { 14022 n = (*Decimal)(unsafe.Pointer(pB)).FnDigit 14023 } 14024 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(n)) 14025 if rc == 0 { 14026 rc = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnDigit 14027 } 14028 return rc 14029 } 14030 14031 func decimalCmpFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14032 var pA uintptr 14033 var pB uintptr 14034 var rc int32 14035 pA = uintptr(0) 14036 pB = uintptr(0) 14037 14038 _ = argc 14039 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14040 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0) { 14041 goto __1 14042 } 14043 goto cmp_done 14044 __1: 14045 ; 14046 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14047 if !(pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14048 goto __2 14049 } 14050 goto cmp_done 14051 __2: 14052 ; 14053 rc = decimal_cmp(tls, pA, pB) 14054 if !(rc < 0) { 14055 goto __3 14056 } 14057 rc = -1 14058 goto __4 14059 __3: 14060 if !(rc > 0) { 14061 goto __5 14062 } 14063 rc = +1 14064 __5: 14065 ; 14066 __4: 14067 ; 14068 sqlite3.Xsqlite3_result_int(tls, context, rc) 14069 cmp_done: 14070 decimal_free(tls, pA) 14071 decimal_free(tls, pB) 14072 } 14073 14074 func decimal_expand(tls *libc.TLS, p uintptr, nDigit int32, nFrac int32) { 14075 var nAddSig int32 14076 var nAddFrac int32 14077 if p == uintptr(0) { 14078 return 14079 } 14080 nAddFrac = nFrac - (*Decimal)(unsafe.Pointer(p)).FnFrac 14081 nAddSig = nDigit - (*Decimal)(unsafe.Pointer(p)).FnDigit - nAddFrac 14082 if nAddFrac == 0 && nAddSig == 0 { 14083 return 14084 } 14085 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64(nDigit+1)) 14086 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14087 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 14088 return 14089 } 14090 if nAddSig != 0 { 14091 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(nAddSig), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 14092 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(nAddSig)) 14093 *(*int32)(unsafe.Pointer(p + 4)) += nAddSig 14094 } 14095 if nAddFrac != 0 { 14096 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(nAddFrac)) 14097 *(*int32)(unsafe.Pointer(p + 4)) += nAddFrac 14098 *(*int32)(unsafe.Pointer(p + 8)) += nAddFrac 14099 } 14100 } 14101 14102 func decimal_add(tls *libc.TLS, pA uintptr, pB uintptr) { 14103 var nSig int32 14104 var nFrac int32 14105 var nDigit int32 14106 var i int32 14107 var rc int32 14108 if pA == uintptr(0) { 14109 return 14110 } 14111 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 14112 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 14113 return 14114 } 14115 if (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0 { 14116 (*Decimal)(unsafe.Pointer(pA)).FisNull = int8(1) 14117 return 14118 } 14119 nSig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 14120 if nSig != 0 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa))) == 0 { 14121 nSig-- 14122 } 14123 if nSig < (*Decimal)(unsafe.Pointer(pB)).FnDigit-(*Decimal)(unsafe.Pointer(pB)).FnFrac { 14124 nSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 14125 } 14126 nFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14127 if nFrac < (*Decimal)(unsafe.Pointer(pB)).FnFrac { 14128 nFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14129 } 14130 nDigit = nSig + nFrac + 1 14131 decimal_expand(tls, pA, nDigit, nFrac) 14132 decimal_expand(tls, pB, nDigit, nFrac) 14133 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 14134 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 14135 } else { 14136 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) == int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 14137 var carry int32 = 0 14138 for i = nDigit - 1; i >= 0; i-- { 14139 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 14140 if x >= 10 { 14141 carry = 1 14142 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x - 10) 14143 } else { 14144 carry = 0 14145 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 14146 } 14147 } 14148 } else { 14149 var aA uintptr 14150 var aB uintptr 14151 var borrow int32 = 0 14152 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(nDigit)) 14153 if rc < 0 { 14154 aA = (*Decimal)(unsafe.Pointer(pB)).Fa 14155 aB = (*Decimal)(unsafe.Pointer(pA)).Fa 14156 (*Decimal)(unsafe.Pointer(pA)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pA)).Fsign != 0)) 14157 } else { 14158 aA = (*Decimal)(unsafe.Pointer(pA)).Fa 14159 aB = (*Decimal)(unsafe.Pointer(pB)).Fa 14160 } 14161 for i = nDigit - 1; i >= 0; i-- { 14162 var x int32 = int32(*(*int8)(unsafe.Pointer(aA + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(aB + uintptr(i)))) - borrow 14163 if x < 0 { 14164 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x + 10) 14165 borrow = 1 14166 } else { 14167 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 14168 borrow = 0 14169 } 14170 } 14171 } 14172 } 14173 } 14174 14175 func decimalCollFunc(tls *libc.TLS, notUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 14176 var zA uintptr = pKey1 14177 var zB uintptr = pKey2 14178 var pA uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey1, zA) 14179 var pB uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey2, zB) 14180 var rc int32 14181 _ = notUsed 14182 if pA == uintptr(0) || pB == uintptr(0) { 14183 rc = 0 14184 } else { 14185 rc = decimal_cmp(tls, pA, pB) 14186 } 14187 decimal_free(tls, pA) 14188 decimal_free(tls, pB) 14189 return rc 14190 } 14191 14192 func decimalAddFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14193 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14194 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14195 _ = argc 14196 decimal_add(tls, pA, pB) 14197 decimal_result(tls, context, pA) 14198 decimal_free(tls, pA) 14199 decimal_free(tls, pB) 14200 } 14201 14202 func decimalSubFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14203 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14204 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14205 _ = argc 14206 if pB != 0 { 14207 (*Decimal)(unsafe.Pointer(pB)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pB)).Fsign != 0)) 14208 decimal_add(tls, pA, pB) 14209 decimal_result(tls, context, pA) 14210 } 14211 decimal_free(tls, pA) 14212 decimal_free(tls, pB) 14213 } 14214 14215 func decimalSumStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14216 var p uintptr 14217 var pArg uintptr 14218 _ = argc 14219 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14220 if p == uintptr(0) { 14221 return 14222 } 14223 if !(int32((*Decimal)(unsafe.Pointer(p)).FisInit) != 0) { 14224 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 14225 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc(tls, 2) 14226 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14227 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 14228 } else { 14229 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa)) = int8(0) 14230 } 14231 (*Decimal)(unsafe.Pointer(p)).FnDigit = 1 14232 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14233 } 14234 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14235 return 14236 } 14237 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14238 decimal_add(tls, p, pArg) 14239 decimal_free(tls, pArg) 14240 } 14241 14242 func decimalSumInverse(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14243 var p uintptr 14244 var pArg uintptr 14245 _ = argc 14246 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14247 if p == uintptr(0) { 14248 return 14249 } 14250 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14251 return 14252 } 14253 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14254 if pArg != 0 { 14255 (*Decimal)(unsafe.Pointer(pArg)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pArg)).Fsign != 0)) 14256 } 14257 decimal_add(tls, p, pArg) 14258 decimal_free(tls, pArg) 14259 } 14260 14261 func decimalSumValue(tls *libc.TLS, context uintptr) { 14262 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14263 if p == uintptr(0) { 14264 return 14265 } 14266 decimal_result(tls, context, p) 14267 } 14268 14269 func decimalSumFinalize(tls *libc.TLS, context uintptr) { 14270 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14271 if p == uintptr(0) { 14272 return 14273 } 14274 decimal_result(tls, context, p) 14275 decimal_clear(tls, p) 14276 } 14277 14278 func decimalMulFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14279 var pA uintptr 14280 var pB uintptr 14281 var acc uintptr 14282 var i int32 14283 var j int32 14284 var k int32 14285 var minFrac int32 14286 var f int8 14287 var carry int32 14288 var x int32 14289 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14290 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14291 acc = uintptr(0) 14292 _ = argc 14293 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || 14294 pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14295 goto __1 14296 } 14297 goto mul_end 14298 __1: 14299 ; 14300 acc = sqlite3.Xsqlite3_malloc64(tls, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14301 if !(acc == uintptr(0)) { 14302 goto __2 14303 } 14304 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14305 goto mul_end 14306 __2: 14307 ; 14308 libc.Xmemset(tls, acc, 0, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14309 minFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14310 if !((*Decimal)(unsafe.Pointer(pB)).FnFrac < minFrac) { 14311 goto __3 14312 } 14313 minFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14314 __3: 14315 ; 14316 i = (*Decimal)(unsafe.Pointer(pA)).FnDigit - 1 14317 __4: 14318 if !(i >= 0) { 14319 goto __6 14320 } 14321 f = *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) 14322 carry = 0 14323 j = (*Decimal)(unsafe.Pointer(pB)).FnDigit - 1 14324 k = i + j + 3 14325 __7: 14326 if !(j >= 0) { 14327 goto __9 14328 } 14329 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + int32(f)*int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pB)).Fa + uintptr(j)))) + carry 14330 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14331 carry = x / 10 14332 goto __8 14333 __8: 14334 j-- 14335 k-- 14336 goto __7 14337 goto __9 14338 __9: 14339 ; 14340 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + carry 14341 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14342 *(*int8)(unsafe.Pointer(acc + uintptr(k-1))) += int8(x / 10) 14343 goto __5 14344 __5: 14345 i-- 14346 goto __4 14347 goto __6 14348 __6: 14349 ; 14350 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(pA)).Fa) 14351 (*Decimal)(unsafe.Pointer(pA)).Fa = acc 14352 acc = uintptr(0) 14353 *(*int32)(unsafe.Pointer(pA + 4)) += (*Decimal)(unsafe.Pointer(pB)).FnDigit + 2 14354 *(*int32)(unsafe.Pointer(pA + 8)) += (*Decimal)(unsafe.Pointer(pB)).FnFrac 14355 *(*int8)(unsafe.Pointer(pA)) ^= int8(int32((*Decimal)(unsafe.Pointer(pB)).Fsign)) 14356 __10: 14357 if !((*Decimal)(unsafe.Pointer(pA)).FnFrac > minFrac && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr((*Decimal)(unsafe.Pointer(pA)).FnDigit-1)))) == 0) { 14358 goto __11 14359 } 14360 (*Decimal)(unsafe.Pointer(pA)).FnFrac-- 14361 (*Decimal)(unsafe.Pointer(pA)).FnDigit-- 14362 goto __10 14363 __11: 14364 ; 14365 decimal_result(tls, context, pA) 14366 14367 mul_end: 14368 sqlite3.Xsqlite3_free(tls, acc) 14369 decimal_free(tls, pA) 14370 decimal_free(tls, pB) 14371 } 14372 14373 func sqlite3_decimal_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14374 var rc int32 = SQLITE_OK 14375 var i uint32 14376 _ = pzErrMsg 14377 14378 _ = pApi 14379 14380 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc))/uint64(unsafe.Sizeof(struct { 14381 FzFuncName uintptr 14382 FnArg int32 14383 F__ccgo_pad1 [4]byte 14384 FxFunc uintptr 14385 }{})) && rc == SQLITE_OK; i++ { 14386 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc[i].FzFuncName, aFunc[i].FnArg, 14387 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 14388 uintptr(0), aFunc[i].FxFunc, uintptr(0), uintptr(0)) 14389 } 14390 if rc == SQLITE_OK { 14391 rc = sqlite3.Xsqlite3_create_window_function(tls, db, ts+4826, 1, 14392 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, uintptr(0), 14393 *(*uintptr)(unsafe.Pointer(&struct { 14394 f func(*libc.TLS, uintptr, int32, uintptr) 14395 }{decimalSumStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumFinalize})), 14396 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumValue})), *(*uintptr)(unsafe.Pointer(&struct { 14397 f func(*libc.TLS, uintptr, int32, uintptr) 14398 }{decimalSumInverse})), uintptr(0)) 14399 } 14400 if rc == SQLITE_OK { 14401 rc = sqlite3.Xsqlite3_create_collation(tls, db, ts+4838, SQLITE_UTF8, 14402 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 14403 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 14404 }{decimalCollFunc}))) 14405 } 14406 return rc 14407 } 14408 14409 var aFunc = [5]struct { 14410 FzFuncName uintptr 14411 FnArg int32 14412 F__ccgo_pad1 [4]byte 14413 FxFunc uintptr 14414 }{ 14415 {FzFuncName: ts + 4838, FnArg: 1, FxFunc: 0}, 14416 {FzFuncName: ts + 4846, FnArg: 2, FxFunc: 0}, 14417 {FzFuncName: ts + 4858, FnArg: 2, FxFunc: 0}, 14418 {FzFuncName: ts + 4870, FnArg: 2, FxFunc: 0}, 14419 {FzFuncName: ts + 4882, FnArg: 2, FxFunc: 0}, 14420 } 14421 14422 type EvalResult = struct { 14423 Fz uintptr 14424 FzSep uintptr 14425 FszSep int32 14426 F__ccgo_pad1 [4]byte 14427 FnAlloc sqlite3_int64 14428 FnUsed sqlite3_int64 14429 } 14430 14431 func callback(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr, colnames uintptr) int32 { 14432 var p uintptr = pCtx 14433 var i int32 14434 if argv == uintptr(0) { 14435 return 0 14436 } 14437 for i = 0; i < argc; i++ { 14438 var z uintptr 14439 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 14440 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 14441 } else { 14442 z = ts + 584 14443 } 14444 var sz size_t = libc.Xstrlen(tls, z) 14445 if sqlite3_int64(sz)+(*EvalResult)(unsafe.Pointer(p)).FnUsed+sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep)+int64(1) > (*EvalResult)(unsafe.Pointer(p)).FnAlloc { 14446 var zNew uintptr 14447 (*EvalResult)(unsafe.Pointer(p)).FnAlloc = sqlite3_int64(uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc*int64(2)) + sz + uint64((*EvalResult)(unsafe.Pointer(p)).FszSep) + uint64(1)) 14448 14449 if (*EvalResult)(unsafe.Pointer(p)).FnAlloc <= int64(0x7fffffff) { 14450 zNew = sqlite3.Xsqlite3_realloc64(tls, (*EvalResult)(unsafe.Pointer(p)).Fz, uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc)) 14451 } else { 14452 zNew = uintptr(0) 14453 } 14454 if zNew == uintptr(0) { 14455 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(p)).Fz) 14456 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EvalResult{}))) 14457 return 1 14458 } 14459 (*EvalResult)(unsafe.Pointer(p)).Fz = zNew 14460 } 14461 if (*EvalResult)(unsafe.Pointer(p)).FnUsed > int64(0) { 14462 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), (*EvalResult)(unsafe.Pointer(p)).FzSep, uint64((*EvalResult)(unsafe.Pointer(p)).FszSep)) 14463 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep) 14464 } 14465 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), z, sz) 14466 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64(sz) 14467 } 14468 return 0 14469 } 14470 14471 func sqlEvalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14472 bp := tls.Alloc(48) 14473 defer tls.Free(48) 14474 14475 var zSql uintptr 14476 var db uintptr 14477 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 14478 var rc int32 14479 14480 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(EvalResult{}))) 14481 (*EvalResult)(unsafe.Pointer(bp)).FzSep = ts + 4894 14482 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14483 if zSql == uintptr(0) { 14484 return 14485 } 14486 if argc > 1 { 14487 (*EvalResult)(unsafe.Pointer(bp)).FzSep = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 14488 if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14489 return 14490 } 14491 } 14492 (*EvalResult)(unsafe.Pointer(bp)).FszSep = int32(libc.Xstrlen(tls, (*EvalResult)(unsafe.Pointer(bp)).FzSep)) 14493 db = sqlite3.Xsqlite3_context_db_handle(tls, context) 14494 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, *(*uintptr)(unsafe.Pointer(&struct { 14495 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 14496 }{callback})), bp, bp+40) 14497 if rc != SQLITE_OK { 14498 sqlite3.Xsqlite3_result_error(tls, context, *(*uintptr)(unsafe.Pointer(bp + 40)), -1) 14499 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 14500 } else if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14501 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14502 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(bp)).Fz) 14503 } else { 14504 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}))) 14505 } 14506 } 14507 14508 func sqlite3_eval_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14509 var rc int32 = SQLITE_OK 14510 _ = pApi 14511 14512 _ = pzErrMsg 14513 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 1, 14514 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14515 *(*uintptr)(unsafe.Pointer(&struct { 14516 f func(*libc.TLS, uintptr, int32, uintptr) 14517 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14518 if rc == SQLITE_OK { 14519 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 2, 14520 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14521 *(*uintptr)(unsafe.Pointer(&struct { 14522 f func(*libc.TLS, uintptr, int32, uintptr) 14523 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14524 } 14525 return rc 14526 } 14527 14528 type explain_vtab1 = struct { 14529 Fbase sqlite3_vtab 14530 Fdb uintptr 14531 } 14532 14533 type explain_vtab = explain_vtab1 14534 14535 type explain_cursor1 = struct { 14536 Fbase sqlite3_vtab_cursor 14537 Fdb uintptr 14538 FzSql uintptr 14539 FpExplain uintptr 14540 Frc int32 14541 F__ccgo_pad1 [4]byte 14542 } 14543 14544 type explain_cursor = explain_cursor1 14545 14546 func explainConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 14547 var pNew uintptr 14548 var rc int32 14549 14550 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 14551 ts+4901) 14552 if rc == SQLITE_OK { 14553 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_vtab{}))) 14554 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 14555 if pNew == uintptr(0) { 14556 return SQLITE_NOMEM 14557 } 14558 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(explain_vtab{}))) 14559 (*explain_vtab)(unsafe.Pointer(pNew)).Fdb = db 14560 } 14561 return rc 14562 } 14563 14564 func explainDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 14565 sqlite3.Xsqlite3_free(tls, pVtab) 14566 return SQLITE_OK 14567 } 14568 14569 func explainOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 14570 var pCur uintptr 14571 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_cursor{}))) 14572 if pCur == uintptr(0) { 14573 return SQLITE_NOMEM 14574 } 14575 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(explain_cursor{}))) 14576 (*explain_cursor)(unsafe.Pointer(pCur)).Fdb = (*explain_vtab)(unsafe.Pointer(p)).Fdb 14577 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 14578 return SQLITE_OK 14579 } 14580 14581 func explainClose(tls *libc.TLS, cur uintptr) int32 { 14582 var pCur uintptr = cur 14583 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14584 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14585 sqlite3.Xsqlite3_free(tls, pCur) 14586 return SQLITE_OK 14587 } 14588 14589 func explainNext(tls *libc.TLS, cur uintptr) int32 { 14590 var pCur uintptr = cur 14591 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14592 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_DONE && (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW { 14593 return (*explain_cursor)(unsafe.Pointer(pCur)).Frc 14594 } 14595 return SQLITE_OK 14596 } 14597 14598 func explainColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 14599 var pCur uintptr = cur 14600 if i == EXPLN_COLUMN_SQL { 14601 sqlite3.Xsqlite3_result_text(tls, ctx, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql, -1, libc.UintptrFromInt32(-1)) 14602 } else { 14603 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, i)) 14604 } 14605 return SQLITE_OK 14606 } 14607 14608 func explainRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 14609 var pCur uintptr = cur 14610 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, 0) 14611 return SQLITE_OK 14612 } 14613 14614 func explainEof(tls *libc.TLS, cur uintptr) int32 { 14615 var pCur uintptr = cur 14616 return libc.Bool32((*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW) 14617 } 14618 14619 func explainFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 14620 bp := tls.Alloc(16) 14621 defer tls.Free(16) 14622 14623 var pCur uintptr = pVtabCursor 14624 var zSql uintptr = uintptr(0) 14625 var rc int32 14626 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14627 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 14628 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_TEXT { 14629 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = SQLITE_DONE 14630 return SQLITE_OK 14631 } 14632 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14633 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 14634 if (*explain_cursor)(unsafe.Pointer(pCur)).FzSql != 0 { 14635 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+4963, libc.VaList(bp+8, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql)) 14636 } 14637 if zSql == uintptr(0) { 14638 rc = SQLITE_NOMEM 14639 } else { 14640 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*explain_cursor)(unsafe.Pointer(pCur)).Fdb, zSql, -1, pCur+24, uintptr(0)) 14641 sqlite3.Xsqlite3_free(tls, zSql) 14642 } 14643 if rc != 0 { 14644 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14645 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 14646 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14647 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = uintptr(0) 14648 } else { 14649 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14650 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_DONE || (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_ROW { 14651 rc = SQLITE_OK 14652 } else { 14653 rc = (*explain_cursor)(unsafe.Pointer(pCur)).Frc 14654 } 14655 } 14656 return rc 14657 } 14658 14659 func explainBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 14660 var i int32 14661 var idx int32 = -1 14662 var unusable int32 = 0 14663 14664 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(500) 14665 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 14666 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 14667 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != EXPLN_COLUMN_SQL { 14668 continue 14669 } 14670 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 14671 unusable = 1 14672 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 14673 idx = i 14674 } 14675 } 14676 if idx >= 0 { 14677 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 14678 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 14679 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).FargvIndex = 1 14680 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).Fomit = uint8(1) 14681 } else if unusable != 0 { 14682 return SQLITE_CONSTRAINT 14683 } 14684 return SQLITE_OK 14685 } 14686 14687 var explainModule = sqlite3_module{ 14688 FxConnect: 0, 14689 FxBestIndex: 0, 14690 FxDisconnect: 0, 14691 FxOpen: 0, 14692 FxClose: 0, 14693 FxFilter: 0, 14694 FxNext: 0, 14695 FxEof: 0, 14696 FxColumn: 0, 14697 FxRowid: 0, 14698 } 14699 14700 func sqlite3ExplainVtabInit(tls *libc.TLS, db uintptr) int32 { 14701 var rc int32 = SQLITE_OK 14702 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4974, uintptr(unsafe.Pointer(&explainModule)), uintptr(0)) 14703 return rc 14704 } 14705 14706 func sqlite3_explain_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14707 var rc int32 = SQLITE_OK 14708 _ = pApi 14709 14710 rc = sqlite3ExplainVtabInit(tls, db) 14711 return rc 14712 } 14713 14714 type pthread_once = struct { 14715 Fstate int32 14716 F__ccgo_pad1 [4]byte 14717 Fmutex pthread_mutex_t 14718 } 14719 14720 type pthread_t = uintptr 14721 type pthread_attr_t = uintptr 14722 type pthread_mutex_t = uintptr 14723 type pthread_mutexattr_t = uintptr 14724 type pthread_cond_t = uintptr 14725 type pthread_condattr_t = uintptr 14726 type pthread_key_t = int32 14727 type pthread_once_t = pthread_once 14728 type pthread_rwlock_t = uintptr 14729 type pthread_rwlockattr_t = uintptr 14730 type pthread_barrier_t = uintptr 14731 type pthread_barrierattr_t = uintptr 14732 type pthread_spinlock_t = uintptr 14733 14734 type pthread_addr_t = uintptr 14735 type pthread_startroutine_t = uintptr 14736 14737 type u_char = uint8 14738 type u_short = uint16 14739 type u_int = uint32 14740 type u_long = uint64 14741 type ushort = uint16 14742 type uint = uint32 14743 14744 type int8_t = int8 14745 14746 type int16_t = int16 14747 14748 type int32_t = int32 14749 14750 type int64_t = int64 14751 14752 type uint8_t = uint8 14753 14754 type uint16_t = uint16 14755 14756 type uint32_t = uint32 14757 14758 type uint64_t = uint64 14759 14760 type intptr_t = int64 14761 type uintptr_t = uint64 14762 type intmax_t = int64 14763 type uintmax_t = uint64 14764 14765 type u_int8_t = uint8 14766 type u_int16_t = uint16 14767 type u_int32_t = uint32 14768 type u_int64_t = uint64 14769 14770 type u_quad_t = uint64 14771 type quad_t = int64 14772 type qaddr_t = uintptr 14773 14774 type caddr_t = uintptr 14775 type c_caddr_t = uintptr 14776 14777 type blksize_t = int32 14778 14779 type cpuwhich_t = int32 14780 type cpulevel_t = int32 14781 type cpusetid_t = int32 14782 14783 type blkcnt_t = int64 14784 14785 type clock_t = int32 14786 14787 type clockid_t = int32 14788 14789 type critical_t = int64 14790 type daddr_t = int64 14791 14792 type dev_t = uint64 14793 14794 type fflags_t = uint32 14795 14796 type fixpt_t = uint32 14797 14798 type fsblkcnt_t = uint64 14799 type fsfilcnt_t = uint64 14800 14801 type gid_t = uint32 14802 14803 type in_addr_t = uint32 14804 14805 type in_port_t = uint16 14806 14807 type id_t = int64 14808 14809 type ino_t = uint64 14810 14811 type key_t = int64 14812 14813 type lwpid_t = int32 14814 14815 type mode_t = uint16 14816 14817 type accmode_t = int32 14818 14819 type nlink_t = uint64 14820 14821 type pid_t = int32 14822 14823 type register_t = int64 14824 14825 type rlim_t = int64 14826 14827 type sbintime_t = int64 14828 14829 type segsz_t = int64 14830 14831 type suseconds_t = int64 14832 14833 type time_t = int64 14834 14835 type timer_t = uintptr 14836 14837 type mqd_t = uintptr 14838 14839 type u_register_t = uint64 14840 14841 type uid_t = uint32 14842 14843 type useconds_t = uint32 14844 14845 type cap_ioctl_t = uint64 14846 14847 type kpaddr_t = uint64 14848 type kvaddr_t = uint64 14849 type ksize_t = uint64 14850 type kssize_t = int64 14851 14852 type vm_offset_t = uint64 14853 type vm_ooffset_t = uint64 14854 type vm_paddr_t = uint64 14855 type vm_pindex_t = uint64 14856 type vm_size_t = uint64 14857 14858 type rman_res_t = uint64 14859 14860 type __sigset = struct{ F__bits [4]uint32 } 14861 14862 type timeval = struct { 14863 Ftv_sec time_t 14864 Ftv_usec suseconds_t 14865 } 14866 14867 type timespec = struct { 14868 Ftv_sec time_t 14869 Ftv_nsec int64 14870 } 14871 14872 type itimerspec = struct { 14873 Fit_interval struct { 14874 Ftv_sec time_t 14875 Ftv_nsec int64 14876 } 14877 Fit_value struct { 14878 Ftv_sec time_t 14879 Ftv_nsec int64 14880 } 14881 } 14882 14883 type fd_mask = uint64 14884 14885 type sigset_t = __sigset 14886 14887 type fd_set1 = struct{ F__fds_bits [16]uint64 } 14888 14889 type fd_set = fd_set1 14890 14891 type timezone = struct { 14892 Ftz_minuteswest int32 14893 Ftz_dsttime int32 14894 } 14895 14896 type bintime = struct { 14897 Fsec time_t 14898 Ffrac uint64_t 14899 } 14900 14901 func sbttons(tls *libc.TLS, _sbt sbintime_t) int64_t { 14902 var ns uint64_t 14903 14904 ns = uint64_t(_sbt) 14905 if ns >= uint64(int64(1)<<32) { 14906 ns = ns >> 32 * uint64(1000000000) 14907 } else { 14908 ns = uint64(0) 14909 } 14910 14911 return int64_t(ns + uint64_t(int64(1000000000)*(_sbt&int64(0xffffffff))>>32)) 14912 } 14913 14914 func nstosbt(tls *libc.TLS, _ns int64_t) sbintime_t { 14915 var sb sbintime_t = int64(0) 14916 14917 if _ns >= int64(1000000000) { 14918 sb = _ns / int64(1000000000) * (int64(1) << 32) 14919 _ns = _ns % int64(1000000000) 14920 } 14921 14922 sb = sbintime_t(uint64(sb) + (uint64(_ns)*9223372037+uint64(0x7fffffff))>>31) 14923 return sb 14924 } 14925 14926 func sbttous(tls *libc.TLS, _sbt sbintime_t) int64_t { 14927 return int64(1000000) * _sbt >> 32 14928 } 14929 14930 func ustosbt(tls *libc.TLS, _us int64_t) sbintime_t { 14931 var sb sbintime_t = int64(0) 14932 14933 if _us >= int64(1000000) { 14934 sb = _us / int64(1000000) * (int64(1) << 32) 14935 _us = _us % int64(1000000) 14936 } 14937 14938 sb = sbintime_t(uint64(sb) + (uint64(_us)*9223372036855+uint64(0x7fffffff))>>31) 14939 return sb 14940 } 14941 14942 type itimerval = struct { 14943 Fit_interval struct { 14944 Ftv_sec time_t 14945 Ftv_usec suseconds_t 14946 } 14947 Fit_value struct { 14948 Ftv_sec time_t 14949 Ftv_usec suseconds_t 14950 } 14951 } 14952 14953 type clockinfo = struct { 14954 Fhz int32 14955 Ftick int32 14956 Fspare int32 14957 Fstathz int32 14958 Fprofhz int32 14959 } 14960 14961 type tm = struct { 14962 Ftm_sec int32 14963 Ftm_min int32 14964 Ftm_hour int32 14965 Ftm_mday int32 14966 Ftm_mon int32 14967 Ftm_year int32 14968 Ftm_wday int32 14969 Ftm_yday int32 14970 Ftm_isdst int32 14971 F__ccgo_pad1 [4]byte 14972 Ftm_gmtoff int64 14973 Ftm_zone uintptr 14974 } 14975 14976 type sigevent = struct { 14977 Fsigev_notify int32 14978 Fsigev_signo int32 14979 Fsigev_value struct { 14980 F__ccgo_pad1 [0]uint64 14981 Fsival_int int32 14982 F__ccgo_pad2 [4]byte 14983 } 14984 F_sigev_un struct { 14985 F__ccgo_pad1 [0]uint64 14986 F_threadid int32 14987 F__ccgo_pad2 [60]byte 14988 } 14989 } 14990 14991 type flock = struct { 14992 Fl_start off_t 14993 Fl_len off_t 14994 Fl_pid pid_t 14995 Fl_type int16 14996 Fl_whence int16 14997 Fl_sysid int32 14998 F__ccgo_pad1 [4]byte 14999 } 15000 15001 type __oflock = struct { 15002 Fl_start off_t 15003 Fl_len off_t 15004 Fl_pid pid_t 15005 Fl_type int16 15006 Fl_whence int16 15007 } 15008 15009 type crypt_data = struct { 15010 Finitialized int32 15011 F__buf [256]int8 15012 } 15013 15014 type dirent = struct { 15015 Fd_fileno ino_t 15016 Fd_off off_t 15017 Fd_reclen uint16 15018 Fd_type uint8 15019 Fd_pad0 uint8 15020 Fd_namlen uint16 15021 Fd_pad1 uint16 15022 Fd_name [256]int8 15023 } 15024 15025 func readFileContents(tls *libc.TLS, ctx uintptr, zName uintptr) { 15026 var in uintptr 15027 var nIn sqlite3_int64 15028 var pBuf uintptr 15029 var db uintptr 15030 var mxBlob int32 15031 15032 in = libc.Xfopen(tls, zName, ts+4402) 15033 if in == uintptr(0) { 15034 return 15035 } 15036 libc.Xfseek(tls, in, int64(0), SEEK_END) 15037 nIn = libc.Xftell(tls, in) 15038 libc.Xrewind(tls, in) 15039 db = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 15040 mxBlob = sqlite3.Xsqlite3_limit(tls, db, SQLITE_LIMIT_LENGTH, -1) 15041 if nIn > sqlite3_int64(mxBlob) { 15042 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_TOOBIG) 15043 libc.Xfclose(tls, in) 15044 return 15045 } 15046 pBuf = sqlite3.Xsqlite3_malloc64(tls, func() uint64 { 15047 if nIn != 0 { 15048 return uint64(nIn) 15049 } 15050 return uint64(1) 15051 }()) 15052 if pBuf == uintptr(0) { 15053 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15054 libc.Xfclose(tls, in) 15055 return 15056 } 15057 if nIn == sqlite3_int64(libc.Xfread(tls, pBuf, uint64(1), size_t(nIn), in)) { 15058 sqlite3.Xsqlite3_result_blob64(tls, ctx, pBuf, uint64(nIn), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 15059 } else { 15060 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_IOERR) 15061 sqlite3.Xsqlite3_free(tls, pBuf) 15062 } 15063 libc.Xfclose(tls, in) 15064 } 15065 15066 func readfileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15067 var zName uintptr 15068 _ = argc 15069 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15070 if zName == uintptr(0) { 15071 return 15072 } 15073 readFileContents(tls, context, zName) 15074 } 15075 15076 func ctxErrorMsg(tls *libc.TLS, ctx uintptr, zFmt uintptr, va uintptr) { 15077 var zMsg uintptr = uintptr(0) 15078 var ap va_list 15079 _ = ap 15080 ap = va 15081 zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 15082 sqlite3.Xsqlite3_result_error(tls, ctx, zMsg, -1) 15083 sqlite3.Xsqlite3_free(tls, zMsg) 15084 _ = ap 15085 } 15086 15087 func fileStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 15088 return libc.Xstat(tls, zPath, pStatBuf) 15089 } 15090 15091 func fileLinkStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 15092 return libc.Xlstat(tls, zPath, pStatBuf) 15093 } 15094 15095 func makeDirectory(tls *libc.TLS, zFile uintptr) int32 { 15096 bp := tls.Alloc(232) 15097 defer tls.Free(232) 15098 15099 var zCopy uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zFile)) 15100 var rc int32 = SQLITE_OK 15101 15102 if zCopy == uintptr(0) { 15103 rc = SQLITE_NOMEM 15104 } else { 15105 var nCopy int32 = int32(libc.Xstrlen(tls, zCopy)) 15106 var i int32 = 1 15107 15108 for rc == SQLITE_OK { 15109 var rc2 int32 15110 15111 for ; int32(*(*int8)(unsafe.Pointer(zCopy + uintptr(i)))) != '/' && i < nCopy; i++ { 15112 } 15113 if i == nCopy { 15114 break 15115 } 15116 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8(0) 15117 15118 rc2 = fileStat(tls, zCopy, bp+8) 15119 if rc2 != 0 { 15120 if libc.Xmkdir(tls, zCopy, uint16(0777)) != 0 { 15121 rc = SQLITE_ERROR 15122 } 15123 } else { 15124 if !(int32((*stat)(unsafe.Pointer(bp+8)).Fst_mode)&0170000 == 0040000) { 15125 rc = SQLITE_ERROR 15126 } 15127 } 15128 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8('/') 15129 i++ 15130 } 15131 15132 sqlite3.Xsqlite3_free(tls, zCopy) 15133 } 15134 15135 return rc 15136 } 15137 15138 func writeFile(tls *libc.TLS, pCtx uintptr, zFile uintptr, pData uintptr, mode mode_t, mtime sqlite3_int64) int32 { 15139 bp := tls.Alloc(256) 15140 defer tls.Free(256) 15141 15142 if zFile == uintptr(0) { 15143 return 1 15144 } 15145 if int32(mode)&0170000 == 0120000 { 15146 var zTo uintptr = sqlite3.Xsqlite3_value_text(tls, pData) 15147 if zTo == uintptr(0) || libc.Xsymlink(tls, zTo, zFile) < 0 { 15148 return 1 15149 } 15150 } else { 15151 if int32(mode)&0170000 == 0040000 { 15152 if libc.Xmkdir(tls, zFile, mode) != 0 { 15153 if *(*int32)(unsafe.Pointer(libc.X__error(tls))) != EEXIST || 15154 0 != fileStat(tls, zFile, bp) || 15155 !(int32((*stat)(unsafe.Pointer(bp)).Fst_mode)&0170000 == 0040000) || 15156 int32((*stat)(unsafe.Pointer(bp)).Fst_mode)&0777 != int32(mode)&0777 && 0 != libc.Xchmod(tls, zFile, uint16(int32(mode)&0777)) { 15157 return 1 15158 } 15159 } 15160 } else { 15161 var nWrite sqlite3_int64 = int64(0) 15162 var z uintptr 15163 var rc int32 = 0 15164 var out uintptr = libc.Xfopen(tls, zFile, ts+4982) 15165 if out == uintptr(0) { 15166 return 1 15167 } 15168 z = sqlite3.Xsqlite3_value_blob(tls, pData) 15169 if z != 0 { 15170 var n sqlite3_int64 = sqlite3_int64(libc.Xfwrite(tls, z, uint64(1), uint64(sqlite3.Xsqlite3_value_bytes(tls, pData)), out)) 15171 nWrite = sqlite3_int64(sqlite3.Xsqlite3_value_bytes(tls, pData)) 15172 if nWrite != n { 15173 rc = 1 15174 } 15175 } 15176 libc.Xfclose(tls, out) 15177 if rc == 0 && mode != 0 && libc.Xchmod(tls, zFile, uint16(int32(mode)&0777)) != 0 { 15178 rc = 1 15179 } 15180 if rc != 0 { 15181 return 2 15182 } 15183 sqlite3.Xsqlite3_result_int64(tls, pCtx, nWrite) 15184 } 15185 } 15186 15187 if mtime >= int64(0) { 15188 (*timeval)(unsafe.Pointer(bp + 224)).Ftv_usec = libc.AssignPtrInt64(bp+224+1*16+8, int64(0)) 15189 (*timeval)(unsafe.Pointer(bp + 224)).Ftv_sec = libc.Xtime(tls, uintptr(0)) 15190 (*timeval)(unsafe.Pointer(bp + 224 + 1*16)).Ftv_sec = mtime 15191 if libc.Xutimes(tls, zFile, bp+224) != 0 { 15192 return 1 15193 } 15194 } 15195 15196 return 0 15197 } 15198 15199 func writefileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15200 bp := tls.Alloc(24) 15201 defer tls.Free(24) 15202 15203 var zFile uintptr 15204 var mode mode_t = mode_t(0) 15205 var res int32 15206 var mtime sqlite3_int64 = int64(-1) 15207 15208 if argc < 2 || argc > 4 { 15209 sqlite3.Xsqlite3_result_error(tls, context, 15210 ts+4985, -1) 15211 return 15212 } 15213 15214 zFile = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15215 if zFile == uintptr(0) { 15216 return 15217 } 15218 if argc >= 3 { 15219 mode = mode_t(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 15220 } 15221 if argc == 4 { 15222 mtime = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 15223 } 15224 15225 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 15226 if res == 1 && *(*int32)(unsafe.Pointer(libc.X__error(tls))) == ENOENT { 15227 if makeDirectory(tls, zFile) == SQLITE_OK { 15228 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 15229 } 15230 } 15231 15232 if argc > 2 && res != 0 { 15233 if int32(mode)&0170000 == 0120000 { 15234 ctxErrorMsg(tls, context, ts+5035, libc.VaList(bp, zFile)) 15235 } else if int32(mode)&0170000 == 0040000 { 15236 ctxErrorMsg(tls, context, ts+5064, libc.VaList(bp+8, zFile)) 15237 } else { 15238 ctxErrorMsg(tls, context, ts+5095, libc.VaList(bp+16, zFile)) 15239 } 15240 } 15241 } 15242 15243 func lsModeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15244 bp := tls.Alloc(16) 15245 defer tls.Free(16) 15246 15247 var i int32 15248 var iMode int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 15249 15250 _ = argc 15251 if iMode&0170000 == 0120000 { 15252 *(*int8)(unsafe.Pointer(bp)) = int8('l') 15253 } else if iMode&0170000 == 0100000 { 15254 *(*int8)(unsafe.Pointer(bp)) = int8('-') 15255 } else if iMode&0170000 == 0040000 { 15256 *(*int8)(unsafe.Pointer(bp)) = int8('d') 15257 } else { 15258 *(*int8)(unsafe.Pointer(bp)) = int8('?') 15259 } 15260 for i = 0; i < 3; i++ { 15261 var m int32 = iMode >> ((2 - i) * 3) 15262 var a uintptr = bp + uintptr(1+i*3) 15263 *(*int8)(unsafe.Pointer(a)) = func() int8 { 15264 if m&0x4 != 0 { 15265 return int8('r') 15266 } 15267 return int8('-') 15268 }() 15269 *(*int8)(unsafe.Pointer(a + 1)) = func() int8 { 15270 if m&0x2 != 0 { 15271 return int8('w') 15272 } 15273 return int8('-') 15274 }() 15275 *(*int8)(unsafe.Pointer(a + 2)) = func() int8 { 15276 if m&0x1 != 0 { 15277 return int8('x') 15278 } 15279 return int8('-') 15280 }() 15281 } 15282 *(*int8)(unsafe.Pointer(bp + 10)) = int8(0) 15283 sqlite3.Xsqlite3_result_text(tls, context, bp, -1, libc.UintptrFromInt32(-1)) 15284 } 15285 15286 type fsdir_cursor1 = struct { 15287 Fbase sqlite3_vtab_cursor 15288 FnLvl int32 15289 FiLvl int32 15290 FaLvl uintptr 15291 FzBase uintptr 15292 FnBase int32 15293 F__ccgo_pad1 [4]byte 15294 FsStat struct { 15295 Fst_dev dev_t 15296 Fst_ino ino_t 15297 Fst_nlink nlink_t 15298 Fst_mode mode_t 15299 Fst_padding0 int16 15300 Fst_uid uid_t 15301 Fst_gid gid_t 15302 Fst_padding1 int32 15303 Fst_rdev dev_t 15304 Fst_atim struct { 15305 Ftv_sec time_t 15306 Ftv_nsec int64 15307 } 15308 Fst_mtim struct { 15309 Ftv_sec time_t 15310 Ftv_nsec int64 15311 } 15312 Fst_ctim struct { 15313 Ftv_sec time_t 15314 Ftv_nsec int64 15315 } 15316 Fst_birthtim struct { 15317 Ftv_sec time_t 15318 Ftv_nsec int64 15319 } 15320 Fst_size off_t 15321 Fst_blocks blkcnt_t 15322 Fst_blksize blksize_t 15323 Fst_flags fflags_t 15324 Fst_gen uint64 15325 Fst_spare [10]uint64 15326 } 15327 FzPath uintptr 15328 FiRowid sqlite3_int64 15329 } 15330 15331 type fsdir_cursor = fsdir_cursor1 15332 type FsdirLevel1 = struct { 15333 FpDir uintptr 15334 FzDir uintptr 15335 } 15336 15337 type FsdirLevel = FsdirLevel1 15338 15339 type fsdir_tab1 = struct{ Fbase sqlite3_vtab } 15340 15341 type fsdir_tab = fsdir_tab1 15342 15343 func fsdirConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15344 var pNew uintptr = uintptr(0) 15345 var rc int32 15346 _ = pAux 15347 _ = argc 15348 _ = argv 15349 _ = pzErr 15350 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5120) 15351 if rc == SQLITE_OK { 15352 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_tab{}))) 15353 if pNew == uintptr(0) { 15354 return SQLITE_NOMEM 15355 } 15356 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fsdir_tab{}))) 15357 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 15358 } 15359 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 15360 return rc 15361 } 15362 15363 func fsdirDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15364 sqlite3.Xsqlite3_free(tls, pVtab) 15365 return SQLITE_OK 15366 } 15367 15368 func fsdirOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 15369 var pCur uintptr 15370 _ = p 15371 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_cursor{}))) 15372 if pCur == uintptr(0) { 15373 return SQLITE_NOMEM 15374 } 15375 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fsdir_cursor{}))) 15376 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 15377 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15378 return SQLITE_OK 15379 } 15380 15381 func fsdirResetCursor(tls *libc.TLS, pCur uintptr) { 15382 var i int32 15383 for i = 0; i <= (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl; i++ { 15384 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(i)*16 15385 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir != 0 { 15386 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15387 } 15388 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15389 } 15390 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15391 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl) 15392 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = uintptr(0) 15393 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15394 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = uintptr(0) 15395 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = 0 15396 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = 0 15397 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 15398 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 15399 } 15400 15401 func fsdirClose(tls *libc.TLS, cur uintptr) int32 { 15402 var pCur uintptr = cur 15403 15404 fsdirResetCursor(tls, pCur) 15405 sqlite3.Xsqlite3_free(tls, pCur) 15406 return SQLITE_OK 15407 } 15408 15409 func fsdirSetErrmsg(tls *libc.TLS, pCur uintptr, zFmt uintptr, va uintptr) { 15410 var ap va_list 15411 _ = ap 15412 ap = va 15413 (*sqlite3_vtab)(unsafe.Pointer((*fsdir_cursor)(unsafe.Pointer(pCur)).Fbase.FpVtab)).FzErrMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 15414 _ = ap 15415 } 15416 15417 func fsdirNext(tls *libc.TLS, cur uintptr) int32 { 15418 bp := tls.Alloc(32) 15419 defer tls.Free(32) 15420 15421 var pCur uintptr = cur 15422 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15423 15424 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid++ 15425 if int32(m)&0170000 == 0040000 { 15426 var iNew int32 = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl + 1 15427 var pLvl uintptr 15428 if iNew >= (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl { 15429 var nNew int32 = iNew + 1 15430 var nByte sqlite3_int64 = sqlite3_int64(uint64(nNew) * uint64(unsafe.Sizeof(FsdirLevel{}))) 15431 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl, uint64(nByte)) 15432 if aNew == uintptr(0) { 15433 return SQLITE_NOMEM 15434 } 15435 libc.Xmemset(tls, aNew+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl)*16, 0, uint64(unsafe.Sizeof(FsdirLevel{}))*uint64(nNew-(*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl)) 15436 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = aNew 15437 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = nNew 15438 } 15439 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = iNew 15440 pLvl = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(iNew)*16 15441 15442 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath 15443 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15444 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = libc.Xopendir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15445 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir == uintptr(0) { 15446 fsdirSetErrmsg(tls, pCur, ts+5180, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15447 return SQLITE_ERROR 15448 } 15449 } 15450 15451 for (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl >= 0 { 15452 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl)*16 15453 var pEntry uintptr = libc.Xreaddir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15454 if pEntry != 0 { 15455 if int32(*(*int8)(unsafe.Pointer(pEntry + 24))) == '.' { 15456 if int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 1))) == '.' && int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 2))) == 0 { 15457 continue 15458 } 15459 if int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 1))) == 0 { 15460 continue 15461 } 15462 } 15463 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15464 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp+8, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir, pEntry+24)) 15465 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15466 return SQLITE_NOMEM 15467 } 15468 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 15469 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15470 return SQLITE_ERROR 15471 } 15472 return SQLITE_OK 15473 } 15474 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15475 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15476 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = uintptr(0) 15477 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = uintptr(0) 15478 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl-- 15479 } 15480 15481 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15482 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15483 return SQLITE_OK 15484 } 15485 15486 func fsdirColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15487 bp := tls.Alloc(64) 15488 defer tls.Free(64) 15489 15490 var pCur uintptr = cur 15491 switch i { 15492 case FSDIR_COLUMN_NAME: 15493 { 15494 sqlite3.Xsqlite3_result_text(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase), -1, libc.UintptrFromInt32(-1)) 15495 break 15496 15497 } 15498 15499 case FSDIR_COLUMN_MODE: 15500 sqlite3.Xsqlite3_result_int64(tls, ctx, int64((*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode)) 15501 break 15502 15503 case FSDIR_COLUMN_MTIME: 15504 sqlite3.Xsqlite3_result_int64(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mtim.Ftv_sec) 15505 break 15506 15507 case FSDIR_COLUMN_DATA: 15508 { 15509 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15510 if int32(m)&0170000 == 0040000 { 15511 sqlite3.Xsqlite3_result_null(tls, ctx) 15512 } else if int32(m)&0170000 == 0120000 { 15513 var aBuf uintptr = bp 15514 var nBuf sqlite3_int64 = int64(64) 15515 var n int32 15516 15517 for 1 != 0 { 15518 n = int32(libc.Xreadlink(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, aBuf, uint64(nBuf))) 15519 if sqlite3_int64(n) < nBuf { 15520 break 15521 } 15522 if aBuf != bp { 15523 sqlite3.Xsqlite3_free(tls, aBuf) 15524 } 15525 nBuf = nBuf * int64(2) 15526 aBuf = sqlite3.Xsqlite3_malloc64(tls, uint64(nBuf)) 15527 if aBuf == uintptr(0) { 15528 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15529 return SQLITE_NOMEM 15530 } 15531 } 15532 15533 sqlite3.Xsqlite3_result_text(tls, ctx, aBuf, n, libc.UintptrFromInt32(-1)) 15534 if aBuf != bp { 15535 sqlite3.Xsqlite3_free(tls, aBuf) 15536 } 15537 } else { 15538 readFileContents(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15539 } 15540 15541 } 15542 fallthrough 15543 case FSDIR_COLUMN_PATH: 15544 fallthrough 15545 default: 15546 { 15547 break 15548 15549 } 15550 } 15551 return SQLITE_OK 15552 } 15553 15554 func fsdirRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15555 var pCur uintptr = cur 15556 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid 15557 return SQLITE_OK 15558 } 15559 15560 func fsdirEof(tls *libc.TLS, cur uintptr) int32 { 15561 var pCur uintptr = cur 15562 return libc.Bool32((*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0)) 15563 } 15564 15565 func fsdirFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15566 bp := tls.Alloc(32) 15567 defer tls.Free(32) 15568 15569 var zDir uintptr = uintptr(0) 15570 var pCur uintptr = cur 15571 _ = idxStr 15572 fsdirResetCursor(tls, pCur) 15573 15574 if idxNum == 0 { 15575 fsdirSetErrmsg(tls, pCur, ts+5233, 0) 15576 return SQLITE_ERROR 15577 } 15578 15579 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15580 if zDir == uintptr(0) { 15581 fsdirSetErrmsg(tls, pCur, ts+5275, 0) 15582 return SQLITE_ERROR 15583 } 15584 if argc == 2 { 15585 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 15586 } 15587 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase != 0 { 15588 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = int32(libc.Xstrlen(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase)) + 1 15589 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase, zDir)) 15590 } else { 15591 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zDir)) 15592 } 15593 15594 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15595 return SQLITE_NOMEM 15596 } 15597 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 15598 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15599 return SQLITE_ERROR 15600 } 15601 15602 return SQLITE_OK 15603 } 15604 15605 func fsdirBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15606 var i int32 15607 var idxPath int32 = -1 15608 var idxDir int32 = -1 15609 var seenPath int32 = 0 15610 var seenDir int32 = 0 15611 var pConstraint uintptr 15612 15613 _ = tab 15614 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 15615 i = 0 15616 __1: 15617 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15618 goto __3 15619 } 15620 { 15621 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 15622 goto __2 15623 } 15624 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 15625 case FSDIR_COLUMN_PATH: 15626 { 15627 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15628 idxPath = i 15629 seenPath = 0 15630 } else if idxPath < 0 { 15631 seenPath = 1 15632 } 15633 break 15634 15635 } 15636 case FSDIR_COLUMN_DIR: 15637 { 15638 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15639 idxDir = i 15640 seenDir = 0 15641 } else if idxDir < 0 { 15642 seenDir = 1 15643 } 15644 break 15645 15646 } 15647 } 15648 15649 } 15650 goto __2 15651 __2: 15652 i++ 15653 pConstraint += 12 15654 goto __1 15655 goto __3 15656 __3: 15657 ; 15658 if seenPath != 0 || seenDir != 0 { 15659 return SQLITE_CONSTRAINT 15660 } 15661 15662 if idxPath < 0 { 15663 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 15664 15665 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(0x7fffffff) 15666 } else { 15667 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).Fomit = uint8(1) 15668 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).FargvIndex = 1 15669 if idxDir >= 0 { 15670 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).Fomit = uint8(1) 15671 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).FargvIndex = 2 15672 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 15673 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 15674 } else { 15675 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 15676 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100.0 15677 } 15678 } 15679 15680 return SQLITE_OK 15681 } 15682 15683 func fsdirRegister(tls *libc.TLS, db uintptr) int32 { 15684 var rc int32 = sqlite3.Xsqlite3_create_module(tls, db, ts+5325, uintptr(unsafe.Pointer(&fsdirModule1)), uintptr(0)) 15685 return rc 15686 } 15687 15688 var fsdirModule1 = sqlite3_module{ 15689 FxConnect: 0, 15690 FxBestIndex: 0, 15691 FxDisconnect: 0, 15692 FxOpen: 0, 15693 FxClose: 0, 15694 FxFilter: 0, 15695 FxNext: 0, 15696 FxEof: 0, 15697 FxColumn: 0, 15698 FxRowid: 0, 15699 } 15700 15701 func sqlite3_fileio_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15702 var rc int32 = SQLITE_OK 15703 _ = pApi 15704 15705 _ = pzErrMsg 15706 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5331, 1, 15707 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15708 *(*uintptr)(unsafe.Pointer(&struct { 15709 f func(*libc.TLS, uintptr, int32, uintptr) 15710 }{readfileFunc})), uintptr(0), uintptr(0)) 15711 if rc == SQLITE_OK { 15712 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5340, -1, 15713 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15714 *(*uintptr)(unsafe.Pointer(&struct { 15715 f func(*libc.TLS, uintptr, int32, uintptr) 15716 }{writefileFunc})), uintptr(0), uintptr(0)) 15717 } 15718 if rc == SQLITE_OK { 15719 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5350, 1, SQLITE_UTF8, uintptr(0), 15720 *(*uintptr)(unsafe.Pointer(&struct { 15721 f func(*libc.TLS, uintptr, int32, uintptr) 15722 }{lsModeFunc})), uintptr(0), uintptr(0)) 15723 } 15724 if rc == SQLITE_OK { 15725 rc = fsdirRegister(tls, db) 15726 } 15727 return rc 15728 } 15729 15730 type fuzzer_vtab1 = struct { 15731 Fbase sqlite3_vtab 15732 FzClassName uintptr 15733 FpRule uintptr 15734 FnCursor int32 15735 F__ccgo_pad1 [4]byte 15736 } 15737 15738 type fuzzer_vtab = fuzzer_vtab1 15739 type fuzzer_cursor1 = struct { 15740 Fbase sqlite3_vtab_cursor 15741 FiRowid sqlite3_int64 15742 FpVtab uintptr 15743 FrLimit fuzzer_cost 15744 F__ccgo_pad1 [4]byte 15745 FpStem uintptr 15746 FpDone uintptr 15747 FaQueue [20]uintptr 15748 FmxQueue int32 15749 F__ccgo_pad2 [4]byte 15750 FzBuf uintptr 15751 FnBuf int32 15752 FnStem int32 15753 FiRuleset int32 15754 F__ccgo_pad3 [4]byte 15755 FnullRule fuzzer_rule 15756 FapHash [4001]uintptr 15757 } 15758 15759 type fuzzer_cursor = fuzzer_cursor1 15760 type fuzzer_rule1 = struct { 15761 FpNext uintptr 15762 FzFrom uintptr 15763 FrCost fuzzer_cost 15764 FnFrom fuzzer_len 15765 FnTo fuzzer_len 15766 F__ccgo_pad1 [2]byte 15767 FiRuleset fuzzer_ruleid 15768 FzTo [4]int8 15769 } 15770 15771 type fuzzer_rule = fuzzer_rule1 15772 type fuzzer_stem1 = struct { 15773 FzBasis uintptr 15774 FpRule uintptr 15775 FpNext uintptr 15776 FpHash uintptr 15777 FrBaseCost fuzzer_cost 15778 FrCostX fuzzer_cost 15779 FnBasis fuzzer_len 15780 Fn fuzzer_len 15781 F__ccgo_pad1 [6]byte 15782 } 15783 15784 type fuzzer_stem = fuzzer_stem1 15785 15786 type fuzzer_cost = int32 15787 type fuzzer_len = int8 15788 type fuzzer_ruleid = int32 15789 15790 func fuzzerMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 15791 bp := tls.Alloc(32) 15792 defer tls.Free(32) 15793 15794 var pTail uintptr 15795 15796 pTail = bp 15797 for pA != 0 && pB != 0 { 15798 if (*fuzzer_rule)(unsafe.Pointer(pA)).FrCost <= (*fuzzer_rule)(unsafe.Pointer(pB)).FrCost { 15799 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15800 pTail = pA 15801 pA = (*fuzzer_rule)(unsafe.Pointer(pA)).FpNext 15802 } else { 15803 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15804 pTail = pB 15805 pB = (*fuzzer_rule)(unsafe.Pointer(pB)).FpNext 15806 } 15807 } 15808 if pA == uintptr(0) { 15809 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15810 } else { 15811 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15812 } 15813 return (*fuzzer_rule)(unsafe.Pointer(bp)).FpNext 15814 } 15815 15816 func fuzzerLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 15817 bp := tls.Alloc(48) 15818 defer tls.Free(48) 15819 15820 var iRuleset sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 15821 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 15822 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 15823 var nCost int32 = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 15824 15825 var rc int32 = SQLITE_OK 15826 var nFrom int32 15827 var nTo int32 15828 var pRule uintptr = uintptr(0) 15829 15830 if zFrom == uintptr(0) { 15831 zFrom = ts + 584 15832 } 15833 if zTo == uintptr(0) { 15834 zTo = ts + 584 15835 } 15836 nFrom = int32(libc.Xstrlen(tls, zFrom)) 15837 nTo = int32(libc.Xstrlen(tls, zTo)) 15838 15839 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 15840 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 15841 return SQLITE_OK 15842 } 15843 15844 if nCost <= 0 || nCost > FUZZER_MX_COST { 15845 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 15846 libc.VaList(bp, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_COST)) 15847 rc = SQLITE_ERROR 15848 } else if nFrom > FUZZER_MX_LENGTH || nTo > FUZZER_MX_LENGTH { 15849 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 15850 libc.VaList(bp+16, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_LENGTH)) 15851 rc = SQLITE_ERROR 15852 } else if iRuleset < int64(0) || iRuleset > int64(FUZZER_MX_RULEID) { 15853 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+5357, 15854 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_RULEID)) 15855 rc = SQLITE_ERROR 15856 } else { 15857 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_rule{}))+uint64(nFrom)+uint64(nTo)) 15858 if pRule == uintptr(0) { 15859 rc = SQLITE_NOMEM 15860 } else { 15861 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(fuzzer_rule{}))) 15862 (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 28 15863 *(*uintptr)(unsafe.Pointer(pRule + 8)) += uintptr(nTo + 1) 15864 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom = fuzzer_len(nFrom) 15865 libc.Xmemcpy(tls, (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 15866 libc.Xmemcpy(tls, pRule+28, zTo, uint64(nTo+1)) 15867 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo = fuzzer_len(nTo) 15868 (*fuzzer_rule)(unsafe.Pointer(pRule)).FrCost = nCost 15869 (*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset = int32(iRuleset) 15870 } 15871 } 15872 15873 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 15874 return rc 15875 } 15876 15877 func fuzzerLoadRules(tls *libc.TLS, db uintptr, p uintptr, zDb uintptr, zData uintptr, pzErr uintptr) int32 { 15878 bp := tls.Alloc(192) 15879 defer tls.Free(192) 15880 15881 var rc int32 = SQLITE_OK 15882 var zSql uintptr 15883 var pHead uintptr = uintptr(0) 15884 15885 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, zDb, zData)) 15886 if zSql == uintptr(0) { 15887 rc = SQLITE_NOMEM 15888 } else { 15889 var rc2 int32 15890 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 15891 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 15892 if rc != SQLITE_OK { 15893 *(*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))) 15894 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 15895 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 15896 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, zData, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 15897 rc = SQLITE_ERROR 15898 } else { 15899 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 15900 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 15901 rc = fuzzerLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 15902 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 15903 (*fuzzer_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 15904 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 15905 } 15906 } 15907 } 15908 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 15909 if rc == SQLITE_OK { 15910 rc = rc2 15911 } 15912 } 15913 sqlite3.Xsqlite3_free(tls, zSql) 15914 15915 if rc == SQLITE_OK { 15916 var i uint32 15917 var pX uintptr 15918 15919 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 15920 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 15921 } 15922 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 15923 pHead = (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext 15924 (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 15925 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++ { 15926 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15927 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 15928 } 15929 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15930 } 15931 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 15932 i = uint32(1) 15933 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 15934 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15935 } 15936 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = fuzzerMergeRules(tls, (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule, pX) 15937 } else { 15938 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = pHead 15939 } 15940 15941 return rc 15942 } 15943 15944 func fuzzerDequote(tls *libc.TLS, zIn uintptr) uintptr { 15945 var nIn sqlite3_int64 15946 var zOut uintptr 15947 15948 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 15949 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 15950 if zOut != 0 { 15951 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 15952 15953 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 15954 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 15955 } else { 15956 var iOut int32 = 0 15957 var iIn int32 15958 15959 if int32(q) == '[' { 15960 q = int8(']') 15961 } 15962 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 15963 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 15964 iIn++ 15965 } 15966 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 15967 } 15968 } 15969 15970 } 15971 return zOut 15972 } 15973 15974 func fuzzerDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15975 var p uintptr = pVtab 15976 15977 for (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule != 0 { 15978 var pRule uintptr = (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule 15979 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 15980 sqlite3.Xsqlite3_free(tls, pRule) 15981 } 15982 sqlite3.Xsqlite3_free(tls, p) 15983 return SQLITE_OK 15984 } 15985 15986 func fuzzerConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15987 bp := tls.Alloc(8) 15988 defer tls.Free(8) 15989 15990 var rc int32 = SQLITE_OK 15991 var pNew uintptr = uintptr(0) 15992 var zModule uintptr = *(*uintptr)(unsafe.Pointer(argv)) 15993 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 15994 15995 if argc != 4 { 15996 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 15997 ts+5394, libc.VaList(bp, zModule)) 15998 rc = SQLITE_ERROR 15999 } else { 16000 var nModule sqlite3_int64 16001 16002 nModule = sqlite3_int64(libc.Xstrlen(tls, zModule)) 16003 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_vtab{}))+uint64(nModule)+uint64(1)) 16004 if pNew == uintptr(0) { 16005 rc = SQLITE_NOMEM 16006 } else { 16007 var zTab uintptr 16008 16009 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_vtab{}))) 16010 (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName = pNew + 1*48 16011 libc.Xmemcpy(tls, (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName, zModule, size_t(nModule+int64(1))) 16012 16013 zTab = fuzzerDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 16014 if zTab == uintptr(0) { 16015 rc = SQLITE_NOMEM 16016 } else { 16017 rc = fuzzerLoadRules(tls, db, pNew, zDb, zTab, pzErr) 16018 sqlite3.Xsqlite3_free(tls, zTab) 16019 } 16020 16021 if rc == SQLITE_OK { 16022 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5445) 16023 } 16024 if rc != SQLITE_OK { 16025 fuzzerDisconnect(tls, pNew) 16026 pNew = uintptr(0) 16027 } else { 16028 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 16029 } 16030 } 16031 } 16032 16033 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 16034 return rc 16035 } 16036 16037 func fuzzerOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 16038 var p uintptr = pVTab 16039 var pCur uintptr 16040 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fuzzer_cursor{}))) 16041 if pCur == uintptr(0) { 16042 return SQLITE_NOMEM 16043 } 16044 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fuzzer_cursor{}))) 16045 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab = p 16046 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 16047 (*fuzzer_vtab)(unsafe.Pointer(p)).FnCursor++ 16048 return SQLITE_OK 16049 } 16050 16051 func fuzzerClearStemList(tls *libc.TLS, pStem uintptr) { 16052 for pStem != 0 { 16053 var pNext uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext 16054 sqlite3.Xsqlite3_free(tls, pStem) 16055 pStem = pNext 16056 } 16057 } 16058 16059 func fuzzerClearCursor(tls *libc.TLS, pCur uintptr, clearHash int32) { 16060 var i int32 16061 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 16062 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone) 16063 for i = 0; i < FUZZER_NQUEUE; i++ { 16064 fuzzerClearStemList(tls, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 16065 } 16066 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16067 if clearHash != 0 && (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem != 0 { 16068 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = 0 16069 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16070 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = uintptr(0) 16071 libc.Xmemset(tls, pCur+48, 0, uint64(unsafe.Sizeof([20]uintptr{}))) 16072 libc.Xmemset(tls, pCur+272, 0, uint64(unsafe.Sizeof([4001]uintptr{}))) 16073 } 16074 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem = 0 16075 } 16076 16077 func fuzzerClose(tls *libc.TLS, cur uintptr) int32 { 16078 var pCur uintptr = cur 16079 fuzzerClearCursor(tls, pCur, 0) 16080 sqlite3.Xsqlite3_free(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 16081 (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 16082 sqlite3.Xsqlite3_free(tls, pCur) 16083 return SQLITE_OK 16084 } 16085 16086 func fuzzerRender(tls *libc.TLS, pStem uintptr, pzBuf uintptr, pnBuf uintptr) int32 { 16087 var pRule uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule 16088 var n int32 16089 var z uintptr 16090 16091 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis) + int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo) - int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) 16092 if *(*int32)(unsafe.Pointer(pnBuf)) < n+1 { 16093 *(*uintptr)(unsafe.Pointer(pzBuf)) = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(pzBuf)), n+100) 16094 if *(*uintptr)(unsafe.Pointer(pzBuf)) == uintptr(0) { 16095 return SQLITE_NOMEM 16096 } 16097 *(*int32)(unsafe.Pointer(pnBuf)) = n + 100 16098 } 16099 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) 16100 z = *(*uintptr)(unsafe.Pointer(pzBuf)) 16101 if n < 0 { 16102 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)+1)) 16103 } else { 16104 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(n)) 16105 libc.Xmemcpy(tls, z+uintptr(n), pRule+28, uint64((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)) 16106 libc.Xmemcpy(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)), 16107 uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-n-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)+1)) 16108 } 16109 16110 return SQLITE_OK 16111 } 16112 16113 func fuzzerHash(tls *libc.TLS, z uintptr) uint32 { 16114 var h uint32 = uint32(0) 16115 for *(*int8)(unsafe.Pointer(z)) != 0 { 16116 h = h<<3 ^ h>>29 ^ uint32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 16117 } 16118 return h % uint32(FUZZER_HASH) 16119 } 16120 16121 func fuzzerCost(tls *libc.TLS, pStem uintptr) fuzzer_cost { 16122 return libc.AssignPtrInt32(pStem+36, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrBaseCost+(*fuzzer_rule)(unsafe.Pointer((*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule)).FrCost) 16123 } 16124 16125 func fuzzerSeen(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 16126 var h uint32 16127 var pLookup uintptr 16128 16129 if fuzzerRender(tls, pStem, pCur+216, pCur+224) == SQLITE_NOMEM { 16130 return -1 16131 } 16132 h = fuzzerHash(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 16133 pLookup = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 16134 for pLookup != 0 && libc.Xstrcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pLookup)).FzBasis, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) != 0 { 16135 pLookup = (*fuzzer_stem)(unsafe.Pointer(pLookup)).FpHash 16136 } 16137 return libc.Bool32(pLookup != uintptr(0)) 16138 } 16139 16140 func fuzzerSkipRule(tls *libc.TLS, pRule uintptr, pStem uintptr, iRuleset int32) int32 { 16141 return libc.Bool32(pRule != 0 && ((*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset != iRuleset || 16142 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)) 16143 } 16144 16145 func fuzzerAdvance(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 16146 var pRule uintptr 16147 for libc.AssignUintptr(&pRule, (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule) != uintptr(0) { 16148 for int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) < int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) { 16149 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn++ 16150 if int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) == 0 || 16151 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 { 16152 var rc int32 = fuzzerSeen(tls, pCur, pStem) 16153 if rc < 0 { 16154 return -1 16155 } 16156 if rc == 0 { 16157 fuzzerCost(tls, pStem) 16158 return 1 16159 } 16160 } 16161 } 16162 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = int8(-1) 16163 for __ccgo := true; __ccgo; __ccgo = fuzzerSkipRule(tls, pRule, pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 16164 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16165 } 16166 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pRule 16167 if pRule != 0 && fuzzerCost(tls, pStem) > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit { 16168 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = uintptr(0) 16169 } 16170 } 16171 return 0 16172 } 16173 16174 func fuzzerMergeStems(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 16175 bp := tls.Alloc(48) 16176 defer tls.Free(48) 16177 16178 var pTail uintptr 16179 16180 pTail = bp 16181 for pA != 0 && pB != 0 { 16182 if (*fuzzer_stem)(unsafe.Pointer(pA)).FrCostX <= (*fuzzer_stem)(unsafe.Pointer(pB)).FrCostX { 16183 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 16184 pTail = pA 16185 pA = (*fuzzer_stem)(unsafe.Pointer(pA)).FpNext 16186 } else { 16187 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 16188 pTail = pB 16189 pB = (*fuzzer_stem)(unsafe.Pointer(pB)).FpNext 16190 } 16191 } 16192 if pA == uintptr(0) { 16193 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 16194 } else { 16195 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 16196 } 16197 return (*fuzzer_stem)(unsafe.Pointer(bp)).FpNext 16198 } 16199 16200 func fuzzerLowestCostStem(tls *libc.TLS, pCur uintptr) uintptr { 16201 var pBest uintptr 16202 var pX uintptr 16203 var iBest int32 16204 var i int32 16205 16206 if (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem == uintptr(0) { 16207 iBest = -1 16208 pBest = uintptr(0) 16209 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 16210 pX = *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) 16211 if pX == uintptr(0) { 16212 continue 16213 } 16214 if pBest == uintptr(0) || (*fuzzer_stem)(unsafe.Pointer(pBest)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX { 16215 pBest = pX 16216 iBest = i 16217 } 16218 } 16219 if pBest != 0 { 16220 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(iBest)*8)) = (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext 16221 (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext = uintptr(0) 16222 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pBest 16223 } 16224 } 16225 return (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 16226 } 16227 16228 func fuzzerInsert(tls *libc.TLS, pCur uintptr, pNew uintptr) uintptr { 16229 var pX uintptr 16230 var i int32 16231 16232 if libc.AssignUintptr(&pX, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) && (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pNew)).FrCostX { 16233 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 16234 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pNew 16235 pNew = pX 16236 } 16237 16238 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 16239 pX = pNew 16240 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 16241 if *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) != 0 { 16242 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 16243 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = uintptr(0) 16244 } else { 16245 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 16246 break 16247 } 16248 } 16249 if i > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue { 16250 if i < FUZZER_NQUEUE { 16251 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = i 16252 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 16253 } else { 16254 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8))) 16255 *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8)) = pX 16256 } 16257 } 16258 16259 return fuzzerLowestCostStem(tls, pCur) 16260 } 16261 16262 func fuzzerNewStem(tls *libc.TLS, pCur uintptr, zWord uintptr, rBaseCost fuzzer_cost) uintptr { 16263 var pNew uintptr 16264 var pRule uintptr 16265 var h uint32 16266 16267 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_stem{}))+libc.Xstrlen(tls, zWord)+uint64(1)) 16268 if pNew == uintptr(0) { 16269 return uintptr(0) 16270 } 16271 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_stem{}))) 16272 (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis = pNew + 1*48 16273 (*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis = fuzzer_len(libc.Xstrlen(tls, zWord)) 16274 libc.Xmemcpy(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis, zWord, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis)+1)) 16275 pRule = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 16276 for fuzzerSkipRule(tls, pRule, pNew, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 16277 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16278 } 16279 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpRule = pRule 16280 (*fuzzer_stem)(unsafe.Pointer(pNew)).Fn = int8(-1) 16281 (*fuzzer_stem)(unsafe.Pointer(pNew)).FrBaseCost = libc.AssignPtrInt32(pNew+36, rBaseCost) 16282 h = fuzzerHash(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis) 16283 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpHash = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 16284 *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) = pNew 16285 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem++ 16286 return pNew 16287 } 16288 16289 func fuzzerNext(tls *libc.TLS, cur uintptr) int32 { 16290 var pCur uintptr = cur 16291 var rc int32 16292 var pStem uintptr 16293 var pNew uintptr 16294 16295 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid++ 16296 16297 pStem = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 16298 if (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX > 0 { 16299 rc = fuzzerRender(tls, pStem, pCur+216, pCur+224) 16300 if rc == SQLITE_NOMEM { 16301 return SQLITE_NOMEM 16302 } 16303 pNew = fuzzerNewStem(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX) 16304 if pNew != 0 { 16305 if fuzzerAdvance(tls, pCur, pNew) == 0 { 16306 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 16307 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pNew 16308 } else { 16309 if fuzzerInsert(tls, pCur, pNew) == pNew { 16310 return SQLITE_OK 16311 } 16312 } 16313 } else { 16314 return SQLITE_NOMEM 16315 } 16316 } 16317 16318 for libc.AssignUintptr(&pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) { 16319 var res int32 = fuzzerAdvance(tls, pCur, pStem) 16320 if res < 0 { 16321 return SQLITE_NOMEM 16322 } else if res > 0 { 16323 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16324 pStem = fuzzerInsert(tls, pCur, pStem) 16325 if libc.AssignInt32(&rc, fuzzerSeen(tls, pCur, pStem)) != 0 { 16326 if rc < 0 { 16327 return SQLITE_NOMEM 16328 } 16329 continue 16330 } 16331 return SQLITE_OK 16332 } 16333 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16334 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 16335 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pStem 16336 if fuzzerLowestCostStem(tls, pCur) != 0 { 16337 rc = fuzzerSeen(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 16338 if rc < 0 { 16339 return SQLITE_NOMEM 16340 } 16341 if rc == 0 { 16342 return SQLITE_OK 16343 } 16344 } 16345 } 16346 16347 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16348 return SQLITE_OK 16349 } 16350 16351 func fuzzerFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 16352 var pCur uintptr = pVtabCursor 16353 var zWord uintptr = ts + 584 16354 var pStem uintptr 16355 var idx int32 16356 16357 fuzzerClearCursor(tls, pCur, 1) 16358 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 2147483647 16359 idx = 0 16360 if idxNum&1 != 0 { 16361 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 16362 idx++ 16363 } 16364 if idxNum&2 != 0 { 16365 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 16366 idx++ 16367 } 16368 if idxNum&4 != 0 { 16369 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 16370 idx++ 16371 } 16372 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FpNext = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 16373 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FrCost = 0 16374 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnFrom = int8(0) 16375 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnTo = int8(0) 16376 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FzFrom = ts + 584 16377 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 16378 16379 if int32(libc.Xstrlen(tls, zWord)) < FUZZER_MX_OUTPUT_LENGTH { 16380 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = libc.AssignUintptr(&pStem, fuzzerNewStem(tls, pCur, zWord, 0)) 16381 if pStem == uintptr(0) { 16382 return SQLITE_NOMEM 16383 } 16384 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pCur + 240 16385 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = (*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis 16386 } else { 16387 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16388 } 16389 16390 return SQLITE_OK 16391 } 16392 16393 func fuzzerColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 16394 var pCur uintptr = cur 16395 if i == 0 { 16396 if fuzzerRender(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem, pCur+216, pCur+224) == SQLITE_NOMEM { 16397 return SQLITE_NOMEM 16398 } 16399 sqlite3.Xsqlite3_result_text(tls, ctx, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 16400 } else if i == 1 { 16401 sqlite3.Xsqlite3_result_int(tls, ctx, (*fuzzer_stem)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem)).FrCostX) 16402 } else { 16403 sqlite3.Xsqlite3_result_null(tls, ctx) 16404 } 16405 return SQLITE_OK 16406 } 16407 16408 func fuzzerRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 16409 var pCur uintptr = cur 16410 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid 16411 return SQLITE_OK 16412 } 16413 16414 func fuzzerEof(tls *libc.TLS, cur uintptr) int32 { 16415 var pCur uintptr = cur 16416 return libc.Bool32((*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit <= 0) 16417 } 16418 16419 func fuzzerBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 16420 var iPlan int32 = 0 16421 var iDistTerm int32 = -1 16422 var iRulesetTerm int32 = -1 16423 var i int32 16424 var seenMatch int32 = 0 16425 var pConstraint uintptr 16426 var rCost float64 = 1e12 16427 16428 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 16429 i = 0 16430 __1: 16431 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 16432 goto __3 16433 } 16434 { 16435 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16436 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16437 seenMatch = 1 16438 } 16439 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 16440 goto __2 16441 } 16442 if iPlan&1 == 0 && 16443 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16444 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16445 iPlan = iPlan | 1 16446 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 16447 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16448 rCost = rCost / 1e6 16449 } 16450 if iPlan&2 == 0 && 16451 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 16452 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 16453 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 16454 iPlan = iPlan | 2 16455 iDistTerm = i 16456 rCost = rCost / 10.0 16457 } 16458 if iPlan&4 == 0 && 16459 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 16460 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 16461 iPlan = iPlan | 4 16462 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16463 iRulesetTerm = i 16464 rCost = rCost / 10.0 16465 } 16466 16467 } 16468 goto __2 16469 __2: 16470 i++ 16471 pConstraint += 12 16472 goto __1 16473 goto __3 16474 __3: 16475 ; 16476 if iPlan&2 != 0 { 16477 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 16478 } 16479 if iPlan&4 != 0 { 16480 var idx int32 = 1 16481 if iPlan&1 != 0 { 16482 idx++ 16483 } 16484 if iPlan&2 != 0 { 16485 idx++ 16486 } 16487 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRulesetTerm)*8)).FargvIndex = idx 16488 } 16489 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 16490 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 16491 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 16492 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 16493 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 16494 } 16495 if seenMatch != 0 && iPlan&1 == 0 { 16496 rCost = 1e99 16497 } 16498 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 16499 16500 return SQLITE_OK 16501 } 16502 16503 var fuzzerModule = sqlite3_module{ 16504 FxCreate: 0, 16505 FxConnect: 0, 16506 FxBestIndex: 0, 16507 FxDisconnect: 0, 16508 FxDestroy: 0, 16509 FxOpen: 0, 16510 FxClose: 0, 16511 FxFilter: 0, 16512 FxNext: 0, 16513 FxEof: 0, 16514 FxColumn: 0, 16515 FxRowid: 0, 16516 } 16517 16518 func sqlite3_fuzzer_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16519 var rc int32 = SQLITE_OK 16520 _ = pApi 16521 16522 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+5483, uintptr(unsafe.Pointer(&fuzzerModule)), uintptr(0)) 16523 return rc 16524 } 16525 16526 func ieee754func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16527 bp := tls.Alloc(160) 16528 defer tls.Free(160) 16529 16530 if argc == 1 { 16531 var m sqlite3_int64 16532 16533 var e int32 16534 var isNeg int32 16535 16536 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16537 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 16538 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16539 var i uint32 16540 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = uint64(0) 16541 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 16542 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 24))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16543 } 16544 libc.Xmemcpy(tls, bp+16, bp+24, uint64(unsafe.Sizeof(float64(0)))) 16545 } else { 16546 *(*float64)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16547 } 16548 if *(*float64)(unsafe.Pointer(bp + 16)) < 0.0 { 16549 isNeg = 1 16550 *(*float64)(unsafe.Pointer(bp + 16)) = -*(*float64)(unsafe.Pointer(bp + 16)) 16551 } else { 16552 isNeg = 0 16553 } 16554 libc.Xmemcpy(tls, bp+32, bp+16, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 16555 if *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) == int64(0) { 16556 e = 0 16557 m = int64(0) 16558 } else { 16559 e = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 32)) >> 52) 16560 m = *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) & (int64(1)<<52 - int64(1)) 16561 if e == 0 { 16562 m <<= 1 16563 } else { 16564 m = m | int64(1)<<52 16565 } 16566 for e < 1075 && m > int64(0) && m&int64(1) == int64(0) { 16567 m >>= 1 16568 e++ 16569 } 16570 if isNeg != 0 { 16571 m = -m 16572 } 16573 } 16574 switch *(*int32)(unsafe.Pointer(sqlite3.Xsqlite3_user_data(tls, context))) { 16575 case 0: 16576 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+5490, 16577 libc.VaList(bp, m, e-1075)) 16578 sqlite3.Xsqlite3_result_text(tls, context, bp+40, -1, libc.UintptrFromInt32(-1)) 16579 break 16580 fallthrough 16581 case 1: 16582 sqlite3.Xsqlite3_result_int64(tls, context, m) 16583 break 16584 fallthrough 16585 case 2: 16586 sqlite3.Xsqlite3_result_int(tls, context, e-1075) 16587 break 16588 } 16589 } else { 16590 var m sqlite3_int64 16591 var e sqlite3_int64 16592 16593 var isNeg int32 = 0 16594 m = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 16595 e = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 16596 16597 if e > int64(10000) { 16598 e = int64(10000) 16599 } else if e < int64(-10000) { 16600 e = int64(-10000) 16601 } 16602 16603 if m < int64(0) { 16604 isNeg = 1 16605 m = -m 16606 if m < int64(0) { 16607 return 16608 } 16609 } else if m == int64(0) && e > int64(-1000) && e < int64(1000) { 16610 sqlite3.Xsqlite3_result_double(tls, context, 0.0) 16611 return 16612 } 16613 for m>>32&int64(0xffe00000) != 0 { 16614 m >>= 1 16615 e++ 16616 } 16617 for m != int64(0) && m>>32&int64(0xfff00000) == int64(0) { 16618 m <<= 1 16619 e-- 16620 } 16621 e = e + int64(1075) 16622 if e <= int64(0) { 16623 if int64(1)-e >= int64(64) { 16624 m = int64(0) 16625 } else { 16626 m >>= int64(1) - e 16627 } 16628 e = int64(0) 16629 } else if e > int64(0x7ff) { 16630 e = int64(0x7ff) 16631 } 16632 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) = m & (int64(1)<<52 - int64(1)) 16633 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= e << 52 16634 if isNeg != 0 { 16635 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= libc.Int64FromUint64(uint64(1) << 63) 16636 } 16637 libc.Xmemcpy(tls, bp+144, bp+152, uint64(unsafe.Sizeof(float64(0)))) 16638 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 144))) 16639 } 16640 } 16641 16642 func ieee754func_from_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16643 bp := tls.Alloc(16) 16644 defer tls.Free(16) 16645 16646 _ = argc 16647 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16648 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 16649 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16650 var i uint32 16651 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = uint64(0) 16652 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 16653 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 8))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16654 } 16655 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 16656 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp))) 16657 } 16658 } 16659 16660 func ieee754func_to_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16661 bp := tls.Alloc(24) 16662 defer tls.Free(24) 16663 16664 _ = argc 16665 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_FLOAT || 16666 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_INTEGER { 16667 *(*float64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16668 16669 var i uint32 16670 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 16671 for i = uint32(1); uint64(i) <= uint64(unsafe.Sizeof(float64(0))); i++ { 16672 *(*uint8)(unsafe.Pointer(bp + 16 + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(i)))) = uint8(*(*sqlite3_uint64)(unsafe.Pointer(bp)) & uint64(0xff)) 16673 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 8 16674 } 16675 sqlite3.Xsqlite3_result_blob(tls, context, bp+16, int32(unsafe.Sizeof(float64(0))), libc.UintptrFromInt32(-1)) 16676 } 16677 } 16678 16679 func sqlite3_ieee_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16680 var i uint32 16681 var rc int32 = SQLITE_OK 16682 _ = pApi 16683 16684 _ = pzErrMsg 16685 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc1))/uint64(unsafe.Sizeof(struct { 16686 FzFName uintptr 16687 FnArg int32 16688 FiAux int32 16689 FxFunc uintptr 16690 }{})) && rc == SQLITE_OK; i++ { 16691 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc1[i].FzFName, aFunc1[i].FnArg, 16692 SQLITE_UTF8|SQLITE_INNOCUOUS, 16693 uintptr(unsafe.Pointer(&aFunc1))+uintptr(i)*24+12, 16694 aFunc1[i].FxFunc, uintptr(0), uintptr(0)) 16695 } 16696 return rc 16697 } 16698 16699 var aFunc1 = [6]struct { 16700 FzFName uintptr 16701 FnArg int32 16702 FiAux int32 16703 FxFunc uintptr 16704 }{ 16705 {FzFName: ts + 5507, FnArg: 1, FxFunc: 0}, 16706 {FzFName: ts + 5507, FnArg: 2, FxFunc: 0}, 16707 {FzFName: ts + 5515, FnArg: 1, FiAux: 1, FxFunc: 0}, 16708 {FzFName: ts + 5532, FnArg: 1, FiAux: 2, FxFunc: 0}, 16709 {FzFName: ts + 5549, FnArg: 1, FxFunc: 0}, 16710 {FzFName: ts + 5565, FnArg: 1, FxFunc: 0}, 16711 } 16712 16713 func sqlite3_mmap_warm(tls *libc.TLS, db uintptr, zDb uintptr) int32 { 16714 bp := tls.Alloc(88) 16715 defer tls.Free(88) 16716 16717 var rc int32 = SQLITE_OK 16718 var zSql uintptr = uintptr(0) 16719 var pgsz int32 = 0 16720 var nTotal int32 = 0 16721 16722 if 0 == sqlite3.Xsqlite3_get_autocommit(tls, db) { 16723 return SQLITE_MISUSE 16724 } 16725 16726 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5583, 16727 libc.VaList(bp, func() uintptr { 16728 if zDb != 0 { 16729 return ts + 5624 16730 } 16731 return ts + 584 16732 }(), func() uintptr { 16733 if zDb != 0 { 16734 return zDb 16735 } 16736 return ts + 584 16737 }(), func() uintptr { 16738 if zDb != 0 { 16739 return ts + 5626 16740 } 16741 return ts + 584 16742 }())) 16743 if zSql == uintptr(0) { 16744 return SQLITE_NOMEM 16745 } 16746 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 16747 sqlite3.Xsqlite3_free(tls, zSql) 16748 16749 if rc == SQLITE_OK { 16750 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5629, 16751 libc.VaList(bp+24, func() uintptr { 16752 if zDb != 0 { 16753 return ts + 5624 16754 } 16755 return ts + 584 16756 }(), func() uintptr { 16757 if zDb != 0 { 16758 return zDb 16759 } 16760 return ts + 584 16761 }(), func() uintptr { 16762 if zDb != 0 { 16763 return ts + 5626 16764 } 16765 return ts + 584 16766 }())) 16767 if zSql == uintptr(0) { 16768 rc = SQLITE_NOMEM 16769 } else { 16770 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 16771 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 16772 sqlite3.Xsqlite3_free(tls, zSql) 16773 if rc == SQLITE_OK { 16774 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 16775 pgsz = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 16776 } 16777 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 16778 } 16779 if rc == SQLITE_OK && pgsz == 0 { 16780 rc = SQLITE_ERROR 16781 } 16782 } 16783 } 16784 16785 if rc == SQLITE_OK { 16786 var rc2 int32 16787 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 16788 rc = sqlite3.Xsqlite3_file_control(tls, db, zDb, SQLITE_FCNTL_FILE_POINTER, bp+72) 16789 if rc == SQLITE_OK && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods)).FiVersion >= 3 { 16790 var iPg sqlite3_int64 = int64(1) 16791 var p uintptr = (*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods 16792 for 1 != 0 { 16793 rc = (*struct { 16794 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 16795 })(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) 16796 if rc != SQLITE_OK || *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 16797 break 16798 } 16799 16800 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80))))) 16801 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(pgsz-1)))) 16802 16803 rc = (*struct { 16804 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 16805 })(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))) 16806 if rc != SQLITE_OK { 16807 break 16808 } 16809 iPg++ 16810 } 16811 sqlite3.Xsqlite3_log(tls, SQLITE_OK, 16812 ts+5652, libc.VaList(bp+48, func() int64 { 16813 if iPg == int64(1) { 16814 return int64(0) 16815 } 16816 return iPg 16817 }(), 16818 sqlite3.Xsqlite3_db_filename(tls, db, zDb))) 16819 } 16820 16821 rc2 = sqlite3.Xsqlite3_exec(tls, db, ts+5702, uintptr(0), uintptr(0), uintptr(0)) 16822 if rc == SQLITE_OK { 16823 rc = rc2 16824 } 16825 } 16826 16827 return rc 16828 } 16829 16830 type nextCharContext1 = struct { 16831 Fdb uintptr 16832 FpStmt uintptr 16833 FzPrefix uintptr 16834 FnPrefix int32 16835 FnAlloc int32 16836 FnUsed int32 16837 F__ccgo_pad1 [4]byte 16838 FaResult uintptr 16839 FmallocFailed int32 16840 FotherError int32 16841 } 16842 16843 type nextCharContext = nextCharContext1 16844 16845 func nextCharAppend(tls *libc.TLS, p uintptr, c uint32) { 16846 var i int32 16847 for i = 0; i < (*nextCharContext)(unsafe.Pointer(p)).FnUsed; i++ { 16848 if *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(i)*4)) == c { 16849 return 16850 } 16851 } 16852 if (*nextCharContext)(unsafe.Pointer(p)).FnUsed+1 > (*nextCharContext)(unsafe.Pointer(p)).FnAlloc { 16853 var aNew uintptr 16854 var n int32 = (*nextCharContext)(unsafe.Pointer(p)).FnAlloc*2 + 30 16855 aNew = sqlite3.Xsqlite3_realloc64(tls, (*nextCharContext)(unsafe.Pointer(p)).FaResult, uint64(n)*uint64(unsafe.Sizeof(uint32(0)))) 16856 if aNew == uintptr(0) { 16857 (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed = 1 16858 return 16859 } else { 16860 (*nextCharContext)(unsafe.Pointer(p)).FaResult = aNew 16861 (*nextCharContext)(unsafe.Pointer(p)).FnAlloc = n 16862 } 16863 } 16864 *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(libc.PostIncInt32(&(*nextCharContext)(unsafe.Pointer(p)).FnUsed, 1))*4)) = c 16865 } 16866 16867 func writeUtf8(tls *libc.TLS, z uintptr, c uint32) int32 { 16868 if c < uint32(0x00080) { 16869 *(*uint8)(unsafe.Pointer(z)) = uint8(c & uint32(0xff)) 16870 return 1 16871 } 16872 if c < uint32(0x00800) { 16873 *(*uint8)(unsafe.Pointer(z)) = uint8(0xC0 + int32(uint8(c>>6&uint32(0x1F)))) 16874 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16875 return 2 16876 } 16877 if c < uint32(0x10000) { 16878 *(*uint8)(unsafe.Pointer(z)) = uint8(0xE0 + int32(uint8(c>>12&uint32(0x0F)))) 16879 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 16880 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16881 return 3 16882 } 16883 *(*uint8)(unsafe.Pointer(z)) = uint8(0xF0 + int32(uint8(c>>18&uint32(0x07)))) 16884 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>12&uint32(0x3F)))) 16885 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 16886 *(*uint8)(unsafe.Pointer(z + 3)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16887 return 4 16888 } 16889 16890 func readUtf8(tls *libc.TLS, z uintptr, pOut uintptr) int32 { 16891 var c uint32 = uint32(*(*uint8)(unsafe.Pointer(z))) 16892 if c < uint32(0xc0) { 16893 *(*uint32)(unsafe.Pointer(pOut)) = c 16894 return 1 16895 } else { 16896 var n int32 = 1 16897 c = uint32(validBits[c-uint32(0xc0)]) 16898 for int32(*(*uint8)(unsafe.Pointer(z + uintptr(n))))&0xc0 == 0x80 { 16899 c = c<<6 + uint32(0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&n, 1)))))) 16900 } 16901 if c < uint32(0x80) || c&0xFFFFF800 == uint32(0xD800) || c&0xFFFFFFFE == uint32(0xFFFE) { 16902 c = uint32(0xFFFD) 16903 } 16904 *(*uint32)(unsafe.Pointer(pOut)) = c 16905 return n 16906 } 16907 return int32(0) 16908 } 16909 16910 var validBits = [64]uint8{ 16911 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16912 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 16913 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 16914 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 16915 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16916 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 16917 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16918 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 16919 } 16920 16921 func findNextChars(tls *libc.TLS, p uintptr) { 16922 bp := tls.Alloc(12) 16923 defer tls.Free(12) 16924 16925 var cPrev uint32 = uint32(0) 16926 16927 var n int32 16928 var rc int32 16929 16930 for { 16931 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 1, (*nextCharContext)(unsafe.Pointer(p)).FzPrefix, (*nextCharContext)(unsafe.Pointer(p)).FnPrefix, 16932 uintptr(0)) 16933 n = writeUtf8(tls, bp, cPrev+uint32(1)) 16934 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 2, bp, n, uintptr(0)) 16935 rc = sqlite3.Xsqlite3_step(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16936 if rc == SQLITE_DONE { 16937 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16938 return 16939 } else if rc != SQLITE_ROW { 16940 (*nextCharContext)(unsafe.Pointer(p)).FotherError = rc 16941 return 16942 } else { 16943 var zOut uintptr = sqlite3.Xsqlite3_column_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 0) 16944 16945 n = readUtf8(tls, zOut+uintptr((*nextCharContext)(unsafe.Pointer(p)).FnPrefix), bp+8) 16946 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16947 nextCharAppend(tls, p, *(*uint32)(unsafe.Pointer(bp + 8))) 16948 cPrev = *(*uint32)(unsafe.Pointer(bp + 8)) 16949 if (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed != 0 { 16950 return 16951 } 16952 } 16953 } 16954 } 16955 16956 func nextCharFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16957 bp := tls.Alloc(136) 16958 defer tls.Free(136) 16959 16960 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 16961 var zField uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 16962 var zWhere uintptr 16963 var zCollName uintptr 16964 var zWhereClause uintptr = uintptr(0) 16965 var zColl uintptr = uintptr(0) 16966 var zSql uintptr 16967 var rc int32 16968 16969 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(nextCharContext{}))) 16970 (*nextCharContext)(unsafe.Pointer(bp + 80)).Fdb = sqlite3.Xsqlite3_context_db_handle(tls, context) 16971 (*nextCharContext)(unsafe.Pointer(bp + 80)).FzPrefix = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 16972 (*nextCharContext)(unsafe.Pointer(bp + 80)).FnPrefix = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 16973 if zTable == uintptr(0) || zField == uintptr(0) || (*nextCharContext)(unsafe.Pointer(bp+80)).FzPrefix == uintptr(0) { 16974 return 16975 } 16976 if argc >= 4 && 16977 libc.AssignUintptr(&zWhere, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) != uintptr(0) && 16978 int32(*(*uint8)(unsafe.Pointer(zWhere))) != 0 { 16979 zWhereClause = sqlite3.Xsqlite3_mprintf(tls, ts+5706, libc.VaList(bp, zWhere)) 16980 if zWhereClause == uintptr(0) { 16981 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16982 return 16983 } 16984 } else { 16985 zWhereClause = ts + 584 16986 } 16987 if argc >= 5 && 16988 libc.AssignUintptr(&zCollName, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) != uintptr(0) && 16989 int32(*(*uint8)(unsafe.Pointer(zCollName))) != 0 { 16990 zColl = sqlite3.Xsqlite3_mprintf(tls, ts+5715, libc.VaList(bp+8, zCollName)) 16991 if zColl == uintptr(0) { 16992 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16993 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 16994 sqlite3.Xsqlite3_free(tls, zWhereClause) 16995 } 16996 return 16997 } 16998 } else { 16999 zColl = ts + 584 17000 } 17001 zSql = sqlite3.Xsqlite3_mprintf(tls, 17002 ts+5728, 17003 libc.VaList(bp+16, zField, zTable, zField, zColl, zField, zColl, zWhereClause, zColl)) 17004 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 17005 sqlite3.Xsqlite3_free(tls, zWhereClause) 17006 } 17007 if *(*int8)(unsafe.Pointer(zColl)) != 0 { 17008 sqlite3.Xsqlite3_free(tls, zColl) 17009 } 17010 if zSql == uintptr(0) { 17011 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17012 return 17013 } 17014 17015 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb, zSql, -1, bp+80+8, uintptr(0)) 17016 sqlite3.Xsqlite3_free(tls, zSql) 17017 if rc != 0 { 17018 sqlite3.Xsqlite3_result_error(tls, context, sqlite3.Xsqlite3_errmsg(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb), -1) 17019 return 17020 } 17021 findNextChars(tls, bp+80) 17022 if (*nextCharContext)(unsafe.Pointer(bp+80)).FmallocFailed != 0 { 17023 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17024 } else { 17025 var pRes uintptr 17026 pRes = sqlite3.Xsqlite3_malloc64(tls, uint64((*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed*4+1)) 17027 if pRes == uintptr(0) { 17028 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17029 } else { 17030 var i int32 17031 var n int32 = 0 17032 for i = 0; i < (*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed; i++ { 17033 n = n + writeUtf8(tls, pRes+uintptr(n), *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(bp+80)).FaResult + uintptr(i)*4))) 17034 } 17035 *(*uint8)(unsafe.Pointer(pRes + uintptr(n))) = uint8(0) 17036 sqlite3.Xsqlite3_result_text(tls, context, pRes, n, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 17037 } 17038 } 17039 sqlite3.Xsqlite3_finalize(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FpStmt) 17040 sqlite3.Xsqlite3_free(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FaResult) 17041 } 17042 17043 func sqlite3_nextchar_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17044 var rc int32 = SQLITE_OK 17045 _ = pApi 17046 17047 _ = pzErrMsg 17048 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 3, 17049 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17050 *(*uintptr)(unsafe.Pointer(&struct { 17051 f func(*libc.TLS, uintptr, int32, uintptr) 17052 }{nextCharFunc})), uintptr(0), uintptr(0)) 17053 if rc == SQLITE_OK { 17054 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 4, 17055 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17056 *(*uintptr)(unsafe.Pointer(&struct { 17057 f func(*libc.TLS, uintptr, int32, uintptr) 17058 }{nextCharFunc})), uintptr(0), uintptr(0)) 17059 } 17060 if rc == SQLITE_OK { 17061 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 5, 17062 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17063 *(*uintptr)(unsafe.Pointer(&struct { 17064 f func(*libc.TLS, uintptr, int32, uintptr) 17065 }{nextCharFunc})), uintptr(0), uintptr(0)) 17066 } 17067 return rc 17068 } 17069 17070 var aiClass = [256]uint8{ 17071 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), 17072 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), 17073 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), 17074 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), 17075 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), 17076 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), 17077 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), 17078 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), 17079 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), 17080 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), 17081 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), 17082 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), 17083 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), 17084 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), 17085 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), 17086 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), 17087 } 17088 17089 var sqlite3UpperToLower = [256]uint8{ 17090 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), 17091 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), 17092 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), 17093 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), 17094 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), 17095 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), 17096 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), 17097 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), 17098 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), 17099 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), 17100 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), 17101 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), 17102 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), 17103 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), 17104 uint8(252), uint8(253), uint8(254), uint8(255), 17105 } 17106 17107 var sqlite3CtypeMap = [256]uint8{ 17108 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17109 uint8(0x00), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x00), uint8(0x00), 17110 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17111 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17112 uint8(0x01), uint8(0x00), uint8(0x80), uint8(0x00), uint8(0x40), uint8(0x00), uint8(0x00), uint8(0x80), 17113 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17114 uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), 17115 uint8(0x0c), uint8(0x0c), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17116 uint8(0x00), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x02), 17117 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 17118 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 17119 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x80), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x40), 17120 uint8(0x80), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x22), 17121 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 17122 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 17123 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17124 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17125 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17126 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17127 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17128 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17129 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17130 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17131 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17132 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17133 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17134 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17135 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17136 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17137 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17138 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17139 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17140 } 17141 17142 func sqlite3GetToken(tls *libc.TLS, z uintptr, tokenType uintptr) int32 { 17143 var i int32 17144 var c int32 17145 switch int32(aiClass[*(*uint8)(unsafe.Pointer(z))]) { 17146 case CC_SPACE: 17147 { 17148 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x01 != 0; i++ { 17149 } 17150 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17151 return i 17152 17153 } 17154 case CC_MINUS: 17155 { 17156 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '-' { 17157 for i = 2; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && c != '\n'; i++ { 17158 } 17159 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17160 return i 17161 } 17162 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17163 return 1 17164 17165 } 17166 case CC_LP: 17167 { 17168 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17169 return 1 17170 17171 } 17172 case CC_RP: 17173 { 17174 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17175 return 1 17176 17177 } 17178 case CC_SEMI: 17179 { 17180 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17181 return 1 17182 17183 } 17184 case CC_PLUS: 17185 { 17186 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17187 return 1 17188 17189 } 17190 case CC_STAR: 17191 { 17192 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17193 return 1 17194 17195 } 17196 case CC_SLASH: 17197 { 17198 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '*' || int32(*(*uint8)(unsafe.Pointer(z + 2))) == 0 { 17199 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17200 return 1 17201 } 17202 i = 3 17203 c = int32(*(*uint8)(unsafe.Pointer(z + 2))) 17204 for ; (c != '*' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/') && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17205 } 17206 if c != 0 { 17207 i++ 17208 } 17209 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17210 return i 17211 17212 } 17213 case CC_PERCENT: 17214 { 17215 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17216 return 1 17217 17218 } 17219 case CC_EQ: 17220 { 17221 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17222 return 1 + libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z + 1))) == '=') 17223 17224 } 17225 case CC_LT: 17226 { 17227 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 17228 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17229 return 2 17230 } else if c == '>' { 17231 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17232 return 2 17233 } else if c == '<' { 17234 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17235 return 2 17236 } else { 17237 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17238 return 1 17239 } 17240 17241 } 17242 fallthrough 17243 case CC_GT: 17244 { 17245 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 17246 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17247 return 2 17248 } else if c == '>' { 17249 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17250 return 2 17251 } else { 17252 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17253 return 1 17254 } 17255 17256 } 17257 fallthrough 17258 case CC_BANG: 17259 { 17260 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '=' { 17261 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17262 return 1 17263 } else { 17264 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17265 return 2 17266 } 17267 17268 } 17269 fallthrough 17270 case CC_PIPE: 17271 { 17272 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '|' { 17273 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17274 return 1 17275 } else { 17276 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17277 return 2 17278 } 17279 17280 } 17281 fallthrough 17282 case CC_COMMA: 17283 { 17284 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17285 return 1 17286 17287 } 17288 case CC_AND: 17289 { 17290 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17291 return 1 17292 17293 } 17294 case CC_TILDA: 17295 { 17296 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17297 return 1 17298 17299 } 17300 case CC_QUOTE: 17301 { 17302 var delim int32 = int32(*(*uint8)(unsafe.Pointer(z))) 17303 17304 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17305 if c == delim { 17306 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == delim { 17307 i++ 17308 } else { 17309 break 17310 } 17311 } 17312 } 17313 if c == '\'' { 17314 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17315 return i + 1 17316 } else if c != 0 { 17317 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17318 return i + 1 17319 } else { 17320 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17321 return i 17322 } 17323 17324 } 17325 fallthrough 17326 case CC_DOT: 17327 { 17328 if !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + 1))])&0x04 != 0) { 17329 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17330 return 1 17331 } 17332 17333 } 17334 fallthrough 17335 case CC_DIGIT: 17336 { 17337 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17338 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 { 17339 for i = 3; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17340 } 17341 return i 17342 } 17343 for i = 0; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 17344 } 17345 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' { 17346 i++ 17347 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 17348 i++ 17349 } 17350 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17351 } 17352 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 || 17353 (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) { 17354 i = i + 2 17355 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 17356 i++ 17357 } 17358 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17359 } 17360 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17361 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17362 i++ 17363 } 17364 return i 17365 17366 } 17367 case CC_QUOTE2: 17368 { 17369 i = 1 17370 c = int32(*(*uint8)(unsafe.Pointer(z))) 17371 for ; c != ']' && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17372 } 17373 *(*int32)(unsafe.Pointer(tokenType)) = func() int32 { 17374 if c == ']' { 17375 return TK_NAME 17376 } 17377 return TK_ERROR 17378 }() 17379 return i 17380 17381 } 17382 case CC_VARNUM: 17383 { 17384 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17385 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 17386 } 17387 return i 17388 17389 } 17390 case CC_DOLLAR: 17391 fallthrough 17392 case CC_VARALPHA: 17393 { 17394 var n int32 = 0 17395 17396 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17397 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17398 if int32(sqlite3CtypeMap[uint8(c)])&0x46 != 0 { 17399 n++ 17400 } else if c == '(' && n > 0 { 17401 for __ccgo := true; __ccgo; __ccgo = libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && !(int32(sqlite3CtypeMap[uint8(c)])&0x01 != 0) && c != ')' { 17402 i++ 17403 } 17404 if c == ')' { 17405 i++ 17406 } else { 17407 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17408 } 17409 break 17410 } else if c == ':' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == ':' { 17411 i++ 17412 } else { 17413 break 17414 } 17415 } 17416 if n == 0 { 17417 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17418 } 17419 return i 17420 17421 } 17422 case CC_KYWD: 17423 { 17424 for i = 1; int32(aiClass[*(*uint8)(unsafe.Pointer(z + uintptr(i)))]) <= CC_KYWD; i++ { 17425 } 17426 if int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17427 i++ 17428 break 17429 } 17430 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17431 return i 17432 17433 } 17434 case CC_X: 17435 { 17436 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '\'' { 17437 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17438 for i = 2; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17439 } 17440 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' || i%2 != 0 { 17441 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17442 for *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' { 17443 i++ 17444 } 17445 } 17446 if *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 { 17447 i++ 17448 } 17449 return i 17450 } 17451 17452 } 17453 fallthrough 17454 case CC_ID: 17455 { 17456 i = 1 17457 break 17458 17459 } 17460 default: 17461 { 17462 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17463 return 1 17464 17465 } 17466 } 17467 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17468 i++ 17469 } 17470 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17471 return i 17472 } 17473 17474 func sqlite3_normalize(tls *libc.TLS, zSql uintptr) uintptr { 17475 bp := tls.Alloc(4) 17476 defer tls.Free(4) 17477 17478 var z uintptr 17479 var nZ sqlite3_int64 17480 var nSql sqlite3_int64 17481 var i int32 17482 var j int32 17483 17484 var n int32 17485 var k int32 17486 17487 nSql = sqlite3_int64(libc.Xstrlen(tls, zSql)) 17488 nZ = nSql 17489 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nZ+int64(2))) 17490 if z == uintptr(0) { 17491 return uintptr(0) 17492 } 17493 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; i = i + n { 17494 n = sqlite3GetToken(tls, zSql+uintptr(i), bp) 17495 switch *(*int32)(unsafe.Pointer(bp)) { 17496 case TK_SPACE: 17497 { 17498 break 17499 17500 } 17501 case TK_ERROR: 17502 { 17503 sqlite3.Xsqlite3_free(tls, z) 17504 return uintptr(0) 17505 17506 } 17507 case TK_LITERAL: 17508 { 17509 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 17510 break 17511 17512 } 17513 case TK_PUNCT: 17514 fallthrough 17515 case TK_NAME: 17516 { 17517 if n == 4 && sqlite3.Xsqlite3_strnicmp(tls, zSql+uintptr(i), ts+5846, 4) == 0 { 17518 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) || 17519 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) { 17520 } else { 17521 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 17522 break 17523 } 17524 } 17525 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 { 17526 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(' ') 17527 } 17528 for k = 0; k < n; k++ { 17529 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(sqlite3UpperToLower[uint8(*(*int8)(unsafe.Pointer(zSql + uintptr(i+k))))]) 17530 } 17531 break 17532 17533 } 17534 } 17535 } 17536 for j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) == ' ' { 17537 j-- 17538 } 17539 if j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) != ';' { 17540 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(';') 17541 } 17542 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 17543 17544 for i = 0; i < j; i = n { 17545 var zIn uintptr = libc.Xstrstr(tls, z+uintptr(i), ts+5858) 17546 var nParen int32 17547 if zIn == uintptr(0) { 17548 break 17549 } 17550 n = int32((int64(zIn)-int64(z))/1) + 3 17551 if n != 0 && int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + libc.UintptrFromInt32(-1))))])&0x46 != 0 { 17552 continue 17553 } 17554 if libc.Xstrncmp(tls, zIn, ts+5862, uint64(9)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 9)))])&0x46 != 0) { 17555 continue 17556 } 17557 if libc.Xstrncmp(tls, zIn, ts+5872, uint64(7)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 7)))])&0x46 != 0) { 17558 continue 17559 } 17560 nParen = 1 17561 k = 0 17562 for ; *(*int8)(unsafe.Pointer(z + uintptr(n+k))) != 0; k++ { 17563 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == '(' { 17564 nParen++ 17565 } 17566 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == ')' { 17567 nParen-- 17568 if nParen == 0 { 17569 break 17570 } 17571 } 17572 } 17573 17574 if k < 5 { 17575 z = sqlite3.Xsqlite3_realloc64(tls, z, uint64(j+(5-k)+1)) 17576 if z == uintptr(0) { 17577 return uintptr(0) 17578 } 17579 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 17580 } else if k > 5 { 17581 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 17582 } 17583 j = j - k + 5 17584 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 17585 libc.Xmemcpy(tls, z+uintptr(n), ts+5880, uint64(5)) 17586 } 17587 return z 17588 } 17589 17590 type Percentile1 = struct { 17591 FnAlloc uint32 17592 FnUsed uint32 17593 FrPct float64 17594 Fa uintptr 17595 } 17596 17597 type Percentile = Percentile1 17598 17599 func isInfinity(tls *libc.TLS, r float64) int32 { 17600 bp := tls.Alloc(16) 17601 defer tls.Free(16) 17602 *(*float64)(unsafe.Pointer(bp + 8)) = r 17603 17604 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 17605 return libc.Bool32(*(*sqlite3_uint64)(unsafe.Pointer(bp))>>52&uint64(0x7ff) == uint64(0x7ff)) 17606 } 17607 17608 func sameValue(tls *libc.TLS, a float64, b float64) int32 { 17609 a = a - b 17610 return libc.Bool32(a >= -0.001 && a <= 0.001) 17611 } 17612 17613 func percentStep(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 17614 var p uintptr 17615 var rPct float64 17616 var eType int32 17617 var y float64 17618 17619 eType = sqlite3.Xsqlite3_value_numeric_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17620 rPct = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17621 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT || 17622 rPct < 0.0 || rPct > 100.0 { 17623 sqlite3.Xsqlite3_result_error(tls, pCtx, 17624 ts+5886, -1) 17625 return 17626 } 17627 17628 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, int32(unsafe.Sizeof(Percentile{}))) 17629 if p == uintptr(0) { 17630 return 17631 } 17632 17633 if (*Percentile)(unsafe.Pointer(p)).FrPct == 0.0 { 17634 (*Percentile)(unsafe.Pointer(p)).FrPct = rPct + 1.0 17635 } else if !(sameValue(tls, (*Percentile)(unsafe.Pointer(p)).FrPct, rPct+1.0) != 0) { 17636 sqlite3.Xsqlite3_result_error(tls, pCtx, 17637 ts+5953, -1) 17638 return 17639 } 17640 17641 eType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) 17642 if eType == SQLITE_NULL { 17643 return 17644 } 17645 17646 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT { 17647 sqlite3.Xsqlite3_result_error(tls, pCtx, 17648 ts+6017, -1) 17649 return 17650 } 17651 17652 y = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 17653 if isInfinity(tls, y) != 0 { 17654 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+6061, -1) 17655 return 17656 } 17657 17658 if (*Percentile)(unsafe.Pointer(p)).FnUsed >= (*Percentile)(unsafe.Pointer(p)).FnAlloc { 17659 var n uint32 = (*Percentile)(unsafe.Pointer(p)).FnAlloc*uint32(2) + uint32(250) 17660 var a uintptr = sqlite3.Xsqlite3_realloc64(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64(unsafe.Sizeof(float64(0)))*uint64(n)) 17661 if a == uintptr(0) { 17662 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17663 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 17664 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 17665 return 17666 } 17667 (*Percentile)(unsafe.Pointer(p)).FnAlloc = n 17668 (*Percentile)(unsafe.Pointer(p)).Fa = a 17669 } 17670 *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncUint32(&(*Percentile)(unsafe.Pointer(p)).FnUsed, 1))*8)) = y 17671 } 17672 17673 func doubleCmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 17674 var a float64 = *(*float64)(unsafe.Pointer(pA)) 17675 var b float64 = *(*float64)(unsafe.Pointer(pB)) 17676 if a == b { 17677 return 0 17678 } 17679 if a < b { 17680 return -1 17681 } 17682 return +1 17683 } 17684 17685 func percentFinal(tls *libc.TLS, pCtx uintptr) { 17686 var p uintptr 17687 var i1 uint32 17688 var i2 uint32 17689 var v1 float64 17690 var v2 float64 17691 var ix float64 17692 var vx float64 17693 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, 0) 17694 if p == uintptr(0) { 17695 return 17696 } 17697 if (*Percentile)(unsafe.Pointer(p)).Fa == uintptr(0) { 17698 return 17699 } 17700 if (*Percentile)(unsafe.Pointer(p)).FnUsed != 0 { 17701 libc.Xqsort(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64((*Percentile)(unsafe.Pointer(p)).FnUsed), uint64(unsafe.Sizeof(float64(0))), *(*uintptr)(unsafe.Pointer(&struct { 17702 f func(*libc.TLS, uintptr, uintptr) int32 17703 }{doubleCmp}))) 17704 ix = ((*Percentile)(unsafe.Pointer(p)).FrPct - 1.0) * float64((*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1)) * 0.01 17705 i1 = uint32(ix) 17706 if ix == float64(i1) || i1 == (*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1) { 17707 i2 = i1 17708 } else { 17709 i2 = i1 + uint32(1) 17710 } 17711 v1 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i1)*8)) 17712 v2 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i2)*8)) 17713 vx = v1 + (v2-v1)*(ix-float64(i1)) 17714 sqlite3.Xsqlite3_result_double(tls, pCtx, vx) 17715 } 17716 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17717 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 17718 } 17719 17720 func sqlite3_percentile_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17721 var rc int32 = SQLITE_OK 17722 _ = pApi 17723 17724 _ = pzErrMsg 17725 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6087, 2, 17726 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17727 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17728 f func(*libc.TLS, uintptr, int32, uintptr) 17729 }{percentStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{percentFinal}))) 17730 return rc 17731 } 17732 17733 type prefixes_vtab1 = struct{ Fbase sqlite3_vtab } 17734 17735 type prefixes_vtab = prefixes_vtab1 17736 17737 type prefixes_cursor1 = struct { 17738 Fbase sqlite3_vtab_cursor 17739 FiRowid sqlite3_int64 17740 FzStr uintptr 17741 FnStr int32 17742 F__ccgo_pad1 [4]byte 17743 } 17744 17745 type prefixes_cursor = prefixes_cursor1 17746 17747 func prefixesConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17748 var pNew uintptr 17749 var rc int32 17750 17751 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17752 ts+6098) 17753 if rc == SQLITE_OK { 17754 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_vtab{}))) 17755 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17756 if pNew == uintptr(0) { 17757 return SQLITE_NOMEM 17758 } 17759 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(prefixes_vtab{}))) 17760 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 17761 } 17762 return rc 17763 } 17764 17765 func prefixesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17766 var p uintptr = pVtab 17767 sqlite3.Xsqlite3_free(tls, p) 17768 return SQLITE_OK 17769 } 17770 17771 func prefixesOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17772 var pCur uintptr 17773 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_cursor{}))) 17774 if pCur == uintptr(0) { 17775 return SQLITE_NOMEM 17776 } 17777 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(prefixes_cursor{}))) 17778 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17779 return SQLITE_OK 17780 } 17781 17782 func prefixesClose(tls *libc.TLS, cur uintptr) int32 { 17783 var pCur uintptr = cur 17784 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17785 sqlite3.Xsqlite3_free(tls, pCur) 17786 return SQLITE_OK 17787 } 17788 17789 func prefixesNext(tls *libc.TLS, cur uintptr) int32 { 17790 var pCur uintptr = cur 17791 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid++ 17792 return SQLITE_OK 17793 } 17794 17795 func prefixesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 17796 var pCur uintptr = cur 17797 switch i { 17798 case 0: 17799 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), 17800 uintptr(0)) 17801 break 17802 default: 17803 sqlite3.Xsqlite3_result_text(tls, ctx, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr, (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr, uintptr(0)) 17804 break 17805 } 17806 return SQLITE_OK 17807 } 17808 17809 func prefixesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 17810 var pCur uintptr = cur 17811 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid 17812 return SQLITE_OK 17813 } 17814 17815 func prefixesEof(tls *libc.TLS, cur uintptr) int32 { 17816 var pCur uintptr = cur 17817 return libc.Bool32((*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid > sqlite3_int64((*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr)) 17818 } 17819 17820 func prefixesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 17821 bp := tls.Alloc(8) 17822 defer tls.Free(8) 17823 17824 var pCur uintptr = pVtabCursor 17825 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17826 if argc > 0 { 17827 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 17828 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = func() int32 { 17829 if (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr != 0 { 17830 return int32(libc.Xstrlen(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr)) 17831 } 17832 return 0 17833 }() 17834 } else { 17835 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = uintptr(0) 17836 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = 0 17837 } 17838 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 17839 return SQLITE_OK 17840 } 17841 17842 func prefixesBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 17843 var i int32 17844 var p uintptr 17845 17846 i = 0 17847 p = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 17848 __1: 17849 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 17850 goto __3 17851 } 17852 { 17853 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != 1 { 17854 goto __2 17855 } 17856 if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 17857 goto __2 17858 } 17859 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 17860 goto __2 17861 } 17862 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 17863 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 17864 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 17865 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 17866 return SQLITE_OK 17867 17868 } 17869 goto __2 17870 __2: 17871 i++ 17872 p += 12 17873 goto __1 17874 goto __3 17875 __3: 17876 ; 17877 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000000) 17878 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000000000) 17879 return SQLITE_OK 17880 } 17881 17882 var prefixesModule = sqlite3_module{ 17883 FxConnect: 0, 17884 FxBestIndex: 0, 17885 FxDisconnect: 0, 17886 FxOpen: 0, 17887 FxClose: 0, 17888 FxFilter: 0, 17889 FxNext: 0, 17890 FxEof: 0, 17891 FxColumn: 0, 17892 FxRowid: 0, 17893 } 17894 17895 func prefixLengthFunc(tls *libc.TLS, ctx uintptr, nVal int32, apVal uintptr) { 17896 var nByte int32 17897 var nRet int32 = 0 17898 var zL uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 17899 var zR uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 17900 var nL int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 17901 var nR int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 17902 var i int32 17903 17904 nByte = func() int32 { 17905 if nL > nR { 17906 return nL 17907 } 17908 return nR 17909 }() 17910 for i = 0; i < nByte; i++ { 17911 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i)))) != int32(*(*uint8)(unsafe.Pointer(zR + uintptr(i)))) { 17912 break 17913 } 17914 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 != 0x80 { 17915 nRet++ 17916 } 17917 } 17918 17919 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 == 0x80 { 17920 nRet-- 17921 } 17922 sqlite3.Xsqlite3_result_int(tls, ctx, nRet) 17923 } 17924 17925 func sqlite3_prefixes_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17926 var rc int32 = SQLITE_OK 17927 _ = pApi 17928 17929 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6162, uintptr(unsafe.Pointer(&prefixesModule)), uintptr(0)) 17930 if rc == SQLITE_OK { 17931 rc = sqlite3.Xsqlite3_create_function(tls, 17932 db, ts+6171, 2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17933 f func(*libc.TLS, uintptr, int32, uintptr) 17934 }{prefixLengthFunc})), uintptr(0), uintptr(0)) 17935 } 17936 return rc 17937 } 17938 17939 type qpvtab_vtab1 = struct{ Fbase sqlite3_vtab } 17940 17941 type qpvtab_vtab = qpvtab_vtab1 17942 17943 type qpvtab_cursor1 = struct { 17944 Fbase sqlite3_vtab_cursor 17945 FiRowid sqlite3_int64 17946 FzData uintptr 17947 FnData int32 17948 Fflags int32 17949 } 17950 17951 type qpvtab_cursor = qpvtab_cursor1 17952 17953 var azColname = [13]uintptr{ 17954 ts + 6185, 17955 ts + 6188, 17956 ts + 6191, 17957 ts + 6194, 17958 ts + 6197, 17959 ts + 6200, 17960 ts + 6204, ts + 6206, ts + 6208, ts + 6210, ts + 6212, 17961 ts + 6214, 17962 ts + 584, 17963 } 17964 17965 func qpvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17966 var pNew uintptr 17967 var rc int32 17968 17969 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17970 ts+6220) 17971 if rc == SQLITE_OK { 17972 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_vtab{}))) 17973 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17974 if pNew == uintptr(0) { 17975 return SQLITE_NOMEM 17976 } 17977 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(qpvtab_vtab{}))) 17978 } 17979 return rc 17980 } 17981 17982 func qpvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17983 var p uintptr = pVtab 17984 sqlite3.Xsqlite3_free(tls, p) 17985 return SQLITE_OK 17986 } 17987 17988 func qpvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17989 var pCur uintptr 17990 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_cursor{}))) 17991 if pCur == uintptr(0) { 17992 return SQLITE_NOMEM 17993 } 17994 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(qpvtab_cursor{}))) 17995 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17996 return SQLITE_OK 17997 } 17998 17999 func qpvtabClose(tls *libc.TLS, cur uintptr) int32 { 18000 var pCur uintptr = cur 18001 sqlite3.Xsqlite3_free(tls, pCur) 18002 return SQLITE_OK 18003 } 18004 18005 func qpvtabNext(tls *libc.TLS, cur uintptr) int32 { 18006 var pCur uintptr = cur 18007 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 18008 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 18009 var zEnd uintptr = libc.Xstrchr(tls, z, '\n') 18010 if zEnd != 0 { 18011 zEnd++ 18012 } 18013 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = sqlite3_int64(int32((int64(zEnd) - int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData)) / 1)) 18014 } 18015 return SQLITE_OK 18016 } 18017 18018 func qpvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 18019 bp := tls.Alloc(1) 18020 defer tls.Free(1) 18021 18022 var pCur uintptr = cur 18023 if i >= QPVTAB_VN && i <= QPVTAB_RHS && (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 18024 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 18025 var zEnd uintptr 18026 var j int32 18027 j = QPVTAB_VN 18028 for 1 != 0 { 18029 zEnd = libc.Xstrchr(tls, z, func() int32 { 18030 if j == QPVTAB_RHS { 18031 return '\n' 18032 } 18033 return ',' 18034 }()) 18035 if j == i || zEnd == uintptr(0) { 18036 break 18037 } 18038 z = zEnd + uintptr(1) 18039 j++ 18040 } 18041 if zEnd == z { 18042 sqlite3.Xsqlite3_result_null(tls, ctx) 18043 } else if i == QPVTAB_IX || i == QPVTAB_OP || i == QPVTAB_UX { 18044 sqlite3.Xsqlite3_result_int(tls, ctx, libc.Xatoi(tls, z)) 18045 } else { 18046 sqlite3.Xsqlite3_result_text64(tls, ctx, z, uint64((int64(zEnd)-int64(z))/1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 18047 } 18048 } else if i >= QPVTAB_A && i <= QPVTAB_E { 18049 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags&0x001 != 0 { 18050 sqlite3.Xsqlite3_result_int(tls, ctx, i-QPVTAB_A+1) 18051 } else { 18052 *(*int8)(unsafe.Pointer(bp)) = int8('a' + i - QPVTAB_A) 18053 sqlite3.Xsqlite3_result_text64(tls, ctx, bp, uint64(1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 18054 } 18055 } else if i == QPVTAB_FLAGS { 18056 sqlite3.Xsqlite3_result_int(tls, ctx, (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags) 18057 } 18058 return SQLITE_OK 18059 } 18060 18061 func qpvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18062 var pCur uintptr = cur 18063 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid 18064 return SQLITE_OK 18065 } 18066 18067 func qpvtabEof(tls *libc.TLS, cur uintptr) int32 { 18068 var pCur uintptr = cur 18069 return libc.Bool32((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid >= sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData)) 18070 } 18071 18072 func qpvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 18073 var pCur uintptr = pVtabCursor 18074 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 18075 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData = idxStr 18076 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData = int32(libc.Xstrlen(tls, idxStr)) 18077 (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags = idxNum 18078 return SQLITE_OK 18079 } 18080 18081 func qpvtabStrAppendValue(tls *libc.TLS, pStr uintptr, pVal uintptr) { 18082 bp := tls.Alloc(25) 18083 defer tls.Free(25) 18084 18085 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 18086 case SQLITE_NULL: 18087 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+5846, 0) 18088 break 18089 case SQLITE_INTEGER: 18090 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6325, libc.VaList(bp, sqlite3.Xsqlite3_value_int64(tls, pVal))) 18091 break 18092 case SQLITE_FLOAT: 18093 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6330, libc.VaList(bp+8, sqlite3.Xsqlite3_value_double(tls, pVal))) 18094 break 18095 case SQLITE_TEXT: 18096 { 18097 var i int32 18098 var a uintptr = sqlite3.Xsqlite3_value_text(tls, pVal) 18099 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 18100 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18101 for i = 0; i < n; i++ { 18102 *(*int8)(unsafe.Pointer(bp + 24)) = *(*int8)(unsafe.Pointer(a + uintptr(i))) 18103 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\n' { 18104 *(*int8)(unsafe.Pointer(bp + 24)) = int8(' ') 18105 } 18106 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 18107 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\'' { 18108 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 18109 } 18110 } 18111 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18112 break 18113 18114 } 18115 case SQLITE_BLOB: 18116 { 18117 var i int32 18118 var a uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 18119 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 18120 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6334, 2) 18121 for i = 0; i < n; i++ { 18122 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6337, libc.VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a + uintptr(i)))))) 18123 } 18124 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18125 break 18126 18127 } 18128 } 18129 } 18130 18131 func qpvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 18132 bp := tls.Alloc(120) 18133 defer tls.Free(120) 18134 18135 var pStr uintptr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 18136 var i int32 18137 var k int32 = 0 18138 var rc int32 18139 _ = rc 18140 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6342, libc.VaList(bp, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint)) 18141 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 18142 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 18143 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 18144 if iCol == QPVTAB_FLAGS && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 18145 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 18146 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 18147 18148 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 18149 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 18150 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x002 != 0 { 18151 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 18152 } 18153 } 18154 } 18155 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 18156 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 18157 iCol = QPVTAB_NONE 18158 } 18159 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6362, 18160 libc.VaList(bp+8, i, 18161 azColname[iCol], 18162 op, 18163 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable))) 18164 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 18165 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 18166 18167 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 18168 qpvtabStrAppendValue(tls, pStr, *(*uintptr)(unsafe.Pointer(bp + 112))) 18169 } 18170 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6387, 1) 18171 } 18172 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 18173 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 18174 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 18175 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 18176 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 18177 iCol = QPVTAB_NONE 18178 } 18179 if iCol >= QPVTAB_A && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 18180 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&k, 1) 18181 if iCol <= QPVTAB_FLAGS || (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x004 != 0 { 18182 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 18183 } 18184 } 18185 } 18186 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6389, libc.VaList(bp+40, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy)) 18187 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; i++ { 18188 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 18189 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6406, libc.VaList(bp+48, i, 18190 func() uintptr { 18191 if iCol >= 0 { 18192 return azColname[iCol] 18193 } 18194 return ts + 6427 18195 }(), 18196 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy+uintptr(i)*8)).Fdesc))) 18197 } 18198 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6433, 18199 libc.VaList(bp+72, sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo))) 18200 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6463, libc.VaList(bp+80, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags)) 18201 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6480, libc.VaList(bp+88, int32((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 18202 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 18203 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 18204 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6496, libc.VaList(bp+96, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum)) 18205 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6511, 18206 libc.VaList(bp+104, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed)) 18207 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_str_finish(tls, pStr) 18208 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 18209 return SQLITE_OK 18210 } 18211 18212 var qpvtabModule = sqlite3_module{ 18213 FxConnect: 0, 18214 FxBestIndex: 0, 18215 FxDisconnect: 0, 18216 FxOpen: 0, 18217 FxClose: 0, 18218 FxFilter: 0, 18219 FxNext: 0, 18220 FxEof: 0, 18221 FxColumn: 0, 18222 FxRowid: 0, 18223 } 18224 18225 func sqlite3_qpvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18226 var rc int32 = SQLITE_OK 18227 _ = pApi 18228 18229 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6535, uintptr(unsafe.Pointer(&qpvtabModule)), uintptr(0)) 18230 return rc 18231 } 18232 18233 type ReStateNumber = uint16 18234 18235 type ReStateSet1 = struct { 18236 FnState uint32 18237 F__ccgo_pad1 [4]byte 18238 FaState uintptr 18239 } 18240 18241 type ReStateSet = ReStateSet1 18242 18243 type ReInput1 = struct { 18244 Fz uintptr 18245 Fi int32 18246 Fmx int32 18247 } 18248 18249 type ReInput = ReInput1 18250 18251 type ReCompiled1 = struct { 18252 FsIn ReInput 18253 FzErr uintptr 18254 FaOp uintptr 18255 FaArg uintptr 18256 FxNextChar uintptr 18257 FzInit [12]uint8 18258 FnInit int32 18259 FnState uint32 18260 FnAlloc uint32 18261 } 18262 18263 type ReCompiled = ReCompiled1 18264 18265 func re_add_state(tls *libc.TLS, pSet uintptr, newState int32) { 18266 var i uint32 18267 for i = uint32(0); i < (*ReStateSet)(unsafe.Pointer(pSet)).FnState; i++ { 18268 if int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(i)*2))) == newState { 18269 return 18270 } 18271 } 18272 *(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(libc.PostIncUint32(&(*ReStateSet)(unsafe.Pointer(pSet)).FnState, 1))*2)) = ReStateNumber(newState) 18273 } 18274 18275 func re_next_char(tls *libc.TLS, p uintptr) uint32 { 18276 var c uint32 18277 if (*ReInput)(unsafe.Pointer(p)).Fi >= (*ReInput)(unsafe.Pointer(p)).Fmx { 18278 return uint32(0) 18279 } 18280 c = uint32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*ReInput)(unsafe.Pointer(p)).Fi, 1))))) 18281 if c >= uint32(0x80) { 18282 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 { 18283 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) 18284 if c < uint32(0x80) { 18285 c = uint32(0xfffd) 18286 } 18287 } 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 && 18288 int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0xc0 == 0x80 { 18289 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) 18290 *(*int32)(unsafe.Pointer(p + 8)) += 2 18291 if c <= uint32(0x7ff) || c >= uint32(0xd800) && c <= uint32(0xdfff) { 18292 c = uint32(0xfffd) 18293 } 18294 } 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 && 18295 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 { 18296 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) | 18297 uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+2))))&0x3f) 18298 *(*int32)(unsafe.Pointer(p + 8)) += 3 18299 if c <= uint32(0xffff) || c > uint32(0x10ffff) { 18300 c = uint32(0xfffd) 18301 } 18302 } else { 18303 c = uint32(0xfffd) 18304 } 18305 } 18306 return c 18307 } 18308 18309 func re_next_char_nocase(tls *libc.TLS, p uintptr) uint32 { 18310 var c uint32 = re_next_char(tls, p) 18311 if c >= uint32('A') && c <= uint32('Z') { 18312 c = c + uint32('a'-'A') 18313 } 18314 return c 18315 } 18316 18317 func re_word_char(tls *libc.TLS, c int32) int32 { 18318 return libc.Bool32(c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || 18319 c >= 'A' && c <= 'Z' || c == '_') 18320 } 18321 18322 func re_digit_char(tls *libc.TLS, c int32) int32 { 18323 return libc.Bool32(c >= '0' && c <= '9') 18324 } 18325 18326 func re_space_char(tls *libc.TLS, c int32) int32 { 18327 return libc.Bool32(c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\v' || c == '\f') 18328 } 18329 18330 func sqlite3re_match(tls *libc.TLS, pRe uintptr, zIn uintptr, nIn int32) int32 { 18331 bp := tls.Alloc(248) 18332 defer tls.Free(248) 18333 18334 var pThis uintptr 18335 var pNext uintptr 18336 18337 var pToFree uintptr 18338 var i uint32 18339 var iSwap uint32 18340 var c int32 18341 var cPrev int32 18342 var rc int32 18343 18344 var x uint8 18345 var j int32 18346 var n int32 18347 var hit int32 18348 var x1 int32 18349 i = uint32(0) 18350 iSwap = uint32(0) 18351 c = RE_EOF + 1 18352 cPrev = 0 18353 rc = 0 18354 18355 (*ReInput)(unsafe.Pointer(bp + 232)).Fz = zIn 18356 (*ReInput)(unsafe.Pointer(bp + 232)).Fi = 0 18357 (*ReInput)(unsafe.Pointer(bp + 232)).Fmx = func() int32 { 18358 if nIn >= 0 { 18359 return nIn 18360 } 18361 return int32(libc.Xstrlen(tls, zIn)) 18362 }() 18363 18364 if !((*ReCompiled)(unsafe.Pointer(pRe)).FnInit != 0) { 18365 goto __1 18366 } 18367 x = *(*uint8)(unsafe.Pointer(pRe + 48)) 18368 __2: 18369 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit <= (*ReInput)(unsafe.Pointer(bp+232)).Fmx && 18370 (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)) { 18371 goto __3 18372 } 18373 (*ReInput)(unsafe.Pointer(bp+232)).Fi++ 18374 goto __2 18375 __3: 18376 ; 18377 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit > (*ReInput)(unsafe.Pointer(bp+232)).Fmx) { 18378 goto __4 18379 } 18380 return 0 18381 __4: 18382 ; 18383 __1: 18384 ; 18385 if !(uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState) <= uint64(unsafe.Sizeof([100]ReStateNumber{}))/(uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2))) { 18386 goto __5 18387 } 18388 pToFree = uintptr(0) 18389 (*ReStateSet)(unsafe.Pointer(bp)).FaState = bp + 32 18390 goto __6 18391 __5: 18392 pToFree = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2)*uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState)) 18393 if !(pToFree == uintptr(0)) { 18394 goto __7 18395 } 18396 return -1 18397 __7: 18398 ; 18399 (*ReStateSet)(unsafe.Pointer(bp)).FaState = pToFree 18400 __6: 18401 ; 18402 (*ReStateSet)(unsafe.Pointer(bp + 1*16)).FaState = (*ReStateSet)(unsafe.Pointer(bp)).FaState + uintptr((*ReCompiled)(unsafe.Pointer(pRe)).FnState)*2 18403 pNext = bp + 1*16 18404 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 18405 re_add_state(tls, pNext, 0) 18406 __8: 18407 if !(c != RE_EOF && (*ReStateSet)(unsafe.Pointer(pNext)).FnState > uint32(0)) { 18408 goto __9 18409 } 18410 cPrev = c 18411 c = int32((*struct { 18412 f func(*libc.TLS, uintptr) uint32 18413 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar})).f(tls, bp+232)) 18414 pThis = pNext 18415 pNext = bp + uintptr(iSwap)*16 18416 iSwap = uint32(1) - iSwap 18417 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 18418 i = uint32(0) 18419 __10: 18420 if !(i < (*ReStateSet)(unsafe.Pointer(pThis)).FnState) { 18421 goto __12 18422 } 18423 x1 = int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pThis)).FaState + uintptr(i)*2))) 18424 switch int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) { 18425 case RE_OP_MATCH: 18426 goto __14 18427 case RE_OP_ANY: 18428 goto __15 18429 case RE_OP_WORD: 18430 goto __16 18431 case RE_OP_NOTWORD: 18432 goto __17 18433 case RE_OP_DIGIT: 18434 goto __18 18435 case RE_OP_NOTDIGIT: 18436 goto __19 18437 case RE_OP_SPACE: 18438 goto __20 18439 case RE_OP_NOTSPACE: 18440 goto __21 18441 case RE_OP_BOUNDARY: 18442 goto __22 18443 case RE_OP_ANYSTAR: 18444 goto __23 18445 case RE_OP_FORK: 18446 goto __24 18447 case RE_OP_GOTO: 18448 goto __25 18449 case RE_OP_ACCEPT: 18450 goto __26 18451 case RE_OP_CC_EXC: 18452 goto __27 18453 case RE_OP_CC_INC: 18454 goto __28 18455 } 18456 goto __13 18457 __14: 18458 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) == c) { 18459 goto __29 18460 } 18461 re_add_state(tls, pNext, x1+1) 18462 __29: 18463 ; 18464 goto __13 18465 18466 __15: 18467 if !(c != 0) { 18468 goto __30 18469 } 18470 re_add_state(tls, pNext, x1+1) 18471 __30: 18472 ; 18473 goto __13 18474 18475 __16: 18476 if !(re_word_char(tls, c) != 0) { 18477 goto __31 18478 } 18479 re_add_state(tls, pNext, x1+1) 18480 __31: 18481 ; 18482 goto __13 18483 18484 __17: 18485 if !(!(re_word_char(tls, c) != 0) && c != 0) { 18486 goto __32 18487 } 18488 re_add_state(tls, pNext, x1+1) 18489 __32: 18490 ; 18491 goto __13 18492 18493 __18: 18494 if !(re_digit_char(tls, c) != 0) { 18495 goto __33 18496 } 18497 re_add_state(tls, pNext, x1+1) 18498 __33: 18499 ; 18500 goto __13 18501 18502 __19: 18503 if !(!(re_digit_char(tls, c) != 0) && c != 0) { 18504 goto __34 18505 } 18506 re_add_state(tls, pNext, x1+1) 18507 __34: 18508 ; 18509 goto __13 18510 18511 __20: 18512 if !(re_space_char(tls, c) != 0) { 18513 goto __35 18514 } 18515 re_add_state(tls, pNext, x1+1) 18516 __35: 18517 ; 18518 goto __13 18519 18520 __21: 18521 if !(!(re_space_char(tls, c) != 0) && c != 0) { 18522 goto __36 18523 } 18524 re_add_state(tls, pNext, x1+1) 18525 __36: 18526 ; 18527 goto __13 18528 18529 __22: 18530 if !(re_word_char(tls, c) != re_word_char(tls, cPrev)) { 18531 goto __37 18532 } 18533 re_add_state(tls, pThis, x1+1) 18534 __37: 18535 ; 18536 goto __13 18537 18538 __23: 18539 re_add_state(tls, pNext, x1) 18540 re_add_state(tls, pThis, x1+1) 18541 goto __13 18542 18543 __24: 18544 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18545 re_add_state(tls, pThis, x1+1) 18546 goto __13 18547 18548 __25: 18549 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18550 goto __13 18551 18552 __26: 18553 rc = 1 18554 goto re_match_end 18555 18556 __27: 18557 if !(c == 0) { 18558 goto __38 18559 } 18560 goto __13 18561 __38: 18562 ; 18563 goto re_op_cc_inc 18564 18565 __28: 18566 re_op_cc_inc: 18567 j = 1 18568 n = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) 18569 hit = 0 18570 j = 1 18571 __39: 18572 if !(j > 0 && j < n) { 18573 goto __41 18574 } 18575 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1+j)))) == RE_OP_CC_VALUE) { 18576 goto __42 18577 } 18578 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j)*4)) == c) { 18579 goto __44 18580 } 18581 hit = 1 18582 j = -1 18583 __44: 18584 ; 18585 goto __43 18586 __42: 18587 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) { 18588 goto __45 18589 } 18590 hit = 1 18591 j = -1 18592 goto __46 18593 __45: 18594 j++ 18595 __46: 18596 ; 18597 __43: 18598 ; 18599 goto __40 18600 __40: 18601 j++ 18602 goto __39 18603 goto __41 18604 __41: 18605 ; 18606 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) == RE_OP_CC_EXC) { 18607 goto __47 18608 } 18609 hit = libc.BoolInt32(!(hit != 0)) 18610 __47: 18611 ; 18612 if !(hit != 0) { 18613 goto __48 18614 } 18615 re_add_state(tls, pNext, x1+n) 18616 __48: 18617 ; 18618 goto __13 18619 18620 __13: 18621 ; 18622 goto __11 18623 __11: 18624 i++ 18625 goto __10 18626 goto __12 18627 __12: 18628 ; 18629 goto __8 18630 __9: 18631 ; 18632 i = uint32(0) 18633 __49: 18634 if !(i < (*ReStateSet)(unsafe.Pointer(pNext)).FnState) { 18635 goto __51 18636 } 18637 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) { 18638 goto __52 18639 } 18640 rc = 1 18641 goto __51 18642 __52: 18643 ; 18644 goto __50 18645 __50: 18646 i++ 18647 goto __49 18648 goto __51 18649 __51: 18650 ; 18651 re_match_end: 18652 sqlite3.Xsqlite3_free(tls, pToFree) 18653 return rc 18654 } 18655 18656 func re_resize(tls *libc.TLS, p uintptr, N int32) int32 { 18657 var aOp uintptr 18658 var aArg uintptr 18659 aOp = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp, uint64(N)*uint64(unsafe.Sizeof(int8(0)))) 18660 if aOp == uintptr(0) { 18661 return 1 18662 } 18663 (*ReCompiled)(unsafe.Pointer(p)).FaOp = aOp 18664 aArg = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg, uint64(N)*uint64(unsafe.Sizeof(int32(0)))) 18665 if aArg == uintptr(0) { 18666 return 1 18667 } 18668 (*ReCompiled)(unsafe.Pointer(p)).FaArg = aArg 18669 (*ReCompiled)(unsafe.Pointer(p)).FnAlloc = uint32(N) 18670 return 0 18671 } 18672 18673 func re_insert(tls *libc.TLS, p uintptr, iBefore int32, op int32, arg int32) int32 { 18674 var i int32 18675 if (*ReCompiled)(unsafe.Pointer(p)).FnAlloc <= (*ReCompiled)(unsafe.Pointer(p)).FnState && re_resize(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnAlloc*uint32(2))) != 0 { 18676 return 0 18677 } 18678 for i = int32((*ReCompiled)(unsafe.Pointer(p)).FnState); i > iBefore; i-- { 18679 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i))) = *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i-1))) 18680 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i-1)*4)) 18681 } 18682 (*ReCompiled)(unsafe.Pointer(p)).FnState++ 18683 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(iBefore))) = int8(op) 18684 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iBefore)*4)) = arg 18685 return iBefore 18686 } 18687 18688 func re_append(tls *libc.TLS, p uintptr, op int32, arg int32) int32 { 18689 return re_insert(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnState), op, arg) 18690 } 18691 18692 func re_copy(tls *libc.TLS, p uintptr, iStart int32, N int32) { 18693 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 { 18694 return 18695 } 18696 libc.Xmemcpy(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)))) 18697 libc.Xmemcpy(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)))) 18698 *(*uint32)(unsafe.Pointer(p + 64)) += uint32(N) 18699 } 18700 18701 func re_hex(tls *libc.TLS, c int32, pV uintptr) int32 { 18702 if c >= '0' && c <= '9' { 18703 c = c - '0' 18704 } else if c >= 'a' && c <= 'f' { 18705 c = c - ('a' - 10) 18706 } else if c >= 'A' && c <= 'F' { 18707 c = c - ('A' - 10) 18708 } else { 18709 return 0 18710 } 18711 *(*int32)(unsafe.Pointer(pV)) = *(*int32)(unsafe.Pointer(pV))*16 + c&0xff 18712 return 1 18713 } 18714 18715 func re_esc_char(tls *libc.TLS, p uintptr) uint32 { 18716 bp := tls.Alloc(4) 18717 defer tls.Free(4) 18718 18719 var i int32 18720 *(*int32)(unsafe.Pointer(bp)) = 0 18721 var c int8 18722 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18723 return uint32(0) 18724 } 18725 c = int8(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi)))) 18726 if int32(c) == 'u' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+4 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18727 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18728 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18729 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 && 18730 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 3))), bp) != 0 && 18731 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 4))), bp) != 0 { 18732 *(*int32)(unsafe.Pointer(p + 8)) += 5 18733 return uint32(*(*int32)(unsafe.Pointer(bp))) 18734 } 18735 } 18736 if int32(c) == 'x' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+2 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18737 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18738 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18739 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 { 18740 *(*int32)(unsafe.Pointer(p + 8)) += 3 18741 return uint32(*(*int32)(unsafe.Pointer(bp))) 18742 } 18743 } 18744 for i = 0; zEsc[i] != 0 && int32(zEsc[i]) != int32(c); i++ { 18745 } 18746 if zEsc[i] != 0 { 18747 if i < 6 { 18748 c = zTrans[i] 18749 } 18750 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18751 } else { 18752 (*ReCompiled)(unsafe.Pointer(p)).FzErr = ts + 6542 18753 } 18754 return uint32(c) 18755 } 18756 18757 var zEsc = *(*[21]int8)(unsafe.Pointer(ts + 6559)) 18758 var zTrans = *(*[7]int8)(unsafe.Pointer(ts + 6580)) 18759 18760 func rePeek(tls *libc.TLS, p uintptr) uint8 { 18761 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18762 return *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 18763 } 18764 return uint8(0) 18765 } 18766 18767 func re_subcompile_re(tls *libc.TLS, p uintptr) uintptr { 18768 var zErr uintptr 18769 var iStart int32 18770 var iEnd int32 18771 var iGoto int32 18772 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18773 zErr = re_subcompile_string(tls, p) 18774 if zErr != 0 { 18775 return zErr 18776 } 18777 for int32(rePeek(tls, p)) == '|' { 18778 iEnd = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18779 re_insert(tls, p, iStart, RE_OP_FORK, iEnd+2-iStart) 18780 iGoto = re_append(tls, p, RE_OP_GOTO, 0) 18781 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18782 zErr = re_subcompile_string(tls, p) 18783 if zErr != 0 { 18784 return zErr 18785 } 18786 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iGoto)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iGoto)) 18787 } 18788 return uintptr(0) 18789 } 18790 18791 func re_subcompile_string(tls *libc.TLS, p uintptr) uintptr { 18792 var iPrev int32 = -1 18793 var iStart int32 18794 var c uint32 18795 var zErr uintptr 18796 for libc.AssignUint32(&c, (*struct { 18797 f func(*libc.TLS, uintptr) uint32 18798 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 18799 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18800 switch c { 18801 case uint32('|'): 18802 fallthrough 18803 case uint32('$'): 18804 fallthrough 18805 case uint32(')'): 18806 { 18807 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi-- 18808 return uintptr(0) 18809 18810 } 18811 case uint32('('): 18812 { 18813 zErr = re_subcompile_re(tls, p) 18814 if zErr != 0 { 18815 return zErr 18816 } 18817 if int32(rePeek(tls, p)) != ')' { 18818 return ts + 6587 18819 } 18820 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18821 break 18822 18823 } 18824 case uint32('.'): 18825 { 18826 if int32(rePeek(tls, p)) == '*' { 18827 re_append(tls, p, RE_OP_ANYSTAR, 0) 18828 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18829 } else { 18830 re_append(tls, p, RE_OP_ANY, 0) 18831 } 18832 break 18833 18834 } 18835 case uint32('*'): 18836 { 18837 if iPrev < 0 { 18838 return ts + 6601 18839 } 18840 re_insert(tls, p, iPrev, RE_OP_GOTO, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 18841 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState+uint32(1))) 18842 break 18843 18844 } 18845 case uint32('+'): 18846 { 18847 if iPrev < 0 { 18848 return ts + 6621 18849 } 18850 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState)) 18851 break 18852 18853 } 18854 case uint32('?'): 18855 { 18856 if iPrev < 0 { 18857 return ts + 6641 18858 } 18859 re_insert(tls, p, iPrev, RE_OP_FORK, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 18860 break 18861 18862 } 18863 case uint32('{'): 18864 { 18865 var m int32 = 0 18866 var n int32 = 0 18867 var sz int32 18868 var j int32 18869 if iPrev < 0 { 18870 return ts + 6661 18871 } 18872 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 18873 m = int32(uint32(m*10) + c - uint32('0')) 18874 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18875 } 18876 n = m 18877 if c == uint32(',') { 18878 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18879 n = 0 18880 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 18881 n = int32(uint32(n*10) + c - uint32('0')) 18882 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18883 } 18884 } 18885 if c != uint32('}') { 18886 return ts + 6685 18887 } 18888 if n > 0 && n < m { 18889 return ts + 6699 18890 } 18891 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18892 sz = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iPrev)) 18893 if m == 0 { 18894 if n == 0 { 18895 return ts + 6724 18896 } 18897 re_insert(tls, p, iPrev, RE_OP_FORK, sz+1) 18898 n-- 18899 } else { 18900 for j = 1; j < m; j++ { 18901 re_copy(tls, p, iPrev, sz) 18902 } 18903 } 18904 for j = m; j < n; j++ { 18905 re_append(tls, p, RE_OP_FORK, sz+1) 18906 re_copy(tls, p, iPrev, sz) 18907 } 18908 if n == 0 && m > 0 { 18909 re_append(tls, p, RE_OP_FORK, -sz) 18910 } 18911 break 18912 18913 } 18914 case uint32('['): 18915 { 18916 var iFirst int32 = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18917 if int32(rePeek(tls, p)) == '^' { 18918 re_append(tls, p, RE_OP_CC_EXC, 0) 18919 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18920 } else { 18921 re_append(tls, p, RE_OP_CC_INC, 0) 18922 } 18923 for libc.AssignUint32(&c, (*struct { 18924 f func(*libc.TLS, uintptr) uint32 18925 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 18926 if c == uint32('[') && int32(rePeek(tls, p)) == ':' { 18927 return ts + 6757 18928 } 18929 if c == uint32('\\') { 18930 c = re_esc_char(tls, p) 18931 } 18932 if int32(rePeek(tls, p)) == '-' { 18933 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 18934 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18935 c = (*struct { 18936 f func(*libc.TLS, uintptr) uint32 18937 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p) 18938 if c == uint32('\\') { 18939 c = re_esc_char(tls, p) 18940 } 18941 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 18942 } else { 18943 re_append(tls, p, RE_OP_CC_VALUE, int32(c)) 18944 } 18945 if int32(rePeek(tls, p)) == ']' { 18946 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18947 break 18948 } 18949 } 18950 if c == uint32(0) { 18951 return ts + 6795 18952 } 18953 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iFirst)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iFirst)) 18954 break 18955 18956 } 18957 case uint32('\\'): 18958 { 18959 var specialOp int32 = 0 18960 switch int32(rePeek(tls, p)) { 18961 case 'b': 18962 specialOp = RE_OP_BOUNDARY 18963 break 18964 case 'd': 18965 specialOp = RE_OP_DIGIT 18966 break 18967 case 'D': 18968 specialOp = RE_OP_NOTDIGIT 18969 break 18970 case 's': 18971 specialOp = RE_OP_SPACE 18972 break 18973 case 'S': 18974 specialOp = RE_OP_NOTSPACE 18975 break 18976 case 'w': 18977 specialOp = RE_OP_WORD 18978 break 18979 case 'W': 18980 specialOp = RE_OP_NOTWORD 18981 break 18982 } 18983 if specialOp != 0 { 18984 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18985 re_append(tls, p, specialOp, 0) 18986 } else { 18987 c = re_esc_char(tls, p) 18988 re_append(tls, p, RE_OP_MATCH, int32(c)) 18989 } 18990 break 18991 18992 } 18993 default: 18994 { 18995 re_append(tls, p, RE_OP_MATCH, int32(c)) 18996 break 18997 18998 } 18999 } 19000 iPrev = iStart 19001 } 19002 return uintptr(0) 19003 } 19004 19005 func sqlite3re_free(tls *libc.TLS, pRe uintptr) { 19006 if pRe != 0 { 19007 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaOp) 19008 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaArg) 19009 sqlite3.Xsqlite3_free(tls, pRe) 19010 } 19011 } 19012 19013 func sqlite3re_compile(tls *libc.TLS, ppRe uintptr, zIn uintptr, noCase int32) uintptr { 19014 var pRe uintptr 19015 var zErr uintptr 19016 var i int32 19017 var j int32 19018 19019 *(*uintptr)(unsafe.Pointer(ppRe)) = uintptr(0) 19020 pRe = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(ReCompiled{}))) 19021 if pRe == uintptr(0) { 19022 return ts + 2069 19023 } 19024 libc.Xmemset(tls, pRe, 0, uint64(unsafe.Sizeof(ReCompiled{}))) 19025 (*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar = func() uintptr { 19026 if noCase != 0 { 19027 return *(*uintptr)(unsafe.Pointer(&struct { 19028 f func(*libc.TLS, uintptr) uint32 19029 }{re_next_char_nocase})) 19030 } 19031 return *(*uintptr)(unsafe.Pointer(&struct { 19032 f func(*libc.TLS, uintptr) uint32 19033 }{re_next_char})) 19034 }() 19035 if re_resize(tls, pRe, 30) != 0 { 19036 sqlite3re_free(tls, pRe) 19037 return ts + 2069 19038 } 19039 if int32(*(*int8)(unsafe.Pointer(zIn))) == '^' { 19040 zIn++ 19041 } else { 19042 re_append(tls, pRe, RE_OP_ANYSTAR, 0) 19043 } 19044 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fz = zIn 19045 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi = 0 19046 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx = int32(libc.Xstrlen(tls, zIn)) 19047 zErr = re_subcompile_re(tls, pRe) 19048 if zErr != 0 { 19049 sqlite3re_free(tls, pRe) 19050 return zErr 19051 } 19052 if int32(rePeek(tls, pRe)) == '$' && (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi+1 >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 19053 re_append(tls, pRe, RE_OP_MATCH, RE_EOF) 19054 re_append(tls, pRe, RE_OP_ACCEPT, 0) 19055 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 19056 } else if (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 19057 re_append(tls, pRe, RE_OP_ACCEPT, 0) 19058 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 19059 } else { 19060 sqlite3re_free(tls, pRe) 19061 return ts + 6808 19062 } 19063 19064 if int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp))) == RE_OP_ANYSTAR && !(noCase != 0) { 19065 j = 0 19066 i = 1 19067 for ; j < int32(unsafe.Sizeof([12]uint8{}))-2 && int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(i)))) == RE_OP_MATCH; i++ { 19068 var x uint32 = uint32(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(i)*4))) 19069 if x <= uint32(127) { 19070 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(x) 19071 } else if x <= uint32(0xfff) { 19072 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xc0) | x>>6) 19073 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 19074 } else if x <= uint32(0xffff) { 19075 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xe0) | x>>12) 19076 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x>>6&uint32(0x3f)) 19077 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 19078 } else { 19079 break 19080 } 19081 } 19082 if j > 0 && int32(*(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(j-1)))) == 0 { 19083 j-- 19084 } 19085 (*ReCompiled)(unsafe.Pointer(pRe)).FnInit = j 19086 } 19087 return (*ReCompiled)(unsafe.Pointer(pRe)).FzErr 19088 } 19089 19090 func re_sql_func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19091 bp := tls.Alloc(8) 19092 defer tls.Free(8) 19093 19094 var zPattern uintptr 19095 var zStr uintptr 19096 var zErr uintptr 19097 var setAux int32 = 0 19098 19099 _ = argc 19100 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_get_auxdata(tls, context, 0) 19101 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 19102 zPattern = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19103 if zPattern == uintptr(0) { 19104 return 19105 } 19106 zErr = sqlite3re_compile(tls, bp, zPattern, libc.Bool32(sqlite3.Xsqlite3_user_data(tls, context) != uintptr(0))) 19107 if zErr != 0 { 19108 sqlite3re_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 19109 sqlite3.Xsqlite3_result_error(tls, context, zErr, -1) 19110 return 19111 } 19112 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 19113 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19114 return 19115 } 19116 setAux = 1 19117 } 19118 zStr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 19119 if zStr != uintptr(0) { 19120 sqlite3.Xsqlite3_result_int(tls, context, sqlite3re_match(tls, *(*uintptr)(unsafe.Pointer(bp)), zStr, -1)) 19121 } 19122 if setAux != 0 { 19123 sqlite3.Xsqlite3_set_auxdata(tls, context, 0, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3re_free}))) 19124 } 19125 } 19126 19127 func sqlite3_regexp_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19128 var rc int32 = SQLITE_OK 19129 _ = pApi 19130 19131 _ = pzErrMsg 19132 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6831, 2, 19133 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 19134 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 19135 f func(*libc.TLS, uintptr, int32, uintptr) 19136 }{re_sql_func})), uintptr(0), uintptr(0)) 19137 if rc == SQLITE_OK { 19138 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6838, 2, 19139 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 19140 db, *(*uintptr)(unsafe.Pointer(&struct { 19141 f func(*libc.TLS, uintptr, int32, uintptr) 19142 }{re_sql_func})), uintptr(0), uintptr(0)) 19143 } 19144 return rc 19145 } 19146 19147 func rememberFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 19148 var v sqlite3_int64 19149 var ptr uintptr 19150 19151 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 19152 ptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4060) 19153 if ptr != 0 { 19154 *(*sqlite3_int64)(unsafe.Pointer(ptr)) = v 19155 } 19156 sqlite3.Xsqlite3_result_int64(tls, pCtx, v) 19157 } 19158 19159 func sqlite3_remember_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19160 var rc int32 = SQLITE_OK 19161 _ = pApi 19162 19163 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6846, 2, SQLITE_UTF8, uintptr(0), 19164 *(*uintptr)(unsafe.Pointer(&struct { 19165 f func(*libc.TLS, uintptr, int32, uintptr) 19166 }{rememberFunc})), uintptr(0), uintptr(0)) 19167 return rc 19168 } 19169 19170 type series_cursor1 = struct { 19171 Fbase sqlite3_vtab_cursor 19172 FisDesc int32 19173 F__ccgo_pad1 [4]byte 19174 FiRowid sqlite3_int64 19175 FiValue sqlite3_int64 19176 FmnValue sqlite3_int64 19177 FmxValue sqlite3_int64 19178 FiStep sqlite3_int64 19179 } 19180 19181 type series_cursor = series_cursor1 19182 19183 func seriesConnect(tls *libc.TLS, db uintptr, pUnused uintptr, argcUnused int32, argvUnused uintptr, ppVtab uintptr, pzErrUnused uintptr) int32 { 19184 var pNew uintptr 19185 var rc int32 19186 19187 _ = pUnused 19188 _ = argcUnused 19189 _ = argvUnused 19190 _ = pzErrUnused 19191 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 19192 ts+6855) 19193 if rc == SQLITE_OK { 19194 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 19195 if pNew == uintptr(0) { 19196 return SQLITE_NOMEM 19197 } 19198 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 19199 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 19200 } 19201 return rc 19202 } 19203 19204 func seriesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 19205 sqlite3.Xsqlite3_free(tls, pVtab) 19206 return SQLITE_OK 19207 } 19208 19209 func seriesOpen(tls *libc.TLS, pUnused uintptr, ppCursor uintptr) int32 { 19210 var pCur uintptr 19211 _ = pUnused 19212 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(series_cursor{}))) 19213 if pCur == uintptr(0) { 19214 return SQLITE_NOMEM 19215 } 19216 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(series_cursor{}))) 19217 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 19218 return SQLITE_OK 19219 } 19220 19221 func seriesClose(tls *libc.TLS, cur uintptr) int32 { 19222 sqlite3.Xsqlite3_free(tls, cur) 19223 return SQLITE_OK 19224 } 19225 19226 func seriesNext(tls *libc.TLS, cur uintptr) int32 { 19227 var pCur uintptr = cur 19228 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 19229 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19230 } else { 19231 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) += (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19232 } 19233 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid++ 19234 return SQLITE_OK 19235 } 19236 19237 func seriesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 19238 var pCur uintptr = cur 19239 var x sqlite3_int64 = int64(0) 19240 switch i { 19241 case SERIES_COLUMN_START: 19242 x = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 19243 break 19244 case SERIES_COLUMN_STOP: 19245 x = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 19246 break 19247 case SERIES_COLUMN_STEP: 19248 x = (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19249 break 19250 default: 19251 x = (*series_cursor)(unsafe.Pointer(pCur)).FiValue 19252 break 19253 } 19254 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 19255 return SQLITE_OK 19256 } 19257 19258 func seriesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 19259 var pCur uintptr = cur 19260 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*series_cursor)(unsafe.Pointer(pCur)).FiRowid 19261 return SQLITE_OK 19262 } 19263 19264 func seriesEof(tls *libc.TLS, cur uintptr) int32 { 19265 var pCur uintptr = cur 19266 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 19267 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue < (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) 19268 } else { 19269 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue > (*series_cursor)(unsafe.Pointer(pCur)).FmxValue) 19270 } 19271 return int32(0) 19272 } 19273 19274 func seriesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStrUnused uintptr, argc int32, argv uintptr) int32 { 19275 var pCur uintptr = pVtabCursor 19276 var i int32 = 0 19277 _ = idxStrUnused 19278 if idxNum&1 != 0 { 19279 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19280 } else { 19281 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(0) 19282 } 19283 if idxNum&2 != 0 { 19284 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19285 } else { 19286 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 19287 } 19288 if idxNum&4 != 0 { 19289 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19290 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep == int64(0) { 19291 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 19292 } else if (*series_cursor)(unsafe.Pointer(pCur)).FiStep < int64(0) { 19293 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = -(*series_cursor)(unsafe.Pointer(pCur)).FiStep 19294 if idxNum&16 == 0 { 19295 idxNum = idxNum | 8 19296 } 19297 } 19298 } else { 19299 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 19300 } 19301 for i = 0; i < argc; i++ { 19302 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) == SQLITE_NULL { 19303 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(1) 19304 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0) 19305 break 19306 } 19307 } 19308 if idxNum&8 != 0 { 19309 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 1 19310 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 19311 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep > int64(0) { 19312 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= ((*series_cursor)(unsafe.Pointer(pCur)).FmxValue - (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) % (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19313 } 19314 } else { 19315 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 0 19316 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 19317 } 19318 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 19319 return SQLITE_OK 19320 } 19321 19322 func seriesBestIndex(tls *libc.TLS, pVTab uintptr, pIdxInfo uintptr) int32 { 19323 bp := tls.Alloc(12) 19324 defer tls.Free(12) 19325 19326 var i int32 19327 var j int32 19328 var idxNum int32 = 0 19329 var bStartSeen int32 = 0 19330 var unusableMask int32 = 0 19331 var nArg int32 = 0 19332 19333 var pConstraint uintptr 19334 19335 *(*int32)(unsafe.Pointer(bp)) = libc.AssignPtrInt32(bp+1*4, libc.AssignPtrInt32(bp+2*4, -1)) 19336 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 19337 i = 0 19338 __1: 19339 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 19340 goto __3 19341 } 19342 { 19343 var iCol int32 19344 var iMask int32 19345 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < SERIES_COLUMN_START { 19346 goto __2 19347 } 19348 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn - SERIES_COLUMN_START 19349 19350 iMask = int32(1) << iCol 19351 if iCol == 0 { 19352 bStartSeen = 1 19353 } 19354 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 19355 unusableMask = unusableMask | iMask 19356 goto __2 19357 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 19358 idxNum = idxNum | iMask 19359 *(*int32)(unsafe.Pointer(bp + uintptr(iCol)*4)) = i 19360 } 19361 19362 } 19363 goto __2 19364 __2: 19365 i++ 19366 pConstraint += 12 19367 goto __1 19368 goto __3 19369 __3: 19370 ; 19371 for i = 0; i < 3; i++ { 19372 if libc.AssignInt32(&j, *(*int32)(unsafe.Pointer(bp + uintptr(i)*4))) >= 0 { 19373 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).FargvIndex = libc.PreIncInt32(&nArg, 1) 19374 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).Fomit = libc.BoolUint8(!(1 != 0)) 19375 } 19376 } 19377 19378 if !(bStartSeen != 0) { 19379 sqlite3.Xsqlite3_free(tls, (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg) 19380 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 19381 ts+6914, 0) 19382 return SQLITE_ERROR 19383 } 19384 if unusableMask & ^idxNum != 0 { 19385 return SQLITE_CONSTRAINT 19386 } 19387 if idxNum&3 == 3 { 19388 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2 - libc.Bool32(idxNum&4 != 0)) 19389 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000) 19390 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy >= 1 && (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 0 { 19391 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 19392 idxNum = idxNum | 8 19393 } else { 19394 idxNum = idxNum | 16 19395 } 19396 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 19397 } 19398 } else { 19399 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 19400 } 19401 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 19402 return SQLITE_OK 19403 } 19404 19405 var seriesModule = sqlite3_module{ 19406 FxConnect: 0, 19407 FxBestIndex: 0, 19408 FxDisconnect: 0, 19409 FxOpen: 0, 19410 FxClose: 0, 19411 FxFilter: 0, 19412 FxNext: 0, 19413 FxEof: 0, 19414 FxColumn: 0, 19415 FxRowid: 0, 19416 } 19417 19418 func sqlite3_series_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19419 var rc int32 = SQLITE_OK 19420 _ = pApi 19421 19422 if sqlite3.Xsqlite3_libversion_number(tls) < 3008012 && pzErrMsg != uintptr(0) { 19423 *(*uintptr)(unsafe.Pointer(pzErrMsg)) = sqlite3.Xsqlite3_mprintf(tls, 19424 ts+6972, 0) 19425 return SQLITE_ERROR 19426 } 19427 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+7022, uintptr(unsafe.Pointer(&seriesModule)), uintptr(0)) 19428 return rc 19429 } 19430 19431 type u16 = uint16 19432 19433 var midClass = [128]uint8{ 19434 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19435 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19436 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19437 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19438 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 19439 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19440 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19441 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19442 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19443 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19444 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19445 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19446 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19447 uint8(CCLASS_SILENT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19448 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19449 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19450 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19451 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19452 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19453 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19454 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19455 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19456 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19457 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19458 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19459 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19460 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19461 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19462 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19463 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_VOWEL), 19464 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19465 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19466 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19467 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19468 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19469 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19470 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19471 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19472 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19473 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19474 uint8(CCLASS_C), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19475 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19476 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19477 } 19478 19479 var initClass = [128]uint8{ 19480 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19481 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19482 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19483 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19484 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 19485 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19486 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19487 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19488 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19489 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19490 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19491 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19492 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19493 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19494 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19495 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19496 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19497 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19498 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19499 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19500 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19501 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19502 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19503 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19504 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19505 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19506 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19507 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19508 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19509 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_Y), 19510 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19511 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19512 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19513 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19514 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19515 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19516 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19517 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19518 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19519 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19520 uint8(CCLASS_C), uint8(CCLASS_Y), uint8(CCLASS_C), 19521 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19522 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19523 } 19524 19525 var className = *(*[14]uint8)(unsafe.Pointer(ts + 7038)) 19526 19527 func phoneticHash(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 19528 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+1)) 19529 var i int32 19530 var nOut int32 = 0 19531 var cPrev int8 = int8(0x77) 19532 var cPrevX int8 = int8(0x77) 19533 var aClass uintptr = uintptr(unsafe.Pointer(&initClass)) 19534 19535 if zOut == uintptr(0) { 19536 return uintptr(0) 19537 } 19538 if nIn > 2 { 19539 switch int32(*(*uint8)(unsafe.Pointer(zIn))) { 19540 case 'g': 19541 fallthrough 19542 case 'k': 19543 { 19544 if int32(*(*uint8)(unsafe.Pointer(zIn + 1))) == 'n' { 19545 zIn++ 19546 nIn-- 19547 } 19548 break 19549 19550 } 19551 } 19552 } 19553 for i = 0; i < nIn; i++ { 19554 var c uint8 = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 19555 if i+1 < nIn { 19556 if int32(c) == 'w' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'r' { 19557 continue 19558 } 19559 if int32(c) == 'd' && (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'j' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'g') { 19560 continue 19561 } 19562 if i+2 < nIn { 19563 if int32(c) == 't' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'c' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+2)))) == 'h' { 19564 continue 19565 } 19566 } 19567 } 19568 c = *(*uint8)(unsafe.Pointer(aClass + uintptr(int32(c)&0x7f))) 19569 if int32(c) == CCLASS_SPACE { 19570 continue 19571 } 19572 if int32(c) == CCLASS_OTHER && int32(cPrev) != CCLASS_DIGIT { 19573 continue 19574 } 19575 aClass = uintptr(unsafe.Pointer(&midClass)) 19576 if int32(c) == CCLASS_VOWEL && (int32(cPrevX) == CCLASS_R || int32(cPrevX) == CCLASS_L) { 19577 continue 19578 } 19579 if (int32(c) == CCLASS_R || int32(c) == CCLASS_L) && int32(cPrevX) == CCLASS_VOWEL { 19580 nOut-- 19581 } 19582 cPrev = int8(c) 19583 if int32(c) == CCLASS_SILENT { 19584 continue 19585 } 19586 cPrevX = int8(c) 19587 c = className[c] 19588 19589 if nOut == 0 || int32(c) != int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(nOut-1)))) { 19590 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = c 19591 } 19592 } 19593 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 19594 return zOut 19595 } 19596 19597 func phoneticHashSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19598 var zIn uintptr 19599 var zOut uintptr 19600 19601 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19602 if zIn == uintptr(0) { 19603 return 19604 } 19605 zOut = phoneticHash(tls, zIn, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 19606 if zOut == uintptr(0) { 19607 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19608 } else { 19609 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 19610 } 19611 } 19612 19613 func characterClass(tls *libc.TLS, cPrev int8, c int8) int8 { 19614 if int32(cPrev) == 0 { 19615 return int8(initClass[int32(c)&0x7f]) 19616 } 19617 return int8(midClass[int32(c)&0x7f]) 19618 } 19619 19620 func insertOrDeleteCost(tls *libc.TLS, cPrev int8, c int8, cNext int8) int32 { 19621 var classC int8 = characterClass(tls, cPrev, c) 19622 var classCprev int8 19623 19624 if int32(classC) == CCLASS_SILENT { 19625 return 1 19626 } 19627 if int32(cPrev) == int32(c) { 19628 return 10 19629 } 19630 if int32(classC) == CCLASS_VOWEL && (int32(cPrev) == 'r' || int32(cNext) == 'r') { 19631 return 20 19632 } 19633 classCprev = characterClass(tls, cPrev, cPrev) 19634 if int32(classC) == int32(classCprev) { 19635 if int32(classC) == CCLASS_VOWEL { 19636 return 15 19637 } else { 19638 return 50 19639 } 19640 } 19641 19642 return 100 19643 } 19644 19645 func substituteCost(tls *libc.TLS, cPrev int8, cFrom int8, cTo int8) int32 { 19646 var classFrom int8 19647 var classTo int8 19648 if int32(cFrom) == int32(cTo) { 19649 return 0 19650 } 19651 if int32(cFrom) == int32(cTo)^0x20 && (int32(cTo) >= 'A' && int32(cTo) <= 'Z' || int32(cTo) >= 'a' && int32(cTo) <= 'z') { 19652 return 0 19653 } 19654 classFrom = characterClass(tls, cPrev, cFrom) 19655 classTo = characterClass(tls, cPrev, cTo) 19656 if int32(classFrom) == int32(classTo) { 19657 return 40 19658 } 19659 if int32(classFrom) >= CCLASS_B && int32(classFrom) <= CCLASS_Y && 19660 int32(classTo) >= CCLASS_B && int32(classTo) <= CCLASS_Y { 19661 return 75 19662 } 19663 19664 return 100 19665 } 19666 19667 func editdist1(tls *libc.TLS, zA uintptr, zB uintptr, pnMatch uintptr) int32 { 19668 bp := tls.Alloc(300) 19669 defer tls.Free(300) 19670 19671 var nA int32 19672 var nB int32 19673 var xA int32 19674 var xB int32 19675 var cA int8 = int8(0) 19676 var cB int8 19677 var cAprev int8 19678 var cBprev int8 19679 var cAnext int8 19680 var cBnext int8 19681 var d int32 19682 var dc int32 = 0 19683 var res int32 19684 var m uintptr 19685 var cx uintptr 19686 var toFree uintptr = uintptr(0) 19687 var nMatch int32 = 0 19688 19689 if zA == uintptr(0) || zB == uintptr(0) { 19690 return -1 19691 } 19692 19693 for *(*int8)(unsafe.Pointer(zA)) != 0 && int32(*(*int8)(unsafe.Pointer(zA))) == int32(*(*int8)(unsafe.Pointer(zB))) { 19694 dc = int32(*(*int8)(unsafe.Pointer(zA))) 19695 zA++ 19696 zB++ 19697 nMatch++ 19698 } 19699 if pnMatch != 0 { 19700 *(*int32)(unsafe.Pointer(pnMatch)) = nMatch 19701 } 19702 if int32(*(*int8)(unsafe.Pointer(zA))) == 0 && int32(*(*int8)(unsafe.Pointer(zB))) == 0 { 19703 return 0 19704 } 19705 19706 for nA = 0; *(*int8)(unsafe.Pointer(zA + uintptr(nA))) != 0; nA++ { 19707 if int32(*(*int8)(unsafe.Pointer(zA + uintptr(nA))))&0x80 != 0 { 19708 return -2 19709 } 19710 } 19711 for nB = 0; *(*int8)(unsafe.Pointer(zB + uintptr(nB))) != 0; nB++ { 19712 if int32(*(*int8)(unsafe.Pointer(zB + uintptr(nB))))&0x80 != 0 { 19713 return -2 19714 } 19715 } 19716 19717 if nA == 0 { 19718 cBprev = int8(dc) 19719 for xB = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB))))) != 0; xB++ { 19720 res = res + insertOrDeleteCost(tls, cBprev, cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB+1))))/FINAL_INS_COST_DIV 19721 cBprev = cB 19722 } 19723 return res 19724 } 19725 if nB == 0 { 19726 cAprev = int8(dc) 19727 for xA = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA))))) != 0; xA++ { 19728 res = res + insertOrDeleteCost(tls, cAprev, cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA+1)))) 19729 cAprev = cA 19730 } 19731 return res 19732 } 19733 19734 if int32(*(*int8)(unsafe.Pointer(zA))) == '*' && int32(*(*int8)(unsafe.Pointer(zA + 1))) == 0 { 19735 return 0 19736 } 19737 19738 if uint64(nB) < uint64(unsafe.Sizeof([75]int32{}))*uint64(4)/(uint64(unsafe.Sizeof(int32(0)))*uint64(5)) { 19739 m = bp 19740 } else { 19741 m = libc.AssignUintptr(&toFree, sqlite3.Xsqlite3_malloc64(tls, uint64((nB+1)*5)*uint64(unsafe.Sizeof(int32(0)))/uint64(4))) 19742 if m == uintptr(0) { 19743 return -3 19744 } 19745 } 19746 cx = m + uintptr(nB+1)*4 19747 19748 *(*int32)(unsafe.Pointer(m)) = 0 19749 *(*int8)(unsafe.Pointer(cx)) = int8(dc) 19750 cBprev = int8(dc) 19751 for xB = 1; xB <= nB; xB++ { 19752 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 19753 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 19754 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = cB 19755 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) + insertOrDeleteCost(tls, cBprev, cB, cBnext) 19756 cBprev = cB 19757 } 19758 cAprev = int8(dc) 19759 for xA = 1; xA <= nA; xA++ { 19760 var lastA int32 = libc.Bool32(xA == nA) 19761 cA = *(*int8)(unsafe.Pointer(zA + uintptr(xA-1))) 19762 cAnext = *(*int8)(unsafe.Pointer(zA + uintptr(xA))) 19763 if int32(cA) == '*' && lastA != 0 { 19764 break 19765 } 19766 d = *(*int32)(unsafe.Pointer(m)) 19767 dc = int32(*(*int8)(unsafe.Pointer(cx))) 19768 *(*int32)(unsafe.Pointer(m)) = d + insertOrDeleteCost(tls, cAprev, cA, cAnext) 19769 cBprev = int8(0) 19770 for xB = 1; xB <= nB; xB++ { 19771 var totalCost int32 19772 var insCost int32 19773 var delCost int32 19774 var subCost int32 19775 var ncx int32 19776 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 19777 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 19778 19779 insCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cB, cBnext) 19780 if lastA != 0 { 19781 insCost = insCost / FINAL_INS_COST_DIV 19782 } 19783 19784 delCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB))), cA, cBnext) 19785 19786 subCost = substituteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cA, cB) 19787 19788 totalCost = insCost + *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) 19789 ncx = int32(cB) 19790 if delCost+*(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < totalCost { 19791 totalCost = delCost + *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19792 ncx = int32(cA) 19793 } 19794 if subCost+d < totalCost { 19795 totalCost = subCost + d 19796 } 19797 19798 d = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19799 dc = int32(*(*int8)(unsafe.Pointer(cx + uintptr(xB)))) 19800 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = totalCost 19801 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = int8(ncx) 19802 cBprev = cB 19803 } 19804 cAprev = cA 19805 } 19806 19807 if int32(cA) == '*' { 19808 res = *(*int32)(unsafe.Pointer(m + 1*4)) 19809 for xB = 1; xB <= nB; xB++ { 19810 if *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < res { 19811 res = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19812 if pnMatch != 0 { 19813 *(*int32)(unsafe.Pointer(pnMatch)) = xB + nMatch 19814 } 19815 } 19816 } 19817 } else { 19818 res = *(*int32)(unsafe.Pointer(m + uintptr(nB)*4)) 19819 19820 } 19821 sqlite3.Xsqlite3_free(tls, toFree) 19822 return res 19823 } 19824 19825 func editdistSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19826 var res int32 = editdist1(tls, 19827 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 19828 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), 19829 uintptr(0)) 19830 if res < 0 { 19831 if res == -3 { 19832 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19833 } else if res == -2 { 19834 sqlite3.Xsqlite3_result_error(tls, context, ts+7052, -1) 19835 } else { 19836 sqlite3.Xsqlite3_result_error(tls, context, ts+7082, -1) 19837 } 19838 } else { 19839 sqlite3.Xsqlite3_result_int(tls, context, res) 19840 } 19841 } 19842 19843 type EditDist3Cost1 = struct { 19844 FpNext uintptr 19845 FnFrom u8 19846 FnTo u8 19847 FiCost u16 19848 Fa [4]int8 19849 } 19850 19851 type EditDist3Cost = EditDist3Cost1 19852 type EditDist3Config1 = struct { 19853 FnLang int32 19854 F__ccgo_pad1 [4]byte 19855 Fa uintptr 19856 } 19857 19858 type EditDist3Config = EditDist3Config1 19859 type EditDist3From1 = struct { 19860 FnSubst int32 19861 FnDel int32 19862 FnByte int32 19863 F__ccgo_pad1 [4]byte 19864 FapSubst uintptr 19865 FapDel uintptr 19866 } 19867 19868 type EditDist3From = EditDist3From1 19869 type EditDist3FromString1 = struct { 19870 Fz uintptr 19871 Fn int32 19872 FisPrefix int32 19873 Fa uintptr 19874 } 19875 19876 type EditDist3FromString = EditDist3FromString1 19877 type EditDist3To1 = struct { 19878 FnIns int32 19879 FnByte int32 19880 FapIns uintptr 19881 } 19882 19883 type EditDist3To = EditDist3To1 19884 type EditDist3ToString1 = struct { 19885 Fz uintptr 19886 Fn int32 19887 F__ccgo_pad1 [4]byte 19888 Fa uintptr 19889 } 19890 19891 type EditDist3ToString = EditDist3ToString1 19892 type EditDist3Lang1 = struct { 19893 FiLang int32 19894 FiInsCost int32 19895 FiDelCost int32 19896 FiSubCost int32 19897 FpCost uintptr 19898 } 19899 19900 type EditDist3Lang = EditDist3Lang1 19901 19902 var editDist3Lang = EditDist3Lang{FiInsCost: 100, FiDelCost: 100, FiSubCost: 150} 19903 19904 func editDist3ConfigClear(tls *libc.TLS, p uintptr) { 19905 var i int32 19906 if p == uintptr(0) { 19907 return 19908 } 19909 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; i++ { 19910 var pCost uintptr 19911 var pNext uintptr 19912 pCost = (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(i)*24)).FpCost 19913 for pCost != 0 { 19914 pNext = (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext 19915 sqlite3.Xsqlite3_free(tls, pCost) 19916 pCost = pNext 19917 } 19918 } 19919 sqlite3.Xsqlite3_free(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa) 19920 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 19921 } 19922 19923 func editDist3ConfigDelete(tls *libc.TLS, pIn uintptr) { 19924 var p uintptr = pIn 19925 editDist3ConfigClear(tls, p) 19926 sqlite3.Xsqlite3_free(tls, p) 19927 } 19928 19929 func editDist3CostCompare(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 19930 var n int32 = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) 19931 var rc int32 19932 if n > int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) { 19933 n = int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 19934 } 19935 rc = libc.Xstrncmp(tls, pA+12, pB+12, uint64(n)) 19936 if rc == 0 { 19937 rc = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) - int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 19938 } 19939 return rc 19940 } 19941 19942 func editDist3CostMerge(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 19943 bp := tls.Alloc(8) 19944 defer tls.Free(8) 19945 19946 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 19947 var ppTail uintptr = bp 19948 var p uintptr 19949 for pA != 0 && pB != 0 { 19950 if editDist3CostCompare(tls, pA, pB) <= 0 { 19951 p = pA 19952 pA = (*EditDist3Cost)(unsafe.Pointer(pA)).FpNext 19953 } else { 19954 p = pB 19955 pB = (*EditDist3Cost)(unsafe.Pointer(pB)).FpNext 19956 } 19957 *(*uintptr)(unsafe.Pointer(ppTail)) = p 19958 ppTail = p 19959 } 19960 if pA != 0 { 19961 *(*uintptr)(unsafe.Pointer(ppTail)) = pA 19962 } else { 19963 *(*uintptr)(unsafe.Pointer(ppTail)) = pB 19964 } 19965 return *(*uintptr)(unsafe.Pointer(bp)) 19966 } 19967 19968 func editDist3CostSort(tls *libc.TLS, pList uintptr) uintptr { 19969 bp := tls.Alloc(480) 19970 defer tls.Free(480) 19971 19972 var p uintptr 19973 var i int32 19974 var mx int32 = 0 19975 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 19976 *(*uintptr)(unsafe.Pointer(bp + 1*8)) = uintptr(0) 19977 for pList != 0 { 19978 p = pList 19979 pList = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 19980 (*EditDist3Cost)(unsafe.Pointer(p)).FpNext = uintptr(0) 19981 for i = 0; *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0; i++ { 19982 p = editDist3CostMerge(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)), p) 19983 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = uintptr(0) 19984 } 19985 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = p 19986 if i > mx { 19987 mx = i 19988 *(*uintptr)(unsafe.Pointer(bp + uintptr(i+1)*8)) = uintptr(0) 19989 } 19990 } 19991 p = uintptr(0) 19992 for i = 0; i <= mx; i++ { 19993 if *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0 { 19994 p = editDist3CostMerge(tls, p, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8))) 19995 } 19996 } 19997 return p 19998 } 19999 20000 func editDist3ConfigLoad(tls *libc.TLS, p uintptr, db uintptr, zTable uintptr) int32 { 20001 bp := tls.Alloc(16) 20002 defer tls.Free(16) 20003 20004 var rc int32 20005 var rc2 int32 20006 var zSql uintptr 20007 var iLangPrev int32 = -9999 20008 var pLang uintptr = uintptr(0) 20009 20010 zSql = sqlite3.Xsqlite3_mprintf(tls, 20011 ts+7107, libc.VaList(bp, zTable)) 20012 if zSql == uintptr(0) { 20013 return SQLITE_NOMEM 20014 } 20015 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+8, uintptr(0)) 20016 sqlite3.Xsqlite3_free(tls, zSql) 20017 if rc != 0 { 20018 return rc 20019 } 20020 editDist3ConfigClear(tls, p) 20021 for sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) == SQLITE_ROW { 20022 var iLang int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0) 20023 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 20024 var nFrom int32 20025 if zFrom != 0 { 20026 nFrom = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 20027 } else { 20028 nFrom = 0 20029 } 20030 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 20031 var nTo int32 20032 if zTo != 0 { 20033 nTo = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 20034 } else { 20035 nTo = 0 20036 } 20037 var iCost int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 3) 20038 20039 if nFrom > 100 || nTo > 100 { 20040 continue 20041 } 20042 if iCost < 0 { 20043 continue 20044 } 20045 if iCost >= 10000 { 20046 continue 20047 } 20048 if pLang == uintptr(0) || iLang != iLangPrev { 20049 var pNew uintptr 20050 pNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa, uint64((*EditDist3Config)(unsafe.Pointer(p)).FnLang+1)*uint64(unsafe.Sizeof(EditDist3Lang{}))) 20051 if pNew == uintptr(0) { 20052 rc = SQLITE_NOMEM 20053 break 20054 } 20055 (*EditDist3Config)(unsafe.Pointer(p)).Fa = pNew 20056 pLang = (*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr((*EditDist3Config)(unsafe.Pointer(p)).FnLang)*24 20057 (*EditDist3Config)(unsafe.Pointer(p)).FnLang++ 20058 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiLang = iLang 20059 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = 100 20060 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = 100 20061 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = 150 20062 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = uintptr(0) 20063 iLangPrev = iLang 20064 } 20065 if nFrom == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && nTo == 0 { 20066 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = iCost 20067 } else if nFrom == 0 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 20068 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = iCost 20069 } else if nFrom == 1 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 20070 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = iCost 20071 } else { 20072 var pCost uintptr 20073 var nExtra int32 = nFrom + nTo - 4 20074 if nExtra < 0 { 20075 nExtra = 0 20076 } 20077 pCost = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Cost{}))+uint64(nExtra)) 20078 if pCost == uintptr(0) { 20079 rc = SQLITE_NOMEM 20080 break 20081 } 20082 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnFrom = u8(nFrom) 20083 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnTo = u8(nTo) 20084 (*EditDist3Cost)(unsafe.Pointer(pCost)).FiCost = u16(iCost) 20085 libc.Xmemcpy(tls, pCost+12, zFrom, uint64(nFrom)) 20086 libc.Xmemcpy(tls, pCost+12+uintptr(nFrom), zTo, uint64(nTo)) 20087 (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 20088 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = pCost 20089 } 20090 } 20091 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 20092 if rc == SQLITE_OK { 20093 rc = rc2 20094 } 20095 if rc == SQLITE_OK { 20096 var iLang int32 20097 for iLang = 0; iLang < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; iLang++ { 20098 (*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) 20099 } 20100 } 20101 return rc 20102 } 20103 20104 func utf8Len(tls *libc.TLS, c uint8, N int32) int32 { 20105 var len int32 = 1 20106 if int32(c) > 0x7f { 20107 if int32(c)&0xe0 == 0xc0 { 20108 len = 2 20109 } else if int32(c)&0xf0 == 0xe0 { 20110 len = 3 20111 } else { 20112 len = 4 20113 } 20114 } 20115 if len > N { 20116 len = N 20117 } 20118 return len 20119 } 20120 20121 func matchTo(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 20122 if int32(*(*int8)(unsafe.Pointer(p + 12 + uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)))) != int32(*(*int8)(unsafe.Pointer(z))) { 20123 return 0 20124 } 20125 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n { 20126 return 0 20127 } 20128 if libc.Xstrncmp(tls, p+12+uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)) != 0 { 20129 return 0 20130 } 20131 return 1 20132 } 20133 20134 func matchFrom(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 20135 if (*EditDist3Cost)(unsafe.Pointer(p)).FnFrom != 0 { 20136 if int32(*(*int8)(unsafe.Pointer(p + 12))) != int32(*(*int8)(unsafe.Pointer(z))) { 20137 return 0 20138 } 20139 if libc.Xstrncmp(tls, p+12, z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)) != 0 { 20140 return 0 20141 } 20142 } 20143 return 1 20144 } 20145 20146 func matchFromTo(tls *libc.TLS, pStr uintptr, n1 int32, z2 uintptr, n2 int32) int32 { 20147 var b1 int32 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n1)*32)).FnByte 20148 if b1 > n2 { 20149 return 0 20150 } 20151 20152 if int32(*(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n1)))) != int32(*(*int8)(unsafe.Pointer(z2))) { 20153 return 0 20154 } 20155 if libc.Xstrncmp(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz+uintptr(n1), z2, uint64(b1)) != 0 { 20156 return 0 20157 } 20158 return 1 20159 } 20160 20161 func editDist3FromStringDelete(tls *libc.TLS, p uintptr) { 20162 var i int32 20163 if p != 0 { 20164 for i = 0; i < (*EditDist3FromString)(unsafe.Pointer(p)).Fn; i++ { 20165 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapDel) 20166 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapSubst) 20167 } 20168 sqlite3.Xsqlite3_free(tls, p) 20169 } 20170 } 20171 20172 func editDist3FromStringNew(tls *libc.TLS, pLang uintptr, z uintptr, n int32) uintptr { 20173 var pStr uintptr 20174 var p uintptr 20175 var i int32 20176 20177 if z == uintptr(0) { 20178 return uintptr(0) 20179 } 20180 if n < 0 { 20181 n = int32(libc.Xstrlen(tls, z)) 20182 } 20183 pStr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3FromString{}))+uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)+uint64(n)+uint64(1)) 20184 if pStr == uintptr(0) { 20185 return uintptr(0) 20186 } 20187 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa = pStr + 1*24 20188 libc.Xmemset(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa, 0, uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)) 20189 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn = n 20190 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n)*32 20191 libc.Xmemcpy(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz, z, uint64(n+1)) 20192 if n != 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(n-1)))) == '*' { 20193 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 1 20194 n-- 20195 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn-- 20196 *(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n))) = int8(0) 20197 } else { 20198 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 0 20199 } 20200 20201 for i = 0; i < n; i++ { 20202 var pFrom uintptr = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(i)*32 20203 libc.Xmemset(tls, pFrom, 0, uint64(unsafe.Sizeof(EditDist3From{}))) 20204 (*EditDist3From)(unsafe.Pointer(pFrom)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))), n-i) 20205 for p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost; p != 0; p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext { 20206 var apNew uintptr 20207 if i+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > n { 20208 continue 20209 } 20210 if matchFrom(tls, p, z+uintptr(i), n-i) == 0 { 20211 continue 20212 } 20213 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) == 0 { 20214 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel, 20215 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnDel+1)) 20216 if apNew == uintptr(0) { 20217 break 20218 } 20219 (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel = apNew 20220 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnDel, 1))*8)) = p 20221 } else { 20222 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst, 20223 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst+1)) 20224 if apNew == uintptr(0) { 20225 break 20226 } 20227 (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst = apNew 20228 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst, 1))*8)) = p 20229 } 20230 } 20231 if p != 0 { 20232 editDist3FromStringDelete(tls, pStr) 20233 pStr = uintptr(0) 20234 break 20235 } 20236 } 20237 return pStr 20238 } 20239 20240 func updateCost(tls *libc.TLS, m uintptr, i int32, j int32, iCost int32) { 20241 var b uint32 20242 20243 b = *(*uint32)(unsafe.Pointer(m + uintptr(j)*4)) + uint32(iCost) 20244 if b < *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) { 20245 *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) = b 20246 } 20247 } 20248 20249 func editDist3Core(tls *libc.TLS, pFrom uintptr, z2 uintptr, n2 int32, pLang uintptr, pnMatch uintptr) int32 { 20250 bp := tls.Alloc(1048) 20251 defer tls.Free(1048) 20252 20253 var k int32 20254 var n int32 20255 var i1 int32 20256 var b1 int32 20257 var i2 int32 20258 var b2 int32 20259 20260 var a2 uintptr 20261 var m uintptr 20262 var pToFree uintptr 20263 var szRow int32 20264 var p uintptr 20265 var res int32 20266 var nByte sqlite3_uint64 20267 20268 var apNew uintptr 20269 var cx int32 20270 var cxp int32 20271 var cxd int32 20272 var cxu int32 20273 var rx int32 20274 var rxp int32 20275 var b int32 20276 var nExtra int32 20277 *(*EditDist3FromString)(unsafe.Pointer(bp + 1024)) = *(*EditDist3FromString)(unsafe.Pointer(pFrom)) 20278 20279 n = ((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1) * (n2 + 1) 20280 n = (n + 1) & libc.CplInt32(1) 20281 nByte = uint64(n)*uint64(unsafe.Sizeof(uint32(0))) + uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2) 20282 if !(nByte <= sqlite3_uint64(unsafe.Sizeof([256]uint32{}))) { 20283 goto __1 20284 } 20285 m = bp 20286 pToFree = uintptr(0) 20287 goto __2 20288 __1: 20289 m = libc.AssignUintptr(&pToFree, sqlite3.Xsqlite3_malloc64(tls, nByte)) 20290 if !(m == uintptr(0)) { 20291 goto __3 20292 } 20293 return -1 20294 __3: 20295 ; 20296 __2: 20297 ; 20298 a2 = m + uintptr(n)*4 20299 libc.Xmemset(tls, a2, 0, uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2)) 20300 20301 i2 = 0 20302 __4: 20303 if !(i2 < n2) { 20304 goto __6 20305 } 20306 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z2 + uintptr(i2)))), n2-i2) 20307 p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 20308 __7: 20309 if !(p != 0) { 20310 goto __9 20311 } 20312 if !(int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > 0) { 20313 goto __10 20314 } 20315 goto __9 20316 __10: 20317 ; 20318 if !(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n2) { 20319 goto __11 20320 } 20321 goto __8 20322 __11: 20323 ; 20324 if !(int32(*(*int8)(unsafe.Pointer(p + 12))) > int32(*(*int8)(unsafe.Pointer(z2 + uintptr(i2))))) { 20325 goto __12 20326 } 20327 goto __9 20328 __12: 20329 ; 20330 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) == 0) { 20331 goto __13 20332 } 20333 goto __8 20334 __13: 20335 ; 20336 (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns++ 20337 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)) 20338 if !(apNew == uintptr(0)) { 20339 goto __14 20340 } 20341 res = -1 20342 goto editDist3Abort 20343 __14: 20344 ; 20345 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FapIns = apNew 20346 *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns-1)*8)) = p 20347 goto __8 20348 __8: 20349 p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 20350 goto __7 20351 goto __9 20352 __9: 20353 ; 20354 goto __5 20355 __5: 20356 i2++ 20357 goto __4 20358 goto __6 20359 __6: 20360 ; 20361 szRow = (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1 20362 libc.Xmemset(tls, m, 0x01, uint64((n2+1)*szRow)*uint64(unsafe.Sizeof(uint32(0)))) 20363 *(*uint32)(unsafe.Pointer(m)) = uint32(0) 20364 20365 i1 = 0 20366 __15: 20367 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 20368 goto __17 20369 } 20370 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 20371 updateCost(tls, m, i1+b1, i1, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 20372 k = 0 20373 __18: 20374 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 20375 goto __20 20376 } 20377 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 20378 updateCost(tls, m, i1+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), i1, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20379 goto __19 20380 __19: 20381 k++ 20382 goto __18 20383 goto __20 20384 __20: 20385 ; 20386 goto __16 20387 __16: 20388 i1 = i1 + b1 20389 goto __15 20390 goto __17 20391 __17: 20392 ; 20393 i2 = 0 20394 __21: 20395 if !(i2 < n2) { 20396 goto __23 20397 } 20398 b2 = (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte 20399 rx = szRow * (i2 + b2) 20400 rxp = szRow * i2 20401 updateCost(tls, m, rx, rxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20402 k = 0 20403 __24: 20404 if !(k < (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns) { 20405 goto __26 20406 } 20407 p = *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr(k)*8)) 20408 updateCost(tls, m, szRow*(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)), rxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20409 goto __25 20410 __25: 20411 k++ 20412 goto __24 20413 goto __26 20414 __26: 20415 ; 20416 i1 = 0 20417 __27: 20418 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 20419 goto __29 20420 } 20421 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 20422 cxp = rx + i1 20423 cx = cxp + b1 20424 cxd = rxp + i1 20425 cxu = cxd + b1 20426 updateCost(tls, m, cx, cxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 20427 k = 0 20428 __30: 20429 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 20430 goto __32 20431 } 20432 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 20433 updateCost(tls, m, cxp+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), cxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20434 goto __31 20435 __31: 20436 k++ 20437 goto __30 20438 goto __32 20439 __32: 20440 ; 20441 updateCost(tls, m, cx, cxu, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20442 if !(matchFromTo(tls, bp+1024, i1, z2+uintptr(i2), n2-i2) != 0) { 20443 goto __33 20444 } 20445 updateCost(tls, m, cx, cxd, 0) 20446 __33: 20447 ; 20448 updateCost(tls, m, cx, cxd, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost) 20449 k = 0 20450 __34: 20451 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnSubst) { 20452 goto __36 20453 } 20454 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapSubst + uintptr(k)*8)) 20455 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) != 0) { 20456 goto __37 20457 } 20458 updateCost(tls, m, cxd+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)+szRow*int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo), cxd, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20459 __37: 20460 ; 20461 goto __35 20462 __35: 20463 k++ 20464 goto __34 20465 goto __36 20466 __36: 20467 ; 20468 goto __28 20469 __28: 20470 i1 = i1 + b1 20471 goto __27 20472 goto __29 20473 __29: 20474 ; 20475 goto __22 20476 __22: 20477 i2 = i2 + b2 20478 goto __21 20479 goto __23 20480 __23: 20481 ; 20482 res = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*(n2+1)-1)*4))) 20483 n = n2 20484 if !((*EditDist3FromString)(unsafe.Pointer(bp+1024)).FisPrefix != 0) { 20485 goto __38 20486 } 20487 i2 = 1 20488 __39: 20489 if !(i2 <= n2) { 20490 goto __41 20491 } 20492 b = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*i2-1)*4))) 20493 if !(b <= res) { 20494 goto __42 20495 } 20496 res = b 20497 n = i2 - 1 20498 __42: 20499 ; 20500 goto __40 20501 __40: 20502 i2++ 20503 goto __39 20504 goto __41 20505 __41: 20506 ; 20507 __38: 20508 ; 20509 if !(pnMatch != 0) { 20510 goto __43 20511 } 20512 nExtra = 0 20513 k = 0 20514 __44: 20515 if !(k < n) { 20516 goto __46 20517 } 20518 if !(int32(*(*int8)(unsafe.Pointer(z2 + uintptr(k))))&0xc0 == 0x80) { 20519 goto __47 20520 } 20521 nExtra++ 20522 __47: 20523 ; 20524 goto __45 20525 __45: 20526 k++ 20527 goto __44 20528 goto __46 20529 __46: 20530 ; 20531 *(*int32)(unsafe.Pointer(pnMatch)) = n - nExtra 20532 __43: 20533 ; 20534 editDist3Abort: 20535 i2 = 0 20536 __48: 20537 if !(i2 < n2) { 20538 goto __50 20539 } 20540 sqlite3.Xsqlite3_free(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns) 20541 goto __49 20542 __49: 20543 i2++ 20544 goto __48 20545 goto __50 20546 __50: 20547 ; 20548 sqlite3.Xsqlite3_free(tls, pToFree) 20549 return res 20550 } 20551 20552 func editDist3FindLang(tls *libc.TLS, pConfig uintptr, iLang int32) uintptr { 20553 var i int32 20554 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(pConfig)).FnLang; i++ { 20555 if (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(pConfig)).Fa+uintptr(i)*24)).FiLang == iLang { 20556 return (*EditDist3Config)(unsafe.Pointer(pConfig)).Fa + uintptr(i)*24 20557 } 20558 } 20559 return uintptr(unsafe.Pointer(&editDist3Lang)) 20560 } 20561 20562 func editDist3SqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20563 var pConfig uintptr = sqlite3.Xsqlite3_user_data(tls, context) 20564 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 20565 var rc int32 20566 if argc == 1 { 20567 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20568 rc = editDist3ConfigLoad(tls, pConfig, db, zTable) 20569 if rc != 0 { 20570 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 20571 } 20572 } else { 20573 var zA uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20574 var zB uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20575 var nA int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20576 var nB int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20577 var iLang int32 20578 if argc == 3 { 20579 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 20580 } else { 20581 iLang = 0 20582 } 20583 var pLang uintptr = editDist3FindLang(tls, pConfig, iLang) 20584 var pFrom uintptr 20585 var dist int32 20586 20587 pFrom = editDist3FromStringNew(tls, pLang, zA, nA) 20588 if pFrom == uintptr(0) { 20589 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20590 return 20591 } 20592 dist = editDist3Core(tls, pFrom, zB, nB, pLang, uintptr(0)) 20593 editDist3FromStringDelete(tls, pFrom) 20594 if dist == -1 { 20595 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20596 } else { 20597 sqlite3.Xsqlite3_result_int(tls, context, dist) 20598 } 20599 } 20600 } 20601 20602 func editDist3Install(tls *libc.TLS, db uintptr) int32 { 20603 var rc int32 20604 var pConfig uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 20605 if pConfig == uintptr(0) { 20606 return SQLITE_NOMEM 20607 } 20608 libc.Xmemset(tls, pConfig, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 20609 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20610 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20611 *(*uintptr)(unsafe.Pointer(&struct { 20612 f func(*libc.TLS, uintptr, int32, uintptr) 20613 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20614 if rc == SQLITE_OK { 20615 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20616 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20617 *(*uintptr)(unsafe.Pointer(&struct { 20618 f func(*libc.TLS, uintptr, int32, uintptr) 20619 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20620 } 20621 if rc == SQLITE_OK { 20622 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20623 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20624 *(*uintptr)(unsafe.Pointer(&struct { 20625 f func(*libc.TLS, uintptr, int32, uintptr) 20626 }{editDist3SqlFunc})), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{editDist3ConfigDelete}))) 20627 } else { 20628 sqlite3.Xsqlite3_free(tls, pConfig) 20629 } 20630 return rc 20631 } 20632 20633 var sqlite3Utf8Trans1 = [64]uint8{ 20634 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20635 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20636 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 20637 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 20638 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20639 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20640 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20641 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 20642 } 20643 20644 func utf8Read(tls *libc.TLS, z uintptr, n int32, pSize uintptr) int32 { 20645 var c int32 20646 var i int32 20647 20648 if 0 != 0 { 20649 c = libc.AssignInt32(&i, 0) 20650 } else { 20651 c = int32(*(*uint8)(unsafe.Pointer(z))) 20652 i = 1 20653 if c >= 0xc0 { 20654 c = int32(sqlite3Utf8Trans1[c-0xc0]) 20655 for i < n && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))&0xc0 == 0x80 { 20656 c = c<<6 + 0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1))))) 20657 } 20658 } 20659 } 20660 *(*int32)(unsafe.Pointer(pSize)) = i 20661 return c 20662 } 20663 20664 func utf8Charlen(tls *libc.TLS, zIn uintptr, nIn int32) int32 { 20665 bp := tls.Alloc(4) 20666 defer tls.Free(4) 20667 20668 var i int32 20669 var nChar int32 = 0 20670 for i = 0; i < nIn; nChar++ { 20671 utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 20672 i = i + *(*int32)(unsafe.Pointer(bp)) 20673 } 20674 return nChar 20675 } 20676 20677 type Transliteration1 = struct { 20678 FcFrom uint16 20679 FcTo0 uint8 20680 FcTo1 uint8 20681 FcTo2 uint8 20682 FcTo3 uint8 20683 } 20684 20685 type Transliteration = Transliteration1 20686 20687 var translit = [389]Transliteration{ 20688 {FcFrom: uint16(0x00A0), FcTo0: uint8(0x20)}, 20689 {FcFrom: uint16(0x00B5), FcTo0: uint8(0x75)}, 20690 {FcFrom: uint16(0x00C0), FcTo0: uint8(0x41)}, 20691 {FcFrom: uint16(0x00C1), FcTo0: uint8(0x41)}, 20692 {FcFrom: uint16(0x00C2), FcTo0: uint8(0x41)}, 20693 {FcFrom: uint16(0x00C3), FcTo0: uint8(0x41)}, 20694 {FcFrom: uint16(0x00C4), FcTo0: uint8(0x41), FcTo1: uint8(0x65)}, 20695 {FcFrom: uint16(0x00C5), FcTo0: uint8(0x41), FcTo1: uint8(0x61)}, 20696 {FcFrom: uint16(0x00C6), FcTo0: uint8(0x41), FcTo1: uint8(0x45)}, 20697 {FcFrom: uint16(0x00C7), FcTo0: uint8(0x43)}, 20698 {FcFrom: uint16(0x00C8), FcTo0: uint8(0x45)}, 20699 {FcFrom: uint16(0x00C9), FcTo0: uint8(0x45)}, 20700 {FcFrom: uint16(0x00CA), FcTo0: uint8(0x45)}, 20701 {FcFrom: uint16(0x00CB), FcTo0: uint8(0x45)}, 20702 {FcFrom: uint16(0x00CC), FcTo0: uint8(0x49)}, 20703 {FcFrom: uint16(0x00CD), FcTo0: uint8(0x49)}, 20704 {FcFrom: uint16(0x00CE), FcTo0: uint8(0x49)}, 20705 {FcFrom: uint16(0x00CF), FcTo0: uint8(0x49)}, 20706 {FcFrom: uint16(0x00D0), FcTo0: uint8(0x44)}, 20707 {FcFrom: uint16(0x00D1), FcTo0: uint8(0x4E)}, 20708 {FcFrom: uint16(0x00D2), FcTo0: uint8(0x4F)}, 20709 {FcFrom: uint16(0x00D3), FcTo0: uint8(0x4F)}, 20710 {FcFrom: uint16(0x00D4), FcTo0: uint8(0x4F)}, 20711 {FcFrom: uint16(0x00D5), FcTo0: uint8(0x4F)}, 20712 {FcFrom: uint16(0x00D6), FcTo0: uint8(0x4F), FcTo1: uint8(0x65)}, 20713 {FcFrom: uint16(0x00D7), FcTo0: uint8(0x78)}, 20714 {FcFrom: uint16(0x00D8), FcTo0: uint8(0x4F)}, 20715 {FcFrom: uint16(0x00D9), FcTo0: uint8(0x55)}, 20716 {FcFrom: uint16(0x00DA), FcTo0: uint8(0x55)}, 20717 {FcFrom: uint16(0x00DB), FcTo0: uint8(0x55)}, 20718 {FcFrom: uint16(0x00DC), FcTo0: uint8(0x55), FcTo1: uint8(0x65)}, 20719 {FcFrom: uint16(0x00DD), FcTo0: uint8(0x59)}, 20720 {FcFrom: uint16(0x00DE), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20721 {FcFrom: uint16(0x00DF), FcTo0: uint8(0x73), FcTo1: uint8(0x73)}, 20722 {FcFrom: uint16(0x00E0), FcTo0: uint8(0x61)}, 20723 {FcFrom: uint16(0x00E1), FcTo0: uint8(0x61)}, 20724 {FcFrom: uint16(0x00E2), FcTo0: uint8(0x61)}, 20725 {FcFrom: uint16(0x00E3), FcTo0: uint8(0x61)}, 20726 {FcFrom: uint16(0x00E4), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20727 {FcFrom: uint16(0x00E5), FcTo0: uint8(0x61), FcTo1: uint8(0x61)}, 20728 {FcFrom: uint16(0x00E6), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20729 {FcFrom: uint16(0x00E7), FcTo0: uint8(0x63)}, 20730 {FcFrom: uint16(0x00E8), FcTo0: uint8(0x65)}, 20731 {FcFrom: uint16(0x00E9), FcTo0: uint8(0x65)}, 20732 {FcFrom: uint16(0x00EA), FcTo0: uint8(0x65)}, 20733 {FcFrom: uint16(0x00EB), FcTo0: uint8(0x65)}, 20734 {FcFrom: uint16(0x00EC), FcTo0: uint8(0x69)}, 20735 {FcFrom: uint16(0x00ED), FcTo0: uint8(0x69)}, 20736 {FcFrom: uint16(0x00EE), FcTo0: uint8(0x69)}, 20737 {FcFrom: uint16(0x00EF), FcTo0: uint8(0x69)}, 20738 {FcFrom: uint16(0x00F0), FcTo0: uint8(0x64)}, 20739 {FcFrom: uint16(0x00F1), FcTo0: uint8(0x6E)}, 20740 {FcFrom: uint16(0x00F2), FcTo0: uint8(0x6F)}, 20741 {FcFrom: uint16(0x00F3), FcTo0: uint8(0x6F)}, 20742 {FcFrom: uint16(0x00F4), FcTo0: uint8(0x6F)}, 20743 {FcFrom: uint16(0x00F5), FcTo0: uint8(0x6F)}, 20744 {FcFrom: uint16(0x00F6), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20745 {FcFrom: uint16(0x00F7), FcTo0: uint8(0x3A)}, 20746 {FcFrom: uint16(0x00F8), FcTo0: uint8(0x6F)}, 20747 {FcFrom: uint16(0x00F9), FcTo0: uint8(0x75)}, 20748 {FcFrom: uint16(0x00FA), FcTo0: uint8(0x75)}, 20749 {FcFrom: uint16(0x00FB), FcTo0: uint8(0x75)}, 20750 {FcFrom: uint16(0x00FC), FcTo0: uint8(0x75), FcTo1: uint8(0x65)}, 20751 {FcFrom: uint16(0x00FD), FcTo0: uint8(0x79)}, 20752 {FcFrom: uint16(0x00FE), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 20753 {FcFrom: uint16(0x00FF), FcTo0: uint8(0x79)}, 20754 {FcFrom: uint16(0x0100), FcTo0: uint8(0x41)}, 20755 {FcFrom: uint16(0x0101), FcTo0: uint8(0x61)}, 20756 {FcFrom: uint16(0x0102), FcTo0: uint8(0x41)}, 20757 {FcFrom: uint16(0x0103), FcTo0: uint8(0x61)}, 20758 {FcFrom: uint16(0x0104), FcTo0: uint8(0x41)}, 20759 {FcFrom: uint16(0x0105), FcTo0: uint8(0x61)}, 20760 {FcFrom: uint16(0x0106), FcTo0: uint8(0x43)}, 20761 {FcFrom: uint16(0x0107), FcTo0: uint8(0x63)}, 20762 {FcFrom: uint16(0x0108), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20763 {FcFrom: uint16(0x0109), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20764 {FcFrom: uint16(0x010A), FcTo0: uint8(0x43)}, 20765 {FcFrom: uint16(0x010B), FcTo0: uint8(0x63)}, 20766 {FcFrom: uint16(0x010C), FcTo0: uint8(0x43)}, 20767 {FcFrom: uint16(0x010D), FcTo0: uint8(0x63)}, 20768 {FcFrom: uint16(0x010E), FcTo0: uint8(0x44)}, 20769 {FcFrom: uint16(0x010F), FcTo0: uint8(0x64)}, 20770 {FcFrom: uint16(0x0110), FcTo0: uint8(0x44)}, 20771 {FcFrom: uint16(0x0111), FcTo0: uint8(0x64)}, 20772 {FcFrom: uint16(0x0112), FcTo0: uint8(0x45)}, 20773 {FcFrom: uint16(0x0113), FcTo0: uint8(0x65)}, 20774 {FcFrom: uint16(0x0114), FcTo0: uint8(0x45)}, 20775 {FcFrom: uint16(0x0115), FcTo0: uint8(0x65)}, 20776 {FcFrom: uint16(0x0116), FcTo0: uint8(0x45)}, 20777 {FcFrom: uint16(0x0117), FcTo0: uint8(0x65)}, 20778 {FcFrom: uint16(0x0118), FcTo0: uint8(0x45)}, 20779 {FcFrom: uint16(0x0119), FcTo0: uint8(0x65)}, 20780 {FcFrom: uint16(0x011A), FcTo0: uint8(0x45)}, 20781 {FcFrom: uint16(0x011B), FcTo0: uint8(0x65)}, 20782 {FcFrom: uint16(0x011C), FcTo0: uint8(0x47), FcTo1: uint8(0x68)}, 20783 {FcFrom: uint16(0x011D), FcTo0: uint8(0x67), FcTo1: uint8(0x68)}, 20784 {FcFrom: uint16(0x011E), FcTo0: uint8(0x47)}, 20785 {FcFrom: uint16(0x011F), FcTo0: uint8(0x67)}, 20786 {FcFrom: uint16(0x0120), FcTo0: uint8(0x47)}, 20787 {FcFrom: uint16(0x0121), FcTo0: uint8(0x67)}, 20788 {FcFrom: uint16(0x0122), FcTo0: uint8(0x47)}, 20789 {FcFrom: uint16(0x0123), FcTo0: uint8(0x67)}, 20790 {FcFrom: uint16(0x0124), FcTo0: uint8(0x48), FcTo1: uint8(0x68)}, 20791 {FcFrom: uint16(0x0125), FcTo0: uint8(0x68), FcTo1: uint8(0x68)}, 20792 {FcFrom: uint16(0x0126), FcTo0: uint8(0x48)}, 20793 {FcFrom: uint16(0x0127), FcTo0: uint8(0x68)}, 20794 {FcFrom: uint16(0x0128), FcTo0: uint8(0x49)}, 20795 {FcFrom: uint16(0x0129), FcTo0: uint8(0x69)}, 20796 {FcFrom: uint16(0x012A), FcTo0: uint8(0x49)}, 20797 {FcFrom: uint16(0x012B), FcTo0: uint8(0x69)}, 20798 {FcFrom: uint16(0x012C), FcTo0: uint8(0x49)}, 20799 {FcFrom: uint16(0x012D), FcTo0: uint8(0x69)}, 20800 {FcFrom: uint16(0x012E), FcTo0: uint8(0x49)}, 20801 {FcFrom: uint16(0x012F), FcTo0: uint8(0x69)}, 20802 {FcFrom: uint16(0x0130), FcTo0: uint8(0x49)}, 20803 {FcFrom: uint16(0x0131), FcTo0: uint8(0x69)}, 20804 {FcFrom: uint16(0x0132), FcTo0: uint8(0x49), FcTo1: uint8(0x4A)}, 20805 {FcFrom: uint16(0x0133), FcTo0: uint8(0x69), FcTo1: uint8(0x6A)}, 20806 {FcFrom: uint16(0x0134), FcTo0: uint8(0x4A), FcTo1: uint8(0x68)}, 20807 {FcFrom: uint16(0x0135), FcTo0: uint8(0x6A), FcTo1: uint8(0x68)}, 20808 {FcFrom: uint16(0x0136), FcTo0: uint8(0x4B)}, 20809 {FcFrom: uint16(0x0137), FcTo0: uint8(0x6B)}, 20810 {FcFrom: uint16(0x0138), FcTo0: uint8(0x6B)}, 20811 {FcFrom: uint16(0x0139), FcTo0: uint8(0x4C)}, 20812 {FcFrom: uint16(0x013A), FcTo0: uint8(0x6C)}, 20813 {FcFrom: uint16(0x013B), FcTo0: uint8(0x4C)}, 20814 {FcFrom: uint16(0x013C), FcTo0: uint8(0x6C)}, 20815 {FcFrom: uint16(0x013D), FcTo0: uint8(0x4C)}, 20816 {FcFrom: uint16(0x013E), FcTo0: uint8(0x6C)}, 20817 {FcFrom: uint16(0x013F), FcTo0: uint8(0x4C), FcTo1: uint8(0x2E)}, 20818 {FcFrom: uint16(0x0140), FcTo0: uint8(0x6C), FcTo1: uint8(0x2E)}, 20819 {FcFrom: uint16(0x0141), FcTo0: uint8(0x4C)}, 20820 {FcFrom: uint16(0x0142), FcTo0: uint8(0x6C)}, 20821 {FcFrom: uint16(0x0143), FcTo0: uint8(0x4E)}, 20822 {FcFrom: uint16(0x0144), FcTo0: uint8(0x6E)}, 20823 {FcFrom: uint16(0x0145), FcTo0: uint8(0x4E)}, 20824 {FcFrom: uint16(0x0146), FcTo0: uint8(0x6E)}, 20825 {FcFrom: uint16(0x0147), FcTo0: uint8(0x4E)}, 20826 {FcFrom: uint16(0x0148), FcTo0: uint8(0x6E)}, 20827 {FcFrom: uint16(0x0149), FcTo0: uint8(0x27), FcTo1: uint8(0x6E)}, 20828 {FcFrom: uint16(0x014A), FcTo0: uint8(0x4E), FcTo1: uint8(0x47)}, 20829 {FcFrom: uint16(0x014B), FcTo0: uint8(0x6E), FcTo1: uint8(0x67)}, 20830 {FcFrom: uint16(0x014C), FcTo0: uint8(0x4F)}, 20831 {FcFrom: uint16(0x014D), FcTo0: uint8(0x6F)}, 20832 {FcFrom: uint16(0x014E), FcTo0: uint8(0x4F)}, 20833 {FcFrom: uint16(0x014F), FcTo0: uint8(0x6F)}, 20834 {FcFrom: uint16(0x0150), FcTo0: uint8(0x4F)}, 20835 {FcFrom: uint16(0x0151), FcTo0: uint8(0x6F)}, 20836 {FcFrom: uint16(0x0152), FcTo0: uint8(0x4F), FcTo1: uint8(0x45)}, 20837 {FcFrom: uint16(0x0153), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20838 {FcFrom: uint16(0x0154), FcTo0: uint8(0x52)}, 20839 {FcFrom: uint16(0x0155), FcTo0: uint8(0x72)}, 20840 {FcFrom: uint16(0x0156), FcTo0: uint8(0x52)}, 20841 {FcFrom: uint16(0x0157), FcTo0: uint8(0x72)}, 20842 {FcFrom: uint16(0x0158), FcTo0: uint8(0x52)}, 20843 {FcFrom: uint16(0x0159), FcTo0: uint8(0x72)}, 20844 {FcFrom: uint16(0x015A), FcTo0: uint8(0x53)}, 20845 {FcFrom: uint16(0x015B), FcTo0: uint8(0x73)}, 20846 {FcFrom: uint16(0x015C), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 20847 {FcFrom: uint16(0x015D), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 20848 {FcFrom: uint16(0x015E), FcTo0: uint8(0x53)}, 20849 {FcFrom: uint16(0x015F), FcTo0: uint8(0x73)}, 20850 {FcFrom: uint16(0x0160), FcTo0: uint8(0x53)}, 20851 {FcFrom: uint16(0x0161), FcTo0: uint8(0x73)}, 20852 {FcFrom: uint16(0x0162), FcTo0: uint8(0x54)}, 20853 {FcFrom: uint16(0x0163), FcTo0: uint8(0x74)}, 20854 {FcFrom: uint16(0x0164), FcTo0: uint8(0x54)}, 20855 {FcFrom: uint16(0x0165), FcTo0: uint8(0x74)}, 20856 {FcFrom: uint16(0x0166), FcTo0: uint8(0x54)}, 20857 {FcFrom: uint16(0x0167), FcTo0: uint8(0x74)}, 20858 {FcFrom: uint16(0x0168), FcTo0: uint8(0x55)}, 20859 {FcFrom: uint16(0x0169), FcTo0: uint8(0x75)}, 20860 {FcFrom: uint16(0x016A), FcTo0: uint8(0x55)}, 20861 {FcFrom: uint16(0x016B), FcTo0: uint8(0x75)}, 20862 {FcFrom: uint16(0x016C), FcTo0: uint8(0x55)}, 20863 {FcFrom: uint16(0x016D), FcTo0: uint8(0x75)}, 20864 {FcFrom: uint16(0x016E), FcTo0: uint8(0x55)}, 20865 {FcFrom: uint16(0x016F), FcTo0: uint8(0x75)}, 20866 {FcFrom: uint16(0x0170), FcTo0: uint8(0x55)}, 20867 {FcFrom: uint16(0x0171), FcTo0: uint8(0x75)}, 20868 {FcFrom: uint16(0x0172), FcTo0: uint8(0x55)}, 20869 {FcFrom: uint16(0x0173), FcTo0: uint8(0x75)}, 20870 {FcFrom: uint16(0x0174), FcTo0: uint8(0x57)}, 20871 {FcFrom: uint16(0x0175), FcTo0: uint8(0x77)}, 20872 {FcFrom: uint16(0x0176), FcTo0: uint8(0x59)}, 20873 {FcFrom: uint16(0x0177), FcTo0: uint8(0x79)}, 20874 {FcFrom: uint16(0x0178), FcTo0: uint8(0x59)}, 20875 {FcFrom: uint16(0x0179), FcTo0: uint8(0x5A)}, 20876 {FcFrom: uint16(0x017A), FcTo0: uint8(0x7A)}, 20877 {FcFrom: uint16(0x017B), FcTo0: uint8(0x5A)}, 20878 {FcFrom: uint16(0x017C), FcTo0: uint8(0x7A)}, 20879 {FcFrom: uint16(0x017D), FcTo0: uint8(0x5A)}, 20880 {FcFrom: uint16(0x017E), FcTo0: uint8(0x7A)}, 20881 {FcFrom: uint16(0x017F), FcTo0: uint8(0x73)}, 20882 {FcFrom: uint16(0x0192), FcTo0: uint8(0x66)}, 20883 {FcFrom: uint16(0x0218), FcTo0: uint8(0x53)}, 20884 {FcFrom: uint16(0x0219), FcTo0: uint8(0x73)}, 20885 {FcFrom: uint16(0x021A), FcTo0: uint8(0x54)}, 20886 {FcFrom: uint16(0x021B), FcTo0: uint8(0x74)}, 20887 {FcFrom: uint16(0x0386), FcTo0: uint8(0x41)}, 20888 {FcFrom: uint16(0x0388), FcTo0: uint8(0x45)}, 20889 {FcFrom: uint16(0x0389), FcTo0: uint8(0x49)}, 20890 {FcFrom: uint16(0x038A), FcTo0: uint8(0x49)}, 20891 {FcFrom: uint16(0x038C), FcTo0: uint8(0x4f)}, 20892 {FcFrom: uint16(0x038E), FcTo0: uint8(0x59)}, 20893 {FcFrom: uint16(0x038F), FcTo0: uint8(0x4f)}, 20894 {FcFrom: uint16(0x0390), FcTo0: uint8(0x69)}, 20895 {FcFrom: uint16(0x0391), FcTo0: uint8(0x41)}, 20896 {FcFrom: uint16(0x0392), FcTo0: uint8(0x42)}, 20897 {FcFrom: uint16(0x0393), FcTo0: uint8(0x47)}, 20898 {FcFrom: uint16(0x0394), FcTo0: uint8(0x44)}, 20899 {FcFrom: uint16(0x0395), FcTo0: uint8(0x45)}, 20900 {FcFrom: uint16(0x0396), FcTo0: uint8(0x5a)}, 20901 {FcFrom: uint16(0x0397), FcTo0: uint8(0x49)}, 20902 {FcFrom: uint16(0x0398), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20903 {FcFrom: uint16(0x0399), FcTo0: uint8(0x49)}, 20904 {FcFrom: uint16(0x039A), FcTo0: uint8(0x4b)}, 20905 {FcFrom: uint16(0x039B), FcTo0: uint8(0x4c)}, 20906 {FcFrom: uint16(0x039C), FcTo0: uint8(0x4d)}, 20907 {FcFrom: uint16(0x039D), FcTo0: uint8(0x4e)}, 20908 {FcFrom: uint16(0x039E), FcTo0: uint8(0x58)}, 20909 {FcFrom: uint16(0x039F), FcTo0: uint8(0x4f)}, 20910 {FcFrom: uint16(0x03A0), FcTo0: uint8(0x50)}, 20911 {FcFrom: uint16(0x03A1), FcTo0: uint8(0x52)}, 20912 {FcFrom: uint16(0x03A3), FcTo0: uint8(0x53)}, 20913 {FcFrom: uint16(0x03A4), FcTo0: uint8(0x54)}, 20914 {FcFrom: uint16(0x03A5), FcTo0: uint8(0x59)}, 20915 {FcFrom: uint16(0x03A6), FcTo0: uint8(0x46)}, 20916 {FcFrom: uint16(0x03A7), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20917 {FcFrom: uint16(0x03A8), FcTo0: uint8(0x50), FcTo1: uint8(0x73)}, 20918 {FcFrom: uint16(0x03A9), FcTo0: uint8(0x4f)}, 20919 {FcFrom: uint16(0x03AA), FcTo0: uint8(0x49)}, 20920 {FcFrom: uint16(0x03AB), FcTo0: uint8(0x59)}, 20921 {FcFrom: uint16(0x03AC), FcTo0: uint8(0x61)}, 20922 {FcFrom: uint16(0x03AD), FcTo0: uint8(0x65)}, 20923 {FcFrom: uint16(0x03AE), FcTo0: uint8(0x69)}, 20924 {FcFrom: uint16(0x03AF), FcTo0: uint8(0x69)}, 20925 {FcFrom: uint16(0x03B1), FcTo0: uint8(0x61)}, 20926 {FcFrom: uint16(0x03B2), FcTo0: uint8(0x62)}, 20927 {FcFrom: uint16(0x03B3), FcTo0: uint8(0x67)}, 20928 {FcFrom: uint16(0x03B4), FcTo0: uint8(0x64)}, 20929 {FcFrom: uint16(0x03B5), FcTo0: uint8(0x65)}, 20930 {FcFrom: uint16(0x03B6), FcTo0: uint8(0x7a)}, 20931 {FcFrom: uint16(0x03B7), FcTo0: uint8(0x69)}, 20932 {FcFrom: uint16(0x03B8), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 20933 {FcFrom: uint16(0x03B9), FcTo0: uint8(0x69)}, 20934 {FcFrom: uint16(0x03BA), FcTo0: uint8(0x6b)}, 20935 {FcFrom: uint16(0x03BB), FcTo0: uint8(0x6c)}, 20936 {FcFrom: uint16(0x03BC), FcTo0: uint8(0x6d)}, 20937 {FcFrom: uint16(0x03BD), FcTo0: uint8(0x6e)}, 20938 {FcFrom: uint16(0x03BE), FcTo0: uint8(0x78)}, 20939 {FcFrom: uint16(0x03BF), FcTo0: uint8(0x6f)}, 20940 {FcFrom: uint16(0x03C0), FcTo0: uint8(0x70)}, 20941 {FcFrom: uint16(0x03C1), FcTo0: uint8(0x72)}, 20942 {FcFrom: uint16(0x03C3), FcTo0: uint8(0x73)}, 20943 {FcFrom: uint16(0x03C4), FcTo0: uint8(0x74)}, 20944 {FcFrom: uint16(0x03C5), FcTo0: uint8(0x79)}, 20945 {FcFrom: uint16(0x03C6), FcTo0: uint8(0x66)}, 20946 {FcFrom: uint16(0x03C7), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20947 {FcFrom: uint16(0x03C8), FcTo0: uint8(0x70), FcTo1: uint8(0x73)}, 20948 {FcFrom: uint16(0x03C9), FcTo0: uint8(0x6f)}, 20949 {FcFrom: uint16(0x03CA), FcTo0: uint8(0x69)}, 20950 {FcFrom: uint16(0x03CB), FcTo0: uint8(0x79)}, 20951 {FcFrom: uint16(0x03CC), FcTo0: uint8(0x6f)}, 20952 {FcFrom: uint16(0x03CD), FcTo0: uint8(0x79)}, 20953 {FcFrom: uint16(0x03CE), FcTo0: uint8(0x69)}, 20954 {FcFrom: uint16(0x0400), FcTo0: uint8(0x45)}, 20955 {FcFrom: uint16(0x0401), FcTo0: uint8(0x45)}, 20956 {FcFrom: uint16(0x0402), FcTo0: uint8(0x44)}, 20957 {FcFrom: uint16(0x0403), FcTo0: uint8(0x47)}, 20958 {FcFrom: uint16(0x0404), FcTo0: uint8(0x45)}, 20959 {FcFrom: uint16(0x0405), FcTo0: uint8(0x5a)}, 20960 {FcFrom: uint16(0x0406), FcTo0: uint8(0x49)}, 20961 {FcFrom: uint16(0x0407), FcTo0: uint8(0x49)}, 20962 {FcFrom: uint16(0x0408), FcTo0: uint8(0x4a)}, 20963 {FcFrom: uint16(0x0409), FcTo0: uint8(0x49)}, 20964 {FcFrom: uint16(0x040A), FcTo0: uint8(0x4e)}, 20965 {FcFrom: uint16(0x040B), FcTo0: uint8(0x44)}, 20966 {FcFrom: uint16(0x040C), FcTo0: uint8(0x4b)}, 20967 {FcFrom: uint16(0x040D), FcTo0: uint8(0x49)}, 20968 {FcFrom: uint16(0x040E), FcTo0: uint8(0x55)}, 20969 {FcFrom: uint16(0x040F), FcTo0: uint8(0x44)}, 20970 {FcFrom: uint16(0x0410), FcTo0: uint8(0x41)}, 20971 {FcFrom: uint16(0x0411), FcTo0: uint8(0x42)}, 20972 {FcFrom: uint16(0x0412), FcTo0: uint8(0x56)}, 20973 {FcFrom: uint16(0x0413), FcTo0: uint8(0x47)}, 20974 {FcFrom: uint16(0x0414), FcTo0: uint8(0x44)}, 20975 {FcFrom: uint16(0x0415), FcTo0: uint8(0x45)}, 20976 {FcFrom: uint16(0x0416), FcTo0: uint8(0x5a), FcTo1: uint8(0x68)}, 20977 {FcFrom: uint16(0x0417), FcTo0: uint8(0x5a)}, 20978 {FcFrom: uint16(0x0418), FcTo0: uint8(0x49)}, 20979 {FcFrom: uint16(0x0419), FcTo0: uint8(0x49)}, 20980 {FcFrom: uint16(0x041A), FcTo0: uint8(0x4b)}, 20981 {FcFrom: uint16(0x041B), FcTo0: uint8(0x4c)}, 20982 {FcFrom: uint16(0x041C), FcTo0: uint8(0x4d)}, 20983 {FcFrom: uint16(0x041D), FcTo0: uint8(0x4e)}, 20984 {FcFrom: uint16(0x041E), FcTo0: uint8(0x4f)}, 20985 {FcFrom: uint16(0x041F), FcTo0: uint8(0x50)}, 20986 {FcFrom: uint16(0x0420), FcTo0: uint8(0x52)}, 20987 {FcFrom: uint16(0x0421), FcTo0: uint8(0x53)}, 20988 {FcFrom: uint16(0x0422), FcTo0: uint8(0x54)}, 20989 {FcFrom: uint16(0x0423), FcTo0: uint8(0x55)}, 20990 {FcFrom: uint16(0x0424), FcTo0: uint8(0x46)}, 20991 {FcFrom: uint16(0x0425), FcTo0: uint8(0x4b), FcTo1: uint8(0x68)}, 20992 {FcFrom: uint16(0x0426), FcTo0: uint8(0x54), FcTo1: uint8(0x63)}, 20993 {FcFrom: uint16(0x0427), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20994 {FcFrom: uint16(0x0428), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 20995 {FcFrom: uint16(0x0429), FcTo0: uint8(0x53), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 20996 {FcFrom: uint16(0x042A), FcTo0: uint8(0x61)}, 20997 {FcFrom: uint16(0x042B), FcTo0: uint8(0x59)}, 20998 {FcFrom: uint16(0x042C), FcTo0: uint8(0x59)}, 20999 {FcFrom: uint16(0x042D), FcTo0: uint8(0x45)}, 21000 {FcFrom: uint16(0x042E), FcTo0: uint8(0x49), FcTo1: uint8(0x75)}, 21001 {FcFrom: uint16(0x042F), FcTo0: uint8(0x49), FcTo1: uint8(0x61)}, 21002 {FcFrom: uint16(0x0430), FcTo0: uint8(0x61)}, 21003 {FcFrom: uint16(0x0431), FcTo0: uint8(0x62)}, 21004 {FcFrom: uint16(0x0432), FcTo0: uint8(0x76)}, 21005 {FcFrom: uint16(0x0433), FcTo0: uint8(0x67)}, 21006 {FcFrom: uint16(0x0434), FcTo0: uint8(0x64)}, 21007 {FcFrom: uint16(0x0435), FcTo0: uint8(0x65)}, 21008 {FcFrom: uint16(0x0436), FcTo0: uint8(0x7a), FcTo1: uint8(0x68)}, 21009 {FcFrom: uint16(0x0437), FcTo0: uint8(0x7a)}, 21010 {FcFrom: uint16(0x0438), FcTo0: uint8(0x69)}, 21011 {FcFrom: uint16(0x0439), FcTo0: uint8(0x69)}, 21012 {FcFrom: uint16(0x043A), FcTo0: uint8(0x6b)}, 21013 {FcFrom: uint16(0x043B), FcTo0: uint8(0x6c)}, 21014 {FcFrom: uint16(0x043C), FcTo0: uint8(0x6d)}, 21015 {FcFrom: uint16(0x043D), FcTo0: uint8(0x6e)}, 21016 {FcFrom: uint16(0x043E), FcTo0: uint8(0x6f)}, 21017 {FcFrom: uint16(0x043F), FcTo0: uint8(0x70)}, 21018 {FcFrom: uint16(0x0440), FcTo0: uint8(0x72)}, 21019 {FcFrom: uint16(0x0441), FcTo0: uint8(0x73)}, 21020 {FcFrom: uint16(0x0442), FcTo0: uint8(0x74)}, 21021 {FcFrom: uint16(0x0443), FcTo0: uint8(0x75)}, 21022 {FcFrom: uint16(0x0444), FcTo0: uint8(0x66)}, 21023 {FcFrom: uint16(0x0445), FcTo0: uint8(0x6b), FcTo1: uint8(0x68)}, 21024 {FcFrom: uint16(0x0446), FcTo0: uint8(0x74), FcTo1: uint8(0x63)}, 21025 {FcFrom: uint16(0x0447), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 21026 {FcFrom: uint16(0x0448), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 21027 {FcFrom: uint16(0x0449), FcTo0: uint8(0x73), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 21028 {FcFrom: uint16(0x044A), FcTo0: uint8(0x61)}, 21029 {FcFrom: uint16(0x044B), FcTo0: uint8(0x79)}, 21030 {FcFrom: uint16(0x044C), FcTo0: uint8(0x79)}, 21031 {FcFrom: uint16(0x044D), FcTo0: uint8(0x65)}, 21032 {FcFrom: uint16(0x044E), FcTo0: uint8(0x69), FcTo1: uint8(0x75)}, 21033 {FcFrom: uint16(0x044F), FcTo0: uint8(0x69), FcTo1: uint8(0x61)}, 21034 {FcFrom: uint16(0x0450), FcTo0: uint8(0x65)}, 21035 {FcFrom: uint16(0x0451), FcTo0: uint8(0x65)}, 21036 {FcFrom: uint16(0x0452), FcTo0: uint8(0x64)}, 21037 {FcFrom: uint16(0x0453), FcTo0: uint8(0x67)}, 21038 {FcFrom: uint16(0x0454), FcTo0: uint8(0x65)}, 21039 {FcFrom: uint16(0x0455), FcTo0: uint8(0x7a)}, 21040 {FcFrom: uint16(0x0456), FcTo0: uint8(0x69)}, 21041 {FcFrom: uint16(0x0457), FcTo0: uint8(0x69)}, 21042 {FcFrom: uint16(0x0458), FcTo0: uint8(0x6a)}, 21043 {FcFrom: uint16(0x0459), FcTo0: uint8(0x69)}, 21044 {FcFrom: uint16(0x045A), FcTo0: uint8(0x6e)}, 21045 {FcFrom: uint16(0x045B), FcTo0: uint8(0x64)}, 21046 {FcFrom: uint16(0x045C), FcTo0: uint8(0x6b)}, 21047 {FcFrom: uint16(0x045D), FcTo0: uint8(0x69)}, 21048 {FcFrom: uint16(0x045E), FcTo0: uint8(0x75)}, 21049 {FcFrom: uint16(0x045F), FcTo0: uint8(0x64)}, 21050 {FcFrom: uint16(0x1E02), FcTo0: uint8(0x42)}, 21051 {FcFrom: uint16(0x1E03), FcTo0: uint8(0x62)}, 21052 {FcFrom: uint16(0x1E0A), FcTo0: uint8(0x44)}, 21053 {FcFrom: uint16(0x1E0B), FcTo0: uint8(0x64)}, 21054 {FcFrom: uint16(0x1E1E), FcTo0: uint8(0x46)}, 21055 {FcFrom: uint16(0x1E1F), FcTo0: uint8(0x66)}, 21056 {FcFrom: uint16(0x1E40), FcTo0: uint8(0x4D)}, 21057 {FcFrom: uint16(0x1E41), FcTo0: uint8(0x6D)}, 21058 {FcFrom: uint16(0x1E56), FcTo0: uint8(0x50)}, 21059 {FcFrom: uint16(0x1E57), FcTo0: uint8(0x70)}, 21060 {FcFrom: uint16(0x1E60), FcTo0: uint8(0x53)}, 21061 {FcFrom: uint16(0x1E61), FcTo0: uint8(0x73)}, 21062 {FcFrom: uint16(0x1E6A), FcTo0: uint8(0x54)}, 21063 {FcFrom: uint16(0x1E6B), FcTo0: uint8(0x74)}, 21064 {FcFrom: uint16(0x1E80), FcTo0: uint8(0x57)}, 21065 {FcFrom: uint16(0x1E81), FcTo0: uint8(0x77)}, 21066 {FcFrom: uint16(0x1E82), FcTo0: uint8(0x57)}, 21067 {FcFrom: uint16(0x1E83), FcTo0: uint8(0x77)}, 21068 {FcFrom: uint16(0x1E84), FcTo0: uint8(0x57)}, 21069 {FcFrom: uint16(0x1E85), FcTo0: uint8(0x77)}, 21070 {FcFrom: uint16(0x1EF2), FcTo0: uint8(0x59)}, 21071 {FcFrom: uint16(0x1EF3), FcTo0: uint8(0x79)}, 21072 {FcFrom: uint16(0xFB00), FcTo0: uint8(0x66), FcTo1: uint8(0x66)}, 21073 {FcFrom: uint16(0xFB01), FcTo0: uint8(0x66), FcTo1: uint8(0x69)}, 21074 {FcFrom: uint16(0xFB02), FcTo0: uint8(0x66), FcTo1: uint8(0x6C)}, 21075 {FcFrom: uint16(0xFB05), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 21076 {FcFrom: uint16(0xFB06), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 21077 } 21078 21079 func spellfixFindTranslit(tls *libc.TLS, c int32, pxTop uintptr) uintptr { 21080 *(*int32)(unsafe.Pointer(pxTop)) = int32(uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{})) - uint64(1)) 21081 return uintptr(unsafe.Pointer(&translit)) 21082 } 21083 21084 func transliterate(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 21085 bp := tls.Alloc(8) 21086 defer tls.Free(8) 21087 21088 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn*4+1)) 21089 var c int32 21090 21091 var nOut int32 21092 if zOut == uintptr(0) { 21093 return uintptr(0) 21094 } 21095 nOut = 0 21096 for nIn > 0 { 21097 c = utf8Read(tls, zIn, nIn, bp) 21098 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 21099 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 21100 if c <= 127 { 21101 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8(c) 21102 } else { 21103 var xBtm int32 21104 var x int32 21105 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 21106 xBtm = 0 21107 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 21108 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 21109 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 21110 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo0 21111 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 21112 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo1 21113 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 21114 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo2 21115 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 21116 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo3 21117 } 21118 } 21119 } 21120 c = 0 21121 break 21122 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 21123 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 21124 } else { 21125 xBtm = x + 1 21126 } 21127 } 21128 if c != 0 { 21129 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8('?') 21130 } 21131 } 21132 } 21133 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 21134 return zOut 21135 } 21136 21137 func translen_to_charlen(tls *libc.TLS, zIn uintptr, nIn int32, nTrans int32) int32 { 21138 bp := tls.Alloc(8) 21139 defer tls.Free(8) 21140 21141 var i int32 21142 var c int32 21143 21144 var nOut int32 21145 var nChar int32 21146 21147 i = libc.AssignInt32(&nOut, 0) 21148 for nChar = 0; i < nIn && nOut < nTrans; nChar++ { 21149 c = utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 21150 i = i + *(*int32)(unsafe.Pointer(bp)) 21151 21152 nOut++ 21153 if c >= 128 { 21154 var xBtm int32 21155 var x int32 21156 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 21157 xBtm = 0 21158 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 21159 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 21160 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 21161 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 21162 nOut++ 21163 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 21164 nOut++ 21165 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 21166 nOut++ 21167 } 21168 } 21169 } 21170 break 21171 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 21172 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 21173 } else { 21174 xBtm = x + 1 21175 } 21176 } 21177 } 21178 } 21179 21180 return nChar 21181 } 21182 21183 func transliterateSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21184 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21185 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21186 var zOut uintptr = transliterate(tls, zIn, nIn) 21187 if zOut == uintptr(0) { 21188 sqlite3.Xsqlite3_result_error_nomem(tls, context) 21189 } else { 21190 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 21191 } 21192 } 21193 21194 func scriptCodeSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21195 bp := tls.Alloc(4) 21196 defer tls.Free(4) 21197 21198 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21199 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21200 var c int32 21201 21202 var scriptMask int32 = 0 21203 var res int32 21204 var seenDigit int32 = 0 21205 21206 for nIn > 0 { 21207 c = utf8Read(tls, zIn, nIn, bp) 21208 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 21209 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 21210 if c < 0x02af { 21211 if c >= 0x80 || int32(midClass[c&0x7f]) < CCLASS_DIGIT { 21212 scriptMask = scriptMask | SCRIPT_LATIN 21213 } else if c >= '0' && c <= '9' { 21214 seenDigit = 1 21215 } 21216 } else if c >= 0x0400 && c <= 0x04ff { 21217 scriptMask = scriptMask | SCRIPT_CYRILLIC 21218 } else if c >= 0x0386 && c <= 0x03ce { 21219 scriptMask = scriptMask | SCRIPT_GREEK 21220 } else if c >= 0x0590 && c <= 0x05ff { 21221 scriptMask = scriptMask | SCRIPT_HEBREW 21222 } else if c >= 0x0600 && c <= 0x06ff { 21223 scriptMask = scriptMask | SCRIPT_ARABIC 21224 } 21225 } 21226 if scriptMask == 0 && seenDigit != 0 { 21227 scriptMask = SCRIPT_LATIN 21228 } 21229 switch scriptMask { 21230 case 0: 21231 res = 999 21232 break 21233 case SCRIPT_LATIN: 21234 res = 215 21235 break 21236 case SCRIPT_CYRILLIC: 21237 res = 220 21238 break 21239 case SCRIPT_GREEK: 21240 res = 200 21241 break 21242 case SCRIPT_HEBREW: 21243 res = 125 21244 break 21245 case SCRIPT_ARABIC: 21246 res = 160 21247 break 21248 default: 21249 res = 998 21250 break 21251 } 21252 sqlite3.Xsqlite3_result_int(tls, context, res) 21253 } 21254 21255 type spellfix1_vtab1 = struct { 21256 Fbase sqlite3_vtab 21257 Fdb uintptr 21258 FzDbName uintptr 21259 FzTableName uintptr 21260 FzCostTable uintptr 21261 FpConfig3 uintptr 21262 } 21263 21264 type spellfix1_vtab = spellfix1_vtab1 21265 type spellfix1_cursor1 = struct { 21266 Fbase sqlite3_vtab_cursor 21267 FpVTab uintptr 21268 FzPattern uintptr 21269 FidxNum int32 21270 FnRow int32 21271 FnAlloc int32 21272 FiRow int32 21273 FiLang int32 21274 FiTop int32 21275 FiScope int32 21276 FnSearch int32 21277 FpFullScan uintptr 21278 Fa uintptr 21279 } 21280 21281 type spellfix1_cursor = spellfix1_cursor1 21282 21283 type spellfix1_row = struct { 21284 FiRowid sqlite3_int64 21285 FzWord uintptr 21286 FiRank int32 21287 FiDistance int32 21288 FiScore int32 21289 FiMatchlen int32 21290 FzHash [32]int8 21291 } 21292 21293 func spellfix1DbExec(tls *libc.TLS, pRc uintptr, db uintptr, zFormat uintptr, va uintptr) { 21294 var ap va_list 21295 _ = ap 21296 var zSql uintptr 21297 if *(*int32)(unsafe.Pointer(pRc)) != 0 { 21298 return 21299 } 21300 ap = va 21301 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap) 21302 _ = ap 21303 if zSql == uintptr(0) { 21304 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 21305 } else { 21306 *(*int32)(unsafe.Pointer(pRc)) = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 21307 sqlite3.Xsqlite3_free(tls, zSql) 21308 } 21309 } 21310 21311 func spellfix1Uninit(tls *libc.TLS, isDestroy int32, pVTab uintptr) int32 { 21312 bp := tls.Alloc(20) 21313 defer tls.Free(20) 21314 21315 var p uintptr = pVTab 21316 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 21317 if isDestroy != 0 { 21318 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 21319 spellfix1DbExec(tls, bp+16, db, ts+7189, 21320 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 21321 } 21322 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 21323 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 21324 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 21325 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21326 sqlite3.Xsqlite3_free(tls, p) 21327 } 21328 return *(*int32)(unsafe.Pointer(bp + 16)) 21329 } 21330 21331 func spellfix1Disconnect(tls *libc.TLS, pVTab uintptr) int32 { 21332 return spellfix1Uninit(tls, 0, pVTab) 21333 } 21334 21335 func spellfix1Destroy(tls *libc.TLS, pVTab uintptr) int32 { 21336 return spellfix1Uninit(tls, 1, pVTab) 21337 } 21338 21339 func spellfix1Dequote(tls *libc.TLS, zIn uintptr) uintptr { 21340 bp := tls.Alloc(8) 21341 defer tls.Free(8) 21342 21343 var zOut uintptr 21344 var i int32 21345 var j int32 21346 var c int8 21347 for __sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(zIn)))), uint64(X_CTYPE_S)) != 0 { 21348 zIn++ 21349 } 21350 zOut = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zIn)) 21351 if zOut == uintptr(0) { 21352 return uintptr(0) 21353 } 21354 i = int32(libc.Xstrlen(tls, zOut)) 21355 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = int8(0) 21356 c = *(*int8)(unsafe.Pointer(zOut)) 21357 if int32(c) == '\'' || int32(c) == '"' { 21358 i = 1 21359 j = 0 21360 for ; 1 != 0; i++ { 21361 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zOut + uintptr(i))) 21362 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i)))) == int32(c) { 21363 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i+1)))) == int32(c) { 21364 i++ 21365 } else { 21366 *(*int8)(unsafe.Pointer(zOut + uintptr(j-1))) = int8(0) 21367 break 21368 } 21369 } 21370 } 21371 } 21372 return zOut 21373 } 21374 21375 func spellfix1Init(tls *libc.TLS, isCreate int32, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21376 bp := tls.Alloc(60) 21377 defer tls.Free(60) 21378 21379 var pNew uintptr = uintptr(0) 21380 21381 var zDbName uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 21382 var zTableName uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 21383 var nDbName int32 21384 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_OK 21385 var i int32 21386 21387 nDbName = int32(libc.Xstrlen(tls, zDbName)) 21388 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_vtab{}))+uint64(nDbName)+uint64(1)) 21389 if pNew == uintptr(0) { 21390 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21391 } else { 21392 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(spellfix1_vtab{}))) 21393 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName = pNew + 1*64 21394 libc.Xmemcpy(tls, (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName, zDbName, uint64(nDbName+1)) 21395 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 21396 (*spellfix1_vtab)(unsafe.Pointer(pNew)).Fdb = db 21397 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0) { 21398 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21399 } else { 21400 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 21401 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_declare_vtab(tls, db, 21402 ts+7226) 21403 } 21404 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && isCreate != 0 { 21405 spellfix1DbExec(tls, bp+56, db, 21406 ts+7380, 21407 libc.VaList(bp+8, zDbName, zTableName)) 21408 spellfix1DbExec(tls, bp+56, db, 21409 ts+7514, 21410 libc.VaList(bp+24, zDbName, zTableName, zTableName)) 21411 } 21412 for i = 3; *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && i < argc; i++ { 21413 if libc.Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ts+7599, uint64(16)) == 0 && (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 21414 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable = spellfix1Dequote(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))+16) 21415 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 21416 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21417 } 21418 continue 21419 } 21420 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+7616, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 21421 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_ERROR 21422 } 21423 } 21424 21425 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 && pNew != 0 { 21426 *(*uintptr)(unsafe.Pointer(ppVTab)) = uintptr(0) 21427 spellfix1Uninit(tls, 0, pNew) 21428 } else { 21429 *(*uintptr)(unsafe.Pointer(ppVTab)) = pNew 21430 } 21431 return *(*int32)(unsafe.Pointer(bp + 56)) 21432 } 21433 21434 func spellfix1Connect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21435 return spellfix1Init(tls, 0, db, pAux, argc, argv, ppVTab, pzErr) 21436 } 21437 21438 func spellfix1Create(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21439 return spellfix1Init(tls, 1, db, pAux, argc, argv, ppVTab, pzErr) 21440 } 21441 21442 func spellfix1ResetCursor(tls *libc.TLS, pCur uintptr) { 21443 var i int32 21444 for i = 0; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21445 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(i)*64)).FzWord) 21446 } 21447 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = 0 21448 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 21449 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch = 0 21450 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21451 sqlite3.Xsqlite3_finalize(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21452 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan = uintptr(0) 21453 } 21454 } 21455 21456 func spellfix1ResizeCursor(tls *libc.TLS, pCur uintptr, N int32) { 21457 var aNew uintptr 21458 21459 aNew = sqlite3.Xsqlite3_realloc64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64(unsafe.Sizeof(spellfix1_row{}))*uint64(N)) 21460 if aNew == uintptr(0) && N > 0 { 21461 spellfix1ResetCursor(tls, pCur) 21462 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa) 21463 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = 0 21464 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = uintptr(0) 21465 } else { 21466 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = N 21467 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = aNew 21468 } 21469 } 21470 21471 func spellfix1Close(tls *libc.TLS, cur uintptr) int32 { 21472 var pCur uintptr = cur 21473 spellfix1ResetCursor(tls, pCur) 21474 spellfix1ResizeCursor(tls, pCur, 0) 21475 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21476 sqlite3.Xsqlite3_free(tls, pCur) 21477 return SQLITE_OK 21478 } 21479 21480 func spellfix1BestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 21481 var iPlan int32 = 0 21482 var iLangTerm int32 = -1 21483 var iTopTerm int32 = -1 21484 var iScopeTerm int32 = -1 21485 var iDistTerm int32 = -1 21486 var iRowidTerm int32 = -1 21487 var i int32 21488 var pConstraint uintptr 21489 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 21490 i = 0 21491 __1: 21492 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 21493 goto __3 21494 } 21495 { 21496 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 21497 goto __2 21498 } 21499 21500 if iPlan&SPELLFIX_IDXNUM_MATCH == 0 && 21501 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_WORD && 21502 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 21503 iPlan = iPlan | SPELLFIX_IDXNUM_MATCH 21504 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 21505 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 21506 } 21507 21508 if iPlan&SPELLFIX_IDXNUM_LANGID == 0 && 21509 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_LANGID && 21510 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21511 iPlan = iPlan | SPELLFIX_IDXNUM_LANGID 21512 iLangTerm = i 21513 } 21514 21515 if iPlan&SPELLFIX_IDXNUM_TOP == 0 && 21516 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_TOP && 21517 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21518 iPlan = iPlan | SPELLFIX_IDXNUM_TOP 21519 iTopTerm = i 21520 } 21521 21522 if iPlan&SPELLFIX_IDXNUM_SCOPE == 0 && 21523 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_SCOPE && 21524 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21525 iPlan = iPlan | SPELLFIX_IDXNUM_SCOPE 21526 iScopeTerm = i 21527 } 21528 21529 if iPlan&(0x10|0x20) == 0 && 21530 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_DISTANCE && 21531 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 21532 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 21533 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 21534 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLT 21535 } else { 21536 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLE 21537 } 21538 iDistTerm = i 21539 } 21540 21541 if iPlan&SPELLFIX_IDXNUM_ROWID == 0 && 21542 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < 0 && 21543 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21544 iPlan = iPlan | SPELLFIX_IDXNUM_ROWID 21545 iRowidTerm = i 21546 } 21547 21548 } 21549 goto __2 21550 __2: 21551 i++ 21552 pConstraint += 12 21553 goto __1 21554 goto __3 21555 __3: 21556 ; 21557 if iPlan&SPELLFIX_IDXNUM_MATCH != 0 { 21558 var idx int32 = 2 21559 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 21560 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 21561 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == SPELLFIX_COL_SCORE && 21562 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 21563 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 21564 } 21565 if iPlan&SPELLFIX_IDXNUM_LANGID != 0 { 21566 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21567 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).Fomit = uint8(1) 21568 } 21569 if iPlan&SPELLFIX_IDXNUM_TOP != 0 { 21570 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21571 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).Fomit = uint8(1) 21572 } 21573 if iPlan&SPELLFIX_IDXNUM_SCOPE != 0 { 21574 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21575 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).Fomit = uint8(1) 21576 } 21577 if iPlan&(0x10|0x20) != 0 { 21578 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21579 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).Fomit = uint8(1) 21580 } 21581 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e5 21582 } else if iPlan&SPELLFIX_IDXNUM_ROWID != 0 { 21583 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SPELLFIX_IDXNUM_ROWID 21584 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).FargvIndex = 1 21585 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).Fomit = uint8(1) 21586 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 21587 } else { 21588 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 21589 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e50 21590 } 21591 return SQLITE_OK 21592 } 21593 21594 func spellfix1Open(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 21595 var p uintptr = pVTab 21596 var pCur uintptr 21597 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21598 if pCur == uintptr(0) { 21599 return SQLITE_NOMEM 21600 } 21601 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21602 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab = p 21603 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 21604 return SQLITE_OK 21605 } 21606 21607 func spellfix1Score(tls *libc.TLS, iDistance int32, iRank int32) int32 { 21608 var iLog2 int32 21609 iLog2 = 0 21610 __1: 21611 if !(iRank > 0) { 21612 goto __3 21613 } 21614 { 21615 } 21616 goto __2 21617 __2: 21618 iLog2++ 21619 iRank >>= 1 21620 goto __1 21621 goto __3 21622 __3: 21623 ; 21624 return iDistance + 32 - iLog2 21625 } 21626 21627 func spellfix1RowCompare(tls *libc.TLS, A uintptr, B uintptr) int32 { 21628 var a uintptr = A 21629 var b uintptr = B 21630 return (*spellfix1_row)(unsafe.Pointer(a)).FiScore - (*spellfix1_row)(unsafe.Pointer(b)).FiScore 21631 } 21632 21633 type MatchQuery1 = struct { 21634 FpCur uintptr 21635 FpStmt uintptr 21636 FzHash [32]int8 21637 FzPattern uintptr 21638 FnPattern int32 21639 F__ccgo_pad1 [4]byte 21640 FpMatchStr3 uintptr 21641 FpConfig3 uintptr 21642 FpLang uintptr 21643 FiLang int32 21644 FiScope int32 21645 FiMaxDist int32 21646 Frc int32 21647 FnRun int32 21648 FazPrior [1][32]int8 21649 F__ccgo_pad2 [4]byte 21650 } 21651 21652 type MatchQuery = MatchQuery1 21653 21654 func spellfix1RunQuery(tls *libc.TLS, p uintptr, zQuery uintptr, nQuery int32) { 21655 bp := tls.Alloc(76) 21656 defer tls.Free(76) 21657 21658 var zK1 uintptr 21659 var zWord uintptr 21660 var iDist int32 21661 var iRank int32 21662 var iScore int32 21663 var iWorst int32 = 0 21664 var idx int32 21665 var idxWorst int32 = -1 21666 var i int32 21667 var iScope int32 = (*MatchQuery)(unsafe.Pointer(p)).FiScope 21668 var pCur uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpCur 21669 var pStmt uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpStmt 21670 21671 var zClass uintptr 21672 var nClass int32 21673 var rc int32 21674 21675 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) || (*MatchQuery)(unsafe.Pointer(p)).Frc != 0 { 21676 return 21677 } 21678 zClass = phoneticHash(tls, zQuery, nQuery) 21679 if zClass == uintptr(0) { 21680 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21681 return 21682 } 21683 nClass = int32(libc.Xstrlen(tls, zClass)) 21684 if nClass > SPELLFIX_MX_HASH-2 { 21685 nClass = SPELLFIX_MX_HASH - 2 21686 *(*int8)(unsafe.Pointer(zClass + uintptr(nClass))) = int8(0) 21687 } 21688 if nClass <= iScope { 21689 if nClass > 2 { 21690 iScope = nClass - 1 21691 } else { 21692 iScope = nClass 21693 } 21694 } 21695 libc.Xmemcpy(tls, bp+8, zClass, uint64(iScope)) 21696 sqlite3.Xsqlite3_free(tls, zClass) 21697 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(iScope))) = int8(0) 21698 libc.Xmemcpy(tls, bp+40, bp+8, uint64(iScope)) 21699 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope))) = int8('Z') 21700 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope+1))) = int8(0) 21701 21702 libc.Xmemcpy(tls, p+108+uintptr(libc.PostIncInt32(&(*MatchQuery)(unsafe.Pointer(p)).FnRun, 1))*32, bp+8, uint64(iScope+1)) 21703 if sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, bp+8, -1, uintptr(0)) == SQLITE_NOMEM || 21704 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, bp+40, -1, uintptr(0)) == SQLITE_NOMEM { 21705 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21706 return 21707 } 21708 for sqlite3.Xsqlite3_step(tls, pStmt) == SQLITE_ROW { 21709 *(*int32)(unsafe.Pointer(bp + 72)) = -1 21710 iRank = sqlite3.Xsqlite3_column_int(tls, pStmt, 2) 21711 if (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3 != 0 { 21712 var nWord int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, 1) 21713 zWord = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 21714 iDist = editDist3Core(tls, (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3, zWord, nWord, (*MatchQuery)(unsafe.Pointer(p)).FpLang, bp+72) 21715 } else { 21716 zK1 = sqlite3.Xsqlite3_column_text(tls, pStmt, 3) 21717 if zK1 == uintptr(0) { 21718 continue 21719 } 21720 iDist = editdist1(tls, (*MatchQuery)(unsafe.Pointer(p)).FzPattern, zK1, uintptr(0)) 21721 } 21722 if iDist < 0 { 21723 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21724 break 21725 } 21726 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch++ 21727 21728 if (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist >= 0 { 21729 if iDist > (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist { 21730 continue 21731 } 21732 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc && (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum&SPELLFIX_IDXNUM_TOP == 0 { 21733 spellfix1ResizeCursor(tls, pCur, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc*2+10) 21734 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) { 21735 break 21736 } 21737 } 21738 } 21739 21740 iScore = spellfix1Score(tls, iDist, iRank) 21741 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21742 idx = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 21743 } else if iScore < iWorst { 21744 idx = idxWorst 21745 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord) 21746 } else { 21747 continue 21748 } 21749 21750 (*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))) 21751 if (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord == uintptr(0) { 21752 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21753 break 21754 } 21755 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRowid = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 21756 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRank = iRank 21757 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiDistance = iDist 21758 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiScore = iScore 21759 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiMatchlen = *(*int32)(unsafe.Pointer(bp + 72)) 21760 libc.Xmemcpy(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64+32, bp+8, uint64(iScope+1)) 21761 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21762 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow++ 21763 } 21764 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow == (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21765 iWorst = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa)).FiScore 21766 idxWorst = 0 21767 for i = 1; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21768 iScore = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(i)*64)).FiScore 21769 if iWorst < iScore { 21770 iWorst = iScore 21771 idxWorst = i 21772 } 21773 } 21774 } 21775 } 21776 rc = sqlite3.Xsqlite3_reset(tls, pStmt) 21777 if rc != 0 { 21778 (*MatchQuery)(unsafe.Pointer(p)).Frc = rc 21779 } 21780 } 21781 21782 func spellfix1FilterForMatch(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 21783 bp := tls.Alloc(176) 21784 defer tls.Free(176) 21785 21786 var idxNum int32 21787 var zMatchThis uintptr 21788 var pMatchStr3 uintptr 21789 var zPattern uintptr 21790 var nPattern int32 21791 var iLimit int32 21792 var iScope int32 21793 var iLang int32 21794 var zSql uintptr 21795 21796 var rc int32 21797 var idx int32 21798 var p uintptr 21799 21800 idxNum = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 21801 pMatchStr3 = uintptr(0) 21802 iLimit = 20 21803 iScope = 3 21804 iLang = 0 21805 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 21806 idx = 1 21807 p = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 21808 21809 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable != uintptr(0) && (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 21810 goto __1 21811 } 21812 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 21813 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 21814 goto __2 21815 } 21816 return SQLITE_NOMEM 21817 __2: 21818 ; 21819 libc.Xmemset(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 21820 rc = editDist3ConfigLoad(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21821 if !(rc != 0) { 21822 goto __3 21823 } 21824 return rc 21825 __3: 21826 ; 21827 __1: 21828 ; 21829 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(MatchQuery{}))) 21830 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 3 21831 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = -1 21832 21833 if !(idxNum&2 != 0) { 21834 goto __4 21835 } 21836 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21837 __4: 21838 ; 21839 if !(idxNum&4 != 0) { 21840 goto __5 21841 } 21842 iLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21843 if !(iLimit < 1) { 21844 goto __6 21845 } 21846 iLimit = 1 21847 __6: 21848 ; 21849 __5: 21850 ; 21851 if !(idxNum&8 != 0) { 21852 goto __7 21853 } 21854 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21855 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope < 1) { 21856 goto __8 21857 } 21858 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 1 21859 __8: 21860 ; 21861 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope > SPELLFIX_MX_HASH-2) { 21862 goto __9 21863 } 21864 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = SPELLFIX_MX_HASH - 2 21865 __9: 21866 ; 21867 __7: 21868 ; 21869 if !(idxNum&(16|32) != 0) { 21870 goto __10 21871 } 21872 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21873 if !(idxNum&16 != 0) { 21874 goto __11 21875 } 21876 (*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist-- 21877 __11: 21878 ; 21879 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist < 0) { 21880 goto __12 21881 } 21882 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = 0 21883 __12: 21884 ; 21885 __10: 21886 ; 21887 spellfix1ResetCursor(tls, pCur) 21888 spellfix1ResizeCursor(tls, pCur, iLimit) 21889 zMatchThis = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21890 if !(zMatchThis == uintptr(0)) { 21891 goto __13 21892 } 21893 return SQLITE_OK 21894 __13: 21895 ; 21896 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 != 0) { 21897 goto __14 21898 } 21899 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = editDist3FindLang(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, iLang) 21900 pMatchStr3 = editDist3FromStringNew(tls, (*MatchQuery)(unsafe.Pointer(bp+24)).FpLang, zMatchThis, -1) 21901 if !(pMatchStr3 == uintptr(0)) { 21902 goto __16 21903 } 21904 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21905 goto filter_exit 21906 __16: 21907 ; 21908 goto __15 21909 __14: 21910 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = uintptr(0) 21911 __15: 21912 ; 21913 zPattern = transliterate(tls, zMatchThis, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 21914 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21915 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern = zPattern 21916 if !(zPattern == uintptr(0)) { 21917 goto __17 21918 } 21919 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21920 goto filter_exit 21921 __17: 21922 ; 21923 nPattern = int32(libc.Xstrlen(tls, zPattern)) 21924 if !(int32(*(*int8)(unsafe.Pointer(zPattern + uintptr(nPattern-1)))) == '*') { 21925 goto __18 21926 } 21927 nPattern-- 21928 __18: 21929 ; 21930 zSql = sqlite3.Xsqlite3_mprintf(tls, 21931 ts+7650, 21932 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, iLang)) 21933 if !(zSql == uintptr(0)) { 21934 goto __19 21935 } 21936 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21937 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 21938 goto filter_exit 21939 __19: 21940 ; 21941 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, bp+168, uintptr(0)) 21942 sqlite3.Xsqlite3_free(tls, zSql) 21943 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang = iLang 21944 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpCur = pCur 21945 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpStmt = *(*uintptr)(unsafe.Pointer(bp + 168)) 21946 (*MatchQuery)(unsafe.Pointer(bp + 24)).FzPattern = zPattern 21947 (*MatchQuery)(unsafe.Pointer(bp + 24)).FnPattern = nPattern 21948 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpMatchStr3 = pMatchStr3 21949 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiLang = iLang 21950 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = rc 21951 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpConfig3 = (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 21952 if !((*MatchQuery)(unsafe.Pointer(bp+24)).Frc == SQLITE_OK) { 21953 goto __20 21954 } 21955 spellfix1RunQuery(tls, bp+24, zPattern, nPattern) 21956 __20: 21957 ; 21958 if !((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa != 0) { 21959 goto __21 21960 } 21961 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 { 21962 f func(*libc.TLS, uintptr, uintptr) int32 21963 }{spellfix1RowCompare}))) 21964 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop = iLimit 21965 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope = iScope 21966 goto __22 21967 __21: 21968 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21969 __22: 21970 ; 21971 filter_exit: 21972 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 21973 editDist3FromStringDelete(tls, pMatchStr3) 21974 return (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc 21975 } 21976 21977 func spellfix1FilterForFullScan(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 21978 bp := tls.Alloc(24) 21979 defer tls.Free(24) 21980 21981 var rc int32 = SQLITE_OK 21982 var idxNum int32 = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 21983 var zSql uintptr 21984 var pVTab uintptr = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 21985 spellfix1ResetCursor(tls, pCur) 21986 21987 zSql = sqlite3.Xsqlite3_mprintf(tls, 21988 ts+7750, 21989 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzTableName, 21990 func() uintptr { 21991 if idxNum&64 != 0 { 21992 return ts + 7809 21993 } 21994 return ts + 584 21995 }())) 21996 if zSql == uintptr(0) { 21997 return SQLITE_NOMEM 21998 } 21999 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).Fdb, zSql, -1, pCur+56, uintptr(0)) 22000 sqlite3.Xsqlite3_free(tls, zSql) 22001 if rc == SQLITE_OK && idxNum&64 != 0 { 22002 rc = sqlite3.Xsqlite3_bind_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 1, *(*uintptr)(unsafe.Pointer(argv))) 22003 } 22004 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = libc.AssignPtrInt32(pCur+36, 0) 22005 if rc == SQLITE_OK { 22006 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 22007 if rc == SQLITE_ROW { 22008 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = -1 22009 rc = SQLITE_OK 22010 } 22011 if rc == SQLITE_DONE { 22012 rc = SQLITE_OK 22013 } 22014 } else { 22015 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 22016 } 22017 return rc 22018 } 22019 22020 func spellfix1Filter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 22021 var pCur uintptr = cur 22022 var rc int32 22023 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum = idxNum 22024 if idxNum&1 != 0 { 22025 rc = spellfix1FilterForMatch(tls, pCur, argc, argv) 22026 } else { 22027 rc = spellfix1FilterForFullScan(tls, pCur, argc, argv) 22028 } 22029 return rc 22030 } 22031 22032 func spellfix1Next(tls *libc.TLS, cur uintptr) int32 { 22033 var pCur uintptr = cur 22034 var rc int32 = SQLITE_OK 22035 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow { 22036 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22037 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 22038 if rc != SQLITE_ROW { 22039 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 22040 } 22041 if rc == SQLITE_ROW || rc == SQLITE_DONE { 22042 rc = SQLITE_OK 22043 } 22044 } else { 22045 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow++ 22046 } 22047 } 22048 return rc 22049 } 22050 22051 func spellfix1Eof(tls *libc.TLS, cur uintptr) int32 { 22052 var pCur uintptr = cur 22053 return libc.Bool32((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow) 22054 } 22055 22056 func spellfix1Column(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 22057 bp := tls.Alloc(4) 22058 defer tls.Free(4) 22059 22060 var pCur uintptr = cur 22061 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22062 if i <= SPELLFIX_COL_LANGID { 22063 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, i)) 22064 } else { 22065 sqlite3.Xsqlite3_result_null(tls, ctx) 22066 } 22067 return SQLITE_OK 22068 } 22069 switch i { 22070 case SPELLFIX_COL_WORD: 22071 { 22072 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)) 22073 break 22074 22075 } 22076 case SPELLFIX_COL_RANK: 22077 { 22078 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) 22079 break 22080 22081 } 22082 case SPELLFIX_COL_DISTANCE: 22083 { 22084 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) 22085 break 22086 22087 } 22088 case SPELLFIX_COL_LANGID: 22089 { 22090 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang) 22091 break 22092 22093 } 22094 case SPELLFIX_COL_SCORE: 22095 { 22096 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) 22097 break 22098 22099 } 22100 case SPELLFIX_COL_MATCHLEN: 22101 { 22102 *(*int32)(unsafe.Pointer(bp)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiMatchlen 22103 if *(*int32)(unsafe.Pointer(bp)) < 0 { 22104 var nPattern int32 = int32(libc.Xstrlen(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern)) 22105 var zWord uintptr = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FzWord 22106 var nWord int32 = int32(libc.Xstrlen(tls, zWord)) 22107 22108 if nPattern > 0 && int32(*(*int8)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern + uintptr(nPattern-1)))) == '*' { 22109 var zTranslit uintptr 22110 var res int32 22111 zTranslit = transliterate(tls, zWord, nWord) 22112 if !(zTranslit != 0) { 22113 return SQLITE_NOMEM 22114 } 22115 res = editdist1(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern, zTranslit, bp) 22116 sqlite3.Xsqlite3_free(tls, zTranslit) 22117 if res < 0 { 22118 return SQLITE_NOMEM 22119 } 22120 *(*int32)(unsafe.Pointer(bp)) = translen_to_charlen(tls, zWord, nWord, *(*int32)(unsafe.Pointer(bp))) 22121 } else { 22122 *(*int32)(unsafe.Pointer(bp)) = utf8Charlen(tls, zWord, nWord) 22123 } 22124 } 22125 22126 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(bp))) 22127 break 22128 22129 } 22130 case SPELLFIX_COL_PHONEHASH: 22131 { 22132 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64+32, -1, uintptr(0)) 22133 break 22134 22135 } 22136 case SPELLFIX_COL_TOP: 22137 { 22138 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop) 22139 break 22140 22141 } 22142 case SPELLFIX_COL_SCOPE: 22143 { 22144 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope) 22145 break 22146 22147 } 22148 case SPELLFIX_COL_SRCHCNT: 22149 { 22150 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch) 22151 break 22152 22153 } 22154 default: 22155 { 22156 sqlite3.Xsqlite3_result_null(tls, ctx) 22157 break 22158 22159 } 22160 } 22161 return SQLITE_OK 22162 } 22163 22164 func spellfix1Rowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 22165 var pCur uintptr = cur 22166 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22167 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 4) 22168 } else { 22169 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiRowid 22170 } 22171 return SQLITE_OK 22172 } 22173 22174 func spellfix1GetConflict(tls *libc.TLS, db uintptr) uintptr { 22175 var eConflict int32 = sqlite3.Xsqlite3_vtab_on_conflict(tls, db) 22176 22177 return azConflict[eConflict-1] 22178 } 22179 22180 var azConflict = [5]uintptr{ 22181 ts + 7824, ts + 7833, ts + 7840, ts + 7840, ts + 7846, 22182 } 22183 22184 func spellfix1Update(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 22185 bp := tls.Alloc(284) 22186 defer tls.Free(284) 22187 22188 *(*int32)(unsafe.Pointer(bp + 280)) = SQLITE_OK 22189 var rowid sqlite3_int64 22190 var newRowid sqlite3_int64 22191 var p uintptr = pVTab 22192 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 22193 22194 if argc == 1 { 22195 rowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22196 spellfix1DbExec(tls, bp+280, db, 22197 ts+7854, 22198 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, rowid)) 22199 } else { 22200 var zWord uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 22201 var nWord int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 22202 var iLang int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 22203 var iRank int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 22204 var zSoundslike uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 22205 var nSoundslike int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 22206 var zK1 uintptr 22207 var zK2 uintptr 22208 var i int32 22209 var c int8 22210 var zConflict uintptr = spellfix1GetConflict(tls, db) 22211 22212 if zWord == uintptr(0) { 22213 var zCmd uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 13*8))) 22214 if zCmd == uintptr(0) { 22215 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7897, 22216 libc.VaList(bp+24, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 22217 return SQLITE_CONSTRAINT | int32(5)<<8 22218 } 22219 if libc.Xstrcmp(tls, zCmd, ts+7933) == 0 { 22220 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 22221 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 22222 return SQLITE_OK 22223 } 22224 if libc.Xstrncmp(tls, zCmd, ts+7599, uint64(16)) == 0 { 22225 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 22226 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 22227 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22228 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = spellfix1Dequote(tls, zCmd+uintptr(16)) 22229 if (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable == uintptr(0) { 22230 return SQLITE_NOMEM 22231 } 22232 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 { 22233 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22234 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = uintptr(0) 22235 } 22236 return SQLITE_OK 22237 } 22238 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7944, 22239 libc.VaList(bp+32, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zCmd)) 22240 return SQLITE_ERROR 22241 } 22242 if iRank < 1 { 22243 iRank = 1 22244 } 22245 if zSoundslike != 0 { 22246 zK1 = transliterate(tls, zSoundslike, nSoundslike) 22247 } else { 22248 zK1 = transliterate(tls, zWord, nWord) 22249 } 22250 if zK1 == uintptr(0) { 22251 return SQLITE_NOMEM 22252 } 22253 for i = 0; int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zK1 + uintptr(i))))) != 0; i++ { 22254 if int32(c) >= 'A' && int32(c) <= 'Z' { 22255 *(*int8)(unsafe.Pointer(zK1 + uintptr(i))) += int8('a' - 'A') 22256 } 22257 } 22258 zK2 = phoneticHash(tls, zK1, i) 22259 if zK2 == uintptr(0) { 22260 sqlite3.Xsqlite3_free(tls, zK1) 22261 return SQLITE_NOMEM 22262 } 22263 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 22264 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_NULL { 22265 spellfix1DbExec(tls, bp+280, db, 22266 ts+7979, 22267 libc.VaList(bp+48, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 22268 iRank, iLang, zWord, zK1, zWord, zK2)) 22269 } else { 22270 newRowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 22271 spellfix1DbExec(tls, bp+280, db, 22272 ts+8065, 22273 libc.VaList(bp+112, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 22274 newRowid, iRank, iLang, zWord, zK1, zWord, zK2)) 22275 } 22276 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 22277 } else { 22278 rowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 22279 newRowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 22280 spellfix1DbExec(tls, bp+280, db, 22281 ts+8165, 22282 libc.VaList(bp+192, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, newRowid, iRank, iLang, 22283 zWord, zK1, zWord, zK2, rowid)) 22284 } 22285 sqlite3.Xsqlite3_free(tls, zK1) 22286 sqlite3.Xsqlite3_free(tls, zK2) 22287 } 22288 return *(*int32)(unsafe.Pointer(bp + 280)) 22289 } 22290 22291 func spellfix1Rename(tls *libc.TLS, pVTab uintptr, zNew uintptr) int32 { 22292 bp := tls.Alloc(36) 22293 defer tls.Free(36) 22294 22295 var p uintptr = pVTab 22296 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 22297 *(*int32)(unsafe.Pointer(bp + 32)) = SQLITE_OK 22298 var zNewName uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zNew)) 22299 if zNewName == uintptr(0) { 22300 return SQLITE_NOMEM 22301 } 22302 spellfix1DbExec(tls, bp+32, db, 22303 ts+8274, 22304 libc.VaList(bp+8, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zNewName)) 22305 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK { 22306 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 22307 (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName = zNewName 22308 } else { 22309 sqlite3.Xsqlite3_free(tls, zNewName) 22310 } 22311 return *(*int32)(unsafe.Pointer(bp + 32)) 22312 } 22313 22314 var spellfix1Module = sqlite3_module{ 22315 FxCreate: 0, 22316 FxConnect: 0, 22317 FxBestIndex: 0, 22318 FxDisconnect: 0, 22319 FxDestroy: 0, 22320 FxOpen: 0, 22321 FxClose: 0, 22322 FxFilter: 0, 22323 FxNext: 0, 22324 FxEof: 0, 22325 FxColumn: 0, 22326 FxRowid: 0, 22327 FxUpdate: 0, 22328 FxRename: 0, 22329 } 22330 22331 func spellfix1Register(tls *libc.TLS, db uintptr) int32 { 22332 var rc int32 = SQLITE_OK 22333 var i int32 22334 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8323, 1, 22335 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22336 *(*uintptr)(unsafe.Pointer(&struct { 22337 f func(*libc.TLS, uintptr, int32, uintptr) 22338 }{transliterateSqlFunc})), uintptr(0), uintptr(0)) 22339 if rc == SQLITE_OK { 22340 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8342, 2, 22341 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22342 *(*uintptr)(unsafe.Pointer(&struct { 22343 f func(*libc.TLS, uintptr, int32, uintptr) 22344 }{editdistSqlFunc})), uintptr(0), uintptr(0)) 22345 } 22346 if rc == SQLITE_OK { 22347 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8361, 1, 22348 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22349 *(*uintptr)(unsafe.Pointer(&struct { 22350 f func(*libc.TLS, uintptr, int32, uintptr) 22351 }{phoneticHashSqlFunc})), uintptr(0), uintptr(0)) 22352 } 22353 if rc == SQLITE_OK { 22354 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8381, 1, 22355 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22356 *(*uintptr)(unsafe.Pointer(&struct { 22357 f func(*libc.TLS, uintptr, int32, uintptr) 22358 }{scriptCodeSqlFunc})), uintptr(0), uintptr(0)) 22359 } 22360 if rc == SQLITE_OK { 22361 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8402, uintptr(unsafe.Pointer(&spellfix1Module)), uintptr(0)) 22362 } 22363 if rc == SQLITE_OK { 22364 rc = editDist3Install(tls, db) 22365 } 22366 22367 for i = 0; uint64(i) < uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{}))-uint64(1); i++ { 22368 } 22369 22370 return rc 22371 } 22372 22373 func sqlite3_spellfix_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 22374 _ = pApi 22375 22376 return spellfix1Register(tls, db) 22377 return SQLITE_OK 22378 } 22379 22380 func totypeIsspace(tls *libc.TLS, c uint8) int32 { 22381 return libc.Bool32(int32(c) == ' ' || int32(c) == '\t' || int32(c) == '\n' || int32(c) == '\v' || int32(c) == '\f' || int32(c) == '\r') 22382 } 22383 22384 func totypeIsdigit(tls *libc.TLS, c uint8) int32 { 22385 return libc.Bool32(int32(c) >= '0' && int32(c) <= '9') 22386 } 22387 22388 func totypeCompare2pow63(tls *libc.TLS, zNum uintptr) int32 { 22389 var c int32 = 0 22390 var i int32 22391 22392 var pow63 uintptr = ts + 8412 22393 for i = 0; c == 0 && i < 18; i++ { 22394 c = (int32(*(*int8)(unsafe.Pointer(zNum + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(pow63 + uintptr(i))))) * 10 22395 } 22396 if c == 0 { 22397 c = int32(*(*int8)(unsafe.Pointer(zNum + 18))) - '8' 22398 } 22399 return c 22400 } 22401 22402 func totypeAtoi64(tls *libc.TLS, zNum uintptr, pNum uintptr, length int32) int32 { 22403 var u sqlite3_uint64 = uint64(0) 22404 var neg int32 = 0 22405 var i int32 22406 var c int32 = 0 22407 var nonNum int32 = 0 22408 var zStart uintptr 22409 var zEnd uintptr = zNum + uintptr(length) 22410 22411 for zNum < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(zNum)))) != 0 { 22412 zNum++ 22413 } 22414 if zNum < zEnd { 22415 if int32(*(*int8)(unsafe.Pointer(zNum))) == '-' { 22416 neg = 1 22417 zNum++ 22418 } else if int32(*(*int8)(unsafe.Pointer(zNum))) == '+' { 22419 zNum++ 22420 } 22421 } 22422 zStart = zNum 22423 for zNum < zEnd && int32(*(*int8)(unsafe.Pointer(zNum))) == '0' { 22424 zNum++ 22425 } 22426 for i = 0; zNum+uintptr(i) < zEnd && libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(zNum + uintptr(i))))) >= '0' && c <= '9'; i++ { 22427 u = u*uint64(10) + sqlite3_uint64(c) - uint64('0') 22428 } 22429 if u > uint64(int64(0xffffffff)|int64(0x7fffffff)<<32) { 22430 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 22431 } else if neg != 0 { 22432 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = -sqlite3_int64(u) 22433 } else { 22434 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = sqlite3_int64(u) 22435 } 22436 if c != 0 && zNum+uintptr(i) < zEnd || i == 0 && zStart == zNum || i > 19 || nonNum != 0 { 22437 return 1 22438 } else if i < 19 { 22439 return 0 22440 } else { 22441 c = totypeCompare2pow63(tls, zNum) 22442 if c < 0 { 22443 return 0 22444 } else if c > 0 { 22445 return 1 22446 } else { 22447 if neg != 0 { 22448 return 0 22449 } 22450 return 2 22451 } 22452 } 22453 return int32(0) 22454 } 22455 22456 func totypeAtoF(tls *libc.TLS, z uintptr, pResult uintptr, length int32) int32 { 22457 var zEnd uintptr 22458 22459 var sign int32 22460 var s sqlite3_int64 22461 var d int32 22462 var esign int32 22463 var e int32 22464 var eValid int32 22465 var result float64 22466 var nDigits int32 22467 var nonNum int32 22468 var scale float64 22469 zEnd = z + uintptr(length) 22470 sign = 1 22471 s = int64(0) 22472 d = 0 22473 esign = 1 22474 e = 0 22475 eValid = 1 22476 nDigits = 0 22477 nonNum = 0 22478 22479 *(*float64)(unsafe.Pointer(pResult)) = 0.0 22480 22481 __1: 22482 if !(z < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22483 goto __2 22484 } 22485 z++ 22486 goto __1 22487 __2: 22488 ; 22489 if !(z >= zEnd) { 22490 goto __3 22491 } 22492 return 0 22493 __3: 22494 ; 22495 if !(int32(*(*int8)(unsafe.Pointer(z))) == '-') { 22496 goto __4 22497 } 22498 sign = -1 22499 z++ 22500 goto __5 22501 __4: 22502 if !(int32(*(*int8)(unsafe.Pointer(z))) == '+') { 22503 goto __6 22504 } 22505 z++ 22506 __6: 22507 ; 22508 __5: 22509 ; 22510 __7: 22511 if !(z < zEnd && int32(*(*int8)(unsafe.Pointer(z))) == '0') { 22512 goto __8 22513 } 22514 z++ 22515 nDigits++ 22516 goto __7 22517 __8: 22518 ; 22519 __9: 22520 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 22521 goto __10 22522 } 22523 s = s*int64(10) + sqlite3_int64(int32(*(*int8)(unsafe.Pointer(z)))-'0') 22524 z++ 22525 nDigits++ 22526 goto __9 22527 __10: 22528 ; 22529 __11: 22530 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22531 goto __12 22532 } 22533 z++ 22534 nDigits++ 22535 d++ 22536 goto __11 22537 __12: 22538 ; 22539 if !(z >= zEnd) { 22540 goto __13 22541 } 22542 goto totype_atof_calc 22543 __13: 22544 ; 22545 if !(int32(*(*int8)(unsafe.Pointer(z))) == '.') { 22546 goto __14 22547 } 22548 z++ 22549 22550 __15: 22551 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 22552 goto __16 22553 } 22554 s = s*int64(10) + sqlite3_int64(int32(*(*int8)(unsafe.Pointer(z)))-'0') 22555 z++ 22556 nDigits++ 22557 d-- 22558 goto __15 22559 __16: 22560 ; 22561 __17: 22562 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22563 goto __18 22564 } 22565 z++ 22566 nDigits++ 22567 goto __17 22568 __18: 22569 ; 22570 __14: 22571 ; 22572 if !(z >= zEnd) { 22573 goto __19 22574 } 22575 goto totype_atof_calc 22576 __19: 22577 ; 22578 if !(int32(*(*int8)(unsafe.Pointer(z))) == 'e' || int32(*(*int8)(unsafe.Pointer(z))) == 'E') { 22579 goto __20 22580 } 22581 z++ 22582 eValid = 0 22583 if !(z >= zEnd) { 22584 goto __21 22585 } 22586 goto totype_atof_calc 22587 __21: 22588 ; 22589 if !(int32(*(*int8)(unsafe.Pointer(z))) == '-') { 22590 goto __22 22591 } 22592 esign = -1 22593 z++ 22594 goto __23 22595 __22: 22596 if !(int32(*(*int8)(unsafe.Pointer(z))) == '+') { 22597 goto __24 22598 } 22599 z++ 22600 __24: 22601 ; 22602 __23: 22603 ; 22604 __25: 22605 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22606 goto __26 22607 } 22608 if e < 10000 { 22609 e = e*10 + (int32(*(*int8)(unsafe.Pointer(z))) - '0') 22610 } else { 22611 e = 10000 22612 } 22613 z++ 22614 eValid = 1 22615 goto __25 22616 __26: 22617 ; 22618 __20: 22619 ; 22620 if !(nDigits != 0 && eValid != 0) { 22621 goto __27 22622 } 22623 __28: 22624 if !(z < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22625 goto __29 22626 } 22627 z++ 22628 goto __28 22629 __29: 22630 ; 22631 __27: 22632 ; 22633 totype_atof_calc: 22634 e = e*esign + d 22635 if !(e < 0) { 22636 goto __30 22637 } 22638 esign = -1 22639 e = e * -1 22640 goto __31 22641 __30: 22642 esign = 1 22643 __31: 22644 ; 22645 if !!(s != 0) { 22646 goto __32 22647 } 22648 22649 if sign < 0 && nDigits != 0 { 22650 result = -libc.Float64FromFloat64(float64(0)) 22651 } else { 22652 result = float64(0) 22653 } 22654 goto __33 22655 __32: 22656 if !(esign > 0) { 22657 goto __34 22658 } 22659 __36: 22660 if !(s < (int64(0xffffffff)|int64(0x7fffffff)<<32)/int64(10) && e > 0) { 22661 goto __37 22662 } 22663 e-- 22664 s = s * int64(10) 22665 goto __36 22666 __37: 22667 ; 22668 goto __35 22669 __34: 22670 __38: 22671 if !(!(int32(s%int64(10)) != 0) && e > 0) { 22672 goto __39 22673 } 22674 e-- 22675 s = s / int64(10) 22676 goto __38 22677 __39: 22678 ; 22679 __35: 22680 ; 22681 if sign < 0 { 22682 s = -s 22683 } else { 22684 s = s 22685 } 22686 22687 if !(e != 0) { 22688 goto __40 22689 } 22690 scale = 1.0 22691 22692 if !(e > 307 && e < 342) { 22693 goto __42 22694 } 22695 __44: 22696 if !(e%308 != 0) { 22697 goto __45 22698 } 22699 scale = scale * 1.0e+1 22700 e = e - 1 22701 goto __44 22702 __45: 22703 ; 22704 if !(esign < 0) { 22705 goto __46 22706 } 22707 result = float64(s) / scale 22708 result = result / 1.0e+308 22709 goto __47 22710 __46: 22711 result = float64(s) * scale 22712 result = result * 1.0e+308 22713 __47: 22714 ; 22715 goto __43 22716 __42: 22717 if !(e >= 342) { 22718 goto __48 22719 } 22720 if !(esign < 0) { 22721 goto __50 22722 } 22723 result = 0.0 * float64(s) 22724 goto __51 22725 __50: 22726 result = libc.Float64(1e308) * libc.Float64(1e308) * float64(s) 22727 __51: 22728 ; 22729 goto __49 22730 __48: 22731 __52: 22732 if !(e%22 != 0) { 22733 goto __53 22734 } 22735 scale = scale * 1.0e+1 22736 e = e - 1 22737 goto __52 22738 __53: 22739 ; 22740 __54: 22741 if !(e > 0) { 22742 goto __55 22743 } 22744 scale = scale * 1.0e+22 22745 e = e - 22 22746 goto __54 22747 __55: 22748 ; 22749 if !(esign < 0) { 22750 goto __56 22751 } 22752 result = float64(s) / scale 22753 goto __57 22754 __56: 22755 result = float64(s) * scale 22756 __57: 22757 ; 22758 __49: 22759 ; 22760 __43: 22761 ; 22762 goto __41 22763 __40: 22764 result = float64(s) 22765 __41: 22766 ; 22767 __33: 22768 ; 22769 *(*float64)(unsafe.Pointer(pResult)) = result 22770 22771 return libc.Bool32(z >= zEnd && nDigits > 0 && eValid != 0 && nonNum == 0) 22772 } 22773 22774 func tointegerFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22775 bp := tls.Alloc(24) 22776 defer tls.Free(24) 22777 22778 _ = argc 22779 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 22780 case SQLITE_FLOAT: 22781 { 22782 var rVal float64 = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 22783 var iVal sqlite3_int64 = sqlite3_int64(rVal) 22784 if rVal == float64(iVal) { 22785 sqlite3.Xsqlite3_result_int64(tls, context, iVal) 22786 } 22787 break 22788 22789 } 22790 case SQLITE_INTEGER: 22791 { 22792 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22793 break 22794 22795 } 22796 case SQLITE_BLOB: 22797 { 22798 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 22799 if zBlob != 0 { 22800 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22801 if uint64(nBlob) == uint64(unsafe.Sizeof(sqlite3_int64(0))) { 22802 if 0 != 0 { 22803 var i int32 22804 22805 for i = 0; uint64(i) < uint64(unsafe.Sizeof(sqlite3_int64(0))); i++ { 22806 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(sqlite3_int64(0)))-uint64(1)-uint64(i)))) 22807 } 22808 libc.Xmemcpy(tls, bp+8, bp, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 22809 } else { 22810 libc.Xmemcpy(tls, bp+8, zBlob, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 22811 } 22812 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))) 22813 } 22814 } 22815 break 22816 22817 } 22818 case SQLITE_TEXT: 22819 { 22820 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22821 if zStr != 0 { 22822 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22823 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) { 22824 if !(totypeAtoi64(tls, zStr, bp+16, nStr) != 0) { 22825 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 22826 } 22827 } 22828 } 22829 break 22830 22831 } 22832 default: 22833 { 22834 break 22835 22836 } 22837 } 22838 } 22839 22840 func torealFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22841 bp := tls.Alloc(24) 22842 defer tls.Free(24) 22843 22844 _ = argc 22845 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 22846 case SQLITE_FLOAT: 22847 { 22848 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22849 break 22850 22851 } 22852 case SQLITE_INTEGER: 22853 { 22854 var iVal sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 22855 var rVal float64 = float64(iVal) 22856 if iVal == sqlite3_int64(rVal) { 22857 sqlite3.Xsqlite3_result_double(tls, context, rVal) 22858 } 22859 break 22860 22861 } 22862 case SQLITE_BLOB: 22863 { 22864 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 22865 if zBlob != 0 { 22866 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22867 if uint64(nBlob) == uint64(unsafe.Sizeof(float64(0))) { 22868 if 1 != 0 { 22869 var i int32 22870 22871 for i = 0; uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 22872 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(1)-uint64(i)))) 22873 } 22874 libc.Xmemcpy(tls, bp+8, bp, uint64(unsafe.Sizeof(float64(0)))) 22875 } else { 22876 libc.Xmemcpy(tls, bp+8, zBlob, uint64(unsafe.Sizeof(float64(0)))) 22877 } 22878 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 8))) 22879 } 22880 } 22881 break 22882 22883 } 22884 case SQLITE_TEXT: 22885 { 22886 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22887 if zStr != 0 { 22888 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22889 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr + uintptr(nStr-1)))) != 0) { 22890 if totypeAtoF(tls, zStr, bp+16, nStr) != 0 { 22891 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 16))) 22892 return 22893 } 22894 } 22895 } 22896 break 22897 22898 } 22899 default: 22900 { 22901 break 22902 22903 } 22904 } 22905 } 22906 22907 func sqlite3_totype_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 22908 var rc int32 = SQLITE_OK 22909 _ = pApi 22910 22911 _ = pzErrMsg 22912 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8431, 1, 22913 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 22914 *(*uintptr)(unsafe.Pointer(&struct { 22915 f func(*libc.TLS, uintptr, int32, uintptr) 22916 }{tointegerFunc})), uintptr(0), uintptr(0)) 22917 if rc == SQLITE_OK { 22918 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8441, 1, 22919 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 22920 *(*uintptr)(unsafe.Pointer(&struct { 22921 f func(*libc.TLS, uintptr, int32, uintptr) 22922 }{torealFunc})), uintptr(0), uintptr(0)) 22923 } 22924 return rc 22925 } 22926 22927 type UnionCsr1 = struct { 22928 Fbase sqlite3_vtab_cursor 22929 FpStmt uintptr 22930 FiMaxRowid sqlite3_int64 22931 FiTab int32 22932 F__ccgo_pad1 [4]byte 22933 } 22934 22935 type UnionCsr = UnionCsr1 22936 type UnionTab1 = struct { 22937 Fbase sqlite3_vtab 22938 Fdb uintptr 22939 FbSwarm int32 22940 FiPK int32 22941 FnSrc int32 22942 F__ccgo_pad1 [4]byte 22943 FaSrc uintptr 22944 FbHasContext int32 22945 F__ccgo_pad2 [4]byte 22946 FzSourceStr uintptr 22947 FpNotFound uintptr 22948 FpOpenClose uintptr 22949 FpClosable uintptr 22950 FnOpen int32 22951 FnMaxOpen int32 22952 } 22953 22954 type UnionTab = UnionTab1 22955 type UnionSrc1 = struct { 22956 FzDb uintptr 22957 FzTab uintptr 22958 FiMin sqlite3_int64 22959 FiMax sqlite3_int64 22960 FzFile uintptr 22961 FzContext uintptr 22962 FnUser int32 22963 F__ccgo_pad1 [4]byte 22964 Fdb uintptr 22965 FpNextClosable uintptr 22966 } 22967 22968 type UnionSrc = UnionSrc1 22969 22970 func unionMalloc(tls *libc.TLS, pRc uintptr, nByte sqlite3_int64) uintptr { 22971 var pRet uintptr 22972 22973 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 22974 pRet = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 22975 if pRet != 0 { 22976 libc.Xmemset(tls, pRet, 0, size_t(nByte)) 22977 } else { 22978 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 22979 } 22980 } else { 22981 pRet = uintptr(0) 22982 } 22983 return pRet 22984 } 22985 22986 func unionStrdup(tls *libc.TLS, pRc uintptr, zIn uintptr) uintptr { 22987 var zRet uintptr = uintptr(0) 22988 if zIn != 0 { 22989 var nByte sqlite3_int64 = sqlite3_int64(libc.Xstrlen(tls, zIn) + uint64(1)) 22990 zRet = unionMalloc(tls, pRc, nByte) 22991 if zRet != 0 { 22992 libc.Xmemcpy(tls, zRet, zIn, size_t(nByte)) 22993 } 22994 } 22995 return zRet 22996 } 22997 22998 func unionDequote(tls *libc.TLS, z uintptr) { 22999 if z != 0 { 23000 var q int8 = *(*int8)(unsafe.Pointer(z)) 23001 23002 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 23003 var iIn int32 = 1 23004 var iOut int32 = 0 23005 if int32(q) == '[' { 23006 q = int8(']') 23007 } 23008 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 23009 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 23010 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 23011 iIn++ 23012 break 23013 } else { 23014 iIn = iIn + 2 23015 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 23016 } 23017 } else { 23018 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 23019 } 23020 } 23021 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 23022 } 23023 } 23024 } 23025 23026 func unionPrepare(tls *libc.TLS, pRc uintptr, db uintptr, zSql uintptr, pzErr uintptr) uintptr { 23027 bp := tls.Alloc(16) 23028 defer tls.Free(16) 23029 23030 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 23031 23032 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23033 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 23034 if rc != SQLITE_OK { 23035 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8448, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 23036 *(*int32)(unsafe.Pointer(pRc)) = rc 23037 } 23038 } 23039 return *(*uintptr)(unsafe.Pointer(bp + 8)) 23040 } 23041 23042 func unionPreparePrintf(tls *libc.TLS, pRc uintptr, pzErr uintptr, db uintptr, zFmt uintptr, va uintptr) uintptr { 23043 var pRet uintptr = uintptr(0) 23044 var zSql uintptr 23045 var ap va_list 23046 _ = ap 23047 ap = va 23048 23049 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 23050 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23051 if zSql == uintptr(0) { 23052 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 23053 } else { 23054 pRet = unionPrepare(tls, pRc, db, zSql, pzErr) 23055 } 23056 } 23057 sqlite3.Xsqlite3_free(tls, zSql) 23058 23059 _ = ap 23060 return pRet 23061 } 23062 23063 func unionFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr, pzErr uintptr) { 23064 bp := tls.Alloc(8) 23065 defer tls.Free(8) 23066 23067 var db uintptr = sqlite3.Xsqlite3_db_handle(tls, pStmt) 23068 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 23069 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23070 *(*int32)(unsafe.Pointer(pRc)) = rc 23071 if rc != 0 { 23072 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 23073 } 23074 } 23075 } 23076 23077 func unionInvokeOpenClose(tls *libc.TLS, pTab uintptr, pSrc uintptr, bClose int32, pzErr uintptr) int32 { 23078 bp := tls.Alloc(8) 23079 defer tls.Free(8) 23080 23081 var rc int32 = SQLITE_OK 23082 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 23083 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 23084 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23085 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 23086 } 23087 sqlite3.Xsqlite3_bind_int(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2+(*UnionTab)(unsafe.Pointer(pTab)).FbHasContext, bClose) 23088 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 23089 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose)) { 23090 if pzErr != 0 { 23091 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 23092 } 23093 } 23094 } 23095 return rc 23096 } 23097 23098 func unionCloseSources(tls *libc.TLS, pTab uintptr, nMax int32) { 23099 for (*UnionTab)(unsafe.Pointer(pTab)).FpClosable != 0 && (*UnionTab)(unsafe.Pointer(pTab)).FnOpen > nMax { 23100 var p uintptr 23101 var pp uintptr 23102 for pp = pTab + 88; (*UnionSrc)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNextClosable != 0; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 23103 } 23104 p = *(*uintptr)(unsafe.Pointer(pp)) 23105 23106 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(p)).Fdb) 23107 (*UnionSrc)(unsafe.Pointer(p)).Fdb = uintptr(0) 23108 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 23109 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen-- 23110 unionInvokeOpenClose(tls, pTab, p, 1, uintptr(0)) 23111 } 23112 } 23113 23114 func unionDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 23115 if pVtab != 0 { 23116 var pTab uintptr = pVtab 23117 var i int32 23118 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23119 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 23120 var bHaveSrcDb int32 = libc.Bool32((*UnionSrc)(unsafe.Pointer(pSrc)).Fdb != uintptr(0)) 23121 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23122 if bHaveSrcDb != 0 { 23123 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 23124 } 23125 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb) 23126 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab) 23127 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile) 23128 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext) 23129 } 23130 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 23131 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 23132 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) 23133 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc) 23134 sqlite3.Xsqlite3_free(tls, pTab) 23135 } 23136 return SQLITE_OK 23137 } 23138 23139 func unionIsIntkeyTable(tls *libc.TLS, db uintptr, pSrc uintptr, pzErr uintptr) int32 { 23140 bp := tls.Alloc(36) 23141 defer tls.Free(36) 23142 23143 *(*int32)(unsafe.Pointer(bp + 32)) = 0 23144 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 23145 var rc int32 23146 23147 sqlite3.Xsqlite3_table_column_metadata(tls, 23148 db, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, ts+8462, bp+24, uintptr(0), uintptr(0), bp+32, uintptr(0)) 23149 rc = sqlite3.Xsqlite3_errcode(tls, db) 23150 if rc == SQLITE_ERROR || 23151 rc == SQLITE_OK && (!(*(*int32)(unsafe.Pointer(bp + 32)) != 0) || sqlite3.Xsqlite3_stricmp(tls, ts+8470, *(*uintptr)(unsafe.Pointer(bp + 24))) != 0) { 23152 rc = SQLITE_ERROR 23153 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8478, 23154 libc.VaList(bp, func() uintptr { 23155 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23156 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 23157 } 23158 return ts + 584 23159 }(), 23160 func() uintptr { 23161 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23162 return ts + 8506 23163 } 23164 return ts + 584 23165 }(), 23166 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 23167 } 23168 return rc 23169 } 23170 23171 func unionSourceToStr(tls *libc.TLS, pRc uintptr, pTab uintptr, pSrc uintptr, pzErr uintptr) uintptr { 23172 bp := tls.Alloc(4) 23173 defer tls.Free(4) 23174 23175 var zRet uintptr = uintptr(0) 23176 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23177 var db uintptr = func() uintptr { 23178 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23179 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 23180 } 23181 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23182 }() 23183 *(*int32)(unsafe.Pointer(bp)) = unionIsIntkeyTable(tls, db, pSrc, pzErr) 23184 var pStmt uintptr = unionPrepare(tls, bp, db, 23185 ts+8508, pzErr) 23186 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23187 sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, -1, uintptr(0)) 23188 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, -1, uintptr(0)) 23189 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23190 var z uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23191 zRet = unionStrdup(tls, bp, z) 23192 } 23193 unionFinalize(tls, bp, pStmt, pzErr) 23194 } 23195 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp)) 23196 } 23197 23198 return zRet 23199 } 23200 23201 func unionSourceCheck(tls *libc.TLS, pTab uintptr, pzErr uintptr) int32 { 23202 bp := tls.Alloc(4) 23203 defer tls.Free(4) 23204 23205 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23206 var z0 uintptr = uintptr(0) 23207 var i int32 23208 23209 z0 = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, pzErr) 23210 for i = 1; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23211 var z uintptr = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc+uintptr(i)*72, pzErr) 23212 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && sqlite3.Xsqlite3_stricmp(tls, z, z0) != 0 { 23213 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 23214 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 23215 } 23216 sqlite3.Xsqlite3_free(tls, z) 23217 } 23218 sqlite3.Xsqlite3_free(tls, z0) 23219 23220 return *(*int32)(unsafe.Pointer(bp)) 23221 } 23222 23223 func unionOpenDatabaseInner(tls *libc.TLS, pTab uintptr, pSrc uintptr, pzErr uintptr) int32 { 23224 bp := tls.Alloc(16) 23225 defer tls.Free(16) 23226 23227 var rc int32 23228 23229 rc = unionInvokeOpenClose(tls, pTab, pSrc, 0, pzErr) 23230 if rc != SQLITE_OK { 23231 return rc 23232 } 23233 23234 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 23235 if rc == SQLITE_OK { 23236 return rc 23237 } 23238 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 23239 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23240 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 23241 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 23242 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23243 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 23244 } 23245 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 23246 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound)) { 23247 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 23248 return rc 23249 } 23250 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 23251 } 23252 if rc != SQLITE_OK { 23253 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_errmsg(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb))) 23254 } 23255 return rc 23256 } 23257 23258 var openFlags int32 = SQLITE_OPEN_READONLY | SQLITE_OPEN_URI 23259 23260 func unionOpenDatabase(tls *libc.TLS, pTab uintptr, iSrc int32, pzErr uintptr) int32 { 23261 bp := tls.Alloc(4) 23262 defer tls.Free(4) 23263 23264 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23265 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iSrc)*72 23266 23267 if (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb == uintptr(0) { 23268 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen-1) 23269 *(*int32)(unsafe.Pointer(bp)) = unionOpenDatabaseInner(tls, pTab, pSrc, pzErr) 23270 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23271 var z uintptr = unionSourceToStr(tls, bp, pTab, pSrc, pzErr) 23272 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23273 if (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr == uintptr(0) { 23274 (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr = z 23275 } else { 23276 if sqlite3.Xsqlite3_stricmp(tls, z, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) != 0 { 23277 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 23278 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 23279 } 23280 sqlite3.Xsqlite3_free(tls, z) 23281 } 23282 } 23283 } 23284 23285 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23286 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 23287 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 23288 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen++ 23289 } else { 23290 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23291 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 23292 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 23293 } 23294 } 23295 23296 return *(*int32)(unsafe.Pointer(bp)) 23297 } 23298 23299 func unionIncrRefcount(tls *libc.TLS, pTab uintptr, iTab int32) { 23300 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23301 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iTab)*72 23302 23303 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 23304 var pp uintptr 23305 for pp = pTab + 88; *(*uintptr)(unsafe.Pointer(pp)) != pSrc; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 23306 } 23307 *(*uintptr)(unsafe.Pointer(pp)) = (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable 23308 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = uintptr(0) 23309 } 23310 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser++ 23311 } 23312 } 23313 23314 func unionFinalizeCsrStmt(tls *libc.TLS, pCsr uintptr) int32 { 23315 var rc int32 = SQLITE_OK 23316 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 23317 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 23318 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 23319 rc = sqlite3.Xsqlite3_finalize(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) 23320 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 23321 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23322 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser-- 23323 23324 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 23325 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 23326 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 23327 } 23328 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen) 23329 } 23330 } 23331 return rc 23332 } 23333 23334 func union_isspace(tls *libc.TLS, c int8) int32 { 23335 return libc.Bool32(int32(c) == ' ' || int32(c) == '\n' || int32(c) == '\r' || int32(c) == '\t') 23336 } 23337 23338 func union_isidchar(tls *libc.TLS, c int8) int32 { 23339 return libc.Bool32(int32(c) >= 'a' && int32(c) <= 'z' || int32(c) >= 'A' && int32(c) < 'Z' || int32(c) >= '0' && int32(c) <= '9') 23340 } 23341 23342 func unionConfigureVtab(tls *libc.TLS, pRc uintptr, pTab uintptr, pStmt uintptr, nArg int32, azArg uintptr, pzErr uintptr) { 23343 bp := tls.Alloc(68) 23344 defer tls.Free(68) 23345 23346 *(*int32)(unsafe.Pointer(bp + 64)) = *(*int32)(unsafe.Pointer(pRc)) 23347 var i int32 23348 if *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK { 23349 (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext = libc.Bool32(sqlite3.Xsqlite3_column_count(tls, pStmt) > 4) 23350 } 23351 for i = 0; *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK && i < nArg; i++ { 23352 var zArg uintptr = unionStrdup(tls, bp+64, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8))) 23353 if zArg != 0 { 23354 var nOpt int32 = 0 23355 var zOpt uintptr 23356 var zVal uintptr 23357 23358 unionDequote(tls, zArg) 23359 zOpt = zArg 23360 for union_isspace(tls, *(*int8)(unsafe.Pointer(zOpt))) != 0 { 23361 zOpt++ 23362 } 23363 zVal = zOpt 23364 if int32(*(*int8)(unsafe.Pointer(zVal))) == ':' { 23365 zVal++ 23366 } 23367 for union_isidchar(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 23368 zVal++ 23369 } 23370 nOpt = int32((int64(zVal) - int64(zOpt)) / 1) 23371 23372 for union_isspace(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 23373 zVal++ 23374 } 23375 if int32(*(*int8)(unsafe.Pointer(zVal))) == '=' { 23376 *(*int8)(unsafe.Pointer(zOpt + uintptr(nOpt))) = int8(0) 23377 zVal++ 23378 for union_isspace(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 23379 zVal++ 23380 } 23381 zVal = unionStrdup(tls, bp+64, zVal) 23382 if zVal != 0 { 23383 unionDequote(tls, zVal) 23384 if int32(*(*int8)(unsafe.Pointer(zOpt))) == ':' { 23385 var iParam int32 = sqlite3.Xsqlite3_bind_parameter_index(tls, pStmt, zOpt) 23386 if iParam == 0 { 23387 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23388 ts+8621, libc.VaList(bp, zOpt)) 23389 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23390 } else { 23391 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3_bind_text(tls, pStmt, iParam, zVal, -1, libc.UintptrFromInt32(-1)) 23392 } 23393 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8658, 7) { 23394 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = libc.Xatoi(tls, zVal) 23395 if (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen <= 0 { 23396 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8666, 0) 23397 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23398 } 23399 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8699, 7) { 23400 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 23401 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23402 ts+8707, 0) 23403 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23404 } else { 23405 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23406 ts+8745, libc.VaList(bp+8, zVal, func() uintptr { 23407 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23408 return ts + 8762 23409 } 23410 return ts + 584 23411 }())) 23412 } 23413 } else if nOpt == 9 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8765, 9) { 23414 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 23415 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23416 ts+8775, 0) 23417 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23418 } else { 23419 (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23420 ts+8815, libc.VaList(bp+24, zVal, func() uintptr { 23421 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23422 return ts + 8762 23423 } 23424 return ts + 584 23425 }())) 23426 } 23427 } else { 23428 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8834, libc.VaList(bp+40, zOpt)) 23429 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23430 } 23431 sqlite3.Xsqlite3_free(tls, zVal) 23432 } 23433 } else { 23434 if i == 0 && nArg == 1 { 23435 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23436 ts+8869, libc.VaList(bp+48, zArg)) 23437 } else { 23438 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8884, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)))) 23439 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23440 } 23441 } 23442 sqlite3.Xsqlite3_free(tls, zArg) 23443 } 23444 } 23445 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 64)) 23446 } 23447 23448 func unionConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 23449 bp := tls.Alloc(44) 23450 defer tls.Free(44) 23451 23452 var pTab uintptr = uintptr(0) 23453 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 23454 var bSwarm int32 = func() int32 { 23455 if pAux == uintptr(0) { 23456 return 0 23457 } 23458 return 1 23459 }() 23460 var zVtab uintptr = func() uintptr { 23461 if bSwarm != 0 { 23462 return ts + 8911 23463 } 23464 return ts + 8921 23465 }() 23466 23467 if sqlite3.Xsqlite3_stricmp(tls, ts+8931, *(*uintptr)(unsafe.Pointer(argv + 1*8))) != 0 { 23468 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8936, libc.VaList(bp, zVtab)) 23469 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23470 } else if argc < 4 || argc > 4 && bSwarm == 0 { 23471 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8977, libc.VaList(bp+8, zVtab)) 23472 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23473 } else { 23474 var nAlloc int32 = 0 23475 var pStmt uintptr = uintptr(0) 23476 var zArg uintptr = unionStrdup(tls, bp+40, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 23477 23478 unionDequote(tls, zArg) 23479 pStmt = unionPreparePrintf(tls, bp+40, pzErr, db, 23480 ts+9010, libc.VaList(bp+16, zArg)) 23481 23482 pTab = unionMalloc(tls, bp+40, int64(unsafe.Sizeof(UnionTab{}))) 23483 if pTab != 0 { 23484 (*UnionTab)(unsafe.Pointer(pTab)).Fdb = db 23485 (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm = bSwarm 23486 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = SWARMVTAB_MAX_OPEN 23487 } 23488 23489 if bSwarm != 0 { 23490 unionConfigureVtab(tls, bp+40, pTab, pStmt, argc-4, argv+4*8, pzErr) 23491 } 23492 23493 for *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23494 var zDb uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23495 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 23496 var iMin sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 2) 23497 var iMax sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 3) 23498 var pSrc uintptr 23499 23500 if nAlloc <= (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 23501 var nNew int32 23502 if nAlloc != 0 { 23503 nNew = nAlloc * 2 23504 } else { 23505 nNew = 8 23506 } 23507 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, 23508 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, uint64(nNew)*uint64(unsafe.Sizeof(UnionSrc{}))) 23509 if aNew == uintptr(0) { 23510 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_NOMEM 23511 break 23512 } else { 23513 libc.Xmemset(tls, aNew+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*72, 0, uint64(nNew-(*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*uint64(unsafe.Sizeof(UnionSrc{}))) 23514 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc = aNew 23515 nAlloc = nNew 23516 } 23517 } 23518 23519 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 { 23520 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9040, 0) 23521 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23522 } 23523 23524 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23525 pSrc = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(libc.PostIncInt32(&(*UnionTab)(unsafe.Pointer(pTab)).FnSrc, 1))*72 23526 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab = unionStrdup(tls, bp+40, zTab) 23527 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin = iMin 23528 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax = iMax 23529 if bSwarm != 0 { 23530 (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile = unionStrdup(tls, bp+40, zDb) 23531 } else { 23532 (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb = unionStrdup(tls, bp+40, zDb) 23533 } 23534 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23535 var zContext uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 4) 23536 (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext = unionStrdup(tls, bp+40, zContext) 23537 } 23538 } 23539 } 23540 unionFinalize(tls, bp+40, pStmt, pzErr) 23541 pStmt = uintptr(0) 23542 23543 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FnSrc == 0 { 23544 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9067, 0) 23545 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23546 } 23547 23548 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23549 if bSwarm != 0 { 23550 *(*int32)(unsafe.Pointer(bp + 40)) = unionOpenDatabase(tls, pTab, 0, pzErr) 23551 } else { 23552 *(*int32)(unsafe.Pointer(bp + 40)) = unionSourceCheck(tls, pTab, pzErr) 23553 } 23554 } 23555 23556 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23557 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc 23558 var tdb uintptr = func() uintptr { 23559 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23560 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 23561 } 23562 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23563 }() 23564 pStmt = unionPreparePrintf(tls, bp+40, pzErr, tdb, 23565 ts+9095, 23566 libc.VaList(bp+24, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb)) 23567 } 23568 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23569 var zDecl uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23570 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zDecl) 23571 (*UnionTab)(unsafe.Pointer(pTab)).FiPK = sqlite3.Xsqlite3_column_int(tls, pStmt, 1) 23572 } 23573 23574 unionFinalize(tls, bp+40, pStmt, pzErr) 23575 } 23576 23577 if *(*int32)(unsafe.Pointer(bp + 40)) != SQLITE_OK { 23578 unionDisconnect(tls, pTab) 23579 pTab = uintptr(0) 23580 } 23581 23582 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 23583 return *(*int32)(unsafe.Pointer(bp + 40)) 23584 } 23585 23586 func unionOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 23587 bp := tls.Alloc(4) 23588 defer tls.Free(4) 23589 23590 var pCsr uintptr 23591 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23592 _ = p 23593 pCsr = unionMalloc(tls, bp, int64(unsafe.Sizeof(UnionCsr{}))) 23594 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 23595 return *(*int32)(unsafe.Pointer(bp)) 23596 } 23597 23598 func unionClose(tls *libc.TLS, cur uintptr) int32 { 23599 var pCsr uintptr = cur 23600 unionFinalizeCsrStmt(tls, pCsr) 23601 sqlite3.Xsqlite3_free(tls, pCsr) 23602 return SQLITE_OK 23603 } 23604 23605 func doUnionNext(tls *libc.TLS, pCsr uintptr) int32 { 23606 bp := tls.Alloc(28) 23607 defer tls.Free(28) 23608 23609 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_OK 23610 23611 if sqlite3.Xsqlite3_step(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) != SQLITE_ROW { 23612 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 23613 *(*int32)(unsafe.Pointer(bp + 24)) = unionFinalizeCsrStmt(tls, pCsr) 23614 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23615 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab++ 23616 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 23617 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 23618 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid >= (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23619 *(*int32)(unsafe.Pointer(bp + 24)) = unionOpenDatabase(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab, pTab+16) 23620 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPreparePrintf(tls, bp+24, pTab+16, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb, 23621 ts+9273, 23622 libc.VaList(bp, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, 23623 func() uintptr { 23624 if (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax > (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid { 23625 return ts + 9305 23626 } 23627 return ts + 9322 23628 }(), 23629 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid)) 23630 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 23631 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 23632 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ROW 23633 } 23634 } 23635 } 23636 } 23637 } 23638 23639 return *(*int32)(unsafe.Pointer(bp + 24)) 23640 } 23641 23642 func unionNext(tls *libc.TLS, cur uintptr) int32 { 23643 var rc int32 23644 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_ROW { 23645 rc = doUnionNext(tls, cur) 23646 } 23647 return rc 23648 } 23649 23650 func unionColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 23651 var pCsr uintptr = cur 23652 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 23653 return SQLITE_OK 23654 } 23655 23656 func unionRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 23657 var pCsr uintptr = cur 23658 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, 0) 23659 return SQLITE_OK 23660 } 23661 23662 func unionEof(tls *libc.TLS, cur uintptr) int32 { 23663 var pCsr uintptr = cur 23664 return libc.Bool32((*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 23665 } 23666 23667 func unionFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 23668 bp := tls.Alloc(108) 23669 defer tls.Free(108) 23670 23671 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 23672 var pCsr uintptr = pVtabCursor 23673 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 23674 var i int32 23675 var zSql uintptr = uintptr(0) 23676 var bZero int32 = 0 23677 23678 var iMin sqlite3_int64 = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 23679 var iMax sqlite3_int64 = int64(0xffffffff) | int64(0x7fffffff)<<32 23680 23681 _ = idxStr 23682 23683 if idxNum == SQLITE_INDEX_CONSTRAINT_EQ { 23684 iMin = libc.AssignInt64(&iMax, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 23685 } else { 23686 if idxNum&(SQLITE_INDEX_CONSTRAINT_LE|SQLITE_INDEX_CONSTRAINT_LT) != 0 { 23687 iMax = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 23688 if idxNum&SQLITE_INDEX_CONSTRAINT_LT != 0 { 23689 if iMax == int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) { 23690 bZero = 1 23691 } else { 23692 iMax-- 23693 } 23694 } 23695 } 23696 23697 if idxNum&(SQLITE_INDEX_CONSTRAINT_GE|SQLITE_INDEX_CONSTRAINT_GT) != 0 { 23698 iMin = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(argc-1)*8))) 23699 if idxNum&SQLITE_INDEX_CONSTRAINT_GT != 0 { 23700 if iMin == int64(0xffffffff)|int64(0x7fffffff)<<32 { 23701 bZero = 1 23702 } else { 23703 iMin++ 23704 } 23705 } 23706 } 23707 } 23708 23709 unionFinalizeCsrStmt(tls, pCsr) 23710 if bZero != 0 { 23711 return SQLITE_OK 23712 } 23713 23714 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23715 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 23716 if iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax || iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23717 continue 23718 } 23719 23720 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9326, libc.VaList(bp, zSql, func() uintptr { 23721 if zSql != 0 { 23722 return ts + 9360 23723 } 23724 return ts + 584 23725 }(), func() uintptr { 23726 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23727 return ts + 5624 23728 } 23729 return ts + 584 23730 }(), func() uintptr { 23731 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23732 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 23733 } 23734 return ts + 584 23735 }(), func() uintptr { 23736 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23737 return ts + 5626 23738 } 23739 return ts + 584 23740 }(), (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 23741 if zSql == uintptr(0) { 23742 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 23743 break 23744 } 23745 23746 if iMin == iMax { 23747 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9372, libc.VaList(bp+48, zSql, iMin)) 23748 } else { 23749 var zWhere uintptr = ts + 9392 23750 if iMin != int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) && iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23751 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9398, libc.VaList(bp+64, zSql, iMin)) 23752 zWhere = ts + 9419 23753 } 23754 if iMax != int64(0xffffffff)|int64(0x7fffffff)<<32 && iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax { 23755 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9423, libc.VaList(bp+80, zSql, zWhere, iMax)) 23756 } 23757 } 23758 23759 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23760 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab = i 23761 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid = iMax 23762 *(*int32)(unsafe.Pointer(bp + 104)) = unionOpenDatabase(tls, pTab, i, pTab+16) 23763 break 23764 } 23765 } 23766 23767 if zSql == uintptr(0) { 23768 return *(*int32)(unsafe.Pointer(bp + 104)) 23769 } else { 23770 var db uintptr = func() uintptr { 23771 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23772 return (*UnionSrc)(unsafe.Pointer((*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72)).Fdb 23773 } 23774 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23775 }() 23776 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPrepare(tls, bp+104, db, zSql, pTab+16) 23777 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 23778 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 23779 } 23780 sqlite3.Xsqlite3_free(tls, zSql) 23781 } 23782 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 23783 return *(*int32)(unsafe.Pointer(bp + 104)) 23784 } 23785 return unionNext(tls, pVtabCursor) 23786 } 23787 23788 func unionBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 23789 var pTab uintptr = tab 23790 var iEq int32 = -1 23791 var iLt int32 = -1 23792 var iGt int32 = -1 23793 var i int32 23794 23795 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 23796 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 23797 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) { 23798 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) { 23799 case SQLITE_INDEX_CONSTRAINT_EQ: 23800 iEq = i 23801 break 23802 fallthrough 23803 case SQLITE_INDEX_CONSTRAINT_LE: 23804 fallthrough 23805 case SQLITE_INDEX_CONSTRAINT_LT: 23806 iLt = i 23807 break 23808 fallthrough 23809 case SQLITE_INDEX_CONSTRAINT_GE: 23810 fallthrough 23811 case SQLITE_INDEX_CONSTRAINT_GT: 23812 iGt = i 23813 break 23814 } 23815 } 23816 } 23817 23818 if iEq >= 0 { 23819 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1) 23820 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags = SQLITE_INDEX_SCAN_UNIQUE 23821 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 23822 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SQLITE_INDEX_CONSTRAINT_EQ 23823 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).FargvIndex = 1 23824 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).Fomit = uint8(1) 23825 } else { 23826 var iCons int32 = 1 23827 var idxNum int32 = 0 23828 var nRow sqlite3_int64 = int64(1000000) 23829 if iLt >= 0 { 23830 nRow = nRow / int64(2) 23831 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 23832 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).Fomit = uint8(1) 23833 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iLt)*12)).Fop) 23834 } 23835 if iGt >= 0 { 23836 nRow = nRow / int64(2) 23837 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 23838 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).Fomit = uint8(1) 23839 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iGt)*12)).Fop) 23840 } 23841 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = nRow 23842 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 * float64(nRow) 23843 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 23844 } 23845 23846 return SQLITE_OK 23847 } 23848 23849 func createUnionVtab(tls *libc.TLS, db uintptr) int32 { 23850 var rc int32 23851 23852 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8921, uintptr(unsafe.Pointer(&unionModule)), uintptr(0)) 23853 if rc == SQLITE_OK { 23854 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8911, uintptr(unsafe.Pointer(&unionModule)), db) 23855 } 23856 return rc 23857 } 23858 23859 var unionModule = sqlite3_module{ 23860 FxCreate: 0, 23861 FxConnect: 0, 23862 FxBestIndex: 0, 23863 FxDisconnect: 0, 23864 FxDestroy: 0, 23865 FxOpen: 0, 23866 FxClose: 0, 23867 FxFilter: 0, 23868 FxNext: 0, 23869 FxEof: 0, 23870 FxColumn: 0, 23871 FxRowid: 0, 23872 } 23873 23874 func sqlite3_unionvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 23875 var rc int32 = SQLITE_OK 23876 _ = pApi 23877 23878 _ = pzErrMsg 23879 rc = createUnionVtab(tls, db) 23880 return rc 23881 } 23882 23883 type wholenumber_cursor1 = struct { 23884 Fbase sqlite3_vtab_cursor 23885 FiValue sqlite3_int64 23886 FmxValue sqlite3_int64 23887 } 23888 23889 type wholenumber_cursor = wholenumber_cursor1 23890 23891 func wholenumberConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 23892 var pNew uintptr 23893 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 23894 if pNew == uintptr(0) { 23895 return SQLITE_NOMEM 23896 } 23897 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+9441) 23898 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 23899 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 23900 return SQLITE_OK 23901 } 23902 23903 func wholenumberDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 23904 sqlite3.Xsqlite3_free(tls, pVtab) 23905 return SQLITE_OK 23906 } 23907 23908 func wholenumberOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 23909 var pCur uintptr 23910 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(wholenumber_cursor{}))) 23911 if pCur == uintptr(0) { 23912 return SQLITE_NOMEM 23913 } 23914 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(wholenumber_cursor{}))) 23915 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 23916 return SQLITE_OK 23917 } 23918 23919 func wholenumberClose(tls *libc.TLS, cur uintptr) int32 { 23920 sqlite3.Xsqlite3_free(tls, cur) 23921 return SQLITE_OK 23922 } 23923 23924 func wholenumberNext(tls *libc.TLS, cur uintptr) int32 { 23925 var pCur uintptr = cur 23926 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue++ 23927 return SQLITE_OK 23928 } 23929 23930 func wholenumberColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 23931 var pCur uintptr = cur 23932 sqlite3.Xsqlite3_result_int64(tls, ctx, (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue) 23933 return SQLITE_OK 23934 } 23935 23936 func wholenumberRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 23937 var pCur uintptr = cur 23938 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue 23939 return SQLITE_OK 23940 } 23941 23942 func wholenumberEof(tls *libc.TLS, cur uintptr) int32 { 23943 var pCur uintptr = cur 23944 return libc.Bool32((*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue || (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue == int64(0)) 23945 } 23946 23947 func wholenumberFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 23948 var pCur uintptr = pVtabCursor 23949 var v sqlite3_int64 23950 var i int32 = 0 23951 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = int64(1) 23952 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 23953 if idxNum&3 != 0 { 23954 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) + sqlite3_int64(idxNum&1) 23955 if v > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v <= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 23956 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = v 23957 } 23958 i++ 23959 } 23960 if idxNum&12 != 0 { 23961 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) - sqlite3_int64(idxNum>>2&1) 23962 if v >= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v < (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 23963 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = v 23964 } 23965 } 23966 return SQLITE_OK 23967 } 23968 23969 func wholenumberBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 23970 var i int32 23971 var idxNum int32 = 0 23972 var argvIdx int32 = 1 23973 var ltIdx int32 = -1 23974 var gtIdx int32 = -1 23975 var pConstraint uintptr 23976 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 23977 i = 0 23978 __1: 23979 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 23980 goto __3 23981 } 23982 { 23983 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 23984 goto __2 23985 } 23986 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GT { 23987 idxNum = idxNum | 1 23988 ltIdx = i 23989 } 23990 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GE { 23991 idxNum = idxNum | 2 23992 ltIdx = i 23993 } 23994 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 23995 idxNum = idxNum | 4 23996 gtIdx = i 23997 } 23998 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE { 23999 idxNum = idxNum | 8 24000 gtIdx = i 24001 } 24002 24003 } 24004 goto __2 24005 __2: 24006 i++ 24007 pConstraint += 12 24008 goto __1 24009 goto __3 24010 __3: 24011 ; 24012 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 24013 if ltIdx >= 0 { 24014 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).FargvIndex = libc.PostIncInt32(&argvIdx, 1) 24015 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).Fomit = uint8(1) 24016 } 24017 if gtIdx >= 0 { 24018 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).FargvIndex = argvIdx 24019 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).Fomit = uint8(1) 24020 } 24021 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 24022 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 24023 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 24024 } 24025 if idxNum&12 == 0 { 24026 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e99 24027 } else if idxNum&3 == 0 { 24028 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 24029 } else { 24030 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 24031 } 24032 return SQLITE_OK 24033 } 24034 24035 var wholenumberModule = sqlite3_module{ 24036 FxCreate: 0, 24037 FxConnect: 0, 24038 FxBestIndex: 0, 24039 FxDisconnect: 0, 24040 FxDestroy: 0, 24041 FxOpen: 0, 24042 FxClose: 0, 24043 FxFilter: 0, 24044 FxNext: 0, 24045 FxEof: 0, 24046 FxColumn: 0, 24047 FxRowid: 0, 24048 } 24049 24050 func sqlite3_wholenumber_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 24051 var rc int32 = SQLITE_OK 24052 _ = pApi 24053 24054 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+9463, uintptr(unsafe.Pointer(&wholenumberModule)), uintptr(0)) 24055 return rc 24056 } 24057 24058 func test_rbu_delta(tls *libc.TLS, pCtx uintptr, nArg int32, apVal uintptr) { 24059 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 24060 var pScript uintptr 24061 var i int32 24062 24063 pScript = tcl.XTcl_NewObj(tls) 24064 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 24065 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, ts+9475, -1)) 24066 for i = 0; i < nArg; i++ { 24067 var pIn uintptr = *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)) 24068 var z uintptr = sqlite3.Xsqlite3_value_text(tls, pIn) 24069 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, z, -1)) 24070 } 24071 24072 if TCL_OK == tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_GLOBAL_ONLY) { 24073 var z uintptr = tcl.XTcl_GetStringResult(tls, interp) 24074 sqlite3.Xsqlite3_result_text(tls, pCtx, z, -1, libc.UintptrFromInt32(-1)) 24075 } else { 24076 tcl.XTcl_BackgroundError(tls, interp) 24077 } 24078 24079 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 24080 var _objPtr uintptr = pScript 24081 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 24082 tcl.XTclFreeObj(tls, _objPtr) 24083 } 24084 } 24085 } 24086 24087 func test_sqlite3rbu_cmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24088 bp := tls.Alloc(496) 24089 defer tls.Free(496) 24090 24091 var ret int32 = TCL_OK 24092 var pRbu uintptr = clientData 24093 *(*[14]RbuCmd)(unsafe.Pointer(bp + 24)) = [14]RbuCmd{ 24094 {FzName: ts + 9485, FnArg: 2, FzUsage: ts + 584}, 24095 {FzName: ts + 9490, FnArg: 2, FzUsage: ts + 584}, 24096 {FzName: ts + 9496, FnArg: 2, FzUsage: ts + 584}, 24097 {FzName: ts + 9513, FnArg: 2, FzUsage: ts + 584}, 24098 {FzName: ts + 9523, FnArg: 3, FzUsage: ts + 9535}, 24099 {FzName: ts + 9539, FnArg: 2, FzUsage: ts + 584}, 24100 {FzName: ts + 9551, FnArg: 3, FzUsage: ts + 9554}, 24101 {FzName: ts + 9558, FnArg: 2, FzUsage: ts + 584}, 24102 {FzName: ts + 9564, FnArg: 2, FzUsage: ts + 584}, 24103 {FzName: ts + 9573, FnArg: 2, FzUsage: ts + 584}, 24104 {FzName: ts + 9588, FnArg: 3, FzUsage: ts + 9604}, 24105 {FzName: ts + 9610, FnArg: 2, FzUsage: ts + 584}, 24106 {FzName: ts + 9620, FnArg: 3, FzUsage: ts + 9535}, 24107 {}, 24108 } 24109 24110 if objc < 2 { 24111 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9631) 24112 return TCL_ERROR 24113 } 24114 ret = tcl.XTcl_GetIndexFromObjStruct(tls, 24115 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, int32(unsafe.Sizeof(RbuCmd{})), ts+9638, 0, bp+360) 24116 if ret != 0 { 24117 return TCL_ERROR 24118 } 24119 if objc != (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FnArg { 24120 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FzUsage) 24121 return TCL_ERROR 24122 } 24123 24124 switch *(*int32)(unsafe.Pointer(bp + 360)) { 24125 case 0: 24126 { 24127 var rc int32 = sqlite3.Xsqlite3rbu_step(tls, pRbu) 24128 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24129 break 24130 24131 } 24132 24133 case 9: 24134 fallthrough 24135 case 1: 24136 { 24137 *(*uintptr)(unsafe.Pointer(bp + 368)) = uintptr(0) 24138 var rc int32 24139 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 24140 if *(*int32)(unsafe.Pointer(bp + 360)) == 1 { 24141 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, bp+368) 24142 } else { 24143 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, uintptr(0)) 24144 } 24145 if rc == SQLITE_OK || rc == SQLITE_DONE { 24146 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24147 24148 } else { 24149 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24150 if *(*uintptr)(unsafe.Pointer(bp + 368)) != 0 { 24151 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, *(*uintptr)(unsafe.Pointer(bp + 368)), 0)) 24152 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 368))) 24153 } 24154 ret = TCL_ERROR 24155 } 24156 break 24157 24158 } 24159 24160 case 2: 24161 { 24162 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, 0) 24163 var rc int32 = sqlite3.Xsqlite3_create_function(tls, 24164 db, ts+9475, -1, SQLITE_UTF8, interp, *(*uintptr)(unsafe.Pointer(&struct { 24165 f func(*libc.TLS, uintptr, int32, uintptr) 24166 }{test_rbu_delta})), uintptr(0), uintptr(0)) 24167 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24168 ret = func() int32 { 24169 if rc == SQLITE_OK { 24170 return TCL_OK 24171 } 24172 return TCL_ERROR 24173 }() 24174 break 24175 24176 } 24177 24178 case 3: 24179 { 24180 var rc int32 = sqlite3.Xsqlite3rbu_savestate(tls, pRbu) 24181 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24182 ret = func() int32 { 24183 if rc == SQLITE_OK { 24184 return TCL_OK 24185 } 24186 return TCL_ERROR 24187 }() 24188 break 24189 24190 } 24191 24192 case 12: 24193 fallthrough 24194 case 4: 24195 { 24196 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 360)) == 12)) 24197 var rc int32 = sqlite3.Xsqlite3_exec(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), uintptr(0), uintptr(0), uintptr(0)) 24198 if rc != SQLITE_OK { 24199 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, db), -1)) 24200 ret = TCL_ERROR 24201 } 24202 break 24203 24204 } 24205 24206 case 5: 24207 { 24208 var pObj uintptr 24209 sqlite3.Xsqlite3rbu_bp_progress(tls, pRbu, bp+376, bp+380) 24210 24211 pObj = tcl.XTcl_NewObj(tls) 24212 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 376)))) 24213 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 380)))) 24214 tcl.XTcl_SetObjResult(tls, interp, pObj) 24215 break 24216 24217 } 24218 24219 case 6: 24220 { 24221 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+384) != 0 { 24222 ret = TCL_ERROR 24223 } else { 24224 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, *(*int32)(unsafe.Pointer(bp + 384))) 24225 if sqlite3TestMakePointerStr(tls, interp, bp+388, db) != 0 { 24226 ret = TCL_ERROR 24227 } else { 24228 tcl.XTcl_SetResult(tls, interp, bp+388, uintptr(1)) 24229 } 24230 } 24231 break 24232 24233 } 24234 case 7: 24235 { 24236 *(*[6]uintptr)(unsafe.Pointer(bp + 440)) = [6]uintptr{uintptr(0), ts + 9649, ts + 9653, ts + 9658, ts + 9669, ts + 9674} 24237 var eState int32 = sqlite3.Xsqlite3rbu_state(tls, pRbu) 24238 24239 tcl.XTcl_SetResult(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 440 + uintptr(eState)*8)), uintptr(0)) 24240 break 24241 24242 } 24243 case 8: 24244 { 24245 var nStep sqlite3_int64 = sqlite3.Xsqlite3rbu_progress(tls, pRbu) 24246 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nStep)) 24247 break 24248 24249 } 24250 24251 case 10: 24252 { 24253 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+488) != 0 { 24254 ret = TCL_ERROR 24255 } else { 24256 *(*sqlite3_int64)(unsafe.Pointer(bp + 488)) = sqlite3.Xsqlite3rbu_temp_size_limit(tls, pRbu, *(*sqlite3_int64)(unsafe.Pointer(bp + 488))) 24257 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 488)))) 24258 } 24259 break 24260 24261 } 24262 case 11: 24263 { 24264 var sz sqlite3_int64 = sqlite3.Xsqlite3rbu_temp_size(tls, pRbu) 24265 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sz)) 24266 break 24267 24268 } 24269 24270 default: 24271 break 24272 } 24273 24274 return ret 24275 } 24276 24277 type RbuCmd = struct { 24278 FzName uintptr 24279 FnArg int32 24280 F__ccgo_pad1 [4]byte 24281 FzUsage uintptr 24282 } 24283 24284 func test_sqlite3rbu(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24285 var pRbu uintptr = uintptr(0) 24286 var zCmd uintptr 24287 var zTarget uintptr 24288 var zRbu uintptr 24289 var zStateDb uintptr = uintptr(0) 24290 24291 if objc != 4 && objc != 5 { 24292 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9680) 24293 return TCL_ERROR 24294 } 24295 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24296 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 24297 zRbu = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 24298 if objc == 5 { 24299 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 24300 } 24301 24302 pRbu = sqlite3.Xsqlite3rbu_open(tls, zTarget, zRbu, zStateDb) 24303 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 24304 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 24305 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 24306 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24307 return TCL_OK 24308 } 24309 24310 func test_sqlite3rbu_vacuum(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24311 var pRbu uintptr = uintptr(0) 24312 var zCmd uintptr 24313 var zTarget uintptr 24314 var zStateDb uintptr = uintptr(0) 24315 24316 if objc != 3 && objc != 4 { 24317 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9713) 24318 return TCL_ERROR 24319 } 24320 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24321 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 24322 if objc == 4 { 24323 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 24324 } 24325 if zStateDb != 0 && int32(*(*int8)(unsafe.Pointer(zStateDb))) == 0 { 24326 zStateDb = uintptr(0) 24327 } 24328 24329 pRbu = sqlite3.Xsqlite3rbu_vacuum(tls, zTarget, zStateDb) 24330 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 24331 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 24332 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 24333 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24334 return TCL_OK 24335 } 24336 24337 func test_sqlite3rbu_create_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24338 var zName uintptr 24339 var zParent uintptr 24340 var rc int32 24341 24342 if objc != 3 && objc != 4 { 24343 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9739) 24344 return TCL_ERROR 24345 } 24346 24347 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 24348 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8))) 24349 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 24350 zParent = uintptr(0) 24351 } 24352 24353 rc = sqlite3.Xsqlite3rbu_create_vfs(tls, zName, zParent) 24354 if rc != SQLITE_OK { 24355 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24356 return TCL_ERROR 24357 } else if objc == 4 { 24358 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, zName) 24359 sqlite3.Xsqlite3_vfs_register(tls, pVfs, 1) 24360 } 24361 24362 tcl.XTcl_ResetResult(tls, interp) 24363 return TCL_OK 24364 } 24365 24366 func test_sqlite3rbu_destroy_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24367 var zName uintptr 24368 24369 if objc != 2 { 24370 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 24371 return TCL_ERROR 24372 } 24373 24374 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24375 sqlite3.Xsqlite3rbu_destroy_vfs(tls, zName) 24376 return TCL_OK 24377 } 24378 24379 func test_sqlite3rbu_internal_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24380 bp := tls.Alloc(16) 24381 defer tls.Free(16) 24382 24383 var db uintptr 24384 24385 if objc != 1 { 24386 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 24387 return TCL_ERROR 24388 } 24389 24390 db = sqlite3.Xsqlite3rbu_db(tls, uintptr(0), 0) 24391 if db != uintptr(0) { 24392 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9767, 0)) 24393 return TCL_ERROR 24394 } 24395 24396 return TCL_OK 24397 } 24398 24399 func SqliteRbu_Init(tls *libc.TLS, interp uintptr) int32 { 24400 var i int32 24401 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd))/uint64(unsafe.Sizeof(struct { 24402 FzName uintptr 24403 FxProc uintptr 24404 }{})); i++ { 24405 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd[i].FzName, aObjCmd[i].FxProc, uintptr(0), uintptr(0)) 24406 } 24407 return TCL_OK 24408 } 24409 24410 var aObjCmd = [5]struct { 24411 FzName uintptr 24412 FxProc uintptr 24413 }{ 24414 {FzName: ts + 9790, FxProc: 0}, 24415 {FzName: ts + 9801, FxProc: 0}, 24416 {FzName: ts + 9819, FxProc: 0}, 24417 {FzName: ts + 9841, FxProc: 0}, 24418 {FzName: ts + 9864, FxProc: 0}, 24419 } 24420 24421 type sqlite31 = sqlite32 24422 24423 type sqlite3_str = sqlite3_str1 24424 24425 type int_least8_t = int8 24426 type int_least16_t = int16 24427 type int_least32_t = int32 24428 type int_least64_t = int64 24429 24430 type uint_least8_t = uint8 24431 type uint_least16_t = uint16 24432 type uint_least32_t = uint32 24433 type uint_least64_t = uint64 24434 24435 type int_fast8_t = int32 24436 type int_fast16_t = int32 24437 type int_fast32_t = int32 24438 type int_fast64_t = int64 24439 24440 type uint_fast8_t = uint32 24441 type uint_fast16_t = uint32 24442 type uint_fast32_t = uint32 24443 type uint_fast64_t = uint64 24444 24445 type imaxdiv_t = struct { 24446 Fquot intmax_t 24447 Frem intmax_t 24448 } 24449 24450 type Hash1 = struct { 24451 Fhtsize uint32 24452 Fcount uint32 24453 Ffirst uintptr 24454 Fht uintptr 24455 } 24456 24457 type Hash = Hash1 24458 type HashElem1 = struct { 24459 Fnext uintptr 24460 Fprev uintptr 24461 Fdata uintptr 24462 FpKey uintptr 24463 } 24464 24465 type HashElem = HashElem1 24466 24467 type _ht = struct { 24468 Fcount uint32 24469 F__ccgo_pad1 [4]byte 24470 Fchain uintptr 24471 } 24472 24473 type max_align_t = struct { 24474 F__max_align1 int64 24475 F__max_align2 float64 24476 } 24477 type i16 = int16_t 24478 type i8 = int8_t 24479 24480 type tRowcnt = u32 24481 24482 type LogEst = int16_t 24483 24484 type uptr = uintptr_t 24485 24486 type BusyHandler1 = struct { 24487 FxBusyHandler uintptr 24488 FpBusyArg uintptr 24489 FnBusy int32 24490 F__ccgo_pad1 [4]byte 24491 } 24492 24493 type BusyHandler = BusyHandler1 24494 24495 type AggInfo1 = struct { 24496 FdirectMode u8 24497 FuseSortingIdx u8 24498 F__ccgo_pad1 [2]byte 24499 FsortingIdx int32 24500 FsortingIdxPTab int32 24501 FnSortingColumn int32 24502 FmnReg int32 24503 FmxReg int32 24504 FpGroupBy uintptr 24505 FaCol uintptr 24506 FnColumn int32 24507 FnAccumulator int32 24508 FaFunc uintptr 24509 FnFunc int32 24510 FselId u32 24511 } 24512 24513 type AggInfo = AggInfo1 24514 type AuthContext1 = struct { 24515 FzAuthContext uintptr 24516 FpParse uintptr 24517 } 24518 24519 type AuthContext = AuthContext1 24520 type AutoincInfo1 = struct { 24521 FpNext uintptr 24522 FpTab uintptr 24523 FiDb int32 24524 FregCtr int32 24525 } 24526 24527 type AutoincInfo = AutoincInfo1 24528 type CollSeq1 = struct { 24529 FzName uintptr 24530 Fenc u8 24531 F__ccgo_pad1 [7]byte 24532 FpUser uintptr 24533 FxCmp uintptr 24534 FxDel uintptr 24535 } 24536 24537 type CollSeq = CollSeq1 24538 type Column1 = struct { 24539 FzCnName uintptr 24540 FnotNull uint8 24541 F__ccgo_pad1 [1]byte 24542 Faffinity int8 24543 FszEst u8 24544 FhName u8 24545 F__ccgo_pad2 [1]byte 24546 FiDflt u16 24547 FcolFlags u16 24548 F__ccgo_pad3 [6]byte 24549 } 24550 24551 type Column = Column1 24552 type Cte1 = struct { 24553 FzName uintptr 24554 FpCols uintptr 24555 FpSelect uintptr 24556 FzCteErr uintptr 24557 FpUse uintptr 24558 FeM10d u8 24559 F__ccgo_pad1 [7]byte 24560 } 24561 24562 type Cte = Cte1 24563 type CteUse1 = struct { 24564 FnUse int32 24565 FaddrM9e int32 24566 FregRtn int32 24567 FiCur int32 24568 FnRowEst LogEst 24569 FeM10d u8 24570 F__ccgo_pad1 [1]byte 24571 } 24572 24573 type CteUse = CteUse1 24574 type Db1 = struct { 24575 FzDbSName uintptr 24576 FpBt uintptr 24577 Fsafety_level u8 24578 FbSyncSet u8 24579 F__ccgo_pad1 [6]byte 24580 FpSchema uintptr 24581 } 24582 24583 type Db = Db1 24584 type DbFixer1 = struct { 24585 FpParse uintptr 24586 Fw Walker 24587 FpSchema uintptr 24588 FbTemp u8 24589 F__ccgo_pad1 [7]byte 24590 FzDb uintptr 24591 FzType uintptr 24592 FpName uintptr 24593 } 24594 24595 type DbFixer = DbFixer1 24596 type Schema1 = struct { 24597 Fschema_cookie int32 24598 FiGeneration int32 24599 FtblHash Hash 24600 FidxHash Hash 24601 FtrigHash Hash 24602 FfkeyHash Hash 24603 FpSeqTab uintptr 24604 Ffile_format u8 24605 Fenc u8 24606 FschemaFlags u16 24607 Fcache_size int32 24608 } 24609 24610 type Schema = Schema1 24611 type Expr1 = struct { 24612 Fop u8 24613 FaffExpr int8 24614 Fop2 u8 24615 F__ccgo_pad1 [1]byte 24616 Fflags u32 24617 Fu struct{ FzToken uintptr } 24618 FpLeft uintptr 24619 FpRight uintptr 24620 Fx struct{ FpList uintptr } 24621 FnHeight int32 24622 FiTable int32 24623 FiColumn ynVar 24624 FiAgg i16 24625 Fw struct{ FiJoin int32 } 24626 FpAggInfo uintptr 24627 Fy struct{ FpTab uintptr } 24628 } 24629 24630 type Expr = Expr1 24631 type ExprList1 = struct { 24632 FnExpr int32 24633 FnAlloc int32 24634 Fa [1]struct { 24635 FpExpr uintptr 24636 FzEName uintptr 24637 Ffg struct { 24638 F__ccgo_pad1 [0]uint32 24639 FsortFlags u8 24640 F__ccgo_pad2 [3]byte 24641 FeEName uint16 24642 F__ccgo_pad3 [2]byte 24643 } 24644 Fu struct { 24645 F__ccgo_pad1 [0]uint32 24646 Fx struct { 24647 FiOrderByCol u16 24648 FiAlias u16 24649 } 24650 } 24651 F__ccgo_pad1 [4]byte 24652 } 24653 } 24654 24655 type ExprList = ExprList1 24656 type FKey1 = struct { 24657 FpFrom uintptr 24658 FpNextFrom uintptr 24659 FzTo uintptr 24660 FpNextTo uintptr 24661 FpPrevTo uintptr 24662 FnCol int32 24663 FisDeferred u8 24664 FaAction [2]u8 24665 F__ccgo_pad1 [1]byte 24666 FapTrigger [2]uintptr 24667 FaCol [1]struct { 24668 FiFrom int32 24669 F__ccgo_pad1 [4]byte 24670 FzCol uintptr 24671 } 24672 } 24673 24674 type FKey = FKey1 24675 type FuncDestructor1 = struct { 24676 FnRef int32 24677 F__ccgo_pad1 [4]byte 24678 FxDestroy uintptr 24679 FpUserData uintptr 24680 } 24681 24682 type FuncDestructor = FuncDestructor1 24683 type FuncDef1 = struct { 24684 FnArg i8 24685 F__ccgo_pad1 [3]byte 24686 FfuncFlags u32 24687 FpUserData uintptr 24688 FpNext uintptr 24689 FxSFunc uintptr 24690 FxFinalize uintptr 24691 FxValue uintptr 24692 FxInverse uintptr 24693 FzName uintptr 24694 Fu struct{ FpHash uintptr } 24695 } 24696 24697 type FuncDef = FuncDef1 24698 type FuncDefHash1 = struct{ Fa [23]uintptr } 24699 24700 type FuncDefHash = FuncDefHash1 24701 type IdList1 = struct { 24702 FnId int32 24703 FeU4 u8 24704 F__ccgo_pad1 [3]byte 24705 Fa [1]struct { 24706 FzName uintptr 24707 Fu4 struct { 24708 F__ccgo_pad1 [0]uint64 24709 Fidx int32 24710 F__ccgo_pad2 [4]byte 24711 } 24712 } 24713 } 24714 24715 type IdList = IdList1 24716 type Index1 = struct { 24717 FzName uintptr 24718 FaiColumn uintptr 24719 FaiRowLogEst uintptr 24720 FpTable uintptr 24721 FzColAff uintptr 24722 FpNext uintptr 24723 FpSchema uintptr 24724 FaSortOrder uintptr 24725 FazColl uintptr 24726 FpPartIdxWhere uintptr 24727 FaColExpr uintptr 24728 Ftnum Pgno 24729 FszIdxRow LogEst 24730 FnKeyCol u16 24731 FnColumn u16 24732 FonError u8 24733 F__ccgo_pad1 [1]byte 24734 FidxType uint16 24735 F__ccgo_pad2 [2]byte 24736 FnSample int32 24737 FnSampleCol int32 24738 FaAvgEq uintptr 24739 FaSample uintptr 24740 FaiRowEst uintptr 24741 FnRowEst0 tRowcnt 24742 F__ccgo_pad3 [4]byte 24743 FcolNotIdxed Bitmask 24744 } 24745 24746 type Index = Index1 24747 type IndexSample1 = struct { 24748 Fp uintptr 24749 Fn int32 24750 F__ccgo_pad1 [4]byte 24751 FanEq uintptr 24752 FanLt uintptr 24753 FanDLt uintptr 24754 } 24755 24756 type IndexSample = IndexSample1 24757 type KeyInfo1 = struct { 24758 FnRef u32 24759 Fenc u8 24760 F__ccgo_pad1 [1]byte 24761 FnKeyField u16 24762 FnAllField u16 24763 F__ccgo_pad2 [6]byte 24764 Fdb uintptr 24765 FaSortFlags uintptr 24766 FaColl [1]uintptr 24767 } 24768 24769 type KeyInfo = KeyInfo1 24770 type Lookaside1 = struct { 24771 FbDisable u32 24772 Fsz u16 24773 FszTrue u16 24774 FbMalloced u8 24775 F__ccgo_pad1 [3]byte 24776 FnSlot u32 24777 FanStat [3]u32 24778 F__ccgo_pad2 [4]byte 24779 FpInit uintptr 24780 FpFree uintptr 24781 FpSmallInit uintptr 24782 FpSmallFree uintptr 24783 FpMiddle uintptr 24784 FpStart uintptr 24785 FpEnd uintptr 24786 } 24787 24788 type Lookaside = Lookaside1 24789 type LookasideSlot1 = struct{ FpNext uintptr } 24790 24791 type LookasideSlot = LookasideSlot1 24792 type Module1 = struct { 24793 FpModule uintptr 24794 FzName uintptr 24795 FnRefModule int32 24796 F__ccgo_pad1 [4]byte 24797 FpAux uintptr 24798 FxDestroy uintptr 24799 FpEpoTab uintptr 24800 } 24801 24802 type Module = Module1 24803 type NameContext1 = struct { 24804 FpParse uintptr 24805 FpSrcList uintptr 24806 FuNC struct{ FpEList uintptr } 24807 FpNext uintptr 24808 FnRef int32 24809 FnNcErr int32 24810 FncFlags int32 24811 F__ccgo_pad1 [4]byte 24812 FpWinSelect uintptr 24813 } 24814 24815 type NameContext = NameContext1 24816 type OnOrUsing1 = struct { 24817 FpOn uintptr 24818 FpUsing uintptr 24819 } 24820 24821 type OnOrUsing = OnOrUsing1 24822 type Parse1 = struct { 24823 Fdb uintptr 24824 FzErrMsg uintptr 24825 FpVdbe uintptr 24826 Frc int32 24827 FcolNamesSet u8 24828 FcheckSchema u8 24829 Fnested u8 24830 FnTempReg u8 24831 FisMultiWrite u8 24832 FmayAbort u8 24833 FhasCompound u8 24834 FokConstFactor u8 24835 FdisableLookaside u8 24836 FdisableVtab u8 24837 FwithinRJSubrtn u8 24838 F__ccgo_pad1 [1]byte 24839 FnRangeReg int32 24840 FiRangeReg int32 24841 FnErr int32 24842 FnTab int32 24843 FnMem int32 24844 FszOpAlloc int32 24845 FiSelfTab int32 24846 FnLabel int32 24847 FnLabelAlloc int32 24848 F__ccgo_pad2 [4]byte 24849 FaLabel uintptr 24850 FpConstExpr uintptr 24851 FconstraintName Token 24852 FwriteMask yDbMask 24853 FcookieMask yDbMask 24854 FregRowid int32 24855 FregRoot int32 24856 FnMaxArg int32 24857 FnSelect int32 24858 FnTableLock int32 24859 F__ccgo_pad3 [4]byte 24860 FaTableLock uintptr 24861 FpAinc uintptr 24862 FpToplevel uintptr 24863 FpTriggerTab uintptr 24864 FpTriggerPrg uintptr 24865 FpCleanup uintptr 24866 Fu1 struct { 24867 F__ccgo_pad1 [0]uint64 24868 FaddrCrTab int32 24869 F__ccgo_pad2 [4]byte 24870 } 24871 FnQueryLoop u32 24872 Foldmask u32 24873 Fnewmask u32 24874 FeTriggerOp u8 24875 FbReturning u8 24876 FeOrconf u8 24877 FdisableTriggers u8 24878 FaTempReg [8]int32 24879 FpOuterParse uintptr 24880 FsNameToken Token 24881 FsLastToken Token 24882 FnVar ynVar 24883 FiPkSortOrder u8 24884 Fexplain u8 24885 FeParseMode u8 24886 F__ccgo_pad4 [3]byte 24887 FnVtabLock int32 24888 FnHeight int32 24889 FaddrExplain int32 24890 F__ccgo_pad5 [4]byte 24891 FpVList uintptr 24892 FpReprepare uintptr 24893 FzTail uintptr 24894 FpNewTable uintptr 24895 FpNewIndex uintptr 24896 FpNewTrigger uintptr 24897 FzAuthContext uintptr 24898 FsArg Token 24899 FapVtabLock uintptr 24900 FpWith uintptr 24901 FpRename uintptr 24902 } 24903 24904 type Parse = Parse1 24905 type ParseCleanup1 = struct { 24906 FpNext uintptr 24907 FpPtr uintptr 24908 FxCleanup uintptr 24909 } 24910 24911 type ParseCleanup = ParseCleanup1 24912 type PreUpdate1 = struct { 24913 Fv uintptr 24914 FpCsr uintptr 24915 Fop int32 24916 F__ccgo_pad1 [4]byte 24917 FaRecord uintptr 24918 Fkeyinfo KeyInfo 24919 FpUnpacked uintptr 24920 FpNewUnpacked uintptr 24921 FiNewReg int32 24922 FiBlobWrite int32 24923 FiKey1 i64 24924 FiKey2 i64 24925 FaNew uintptr 24926 FpTab uintptr 24927 FpPk uintptr 24928 } 24929 24930 type PrintfArguments1 = struct { 24931 FnArg int32 24932 FnUsed int32 24933 FapArg uintptr 24934 } 24935 24936 type PrintfArguments = PrintfArguments1 24937 type Returning1 = struct { 24938 FpParse uintptr 24939 FpReturnEL uintptr 24940 FretTrig Trigger 24941 FretTStep TriggerStep 24942 FiRetCur int32 24943 FnRetCol int32 24944 FiRetReg int32 24945 F__ccgo_pad1 [4]byte 24946 } 24947 24948 type Returning = Returning1 24949 type Savepoint1 = struct { 24950 FzName uintptr 24951 FnDeferredCons i64 24952 FnDeferredImmCons i64 24953 FpNext uintptr 24954 } 24955 24956 type Savepoint = Savepoint1 24957 type Select1 = struct { 24958 Fop u8 24959 F__ccgo_pad1 [1]byte 24960 FnSelectRow LogEst 24961 FselFlags u32 24962 FiLimit int32 24963 FiOffset int32 24964 FselId u32 24965 FaddrOpenEphm [2]int32 24966 F__ccgo_pad2 [4]byte 24967 FpEList uintptr 24968 FpSrc uintptr 24969 FpWhere uintptr 24970 FpGroupBy uintptr 24971 FpHaving uintptr 24972 FpOrderBy uintptr 24973 FpPrior uintptr 24974 FpNext uintptr 24975 FpLimit uintptr 24976 FpWith uintptr 24977 FpWin uintptr 24978 FpWinDefn uintptr 24979 } 24980 24981 type Select = Select1 24982 type SelectDest1 = struct { 24983 FeDest u8 24984 F__ccgo_pad1 [3]byte 24985 FiSDParm int32 24986 FiSDParm2 int32 24987 FiSdst int32 24988 FnSdst int32 24989 F__ccgo_pad2 [4]byte 24990 FzAffSdst uintptr 24991 FpOrderBy uintptr 24992 } 24993 24994 type SelectDest = SelectDest1 24995 type SrcItem1 = struct { 24996 FpSchema uintptr 24997 FzDatabase uintptr 24998 FzName uintptr 24999 FzAlias uintptr 25000 FpTab uintptr 25001 FpSelect uintptr 25002 FaddrFillSub int32 25003 FregReturn int32 25004 FregResult int32 25005 Ffg struct { 25006 F__ccgo_pad1 [0]uint32 25007 Fjointype u8 25008 F__ccgo_pad2 [3]byte 25009 FnotIndexed uint16 25010 F__ccgo_pad3 [2]byte 25011 } 25012 FiCursor int32 25013 Fu3 struct{ FpOn uintptr } 25014 FcolUsed Bitmask 25015 Fu1 struct{ FzIndexedBy uintptr } 25016 Fu2 struct{ FpIBIndex uintptr } 25017 } 25018 25019 type SrcItem = SrcItem1 25020 type SrcList1 = struct { 25021 FnSrc int32 25022 FnAlloc u32 25023 Fa [1]SrcItem 25024 } 25025 25026 type SrcList = SrcList1 25027 type StrAccum = sqlite3_str1 25028 type Table1 = struct { 25029 FzName uintptr 25030 FaCol uintptr 25031 FpIndex uintptr 25032 FzColAff uintptr 25033 FpCheck uintptr 25034 Ftnum Pgno 25035 FnTabRef u32 25036 FtabFlags u32 25037 FiPKey i16 25038 FnCol i16 25039 FnNVCol i16 25040 FnRowLogEst LogEst 25041 FszTabRow LogEst 25042 FkeyConf u8 25043 FeTabType u8 25044 Fu struct { 25045 Ftab struct { 25046 FaddColOffset int32 25047 F__ccgo_pad1 [4]byte 25048 FpFKey uintptr 25049 FpDfltList uintptr 25050 } 25051 } 25052 FpTrigger uintptr 25053 FpSchema uintptr 25054 } 25055 25056 type Table = Table1 25057 type Token1 = struct { 25058 Fz uintptr 25059 Fn uint32 25060 F__ccgo_pad1 [4]byte 25061 } 25062 25063 type Token = Token1 25064 type Trigger1 = struct { 25065 FzName uintptr 25066 Ftable uintptr 25067 Fop u8 25068 Ftr_tm u8 25069 FbReturning u8 25070 F__ccgo_pad1 [5]byte 25071 FpWhen uintptr 25072 FpColumns uintptr 25073 FpSchema uintptr 25074 FpTabSchema uintptr 25075 Fstep_list uintptr 25076 FpNext uintptr 25077 } 25078 25079 type Trigger = Trigger1 25080 type TriggerPrg1 = struct { 25081 FpTrigger uintptr 25082 FpNext uintptr 25083 FpProgram uintptr 25084 Forconf int32 25085 FaColmask [2]u32 25086 F__ccgo_pad1 [4]byte 25087 } 25088 25089 type TriggerPrg = TriggerPrg1 25090 type TriggerStep1 = struct { 25091 Fop u8 25092 Forconf u8 25093 F__ccgo_pad1 [6]byte 25094 FpTrig uintptr 25095 FpSelect uintptr 25096 FzTarget uintptr 25097 FpFrom uintptr 25098 FpWhere uintptr 25099 FpExprList uintptr 25100 FpIdList uintptr 25101 FpUpsert uintptr 25102 FzSpan uintptr 25103 FpNext uintptr 25104 FpLast uintptr 25105 } 25106 25107 type TriggerStep = TriggerStep1 25108 type UnpackedRecord1 = struct { 25109 FpKeyInfo uintptr 25110 FaMem uintptr 25111 Fu struct{ Fz uintptr } 25112 Fn int32 25113 FnField u16 25114 Fdefault_rc i8 25115 FerrCode u8 25116 Fr1 i8 25117 Fr2 i8 25118 FeqSeen u8 25119 F__ccgo_pad1 [5]byte 25120 } 25121 25122 type UnpackedRecord = UnpackedRecord1 25123 type Upsert1 = struct { 25124 FpUpsertTarget uintptr 25125 FpUpsertTargetWhere uintptr 25126 FpUpsertSet uintptr 25127 FpUpsertWhere uintptr 25128 FpNextUpsert uintptr 25129 FisDoUpdate u8 25130 F__ccgo_pad1 [7]byte 25131 FpToFree uintptr 25132 FpUpsertIdx uintptr 25133 FpUpsertSrc uintptr 25134 FregData int32 25135 FiDataCur int32 25136 FiIdxCur int32 25137 F__ccgo_pad2 [4]byte 25138 } 25139 25140 type Upsert = Upsert1 25141 type VTable1 = struct { 25142 Fdb uintptr 25143 FpMod uintptr 25144 FpVtab uintptr 25145 FnRef int32 25146 FbConstraint u8 25147 FeVtabRisk u8 25148 F__ccgo_pad1 [2]byte 25149 FiSavepoint int32 25150 F__ccgo_pad2 [4]byte 25151 FpNext uintptr 25152 } 25153 25154 type VTable = VTable1 25155 type Walker1 = struct { 25156 FpParse uintptr 25157 FxExprCallback uintptr 25158 FxSelectCallback uintptr 25159 FxSelectCallback2 uintptr 25160 FwalkerDepth int32 25161 FeCode u16 25162 F__ccgo_pad1 [2]byte 25163 Fu struct{ FpNC uintptr } 25164 } 25165 25166 type Walker = Walker1 25167 type Window1 = struct { 25168 FzName uintptr 25169 FzBase uintptr 25170 FpPartition uintptr 25171 FpOrderBy uintptr 25172 FeFrmType u8 25173 FeStart u8 25174 FeEnd u8 25175 FbImplicitFrame u8 25176 FeExclude u8 25177 F__ccgo_pad1 [3]byte 25178 FpStart uintptr 25179 FpEnd uintptr 25180 FppThis uintptr 25181 FpNextWin uintptr 25182 FpFilter uintptr 25183 FpWFunc uintptr 25184 FiEphCsr int32 25185 FregAccum int32 25186 FregResult int32 25187 FcsrApp int32 25188 FregApp int32 25189 FregPart int32 25190 FpOwner uintptr 25191 FnBufferCol int32 25192 FiArgCol int32 25193 FregOne int32 25194 FregStartRowid int32 25195 FregEndRowid int32 25196 FbExprArgs u8 25197 F__ccgo_pad2 [3]byte 25198 } 25199 25200 type Window = Window1 25201 type With1 = struct { 25202 FnCte int32 25203 FbView int32 25204 FpOuter uintptr 25205 Fa [1]Cte 25206 } 25207 25208 type With = With1 25209 25210 type Bitmask = u64 25211 25212 type VList = int32 25213 25214 type Pgno = u32 25215 25216 type PgHdr1 = struct { 25217 FpPage uintptr 25218 FpData uintptr 25219 FpExtra uintptr 25220 FpCache uintptr 25221 FpDirty uintptr 25222 FpPager uintptr 25223 Fpgno Pgno 25224 Fflags u16 25225 FnRef i16 25226 FpDirtyNext uintptr 25227 FpDirtyPrev uintptr 25228 } 25229 25230 type DbPage = PgHdr1 25231 25232 type Btree1 = struct { 25233 Fdb uintptr 25234 FpBt uintptr 25235 FinTrans u8 25236 Fsharable u8 25237 Flocked u8 25238 FhasIncrblobCur u8 25239 FwantToLock int32 25240 FnBackup int32 25241 FiBDataVersion u32 25242 FpNext uintptr 25243 FpPrev uintptr 25244 Flock BtLock 25245 } 25246 25247 type BtCursor1 = struct { 25248 FeState u8 25249 FcurFlags u8 25250 FcurPagerFlags u8 25251 Fhints u8 25252 FskipNext int32 25253 FpBtree uintptr 25254 FaOverflow uintptr 25255 FpKey uintptr 25256 FpBt uintptr 25257 FpNext uintptr 25258 Finfo CellInfo 25259 FnKey i64 25260 FpgnoRoot Pgno 25261 FiPage i8 25262 FcurIntKey u8 25263 Fix u16 25264 FaiIdx [19]u16 25265 F__ccgo_pad1 [2]byte 25266 FpKeyInfo uintptr 25267 FpPage uintptr 25268 FapPage [19]uintptr 25269 } 25270 25271 type BtShared1 = struct { 25272 FpPager uintptr 25273 Fdb uintptr 25274 FpCursor uintptr 25275 FpPage1 uintptr 25276 FopenFlags u8 25277 FautoVacuum u8 25278 FincrVacuum u8 25279 FbDoTruncate u8 25280 FinTransaction u8 25281 Fmax1bytePayload u8 25282 FnReserveWanted u8 25283 F__ccgo_pad1 [1]byte 25284 FbtsFlags u16 25285 FmaxLocal u16 25286 FminLocal u16 25287 FmaxLeaf u16 25288 FminLeaf u16 25289 F__ccgo_pad2 [2]byte 25290 FpageSize u32 25291 FusableSize u32 25292 FnTransaction int32 25293 FnPage u32 25294 F__ccgo_pad3 [4]byte 25295 FpSchema uintptr 25296 FxFreeSchema uintptr 25297 Fmutex uintptr 25298 FpHasContent uintptr 25299 FnRef int32 25300 F__ccgo_pad4 [4]byte 25301 FpNext uintptr 25302 FpLock uintptr 25303 FpWriter uintptr 25304 FpTmpSpace uintptr 25305 FnPreformatSize int32 25306 F__ccgo_pad5 [4]byte 25307 } 25308 25309 type BtreePayload1 = struct { 25310 FpKey uintptr 25311 FnKey sqlite3_int64 25312 FpData uintptr 25313 FaMem uintptr 25314 FnMem u16 25315 F__ccgo_pad1 [2]byte 25316 FnData int32 25317 FnZero int32 25318 F__ccgo_pad2 [4]byte 25319 } 25320 25321 type BtreePayload = BtreePayload1 25322 25323 type Vdbe1 = struct { 25324 Fdb uintptr 25325 FpPrev uintptr 25326 FpNext uintptr 25327 FpParse uintptr 25328 FnVar ynVar 25329 F__ccgo_pad1 [2]byte 25330 FnMem int32 25331 FnCursor int32 25332 FcacheCtr u32 25333 Fpc int32 25334 Frc int32 25335 FnChange i64 25336 FiStatement int32 25337 F__ccgo_pad2 [4]byte 25338 FiCurrentTime i64 25339 FnFkConstraint i64 25340 FnStmtDefCons i64 25341 FnStmtDefImmCons i64 25342 FaMem uintptr 25343 FapArg uintptr 25344 FapCsr uintptr 25345 FaVar uintptr 25346 FaOp uintptr 25347 FnOp int32 25348 FnOpAlloc int32 25349 FaColName uintptr 25350 FpResultSet uintptr 25351 FzErrMsg uintptr 25352 FpVList uintptr 25353 FstartTime i64 25354 FnResColumn u16 25355 FerrorAction u8 25356 FminWriteFileFormat u8 25357 FprepFlags u8 25358 FeVdbeState u8 25359 F__ccgo_pad3 [2]byte 25360 Fexpired uint8 25361 F__ccgo_pad4 [3]byte 25362 FbtreeMask yDbMask 25363 FlockMask yDbMask 25364 FaCounter [9]u32 25365 FzSql uintptr 25366 FpFree uintptr 25367 FpFrame uintptr 25368 FpDelFrame uintptr 25369 FnFrame int32 25370 Fexpmask u32 25371 FpProgram uintptr 25372 FpAuxData uintptr 25373 } 25374 25375 type SubProgram1 = struct { 25376 FaOp uintptr 25377 FnOp int32 25378 FnMem int32 25379 FnCsr int32 25380 F__ccgo_pad1 [4]byte 25381 FaOnce uintptr 25382 Ftoken uintptr 25383 FpNext uintptr 25384 } 25385 25386 type SubProgram = SubProgram1 25387 25388 type VdbeOp1 = struct { 25389 Fopcode u8 25390 Fp4type int8 25391 Fp5 u16 25392 Fp1 int32 25393 Fp2 int32 25394 Fp3 int32 25395 Fp4 struct { 25396 F__ccgo_pad1 [0]uint64 25397 Fi int32 25398 F__ccgo_pad2 [4]byte 25399 } 25400 FzComment uintptr 25401 } 25402 25403 type p4union = struct { 25404 F__ccgo_pad1 [0]uint64 25405 Fi int32 25406 F__ccgo_pad2 [4]byte 25407 } 25408 25409 type VdbeOp = VdbeOp1 25410 25411 type VdbeOpList1 = struct { 25412 Fopcode u8 25413 Fp1 int8 25414 Fp2 int8 25415 Fp3 int8 25416 } 25417 25418 type VdbeOpList = VdbeOpList1 25419 25420 type RecordCompare = uintptr 25421 25422 type PgHdr = PgHdr1 25423 25424 type sqlite3_xauth = uintptr 25425 25426 type sqlite3InitInfo = struct { 25427 FnewTnum Pgno 25428 FiDb u8 25429 Fbusy u8 25430 F__ccgo_pad1 [2]byte 25431 ForphanTrigger uint8 25432 F__ccgo_pad2 [7]byte 25433 FazInit uintptr 25434 } 25435 25436 type sColMap = struct { 25437 FiFrom int32 25438 F__ccgo_pad1 [4]byte 25439 FzCol uintptr 25440 } 25441 25442 type AggInfo_col = struct { 25443 FpTab uintptr 25444 FpCExpr uintptr 25445 FiTable int32 25446 FiMem int32 25447 FiColumn i16 25448 FiSorterColumn i16 25449 F__ccgo_pad1 [4]byte 25450 } 25451 25452 type AggInfo_func = struct { 25453 FpFExpr uintptr 25454 FpFunc uintptr 25455 FiMem int32 25456 FiDistinct int32 25457 FiDistAddr int32 25458 F__ccgo_pad1 [4]byte 25459 } 25460 25461 type ynVar = i16 25462 25463 type ExprList_item = struct { 25464 FpExpr uintptr 25465 FzEName uintptr 25466 Ffg struct { 25467 F__ccgo_pad1 [0]uint32 25468 FsortFlags u8 25469 F__ccgo_pad2 [3]byte 25470 FeEName uint16 25471 F__ccgo_pad3 [2]byte 25472 } 25473 Fu struct { 25474 F__ccgo_pad1 [0]uint32 25475 Fx struct { 25476 FiOrderByCol u16 25477 FiAlias u16 25478 } 25479 } 25480 F__ccgo_pad1 [4]byte 25481 } 25482 25483 type IdList_item = struct { 25484 FzName uintptr 25485 Fu4 struct { 25486 F__ccgo_pad1 [0]uint64 25487 Fidx int32 25488 F__ccgo_pad2 [4]byte 25489 } 25490 } 25491 25492 type yDbMask = uint32 25493 25494 type InitData = struct { 25495 Fdb uintptr 25496 FpzErrMsg uintptr 25497 FiDb int32 25498 Frc int32 25499 FmInitFlags u32 25500 FnInitRow u32 25501 FmxPage Pgno 25502 F__ccgo_pad1 [4]byte 25503 } 25504 25505 type Sqlite3Config = struct { 25506 FbMemstat int32 25507 FbCoreMutex u8 25508 FbFullMutex u8 25509 FbOpenUri u8 25510 FbUseCis u8 25511 FbSmallMalloc u8 25512 FbExtraSchemaChecks u8 25513 F__ccgo_pad1 [2]byte 25514 FmxStrlen int32 25515 FneverCorrupt int32 25516 FszLookaside int32 25517 FnLookaside int32 25518 FnStmtSpill int32 25519 Fm sqlite3_mem_methods 25520 Fmutex sqlite3_mutex_methods 25521 Fpcache2 sqlite3_pcache_methods2 25522 FpHeap uintptr 25523 FnHeap int32 25524 FmnReq int32 25525 FmxReq int32 25526 F__ccgo_pad2 [4]byte 25527 FszMmap sqlite3_int64 25528 FmxMmap sqlite3_int64 25529 FpPage uintptr 25530 FszPage int32 25531 FnPage int32 25532 FmxParserStack int32 25533 FsharedCacheEnabled int32 25534 FszPma u32 25535 FisInit int32 25536 FinProgress int32 25537 FisMutexInit int32 25538 FisMallocInit int32 25539 FisPCacheInit int32 25540 FnRefInitMutex int32 25541 F__ccgo_pad3 [4]byte 25542 FpInitMutex uintptr 25543 FxLog uintptr 25544 FpLogArg uintptr 25545 FmxMemdbSize sqlite3_int64 25546 FxTestCallback uintptr 25547 FbLocaltimeFault int32 25548 F__ccgo_pad4 [4]byte 25549 FxAltLocaltime uintptr 25550 FiOnceResetThreshold int32 25551 FszSorterRef u32 25552 FiPrngSeed uint32 25553 F__ccgo_pad5 [4]byte 25554 } 25555 25556 type BoxGeomCtx1 = struct { 25557 Finterp uintptr 25558 FpScript uintptr 25559 } 25560 25561 type BoxGeomCtx = BoxGeomCtx1 25562 25563 type BoxQueryCtx1 = struct { 25564 Finterp uintptr 25565 FpScript uintptr 25566 } 25567 25568 type BoxQueryCtx = BoxQueryCtx1 25569 25570 func testDelUser(tls *libc.TLS, pCtx uintptr) { 25571 var p uintptr = pCtx 25572 tcl.XTcl_EvalObjEx(tls, (*BoxGeomCtx)(unsafe.Pointer(p)).Finterp, (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript, 0) 25573 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25574 var _objPtr uintptr = (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript 25575 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25576 tcl.XTclFreeObj(tls, _objPtr) 25577 } 25578 } 25579 sqlite3.Xsqlite3_free(tls, p) 25580 } 25581 25582 func invokeTclGeomCb(tls *libc.TLS, zName uintptr, p uintptr, nCoord int32, aCoord uintptr) int32 { 25583 bp := tls.Alloc(96) 25584 defer tls.Free(96) 25585 25586 var rc int32 = SQLITE_OK 25587 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext != 0 { 25588 var pCtx uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext 25589 var interp uintptr = (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp 25590 var pScript uintptr = uintptr(0) 25591 var pParam uintptr = uintptr(0) 25592 var pCoord uintptr = uintptr(0) 25593 var ii int32 25594 var pRes uintptr 25595 25596 pScript = tcl.XTcl_DuplicateObj(tls, (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript) 25597 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 25598 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 25599 25600 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)) 25601 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25602 25603 pParam = tcl.XTcl_NewObj(tls) 25604 for ii = 0; ii < (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam; ii++ { 25605 tcl.XTcl_ListObjAppendElement(tls, 25606 interp, pParam, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + uintptr(ii)*8)))) 25607 } 25608 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pParam) 25609 25610 pCoord = tcl.XTcl_NewObj(tls) 25611 for ii = 0; ii < nCoord; ii++ { 25612 tcl.XTcl_ListObjAppendElement(tls, interp, pCoord, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + uintptr(ii)*8)))) 25613 } 25614 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pCoord) 25615 25616 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([64]int8{}))-uint64(1)), bp+16, ts+9889, libc.VaList(bp+8, p)) 25617 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25618 25619 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 25620 if rc != TCL_OK { 25621 rc = SQLITE_ERROR 25622 } else { 25623 *(*int32)(unsafe.Pointer(bp + 80)) = 0 25624 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 25625 25626 pRes = tcl.XTcl_GetObjResult(tls, interp) 25627 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) != 0 { 25628 return TCL_ERROR 25629 } 25630 if *(*int32)(unsafe.Pointer(bp + 80)) > 0 { 25631 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88))))) 25632 if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9892) { 25633 *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) = 0.0 25634 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam = 1 25635 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9897) { 25636 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 25637 rc = SQLITE_ERROR 25638 } else { 25639 var pBGCtx uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(BoxGeomCtx{}))) 25640 if pBGCtx == uintptr(0) { 25641 rc = SQLITE_NOMEM 25642 } else { 25643 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).Finterp = interp 25644 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, pRes) 25645 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript)).FrefCount++ 25646 tcl.XTcl_ListObjReplace(tls, interp, (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript, 0, 1, 0, uintptr(0)) 25647 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pBGCtx 25648 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testDelUser})) 25649 } 25650 } 25651 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9902) { 25652 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 25653 rc = SQLITE_ERROR 25654 } 25655 } 25656 } 25657 } 25658 } 25659 return rc 25660 } 25661 25662 func box_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 25663 var ii int32 25664 25665 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != nCoord { 25666 invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) 25667 return SQLITE_ERROR 25668 } 25669 if invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) != 0 { 25670 return SQLITE_ERROR 25671 } 25672 25673 for ii = 0; ii < nCoord; ii = ii + 2 { 25674 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)) { 25675 *(*int32)(unsafe.Pointer(pRes)) = 0 25676 return SQLITE_OK 25677 } 25678 } 25679 25680 *(*int32)(unsafe.Pointer(pRes)) = 1 25681 25682 return SQLITE_OK 25683 } 25684 25685 func register_box_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25686 bp := tls.Alloc(80) 25687 defer tls.Free(80) 25688 25689 var pCtx uintptr 25690 25691 if objc != 3 { 25692 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 25693 return TCL_ERROR 25694 } 25695 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 25696 return TCL_ERROR 25697 } 25698 25699 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(uintptr(0)))) 25700 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp = interp 25701 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25702 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 25703 25704 sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), ts+9915, *(*uintptr)(unsafe.Pointer(&struct { 25705 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 25706 }{box_geom})), pCtx) 25707 25708 sqlite3.Xsqlite3_snprintf(tls, 64, bp+16, ts+9889, libc.VaList(bp, pCtx)) 25709 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25710 return TCL_OK 25711 } 25712 25713 func box_query(tls *libc.TLS, pInfo uintptr) int32 { 25714 bp := tls.Alloc(60) 25715 defer tls.Free(60) 25716 25717 *(*[4]uintptr)(unsafe.Pointer(bp)) = [4]uintptr{ts + 5854, ts + 9929, ts + 9936, uintptr(0)} 25718 var pCtx uintptr = (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FpContext 25719 var interp uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp 25720 var pEval uintptr 25721 var pArg uintptr 25722 var pTmp uintptr = uintptr(0) 25723 var rc int32 25724 var ii int32 25725 25726 pEval = tcl.XTcl_DuplicateObj(tls, (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript) 25727 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 25728 pArg = tcl.XTcl_NewObj(tls) 25729 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 25730 25731 pTmp = tcl.XTcl_NewObj(tls) 25732 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25733 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnParam; ii++ { 25734 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaParam + uintptr(ii)*8))) 25735 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25736 } 25737 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9942, -1)) 25738 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25739 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25740 var _objPtr uintptr = pTmp 25741 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25742 tcl.XTclFreeObj(tls, _objPtr) 25743 } 25744 } 25745 25746 pTmp = tcl.XTcl_NewObj(tls) 25747 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25748 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnCoord; ii++ { 25749 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaCoord + uintptr(ii)*8))) 25750 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25751 } 25752 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9949, -1)) 25753 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25754 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 25755 var _objPtr uintptr = pTmp 25756 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25757 tcl.XTclFreeObj(tls, _objPtr) 25758 } 25759 } 25760 25761 pTmp = tcl.XTcl_NewObj(tls) 25762 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25763 for ii = 0; ii <= (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel; ii++ { 25764 var p uintptr = tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FanQueue + uintptr(ii)*4)))) 25765 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25766 } 25767 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9956, -1)) 25768 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25769 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 25770 var _objPtr uintptr = pTmp 25771 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25772 tcl.XTclFreeObj(tls, _objPtr) 25773 } 25774 } 25775 25776 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9964, -1)) 25777 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiLevel)) 25778 25779 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9971, -1)) 25780 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel)) 25781 25782 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9979, -1)) 25783 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewWideIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiRowid)) 25784 25785 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9986, -1)) 25786 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewDoubleObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrParentScore)) 25787 25788 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9999, -1)) 25789 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, 25790 tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin)*8)), -1)) 25791 25792 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, pArg) 25793 if tcl.XTcl_EvalObjEx(tls, interp, pEval, 0) != 0 { 25794 rc = SQLITE_ERROR 25795 } else { 25796 rc = SQLITE_OK 25797 } 25798 25799 if rc == SQLITE_OK { 25800 *(*float64)(unsafe.Pointer(bp + 48)) = 0.0 25801 *(*int32)(unsafe.Pointer(bp + 32)) = 0 25802 *(*int32)(unsafe.Pointer(bp + 56)) = 0 25803 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 25804 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 25805 25806 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+32, bp+40) != 0 || 25807 *(*int32)(unsafe.Pointer(bp + 32)) != 2 || 25808 tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)) + 1*8)), bp+48) != 0 || 25809 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)))), bp, int32(unsafe.Sizeof(uintptr(0))), ts+10013, 0, bp+56) != 0 { 25810 rc = SQLITE_ERROR 25811 } else { 25812 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrScore = *(*float64)(unsafe.Pointer(bp + 48)) 25813 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin = *(*int32)(unsafe.Pointer(bp + 56)) 25814 } 25815 } 25816 25817 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 25818 var _objPtr uintptr = pArg 25819 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25820 tcl.XTclFreeObj(tls, _objPtr) 25821 } 25822 } 25823 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 25824 var _objPtr uintptr = pEval 25825 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25826 tcl.XTclFreeObj(tls, _objPtr) 25827 } 25828 } 25829 return rc 25830 } 25831 25832 func box_query_destroy(tls *libc.TLS, p uintptr) { 25833 var pCtx uintptr = p 25834 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25835 var _objPtr uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript 25836 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25837 tcl.XTclFreeObj(tls, _objPtr) 25838 } 25839 } 25840 tcl.XTcl_Free(tls, pCtx) 25841 } 25842 25843 func register_box_query(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25844 bp := tls.Alloc(8) 25845 defer tls.Free(8) 25846 25847 var pCtx uintptr 25848 25849 if objc != 3 { 25850 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 25851 return TCL_ERROR 25852 } 25853 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 25854 return TCL_ERROR 25855 } 25856 25857 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(BoxQueryCtx{}))) 25858 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp = interp 25859 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25860 (*Tcl_Obj)(unsafe.Pointer((*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 25861 25862 sqlite3.Xsqlite3_rtree_query_callback(tls, 25863 *(*uintptr)(unsafe.Pointer(bp)), ts+10019, *(*uintptr)(unsafe.Pointer(&struct { 25864 f func(*libc.TLS, uintptr) int32 25865 }{box_query})), pCtx, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{box_query_destroy}))) 25866 25867 tcl.XTcl_ResetResult(tls, interp) 25868 return TCL_OK 25869 } 25870 25871 func Sqlitetestrtreedoc_Init(tls *libc.TLS, interp uintptr) int32 { 25872 tcl.XTcl_CreateObjCommand(tls, interp, ts+10024, *(*uintptr)(unsafe.Pointer(&struct { 25873 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 25874 }{register_box_geom})), uintptr(0), uintptr(0)) 25875 tcl.XTcl_CreateObjCommand(tls, interp, ts+10042, *(*uintptr)(unsafe.Pointer(&struct { 25876 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 25877 }{register_box_query})), uintptr(0), uintptr(0)) 25878 return TCL_OK 25879 } 25880 25881 type TestSession1 = struct { 25882 FpSession uintptr 25883 Finterp uintptr 25884 FpFilterScript uintptr 25885 } 25886 25887 type TestSession = TestSession1 25888 25889 type TestStreamInput1 = struct { 25890 FnStream int32 25891 F__ccgo_pad1 [4]byte 25892 FaData uintptr 25893 FnData int32 25894 FiData int32 25895 } 25896 25897 type TestStreamInput = TestStreamInput1 25898 25899 func dbHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 25900 bp := tls.Alloc(88) 25901 defer tls.Free(88) 25902 25903 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 25904 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 25905 return TCL_ERROR 25906 } 25907 25908 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 25909 return TCL_OK 25910 } 25911 25912 func sql_exec_changeset(tls *libc.TLS, db uintptr, zSql uintptr, pnChangeset uintptr, ppChangeset uintptr) int32 { 25913 bp := tls.Alloc(8) 25914 defer tls.Free(8) 25915 25916 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 25917 var rc int32 25918 25919 rc = sqlite3.Xsqlite3session_create(tls, db, ts+85, bp) 25920 25921 if rc == SQLITE_OK { 25922 rc = sqlite3.Xsqlite3session_attach(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0)) 25923 } 25924 25925 if rc == SQLITE_OK { 25926 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 25927 } 25928 25929 if rc == SQLITE_OK { 25930 rc = sqlite3.Xsqlite3session_changeset(tls, *(*uintptr)(unsafe.Pointer(bp)), pnChangeset, ppChangeset) 25931 } 25932 25933 sqlite3.Xsqlite3session_delete(tls, *(*uintptr)(unsafe.Pointer(bp))) 25934 25935 return rc 25936 } 25937 25938 func test_sql_exec_changeset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25939 bp := tls.Alloc(40) 25940 defer tls.Free(40) 25941 25942 var zSql uintptr 25943 25944 var rc int32 25945 25946 if objc != 3 { 25947 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 25948 return TCL_ERROR 25949 } 25950 if dbHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 25951 return TCL_ERROR 25952 } 25953 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25954 25955 rc = sql_exec_changeset(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zSql, bp+24, bp+32) 25956 if rc != SQLITE_OK { 25957 tcl.XTcl_ResetResult(tls, interp) 25958 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+10068, 0)) 25959 return TCL_ERROR 25960 } 25961 25962 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 24)))) 25963 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 25964 return TCL_OK 25965 } 25966 25967 func test_tcl_integer(tls *libc.TLS, interp uintptr, zVar uintptr) int32 { 25968 bp := tls.Alloc(4) 25969 defer tls.Free(4) 25970 25971 var pObj uintptr 25972 *(*int32)(unsafe.Pointer(bp)) = 0 25973 var pName uintptr = tcl.XTcl_NewStringObj(tls, zVar, -1) 25974 (*Tcl_Obj)(unsafe.Pointer(pName)).FrefCount++ 25975 pObj = tcl.XTcl_ObjGetVar2(tls, interp, pName, uintptr(0), TCL_GLOBAL_ONLY) 25976 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25977 var _objPtr uintptr = pName 25978 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25979 tcl.XTclFreeObj(tls, _objPtr) 25980 } 25981 } 25982 if pObj != 0 { 25983 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pObj, bp) 25984 } 25985 return *(*int32)(unsafe.Pointer(bp)) 25986 } 25987 25988 func test_session_error(tls *libc.TLS, interp uintptr, rc int32, zErr uintptr) int32 { 25989 bp := tls.Alloc(24) 25990 defer tls.Free(24) 25991 25992 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 25993 if zErr != 0 { 25994 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, zErr, 0)) 25995 sqlite3.Xsqlite3_free(tls, zErr) 25996 } 25997 return TCL_ERROR 25998 } 25999 26000 func test_table_filter(tls *libc.TLS, pCtx uintptr, zTbl uintptr) int32 { 26001 bp := tls.Alloc(4) 26002 defer tls.Free(4) 26003 26004 var p uintptr = pCtx 26005 var pEval uintptr 26006 var rc int32 26007 *(*int32)(unsafe.Pointer(bp)) = 0 26008 26009 pEval = tcl.XTcl_DuplicateObj(tls, (*TestSession)(unsafe.Pointer(p)).FpFilterScript) 26010 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26011 rc = tcl.XTcl_ListObjAppendElement(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 26012 if rc == TCL_OK { 26013 rc = tcl.XTcl_EvalObjEx(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 26014 } 26015 if rc == TCL_OK { 26016 rc = tcl.XTcl_GetBooleanFromObj(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestSession)(unsafe.Pointer(p)).Finterp), bp) 26017 } 26018 if rc != TCL_OK { 26019 tcl.XTcl_BackgroundError(tls, (*TestSession)(unsafe.Pointer(p)).Finterp) 26020 } 26021 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26022 var _objPtr uintptr = pEval 26023 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26024 tcl.XTclFreeObj(tls, _objPtr) 26025 } 26026 } 26027 26028 return *(*int32)(unsafe.Pointer(bp)) 26029 } 26030 26031 type TestSessionsBlob1 = struct { 26032 Fp uintptr 26033 Fn int32 26034 F__ccgo_pad1 [4]byte 26035 } 26036 26037 type TestSessionsBlob = TestSessionsBlob1 26038 26039 func testStreamOutput(tls *libc.TLS, pCtx uintptr, pData uintptr, nData int32) int32 { 26040 var pBlob uintptr = pCtx 26041 var pNew uintptr 26042 26043 pNew = sqlite3.Xsqlite3_realloc(tls, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn+nData) 26044 if pNew == uintptr(0) { 26045 return SQLITE_NOMEM 26046 } 26047 (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp = pNew 26048 libc.Xmemcpy(tls, pNew+uintptr((*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn), pData, uint64(nData)) 26049 *(*int32)(unsafe.Pointer(pBlob + 8)) += nData 26050 return SQLITE_OK 26051 } 26052 26053 func test_session_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26054 bp := tls.Alloc(44) 26055 defer tls.Free(44) 26056 26057 var p uintptr = clientData 26058 var pSession uintptr = (*TestSession)(unsafe.Pointer(p)).FpSession 26059 26060 var rc int32 26061 26062 if objc < 2 { 26063 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 26064 return TCL_ERROR 26065 } 26066 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 26067 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub)), int32(unsafe.Sizeof(SessionSubcmd{})), ts+2014, 0, bp) 26068 if rc != TCL_OK { 26069 return rc 26070 } 26071 if objc != 2+aSub[*(*int32)(unsafe.Pointer(bp))].FnArg { 26072 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub[*(*int32)(unsafe.Pointer(bp))].FzMsg) 26073 return TCL_ERROR 26074 } 26075 26076 switch *(*int32)(unsafe.Pointer(bp)) { 26077 case 0: 26078 { 26079 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26080 if int32(*(*int8)(unsafe.Pointer(zArg))) == '*' && int32(*(*int8)(unsafe.Pointer(zArg + 1))) == 0 { 26081 zArg = uintptr(0) 26082 } 26083 rc = sqlite3.Xsqlite3session_attach(tls, pSession, zArg) 26084 if rc != SQLITE_OK { 26085 return test_session_error(tls, interp, rc, uintptr(0)) 26086 } 26087 break 26088 26089 } 26090 26091 case 7: 26092 fallthrough 26093 case 1: 26094 { 26095 *(*TestSessionsBlob)(unsafe.Pointer(bp + 8)) = TestSessionsBlob{} 26096 if test_tcl_integer(tls, interp, ts+10098) != 0 { 26097 var pCtx uintptr = bp + 8 26098 if *(*int32)(unsafe.Pointer(bp)) == 7 { 26099 rc = sqlite3.Xsqlite3session_patchset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26100 f func(*libc.TLS, uintptr, uintptr, int32) int32 26101 }{testStreamOutput})), pCtx) 26102 } else { 26103 rc = sqlite3.Xsqlite3session_changeset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26104 f func(*libc.TLS, uintptr, uintptr, int32) int32 26105 }{testStreamOutput})), pCtx) 26106 } 26107 } else { 26108 if *(*int32)(unsafe.Pointer(bp)) == 7 { 26109 rc = sqlite3.Xsqlite3session_patchset(tls, pSession, bp+8+8, bp+8) 26110 } else { 26111 rc = sqlite3.Xsqlite3session_changeset(tls, pSession, bp+8+8, bp+8) 26112 } 26113 } 26114 if rc == SQLITE_OK { 26115 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fn)) 26116 } 26117 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp) 26118 if rc != SQLITE_OK { 26119 return test_session_error(tls, interp, rc, uintptr(0)) 26120 } 26121 break 26122 26123 } 26124 26125 case 2: 26126 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 26127 break 26128 26129 case 3: 26130 { 26131 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 26132 return TCL_ERROR 26133 } 26134 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3session_enable(tls, pSession, *(*int32)(unsafe.Pointer(bp + 24))) 26135 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 24)) != 0))) 26136 break 26137 26138 } 26139 26140 case 4: 26141 { 26142 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+28) != 0 { 26143 return TCL_ERROR 26144 } 26145 *(*int32)(unsafe.Pointer(bp + 28)) = sqlite3.Xsqlite3session_indirect(tls, pSession, *(*int32)(unsafe.Pointer(bp + 28))) 26146 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 28)) != 0))) 26147 break 26148 26149 } 26150 26151 case 5: 26152 { 26153 var val int32 26154 val = sqlite3.Xsqlite3session_isempty(tls, pSession) 26155 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(val != 0))) 26156 break 26157 26158 } 26159 26160 case 6: 26161 { 26162 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 26163 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26164 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 26165 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26166 tcl.XTclFreeObj(tls, _objPtr) 26167 } 26168 } 26169 } 26170 (*TestSession)(unsafe.Pointer(p)).Finterp = interp 26171 (*TestSession)(unsafe.Pointer(p)).FpFilterScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26172 (*Tcl_Obj)(unsafe.Pointer((*TestSession)(unsafe.Pointer(p)).FpFilterScript)).FrefCount++ 26173 sqlite3.Xsqlite3session_table_filter(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26174 f func(*libc.TLS, uintptr, uintptr) int32 26175 }{test_table_filter})), clientData) 26176 break 26177 26178 } 26179 26180 case 8: 26181 { 26182 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 26183 rc = sqlite3.Xsqlite3session_diff(tls, pSession, 26184 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 26185 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), 26186 bp+32) 26187 26188 if rc != 0 { 26189 return test_session_error(tls, interp, rc, *(*uintptr)(unsafe.Pointer(bp + 32))) 26190 } 26191 break 26192 26193 } 26194 26195 case 9: 26196 { 26197 var nMalloc sqlite3_int64 = sqlite3.Xsqlite3session_memory_used(tls, pSession) 26198 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nMalloc)) 26199 break 26200 26201 } 26202 26203 case 10: 26204 { 26205 var nSize sqlite3_int64 = sqlite3.Xsqlite3session_changeset_size(tls, pSession) 26206 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nSize)) 26207 break 26208 26209 } 26210 case 11: 26211 { 26212 var rc int32 26213 26214 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 26215 return TCL_ERROR 26216 } 26217 rc = sqlite3.Xsqlite3session_object_config(tls, 26218 pSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+40) 26219 if rc != SQLITE_OK { 26220 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26221 } else { 26222 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 26223 } 26224 break 26225 26226 } 26227 } 26228 26229 return TCL_OK 26230 } 26231 26232 type SessionSubcmd = struct { 26233 FzSub uintptr 26234 FnArg int32 26235 F__ccgo_pad1 [4]byte 26236 FzMsg uintptr 26237 FiSub int32 26238 F__ccgo_pad2 [4]byte 26239 } 26240 26241 var aSub = [13]SessionSubcmd{ 26242 {FzSub: ts + 10121, FnArg: 1, FzMsg: ts + 1951}, 26243 {FzSub: ts + 10128, FzMsg: ts + 584}, 26244 {FzSub: ts + 10138, FzMsg: ts + 584}, 26245 {FzSub: ts + 10145, FnArg: 1, FzMsg: ts + 10152}, 26246 {FzSub: ts + 10157, FnArg: 1, FzMsg: ts + 10152}, 26247 {FzSub: ts + 10166, FzMsg: ts + 584}, 26248 {FzSub: ts + 10174, FnArg: 1, FzMsg: ts + 10187}, 26249 {FzSub: ts + 10194, FzMsg: ts + 584}, 26250 {FzSub: ts + 10203, FnArg: 2, FzMsg: ts + 10208}, 26251 {FzSub: ts + 10219, FzMsg: ts + 584}, 26252 {FzSub: ts + 10231, FzMsg: ts + 584}, 26253 {FzSub: ts + 10246, FnArg: 1, FzMsg: ts + 2413}, 26254 {}, 26255 } 26256 26257 func test_session_del(tls *libc.TLS, clientData uintptr) { 26258 var p uintptr = clientData 26259 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 26260 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26261 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 26262 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26263 tcl.XTclFreeObj(tls, _objPtr) 26264 } 26265 } 26266 } 26267 sqlite3.Xsqlite3session_delete(tls, (*TestSession)(unsafe.Pointer(p)).FpSession) 26268 tcl.XTcl_Free(tls, p) 26269 } 26270 26271 func test_sqlite3session(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26272 bp := tls.Alloc(92) 26273 defer tls.Free(92) 26274 26275 var db uintptr 26276 26277 var rc int32 26278 var p uintptr 26279 *(*int32)(unsafe.Pointer(bp + 88)) = -1 26280 26281 if objc != 4 { 26282 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10265) 26283 return TCL_ERROR 26284 } 26285 26286 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) { 26287 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 26288 return TCL_ERROR 26289 } 26290 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26291 26292 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestSession{}))) 26293 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TestSession{}))) 26294 rc = sqlite3.Xsqlite3session_create(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), p) 26295 if rc != SQLITE_OK { 26296 tcl.XTcl_Free(tls, p) 26297 return test_session_error(tls, interp, rc, uintptr(0)) 26298 } 26299 26300 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 26301 26302 *(*int32)(unsafe.Pointer(bp + 88)) = 1 26303 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 26304 26305 tcl.XTcl_CreateObjCommand(tls, 26306 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 26307 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26308 }{test_session_cmd})), p, 26309 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_session_del}))) 26310 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26311 return TCL_OK 26312 } 26313 26314 func test_append_value(tls *libc.TLS, pList uintptr, pVal uintptr) { 26315 if pVal == uintptr(0) { 26316 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 26317 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 26318 } else { 26319 var pObj uintptr 26320 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 26321 case SQLITE_NULL: 26322 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10287, 1)) 26323 pObj = tcl.XTcl_NewObj(tls) 26324 break 26325 fallthrough 26326 case SQLITE_INTEGER: 26327 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10289, 1)) 26328 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, pVal)) 26329 break 26330 fallthrough 26331 case SQLITE_FLOAT: 26332 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10291, 1)) 26333 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, pVal)) 26334 break 26335 fallthrough 26336 case SQLITE_TEXT: 26337 { 26338 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 26339 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 26340 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10293, 1)) 26341 pObj = tcl.XTcl_NewStringObj(tls, z, n) 26342 break 26343 26344 } 26345 fallthrough 26346 default: 26347 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+6206, 1)) 26348 pObj = tcl.XTcl_NewByteArrayObj(tls, 26349 sqlite3.Xsqlite3_value_blob(tls, pVal), 26350 sqlite3.Xsqlite3_value_bytes(tls, pVal)) 26351 break 26352 } 26353 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, pObj) 26354 } 26355 } 26356 26357 type TestConflictHandler1 = struct { 26358 Finterp uintptr 26359 FpConflictScript uintptr 26360 FpFilterScript uintptr 26361 } 26362 26363 type TestConflictHandler = TestConflictHandler1 26364 26365 func test_obj_eq_string(tls *libc.TLS, p uintptr, z uintptr) int32 { 26366 bp := tls.Alloc(4) 26367 defer tls.Free(4) 26368 26369 var n int32 26370 26371 var zObj uintptr 26372 26373 n = int32(libc.Xstrlen(tls, z)) 26374 zObj = tcl.XTcl_GetStringFromObj(tls, p, bp) 26375 26376 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == n && (n == 0 || 0 == libc.Xmemcmp(tls, zObj, z, uint64(n)))) 26377 } 26378 26379 func test_filter_handler(tls *libc.TLS, pCtx uintptr, zTab uintptr) int32 { 26380 bp := tls.Alloc(4) 26381 defer tls.Free(4) 26382 26383 var p uintptr = pCtx 26384 *(*int32)(unsafe.Pointer(bp)) = 1 26385 var pEval uintptr 26386 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 26387 26388 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpFilterScript) 26389 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26390 26391 if TCL_OK != tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zTab, -1)) || 26392 TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) || 26393 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 26394 tcl.XTcl_BackgroundError(tls, interp) 26395 } 26396 26397 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26398 var _objPtr uintptr = pEval 26399 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26400 tcl.XTclFreeObj(tls, _objPtr) 26401 } 26402 } 26403 return *(*int32)(unsafe.Pointer(bp)) 26404 } 26405 26406 func test_conflict_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 26407 bp := tls.Alloc(104) 26408 defer tls.Free(104) 26409 26410 var p uintptr = pCtx 26411 var pEval uintptr 26412 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 26413 *(*int32)(unsafe.Pointer(bp + 100)) = 0 26414 26415 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpConflictScript) 26416 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26417 26418 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 26419 26420 if eConf == SQLITE_CHANGESET_FOREIGN_KEY { 26421 sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+16) 26422 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, ts+10295, -1)) 26423 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 26424 } else { 26425 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, 26426 func() uintptr { 26427 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 26428 return ts + 10307 26429 } 26430 return func() uintptr { 26431 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_UPDATE { 26432 return ts + 10314 26433 } 26434 return ts + 10321 26435 }() 26436 }(), -1)) 26437 26438 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp)), -1)) 26439 26440 switch eConf { 26441 case SQLITE_CHANGESET_DATA: 26442 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10328, -1)) 26443 break 26444 fallthrough 26445 case SQLITE_CHANGESET_NOTFOUND: 26446 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10333, -1)) 26447 break 26448 fallthrough 26449 case SQLITE_CHANGESET_CONFLICT: 26450 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10342, -1)) 26451 break 26452 fallthrough 26453 case SQLITE_CHANGESET_CONSTRAINT: 26454 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10351, -1)) 26455 break 26456 } 26457 26458 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 26459 var i int32 26460 var pOld uintptr = tcl.XTcl_NewObj(tls) 26461 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26462 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+24) 26463 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 24))) 26464 } 26465 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pOld) 26466 } 26467 26468 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 26469 var i int32 26470 var pNew uintptr = tcl.XTcl_NewObj(tls) 26471 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26472 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+32) 26473 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 32))) 26474 } 26475 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pNew) 26476 } 26477 26478 if eConf == SQLITE_CHANGESET_DATA || eConf == SQLITE_CHANGESET_CONFLICT { 26479 var i int32 26480 var pConflict uintptr = tcl.XTcl_NewObj(tls) 26481 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26482 var rc int32 26483 _ = rc 26484 26485 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, i, bp+40) 26486 26487 test_append_value(tls, pConflict, *(*uintptr)(unsafe.Pointer(bp + 40))) 26488 } 26489 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pConflict) 26490 } 26491 26492 if eConf == SQLITE_CHANGESET_CONSTRAINT || 26493 eConf == SQLITE_CHANGESET_NOTFOUND { 26494 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, 0, bp+48) 26495 _ = rc 26496 26497 } else { 26498 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, -1, bp+56) 26499 _ = rc 26500 26501 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+56) 26502 26503 } 26504 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_DELETE { 26505 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, 0, bp+64) 26506 _ = rc 26507 26508 } else { 26509 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, -1, bp+72) 26510 _ = rc 26511 26512 rc = sqlite3.Xsqlite3changeset_new(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+72) 26513 26514 } 26515 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 26516 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, 0, bp+80) 26517 _ = rc 26518 26519 } else { 26520 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, -1, bp+88) 26521 _ = rc 26522 26523 rc = sqlite3.Xsqlite3changeset_old(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+88) 26524 26525 } 26526 if eConf != SQLITE_CHANGESET_FOREIGN_KEY { 26527 var rc int32 = sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+96) 26528 _ = rc 26529 26530 } 26531 26532 } 26533 26534 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) { 26535 tcl.XTcl_BackgroundError(tls, interp) 26536 } else { 26537 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 26538 if test_obj_eq_string(tls, pRes, ts+10362) != 0 || test_obj_eq_string(tls, pRes, ts+584) != 0 { 26539 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_OMIT 26540 } else if test_obj_eq_string(tls, pRes, ts+7846) != 0 { 26541 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_REPLACE 26542 } else if test_obj_eq_string(tls, pRes, ts+7840) != 0 { 26543 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_ABORT 26544 } else { 26545 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pRes, bp+100) 26546 } 26547 } 26548 26549 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26550 var _objPtr uintptr = pEval 26551 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26552 tcl.XTclFreeObj(tls, _objPtr) 26553 } 26554 } 26555 return *(*int32)(unsafe.Pointer(bp + 100)) 26556 } 26557 26558 func replace_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 26559 bp := tls.Alloc(32) 26560 defer tls.Free(32) 26561 26562 var i int32 26563 var x int32 = 0 26564 26565 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 26566 26567 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 26568 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26569 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+16) 26570 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 26571 x++ 26572 } 26573 } 26574 26575 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 26576 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26577 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+24) 26578 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 26579 x++ 26580 } 26581 } 26582 26583 if eConf == SQLITE_CHANGESET_DATA { 26584 return SQLITE_CHANGESET_REPLACE 26585 } 26586 return SQLITE_CHANGESET_OMIT 26587 } 26588 26589 func testStreamInput(tls *libc.TLS, pCtx uintptr, pData uintptr, pnData uintptr) int32 { 26590 var p uintptr = pCtx 26591 var nReq int32 = *(*int32)(unsafe.Pointer(pnData)) 26592 var nRem int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnData - (*TestStreamInput)(unsafe.Pointer(p)).FiData 26593 var nRet int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnStream 26594 26595 var pAlloc uintptr = sqlite3.Xsqlite3_malloc(tls, 10) 26596 if pAlloc == uintptr(0) { 26597 return SQLITE_NOMEM 26598 } 26599 sqlite3.Xsqlite3_free(tls, pAlloc) 26600 26601 if nRet > nReq { 26602 nRet = nReq 26603 } 26604 if nRet > nRem { 26605 nRet = nRem 26606 } 26607 26608 if nRet > 0 { 26609 libc.Xmemcpy(tls, pData, (*TestStreamInput)(unsafe.Pointer(p)).FaData+uintptr((*TestStreamInput)(unsafe.Pointer(p)).FiData), uint64(nRet)) 26610 *(*int32)(unsafe.Pointer(p + 20)) += nRet 26611 } 26612 26613 *(*int32)(unsafe.Pointer(pnData)) = nRet 26614 return SQLITE_OK 26615 } 26616 26617 func testSqlite3changesetApply(tls *libc.TLS, bV2 int32, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26618 bp := tls.Alloc(156) 26619 defer tls.Free(156) 26620 26621 var db uintptr 26622 26623 var rc int32 26624 var pChangeset uintptr 26625 26626 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 26627 *(*int32)(unsafe.Pointer(bp + 152)) = 0 26628 var flags int32 = 0 26629 26630 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26631 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26632 26633 if bV2 != 0 { 26634 if objc > 1 { 26635 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26636 var n int32 = int32(libc.Xstrlen(tls, z1)) 26637 if n > 1 && n <= 12 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10367, z1, n) { 26638 flags = flags | SQLITE_CHANGESETAPPLY_NOSAVEPOINT 26639 objc-- 26640 objv += 8 26641 } 26642 } 26643 if objc > 1 { 26644 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26645 var n int32 = int32(libc.Xstrlen(tls, z1)) 26646 if n > 1 && n <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10380, z1, n) { 26647 flags = flags | SQLITE_CHANGESETAPPLY_INVERT 26648 objc-- 26649 objv += 8 26650 } 26651 } 26652 } 26653 26654 if objc != 4 && objc != 5 { 26655 var zMsg uintptr 26656 if bV2 != 0 { 26657 zMsg = ts + 10388 26658 } else { 26659 zMsg = ts + 10459 26660 } 26661 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zMsg) 26662 return TCL_ERROR 26663 } 26664 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) { 26665 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), 0)) 26666 return TCL_ERROR 26667 } 26668 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData)) 26669 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+112) 26670 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpConflictScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 26671 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpFilterScript = func() uintptr { 26672 if objc == 5 { 26673 return *(*uintptr)(unsafe.Pointer(objv + 4*8)) 26674 } 26675 return uintptr(0) 26676 }() 26677 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).Finterp = interp 26678 26679 if (*TestStreamInput)(unsafe.Pointer(bp+24)).FnStream == 0 { 26680 if bV2 == 0 { 26681 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 26682 func() uintptr { 26683 if objc == 5 { 26684 return *(*uintptr)(unsafe.Pointer(&struct { 26685 f func(*libc.TLS, uintptr, uintptr) int32 26686 }{test_filter_handler})) 26687 } 26688 return uintptr(0) 26689 }(), *(*uintptr)(unsafe.Pointer(&struct { 26690 f func(*libc.TLS, uintptr, int32, uintptr) int32 26691 }{test_conflict_handler})), bp+120) 26692 } else { 26693 rc = sqlite3.Xsqlite3changeset_apply_v2(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 26694 func() uintptr { 26695 if objc == 5 { 26696 return *(*uintptr)(unsafe.Pointer(&struct { 26697 f func(*libc.TLS, uintptr, uintptr) int32 26698 }{test_filter_handler})) 26699 } 26700 return uintptr(0) 26701 }(), *(*uintptr)(unsafe.Pointer(&struct { 26702 f func(*libc.TLS, uintptr, int32, uintptr) int32 26703 }{test_conflict_handler})), bp+120, 26704 bp+144, bp+152, flags) 26705 } 26706 } else { 26707 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = pChangeset 26708 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnData = *(*int32)(unsafe.Pointer(bp + 112)) 26709 if bV2 == 0 { 26710 rc = sqlite3.Xsqlite3changeset_apply_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 26711 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26712 }{testStreamInput})), bp+24, 26713 func() uintptr { 26714 if objc == 5 { 26715 return *(*uintptr)(unsafe.Pointer(&struct { 26716 f func(*libc.TLS, uintptr, uintptr) int32 26717 }{test_filter_handler})) 26718 } 26719 return uintptr(0) 26720 }(), 26721 *(*uintptr)(unsafe.Pointer(&struct { 26722 f func(*libc.TLS, uintptr, int32, uintptr) int32 26723 }{test_conflict_handler})), bp+120) 26724 } else { 26725 rc = sqlite3.Xsqlite3changeset_apply_v2_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 26726 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26727 }{testStreamInput})), bp+24, 26728 func() uintptr { 26729 if objc == 5 { 26730 return *(*uintptr)(unsafe.Pointer(&struct { 26731 f func(*libc.TLS, uintptr, uintptr) int32 26732 }{test_filter_handler})) 26733 } 26734 return uintptr(0) 26735 }(), 26736 *(*uintptr)(unsafe.Pointer(&struct { 26737 f func(*libc.TLS, uintptr, int32, uintptr) int32 26738 }{test_conflict_handler})), bp+120, 26739 bp+144, bp+152, flags) 26740 } 26741 } 26742 26743 if rc != SQLITE_OK { 26744 return test_session_error(tls, interp, rc, uintptr(0)) 26745 } else { 26746 tcl.XTcl_ResetResult(tls, interp) 26747 if bV2 != 0 && *(*uintptr)(unsafe.Pointer(bp + 144)) != 0 { 26748 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 144)), *(*int32)(unsafe.Pointer(bp + 152)))) 26749 } 26750 } 26751 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 144))) 26752 return TCL_OK 26753 } 26754 26755 func test_sqlite3changeset_apply(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26756 return testSqlite3changesetApply(tls, 0, clientData, interp, objc, objv) 26757 } 26758 26759 func test_sqlite3changeset_apply_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26760 return testSqlite3changesetApply(tls, 1, clientData, interp, objc, objv) 26761 } 26762 26763 func test_sqlite3changeset_apply_replace_all(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26764 bp := tls.Alloc(92) 26765 defer tls.Free(92) 26766 26767 var db uintptr 26768 26769 var rc int32 26770 var pChangeset uintptr 26771 26772 if objc != 3 { 26773 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10504) 26774 return TCL_ERROR 26775 } 26776 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) { 26777 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 26778 return TCL_ERROR 26779 } 26780 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26781 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+88) 26782 26783 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 88)), pChangeset, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 26784 f func(*libc.TLS, uintptr, int32, uintptr) int32 26785 }{replace_handler})), uintptr(0)) 26786 if rc != SQLITE_OK { 26787 return test_session_error(tls, interp, rc, uintptr(0)) 26788 } 26789 tcl.XTcl_ResetResult(tls, interp) 26790 return TCL_OK 26791 } 26792 26793 func test_sqlite3changeset_invert(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26794 bp := tls.Alloc(40) 26795 defer tls.Free(40) 26796 26797 var rc int32 26798 26799 if objc != 2 { 26800 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10517) 26801 return TCL_ERROR 26802 } 26803 26804 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26805 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestSessionsBlob{}))) 26806 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26807 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 26808 26809 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream != 0 { 26810 rc = sqlite3.Xsqlite3changeset_invert_strm(tls, 26811 *(*uintptr)(unsafe.Pointer(&struct { 26812 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26813 }{testStreamInput})), bp, *(*uintptr)(unsafe.Pointer(&struct { 26814 f func(*libc.TLS, uintptr, uintptr, int32) int32 26815 }{testStreamOutput})), bp+24) 26816 } else { 26817 rc = sqlite3.Xsqlite3changeset_invert(tls, (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, bp+24+8, bp+24) 26818 } 26819 if rc != SQLITE_OK { 26820 rc = test_session_error(tls, interp, rc, uintptr(0)) 26821 } else { 26822 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fn)) 26823 } 26824 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp) 26825 return rc 26826 } 26827 26828 func test_sqlite3changeset_concat(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26829 bp := tls.Alloc(64) 26830 defer tls.Free(64) 26831 26832 var rc int32 26833 26834 *(*TestSessionsBlob)(unsafe.Pointer(bp + 48)) = TestSessionsBlob{} 26835 26836 if objc != 3 { 26837 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10527) 26838 return TCL_ERROR 26839 } 26840 26841 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26842 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26843 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 26844 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24+16) 26845 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26846 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = (*TestStreamInput)(unsafe.Pointer(bp)).FnStream 26847 26848 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream > 0 { 26849 rc = sqlite3.Xsqlite3changeset_concat_strm(tls, 26850 *(*uintptr)(unsafe.Pointer(&struct { 26851 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26852 }{testStreamInput})), bp, 26853 *(*uintptr)(unsafe.Pointer(&struct { 26854 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26855 }{testStreamInput})), bp+24, 26856 *(*uintptr)(unsafe.Pointer(&struct { 26857 f func(*libc.TLS, uintptr, uintptr, int32) int32 26858 }{testStreamOutput})), bp+48) 26859 } else { 26860 rc = sqlite3.Xsqlite3changeset_concat(tls, 26861 (*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) 26862 } 26863 26864 if rc != SQLITE_OK { 26865 rc = test_session_error(tls, interp, rc, uintptr(0)) 26866 } else { 26867 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fn)) 26868 } 26869 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp) 26870 return rc 26871 } 26872 26873 func test_sqlite3session_foreach(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26874 bp := tls.Alloc(104) 26875 defer tls.Free(104) 26876 26877 var pChangeset uintptr 26878 26879 var rc int32 26880 var pVarname uintptr 26881 var pCS uintptr 26882 var pScript uintptr 26883 var isCheckNext int32 = 0 26884 var isInvert int32 = 0 26885 26886 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26887 26888 for objc > 1 { 26889 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26890 var nOpt int32 = int32(libc.Xstrlen(tls, zOpt)) 26891 if int32(*(*int8)(unsafe.Pointer(zOpt))) != '-' { 26892 break 26893 } 26894 if nOpt <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10380, nOpt) { 26895 isInvert = 1 26896 } else if nOpt <= 5 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10538, nOpt) { 26897 isCheckNext = 1 26898 } else { 26899 break 26900 } 26901 objv += 8 26902 objc-- 26903 } 26904 if objc != 4 { 26905 tcl.XTcl_WrongNumArgs(tls, 26906 interp, 1, objv, ts+10544) 26907 return TCL_ERROR 26908 } 26909 26910 pVarname = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 26911 pCS = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 26912 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 26913 26914 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, pCS, bp+24) 26915 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26916 if isInvert != 0 { 26917 var f int32 = SQLITE_CHANGESETSTART_INVERT 26918 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 26919 rc = sqlite3.Xsqlite3changeset_start_v2(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset, f) 26920 } else { 26921 var pCtx uintptr = bp 26922 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 26923 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 26924 rc = sqlite3.Xsqlite3changeset_start_v2_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 26925 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26926 }{testStreamInput})), pCtx, f) 26927 } 26928 } else { 26929 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 26930 rc = sqlite3.Xsqlite3changeset_start(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset) 26931 } else { 26932 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 26933 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 26934 rc = sqlite3.Xsqlite3changeset_start_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 26935 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26936 }{testStreamInput})), bp) 26937 } 26938 } 26939 if rc != SQLITE_OK { 26940 return test_session_error(tls, interp, rc, uintptr(0)) 26941 } 26942 26943 for SQLITE_ROW == sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) { 26944 var pVar uintptr 26945 var pOld uintptr 26946 var pNew uintptr 26947 26948 var zPK uintptr 26949 26950 var i int32 26951 26952 if SQLITE_MISUSE != sqlite3.Xsqlite3changeset_fk_conflicts(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+40) { 26953 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 26954 return TCL_ERROR 26955 } 26956 26957 sqlite3.Xsqlite3changeset_op(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+48, bp+56, bp+60, bp+64) 26958 pVar = tcl.XTcl_NewObj(tls) 26959 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, 26960 func() uintptr { 26961 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_INSERT { 26962 return ts + 10307 26963 } 26964 return func() uintptr { 26965 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_UPDATE { 26966 return ts + 10314 26967 } 26968 return ts + 10321 26969 }() 26970 }(), -1)) 26971 26972 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), -1)) 26973 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 64)) != 0))) 26974 26975 zPK = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 56))+1)) 26976 libc.Xmemset(tls, zPK, 0, uint64(*(*int32)(unsafe.Pointer(bp + 56))+1)) 26977 sqlite3.Xsqlite3changeset_pk(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+72, bp+80) 26978 26979 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 26980 *(*int8)(unsafe.Pointer(zPK + uintptr(i))) = func() int8 { 26981 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)) + uintptr(i))) != 0 { 26982 return int8('X') 26983 } 26984 return int8('.') 26985 }() 26986 } 26987 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, zPK, -1)) 26988 tcl.XTcl_Free(tls, zPK) 26989 26990 pOld = tcl.XTcl_NewObj(tls) 26991 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_INSERT { 26992 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 26993 sqlite3.Xsqlite3changeset_old(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+88) 26994 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 88))) 26995 } 26996 } 26997 pNew = tcl.XTcl_NewObj(tls) 26998 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_DELETE { 26999 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 27000 sqlite3.Xsqlite3changeset_new(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+96) 27001 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 96))) 27002 } 27003 } 27004 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pOld) 27005 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pNew) 27006 27007 tcl.XTcl_ObjSetVar2(tls, interp, pVarname, uintptr(0), pVar, 0) 27008 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 27009 if rc != TCL_OK && rc != TCL_CONTINUE { 27010 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27011 if rc == TCL_BREAK { 27012 return TCL_OK 27013 } 27014 return rc 27015 } 27016 } 27017 27018 if isCheckNext != 0 { 27019 var rc2 int32 = sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27020 _ = rc2 27021 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27022 27023 } else { 27024 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27025 } 27026 if rc != SQLITE_OK { 27027 return test_session_error(tls, interp, rc, uintptr(0)) 27028 } 27029 27030 return TCL_OK 27031 } 27032 27033 func test_rebaser_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27034 bp := tls.Alloc(48) 27035 defer tls.Free(48) 27036 27037 var p uintptr = clientData 27038 27039 var rc int32 27040 27041 if objc < 2 { 27042 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 27043 return TCL_ERROR 27044 } 27045 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 27046 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub1)), int32(unsafe.Sizeof(RebaseSubcmd{})), ts+2014, 0, bp) 27047 if rc != TCL_OK { 27048 return rc 27049 } 27050 if objc != 2+aSub1[*(*int32)(unsafe.Pointer(bp))].FnArg { 27051 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub1[*(*int32)(unsafe.Pointer(bp))].FzMsg) 27052 return TCL_ERROR 27053 } 27054 27055 switch *(*int32)(unsafe.Pointer(bp)) { 27056 case 0: 27057 { 27058 *(*int32)(unsafe.Pointer(bp + 4)) = 0 27059 var pRebase uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 27060 rc = sqlite3.Xsqlite3rebaser_configure(tls, p, *(*int32)(unsafe.Pointer(bp + 4)), pRebase) 27061 break 27062 27063 } 27064 27065 case 1: 27066 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 27067 break 27068 27069 default: 27070 { 27071 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27072 libc.Xmemset(tls, bp+32, 0, uint64(unsafe.Sizeof(TestSessionsBlob{}))) 27073 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8+16) 27074 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27075 27076 if (*TestStreamInput)(unsafe.Pointer(bp+8)).FnStream != 0 { 27077 rc = sqlite3.Xsqlite3rebaser_rebase_strm(tls, p, 27078 *(*uintptr)(unsafe.Pointer(&struct { 27079 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27080 }{testStreamInput})), bp+8, 27081 *(*uintptr)(unsafe.Pointer(&struct { 27082 f func(*libc.TLS, uintptr, uintptr, int32) int32 27083 }{testStreamOutput})), bp+32) 27084 } else { 27085 rc = sqlite3.Xsqlite3rebaser_rebase(tls, p, (*TestStreamInput)(unsafe.Pointer(bp+8)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+8)).FaData, bp+32+8, bp+32) 27086 } 27087 27088 if rc == SQLITE_OK { 27089 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fn)) 27090 } 27091 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp) 27092 break 27093 27094 } 27095 } 27096 27097 if rc != SQLITE_OK { 27098 return test_session_error(tls, interp, rc, uintptr(0)) 27099 } 27100 return TCL_OK 27101 } 27102 27103 type RebaseSubcmd = struct { 27104 FzSub uintptr 27105 FnArg int32 27106 F__ccgo_pad1 [4]byte 27107 FzMsg uintptr 27108 FiSub int32 27109 F__ccgo_pad2 [4]byte 27110 } 27111 27112 var aSub1 = [4]RebaseSubcmd{ 27113 {FzSub: ts + 10587, FnArg: 1, FzMsg: ts + 10597}, 27114 {FzSub: ts + 10138, FzMsg: ts + 584}, 27115 {FzSub: ts + 10609, FnArg: 1, FzMsg: ts + 10517}, 27116 {}, 27117 } 27118 27119 func test_rebaser_del(tls *libc.TLS, clientData uintptr) { 27120 var p uintptr = clientData 27121 sqlite3.Xsqlite3rebaser_delete(tls, p) 27122 } 27123 27124 func test_sqlite3rebaser_create(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27125 bp := tls.Alloc(8) 27126 defer tls.Free(8) 27127 27128 var rc int32 27129 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 27130 if objc != 2 { 27131 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 27132 return SQLITE_ERROR 27133 } 27134 27135 rc = sqlite3.Xsqlite3rebaser_create(tls, bp) 27136 if rc != SQLITE_OK { 27137 return test_session_error(tls, interp, rc, uintptr(0)) 27138 } 27139 27140 tcl.XTcl_CreateObjCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 27141 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27142 }{test_rebaser_cmd})), 27143 *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_rebaser_del}))) 27144 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27145 return TCL_OK 27146 } 27147 27148 func test_sqlite3session_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27149 bp := tls.Alloc(8) 27150 defer tls.Free(8) 27151 27152 var rc int32 27153 27154 if objc != 3 { 27155 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10616) 27156 return SQLITE_ERROR 27157 } 27158 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 27159 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub2)), int32(unsafe.Sizeof(ConfigOpt{})), ts+2014, 0, bp) 27160 if rc != TCL_OK { 27161 return rc 27162 } 27163 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 27164 return TCL_ERROR 27165 } 27166 27167 rc = sqlite3.Xsqlite3session_config(tls, aSub2[*(*int32)(unsafe.Pointer(bp))].Fop, bp+4) 27168 if rc != SQLITE_OK { 27169 return test_session_error(tls, interp, rc, uintptr(0)) 27170 } 27171 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 27172 return TCL_OK 27173 } 27174 27175 type ConfigOpt = struct { 27176 FzSub uintptr 27177 Fop int32 27178 F__ccgo_pad1 [4]byte 27179 } 27180 27181 var aSub2 = [3]ConfigOpt{ 27182 {FzSub: ts + 10625, Fop: SQLITE_SESSION_CONFIG_STRMSIZE}, 27183 {FzSub: ts + 2758}, 27184 {}, 27185 } 27186 27187 func TestSession_Init(tls *libc.TLS, interp uintptr) int32 { 27188 bp := tls.Alloc(160) 27189 defer tls.Free(160) 27190 27191 *(*[10]struct { 27192 FzCmd uintptr 27193 FxProc uintptr 27194 })(unsafe.Pointer(bp)) = [10]struct { 27195 FzCmd uintptr 27196 FxProc uintptr 27197 }{ 27198 {FzCmd: ts + 10635, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27199 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27200 }{test_sqlite3session}))}, 27201 {FzCmd: ts + 10650, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27202 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27203 }{test_sqlite3session_foreach}))}, 27204 {FzCmd: ts + 10673, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27205 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27206 }{test_sqlite3changeset_invert}))}, 27207 {FzCmd: ts + 10697, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27208 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27209 }{test_sqlite3changeset_concat}))}, 27210 {FzCmd: ts + 10721, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27211 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27212 }{test_sqlite3changeset_apply}))}, 27213 {FzCmd: ts + 10744, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27214 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27215 }{test_sqlite3changeset_apply_v2}))}, 27216 {FzCmd: ts + 10770, 27217 FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27218 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27219 }{test_sqlite3changeset_apply_replace_all}))}, 27220 {FzCmd: ts + 10805, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27221 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27222 }{test_sql_exec_changeset}))}, 27223 {FzCmd: ts + 10824, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27224 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27225 }{test_sqlite3rebaser_create}))}, 27226 {FzCmd: ts + 10846, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27227 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27228 }{test_sqlite3session_config}))}, 27229 } 27230 var i int32 27231 27232 for i = 0; uint64(i) < uint64(unsafe.Sizeof([10]struct { 27233 FzCmd uintptr 27234 FxProc uintptr 27235 }{}))/uint64(unsafe.Sizeof(struct { 27236 FzCmd uintptr 27237 FxProc uintptr 27238 }{})); i++ { 27239 var p uintptr = bp + uintptr(i)*16 27240 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 27241 FzCmd uintptr 27242 FxProc uintptr 27243 })(unsafe.Pointer(p)).FzCmd, (*struct { 27244 FzCmd uintptr 27245 FxProc uintptr 27246 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 27247 } 27248 27249 return TCL_OK 27250 } 27251 27252 type sig_atomic_t = int64 27253 27254 type sigcontext = struct { 27255 Fsc_mask struct{ F__bits [4]uint32 } 27256 Fsc_onstack int64 27257 Fsc_rdi int64 27258 Fsc_rsi int64 27259 Fsc_rdx int64 27260 Fsc_rcx int64 27261 Fsc_r8 int64 27262 Fsc_r9 int64 27263 Fsc_rax int64 27264 Fsc_rbx int64 27265 Fsc_rbp int64 27266 Fsc_r10 int64 27267 Fsc_r11 int64 27268 Fsc_r12 int64 27269 Fsc_r13 int64 27270 Fsc_r14 int64 27271 Fsc_r15 int64 27272 Fsc_trapno int32 27273 Fsc_fs int16 27274 Fsc_gs int16 27275 Fsc_addr int64 27276 Fsc_flags int32 27277 Fsc_es int16 27278 Fsc_ds int16 27279 Fsc_err int64 27280 Fsc_rip int64 27281 Fsc_cs int64 27282 Fsc_rflags int64 27283 Fsc_rsp int64 27284 Fsc_ss int64 27285 Fsc_len int64 27286 Fsc_fpformat int64 27287 Fsc_ownedfp int64 27288 Fsc_fpstate [64]int64 27289 Fsc_fsbase int64 27290 Fsc_gsbase int64 27291 Fsc_xfpustate int64 27292 Fsc_xfpustate_len int64 27293 Fsc_spare [4]int64 27294 } 27295 27296 type sigval = struct { 27297 F__ccgo_pad1 [0]uint64 27298 Fsival_int int32 27299 F__ccgo_pad2 [4]byte 27300 } 27301 27302 type __siginfo = struct { 27303 Fsi_signo int32 27304 Fsi_errno int32 27305 Fsi_code int32 27306 Fsi_pid int32 27307 Fsi_uid uint32 27308 Fsi_status int32 27309 Fsi_addr uintptr 27310 Fsi_value struct { 27311 F__ccgo_pad1 [0]uint64 27312 Fsival_int int32 27313 F__ccgo_pad2 [4]byte 27314 } 27315 F_reason struct { 27316 F__ccgo_pad1 [0]uint64 27317 F_fault struct{ F_trapno int32 } 27318 F__ccgo_pad2 [36]byte 27319 } 27320 } 27321 27322 type siginfo_t = __siginfo 27323 27324 type sigaction = struct { 27325 F__sigaction_u struct{ F__sa_handler uintptr } 27326 Fsa_flags int32 27327 Fsa_mask sigset_t 27328 F__ccgo_pad1 [4]byte 27329 } 27330 27331 type sig_t = uintptr 27332 27333 type sigaltstack = struct { 27334 Fss_sp uintptr 27335 Fss_size uint64 27336 Fss_flags int32 27337 F__ccgo_pad1 [4]byte 27338 } 27339 27340 type stack_t = sigaltstack 27341 27342 type sigvec = struct { 27343 Fsv_handler uintptr 27344 Fsv_mask int32 27345 Fsv_flags int32 27346 } 27347 27348 type sigstack = struct { 27349 Fss_sp uintptr 27350 Fss_onstack int32 27351 F__ccgo_pad1 [4]byte 27352 } 27353 27354 type __mcontext = struct { 27355 Fmc_onstack int64 27356 Fmc_rdi int64 27357 Fmc_rsi int64 27358 Fmc_rdx int64 27359 Fmc_rcx int64 27360 Fmc_r8 int64 27361 Fmc_r9 int64 27362 Fmc_rax int64 27363 Fmc_rbx int64 27364 Fmc_rbp int64 27365 Fmc_r10 int64 27366 Fmc_r11 int64 27367 Fmc_r12 int64 27368 Fmc_r13 int64 27369 Fmc_r14 int64 27370 Fmc_r15 int64 27371 Fmc_trapno uint32 27372 Fmc_fs uint16 27373 Fmc_gs uint16 27374 Fmc_addr int64 27375 Fmc_flags uint32 27376 Fmc_es uint16 27377 Fmc_ds uint16 27378 Fmc_err int64 27379 Fmc_rip int64 27380 Fmc_cs int64 27381 Fmc_rflags int64 27382 Fmc_rsp int64 27383 Fmc_ss int64 27384 Fmc_len int64 27385 Fmc_fpformat int64 27386 Fmc_ownedfp int64 27387 Fmc_fpstate [64]int64 27388 Fmc_fsbase int64 27389 Fmc_gsbase int64 27390 Fmc_xfpustate int64 27391 Fmc_xfpustate_len int64 27392 Fmc_spare [4]int64 27393 } 27394 27395 type mcontext_t = __mcontext 27396 27397 type __ucontext = struct { 27398 Fuc_sigmask struct{ F__bits [4]uint32 } 27399 Fuc_mcontext mcontext_t 27400 Fuc_link uintptr 27401 Fuc_stack struct { 27402 Fss_sp uintptr 27403 Fss_size uint64 27404 Fss_flags int32 27405 F__ccgo_pad1 [4]byte 27406 } 27407 Fuc_flags int32 27408 F__spare__ [4]int32 27409 F__ccgo_pad1 [4]byte 27410 } 27411 27412 type ucontext_t = __ucontext 27413 27414 type SqliteDb = struct { 27415 Fdb uintptr 27416 Finterp uintptr 27417 FzBusy uintptr 27418 FzCommit uintptr 27419 FzTrace uintptr 27420 FzTraceV2 uintptr 27421 FzProfile uintptr 27422 FzProgress uintptr 27423 FzBindFallback uintptr 27424 FzAuth uintptr 27425 FdisableAuth int32 27426 F__ccgo_pad1 [4]byte 27427 FzNull uintptr 27428 FpFunc uintptr 27429 FpUpdateHook uintptr 27430 FpPreUpdateHook uintptr 27431 FpRollbackHook uintptr 27432 FpWalHook uintptr 27433 FpUnlockNotify uintptr 27434 FpCollate uintptr 27435 Frc int32 27436 F__ccgo_pad2 [4]byte 27437 FpCollateNeeded uintptr 27438 FstmtList uintptr 27439 FstmtLast uintptr 27440 FmaxStmt int32 27441 FnStmt int32 27442 FpIncrblob uintptr 27443 FnStep int32 27444 FnSort int32 27445 FnIndex int32 27446 FnVMStep int32 27447 FnTransaction int32 27448 FopenFlags int32 27449 FnRef int32 27450 FbLegacyPrepare int32 27451 } 27452 27453 type SqlFunc1 = struct { 27454 Finterp uintptr 27455 FpScript uintptr 27456 FpDb uintptr 27457 FuseEvalObjv int32 27458 FeType int32 27459 FzName uintptr 27460 FpNext uintptr 27461 } 27462 27463 type SqlFunc = SqlFunc1 27464 27465 type SqlCollate1 = struct { 27466 Finterp uintptr 27467 FzScript uintptr 27468 FpNext uintptr 27469 } 27470 27471 type SqlCollate = SqlCollate1 27472 27473 type SqlPreparedStmt1 = struct { 27474 FpNext uintptr 27475 FpPrev uintptr 27476 FpStmt uintptr 27477 FnSql int32 27478 F__ccgo_pad1 [4]byte 27479 FzSql uintptr 27480 FnParm int32 27481 F__ccgo_pad2 [4]byte 27482 FapParm uintptr 27483 } 27484 27485 type SqlPreparedStmt = SqlPreparedStmt1 27486 27487 type IncrblobChannel1 = struct { 27488 FpBlob uintptr 27489 FpDb uintptr 27490 FiSeek int32 27491 F__ccgo_pad1 [4]byte 27492 Fchannel Tcl_Channel 27493 FpNext uintptr 27494 FpPrev uintptr 27495 } 27496 27497 type IncrblobChannel = IncrblobChannel1 27498 27499 func strlen30(tls *libc.TLS, z uintptr) int32 { 27500 var z2 uintptr = z 27501 for *(*int8)(unsafe.Pointer(z2)) != 0 { 27502 z2++ 27503 } 27504 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 27505 } 27506 27507 func closeIncrblobChannels(tls *libc.TLS, pDb uintptr) { 27508 var p uintptr 27509 var pNext uintptr 27510 27511 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob; p != 0; p = pNext { 27512 pNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27513 27514 tcl.XTcl_UnregisterChannel(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27515 } 27516 } 27517 27518 func incrblobClose(tls *libc.TLS, instanceData ClientData, interp uintptr) int32 { 27519 var p uintptr = instanceData 27520 var rc int32 = sqlite3.Xsqlite3_blob_close(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27521 var db uintptr = (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).Fdb 27522 27523 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27524 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev 27525 } 27526 if (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev != 0 { 27527 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpPrev)).FpNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27528 } 27529 if (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob == p { 27530 (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27531 } 27532 27533 tcl.XTcl_Free(tls, p) 27534 27535 if rc != SQLITE_OK { 27536 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(1)) 27537 return TCL_ERROR 27538 } 27539 return TCL_OK 27540 } 27541 27542 func incrblobInput(tls *libc.TLS, instanceData ClientData, buf uintptr, bufSize int32, errorCodePtr uintptr) int32 { 27543 var p uintptr = instanceData 27544 var nRead int32 = bufSize 27545 var nBlob int32 27546 var rc int32 27547 27548 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27549 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nRead > nBlob { 27550 nRead = nBlob - (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27551 } 27552 if nRead <= 0 { 27553 return 0 27554 } 27555 27556 rc = sqlite3.Xsqlite3_blob_read(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nRead, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27557 if rc != SQLITE_OK { 27558 *(*int32)(unsafe.Pointer(errorCodePtr)) = rc 27559 return -1 27560 } 27561 27562 *(*int32)(unsafe.Pointer(p + 16)) += nRead 27563 return nRead 27564 } 27565 27566 func incrblobOutput(tls *libc.TLS, instanceData ClientData, buf uintptr, toWrite int32, errorCodePtr uintptr) int32 { 27567 var p uintptr = instanceData 27568 var nWrite int32 = toWrite 27569 var nBlob int32 27570 var rc int32 27571 27572 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27573 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nWrite > nBlob { 27574 *(*int32)(unsafe.Pointer(errorCodePtr)) = EINVAL 27575 return -1 27576 } 27577 if nWrite <= 0 { 27578 return 0 27579 } 27580 27581 rc = sqlite3.Xsqlite3_blob_write(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nWrite, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27582 if rc != SQLITE_OK { 27583 *(*int32)(unsafe.Pointer(errorCodePtr)) = EIO 27584 return -1 27585 } 27586 27587 *(*int32)(unsafe.Pointer(p + 16)) += nWrite 27588 return nWrite 27589 } 27590 27591 func incrblobSeek(tls *libc.TLS, instanceData ClientData, offset int64, seekMode int32, errorCodePtr uintptr) int32 { 27592 var p uintptr = instanceData 27593 27594 switch seekMode { 27595 case SEEK_SET: 27596 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(offset) 27597 break 27598 case SEEK_CUR: 27599 *(*int32)(unsafe.Pointer(p + 16)) += int32(offset) 27600 break 27601 case SEEK_END: 27602 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(int64(sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob)) + offset) 27603 break 27604 27605 default: 27606 } 27607 27608 return (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27609 } 27610 27611 func incrblobWatch(tls *libc.TLS, instanceData ClientData, mode int32) { 27612 } 27613 27614 func incrblobHandle(tls *libc.TLS, instanceData ClientData, dir int32, hPtr uintptr) int32 { 27615 return TCL_ERROR 27616 } 27617 27618 var IncrblobChannelType = Tcl_ChannelType{ 27619 FtypeName: ts + 10868, 27620 Fversion: uintptr(0x2), 27621 FcloseProc: 0, 27622 FinputProc: 0, 27623 FoutputProc: 0, 27624 FseekProc: 0, 27625 FwatchProc: 0, 27626 FgetHandleProc: 0, 27627 } 27628 27629 func createIncrblobChannel(tls *libc.TLS, interp uintptr, pDb uintptr, zDb uintptr, zTable uintptr, zColumn uintptr, iRow sqlite_int64, isReadonly int32) int32 { 27630 bp := tls.Alloc(80) 27631 defer tls.Free(80) 27632 27633 var p uintptr 27634 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 27635 27636 var rc int32 27637 var flags int32 = int32(1)<<1 | func() int32 { 27638 if isReadonly != 0 { 27639 return 0 27640 } 27641 return int32(1) << 2 27642 }() 27643 27644 rc = sqlite3.Xsqlite3_blob_open(tls, db, zDb, zTable, zColumn, iRow, libc.BoolInt32(!(isReadonly != 0)), bp+8) 27645 if rc != SQLITE_OK { 27646 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 27647 return TCL_ERROR 27648 } 27649 27650 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(IncrblobChannel{}))) 27651 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = 0 27652 (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob = *(*uintptr)(unsafe.Pointer(bp + 8)) 27653 27654 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+10877, libc.VaList(bp, libc.PreIncInt32(&count, 1))) 27655 (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel = tcl.XTcl_CreateChannel(tls, uintptr(unsafe.Pointer(&IncrblobChannelType)), bp+16, p, flags) 27656 tcl.XTcl_RegisterChannel(tls, interp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27657 27658 (*IncrblobChannel)(unsafe.Pointer(p)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob 27659 (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev = uintptr(0) 27660 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27661 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = p 27662 } 27663 (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob = p 27664 (*IncrblobChannel)(unsafe.Pointer(p)).FpDb = pDb 27665 27666 tcl.XTcl_SetResult(tls, interp, tcl.XTcl_GetChannelName(tls, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel), uintptr(1)) 27667 return TCL_OK 27668 } 27669 27670 var count int32 = 0 27671 27672 func safeToUseEvalObjv(tls *libc.TLS, interp uintptr, pCmd uintptr) int32 { 27673 bp := tls.Alloc(4) 27674 defer tls.Free(4) 27675 27676 var z uintptr 27677 27678 z = tcl.XTcl_GetStringFromObj(tls, pCmd, bp) 27679 for libc.PostDecInt32(&*(*int32)(unsafe.Pointer(bp)), 1) > 0 { 27680 var c int32 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 27681 if c == '$' || c == '[' || c == ';' { 27682 return 0 27683 } 27684 } 27685 return 1 27686 } 27687 27688 func findSqlFunc(tls *libc.TLS, pDb uintptr, zName uintptr) uintptr { 27689 var p uintptr 27690 var pNew uintptr 27691 var nName int32 = strlen30(tls, zName) 27692 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlFunc{}))+uint64(nName)+uint64(1))) 27693 (*SqlFunc)(unsafe.Pointer(pNew)).FzName = pNew + 1*48 27694 libc.Xmemcpy(tls, (*SqlFunc)(unsafe.Pointer(pNew)).FzName, zName, uint64(nName+1)) 27695 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc; p != 0; p = (*SqlFunc)(unsafe.Pointer(p)).FpNext { 27696 if sqlite3.Xsqlite3_stricmp(tls, (*SqlFunc)(unsafe.Pointer(p)).FzName, (*SqlFunc)(unsafe.Pointer(pNew)).FzName) == 0 { 27697 tcl.XTcl_Free(tls, pNew) 27698 return p 27699 } 27700 } 27701 (*SqlFunc)(unsafe.Pointer(pNew)).Finterp = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 27702 (*SqlFunc)(unsafe.Pointer(pNew)).FpDb = pDb 27703 (*SqlFunc)(unsafe.Pointer(pNew)).FpScript = uintptr(0) 27704 (*SqlFunc)(unsafe.Pointer(pNew)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27705 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = pNew 27706 return pNew 27707 } 27708 27709 func dbFreeStmt(tls *libc.TLS, pStmt uintptr) { 27710 if sqlite3.Xsqlite3_sql(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) == uintptr(0) { 27711 tcl.XTcl_Free(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FzSql) 27712 } 27713 sqlite3.Xsqlite3_finalize(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) 27714 tcl.XTcl_Free(tls, pStmt) 27715 } 27716 27717 func flushStmtCache(tls *libc.TLS, pDb uintptr) { 27718 var pPreStmt uintptr 27719 var pNext uintptr 27720 27721 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = pNext { 27722 pNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 27723 dbFreeStmt(tls, pPreStmt) 27724 } 27725 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt = 0 27726 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = uintptr(0) 27727 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = uintptr(0) 27728 } 27729 27730 func addDatabaseRef(tls *libc.TLS, pDb uintptr) { 27731 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef++ 27732 } 27733 27734 func delDatabaseRef(tls *libc.TLS, pDb uintptr) { 27735 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef-- 27736 if (*SqliteDb)(unsafe.Pointer(pDb)).FnRef == 0 { 27737 flushStmtCache(tls, pDb) 27738 closeIncrblobChannels(tls, pDb) 27739 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 27740 for (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc != 0 { 27741 var pFunc uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27742 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = (*SqlFunc)(unsafe.Pointer(pFunc)).FpNext 27743 27744 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27745 var _objPtr uintptr = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 27746 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27747 tcl.XTclFreeObj(tls, _objPtr) 27748 } 27749 } 27750 tcl.XTcl_Free(tls, pFunc) 27751 } 27752 for (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate != 0 { 27753 var pCollate uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 27754 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext 27755 tcl.XTcl_Free(tls, pCollate) 27756 } 27757 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0 { 27758 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 27759 } 27760 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0 { 27761 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 27762 } 27763 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0 { 27764 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 27765 } 27766 if (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0 { 27767 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 27768 } 27769 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0 { 27770 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 27771 } 27772 if (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0 { 27773 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 27774 } 27775 if (*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0 { 27776 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 27777 } 27778 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 27779 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27780 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook 27781 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27782 tcl.XTclFreeObj(tls, _objPtr) 27783 } 27784 } 27785 } 27786 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 27787 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27788 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook 27789 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27790 tcl.XTclFreeObj(tls, _objPtr) 27791 } 27792 } 27793 } 27794 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 27795 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 27796 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook 27797 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27798 tcl.XTclFreeObj(tls, _objPtr) 27799 } 27800 } 27801 } 27802 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 27803 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 27804 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook 27805 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27806 tcl.XTclFreeObj(tls, _objPtr) 27807 } 27808 } 27809 } 27810 if (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0 { 27811 for __ccgo5 := true; __ccgo5; __ccgo5 = 0 != 0 { 27812 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 27813 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27814 tcl.XTclFreeObj(tls, _objPtr) 27815 } 27816 } 27817 } 27818 tcl.XTcl_Free(tls, pDb) 27819 } 27820 } 27821 27822 func DbDeleteCmd(tls *libc.TLS, db uintptr) { 27823 var pDb uintptr = db 27824 delDatabaseRef(tls, pDb) 27825 } 27826 27827 func DbBusyHandler(tls *libc.TLS, cd uintptr, nTries int32) int32 { 27828 bp := tls.Alloc(70) 27829 defer tls.Free(70) 27830 27831 var pDb uintptr = cd 27832 var rc int32 27833 27834 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+40, ts+1333, libc.VaList(bp, nTries)) 27835 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))) 27836 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27837 return 0 27838 } 27839 return 1 27840 } 27841 27842 func DbProgressHandler(tls *libc.TLS, cd uintptr) int32 { 27843 var pDb uintptr = cd 27844 var rc int32 27845 27846 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 27847 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27848 return 1 27849 } 27850 return 0 27851 } 27852 27853 func DbTraceHandler(tls *libc.TLS, cd uintptr, zSql uintptr) { 27854 bp := tls.Alloc(216) 27855 defer tls.Free(216) 27856 27857 var pDb uintptr = cd 27858 27859 tcl.XTcl_DStringInit(tls, bp) 27860 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, -1) 27861 tcl.XTcl_DStringAppendElement(tls, bp, zSql) 27862 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 27863 tcl.XTcl_DStringFree(tls, bp) 27864 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27865 } 27866 27867 func DbTraceV2Handler(tls *libc.TLS, type1 uint32, cd uintptr, pd uintptr, xd uintptr) int32 { 27868 var pDb uintptr = cd 27869 var pCmd uintptr 27870 27871 switch type1 { 27872 case uint32(SQLITE_TRACE_STMT): 27873 { 27874 var pStmt uintptr = pd 27875 var zSql uintptr = xd 27876 27877 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27878 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27879 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27880 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27881 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27882 tcl.XTcl_NewStringObj(tls, zSql, -1)) 27883 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27884 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27885 var _objPtr uintptr = pCmd 27886 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27887 tcl.XTclFreeObj(tls, _objPtr) 27888 } 27889 } 27890 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27891 break 27892 27893 } 27894 case uint32(SQLITE_TRACE_PROFILE): 27895 { 27896 var pStmt uintptr = pd 27897 var ns sqlite3_int64 = *(*sqlite3_int64)(unsafe.Pointer(xd)) 27898 27899 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27900 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27901 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27902 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27903 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27904 tcl.XTcl_NewWideIntObj(tls, ns)) 27905 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27906 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27907 var _objPtr uintptr = pCmd 27908 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27909 tcl.XTclFreeObj(tls, _objPtr) 27910 } 27911 } 27912 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27913 break 27914 27915 } 27916 case uint32(SQLITE_TRACE_ROW): 27917 { 27918 var pStmt uintptr = pd 27919 27920 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27921 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27922 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27923 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27924 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27925 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27926 var _objPtr uintptr = pCmd 27927 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27928 tcl.XTclFreeObj(tls, _objPtr) 27929 } 27930 } 27931 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27932 break 27933 27934 } 27935 case uint32(SQLITE_TRACE_CLOSE): 27936 { 27937 var db uintptr = pd 27938 27939 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27940 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27941 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27942 tcl.XTcl_NewWideIntObj(tls, int64(db))) 27943 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27944 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 27945 var _objPtr uintptr = pCmd 27946 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27947 tcl.XTclFreeObj(tls, _objPtr) 27948 } 27949 } 27950 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27951 break 27952 27953 } 27954 } 27955 return SQLITE_OK 27956 } 27957 27958 func DbProfileHandler(tls *libc.TLS, cd uintptr, zSql uintptr, tm1 sqlite_uint64) { 27959 bp := tls.Alloc(328) 27960 defer tls.Free(328) 27961 27962 var pDb uintptr = cd 27963 27964 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([100]int8{}))-uint64(1)), bp+8, ts+6325, libc.VaList(bp, tm1)) 27965 tcl.XTcl_DStringInit(tls, bp+112) 27966 tcl.XTcl_DStringAppend(tls, bp+112, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, -1) 27967 tcl.XTcl_DStringAppendElement(tls, bp+112, zSql) 27968 tcl.XTcl_DStringAppendElement(tls, bp+112, bp+8) 27969 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+112)).Fstring) 27970 tcl.XTcl_DStringFree(tls, bp+112) 27971 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27972 } 27973 27974 func DbCommitHandler(tls *libc.TLS, cd uintptr) int32 { 27975 var pDb uintptr = cd 27976 var rc int32 27977 27978 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 27979 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27980 return 1 27981 } 27982 return 0 27983 } 27984 27985 func DbRollbackHandler(tls *libc.TLS, clientData uintptr) { 27986 var pDb uintptr = clientData 27987 27988 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook, 0) { 27989 tcl.XTcl_BackgroundError(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27990 } 27991 } 27992 27993 func DbWalHandler(tls *libc.TLS, clientData uintptr, db uintptr, zDb uintptr, nEntry int32) int32 { 27994 bp := tls.Alloc(4) 27995 defer tls.Free(4) 27996 27997 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 27998 var p uintptr 27999 var pDb uintptr = clientData 28000 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28001 28002 p = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook) 28003 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 28004 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28005 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewIntObj(tls, nEntry)) 28006 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, p, 0) || 28007 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 28008 tcl.XTcl_BackgroundError(tls, interp) 28009 } 28010 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28011 var _objPtr uintptr = p 28012 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28013 tcl.XTclFreeObj(tls, _objPtr) 28014 } 28015 } 28016 28017 return *(*int32)(unsafe.Pointer(bp)) 28018 } 28019 28020 func setTestUnlockNotifyVars(tls *libc.TLS, interp uintptr, iArg int32, nArg int32) { 28021 bp := tls.Alloc(80) 28022 defer tls.Free(80) 28023 28024 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp, iArg)) 28025 tcl.XTcl_SetVar2(tls, interp, ts+10889, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 28026 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp+8, nArg)) 28027 tcl.XTcl_SetVar2(tls, interp, ts+10914, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 28028 } 28029 28030 func DbUnlockNotify(tls *libc.TLS, apArg uintptr, nArg int32) { 28031 var i int32 28032 for i = 0; i < nArg; i++ { 28033 var flags int32 = TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT 28034 var pDb uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 28035 setTestUnlockNotifyVars(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, i, nArg) 28036 28037 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify, flags) 28038 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28039 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 28040 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28041 tcl.XTclFreeObj(tls, _objPtr) 28042 } 28043 } 28044 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 28045 } 28046 } 28047 28048 func DbPreUpdateHandler(tls *libc.TLS, p uintptr, db uintptr, op int32, zDb uintptr, zTbl uintptr, iKey1 sqlite_int64, iKey2 sqlite_int64) { 28049 var pDb uintptr = p 28050 var pCmd uintptr 28051 28052 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook) 28053 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28054 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr[(op-1)/9], -1)) 28055 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28056 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28057 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey1)) 28058 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey2)) 28059 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28060 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28061 var _objPtr uintptr = pCmd 28062 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28063 tcl.XTclFreeObj(tls, _objPtr) 28064 } 28065 } 28066 } 28067 28068 var azStr = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 28069 28070 func DbUpdateHandler(tls *libc.TLS, p uintptr, op int32, zDb uintptr, zTbl uintptr, rowid sqlite_int64) { 28071 var pDb uintptr = p 28072 var pCmd uintptr 28073 28074 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook) 28075 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28076 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr1[(op-1)/9], -1)) 28077 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28078 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28079 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, rowid)) 28080 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28081 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28082 var _objPtr uintptr = pCmd 28083 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28084 tcl.XTclFreeObj(tls, _objPtr) 28085 } 28086 } 28087 } 28088 28089 var azStr1 = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 28090 28091 func tclCollateNeeded(tls *libc.TLS, pCtx uintptr, db uintptr, enc int32, zName uintptr) { 28092 var pDb uintptr = pCtx 28093 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 28094 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 28095 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 28096 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pScript, 0) 28097 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28098 var _objPtr uintptr = pScript 28099 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28100 tcl.XTclFreeObj(tls, _objPtr) 28101 } 28102 } 28103 } 28104 28105 func tclSqlCollate(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 28106 var p uintptr = pCtx 28107 var pCmd uintptr 28108 28109 pCmd = tcl.XTcl_NewStringObj(tls, (*SqlCollate)(unsafe.Pointer(p)).FzScript, -1) 28110 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28111 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zA, nA)) 28112 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zB, nB)) 28113 tcl.XTcl_EvalObjEx(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 28114 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28115 var _objPtr uintptr = pCmd 28116 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28117 tcl.XTclFreeObj(tls, _objPtr) 28118 } 28119 } 28120 return libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp)) 28121 } 28122 28123 func tclSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 28124 bp := tls.Alloc(40) 28125 defer tls.Free(40) 28126 28127 var p uintptr = sqlite3.Xsqlite3_user_data(tls, context) 28128 var pCmd uintptr 28129 var i int32 28130 var rc int32 28131 28132 if argc == 0 { 28133 pCmd = (*SqlFunc)(unsafe.Pointer(p)).FpScript 28134 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28135 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, 0) 28136 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28137 var _objPtr uintptr = pCmd 28138 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28139 tcl.XTclFreeObj(tls, _objPtr) 28140 } 28141 } 28142 } else { 28143 if tcl.XTcl_ListObjGetElements(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, (*SqlFunc)(unsafe.Pointer(p)).FpScript, bp, bp+8) != 0 { 28144 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28145 return 28146 } 28147 pCmd = tcl.XTcl_NewListObj(tls, *(*int32)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 28148 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28149 for i = 0; i < argc; i++ { 28150 var pIn uintptr = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 28151 var pVal uintptr 28152 28153 switch sqlite3.Xsqlite3_value_type(tls, pIn) { 28154 case SQLITE_BLOB: 28155 { 28156 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 28157 pVal = tcl.XTcl_NewByteArrayObj(tls, sqlite3.Xsqlite3_value_blob(tls, pIn), bytes) 28158 break 28159 28160 } 28161 fallthrough 28162 case SQLITE_INTEGER: 28163 { 28164 var v sqlite_int64 = sqlite3.Xsqlite3_value_int64(tls, pIn) 28165 if v >= int64(-2147483647) && v <= int64(2147483647) { 28166 pVal = tcl.XTcl_NewIntObj(tls, int32(v)) 28167 } else { 28168 pVal = tcl.XTcl_NewWideIntObj(tls, v) 28169 } 28170 break 28171 28172 } 28173 fallthrough 28174 case SQLITE_FLOAT: 28175 { 28176 var r float64 = sqlite3.Xsqlite3_value_double(tls, pIn) 28177 pVal = tcl.XTcl_NewDoubleObj(tls, r) 28178 break 28179 28180 } 28181 fallthrough 28182 case SQLITE_NULL: 28183 { 28184 pVal = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 28185 break 28186 28187 } 28188 fallthrough 28189 default: 28190 { 28191 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 28192 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pIn), bytes) 28193 break 28194 28195 } 28196 } 28197 rc = tcl.XTcl_ListObjAppendElement(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, pVal) 28198 if rc != 0 { 28199 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28200 var _objPtr uintptr = pCmd 28201 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28202 tcl.XTclFreeObj(tls, _objPtr) 28203 } 28204 } 28205 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28206 return 28207 } 28208 } 28209 if !((*SqlFunc)(unsafe.Pointer(p)).FuseEvalObjv != 0) { 28210 tcl.XTcl_GetString(tls, pCmd) 28211 } 28212 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 28213 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28214 var _objPtr uintptr = pCmd 28215 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28216 tcl.XTclFreeObj(tls, _objPtr) 28217 } 28218 } 28219 } 28220 28221 if rc != 0 && rc != TCL_RETURN { 28222 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28223 } else { 28224 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp) 28225 28226 var data uintptr 28227 var zType uintptr = func() uintptr { 28228 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28229 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28230 } 28231 return ts + 584 28232 }() 28233 var c int8 = *(*int8)(unsafe.Pointer(zType)) 28234 var eType int32 = (*SqlFunc)(unsafe.Pointer(p)).FeType 28235 28236 if eType == SQLITE_NULL { 28237 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28238 eType = SQLITE_BLOB 28239 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 || 28240 int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || 28241 int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28242 eType = SQLITE_INTEGER 28243 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28244 eType = SQLITE_FLOAT 28245 } else { 28246 eType = SQLITE_TEXT 28247 } 28248 } 28249 28250 switch eType { 28251 case SQLITE_BLOB: 28252 { 28253 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+16) 28254 sqlite3.Xsqlite3_result_blob(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 28255 break 28256 28257 } 28258 fallthrough 28259 case SQLITE_INTEGER: 28260 { 28261 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+24) { 28262 sqlite3.Xsqlite3_result_int64(tls, context, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 28263 break 28264 } 28265 28266 } 28267 fallthrough 28268 case SQLITE_FLOAT: 28269 { 28270 if TCL_OK == tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+32) { 28271 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 32))) 28272 break 28273 } 28274 28275 } 28276 fallthrough 28277 default: 28278 { 28279 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+16) 28280 sqlite3.Xsqlite3_result_text(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 28281 break 28282 28283 } 28284 } 28285 28286 } 28287 } 28288 28289 func auth_callback(tls *libc.TLS, pArg uintptr, code int32, zArg1 uintptr, zArg2 uintptr, zArg3 uintptr, zArg4 uintptr) int32 { 28290 bp := tls.Alloc(216) 28291 defer tls.Free(216) 28292 28293 var zCode uintptr 28294 28295 var rc int32 28296 var zReply uintptr 28297 28298 var pDb uintptr = pArg 28299 if (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth != 0 { 28300 return SQLITE_OK 28301 } 28302 28303 switch code { 28304 case SQLITE_COPY: 28305 zCode = ts + 10944 28306 break 28307 case SQLITE_CREATE_INDEX: 28308 zCode = ts + 10956 28309 break 28310 case SQLITE_CREATE_TABLE: 28311 zCode = ts + 10976 28312 break 28313 case SQLITE_CREATE_TEMP_INDEX: 28314 zCode = ts + 10996 28315 break 28316 case SQLITE_CREATE_TEMP_TABLE: 28317 zCode = ts + 11021 28318 break 28319 case SQLITE_CREATE_TEMP_TRIGGER: 28320 zCode = ts + 11046 28321 break 28322 case SQLITE_CREATE_TEMP_VIEW: 28323 zCode = ts + 11073 28324 break 28325 case SQLITE_CREATE_TRIGGER: 28326 zCode = ts + 11097 28327 break 28328 case SQLITE_CREATE_VIEW: 28329 zCode = ts + 11119 28330 break 28331 case SQLITE_DELETE: 28332 zCode = ts + 11138 28333 break 28334 case SQLITE_DROP_INDEX: 28335 zCode = ts + 11152 28336 break 28337 case SQLITE_DROP_TABLE: 28338 zCode = ts + 11170 28339 break 28340 case SQLITE_DROP_TEMP_INDEX: 28341 zCode = ts + 11188 28342 break 28343 case SQLITE_DROP_TEMP_TABLE: 28344 zCode = ts + 11211 28345 break 28346 case SQLITE_DROP_TEMP_TRIGGER: 28347 zCode = ts + 11234 28348 break 28349 case SQLITE_DROP_TEMP_VIEW: 28350 zCode = ts + 11259 28351 break 28352 case SQLITE_DROP_TRIGGER: 28353 zCode = ts + 11281 28354 break 28355 case SQLITE_DROP_VIEW: 28356 zCode = ts + 11301 28357 break 28358 case SQLITE_INSERT: 28359 zCode = ts + 11318 28360 break 28361 case SQLITE_PRAGMA: 28362 zCode = ts + 11332 28363 break 28364 case SQLITE_READ: 28365 zCode = ts + 11346 28366 break 28367 case SQLITE_SELECT: 28368 zCode = ts + 11358 28369 break 28370 case SQLITE_TRANSACTION: 28371 zCode = ts + 11372 28372 break 28373 case SQLITE_UPDATE: 28374 zCode = ts + 11391 28375 break 28376 case SQLITE_ATTACH: 28377 zCode = ts + 11405 28378 break 28379 case SQLITE_DETACH: 28380 zCode = ts + 11419 28381 break 28382 case SQLITE_ALTER_TABLE: 28383 zCode = ts + 11433 28384 break 28385 case SQLITE_REINDEX: 28386 zCode = ts + 11452 28387 break 28388 case SQLITE_ANALYZE: 28389 zCode = ts + 11467 28390 break 28391 case SQLITE_CREATE_VTABLE: 28392 zCode = ts + 11482 28393 break 28394 case SQLITE_DROP_VTABLE: 28395 zCode = ts + 11503 28396 break 28397 case SQLITE_FUNCTION: 28398 zCode = ts + 11522 28399 break 28400 case SQLITE_SAVEPOINT: 28401 zCode = ts + 11538 28402 break 28403 case SQLITE_RECURSIVE: 28404 zCode = ts + 11555 28405 break 28406 default: 28407 zCode = ts + 11572 28408 break 28409 } 28410 tcl.XTcl_DStringInit(tls, bp) 28411 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, -1) 28412 tcl.XTcl_DStringAppendElement(tls, bp, zCode) 28413 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28414 if zArg1 != 0 { 28415 return zArg1 28416 } 28417 return ts + 584 28418 }()) 28419 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28420 if zArg2 != 0 { 28421 return zArg2 28422 } 28423 return ts + 584 28424 }()) 28425 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28426 if zArg3 != 0 { 28427 return zArg3 28428 } 28429 return ts + 584 28430 }()) 28431 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28432 if zArg4 != 0 { 28433 return zArg4 28434 } 28435 return ts + 584 28436 }()) 28437 rc = tcl.XTcl_GlobalEval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 28438 tcl.XTcl_DStringFree(tls, bp) 28439 if rc == TCL_OK { 28440 zReply = tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28441 } else { 28442 zReply = ts + 11577 28443 } 28444 if libc.Xstrcmp(tls, zReply, ts+2127) == 0 { 28445 rc = SQLITE_OK 28446 } else if libc.Xstrcmp(tls, zReply, ts+11577) == 0 { 28447 rc = SQLITE_DENY 28448 } else if libc.Xstrcmp(tls, zReply, ts+11589) == 0 { 28449 rc = SQLITE_IGNORE 28450 } else { 28451 rc = 999 28452 } 28453 return rc 28454 } 28455 28456 func local_getline(tls *libc.TLS, zPrompt uintptr, in uintptr) uintptr { 28457 var zLine uintptr 28458 var nLine int32 28459 var n int32 28460 28461 nLine = 100 28462 zLine = libc.Xmalloc(tls, uint64(nLine)) 28463 if zLine == uintptr(0) { 28464 return uintptr(0) 28465 } 28466 n = 0 28467 for 1 != 0 { 28468 if n+100 > nLine { 28469 nLine = nLine*2 + 100 28470 zLine = libc.Xrealloc(tls, zLine, uint64(nLine)) 28471 if zLine == uintptr(0) { 28472 return uintptr(0) 28473 } 28474 } 28475 if libc.Xfgets(tls, zLine+uintptr(n), nLine-n, in) == uintptr(0) { 28476 if n == 0 { 28477 libc.Xfree(tls, zLine) 28478 return uintptr(0) 28479 } 28480 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 28481 break 28482 } 28483 for *(*int8)(unsafe.Pointer(zLine + uintptr(n))) != 0 { 28484 n++ 28485 } 28486 if n > 0 && int32(*(*int8)(unsafe.Pointer(zLine + uintptr(n-1)))) == '\n' { 28487 n-- 28488 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 28489 break 28490 } 28491 } 28492 zLine = libc.Xrealloc(tls, zLine, uint64(n+1)) 28493 return zLine 28494 } 28495 28496 func DbTransPostCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 28497 bp := tls.Alloc(16) 28498 defer tls.Free(16) 28499 28500 var pDb uintptr = *(*ClientData)(unsafe.Pointer(data)) 28501 var rc int32 = result 28502 var zEnd uintptr 28503 28504 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction-- 28505 zEnd = azEnd[libc.Bool32(rc == TCL_ERROR)*2+libc.Bool32((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0)] 28506 28507 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 28508 if sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zEnd, uintptr(0), uintptr(0), uintptr(0)) != 0 { 28509 if rc != TCL_ERROR { 28510 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 28511 rc = TCL_ERROR 28512 } 28513 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+7824, uintptr(0), uintptr(0), uintptr(0)) 28514 } 28515 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 28516 28517 delDatabaseRef(tls, pDb) 28518 return rc 28519 } 28520 28521 var azEnd = [4]uintptr{ 28522 ts + 11603, 28523 ts + 11628, 28524 ts + 11635, 28525 ts + 7824, 28526 } 28527 28528 func dbPrepare(tls *libc.TLS, pDb uintptr, zSql uintptr, ppStmt uintptr, pzOut uintptr) int32 { 28529 var prepFlags uint32 = uint32(0) 28530 if (*SqliteDb)(unsafe.Pointer(pDb)).FbLegacyPrepare != 0 { 28531 return sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, ppStmt, pzOut) 28532 } 28533 28534 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt > 5 { 28535 prepFlags = uint32(SQLITE_PREPARE_PERSISTENT) 28536 } 28537 28538 return sqlite3.Xsqlite3_prepare_v3(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, prepFlags, ppStmt, pzOut) 28539 } 28540 28541 func dbPrepareAndBind(tls *libc.TLS, pDb uintptr, zIn uintptr, pzOut uintptr, ppPreStmt uintptr) int32 { 28542 bp := tls.Alloc(32) 28543 defer tls.Free(32) 28544 28545 var zSql uintptr = zIn 28546 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 28547 var pPreStmt uintptr 28548 var nSql int32 28549 var nVar int32 = 0 28550 var iParm int32 = 0 28551 var c int8 28552 var i int32 28553 var needResultReset int32 = 0 28554 var rc int32 = SQLITE_OK 28555 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28556 28557 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = uintptr(0) 28558 28559 for int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zSql)))) == ' ' || int32(c) == '\t' || int32(c) == '\r' || int32(c) == '\n' { 28560 zSql++ 28561 } 28562 nSql = strlen30(tls, zSql) 28563 28564 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext { 28565 var n int32 = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql 28566 if nSql >= n && 28567 libc.Xmemcmp(tls, (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql, zSql, uint64(n)) == 0 && 28568 (int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n)))) == 0 || int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n-1)))) == ';') { 28569 *(*uintptr)(unsafe.Pointer(bp)) = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28570 *(*uintptr)(unsafe.Pointer(pzOut)) = zSql + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql) 28571 28572 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev != 0 { 28573 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev)).FpNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28574 } else { 28575 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28576 } 28577 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext != 0 { 28578 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext)).FpPrev = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28579 } else { 28580 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28581 } 28582 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28583 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28584 break 28585 } 28586 } 28587 28588 if pPreStmt == uintptr(0) { 28589 var nByte int32 28590 28591 if SQLITE_OK != dbPrepare(tls, pDb, zSql, bp, pzOut) { 28592 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28593 return TCL_ERROR 28594 } 28595 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 28596 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) { 28597 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28598 return TCL_ERROR 28599 } else { 28600 return TCL_OK 28601 } 28602 } 28603 28604 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28605 nByte = int32(uint64(unsafe.Sizeof(SqlPreparedStmt{})) + uint64(nVar)*uint64(unsafe.Sizeof(uintptr(0)))) 28606 pPreStmt = tcl.XTcl_Alloc(tls, uint32(nByte)) 28607 libc.Xmemset(tls, pPreStmt, 0, uint64(nByte)) 28608 28609 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt = *(*uintptr)(unsafe.Pointer(bp)) 28610 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql = int32((int64(*(*uintptr)(unsafe.Pointer(pzOut))) - int64(zSql)) / 1) 28611 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 28612 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm = pPreStmt + 1*56 28613 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql == uintptr(0) { 28614 var zCopy uintptr = tcl.XTcl_Alloc(tls, uint32((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql+1)) 28615 libc.Xmemcpy(tls, zCopy, zSql, uint64((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql)) 28616 *(*int8)(unsafe.Pointer(zCopy + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql))) = int8(0) 28617 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = zCopy 28618 } 28619 } 28620 28621 for i = 1; i <= nVar; i++ { 28622 var zVar uintptr = sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28623 if zVar != uintptr(0) && (int32(*(*int8)(unsafe.Pointer(zVar))) == '$' || int32(*(*int8)(unsafe.Pointer(zVar))) == ':' || int32(*(*int8)(unsafe.Pointer(zVar))) == '@') { 28624 var pVar uintptr = tcl.XTcl_GetVar2Ex(tls, interp, zVar+1, uintptr(0), 0) 28625 if pVar == uintptr(0) && (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != uintptr(0) { 28626 var pCmd uintptr 28627 var rx int32 28628 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, -1) 28629 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28630 tcl.XTcl_ListObjAppendElement(tls, interp, pCmd, tcl.XTcl_NewStringObj(tls, zVar, -1)) 28631 if needResultReset != 0 { 28632 tcl.XTcl_ResetResult(tls, interp) 28633 } 28634 needResultReset = 1 28635 rx = tcl.XTcl_EvalObjEx(tls, interp, pCmd, TCL_EVAL_DIRECT) 28636 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28637 var _objPtr uintptr = pCmd 28638 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28639 tcl.XTclFreeObj(tls, _objPtr) 28640 } 28641 } 28642 if rx == TCL_OK { 28643 pVar = tcl.XTcl_GetObjResult(tls, interp) 28644 } else if rx == TCL_ERROR { 28645 rc = TCL_ERROR 28646 break 28647 } else { 28648 pVar = uintptr(0) 28649 } 28650 } 28651 if pVar != 0 { 28652 var data uintptr 28653 var zType uintptr = func() uintptr { 28654 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28655 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28656 } 28657 return ts + 584 28658 }() 28659 c = *(*int8)(unsafe.Pointer(zType)) 28660 if int32(*(*int8)(unsafe.Pointer(zVar))) == '@' || int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28661 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+8) 28662 sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 28663 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28664 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 28665 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 28666 tcl.XTcl_GetIntFromObj(tls, interp, pVar, bp+8) 28667 sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*int32)(unsafe.Pointer(bp + 8))) 28668 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28669 tcl.XTcl_GetDoubleFromObj(tls, interp, pVar, bp+16) 28670 sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*float64)(unsafe.Pointer(bp + 16))) 28671 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28672 tcl.XTcl_GetWideIntFromObj(tls, interp, pVar, bp+24) 28673 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 28674 } else { 28675 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+8) 28676 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 28677 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28678 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 28679 } 28680 } else { 28681 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28682 } 28683 if needResultReset != 0 { 28684 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28685 } 28686 } 28687 } 28688 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = iParm 28689 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = pPreStmt 28690 if needResultReset != 0 && rc == TCL_OK { 28691 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28692 } 28693 28694 return rc 28695 } 28696 28697 func dbReleaseStmt(tls *libc.TLS, pDb uintptr, pPreStmt uintptr, discard int32) { 28698 var i int32 28699 28700 for i = 0; i < (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm; i++ { 28701 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28702 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(i)*8)) 28703 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28704 tcl.XTclFreeObj(tls, _objPtr) 28705 } 28706 } 28707 } 28708 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = 0 28709 28710 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt <= 0 || discard != 0 { 28711 dbFreeStmt(tls, pPreStmt) 28712 } else { 28713 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList 28714 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev = uintptr(0) 28715 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 28716 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpPrev = pPreStmt 28717 } 28718 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = pPreStmt 28719 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast == uintptr(0) { 28720 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = pPreStmt 28721 } else { 28722 } 28723 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt++ 28724 28725 for (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt > (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt { 28726 var pLast uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast 28727 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pLast)).FpPrev 28728 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast)).FpNext = uintptr(0) 28729 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28730 dbFreeStmt(tls, pLast) 28731 } 28732 } 28733 } 28734 28735 type DbEvalContext1 = struct { 28736 FpDb uintptr 28737 FpSql uintptr 28738 FzSql uintptr 28739 FpPreStmt uintptr 28740 FnCol int32 28741 FevalFlags int32 28742 FpArray uintptr 28743 FapColName uintptr 28744 } 28745 28746 type DbEvalContext = DbEvalContext1 28747 28748 func dbReleaseColumnNames(tls *libc.TLS, p uintptr) { 28749 if (*DbEvalContext)(unsafe.Pointer(p)).FapColName != 0 { 28750 var i int32 28751 for i = 0; i < (*DbEvalContext)(unsafe.Pointer(p)).FnCol; i++ { 28752 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28753 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FapColName + uintptr(i)*8)) 28754 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28755 tcl.XTclFreeObj(tls, _objPtr) 28756 } 28757 } 28758 } 28759 tcl.XTcl_Free(tls, (*DbEvalContext)(unsafe.Pointer(p)).FapColName) 28760 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = uintptr(0) 28761 } 28762 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = 0 28763 } 28764 28765 func dbEvalInit(tls *libc.TLS, p uintptr, pDb uintptr, pSql uintptr, pArray uintptr, evalFlags int32) { 28766 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(DbEvalContext{}))) 28767 (*DbEvalContext)(unsafe.Pointer(p)).FpDb = pDb 28768 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = tcl.XTcl_GetString(tls, pSql) 28769 (*DbEvalContext)(unsafe.Pointer(p)).FpSql = pSql 28770 (*Tcl_Obj)(unsafe.Pointer(pSql)).FrefCount++ 28771 if pArray != 0 { 28772 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = pArray 28773 (*Tcl_Obj)(unsafe.Pointer(pArray)).FrefCount++ 28774 } 28775 (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags = evalFlags 28776 addDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 28777 } 28778 28779 func dbEvalRowInfo(tls *libc.TLS, p uintptr, pnCol uintptr, papColName uintptr) { 28780 if uintptr(0) == (*DbEvalContext)(unsafe.Pointer(p)).FapColName { 28781 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 28782 var i int32 28783 var nCol int32 28784 var apColName uintptr = uintptr(0) 28785 28786 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = libc.AssignInt32(&nCol, sqlite3.Xsqlite3_column_count(tls, pStmt)) 28787 if nCol > 0 && (papColName != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0) { 28788 apColName = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol))) 28789 for i = 0; i < nCol; i++ { 28790 *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)) = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_name(tls, pStmt, i), -1) 28791 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)))).FrefCount++ 28792 } 28793 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = apColName 28794 } 28795 28796 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28797 var interp uintptr = (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).Finterp 28798 var pColList uintptr = tcl.XTcl_NewObj(tls) 28799 var pStar uintptr = tcl.XTcl_NewStringObj(tls, ts+3840, -1) 28800 28801 for i = 0; i < nCol; i++ { 28802 tcl.XTcl_ListObjAppendElement(tls, interp, pColList, *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8))) 28803 } 28804 (*Tcl_Obj)(unsafe.Pointer(pStar)).FrefCount++ 28805 tcl.XTcl_ObjSetVar2(tls, interp, (*DbEvalContext)(unsafe.Pointer(p)).FpArray, pStar, pColList, 0) 28806 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28807 var _objPtr uintptr = pStar 28808 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28809 tcl.XTclFreeObj(tls, _objPtr) 28810 } 28811 } 28812 } 28813 } 28814 28815 if papColName != 0 { 28816 *(*uintptr)(unsafe.Pointer(papColName)) = (*DbEvalContext)(unsafe.Pointer(p)).FapColName 28817 } 28818 if pnCol != 0 { 28819 *(*int32)(unsafe.Pointer(pnCol)) = (*DbEvalContext)(unsafe.Pointer(p)).FnCol 28820 } 28821 } 28822 28823 func dbEvalStep(tls *libc.TLS, p uintptr) int32 { 28824 var zPrevSql uintptr = uintptr(0) 28825 28826 for *(*int8)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FzSql)) != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 28827 var rc int32 28828 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt == uintptr(0) { 28829 zPrevSql = func() uintptr { 28830 if (*DbEvalContext)(unsafe.Pointer(p)).FzSql == zPrevSql { 28831 return uintptr(0) 28832 } 28833 return (*DbEvalContext)(unsafe.Pointer(p)).FzSql 28834 }() 28835 rc = dbPrepareAndBind(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FzSql, p+16, p+24) 28836 if rc != TCL_OK { 28837 return rc 28838 } 28839 } else { 28840 var rcs int32 28841 var pDb uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpDb 28842 var pPreStmt uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt 28843 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28844 28845 rcs = sqlite3.Xsqlite3_step(tls, pStmt) 28846 if rcs == SQLITE_ROW { 28847 return TCL_OK 28848 } 28849 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28850 dbEvalRowInfo(tls, p, uintptr(0), uintptr(0)) 28851 } 28852 rcs = sqlite3.Xsqlite3_reset(tls, pStmt) 28853 28854 (*SqliteDb)(unsafe.Pointer(pDb)).FnStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, 1) 28855 (*SqliteDb)(unsafe.Pointer(pDb)).FnSort = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_SORT, 1) 28856 (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_AUTOINDEX, 1) 28857 (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_VM_STEP, 1) 28858 dbReleaseColumnNames(tls, p) 28859 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 28860 28861 if rcs != SQLITE_OK { 28862 dbReleaseStmt(tls, pDb, pPreStmt, 1) 28863 if (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FbLegacyPrepare != 0 && rcs == SQLITE_SCHEMA && zPrevSql != 0 { 28864 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = zPrevSql 28865 continue 28866 } 28867 tcl.XTcl_SetObjResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, 28868 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28869 return TCL_ERROR 28870 } else { 28871 dbReleaseStmt(tls, pDb, pPreStmt, 0) 28872 } 28873 } 28874 } 28875 28876 return TCL_BREAK 28877 } 28878 28879 func dbEvalFinalize(tls *libc.TLS, p uintptr) { 28880 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 28881 sqlite3.Xsqlite3_reset(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt) 28882 dbReleaseStmt(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt, 0) 28883 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 28884 } 28885 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28886 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28887 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 28888 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28889 tcl.XTclFreeObj(tls, _objPtr) 28890 } 28891 } 28892 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = uintptr(0) 28893 } 28894 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28895 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpSql 28896 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28897 tcl.XTclFreeObj(tls, _objPtr) 28898 } 28899 } 28900 dbReleaseColumnNames(tls, p) 28901 delDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 28902 } 28903 28904 func dbEvalColumnValue(tls *libc.TLS, p uintptr, iCol int32) uintptr { 28905 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 28906 switch sqlite3.Xsqlite3_column_type(tls, pStmt, iCol) { 28907 case SQLITE_BLOB: 28908 { 28909 var bytes int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, iCol) 28910 var zBlob uintptr = sqlite3.Xsqlite3_column_blob(tls, pStmt, iCol) 28911 if !(zBlob != 0) { 28912 bytes = 0 28913 } 28914 return tcl.XTcl_NewByteArrayObj(tls, zBlob, bytes) 28915 28916 } 28917 case SQLITE_INTEGER: 28918 { 28919 var v sqlite_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, iCol) 28920 if v >= int64(-2147483647) && v <= int64(2147483647) { 28921 return tcl.XTcl_NewIntObj(tls, int32(v)) 28922 } else { 28923 return tcl.XTcl_NewWideIntObj(tls, v) 28924 } 28925 28926 } 28927 fallthrough 28928 case SQLITE_FLOAT: 28929 { 28930 return tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_column_double(tls, pStmt, iCol)) 28931 28932 } 28933 case SQLITE_NULL: 28934 { 28935 return tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 28936 28937 } 28938 } 28939 28940 return tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_text(tls, pStmt, iCol), -1) 28941 } 28942 28943 func DbUseNre(tls *libc.TLS) int32 { 28944 bp := tls.Alloc(8) 28945 defer tls.Free(8) 28946 28947 tcl.XTcl_GetVersion(tls, bp, bp+4, uintptr(0), uintptr(0)) 28948 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == 8 && *(*int32)(unsafe.Pointer(bp + 4)) >= 6 || *(*int32)(unsafe.Pointer(bp)) > 8) 28949 } 28950 28951 func DbEvalNextCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 28952 bp := tls.Alloc(16) 28953 defer tls.Free(16) 28954 28955 var rc int32 = result 28956 28957 var p uintptr = *(*ClientData)(unsafe.Pointer(data)) 28958 var pScript uintptr = *(*ClientData)(unsafe.Pointer(data + 1*8)) 28959 var pArray uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 28960 28961 for (rc == TCL_OK || rc == TCL_CONTINUE) && TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, p)) { 28962 var i int32 28963 28964 dbEvalRowInfo(tls, p, bp, bp+8) 28965 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 28966 if pArray == uintptr(0) { 28967 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(0), dbEvalColumnValue(tls, p, i), 0) 28968 } else if (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags&SQLITE_EVAL_WITHOUTNULLS != 0 && 28969 sqlite3.Xsqlite3_column_type(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt, i) == SQLITE_NULL { 28970 tcl.XTcl_UnsetVar2(tls, interp, tcl.XTcl_GetString(tls, pArray), 28971 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8))), 0) 28972 } else { 28973 tcl.XTcl_ObjSetVar2(tls, interp, pArray, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), dbEvalColumnValue(tls, p, i), 0) 28974 } 28975 } 28976 28977 if DbUseNre(tls) != 0 { 28978 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 28979 f func(*libc.TLS, uintptr, uintptr, int32) int32 28980 }{DbEvalNextCmd})), p, pScript, uintptr(0), uintptr(0)) 28981 return tcl.XTcl_NREvalObj(tls, interp, pScript, 0) 28982 } else { 28983 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 28984 } 28985 } 28986 28987 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28988 var _objPtr uintptr = pScript 28989 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28990 tcl.XTclFreeObj(tls, _objPtr) 28991 } 28992 } 28993 dbEvalFinalize(tls, p) 28994 tcl.XTcl_Free(tls, p) 28995 28996 if rc == TCL_OK || rc == TCL_BREAK { 28997 tcl.XTcl_ResetResult(tls, interp) 28998 rc = TCL_OK 28999 } 29000 return rc 29001 } 29002 29003 func DbHookCmd(tls *libc.TLS, interp uintptr, pDb uintptr, pArg uintptr, ppHook uintptr) { 29004 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 29005 29006 if *(*uintptr)(unsafe.Pointer(ppHook)) != 0 { 29007 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(ppHook))) 29008 if pArg != 0 { 29009 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29010 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer(ppHook)) 29011 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29012 tcl.XTclFreeObj(tls, _objPtr) 29013 } 29014 } 29015 *(*uintptr)(unsafe.Pointer(ppHook)) = uintptr(0) 29016 } 29017 } 29018 if pArg != 0 { 29019 if tcl.XTcl_GetCharLength(tls, pArg) > 0 { 29020 *(*uintptr)(unsafe.Pointer(ppHook)) = pArg 29021 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppHook)))).FrefCount++ 29022 } 29023 } 29024 29025 sqlite3.Xsqlite3_preupdate_hook(tls, db, func() uintptr { 29026 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 29027 return *(*uintptr)(unsafe.Pointer(&struct { 29028 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, sqlite_int64, sqlite_int64) 29029 }{DbPreUpdateHandler})) 29030 } 29031 return uintptr(0) 29032 }(), pDb) 29033 sqlite3.Xsqlite3_update_hook(tls, db, func() uintptr { 29034 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 29035 return *(*uintptr)(unsafe.Pointer(&struct { 29036 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, sqlite_int64) 29037 }{DbUpdateHandler})) 29038 } 29039 return uintptr(0) 29040 }(), pDb) 29041 sqlite3.Xsqlite3_rollback_hook(tls, db, func() uintptr { 29042 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 29043 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbRollbackHandler})) 29044 } 29045 return uintptr(0) 29046 }(), pDb) 29047 sqlite3.Xsqlite3_wal_hook(tls, db, func() uintptr { 29048 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 29049 return *(*uintptr)(unsafe.Pointer(&struct { 29050 f func(*libc.TLS, uintptr, uintptr, uintptr, int32) int32 29051 }{DbWalHandler})) 29052 } 29053 return uintptr(0) 29054 }(), pDb) 29055 } 29056 29057 func DbObjCmd(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29058 bp := tls.Alloc(1588) 29059 defer tls.Free(1588) 29060 *(*uintptr)(unsafe.Pointer(bp + 1464)) = cd 29061 29062 var pDb uintptr 29063 29064 var rc int32 29065 var zAuth uintptr 29066 29067 var zDestFile uintptr 29068 var zSrcDb uintptr 29069 29070 var pBackup uintptr 29071 var zCallback uintptr 29072 29073 var zBusy uintptr 29074 29075 var subCmd uintptr 29076 29077 var pResult uintptr 29078 var pCollate uintptr 29079 var zName uintptr 29080 var zScript uintptr 29081 29082 var _objPtr uintptr 29083 var zCommit uintptr 29084 29085 var pResult1 uintptr 29086 var isComplete int32 29087 29088 var zOpt uintptr 29089 29090 var pResult2 uintptr 29091 var ii int32 29092 var zErr uintptr 29093 var nErr int32 29094 var z uintptr 29095 var zTable uintptr 29096 var zFile uintptr 29097 var zConflict uintptr 29098 29099 var nCol int32 29100 var nByte int32 29101 var i int32 29102 var j int32 29103 var nSep int32 29104 var nNull int32 29105 var zSql uintptr 29106 var zLine uintptr 29107 var azCol uintptr 29108 var zCommit1 uintptr 29109 var in uintptr 29110 var lineno int32 29111 29112 var pResult3 uintptr 29113 29114 var zSep uintptr 29115 var zNull uintptr 29116 29117 var z1 uintptr 29118 var flags int32 29119 var zSchema uintptr 29120 var pValue uintptr 29121 var pBA uintptr 29122 var pData uintptr 29123 29124 var xrc int32 29125 29126 var i1 int32 29127 29128 var pResult4 uintptr 29129 29130 var i2 int32 29131 29132 var _objPtr1 uintptr 29133 29134 var pRet uintptr 29135 29136 var p uintptr 29137 var pArray uintptr 29138 var pScript uintptr 29139 var evalFlags int32 29140 var zOpt1 uintptr 29141 29142 var z2 uintptr 29143 var n1 int32 29144 var _objPtr2 uintptr 29145 var flags1 int32 29146 var pFunc uintptr 29147 var pScript1 uintptr 29148 var zName1 uintptr 29149 29150 var i3 int32 29151 29152 var isReadonly1 int32 29153 var zDb uintptr 29154 var zTable1 uintptr 29155 var zColumn uintptr 29156 29157 var zNull1 uintptr 29158 var pResult5 uintptr 29159 var rowid Tcl_WideInt 29160 var zProgress uintptr 29161 29162 var zProfile uintptr 29163 29164 var zSrcFile uintptr 29165 var zDestDb uintptr 29166 29167 var pBackup1 uintptr 29168 var nTimeout int32 29169 var needFree int32 29170 var zSchema1 uintptr 29171 29172 var pData1 uintptr 29173 var v2 int32 29174 var zOp uintptr 29175 29176 var pResult6 uintptr 29177 var zTrace uintptr 29178 29179 var _objPtr3 uintptr 29180 var _objPtr4 uintptr 29181 29182 var pError uintptr 29183 29184 var i4 int32 29185 var zTraceV2 uintptr 29186 29187 var wMask Tcl_WideInt 29188 29189 var pScript2 uintptr 29190 var zBegin uintptr 29191 var _objPtr5 uintptr 29192 var xNotify uintptr 29193 var pNotifyArg uintptr 29194 var nCol2 int32 29195 var pRet1 uintptr 29196 var pObj1 uintptr 29197 29198 var ppHook uintptr 29199 29200 var zArg uintptr 29201 var i5 int32 29202 pDb = *(*uintptr)(unsafe.Pointer(bp + 1464)) 29203 rc = TCL_OK 29204 29205 if !(objc < 2) { 29206 goto __1 29207 } 29208 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 29209 return TCL_ERROR 29210 __1: 29211 ; 29212 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&DB_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+11691, 0, bp+1016) != 0) { 29213 goto __2 29214 } 29215 return TCL_ERROR 29216 __2: 29217 ; 29218 switch uint32(*(*int32)(unsafe.Pointer(bp + 1016))) { 29219 case uint32(0): 29220 goto __4 29221 29222 case uint32(1): 29223 goto __5 29224 29225 case uint32(2): 29226 goto __6 29227 29228 case uint32(3): 29229 goto __7 29230 29231 case uint32(4): 29232 goto __8 29233 29234 case uint32(5): 29235 goto __9 29236 29237 case uint32(6): 29238 goto __10 29239 29240 case uint32(7): 29241 goto __11 29242 29243 case uint32(8): 29244 goto __12 29245 29246 case uint32(9): 29247 goto __13 29248 29249 case uint32(10): 29250 goto __14 29251 29252 case uint32(11): 29253 goto __15 29254 29255 case uint32(12): 29256 goto __16 29257 29258 case uint32(13): 29259 goto __17 29260 29261 case uint32(14): 29262 goto __18 29263 29264 case uint32(15): 29265 goto __19 29266 29267 case uint32(16): 29268 goto __20 29269 29270 case uint32(18): 29271 goto __21 29272 case uint32(24): 29273 goto __22 29274 29275 case uint32(17): 29276 goto __23 29277 29278 case uint32(19): 29279 goto __24 29280 29281 case uint32(20): 29282 goto __25 29283 29284 case uint32(21): 29285 goto __26 29286 29287 case uint32(23): 29288 goto __27 29289 29290 case uint32(22): 29291 goto __28 29292 29293 case uint32(27): 29294 goto __29 29295 29296 case uint32(26): 29297 goto __30 29298 29299 case uint32(28): 29300 goto __31 29301 29302 case uint32(29): 29303 goto __32 29304 29305 case uint32(31): 29306 goto __33 29307 29308 case uint32(32): 29309 goto __34 29310 29311 case uint32(33): 29312 goto __35 29313 29314 case uint32(34): 29315 goto __36 29316 29317 case uint32(35): 29318 goto __37 29319 29320 case uint32(36): 29321 goto __38 29322 29323 case uint32(37): 29324 goto __39 29325 29326 case uint32(38): 29327 goto __40 29328 29329 case uint32(25): 29330 goto __41 29331 29332 case uint32(41): 29333 goto __42 29334 case uint32(39): 29335 goto __43 29336 case uint32(30): 29337 goto __44 29338 29339 case uint32(40): 29340 goto __45 29341 } 29342 goto __3 29343 29344 __4: 29345 if !(objc > 3) { 29346 goto __46 29347 } 29348 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29349 return TCL_ERROR 29350 goto __47 29351 __46: 29352 if !(objc == 2) { 29353 goto __48 29354 } 29355 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29356 goto __50 29357 } 29358 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, uintptr(0))) 29359 __50: 29360 ; 29361 goto __49 29362 __48: 29363 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29364 goto __51 29365 } 29366 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 29367 __51: 29368 ; 29369 zAuth = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1020) 29370 if !(zAuth != 0 && *(*int32)(unsafe.Pointer(bp + 1020)) > 0) { 29371 goto __52 29372 } 29373 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 29374 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, zAuth, uint64(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 29375 goto __53 29376 __52: 29377 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = uintptr(0) 29378 __53: 29379 ; 29380 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29381 goto __54 29382 } 29383 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29384 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29385 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 29386 }{auth_callback})), pDb) 29387 goto __55 29388 __54: 29389 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29390 __55: 29391 ; 29392 __49: 29393 ; 29394 __47: 29395 ; 29396 goto __3 29397 29398 __5: 29399 if !(objc == 3) { 29400 goto __56 29401 } 29402 zSrcDb = ts + 85 29403 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29404 goto __57 29405 __56: 29406 if !(objc == 4) { 29407 goto __58 29408 } 29409 zSrcDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29410 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 29411 goto __59 29412 __58: 29413 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 29414 return TCL_ERROR 29415 __59: 29416 ; 29417 __57: 29418 ; 29419 rc = sqlite3.Xsqlite3_open_v2(tls, zDestFile, bp+1024, 29420 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 29421 if !(rc != SQLITE_OK) { 29422 goto __60 29423 } 29424 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+11729, 29425 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29426 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29427 return TCL_ERROR 29428 __60: 29429 ; 29430 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 1024)), ts+85, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSrcDb) 29431 if !(pBackup == uintptr(0)) { 29432 goto __61 29433 } 29434 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+11759, 29435 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29436 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29437 return TCL_ERROR 29438 __61: 29439 ; 29440 __62: 29441 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup, 100)) == SQLITE_OK) { 29442 goto __63 29443 } 29444 goto __62 29445 __63: 29446 ; 29447 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 29448 if !(rc == SQLITE_DONE) { 29449 goto __64 29450 } 29451 rc = TCL_OK 29452 goto __65 29453 __64: 29454 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+11759, 29455 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29456 rc = TCL_ERROR 29457 __65: 29458 ; 29459 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29460 goto __3 29461 29462 __6: 29463 if !(objc > 3) { 29464 goto __66 29465 } 29466 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29467 return TCL_ERROR 29468 goto __67 29469 __66: 29470 if !(objc == 2) { 29471 goto __68 29472 } 29473 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 29474 goto __70 29475 } 29476 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+88, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, uintptr(0))) 29477 __70: 29478 ; 29479 goto __69 29480 __68: 29481 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 29482 goto __71 29483 } 29484 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 29485 __71: 29486 ; 29487 zCallback = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1032) 29488 if !(zCallback != 0 && *(*int32)(unsafe.Pointer(bp + 1032)) > 0) { 29489 goto __72 29490 } 29491 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 29492 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, zCallback, uint64(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 29493 goto __73 29494 __72: 29495 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = uintptr(0) 29496 __73: 29497 ; 29498 __69: 29499 ; 29500 __67: 29501 ; 29502 goto __3 29503 29504 __7: 29505 if !(objc > 3) { 29506 goto __74 29507 } 29508 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11775) 29509 return TCL_ERROR 29510 goto __75 29511 __74: 29512 if !(objc == 2) { 29513 goto __76 29514 } 29515 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29516 goto __78 29517 } 29518 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, uintptr(0))) 29519 __78: 29520 ; 29521 goto __77 29522 __76: 29523 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29524 goto __79 29525 } 29526 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 29527 __79: 29528 ; 29529 zBusy = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1036) 29530 if !(zBusy != 0 && *(*int32)(unsafe.Pointer(bp + 1036)) > 0) { 29531 goto __80 29532 } 29533 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 29534 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, zBusy, uint64(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 29535 goto __81 29536 __80: 29537 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = uintptr(0) 29538 __81: 29539 ; 29540 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29541 goto __82 29542 } 29543 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29544 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29545 f func(*libc.TLS, uintptr, int32) int32 29546 }{DbBusyHandler})), pDb) 29547 goto __83 29548 __82: 29549 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29550 __83: 29551 ; 29552 __77: 29553 ; 29554 __75: 29555 ; 29556 goto __3 29557 29558 __8: 29559 if !(objc <= 2) { 29560 goto __84 29561 } 29562 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+11784) 29563 return TCL_ERROR 29564 __84: 29565 ; 29566 subCmd = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29567 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 'f' && libc.Xstrcmp(tls, subCmd, ts+11803) == 0) { 29568 goto __85 29569 } 29570 if !(objc != 3) { 29571 goto __87 29572 } 29573 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11803) 29574 return TCL_ERROR 29575 goto __88 29576 __87: 29577 flushStmtCache(tls, pDb) 29578 __88: 29579 ; 29580 goto __86 29581 __85: 29582 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 's' && libc.Xstrcmp(tls, subCmd, ts+11809) == 0) { 29583 goto __89 29584 } 29585 if !(objc != 4) { 29586 goto __91 29587 } 29588 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11814) 29589 return TCL_ERROR 29590 goto __92 29591 __91: 29592 if !(TCL_ERROR == tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1040)) { 29593 goto __93 29594 } 29595 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+120, ts+11821, 29596 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)), ts+11838, uintptr(0))) 29597 return TCL_ERROR 29598 goto __94 29599 __93: 29600 if !(*(*int32)(unsafe.Pointer(bp + 1040)) < 0) { 29601 goto __95 29602 } 29603 flushStmtCache(tls, pDb) 29604 *(*int32)(unsafe.Pointer(bp + 1040)) = 0 29605 goto __96 29606 __95: 29607 if !(*(*int32)(unsafe.Pointer(bp + 1040)) > MAX_PREPARED_STMTS) { 29608 goto __97 29609 } 29610 *(*int32)(unsafe.Pointer(bp + 1040)) = MAX_PREPARED_STMTS 29611 __97: 29612 ; 29613 __96: 29614 ; 29615 (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt = *(*int32)(unsafe.Pointer(bp + 1040)) 29616 __94: 29617 ; 29618 __92: 29619 ; 29620 goto __90 29621 __89: 29622 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+152, ts+11851, 29623 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)), ts+11864, 29624 uintptr(0))) 29625 return TCL_ERROR 29626 __90: 29627 ; 29628 __86: 29629 ; 29630 goto __3 29631 29632 __9: 29633 if !(objc != 2) { 29634 goto __98 29635 } 29636 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 29637 return TCL_ERROR 29638 __98: 29639 ; 29640 pResult = tcl.XTcl_GetObjResult(tls, interp) 29641 tcl.XTcl_SetWideIntObj(tls, pResult, sqlite3.Xsqlite3_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 29642 goto __3 29643 29644 __10: 29645 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0))) 29646 goto __3 29647 29648 __11: 29649 if !(objc != 4) { 29650 goto __99 29651 } 29652 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11889) 29653 return TCL_ERROR 29654 __99: 29655 ; 29656 zName = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29657 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1044) 29658 pCollate = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlCollate{}))+uint64(*(*int32)(unsafe.Pointer(bp + 1044)))+uint64(1))) 29659 if !(pCollate == uintptr(0)) { 29660 goto __100 29661 } 29662 return TCL_ERROR 29663 __100: 29664 ; 29665 (*SqlCollate)(unsafe.Pointer(pCollate)).Finterp = interp 29666 (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 29667 (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript = pCollate + 1*24 29668 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = pCollate 29669 libc.Xmemcpy(tls, (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 1044))+1)) 29670 if !(sqlite3.Xsqlite3_create_collation(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName, SQLITE_UTF8, 29671 pCollate, *(*uintptr)(unsafe.Pointer(&struct { 29672 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 29673 }{tclSqlCollate}))) != 0) { 29674 goto __101 29675 } 29676 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 29677 return TCL_ERROR 29678 __101: 29679 ; 29680 goto __3 29681 29682 __12: 29683 if !(objc != 3) { 29684 goto __102 29685 } 29686 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+10187) 29687 return TCL_ERROR 29688 __102: 29689 ; 29690 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0) { 29691 goto __103 29692 } 29693 __104: 29694 _objPtr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 29695 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1) { 29696 goto __107 29697 } 29698 tcl.XTclFreeObj(tls, _objPtr) 29699 __107: 29700 ; 29701 goto __105 29702 __105: 29703 if 0 != 0 { 29704 goto __104 29705 } 29706 goto __106 29707 __106: 29708 ; 29709 __103: 29710 ; 29711 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29712 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount++ 29713 sqlite3.Xsqlite3_collation_needed(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, pDb, *(*uintptr)(unsafe.Pointer(&struct { 29714 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 29715 }{tclCollateNeeded}))) 29716 goto __3 29717 29718 __13: 29719 if !(objc > 3) { 29720 goto __108 29721 } 29722 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29723 return TCL_ERROR 29724 goto __109 29725 __108: 29726 if !(objc == 2) { 29727 goto __110 29728 } 29729 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29730 goto __112 29731 } 29732 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+184, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, uintptr(0))) 29733 __112: 29734 ; 29735 goto __111 29736 __110: 29737 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29738 goto __113 29739 } 29740 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 29741 __113: 29742 ; 29743 zCommit = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1048) 29744 if !(zCommit != 0 && *(*int32)(unsafe.Pointer(bp + 1048)) > 0) { 29745 goto __114 29746 } 29747 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 29748 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, zCommit, uint64(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 29749 goto __115 29750 __114: 29751 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = uintptr(0) 29752 __115: 29753 ; 29754 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29755 goto __116 29756 } 29757 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29758 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29759 f func(*libc.TLS, uintptr) int32 29760 }{DbCommitHandler})), pDb) 29761 goto __117 29762 __116: 29763 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29764 __117: 29765 ; 29766 __111: 29767 ; 29768 __109: 29769 ; 29770 goto __3 29771 29772 __14: 29773 if !(objc != 3) { 29774 goto __118 29775 } 29776 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 29777 return TCL_ERROR 29778 __118: 29779 ; 29780 isComplete = sqlite3.Xsqlite3_complete(tls, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0))) 29781 pResult1 = tcl.XTcl_GetObjResult(tls, interp) 29782 tcl.XTcl_SetIntObj(tls, pResult1, libc.Bool32(isComplete != 0)) 29783 goto __3 29784 29785 __15: 29786 if !(objc > 4) { 29787 goto __119 29788 } 29789 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11901) 29790 return TCL_ERROR 29791 __119: 29792 ; 29793 if !(objc == 2) { 29794 goto __120 29795 } 29796 29797 pResult2 = tcl.XTcl_NewListObj(tls, 0, uintptr(0)) 29798 ii = 0 29799 __122: 29800 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29801 goto __124 29802 } 29803 *(*int32)(unsafe.Pointer(bp + 1052)) = 0 29804 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+200, -1, bp+1052)) 29805 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 29806 tcl.XTcl_NewStringObj(tls, aDbConfig[ii].FzName, -1)) 29807 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 29808 tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1052)))) 29809 goto __123 29810 __123: 29811 ii++ 29812 goto __122 29813 goto __124 29814 __124: 29815 ; 29816 goto __121 29817 __120: 29818 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29819 *(*int32)(unsafe.Pointer(bp + 1056)) = -1 29820 *(*int32)(unsafe.Pointer(bp + 1060)) = 0 29821 if !(int32(*(*int8)(unsafe.Pointer(zOpt))) == '-') { 29822 goto __125 29823 } 29824 zOpt++ 29825 __125: 29826 ; 29827 ii = 0 29828 __126: 29829 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29830 goto __128 29831 } 29832 if !(libc.Xstrcmp(tls, aDbConfig[ii].FzName, zOpt) == 0) { 29833 goto __129 29834 } 29835 goto __128 29836 __129: 29837 ; 29838 goto __127 29839 __127: 29840 ii++ 29841 goto __126 29842 goto __128 29843 __128: 29844 ; 29845 if !(uint64(ii) >= uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29846 goto __130 29847 } 29848 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+216, ts+11920, zOpt, 29849 ts+11945, uintptr(0))) 29850 return TCL_ERROR 29851 __130: 29852 ; 29853 if !(objc == 4) { 29854 goto __131 29855 } 29856 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1056) != 0) { 29857 goto __132 29858 } 29859 return TCL_ERROR 29860 __132: 29861 ; 29862 __131: 29863 ; 29864 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+248, *(*int32)(unsafe.Pointer(bp + 1056)), bp+1060)) 29865 pResult2 = tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1060))) 29866 __121: 29867 ; 29868 tcl.XTcl_SetObjResult(tls, interp, pResult2) 29869 goto __3 29870 29871 __16: 29872 lineno = 0 29873 if !(objc < 5 || objc > 7) { 29874 goto __133 29875 } 29876 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 29877 ts+11947) 29878 return TCL_ERROR 29879 __133: 29880 ; 29881 if !(objc >= 6) { 29882 goto __134 29883 } 29884 zSep = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8)), uintptr(0)) 29885 goto __135 29886 __134: 29887 zSep = ts + 12009 29888 __135: 29889 ; 29890 if !(objc >= 7) { 29891 goto __136 29892 } 29893 zNull = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8)), uintptr(0)) 29894 goto __137 29895 __136: 29896 zNull = ts + 584 29897 __137: 29898 ; 29899 zConflict = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29900 zTable = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)) 29901 zFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0)) 29902 nSep = strlen30(tls, zSep) 29903 nNull = strlen30(tls, zNull) 29904 if !(nSep == 0) { 29905 goto __138 29906 } 29907 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+264, ts+12011, 29908 uintptr(0))) 29909 return TCL_ERROR 29910 __138: 29911 ; 29912 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) { 29913 goto __139 29914 } 29915 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+280, ts+12090, zConflict, 29916 ts+12099, uintptr(0))) 29917 return TCL_ERROR 29918 __139: 29919 ; 29920 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+12179, libc.VaList(bp+312, zTable)) 29921 if !(zSql == uintptr(0)) { 29922 goto __140 29923 } 29924 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+320, ts+12198, zTable, uintptr(0))) 29925 return TCL_ERROR 29926 __140: 29927 ; 29928 nByte = strlen30(tls, zSql) 29929 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 29930 sqlite3.Xsqlite3_free(tls, zSql) 29931 if !(rc != 0) { 29932 goto __141 29933 } 29934 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+344, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29935 nCol = 0 29936 goto __142 29937 __141: 29938 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29939 __142: 29940 ; 29941 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29942 if !(nCol == 0) { 29943 goto __143 29944 } 29945 return TCL_ERROR 29946 __143: 29947 ; 29948 zSql = libc.Xmalloc(tls, uint64(nByte+50+nCol*2)) 29949 if !(zSql == uintptr(0)) { 29950 goto __144 29951 } 29952 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+368, ts+12229, uintptr(0))) 29953 return TCL_ERROR 29954 __144: 29955 ; 29956 sqlite3.Xsqlite3_snprintf(tls, nByte+50, zSql, ts+12251, 29957 libc.VaList(bp+384, zConflict, zTable)) 29958 j = strlen30(tls, zSql) 29959 i = 1 29960 __145: 29961 if !(i < nCol) { 29962 goto __147 29963 } 29964 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(',') 29965 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 29966 goto __146 29967 __146: 29968 i++ 29969 goto __145 29970 goto __147 29971 __147: 29972 ; 29973 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(')') 29974 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 29975 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 29976 libc.Xfree(tls, zSql) 29977 if !(rc != 0) { 29978 goto __148 29979 } 29980 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+400, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29981 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29982 return TCL_ERROR 29983 __148: 29984 ; 29985 in = libc.Xfopen(tls, zFile, ts+4402) 29986 if !(in == uintptr(0)) { 29987 goto __149 29988 } 29989 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+424, ts+12283, zFile, uintptr(0))) 29990 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29991 return TCL_ERROR 29992 __149: 29993 ; 29994 azCol = libc.Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol+1)) 29995 if !(azCol == uintptr(0)) { 29996 goto __150 29997 } 29998 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+448, ts+12229, uintptr(0))) 29999 libc.Xfclose(tls, in) 30000 return TCL_ERROR 30001 __150: 30002 ; 30003 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+12309, uintptr(0), uintptr(0), uintptr(0)) 30004 zCommit1 = ts + 11628 30005 __151: 30006 if !(libc.AssignUintptr(&zLine, local_getline(tls, uintptr(0), in)) != uintptr(0)) { 30007 goto __152 30008 } 30009 lineno++ 30010 *(*uintptr)(unsafe.Pointer(azCol)) = zLine 30011 i = 0 30012 z = zLine 30013 __153: 30014 if !(*(*int8)(unsafe.Pointer(z)) != 0) { 30015 goto __155 30016 } 30017 if !(int32(*(*int8)(unsafe.Pointer(z))) == int32(*(*int8)(unsafe.Pointer(zSep))) && libc.Xstrncmp(tls, z, zSep, uint64(nSep)) == 0) { 30018 goto __156 30019 } 30020 *(*int8)(unsafe.Pointer(z)) = int8(0) 30021 i++ 30022 if !(i < nCol) { 30023 goto __157 30024 } 30025 *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)) = z + uintptr(nSep) 30026 z += uintptr(nSep - 1) 30027 __157: 30028 ; 30029 __156: 30030 ; 30031 goto __154 30032 __154: 30033 z++ 30034 goto __153 30035 goto __155 30036 __155: 30037 ; 30038 if !(i+1 != nCol) { 30039 goto __158 30040 } 30041 nErr = strlen30(tls, zFile) + 200 30042 zErr = libc.Xmalloc(tls, uint64(nErr)) 30043 if !(zErr != 0) { 30044 goto __159 30045 } 30046 sqlite3.Xsqlite3_snprintf(tls, nErr, zErr, 30047 ts+12315, 30048 libc.VaList(bp+464, zFile, lineno, nCol, i+1)) 30049 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+496, zErr, uintptr(0))) 30050 libc.Xfree(tls, zErr) 30051 __159: 30052 ; 30053 zCommit1 = ts + 7824 30054 goto __152 30055 __158: 30056 ; 30057 i = 0 30058 __160: 30059 if !(i < nCol) { 30060 goto __162 30061 } 30062 30063 if !(nNull > 0 && libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), zNull) == 0 || 30064 strlen30(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8))) == 0) { 30065 goto __163 30066 } 30067 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1) 30068 goto __164 30069 __163: 30070 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), -1, uintptr(0)) 30071 __164: 30072 ; 30073 goto __161 30074 __161: 30075 i++ 30076 goto __160 30077 goto __162 30078 __162: 30079 ; 30080 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30081 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30082 libc.Xfree(tls, zLine) 30083 if !(rc != SQLITE_OK) { 30084 goto __165 30085 } 30086 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+512, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30087 zCommit1 = ts + 7824 30088 goto __152 30089 __165: 30090 ; 30091 goto __151 30092 __152: 30093 ; 30094 libc.Xfree(tls, azCol) 30095 libc.Xfclose(tls, in) 30096 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30097 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zCommit1, uintptr(0), uintptr(0), uintptr(0)) 30098 30099 if !(int32(*(*int8)(unsafe.Pointer(zCommit1))) == 'C') { 30100 goto __166 30101 } 30102 30103 pResult3 = tcl.XTcl_GetObjResult(tls, interp) 30104 tcl.XTcl_SetIntObj(tls, pResult3, lineno) 30105 rc = TCL_OK 30106 goto __167 30107 __166: 30108 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+1072, ts+1333, libc.VaList(bp+536, lineno)) 30109 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+544, ts+12375, bp+1072, 30110 uintptr(0))) 30111 rc = TCL_ERROR 30112 __167: 30113 ; 30114 goto __3 30115 30116 __17: 30117 zSchema = uintptr(0) 30118 pValue = uintptr(0) 30119 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = int64(0) 30120 *(*int32)(unsafe.Pointer(bp + 1160)) = 0 30121 30122 if !(objc < 3) { 30123 goto __168 30124 } 30125 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12408) 30126 rc = TCL_ERROR 30127 goto __3 30128 __168: 30129 ; 30130 i1 = 2 30131 __169: 30132 if !(i1 < objc-1) { 30133 goto __171 30134 } 30135 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i1)*8))) 30136 if !(libc.Xstrcmp(tls, z1, ts+12425) == 0 && i1 < objc-2) { 30137 goto __172 30138 } 30139 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1152) 30140 if !(rc != 0) { 30141 goto __173 30142 } 30143 goto deserialize_error 30144 __173: 30145 ; 30146 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 1152)) 30147 goto __170 30148 __172: 30149 ; 30150 if !(libc.Xstrcmp(tls, z1, ts+12434) == 0 && i1 < objc-2) { 30151 goto __174 30152 } 30153 rc = tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1160) 30154 if !(rc != 0) { 30155 goto __175 30156 } 30157 goto deserialize_error 30158 __175: 30159 ; 30160 goto __170 30161 __174: 30162 ; 30163 if !(zSchema == uintptr(0) && i1 == objc-2 && int32(*(*int8)(unsafe.Pointer(z1))) != '-') { 30164 goto __176 30165 } 30166 zSchema = z1 30167 goto __170 30168 __176: 30169 ; 30170 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+568, ts+12444, z1, uintptr(0))) 30171 rc = TCL_ERROR 30172 goto deserialize_error 30173 goto __170 30174 __170: 30175 i1++ 30176 goto __169 30177 goto __171 30178 __171: 30179 ; 30180 pValue = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30181 pBA = tcl.XTcl_GetByteArrayFromObj(tls, pValue, bp+1164) 30182 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 30183 if !(pData == uintptr(0) && *(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 30184 goto __177 30185 } 30186 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+592, ts+2069, uintptr(0))) 30187 rc = TCL_ERROR 30188 goto __178 30189 __177: 30190 if !(*(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 30191 goto __179 30192 } 30193 libc.Xmemcpy(tls, pData, pBA, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 30194 __179: 30195 ; 30196 if !(*(*int32)(unsafe.Pointer(bp + 1160)) != 0) { 30197 goto __180 30198 } 30199 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY 30200 goto __181 30201 __180: 30202 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE 30203 __181: 30204 ; 30205 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)) 30206 if !(xrc != 0) { 30207 goto __182 30208 } 30209 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+608, ts+12461, uintptr(0))) 30210 rc = TCL_ERROR 30211 __182: 30212 ; 30213 if !(*(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) > int64(0)) { 30214 goto __183 30215 } 30216 sqlite3.Xsqlite3_file_control(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, SQLITE_FCNTL_SIZE_LIMIT, bp+1168) 30217 __183: 30218 ; 30219 __178: 30220 ; 30221 deserialize_error: 30222 goto __3 30223 30224 __18: 30225 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+624, ts+12489, 30226 uintptr(0))) 30227 return TCL_ERROR 30228 30229 __19: 30230 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 30231 goto __3 30232 30233 __20: 30234 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_error_offset(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 30235 goto __3 30236 30237 __21: 30238 __22: 30239 pResult4 = uintptr(0) 30240 if !(objc != 3) { 30241 goto __184 30242 } 30243 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 30244 return TCL_ERROR 30245 __184: 30246 ; 30247 dbEvalInit(tls, bp+1176, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 30248 rc = dbEvalStep(tls, bp+1176) 30249 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 24) { 30250 goto __185 30251 } 30252 if !(rc == TCL_OK) { 30253 goto __187 30254 } 30255 pResult4 = dbEvalColumnValue(tls, bp+1176, 0) 30256 goto __188 30257 __187: 30258 if !(rc == TCL_BREAK) { 30259 goto __189 30260 } 30261 tcl.XTcl_ResetResult(tls, interp) 30262 __189: 30263 ; 30264 __188: 30265 ; 30266 goto __186 30267 __185: 30268 if !(rc == TCL_BREAK || rc == TCL_OK) { 30269 goto __190 30270 } 30271 pResult4 = tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(rc == TCL_OK) != 0)) 30272 __190: 30273 ; 30274 __186: 30275 ; 30276 dbEvalFinalize(tls, bp+1176) 30277 if !(pResult4 != 0) { 30278 goto __191 30279 } 30280 tcl.XTcl_SetObjResult(tls, interp, pResult4) 30281 __191: 30282 ; 30283 if !(rc == TCL_BREAK) { 30284 goto __192 30285 } 30286 rc = TCL_OK 30287 __192: 30288 ; 30289 goto __3 30290 30291 __23: 30292 evalFlags = 0 30293 __193: 30294 if !(objc > 3 && libc.AssignUintptr(&zOpt1, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) != uintptr(0) && int32(*(*int8)(unsafe.Pointer(zOpt1))) == '-') { 30295 goto __194 30296 } 30297 if !(libc.Xstrcmp(tls, zOpt1, ts+12537) == 0) { 30298 goto __195 30299 } 30300 evalFlags = evalFlags | SQLITE_EVAL_WITHOUTNULLS 30301 goto __196 30302 __195: 30303 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+640, ts+12551, zOpt1, ts+11945, uintptr(0))) 30304 return TCL_ERROR 30305 __196: 30306 ; 30307 objc-- 30308 objv += 8 30309 goto __193 30310 __194: 30311 ; 30312 if !(objc < 3 || objc > 5) { 30313 goto __197 30314 } 30315 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 30316 ts+12569) 30317 return TCL_ERROR 30318 __197: 30319 ; 30320 if !(objc == 3) { 30321 goto __198 30322 } 30323 pRet = tcl.XTcl_NewObj(tls) 30324 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 30325 dbEvalInit(tls, bp+1232, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 30326 __200: 30327 if !(TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, bp+1232))) { 30328 goto __201 30329 } 30330 dbEvalRowInfo(tls, bp+1232, bp+1288, uintptr(0)) 30331 i2 = 0 30332 __202: 30333 if !(i2 < *(*int32)(unsafe.Pointer(bp + 1288))) { 30334 goto __204 30335 } 30336 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, dbEvalColumnValue(tls, bp+1232, i2)) 30337 goto __203 30338 __203: 30339 i2++ 30340 goto __202 30341 goto __204 30342 __204: 30343 ; 30344 goto __200 30345 __201: 30346 ; 30347 dbEvalFinalize(tls, bp+1232) 30348 if !(rc == TCL_BREAK) { 30349 goto __205 30350 } 30351 tcl.XTcl_SetObjResult(tls, interp, pRet) 30352 rc = TCL_OK 30353 __205: 30354 ; 30355 __206: 30356 _objPtr1 = pRet 30357 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr1)).FrefCount, 1) <= 1) { 30358 goto __209 30359 } 30360 tcl.XTclFreeObj(tls, _objPtr1) 30361 __209: 30362 ; 30363 goto __207 30364 __207: 30365 if 0 != 0 { 30366 goto __206 30367 } 30368 goto __208 30369 __208: 30370 ; 30371 goto __199 30372 __198: 30373 pArray = uintptr(0) 30374 30375 if !(objc >= 5 && *(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))))) != 0) { 30376 goto __210 30377 } 30378 pArray = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 30379 __210: 30380 ; 30381 pScript = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30382 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 30383 30384 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(DbEvalContext{}))) 30385 dbEvalInit(tls, p, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), pArray, evalFlags) 30386 30387 *(*ClientData)(unsafe.Pointer(bp + 1296)) = p 30388 *(*ClientData)(unsafe.Pointer(bp + 1296 + 1*8)) = pScript 30389 rc = DbEvalNextCmd(tls, bp+1296, interp, TCL_OK) 30390 __199: 30391 ; 30392 goto __3 30393 30394 __24: 30395 flags1 = SQLITE_UTF8 30396 *(*int32)(unsafe.Pointer(bp + 1312)) = -1 30397 *(*int32)(unsafe.Pointer(bp + 1368)) = SQLITE_NULL 30398 if !(objc < 4) { 30399 goto __211 30400 } 30401 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12605) 30402 return TCL_ERROR 30403 __211: 30404 ; 30405 i3 = 3 30406 __212: 30407 if !(i3 < objc-1) { 30408 goto __214 30409 } 30410 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8))) 30411 n1 = strlen30(tls, z2) 30412 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12628, uint64(n1)) == 0) { 30413 goto __215 30414 } 30415 if !(i3 == objc-2) { 30416 goto __217 30417 } 30418 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+672, ts+12638, z2, uintptr(0))) 30419 return TCL_ERROR 30420 __217: 30421 ; 30422 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3+1)*8)), bp+1312) != 0) { 30423 goto __218 30424 } 30425 return TCL_ERROR 30426 __218: 30427 ; 30428 if !(*(*int32)(unsafe.Pointer(bp + 1312)) < 0) { 30429 goto __219 30430 } 30431 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+696, ts+12668, 30432 uintptr(0))) 30433 return TCL_ERROR 30434 __219: 30435 ; 30436 i3++ 30437 goto __216 30438 __215: 30439 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12709, uint64(n1)) == 0) { 30440 goto __220 30441 } 30442 flags1 = flags1 | SQLITE_DETERMINISTIC 30443 goto __221 30444 __220: 30445 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12724, uint64(n1)) == 0) { 30446 goto __222 30447 } 30448 flags1 = flags1 | SQLITE_DIRECTONLY 30449 goto __223 30450 __222: 30451 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12736, uint64(n1)) == 0) { 30452 goto __224 30453 } 30454 flags1 = flags1 | SQLITE_INNOCUOUS 30455 goto __225 30456 __224: 30457 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12747, uint64(n1)) == 0) { 30458 goto __226 30459 } 30460 *(*[6]uintptr)(unsafe.Pointer(bp + 1320)) = [6]uintptr{ts + 8470, ts + 12759, ts + 12764, ts + 12769, ts + 12774, uintptr(0)} 30461 30462 if !(i3 == objc-2) { 30463 goto __228 30464 } 30465 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+712, ts+12638, z2, uintptr(0))) 30466 return TCL_ERROR 30467 __228: 30468 ; 30469 i3++ 30470 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8)), bp+1320, int32(unsafe.Sizeof(uintptr(0))), ts+12778, 0, bp+1368) != 0) { 30471 goto __229 30472 } 30473 return TCL_ERROR 30474 __229: 30475 ; 30476 *(*int32)(unsafe.Pointer(bp + 1368))++ 30477 goto __227 30478 __226: 30479 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+736, ts+11851, z2, 30480 ts+12783, uintptr(0))) 30481 return TCL_ERROR 30482 __227: 30483 ; 30484 __225: 30485 ; 30486 __223: 30487 ; 30488 __221: 30489 ; 30490 __216: 30491 ; 30492 goto __213 30493 __213: 30494 i3++ 30495 goto __212 30496 goto __214 30497 __214: 30498 ; 30499 pScript1 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30500 zName1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 30501 pFunc = findSqlFunc(tls, pDb, zName1) 30502 if !(pFunc == uintptr(0)) { 30503 goto __230 30504 } 30505 return TCL_ERROR 30506 __230: 30507 ; 30508 if !((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript != 0) { 30509 goto __231 30510 } 30511 __232: 30512 _objPtr2 = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 30513 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr2)).FrefCount, 1) <= 1) { 30514 goto __235 30515 } 30516 tcl.XTclFreeObj(tls, _objPtr2) 30517 __235: 30518 ; 30519 goto __233 30520 __233: 30521 if 0 != 0 { 30522 goto __232 30523 } 30524 goto __234 30525 __234: 30526 ; 30527 __231: 30528 ; 30529 (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript = pScript1 30530 (*Tcl_Obj)(unsafe.Pointer(pScript1)).FrefCount++ 30531 (*SqlFunc)(unsafe.Pointer(pFunc)).FuseEvalObjv = safeToUseEvalObjv(tls, interp, pScript1) 30532 (*SqlFunc)(unsafe.Pointer(pFunc)).FeType = *(*int32)(unsafe.Pointer(bp + 1368)) 30533 rc = sqlite3.Xsqlite3_create_function(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName1, *(*int32)(unsafe.Pointer(bp + 1312)), flags1, 30534 pFunc, *(*uintptr)(unsafe.Pointer(&struct { 30535 f func(*libc.TLS, uintptr, int32, uintptr) 30536 }{tclSqlFunc})), uintptr(0), uintptr(0)) 30537 if !(rc != SQLITE_OK) { 30538 goto __236 30539 } 30540 rc = TCL_ERROR 30541 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 30542 __236: 30543 ; 30544 goto __3 30545 30546 __25: 30547 isReadonly1 = 0 30548 zDb = ts + 85 30549 30550 if !(objc > 3 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), ts+12434) == 0) { 30551 goto __237 30552 } 30553 isReadonly1 = 1 30554 __237: 30555 ; 30556 if !(objc != 5+isReadonly1 && objc != 6+isReadonly1) { 30557 goto __238 30558 } 30559 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12861) 30560 return TCL_ERROR 30561 __238: 30562 ; 30563 if !(objc == 6+isReadonly1) { 30564 goto __239 30565 } 30566 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(2+isReadonly1)*8))) 30567 __239: 30568 ; 30569 zTable1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8))) 30570 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 30571 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+1376) 30572 30573 if !(rc == TCL_OK) { 30574 goto __240 30575 } 30576 rc = createIncrblobChannel(tls, 30577 interp, pDb, zDb, zTable1, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 1376)), isReadonly1) 30578 __240: 30579 ; 30580 goto __3 30581 30582 __26: 30583 sqlite3.Xsqlite3_interrupt(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30584 goto __3 30585 30586 __27: 30587 if !(objc != 2 && objc != 3) { 30588 goto __241 30589 } 30590 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12897) 30591 return TCL_ERROR 30592 __241: 30593 ; 30594 if !(objc == 3) { 30595 goto __242 30596 } 30597 zNull1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1384) 30598 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0) { 30599 goto __243 30600 } 30601 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 30602 __243: 30603 ; 30604 if !(zNull1 != 0 && *(*int32)(unsafe.Pointer(bp + 1384)) > 0) { 30605 goto __244 30606 } 30607 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1384))+1)) 30608 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, zNull1, uint64(*(*int32)(unsafe.Pointer(bp + 1384)))) 30609 *(*int8)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FzNull + uintptr(*(*int32)(unsafe.Pointer(bp + 1384))))) = int8(0) 30610 goto __245 30611 __244: 30612 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = uintptr(0) 30613 __245: 30614 ; 30615 __242: 30616 ; 30617 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, -1)) 30618 goto __3 30619 30620 __28: 30621 if !(objc != 2) { 30622 goto __246 30623 } 30624 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30625 return TCL_ERROR 30626 __246: 30627 ; 30628 rowid = sqlite3.Xsqlite3_last_insert_rowid(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30629 pResult5 = tcl.XTcl_GetObjResult(tls, interp) 30630 tcl.XTcl_SetWideIntObj(tls, pResult5, rowid) 30631 goto __3 30632 30633 __29: 30634 if !(objc == 2) { 30635 goto __247 30636 } 30637 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30638 goto __249 30639 } 30640 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+768, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, uintptr(0))) 30641 __249: 30642 ; 30643 goto __248 30644 __247: 30645 if !(objc == 4) { 30646 goto __250 30647 } 30648 if !(TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1388)) { 30649 goto __252 30650 } 30651 return TCL_ERROR 30652 __252: 30653 ; 30654 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30655 goto __253 30656 } 30657 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 30658 __253: 30659 ; 30660 zProgress = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1392) 30661 if !(zProgress != 0 && *(*int32)(unsafe.Pointer(bp + 1392)) > 0) { 30662 goto __254 30663 } 30664 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 30665 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, zProgress, uint64(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 30666 goto __255 30667 __254: 30668 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = uintptr(0) 30669 __255: 30670 ; 30671 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30672 goto __256 30673 } 30674 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30675 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1388)), *(*uintptr)(unsafe.Pointer(&struct { 30676 f func(*libc.TLS, uintptr) int32 30677 }{DbProgressHandler})), pDb) 30678 goto __257 30679 __256: 30680 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, 0, uintptr(0), uintptr(0)) 30681 __257: 30682 ; 30683 goto __251 30684 __250: 30685 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12907) 30686 return TCL_ERROR 30687 __251: 30688 ; 30689 __248: 30690 ; 30691 goto __3 30692 30693 __30: 30694 if !(objc > 3) { 30695 goto __258 30696 } 30697 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30698 return TCL_ERROR 30699 goto __259 30700 __258: 30701 if !(objc == 2) { 30702 goto __260 30703 } 30704 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30705 goto __262 30706 } 30707 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+784, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, uintptr(0))) 30708 __262: 30709 ; 30710 goto __261 30711 __260: 30712 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30713 goto __263 30714 } 30715 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 30716 __263: 30717 ; 30718 zProfile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1396) 30719 if !(zProfile != 0 && *(*int32)(unsafe.Pointer(bp + 1396)) > 0) { 30720 goto __264 30721 } 30722 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 30723 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, zProfile, uint64(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 30724 goto __265 30725 __264: 30726 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = uintptr(0) 30727 __265: 30728 ; 30729 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30730 goto __266 30731 } 30732 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30733 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30734 f func(*libc.TLS, uintptr, uintptr, sqlite_uint64) 30735 }{DbProfileHandler})), pDb) 30736 goto __267 30737 __266: 30738 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30739 __267: 30740 ; 30741 __261: 30742 ; 30743 __259: 30744 ; 30745 goto __3 30746 30747 __31: 30748 if !(objc != 3) { 30749 goto __268 30750 } 30751 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12918) 30752 return TCL_ERROR 30753 __268: 30754 ; 30755 goto __3 30756 30757 __32: 30758 nTimeout = 0 30759 30760 if !(objc == 3) { 30761 goto __269 30762 } 30763 zDestDb = ts + 85 30764 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30765 goto __270 30766 __269: 30767 if !(objc == 4) { 30768 goto __271 30769 } 30770 zDestDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30771 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 30772 goto __272 30773 __271: 30774 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 30775 return TCL_ERROR 30776 __272: 30777 ; 30778 __270: 30779 ; 30780 rc = sqlite3.Xsqlite3_open_v2(tls, zSrcFile, bp+1400, 30781 SQLITE_OPEN_READONLY|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 30782 if !(rc != SQLITE_OK) { 30783 goto __273 30784 } 30785 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+800, ts+12922, 30786 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))), uintptr(0))) 30787 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30788 return TCL_ERROR 30789 __273: 30790 ; 30791 pBackup1 = sqlite3.Xsqlite3_backup_init(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zDestDb, *(*uintptr)(unsafe.Pointer(bp + 1400)), ts+85) 30792 if !(pBackup1 == uintptr(0)) { 30793 goto __274 30794 } 30795 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+824, ts+12952, 30796 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30797 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30798 return TCL_ERROR 30799 __274: 30800 ; 30801 __275: 30802 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup1, 100)) == SQLITE_OK || 30803 rc == SQLITE_BUSY) { 30804 goto __276 30805 } 30806 if !(rc == SQLITE_BUSY) { 30807 goto __277 30808 } 30809 if !(libc.PostIncInt32(&nTimeout, 1) >= 3) { 30810 goto __278 30811 } 30812 goto __276 30813 __278: 30814 ; 30815 sqlite3.Xsqlite3_sleep(tls, 100) 30816 __277: 30817 ; 30818 goto __275 30819 __276: 30820 ; 30821 sqlite3.Xsqlite3_backup_finish(tls, pBackup1) 30822 if !(rc == SQLITE_DONE) { 30823 goto __279 30824 } 30825 rc = TCL_OK 30826 goto __280 30827 __279: 30828 if !(rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { 30829 goto __281 30830 } 30831 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+848, ts+12969, 30832 uintptr(0))) 30833 rc = TCL_ERROR 30834 goto __282 30835 __281: 30836 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+864, ts+12952, 30837 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30838 rc = TCL_ERROR 30839 __282: 30840 ; 30841 __280: 30842 ; 30843 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30844 goto __3 30845 30846 __33: 30847 if objc >= 3 { 30848 zSchema1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30849 } else { 30850 zSchema1 = ts + 85 30851 } 30852 *(*sqlite3_int64)(unsafe.Pointer(bp + 1408)) = int64(0) 30853 if !(objc != 2 && objc != 3) { 30854 goto __283 30855 } 30856 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13006) 30857 rc = TCL_ERROR 30858 goto __284 30859 __283: 30860 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(SQLITE_SERIALIZE_NOCOPY)) 30861 if !(pData1 != 0) { 30862 goto __285 30863 } 30864 needFree = 0 30865 goto __286 30866 __285: 30867 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(0)) 30868 needFree = 1 30869 __286: 30870 ; 30871 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pData1, int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 1408))))) 30872 if !(needFree != 0) { 30873 goto __287 30874 } 30875 sqlite3.Xsqlite3_free(tls, pData1) 30876 __287: 30877 ; 30878 __284: 30879 ; 30880 goto __3 30881 30882 __34: 30883 if !(objc != 3) { 30884 goto __288 30885 } 30886 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13017) 30887 return TCL_ERROR 30888 __288: 30889 ; 30890 zOp = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30891 if !(libc.Xstrcmp(tls, zOp, ts+9485) == 0) { 30892 goto __289 30893 } 30894 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnStep 30895 goto __290 30896 __289: 30897 if !(libc.Xstrcmp(tls, zOp, ts+13039) == 0) { 30898 goto __291 30899 } 30900 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnSort 30901 goto __292 30902 __291: 30903 if !(libc.Xstrcmp(tls, zOp, ts+13044) == 0) { 30904 goto __293 30905 } 30906 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex 30907 goto __294 30908 __293: 30909 if !(libc.Xstrcmp(tls, zOp, ts+13054) == 0) { 30910 goto __295 30911 } 30912 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep 30913 goto __296 30914 __295: 30915 tcl.XTcl_AppendResult(tls, interp, 30916 libc.VaList(bp+888, ts+13061, 30917 uintptr(0))) 30918 return TCL_ERROR 30919 __296: 30920 ; 30921 __294: 30922 ; 30923 __292: 30924 ; 30925 __290: 30926 ; 30927 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, v2)) 30928 goto __3 30929 30930 __35: 30931 if !(objc != 3) { 30932 goto __297 30933 } 30934 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13117) 30935 return TCL_ERROR 30936 __297: 30937 ; 30938 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1416) != 0) { 30939 goto __298 30940 } 30941 return TCL_ERROR 30942 __298: 30943 ; 30944 sqlite3.Xsqlite3_busy_timeout(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1416))) 30945 goto __3 30946 30947 __36: 30948 if !(objc != 2) { 30949 goto __299 30950 } 30951 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30952 return TCL_ERROR 30953 __299: 30954 ; 30955 pResult6 = tcl.XTcl_GetObjResult(tls, interp) 30956 tcl.XTcl_SetWideIntObj(tls, pResult6, sqlite3.Xsqlite3_total_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 30957 goto __3 30958 30959 __37: 30960 if !(objc > 3) { 30961 goto __300 30962 } 30963 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30964 return TCL_ERROR 30965 goto __301 30966 __300: 30967 if !(objc == 2) { 30968 goto __302 30969 } 30970 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30971 goto __304 30972 } 30973 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+904, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, uintptr(0))) 30974 __304: 30975 ; 30976 goto __303 30977 __302: 30978 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30979 goto __305 30980 } 30981 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 30982 __305: 30983 ; 30984 zTrace = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1420) 30985 if !(zTrace != 0 && *(*int32)(unsafe.Pointer(bp + 1420)) > 0) { 30986 goto __306 30987 } 30988 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 30989 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, zTrace, uint64(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 30990 goto __307 30991 __306: 30992 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = uintptr(0) 30993 __307: 30994 ; 30995 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30996 goto __308 30997 } 30998 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30999 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 31000 f func(*libc.TLS, uintptr, uintptr) 31001 }{DbTraceHandler})), pDb) 31002 goto __309 31003 __308: 31004 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 31005 __309: 31006 ; 31007 __303: 31008 ; 31009 __301: 31010 ; 31011 goto __3 31012 31013 __38: 31014 if !(objc > 4) { 31015 goto __310 31016 } 31017 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13130) 31018 return TCL_ERROR 31019 goto __311 31020 __310: 31021 if !(objc == 2) { 31022 goto __312 31023 } 31024 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31025 goto __314 31026 } 31027 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+920, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, uintptr(0))) 31028 __314: 31029 ; 31030 goto __313 31031 __312: 31032 wMask = int64(0) 31033 if !(objc == 4) { 31034 goto __315 31035 } 31036 if !(TCL_OK != tcl.XTcl_ListObjLength(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1424)) { 31037 goto __317 31038 } 31039 return TCL_ERROR 31040 __317: 31041 ; 31042 i4 = 0 31043 __318: 31044 if !(i4 < *(*int32)(unsafe.Pointer(bp + 1424))) { 31045 goto __320 31046 } 31047 if !(TCL_OK != tcl.XTcl_ListObjIndex(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), i4, bp+1432)) { 31048 goto __321 31049 } 31050 return TCL_ERROR 31051 __321: 31052 ; 31053 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), uintptr(unsafe.Pointer(&TTYPE_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+13148, 0, bp+1440) != TCL_OK) { 31054 goto __322 31055 } 31056 pError = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, interp)) 31057 (*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount++ 31058 if !(TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), bp+1448)) { 31059 goto __324 31060 } 31061 __326: 31062 _objPtr3 = pError 31063 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr3)).FrefCount, 1) <= 1) { 31064 goto __329 31065 } 31066 tcl.XTclFreeObj(tls, _objPtr3) 31067 __329: 31068 ; 31069 goto __327 31070 __327: 31071 if 0 != 0 { 31072 goto __326 31073 } 31074 goto __328 31075 __328: 31076 ; 31077 wMask = wMask | *(*Tcl_WideInt)(unsafe.Pointer(bp + 1448)) 31078 goto __325 31079 __324: 31080 tcl.XTcl_SetObjResult(tls, interp, pError) 31081 __330: 31082 _objPtr4 = pError 31083 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr4)).FrefCount, 1) <= 1) { 31084 goto __333 31085 } 31086 tcl.XTclFreeObj(tls, _objPtr4) 31087 __333: 31088 ; 31089 goto __331 31090 __331: 31091 if 0 != 0 { 31092 goto __330 31093 } 31094 goto __332 31095 __332: 31096 ; 31097 return TCL_ERROR 31098 __325: 31099 ; 31100 goto __323 31101 __322: 31102 switch uint32(*(*int32)(unsafe.Pointer(bp + 1440))) { 31103 case uint32(0): 31104 goto __335 31105 case uint32(1): 31106 goto __336 31107 case uint32(2): 31108 goto __337 31109 case uint32(3): 31110 goto __338 31111 } 31112 goto __334 31113 __335: 31114 wMask = wMask | int64(SQLITE_TRACE_STMT) 31115 goto __334 31116 __336: 31117 wMask = wMask | int64(SQLITE_TRACE_PROFILE) 31118 goto __334 31119 __337: 31120 wMask = wMask | int64(SQLITE_TRACE_ROW) 31121 goto __334 31122 __338: 31123 wMask = wMask | int64(SQLITE_TRACE_CLOSE) 31124 goto __334 31125 __334: 31126 ; 31127 __323: 31128 ; 31129 goto __319 31130 __319: 31131 i4++ 31132 goto __318 31133 goto __320 31134 __320: 31135 ; 31136 goto __316 31137 __315: 31138 wMask = int64(SQLITE_TRACE_STMT) 31139 __316: 31140 ; 31141 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31142 goto __339 31143 } 31144 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 31145 __339: 31146 ; 31147 zTraceV2 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1424) 31148 if !(zTraceV2 != 0 && *(*int32)(unsafe.Pointer(bp + 1424)) > 0) { 31149 goto __340 31150 } 31151 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 31152 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, zTraceV2, uint64(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 31153 goto __341 31154 __340: 31155 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = uintptr(0) 31156 __341: 31157 ; 31158 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31159 goto __342 31160 } 31161 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31162 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(wMask), *(*uintptr)(unsafe.Pointer(&struct { 31163 f func(*libc.TLS, uint32, uintptr, uintptr, uintptr) int32 31164 }{DbTraceV2Handler})), pDb) 31165 goto __343 31166 __342: 31167 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(0), uintptr(0), uintptr(0)) 31168 __343: 31169 ; 31170 __313: 31171 ; 31172 __311: 31173 ; 31174 goto __3 31175 31176 __39: 31177 zBegin = ts + 13159 31178 if !(objc != 3 && objc != 4) { 31179 goto __344 31180 } 31181 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13186) 31182 return TCL_ERROR 31183 __344: 31184 ; 31185 if !((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0 && objc == 4) { 31186 goto __345 31187 } 31188 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&TTYPE_strs1)), int32(unsafe.Sizeof(uintptr(0))), ts+13200, 0, bp+1456) != 0) { 31189 goto __346 31190 } 31191 return TCL_ERROR 31192 __346: 31193 ; 31194 switch uint32(*(*int32)(unsafe.Pointer(bp + 1456))) { 31195 case uint32(0): 31196 goto __348 31197 case uint32(1): 31198 goto __349 31199 case uint32(2): 31200 goto __350 31201 } 31202 goto __347 31203 __348: 31204 ; 31205 goto __347 31206 __349: 31207 zBegin = ts + 13217 31208 goto __347 31209 __350: 31210 zBegin = ts + 13233 31211 goto __347 31212 __347: 31213 ; 31214 __345: 31215 ; 31216 pScript2 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 31217 31218 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 31219 rc = sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zBegin, uintptr(0), uintptr(0), uintptr(0)) 31220 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 31221 if !(rc != SQLITE_OK) { 31222 goto __351 31223 } 31224 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+936, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31225 return TCL_ERROR 31226 __351: 31227 ; 31228 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction++ 31229 31230 addDatabaseRef(tls, pDb) 31231 if !(DbUseNre(tls) != 0) { 31232 goto __352 31233 } 31234 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31235 f func(*libc.TLS, uintptr, uintptr, int32) int32 31236 }{DbTransPostCmd})), *(*uintptr)(unsafe.Pointer(bp + 1464)), uintptr(0), uintptr(0), uintptr(0)) 31237 tcl.XTcl_NREvalObj(tls, interp, pScript2, 0) 31238 goto __353 31239 __352: 31240 rc = DbTransPostCmd(tls, bp+1464, interp, tcl.XTcl_EvalObjEx(tls, interp, pScript2, 0)) 31241 __353: 31242 ; 31243 goto __3 31244 31245 __40: 31246 if !(objc != 2 && objc != 3) { 31247 goto __354 31248 } 31249 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 31250 rc = TCL_ERROR 31251 goto __355 31252 __354: 31253 xNotify = uintptr(0) 31254 pNotifyArg = uintptr(0) 31255 31256 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify != 0) { 31257 goto __356 31258 } 31259 __357: 31260 _objPtr5 = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 31261 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr5)).FrefCount, 1) <= 1) { 31262 goto __360 31263 } 31264 tcl.XTclFreeObj(tls, _objPtr5) 31265 __360: 31266 ; 31267 goto __358 31268 __358: 31269 if 0 != 0 { 31270 goto __357 31271 } 31272 goto __359 31273 __359: 31274 ; 31275 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 31276 __356: 31277 ; 31278 if !(objc == 3) { 31279 goto __361 31280 } 31281 xNotify = *(*uintptr)(unsafe.Pointer(&struct { 31282 f func(*libc.TLS, uintptr, int32) 31283 }{DbUnlockNotify})) 31284 pNotifyArg = pDb 31285 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 31286 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount++ 31287 __361: 31288 ; 31289 if !(sqlite3.Xsqlite3_unlock_notify(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, xNotify, pNotifyArg) != 0) { 31290 goto __362 31291 } 31292 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+952, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31293 rc = TCL_ERROR 31294 __362: 31295 ; 31296 __355: 31297 ; 31298 goto __3 31299 31300 __41: 31301 if !(objc < 3) { 31302 goto __363 31303 } 31304 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13258) 31305 __363: 31306 ; 31307 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&azSub)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+1472) != 0) { 31308 goto __364 31309 } 31310 return TCL_ERROR 31311 __364: 31312 ; 31313 switch uint32(*(*int32)(unsafe.Pointer(bp + 1472))) { 31314 case uint32(0): 31315 goto __366 31316 31317 case uint32(2): 31318 goto __367 31319 31320 case uint32(1): 31321 goto __368 31322 31323 case uint32(3): 31324 goto __369 31325 case uint32(4): 31326 goto __370 31327 } 31328 goto __365 31329 __366: 31330 nCol2 = sqlite3.Xsqlite3_preupdate_count(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 31331 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol2)) 31332 goto __365 31333 31334 __367: 31335 if !(objc > 4) { 31336 goto __371 31337 } 31338 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13277) 31339 return TCL_ERROR 31340 __371: 31341 ; 31342 DbHookCmd(tls, interp, pDb, func() uintptr { 31343 if objc == 4 { 31344 return *(*uintptr)(unsafe.Pointer(objv + 3*8)) 31345 } 31346 return uintptr(0) 31347 }(), pDb+112) 31348 goto __365 31349 31350 __368: 31351 if !(objc != 3) { 31352 goto __372 31353 } 31354 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+584) 31355 return TCL_ERROR 31356 __372: 31357 ; 31358 pRet1 = tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_preupdate_depth(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 31359 tcl.XTcl_SetObjResult(tls, interp, pRet1) 31360 goto __365 31361 31362 __369: 31363 __370: 31364 if !(objc != 4) { 31365 goto __373 31366 } 31367 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+13291) 31368 return TCL_ERROR 31369 __373: 31370 ; 31371 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1476) != 0) { 31372 goto __374 31373 } 31374 return TCL_ERROR 31375 __374: 31376 ; 31377 if !(*(*int32)(unsafe.Pointer(bp + 1472)) == 4) { 31378 goto __375 31379 } 31380 rc = sqlite3.Xsqlite3_preupdate_old(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 31381 goto __376 31382 __375: 31383 ; 31384 rc = sqlite3.Xsqlite3_preupdate_new(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 31385 __376: 31386 ; 31387 if !(rc == SQLITE_OK) { 31388 goto __377 31389 } 31390 pObj1 = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1480))), -1) 31391 tcl.XTcl_SetObjResult(tls, interp, pObj1) 31392 goto __378 31393 __377: 31394 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+968, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31395 return TCL_ERROR 31396 __378: 31397 ; 31398 __365: 31399 ; 31400 goto __3 31401 31402 __42: 31403 __43: 31404 __44: 31405 ppHook = uintptr(0) 31406 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 41) { 31407 goto __379 31408 } 31409 ppHook = pDb + 128 31410 __379: 31411 ; 31412 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 39) { 31413 goto __380 31414 } 31415 ppHook = pDb + 104 31416 __380: 31417 ; 31418 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 30) { 31419 goto __381 31420 } 31421 ppHook = pDb + 120 31422 __381: 31423 ; 31424 if !(objc > 3) { 31425 goto __382 31426 } 31427 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 31428 return TCL_ERROR 31429 __382: 31430 ; 31431 DbHookCmd(tls, interp, pDb, func() uintptr { 31432 if objc == 3 { 31433 return *(*uintptr)(unsafe.Pointer(objv + 2*8)) 31434 } 31435 return uintptr(0) 31436 }(), ppHook) 31437 goto __3 31438 31439 __45: 31440 i5 = 2 31441 __383: 31442 if !(i5 < objc) { 31443 goto __385 31444 } 31445 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8))) 31446 31447 if !(libc.Xstrcmp(tls, zArg, ts+13297) == 0 && i5+1 < objc) { 31448 goto __386 31449 } 31450 i5++ 31451 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8)), pDb+228) != 0) { 31452 goto __388 31453 } 31454 return TCL_ERROR 31455 __388: 31456 ; 31457 goto __387 31458 __386: 31459 if !(libc.Xstrcmp(tls, zArg, ts+13317) == 0) { 31460 goto __389 31461 } 31462 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+1488, ts+9889, 31463 libc.VaList(bp+984, func() uintptr { 31464 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 31465 return (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpStmt 31466 } 31467 return uintptr(0) 31468 }())) 31469 tcl.XTcl_SetResult(tls, interp, bp+1488, uintptr(1)) 31470 goto __390 31471 __389: 31472 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+992, ts+13332, zArg, uintptr(0))) 31473 return TCL_ERROR 31474 __390: 31475 ; 31476 __387: 31477 ; 31478 goto __384 31479 __384: 31480 i5++ 31481 goto __383 31482 goto __385 31483 __385: 31484 ; 31485 if !(i5 == 2) { 31486 goto __391 31487 } 31488 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_libversion(tls), uintptr(0)) 31489 __391: 31490 ; 31491 goto __3 31492 31493 __3: 31494 ; 31495 return rc 31496 } 31497 31498 type DbConfigChoices = struct { 31499 FzName uintptr 31500 Fop int32 31501 F__ccgo_pad1 [4]byte 31502 } 31503 31504 var DB_strs = [43]uintptr{ 31505 ts + 13351, ts + 13362, ts + 13369, 31506 ts + 13383, ts + 13388, ts + 13394, 31507 ts + 9490, ts + 13402, ts + 13410, 31508 ts + 13427, ts + 13439, ts + 13448, 31509 ts + 13455, ts + 13460, ts + 13472, 31510 ts + 13494, ts + 13504, ts + 4896, 31511 ts + 13516, ts + 13523, ts + 10868, 31512 ts + 13532, ts + 13542, ts + 13560, 31513 ts + 13570, ts + 13580, ts + 13590, 31514 ts + 9564, ts + 13598, ts + 13604, 31515 ts + 13612, ts + 13626, ts + 13636, 31516 ts + 13643, ts + 13651, ts + 13665, 31517 ts + 13671, ts + 13680, ts + 13692, 31518 ts + 13706, ts + 13718, ts + 13726, 31519 uintptr(0), 31520 } 31521 var aDbConfig = [16]DbConfigChoices{ 31522 {FzName: ts + 13735, Fop: SQLITE_DBCONFIG_DEFENSIVE}, 31523 {FzName: ts + 13745, Fop: SQLITE_DBCONFIG_DQS_DDL}, 31524 {FzName: ts + 13753, Fop: SQLITE_DBCONFIG_DQS_DML}, 31525 {FzName: ts + 13761, Fop: SQLITE_DBCONFIG_ENABLE_FKEY}, 31526 {FzName: ts + 13773, Fop: SQLITE_DBCONFIG_ENABLE_QPSG}, 31527 {FzName: ts + 13785, Fop: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 31528 {FzName: ts + 13800, Fop: SQLITE_DBCONFIG_ENABLE_VIEW}, 31529 {FzName: ts + 13812, Fop: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 31530 {FzName: ts + 13827, Fop: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 31531 {FzName: ts + 13846, Fop: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 31532 {FzName: ts + 13865, Fop: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 31533 {FzName: ts + 13880, Fop: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 31534 {FzName: ts + 13897, Fop: SQLITE_DBCONFIG_RESET_DATABASE}, 31535 {FzName: ts + 13912, Fop: SQLITE_DBCONFIG_TRIGGER_EQP}, 31536 {FzName: ts + 13924, Fop: SQLITE_DBCONFIG_TRUSTED_SCHEMA}, 31537 {FzName: ts + 13939, Fop: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 31538 } 31539 var TTYPE_strs = [5]uintptr{ 31540 ts + 13955, ts + 13590, ts + 13965, ts + 9490, uintptr(0), 31541 } 31542 var TTYPE_strs1 = [4]uintptr{ 31543 ts + 13969, ts + 13978, ts + 13988, uintptr(0), 31544 } 31545 var azSub = [6]uintptr{ts + 1965, ts + 13998, ts + 14004, ts + 14009, ts + 14013, uintptr(0)} 31546 31547 func DbObjCmdAdaptor(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31548 return tcl.XTcl_NRCallObjProc(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31549 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31550 }{DbObjCmd})), cd, objc, objv) 31551 } 31552 31553 func sqliteCmdUsage(tls *libc.TLS, interp uintptr, objv uintptr) int32 { 31554 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 31555 ts+14017) 31556 return TCL_ERROR 31557 } 31558 31559 func DbMain(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31560 bp := tls.Alloc(336) 31561 defer tls.Free(336) 31562 31563 var p uintptr 31564 var zArg uintptr 31565 var zErrMsg uintptr 31566 var i int32 31567 var zFile uintptr = uintptr(0) 31568 var zVfs uintptr = uintptr(0) 31569 var flags int32 31570 *(*int32)(unsafe.Pointer(bp + 112)) = 1 31571 31572 var rc int32 31573 31574 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX 31575 31576 if objc == 1 { 31577 return sqliteCmdUsage(tls, interp, objv) 31578 } 31579 if objc == 2 { 31580 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 31581 if libc.Xstrcmp(tls, zArg, ts+14163) == 0 { 31582 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_libversion(tls), uintptr(0))) 31583 return TCL_OK 31584 } 31585 if libc.Xstrcmp(tls, zArg, ts+14172) == 0 { 31586 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3_sourceid(tls), uintptr(0))) 31587 return TCL_OK 31588 } 31589 if libc.Xstrcmp(tls, zArg, ts+14182) == 0 { 31590 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+14193, uintptr(0))) 31591 return TCL_OK 31592 } 31593 if int32(*(*int8)(unsafe.Pointer(zArg))) == '-' { 31594 return sqliteCmdUsage(tls, interp, objv) 31595 } 31596 } 31597 for i = 2; i < objc; i++ { 31598 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 31599 if int32(*(*int8)(unsafe.Pointer(zArg))) != '-' { 31600 if zFile != uintptr(0) { 31601 return sqliteCmdUsage(tls, interp, objv) 31602 } 31603 zFile = zArg 31604 continue 31605 } 31606 if i == objc-1 { 31607 return sqliteCmdUsage(tls, interp, objv) 31608 } 31609 i++ 31610 if libc.Xstrcmp(tls, zArg, ts+14195) == 0 { 31611 } else if libc.Xstrcmp(tls, zArg, ts+14200) == 0 { 31612 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 31613 } else if libc.Xstrcmp(tls, zArg, ts+12434) == 0 { 31614 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0 { 31615 return TCL_ERROR 31616 } 31617 if *(*int32)(unsafe.Pointer(bp + 88)) != 0 { 31618 flags = flags & libc.CplInt32(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE) 31619 flags = flags | SQLITE_OPEN_READONLY 31620 } else { 31621 flags = flags & libc.CplInt32(SQLITE_OPEN_READONLY) 31622 flags = flags | SQLITE_OPEN_READWRITE 31623 } 31624 } else if libc.Xstrcmp(tls, zArg, ts+14205) == 0 { 31625 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+92) != 0 { 31626 return TCL_ERROR 31627 } 31628 if *(*int32)(unsafe.Pointer(bp + 92)) != 0 && flags&SQLITE_OPEN_READONLY == 0 { 31629 flags = flags | SQLITE_OPEN_CREATE 31630 } else { 31631 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 31632 } 31633 } else if libc.Xstrcmp(tls, zArg, ts+14213) == 0 { 31634 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+96) != 0 { 31635 return TCL_ERROR 31636 } 31637 if *(*int32)(unsafe.Pointer(bp + 96)) != 0 { 31638 flags = flags | SQLITE_OPEN_NOFOLLOW 31639 } else { 31640 flags = flags & libc.CplInt32(SQLITE_OPEN_NOFOLLOW) 31641 } 31642 } else if libc.Xstrcmp(tls, zArg, ts+14223) == 0 { 31643 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+100) != 0 { 31644 return TCL_ERROR 31645 } 31646 if *(*int32)(unsafe.Pointer(bp + 100)) != 0 { 31647 flags = flags | SQLITE_OPEN_NOMUTEX 31648 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31649 } else { 31650 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31651 } 31652 } else if libc.Xstrcmp(tls, zArg, ts+14232) == 0 { 31653 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+104) != 0 { 31654 return TCL_ERROR 31655 } 31656 if *(*int32)(unsafe.Pointer(bp + 104)) != 0 { 31657 flags = flags | SQLITE_OPEN_FULLMUTEX 31658 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31659 } else { 31660 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31661 } 31662 } else if libc.Xstrcmp(tls, zArg, ts+14243) == 0 { 31663 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+108) != 0 { 31664 return TCL_ERROR 31665 } 31666 if *(*int32)(unsafe.Pointer(bp + 108)) != 0 { 31667 flags = flags | SQLITE_OPEN_URI 31668 } else { 31669 flags = flags & libc.CplInt32(SQLITE_OPEN_URI) 31670 } 31671 } else if libc.Xstrcmp(tls, zArg, ts+14248) == 0 { 31672 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+112) != 0 { 31673 return TCL_ERROR 31674 } 31675 } else { 31676 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+12444, zArg, uintptr(0))) 31677 return TCL_ERROR 31678 } 31679 } 31680 zErrMsg = uintptr(0) 31681 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqliteDb{}))) 31682 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(SqliteDb{}))) 31683 if zFile == uintptr(0) { 31684 zFile = ts + 584 31685 } 31686 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31687 zFile = tcl.XTcl_TranslateFileName(tls, interp, zFile, bp+120) 31688 } 31689 rc = sqlite3.Xsqlite3_open_v2(tls, zFile, p, flags, zVfs) 31690 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31691 tcl.XTcl_DStringFree(tls, bp+120) 31692 } 31693 if (*SqliteDb)(unsafe.Pointer(p)).Fdb != 0 { 31694 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) { 31695 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb))) 31696 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) 31697 (*SqliteDb)(unsafe.Pointer(p)).Fdb = uintptr(0) 31698 } 31699 } else { 31700 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+80, sqlite3.Xsqlite3_errstr(tls, rc))) 31701 } 31702 if (*SqliteDb)(unsafe.Pointer(p)).Fdb == uintptr(0) { 31703 tcl.XTcl_SetResult(tls, interp, zErrMsg, uintptr(1)) 31704 tcl.XTcl_Free(tls, p) 31705 sqlite3.Xsqlite3_free(tls, zErrMsg) 31706 return TCL_ERROR 31707 } 31708 (*SqliteDb)(unsafe.Pointer(p)).FmaxStmt = NUM_PREPARED_STMTS 31709 (*SqliteDb)(unsafe.Pointer(p)).FopenFlags = flags & SQLITE_OPEN_URI 31710 (*SqliteDb)(unsafe.Pointer(p)).Finterp = interp 31711 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 31712 if DbUseNre(tls) != 0 { 31713 tcl.XTcl_NRCreateCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31714 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31715 }{DbObjCmdAdaptor})), *(*uintptr)(unsafe.Pointer(&struct { 31716 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31717 }{DbObjCmd})), 31718 p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31719 } else { 31720 tcl.XTcl_CreateObjCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31721 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31722 }{DbObjCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31723 } 31724 (*SqliteDb)(unsafe.Pointer(p)).FnRef = 1 31725 return TCL_OK 31726 } 31727 31728 func Sqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31729 var rc int32 31730 if 1 != 0 { 31731 rc = TCL_OK 31732 } else { 31733 rc = TCL_ERROR 31734 } 31735 if rc == TCL_OK { 31736 tcl.XTcl_CreateObjCommand(tls, interp, ts+14267, *(*uintptr)(unsafe.Pointer(&struct { 31737 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31738 }{DbMain})), uintptr(0), uintptr(0)) 31739 31740 tcl.XTcl_CreateObjCommand(tls, interp, ts+14275, *(*uintptr)(unsafe.Pointer(&struct { 31741 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31742 }{DbMain})), uintptr(0), uintptr(0)) 31743 rc = tcl.XTcl_PkgProvideEx(tls, interp, ts+14267, ts+14282, uintptr(0)) 31744 } 31745 return rc 31746 } 31747 31748 func Tclsqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31749 return Sqlite3_Init(tls, interp) 31750 } 31751 31752 func Sqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31753 return TCL_OK 31754 } 31755 31756 func Tclsqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31757 return TCL_OK 31758 } 31759 31760 func Sqlite3_SafeInit(tls *libc.TLS, interp uintptr) int32 { 31761 return TCL_ERROR 31762 } 31763 31764 func Sqlite3_SafeUnload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31765 return TCL_ERROR 31766 } 31767 31768 func Sqlite_Init(tls *libc.TLS, interp uintptr) int32 { 31769 return Sqlite3_Init(tls, interp) 31770 } 31771 31772 func Tclsqlite_Init(tls *libc.TLS, interp uintptr) int32 { 31773 return Sqlite3_Init(tls, interp) 31774 } 31775 31776 func Sqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31777 return TCL_OK 31778 } 31779 31780 func Tclsqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31781 return TCL_OK 31782 } 31783 31784 func tclsh_main_loop(tls *libc.TLS) uintptr { 31785 return uintptr(unsafe.Pointer(&zMainloop)) 31786 } 31787 31788 var zMainloop = *(*[431]int8)(unsafe.Pointer(ts + 14289)) 31789 31790 func main1(tls *libc.TLS, argc int32, argv uintptr) int32 { 31791 bp := tls.Alloc(64) 31792 defer tls.Free(64) 31793 31794 var interp uintptr 31795 var i int32 31796 var zScript uintptr = uintptr(0) 31797 31798 if libc.Xgetenv(tls, ts+14720) != 0 { 31799 if libc.Xisatty(tls, 0) != 0 && libc.Xisatty(tls, 2) != 0 { 31800 libc.Xfprintf(tls, libc.X__stderrp, 31801 ts+14739, 31802 libc.VaList(bp, libc.Xgetpid(tls))) 31803 libc.Xfgetc(tls, libc.X__stdinp) 31804 } else { 31805 libc.Xraise(tls, SIGTRAP) 31806 } 31807 } 31808 31809 sqlite3.Xsqlite3_shutdown(tls) 31810 31811 tcl.XTcl_FindExecutable(tls, *(*uintptr)(unsafe.Pointer(argv))) 31812 tcl.XTcl_SetSystemEncoding(tls, uintptr(0), ts+14801) 31813 interp = tcl.XTcl_CreateInterp(tls) 31814 Sqlite3_Init(tls, interp) 31815 31816 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]int8{})), bp+32, ts+1333, libc.VaList(bp+8, argc-1)) 31817 tcl.XTcl_SetVar2(tls, interp, ts+14807, uintptr(0), bp+32, TCL_GLOBAL_ONLY) 31818 tcl.XTcl_SetVar2(tls, interp, ts+14812, uintptr(0), *(*uintptr)(unsafe.Pointer(argv)), TCL_GLOBAL_ONLY) 31819 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), ts+584, TCL_GLOBAL_ONLY) 31820 for i = 1; i < argc; i++ { 31821 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), TCL_GLOBAL_ONLY|TCL_LIST_ELEMENT|TCL_APPEND_VALUE) 31822 } 31823 zScript = sqlite3TestInit(tls, interp) 31824 if zScript == uintptr(0) { 31825 zScript = tclsh_main_loop(tls) 31826 } 31827 if tcl.XTcl_GlobalEval(tls, interp, zScript) != TCL_OK { 31828 var zInfo uintptr = tcl.XTcl_GetVar2(tls, interp, ts+14823, uintptr(0), TCL_GLOBAL_ONLY) 31829 if zInfo == uintptr(0) { 31830 zInfo = tcl.XTcl_GetStringResult(tls, interp) 31831 } 31832 libc.Xfprintf(tls, libc.X__stderrp, ts+14833, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv)), zInfo)) 31833 return 1 31834 } 31835 return 0 31836 } 31837 31838 type sqlite3_value = sqlite3_value1 31839 31840 type sqlite3_context = sqlite3_context1 31841 type PreUpdate = PreUpdate1 31842 31843 type Vdbe = Vdbe1 31844 31845 type Mem = sqlite3_value1 31846 31847 type Op = VdbeOp1 31848 31849 type Bool = uint32 31850 31851 type AuxData1 = struct { 31852 FiAuxOp int32 31853 FiAuxArg int32 31854 FpAux uintptr 31855 FxDeleteAux uintptr 31856 FpNextAux uintptr 31857 } 31858 31859 type AuxData = AuxData1 31860 31861 type VdbeCursor1 = struct { 31862 FeCurType u8 31863 FiDb i8 31864 FnullRow u8 31865 FdeferredMoveto u8 31866 FisTable u8 31867 F__ccgo_pad1 [3]byte 31868 FisEphemeral uint8 31869 F__ccgo_pad2 [1]byte 31870 FseekHit u16 31871 F__ccgo_pad3 [4]byte 31872 Fub struct{ FpBtx uintptr } 31873 FseqCount i64 31874 FcacheStatus u32 31875 FseekResult int32 31876 FpAltCursor uintptr 31877 Fuc struct{ FpCursor uintptr } 31878 FpKeyInfo uintptr 31879 FiHdrOffset u32 31880 FpgnoRoot Pgno 31881 FnField i16 31882 FnHdrParsed u16 31883 F__ccgo_pad4 [4]byte 31884 FmovetoTarget i64 31885 FaOffset uintptr 31886 FaRow uintptr 31887 FpayloadSize u32 31888 FszRow u32 31889 FaType [1]u32 31890 F__ccgo_pad5 [4]byte 31891 } 31892 31893 type VdbeCursor = VdbeCursor1 31894 31895 type VdbeFrame1 = struct { 31896 Fv uintptr 31897 FpParent uintptr 31898 FaOp uintptr 31899 FanExec uintptr 31900 FaMem uintptr 31901 FapCsr uintptr 31902 FaOnce uintptr 31903 Ftoken uintptr 31904 FlastRowid i64 31905 FpAuxData uintptr 31906 FnCursor int32 31907 Fpc int32 31908 FnOp int32 31909 FnMem int32 31910 FnChildMem int32 31911 FnChildCsr int32 31912 FnChange i64 31913 FnDbChange i64 31914 } 31915 31916 type VdbeFrame = VdbeFrame1 31917 31918 type MemValue = struct{ Fr float64 } 31919 31920 type bft = uint32 31921 31922 type ScanStatus1 = struct { 31923 FaddrExplain int32 31924 FaddrLoop int32 31925 FaddrVisit int32 31926 FiSelectID int32 31927 FnEst LogEst 31928 F__ccgo_pad1 [6]byte 31929 FzName uintptr 31930 } 31931 31932 type ScanStatus = ScanStatus1 31933 31934 type DblquoteStr1 = struct { 31935 FpNextStr uintptr 31936 Fz [8]int8 31937 } 31938 31939 type DblquoteStr = DblquoteStr1 31940 31941 type ValueList1 = struct { 31942 FpCsr uintptr 31943 FpOut uintptr 31944 } 31945 31946 type ValueList = ValueList1 31947 31948 func testHexToInt(tls *libc.TLS, h int32) int32 { 31949 if h >= '0' && h <= '9' { 31950 return h - '0' 31951 } else if h >= 'a' && h <= 'f' { 31952 return h - 'a' + 10 31953 } else { 31954 return h - 'A' + 10 31955 } 31956 return int32(0) 31957 } 31958 31959 func sqlite3TestTextToPtr(tls *libc.TLS, z uintptr) uintptr { 31960 bp := tls.Alloc(20) 31961 defer tls.Free(20) 31962 31963 if int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 'x' { 31964 z += uintptr(2) 31965 } 31966 *(*u64)(unsafe.Pointer(bp + 8)) = uint64(0) 31967 for *(*int8)(unsafe.Pointer(z)) != 0 { 31968 *(*u64)(unsafe.Pointer(bp + 8)) = *(*u64)(unsafe.Pointer(bp + 8))<<4 + u64(testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(z))))) 31969 z++ 31970 } 31971 if uint64(unsafe.Sizeof(uintptr(0))) == uint64(unsafe.Sizeof(u64(0))) { 31972 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 31973 } else { 31974 *(*u32)(unsafe.Pointer(bp + 16)) = u32(*(*u64)(unsafe.Pointer(bp + 8))) 31975 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 31976 } 31977 return *(*uintptr)(unsafe.Pointer(bp)) 31978 } 31979 31980 func get_sqlite_pointer(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31981 bp := tls.Alloc(212) 31982 defer tls.Free(212) 31983 31984 var p uintptr 31985 31986 if objc != 2 { 31987 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+14841) 31988 return TCL_ERROR 31989 } 31990 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 31991 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 31992 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 31993 return TCL_ERROR 31994 } 31995 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData 31996 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+112, ts+9889, libc.VaList(bp+24, (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb)) 31997 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+112, 0)) 31998 return TCL_OK 31999 } 32000 32001 func getDbPointer(tls *libc.TLS, interp uintptr, zA uintptr, ppDb uintptr) int32 { 32002 bp := tls.Alloc(64) 32003 defer tls.Free(64) 32004 32005 var p uintptr 32006 32007 if tcl.XTcl_GetCommandInfo(tls, interp, zA, bp) != 0 { 32008 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 32009 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 32010 } else { 32011 *(*uintptr)(unsafe.Pointer(ppDb)) = sqlite3TestTextToPtr(tls, zA) 32012 } 32013 return TCL_OK 32014 } 32015 32016 func sqlite3TestErrCode(tls *libc.TLS, interp uintptr, db uintptr, rc int32) int32 { 32017 bp := tls.Alloc(248) 32018 defer tls.Free(248) 32019 32020 if sqlite3.Xsqlite3_threadsafe(tls) == 0 && rc != SQLITE_MISUSE && rc != SQLITE_OK && 32021 sqlite3.Xsqlite3_errcode(tls, db) != rc { 32022 var r2 int32 = sqlite3.Xsqlite3_errcode(tls, db) 32023 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+48, 32024 ts+14879, 32025 libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), rc, sqlite3.Xsqlite3ErrName(tls, r2), r2)) 32026 tcl.XTcl_ResetResult(tls, interp) 32027 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 32028 return 1 32029 } 32030 return 0 32031 } 32032 32033 func getStmtPointer(tls *libc.TLS, interp uintptr, zArg uintptr, ppStmt uintptr) int32 { 32034 *(*uintptr)(unsafe.Pointer(ppStmt)) = sqlite3TestTextToPtr(tls, zArg) 32035 return TCL_OK 32036 } 32037 32038 func sqlite3TestMakePointerStr(tls *libc.TLS, interp uintptr, zPtr uintptr, p uintptr) int32 { 32039 bp := tls.Alloc(8) 32040 defer tls.Free(8) 32041 32042 sqlite3.Xsqlite3_snprintf(tls, 100, zPtr, ts+9889, libc.VaList(bp, p)) 32043 return TCL_OK 32044 } 32045 32046 func exec_printf_cb(tls *libc.TLS, pArg uintptr, argc int32, argv uintptr, name uintptr) int32 { 32047 var str uintptr = pArg 32048 var i int32 32049 32050 if (*Tcl_DString)(unsafe.Pointer(str)).Flength == 0 { 32051 for i = 0; i < argc; i++ { 32052 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 32053 if *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) != 0 { 32054 return *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) 32055 } 32056 return ts + 5846 32057 }()) 32058 } 32059 } 32060 for i = 0; i < argc; i++ { 32061 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 32062 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 32063 return *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 32064 } 32065 return ts + 5846 32066 }()) 32067 } 32068 return 0 32069 } 32070 32071 func test_io_trace(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32072 return TCL_OK 32073 } 32074 32075 func clang_sanitize_address(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32076 var res int32 = 0 32077 if res == 0 && libc.Xgetenv(tls, ts+14937) != uintptr(0) { 32078 res = 1 32079 } 32080 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 32081 return TCL_OK 32082 } 32083 32084 func test_exec_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32085 bp := tls.Alloc(310) 32086 defer tls.Free(310) 32087 32088 var rc int32 32089 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 32090 var zSql uintptr 32091 32092 if argc != 4 { 32093 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32094 ts+14975, 0)) 32095 return TCL_ERROR 32096 } 32097 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 32098 return TCL_ERROR 32099 } 32100 tcl.XTcl_DStringInit(tls, bp+56) 32101 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 32102 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 32103 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32104 }{exec_printf_cb})), bp+56, bp+272) 32105 sqlite3.Xsqlite3_free(tls, zSql) 32106 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 32107 tcl.XTcl_AppendElement(tls, interp, bp+280) 32108 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32109 if rc == SQLITE_OK { 32110 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 32111 } 32112 return *(*uintptr)(unsafe.Pointer(bp + 272)) 32113 }()) 32114 tcl.XTcl_DStringFree(tls, bp+56) 32115 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 32116 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 32117 } 32118 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 32119 return TCL_ERROR 32120 } 32121 return TCL_OK 32122 } 32123 32124 func test_exec_hex(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32125 bp := tls.Alloc(806) 32126 defer tls.Free(806) 32127 32128 var rc int32 32129 var i int32 32130 var j int32 32131 *(*uintptr)(unsafe.Pointer(bp + 768)) = uintptr(0) 32132 var zHex uintptr 32133 32134 if argc != 3 { 32135 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32136 ts+14993, 0)) 32137 return TCL_ERROR 32138 } 32139 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 32140 return TCL_ERROR 32141 } 32142 zHex = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 32143 i = libc.AssignInt32(&j, 0) 32144 __1: 32145 if !(uint64(i) < uint64(unsafe.Sizeof([501]int8{}))-uint64(1) && *(*int8)(unsafe.Pointer(zHex + uintptr(j))) != 0) { 32146 goto __3 32147 } 32148 { 32149 if int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j)))) == '%' && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 { 32150 *(*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)))))) 32151 j = j + 2 32152 } else { 32153 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = *(*int8)(unsafe.Pointer(zHex + uintptr(j))) 32154 } 32155 32156 } 32157 goto __2 32158 __2: 32159 i++ 32160 j++ 32161 goto __1 32162 goto __3 32163 __3: 32164 ; 32165 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = int8(0) 32166 tcl.XTcl_DStringInit(tls, bp+552) 32167 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48, *(*uintptr)(unsafe.Pointer(&struct { 32168 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32169 }{exec_printf_cb})), bp+552, bp+768) 32170 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+776, ts+1333, libc.VaList(bp+32, rc)) 32171 tcl.XTcl_AppendElement(tls, interp, bp+776) 32172 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32173 if rc == SQLITE_OK { 32174 return (*Tcl_DString)(unsafe.Pointer(bp + 552)).Fstring 32175 } 32176 return *(*uintptr)(unsafe.Pointer(bp + 768)) 32177 }()) 32178 tcl.XTcl_DStringFree(tls, bp+552) 32179 if *(*uintptr)(unsafe.Pointer(bp + 768)) != 0 { 32180 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 768))) 32181 } 32182 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 40)), rc) != 0 { 32183 return TCL_ERROR 32184 } 32185 return TCL_OK 32186 } 32187 32188 func db_enter(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32189 bp := tls.Alloc(40) 32190 defer tls.Free(40) 32191 32192 if argc != 2 { 32193 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32194 ts+15001, 0)) 32195 return TCL_ERROR 32196 } 32197 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32198 return TCL_ERROR 32199 } 32200 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32201 return TCL_OK 32202 } 32203 32204 func db_leave(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32205 bp := tls.Alloc(40) 32206 defer tls.Free(40) 32207 32208 if argc != 2 { 32209 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32210 ts+15001, 0)) 32211 return TCL_ERROR 32212 } 32213 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32214 return TCL_ERROR 32215 } 32216 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32217 return TCL_OK 32218 } 32219 32220 func test_exec(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32221 bp := tls.Alloc(310) 32222 defer tls.Free(310) 32223 32224 var rc int32 32225 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 32226 var zSql uintptr 32227 var i int32 32228 var j int32 32229 32230 if argc != 3 { 32231 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32232 ts+15005, 0)) 32233 return TCL_ERROR 32234 } 32235 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 32236 return TCL_ERROR 32237 } 32238 tcl.XTcl_DStringInit(tls, bp+56) 32239 zSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 32240 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; { 32241 if int32(*(*int8)(unsafe.Pointer(zSql + uintptr(i)))) == '%' { 32242 *(*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)))))) 32243 i = i + 3 32244 } else { 32245 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&i, 1)))) 32246 } 32247 } 32248 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 32249 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 32250 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32251 }{exec_printf_cb})), bp+56, bp+272) 32252 sqlite3.Xsqlite3_free(tls, zSql) 32253 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 32254 tcl.XTcl_AppendElement(tls, interp, bp+280) 32255 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32256 if rc == SQLITE_OK { 32257 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 32258 } 32259 return *(*uintptr)(unsafe.Pointer(bp + 272)) 32260 }()) 32261 tcl.XTcl_DStringFree(tls, bp+56) 32262 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 32263 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 32264 } 32265 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 32266 return TCL_ERROR 32267 } 32268 return TCL_OK 32269 } 32270 32271 func test_exec_nr(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32272 bp := tls.Alloc(48) 32273 defer tls.Free(48) 32274 32275 var rc int32 32276 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 32277 if argc != 3 { 32278 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32279 ts+15005, 0)) 32280 return TCL_ERROR 32281 } 32282 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32283 return TCL_ERROR 32284 } 32285 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), uintptr(0), uintptr(0), bp+40) 32286 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32287 return TCL_ERROR 32288 } 32289 return TCL_OK 32290 } 32291 32292 func test_mprintf_z(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32293 bp := tls.Alloc(40) 32294 defer tls.Free(40) 32295 32296 var zResult uintptr = uintptr(0) 32297 var i int32 32298 32299 for i = 2; i < argc && (i == 2 || zResult != 0); i++ { 32300 zResult = sqlite3.Xsqlite3_mprintf(tls, ts+15013, libc.VaList(bp, zResult, *(*uintptr)(unsafe.Pointer(argv + 1*8)), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 32301 } 32302 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zResult, 0)) 32303 sqlite3.Xsqlite3_free(tls, zResult) 32304 return TCL_OK 32305 } 32306 32307 func test_mprintf_n(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32308 bp := tls.Alloc(20) 32309 defer tls.Free(20) 32310 32311 var zStr uintptr 32312 *(*int32)(unsafe.Pointer(bp + 16)) = 0 32313 zStr = sqlite3.Xsqlite3_mprintf(tls, ts+15020, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+16)) 32314 sqlite3.Xsqlite3_free(tls, zStr) 32315 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 32316 return TCL_OK 32317 } 32318 32319 func test_snprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32320 bp := tls.Alloc(124) 32321 defer tls.Free(124) 32322 32323 var n int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 32324 var zFormat uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 32325 var a1 int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 32326 if uint64(n) > uint64(unsafe.Sizeof([100]int8{})) { 32327 n = int32(unsafe.Sizeof([100]int8{})) 32328 } 32329 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+15025, 0) 32330 sqlite3.Xsqlite3_snprintf(tls, n, bp+24, zFormat, libc.VaList(bp, a1)) 32331 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, 0)) 32332 return TCL_OK 32333 } 32334 32335 func test_get_table_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32336 bp := tls.Alloc(350) 32337 defer tls.Free(350) 32338 32339 var rc int32 32340 *(*uintptr)(unsafe.Pointer(bp + 304)) = uintptr(0) 32341 *(*int32)(unsafe.Pointer(bp + 312)) = 0 32342 *(*int32)(unsafe.Pointer(bp + 316)) = 0 32343 32344 var i int32 32345 32346 var zSql uintptr 32347 *(*int32)(unsafe.Pointer(bp + 64)) = -1 32348 if argc == 5 { 32349 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+64) != 0 { 32350 return TCL_ERROR 32351 } 32352 } 32353 if argc != 4 && argc != 5 { 32354 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32355 ts+15052, 0)) 32356 return TCL_ERROR 32357 } 32358 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) != 0 { 32359 return TCL_ERROR 32360 } 32361 tcl.XTcl_DStringInit(tls, bp+80) 32362 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 32363 if argc == 5 { 32364 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, uintptr(0), uintptr(0), bp+304) 32365 } else { 32366 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, bp+312, bp+316, bp+304) 32367 *(*int32)(unsafe.Pointer(bp + 64)) = (*(*int32)(unsafe.Pointer(bp + 312)) + 1) * *(*int32)(unsafe.Pointer(bp + 316)) 32368 } 32369 sqlite3.Xsqlite3_free(tls, zSql) 32370 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+40, rc)) 32371 tcl.XTcl_AppendElement(tls, interp, bp+320) 32372 if rc == SQLITE_OK { 32373 if argc == 4 { 32374 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 312)))) 32375 tcl.XTcl_AppendElement(tls, interp, bp+320) 32376 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+56, *(*int32)(unsafe.Pointer(bp + 316)))) 32377 tcl.XTcl_AppendElement(tls, interp, bp+320) 32378 } 32379 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 32380 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32381 if *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) != 0 { 32382 return *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) 32383 } 32384 return ts + 5846 32385 }()) 32386 } 32387 } else { 32388 tcl.XTcl_AppendElement(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 304))) 32389 } 32390 sqlite3.Xsqlite3_free_table(tls, *(*uintptr)(unsafe.Pointer(bp + 296))) 32391 if *(*uintptr)(unsafe.Pointer(bp + 304)) != 0 { 32392 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 304))) 32393 } 32394 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 72)), rc) != 0 { 32395 return TCL_ERROR 32396 } 32397 return TCL_OK 32398 } 32399 32400 func test_last_rowid(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32401 bp := tls.Alloc(94) 32402 defer tls.Free(94) 32403 32404 if argc != 2 { 32405 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15078, 0)) 32406 return TCL_ERROR 32407 } 32408 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 32409 return TCL_ERROR 32410 } 32411 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))))) 32412 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 32413 return SQLITE_OK 32414 } 32415 32416 func test_key(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32417 return TCL_OK 32418 } 32419 32420 func test_rekey(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32421 return TCL_OK 32422 } 32423 32424 func sqlite_test_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32425 bp := tls.Alloc(40) 32426 defer tls.Free(40) 32427 32428 var rc int32 32429 if argc != 2 { 32430 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32431 ts+15083, 0)) 32432 return TCL_ERROR 32433 } 32434 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32435 return TCL_ERROR 32436 } 32437 rc = sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32438 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32439 return TCL_OK 32440 } 32441 32442 func sqlite_test_close_v2(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32443 bp := tls.Alloc(40) 32444 defer tls.Free(40) 32445 32446 var rc int32 32447 if argc != 2 { 32448 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32449 ts+15083, 0)) 32450 return TCL_ERROR 32451 } 32452 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32453 return TCL_ERROR 32454 } 32455 rc = sqlite3.Xsqlite3_close_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32456 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32457 return TCL_OK 32458 } 32459 32460 func t1_ifnullFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32461 var i int32 32462 for i = 0; i < argc; i++ { 32463 if SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) { 32464 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 32465 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))), 32466 n, libc.UintptrFromInt32(-1)) 32467 break 32468 } 32469 } 32470 } 32471 32472 func hex8Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 32473 bp := tls.Alloc(208) 32474 defer tls.Free(208) 32475 32476 var z uintptr 32477 var i int32 32478 32479 z = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32480 for i = 0; uint64(i) < uint64(unsafe.Sizeof([200]int8{}))/uint64(2)-uint64(2) && *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 32481 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)))))) 32482 } 32483 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = int8(0) 32484 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 32485 } 32486 32487 func hex16Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 32488 bp := tls.Alloc(408) 32489 defer tls.Free(408) 32490 32491 var z uintptr 32492 var i int32 32493 32494 z = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32495 for i = 0; uint64(i) < uint64(unsafe.Sizeof([400]int8{}))/uint64(4)-uint64(4) && *(*uint16)(unsafe.Pointer(z + uintptr(i)*2)) != 0; i++ { 32496 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)) 32497 } 32498 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*4))) = int8(0) 32499 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 32500 } 32501 32502 type dstr = struct { 32503 FnAlloc int32 32504 FnUsed int32 32505 Fz uintptr 32506 } 32507 32508 func dstrAppend(tls *libc.TLS, p uintptr, z uintptr, divider int32) { 32509 var n int32 = int32(libc.Xstrlen(tls, z)) 32510 if (*dstr)(unsafe.Pointer(p)).FnUsed+n+2 > (*dstr)(unsafe.Pointer(p)).FnAlloc { 32511 var zNew uintptr 32512 (*dstr)(unsafe.Pointer(p)).FnAlloc = (*dstr)(unsafe.Pointer(p)).FnAlloc*2 + n + 200 32513 zNew = sqlite3.Xsqlite3_realloc(tls, (*dstr)(unsafe.Pointer(p)).Fz, (*dstr)(unsafe.Pointer(p)).FnAlloc) 32514 if zNew == uintptr(0) { 32515 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(p)).Fz) 32516 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(dstr{}))) 32517 return 32518 } 32519 (*dstr)(unsafe.Pointer(p)).Fz = zNew 32520 } 32521 if divider != 0 && (*dstr)(unsafe.Pointer(p)).FnUsed > 0 { 32522 *(*int8)(unsafe.Pointer((*dstr)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*dstr)(unsafe.Pointer(p)).FnUsed, 1)))) = int8(divider) 32523 } 32524 libc.Xmemcpy(tls, (*dstr)(unsafe.Pointer(p)).Fz+uintptr((*dstr)(unsafe.Pointer(p)).FnUsed), z, uint64(n+1)) 32525 *(*int32)(unsafe.Pointer(p + 4)) += n 32526 } 32527 32528 func execFuncCallback(tls *libc.TLS, pData uintptr, argc int32, argv uintptr, NotUsed uintptr) int32 { 32529 var p uintptr = pData 32530 var i int32 32531 for i = 0; i < argc; i++ { 32532 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) == uintptr(0) { 32533 dstrAppend(tls, p, ts+5846, ' ') 32534 } else { 32535 dstrAppend(tls, p, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ' ') 32536 } 32537 } 32538 return 0 32539 } 32540 32541 func sqlite3ExecFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32542 bp := tls.Alloc(16) 32543 defer tls.Free(16) 32544 32545 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(dstr{}))) 32546 sqlite3.Xsqlite3_exec(tls, sqlite3.Xsqlite3_user_data(tls, context), 32547 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 32548 *(*uintptr)(unsafe.Pointer(&struct { 32549 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32550 }{execFuncCallback})), bp, uintptr(0)) 32551 sqlite3.Xsqlite3_result_text(tls, context, (*dstr)(unsafe.Pointer(bp)).Fz, (*dstr)(unsafe.Pointer(bp)).FnUsed, libc.UintptrFromInt32(-1)) 32552 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(bp)).Fz) 32553 } 32554 32555 func tkt2213Function(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32556 var nText int32 32557 var zText1 uintptr 32558 var zText2 uintptr 32559 var zText3 uintptr 32560 32561 nText = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32562 zText1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32563 zText2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32564 zText3 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32565 32566 if zText1 != zText2 || zText2 != zText3 { 32567 sqlite3.Xsqlite3_result_error(tls, context, ts+15099, -1) 32568 } else { 32569 var zCopy uintptr = sqlite3.Xsqlite3_malloc(tls, nText) 32570 libc.Xmemcpy(tls, zCopy, zText1, uint64(nText)) 32571 sqlite3.Xsqlite3_result_text(tls, context, zCopy, nText, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 32572 } 32573 } 32574 32575 func ptrChngFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32576 var p1 uintptr 32577 var p2 uintptr 32578 var zCmd uintptr 32579 if argc != 4 { 32580 return 32581 } 32582 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 32583 if zCmd == uintptr(0) { 32584 return 32585 } 32586 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32587 p1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32588 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32589 p1 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32590 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32591 p1 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32592 } else { 32593 return 32594 } 32595 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 32596 if zCmd == uintptr(0) { 32597 return 32598 } 32599 if libc.Xstrcmp(tls, zCmd, ts+15127) == 0 { 32600 sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32601 } else if libc.Xstrcmp(tls, zCmd, ts+15133) == 0 { 32602 sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32603 } else if libc.Xstrcmp(tls, zCmd, ts+15141) == 0 { 32604 } else { 32605 return 32606 } 32607 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 32608 if zCmd == uintptr(0) { 32609 return 32610 } 32611 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32612 p2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32613 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32614 p2 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32615 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32616 p2 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32617 } else { 32618 return 32619 } 32620 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(p1 != p2)) 32621 } 32622 32623 func nondeterministicFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32624 sqlite3.Xsqlite3_result_int(tls, context, libc.PostIncInt32(&cnt, 1)) 32625 } 32626 32627 var cnt int32 = 0 32628 32629 func intrealFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32630 bp := tls.Alloc(8) 32631 defer tls.Free(8) 32632 32633 var v sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 32634 sqlite3.Xsqlite3_result_int64(tls, context, v) 32635 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_RESULT_INTREAL, libc.VaList(bp, context)) 32636 } 32637 32638 func test_create_function(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32639 bp := tls.Alloc(40) 32640 defer tls.Free(40) 32641 32642 var rc int32 32643 32644 if argc != 2 { 32645 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32646 ts+15078, 0)) 32647 return TCL_ERROR 32648 } 32649 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32650 return TCL_ERROR 32651 } 32652 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15146, -1, SQLITE_UTF8, uintptr(0), 32653 *(*uintptr)(unsafe.Pointer(&struct { 32654 f func(*libc.TLS, uintptr, int32, uintptr) 32655 }{t1_ifnullFunc})), uintptr(0), uintptr(0)) 32656 if rc == SQLITE_OK { 32657 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15157, 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32658 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32659 f func(*libc.TLS, uintptr, int32, uintptr) 32660 }{hex8Func})), uintptr(0), uintptr(0)) 32661 } 32662 if rc == SQLITE_OK { 32663 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15162, 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 32664 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32665 f func(*libc.TLS, uintptr, int32, uintptr) 32666 }{hex16Func})), uintptr(0), uintptr(0)) 32667 } 32668 if rc == SQLITE_OK { 32669 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15168, 1, SQLITE_ANY, uintptr(0), 32670 *(*uintptr)(unsafe.Pointer(&struct { 32671 f func(*libc.TLS, uintptr, int32, uintptr) 32672 }{tkt2213Function})), uintptr(0), uintptr(0)) 32673 } 32674 if rc == SQLITE_OK { 32675 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15180, 4, SQLITE_ANY, uintptr(0), 32676 *(*uintptr)(unsafe.Pointer(&struct { 32677 f func(*libc.TLS, uintptr, int32, uintptr) 32678 }{ptrChngFunction})), uintptr(0), uintptr(0)) 32679 } 32680 32681 if rc == SQLITE_OK { 32682 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15195, -1, SQLITE_UTF8, 32683 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32684 f func(*libc.TLS, uintptr, int32, uintptr) 32685 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32686 } 32687 if rc == SQLITE_OK { 32688 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15204, -1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32689 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32690 f func(*libc.TLS, uintptr, int32, uintptr) 32691 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32692 } 32693 32694 if rc == SQLITE_OK { 32695 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15213, 1, SQLITE_UTF8, 32696 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32697 f func(*libc.TLS, uintptr, int32, uintptr) 32698 }{intrealFunction})), uintptr(0), uintptr(0)) 32699 } 32700 32701 if rc == SQLITE_OK { 32702 var zUtf16 uintptr 32703 var pVal uintptr 32704 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32705 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32706 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+15221, uint8(SQLITE_UTF8), uintptr(0)) 32707 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 32708 if (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FmallocFailed != 0 { 32709 rc = SQLITE_NOMEM 32710 } else { 32711 rc = sqlite3.Xsqlite3_create_function16(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zUtf16, 32712 1, SQLITE_UTF16, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct { 32713 f func(*libc.TLS, uintptr, int32, uintptr) 32714 }{sqlite3ExecFunc})), uintptr(0), uintptr(0)) 32715 } 32716 sqlite3.Xsqlite3ValueFree(tls, pVal) 32717 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32718 } 32719 32720 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32721 return TCL_ERROR 32722 } 32723 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32724 return TCL_OK 32725 } 32726 32727 func test_drop_modules(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32728 bp := tls.Alloc(40) 32729 defer tls.Free(40) 32730 32731 if argc < 2 { 32732 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32733 ts+15078, 0)) 32734 return TCL_ERROR 32735 } 32736 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32737 return TCL_ERROR 32738 } 32739 sqlite3.Xsqlite3_drop_modules(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), func() uintptr { 32740 if argc > 2 { 32741 return argv + uintptr(2)*8 32742 } 32743 return uintptr(0) 32744 }()) 32745 return TCL_OK 32746 } 32747 32748 type t1CountCtx1 = struct{ Fn int32 } 32749 32750 type t1CountCtx = t1CountCtx1 32751 32752 func t1CountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32753 bp := tls.Alloc(9) 32754 defer tls.Free(9) 32755 32756 var p uintptr 32757 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 32758 if (argc == 0 || SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv)))) && p != 0 { 32759 (*t1CountCtx)(unsafe.Pointer(p)).Fn++ 32760 } 32761 if argc > 0 { 32762 var v int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 32763 if v == 40 { 32764 sqlite3.Xsqlite3_result_error(tls, context, ts+15235, -1) 32765 } else if v == 41 { 32766 *(*[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)} 32767 sqlite3.Xsqlite3_result_error16(tls, context, bp+1, -1) 32768 } 32769 } 32770 } 32771 32772 func t1CountFinalize(tls *libc.TLS, context uintptr) { 32773 var p uintptr 32774 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 32775 if p != 0 { 32776 if (*t1CountCtx)(unsafe.Pointer(p)).Fn == 42 { 32777 sqlite3.Xsqlite3_result_error(tls, context, ts+15265, -1) 32778 } else { 32779 sqlite3.Xsqlite3_result_int(tls, context, func() int32 { 32780 if p != 0 { 32781 return (*t1CountCtx)(unsafe.Pointer(p)).Fn 32782 } 32783 return 0 32784 }()) 32785 } 32786 } 32787 } 32788 32789 func legacyCountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32790 } 32791 32792 func legacyCountFinalize(tls *libc.TLS, context uintptr) { 32793 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_aggregate_count(tls, context)) 32794 } 32795 32796 func test_create_aggregate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32797 bp := tls.Alloc(40) 32798 defer tls.Free(40) 32799 32800 var rc int32 32801 if argc != 2 { 32802 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32803 ts+15083, 0)) 32804 return TCL_ERROR 32805 } 32806 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32807 return TCL_ERROR 32808 } 32809 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 0, SQLITE_UTF8, uintptr(0), uintptr(0), 32810 *(*uintptr)(unsafe.Pointer(&struct { 32811 f func(*libc.TLS, uintptr, int32, uintptr) 32812 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 32813 if rc == SQLITE_OK { 32814 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 1, SQLITE_UTF8, uintptr(0), uintptr(0), 32815 *(*uintptr)(unsafe.Pointer(&struct { 32816 f func(*libc.TLS, uintptr, int32, uintptr) 32817 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 32818 } 32819 if rc == SQLITE_OK { 32820 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15294, 0, SQLITE_ANY, uintptr(0), uintptr(0), 32821 *(*uintptr)(unsafe.Pointer(&struct { 32822 f func(*libc.TLS, uintptr, int32, uintptr) 32823 }{legacyCountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{legacyCountFinalize}))) 32824 } 32825 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32826 return TCL_ERROR 32827 } 32828 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32829 return TCL_OK 32830 } 32831 32832 func test_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32833 bp := tls.Alloc(40) 32834 defer tls.Free(40) 32835 32836 if argc != 2 { 32837 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32838 ts+15307, 0)) 32839 return TCL_ERROR 32840 } 32841 libc.Xprintf(tls, ts+389, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 32842 return TCL_OK 32843 } 32844 32845 func sqlite3_mprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32846 bp := tls.Alloc(84) 32847 defer tls.Free(84) 32848 32849 var i int32 32850 var z uintptr 32851 if argc != 5 { 32852 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32853 ts+15314, 0)) 32854 return TCL_ERROR 32855 } 32856 for i = 2; i < 5; i++ { 32857 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32858 return TCL_ERROR 32859 } 32860 } 32861 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)))) 32862 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32863 sqlite3.Xsqlite3_free(tls, z) 32864 return TCL_OK 32865 } 32866 32867 func sqlite3_mprintf_int64(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32868 bp := tls.Alloc(112) 32869 defer tls.Free(112) 32870 32871 var i int32 32872 32873 var z uintptr 32874 if argc != 5 { 32875 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32876 ts+15314, 0)) 32877 return TCL_ERROR 32878 } 32879 for i = 2; i < 5; i++ { 32880 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 { 32881 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15335, 0)) 32882 return TCL_ERROR 32883 } 32884 } 32885 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)))) 32886 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32887 sqlite3.Xsqlite3_free(tls, z) 32888 return TCL_OK 32889 } 32890 32891 func sqlite3_mprintf_long(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32892 bp := tls.Alloc(112) 32893 defer tls.Free(112) 32894 32895 var i int32 32896 32897 var z uintptr 32898 if argc != 5 { 32899 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32900 ts+15314, 0)) 32901 return TCL_ERROR 32902 } 32903 for i = 2; i < 5; i++ { 32904 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32905 return TCL_ERROR 32906 } 32907 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) = int64(*(*int32)(unsafe.Pointer(bp + 72 + uintptr(i-2)*4))) 32908 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) &= int64(uint64(1)<<(uint64(unsafe.Sizeof(int32(0)))*uint64(8)) - uint64(1)) 32909 } 32910 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)))) 32911 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32912 sqlite3.Xsqlite3_free(tls, z) 32913 return TCL_OK 32914 } 32915 32916 func sqlite3_mprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32917 bp := tls.Alloc(84) 32918 defer tls.Free(84) 32919 32920 var i int32 32921 var z uintptr 32922 if argc < 4 || argc > 5 { 32923 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32924 ts+15374, 0)) 32925 return TCL_ERROR 32926 } 32927 for i = 2; i < 4; i++ { 32928 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32929 return TCL_ERROR 32930 } 32931 } 32932 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 { 32933 if argc > 4 { 32934 return *(*uintptr)(unsafe.Pointer(argv + 4*8)) 32935 } 32936 return uintptr(0) 32937 }())) 32938 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32939 sqlite3.Xsqlite3_free(tls, z) 32940 return TCL_OK 32941 } 32942 32943 func sqlite3_snprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32944 bp := tls.Alloc(104) 32945 defer tls.Free(104) 32946 32947 var i int32 32948 32949 var z uintptr 32950 if argc < 5 || argc > 6 { 32951 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32952 ts+15400, 0)) 32953 return TCL_ERROR 32954 } 32955 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+88) != 0 { 32956 return TCL_ERROR 32957 } 32958 if *(*int32)(unsafe.Pointer(bp + 88)) < 0 { 32959 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15430, 0)) 32960 return TCL_ERROR 32961 } 32962 for i = 3; i < 5; i++ { 32963 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+92+uintptr(i-3)*4) != 0 { 32964 return TCL_ERROR 32965 } 32966 } 32967 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 88))+1) 32968 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 { 32969 if argc > 4 { 32970 return *(*uintptr)(unsafe.Pointer(argv + 5*8)) 32971 } 32972 return uintptr(0) 32973 }())) 32974 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32975 sqlite3.Xsqlite3_free(tls, z) 32976 return TCL_OK 32977 } 32978 32979 func sqlite3_mprintf_double(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32980 bp := tls.Alloc(96) 32981 defer tls.Free(96) 32982 32983 var i int32 32984 32985 var z uintptr 32986 if argc != 5 { 32987 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32988 ts+15453, 0)) 32989 return TCL_ERROR 32990 } 32991 for i = 2; i < 4; i++ { 32992 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32993 return TCL_ERROR 32994 } 32995 } 32996 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+88) != 0 { 32997 return TCL_ERROR 32998 } 32999 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)))) 33000 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33001 sqlite3.Xsqlite3_free(tls, z) 33002 return TCL_OK 33003 } 33004 33005 func sqlite3_mprintf_scaled(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33006 bp := tls.Alloc(72) 33007 defer tls.Free(72) 33008 33009 var i int32 33010 33011 var z uintptr 33012 if argc != 4 { 33013 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33014 ts+15477, 0)) 33015 return TCL_ERROR 33016 } 33017 for i = 2; i < 4; i++ { 33018 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+56+uintptr(i-2)*8) != 0 { 33019 return TCL_ERROR 33020 } 33021 } 33022 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)))) 33023 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 33024 sqlite3.Xsqlite3_free(tls, z) 33025 return TCL_OK 33026 } 33027 33028 func sqlite3_mprintf_stronly(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33029 bp := tls.Alloc(56) 33030 defer tls.Free(56) 33031 33032 var z uintptr 33033 if argc != 3 { 33034 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33035 ts+15500, 0)) 33036 return TCL_ERROR 33037 } 33038 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 33039 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 33040 sqlite3.Xsqlite3_free(tls, z) 33041 return TCL_OK 33042 } 33043 33044 func sqlite3_mprintf_hexdouble(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33045 bp := tls.Alloc(112) 33046 defer tls.Free(112) 33047 33048 var z uintptr 33049 33050 if argc != 3 { 33051 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33052 ts+15500, 0)) 33053 return TCL_ERROR 33054 } 33055 if libc.Xsscanf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), ts+15516, libc.VaList(bp+32, bp+88, bp+92)) != 2 { 33056 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+15525, 0)) 33057 return TCL_ERROR 33058 } 33059 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 88))) 33060 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = *(*sqlite_uint64)(unsafe.Pointer(bp + 104))<<32 + sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 92))) 33061 libc.Xmemcpy(tls, bp+96, bp+104, uint64(unsafe.Sizeof(float64(0)))) 33062 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+64, *(*float64)(unsafe.Pointer(bp + 96)))) 33063 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33064 sqlite3.Xsqlite3_free(tls, z) 33065 return TCL_OK 33066 } 33067 33068 func test_enable_shared(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33069 bp := tls.Alloc(4) 33070 defer tls.Free(4) 33071 33072 var rc int32 33073 33074 var ret int32 = 0 33075 33076 if objc != 2 && objc != 1 { 33077 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15569) 33078 return TCL_ERROR 33079 } 33080 ret = sqlite3.Xsqlite3Config.FsharedCacheEnabled 33081 33082 if objc == 2 { 33083 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 33084 return TCL_ERROR 33085 } 33086 rc = sqlite3.Xsqlite3_enable_shared_cache(tls, *(*int32)(unsafe.Pointer(bp))) 33087 if rc != SQLITE_OK { 33088 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 33089 return TCL_ERROR 33090 } 33091 } 33092 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(ret != 0))) 33093 return TCL_OK 33094 } 33095 33096 func test_extended_result_codes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33097 bp := tls.Alloc(12) 33098 defer tls.Free(12) 33099 33100 if objc != 3 { 33101 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15579) 33102 return TCL_ERROR 33103 } 33104 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33105 return TCL_ERROR 33106 } 33107 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33108 return TCL_ERROR 33109 } 33110 sqlite3.Xsqlite3_extended_result_codes(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 33111 return TCL_OK 33112 } 33113 33114 func test_libversion_number(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33115 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_libversion_number(tls))) 33116 return TCL_OK 33117 } 33118 33119 func test_table_column_metadata(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33120 bp := tls.Alloc(52) 33121 defer tls.Free(52) 33122 33123 var zDb uintptr 33124 var zTbl uintptr 33125 var zCol uintptr 33126 var rc int32 33127 var pRet uintptr 33128 33129 if objc != 5 && objc != 4 { 33130 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15590) 33131 return TCL_ERROR 33132 } 33133 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33134 return TCL_ERROR 33135 } 33136 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33137 zTbl = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 33138 if objc == 5 { 33139 zCol = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 33140 } else { 33141 zCol = uintptr(0) 33142 } 33143 33144 if libc.Xstrlen(tls, zDb) == uint64(0) { 33145 zDb = uintptr(0) 33146 } 33147 33148 rc = sqlite3.Xsqlite3_table_column_metadata(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDb, zTbl, zCol, 33149 bp+24, bp+32, bp+40, bp+44, bp+48) 33150 33151 if rc != SQLITE_OK { 33152 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 33153 return TCL_ERROR 33154 } 33155 33156 pRet = tcl.XTcl_NewObj(tls) 33157 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), -1)) 33158 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), -1)) 33159 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 33160 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 44)))) 33161 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 48)))) 33162 tcl.XTcl_SetObjResult(tls, interp, pRet) 33163 33164 return TCL_OK 33165 } 33166 33167 func blobHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 33168 bp := tls.Alloc(8) 33169 defer tls.Free(8) 33170 33171 var z uintptr 33172 33173 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 33174 if *(*int32)(unsafe.Pointer(bp)) == 0 { 33175 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 33176 } else { 33177 var channel Tcl_Channel 33178 var instanceData ClientData 33179 33180 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 33181 if !(channel != 0) { 33182 return TCL_ERROR 33183 } 33184 33185 tcl.XTcl_Flush(tls, channel) 33186 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 33187 33188 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 33189 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 33190 } 33191 33192 return TCL_OK 33193 } 33194 33195 func test_blob_reopen(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33196 bp := tls.Alloc(16) 33197 defer tls.Free(16) 33198 33199 var rc int32 33200 33201 if objc != 3 { 33202 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15616) 33203 return TCL_ERROR 33204 } 33205 33206 if blobHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 33207 return TCL_ERROR 33208 } 33209 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33210 return TCL_ERROR 33211 } 33212 33213 rc = sqlite3.Xsqlite3_blob_reopen(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 8))) 33214 if rc != SQLITE_OK { 33215 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 33216 } 33217 33218 return func() int32 { 33219 if rc == SQLITE_OK { 33220 return TCL_OK 33221 } 33222 return TCL_ERROR 33223 }() 33224 } 33225 33226 type TestCollationX1 = struct { 33227 Finterp uintptr 33228 FpCmp uintptr 33229 FpDel uintptr 33230 } 33231 33232 type TestCollationX = TestCollationX1 33233 33234 func testCreateCollationDel(tls *libc.TLS, pCtx uintptr) { 33235 var p uintptr = pCtx 33236 33237 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, (*TestCollationX)(unsafe.Pointer(p)).FpDel, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) 33238 if rc != TCL_OK { 33239 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 33240 } 33241 33242 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33243 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpCmp 33244 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33245 tcl.XTclFreeObj(tls, _objPtr) 33246 } 33247 } 33248 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 33249 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpDel 33250 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33251 tcl.XTclFreeObj(tls, _objPtr) 33252 } 33253 } 33254 sqlite3.Xsqlite3_free(tls, p) 33255 } 33256 33257 func testCreateCollationCmp(tls *libc.TLS, pCtx uintptr, nLeft int32, zLeft uintptr, nRight int32, zRight uintptr) int32 { 33258 bp := tls.Alloc(4) 33259 defer tls.Free(4) 33260 33261 var p uintptr = pCtx 33262 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpCmp) 33263 *(*int32)(unsafe.Pointer(bp)) = 0 33264 33265 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 33266 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zLeft, nLeft)) 33267 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zRight, nRight)) 33268 33269 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, pScript, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) || 33270 TCL_OK != tcl.XTcl_GetIntFromObj(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp), bp) { 33271 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 33272 } 33273 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33274 var _objPtr uintptr = pScript 33275 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33276 tcl.XTclFreeObj(tls, _objPtr) 33277 } 33278 } 33279 33280 return *(*int32)(unsafe.Pointer(bp)) 33281 } 33282 33283 func test_create_collation_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33284 bp := tls.Alloc(24) 33285 defer tls.Free(24) 33286 33287 var p uintptr 33288 33289 var rc int32 33290 33291 if objc != 5 { 33292 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15630) 33293 return TCL_ERROR 33294 } 33295 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33296 return TCL_ERROR 33297 } 33298 33299 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TestCollationX{}))) 33300 (*TestCollationX)(unsafe.Pointer(p)).FpCmp = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 33301 (*TestCollationX)(unsafe.Pointer(p)).FpDel = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 33302 (*TestCollationX)(unsafe.Pointer(p)).Finterp = interp 33303 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpCmp)).FrefCount++ 33304 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpDel)).FrefCount++ 33305 33306 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 16, 33307 p, *(*uintptr)(unsafe.Pointer(&struct { 33308 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33309 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 33310 if rc != SQLITE_MISUSE { 33311 tcl.XTcl_AppendResult(tls, interp, 33312 libc.VaList(bp, ts+15663, uintptr(0))) 33313 return TCL_ERROR 33314 } 33315 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), SQLITE_UTF8, 33316 p, *(*uintptr)(unsafe.Pointer(&struct { 33317 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33318 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 33319 return TCL_OK 33320 } 33321 33322 type CreateFunctionV21 = struct { 33323 Finterp uintptr 33324 FpFunc uintptr 33325 FpStep uintptr 33326 FpFinal uintptr 33327 FpDestroy uintptr 33328 } 33329 33330 type CreateFunctionV2 = CreateFunctionV21 33331 33332 func cf2Func(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 33333 } 33334 33335 func cf2Step(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 33336 } 33337 33338 func cf2Final(tls *libc.TLS, ctx uintptr) { 33339 } 33340 33341 func cf2Destroy(tls *libc.TLS, pUser uintptr) { 33342 var p uintptr = pUser 33343 33344 if (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp != 0 && (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33345 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy, 0) 33346 if rc != TCL_OK { 33347 tcl.XTcl_BackgroundError(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp) 33348 } 33349 } 33350 33351 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33352 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33353 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc 33354 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33355 tcl.XTclFreeObj(tls, _objPtr) 33356 } 33357 } 33358 } 33359 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33360 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 33361 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep 33362 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33363 tcl.XTclFreeObj(tls, _objPtr) 33364 } 33365 } 33366 } 33367 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33368 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 33369 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal 33370 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33371 tcl.XTclFreeObj(tls, _objPtr) 33372 } 33373 } 33374 } 33375 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33376 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 33377 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy 33378 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33379 tcl.XTclFreeObj(tls, _objPtr) 33380 } 33381 } 33382 } 33383 sqlite3.Xsqlite3_free(tls, p) 33384 } 33385 33386 func test_create_function_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33387 bp := tls.Alloc(180) 33388 defer tls.Free(180) 33389 33390 var zFunc uintptr 33391 33392 var p uintptr 33393 var i int32 33394 var rc int32 33395 33396 *(*[6]EncTable)(unsafe.Pointer(bp + 32)) = [6]EncTable{ 33397 {FzEnc: ts + 15728, Fenc: SQLITE_UTF8}, 33398 {FzEnc: ts + 15733, Fenc: SQLITE_UTF16}, 33399 {FzEnc: ts + 15739, Fenc: SQLITE_UTF16LE}, 33400 {FzEnc: ts + 15747, Fenc: SQLITE_UTF16BE}, 33401 {FzEnc: ts + 12774, Fenc: SQLITE_ANY}, 33402 {FzEnc: ts + 14193}, 33403 } 33404 33405 if objc < 5 || objc%2 == 0 { 33406 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15755) 33407 return TCL_ERROR 33408 } 33409 33410 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33411 return TCL_ERROR 33412 } 33413 zFunc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33414 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 33415 return TCL_ERROR 33416 } 33417 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+32, int32(unsafe.Sizeof(EncTable{})), 33418 ts+15784, 0, bp+128) != 0 { 33419 return TCL_ERROR 33420 } 33421 *(*int32)(unsafe.Pointer(bp + 128)) = (*EncTable)(unsafe.Pointer(bp + 32 + uintptr(*(*int32)(unsafe.Pointer(bp + 128)))*16)).Fenc 33422 33423 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CreateFunctionV2{}))) 33424 33425 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CreateFunctionV2{}))) 33426 (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp = interp 33427 33428 for i = 5; i < objc; i = i + 2 { 33429 *(*[5]uintptr)(unsafe.Pointer(bp + 136)) = [5]uintptr{ts + 15793, ts + 15799, ts + 15805, ts + 15812, uintptr(0)} 33430 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+136, int32(unsafe.Sizeof(uintptr(0))), ts+15821, 0, bp+176) != 0 { 33431 sqlite3.Xsqlite3_free(tls, p) 33432 return TCL_ERROR 33433 } 33434 33435 switch *(*int32)(unsafe.Pointer(bp + 176)) { 33436 case 0: 33437 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 33438 break 33439 case 1: 33440 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 33441 break 33442 case 2: 33443 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 33444 break 33445 case 3: 33446 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 33447 break 33448 } 33449 } 33450 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33451 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc) 33452 } 33453 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33454 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep) 33455 } 33456 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33457 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal) 33458 } 33459 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33460 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy) 33461 } 33462 33463 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33464 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc)).FrefCount++ 33465 } 33466 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33467 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpStep)).FrefCount++ 33468 } 33469 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33470 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal)).FrefCount++ 33471 } 33472 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33473 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy)).FrefCount++ 33474 } 33475 33476 rc = sqlite3.Xsqlite3_create_function_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zFunc, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 128)), p, 33477 func() uintptr { 33478 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33479 return *(*uintptr)(unsafe.Pointer(&struct { 33480 f func(*libc.TLS, uintptr, int32, uintptr) 33481 }{cf2Func})) 33482 } 33483 return uintptr(0) 33484 }(), 33485 func() uintptr { 33486 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33487 return *(*uintptr)(unsafe.Pointer(&struct { 33488 f func(*libc.TLS, uintptr, int32, uintptr) 33489 }{cf2Step})) 33490 } 33491 return uintptr(0) 33492 }(), 33493 func() uintptr { 33494 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33495 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Final})) 33496 } 33497 return uintptr(0) 33498 }(), 33499 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Destroy}))) 33500 if rc != SQLITE_OK { 33501 tcl.XTcl_ResetResult(tls, interp) 33502 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 33503 return TCL_ERROR 33504 } 33505 return TCL_OK 33506 } 33507 33508 type EncTable = struct { 33509 FzEnc uintptr 33510 Fenc int32 33511 F__ccgo_pad1 [4]byte 33512 } 33513 33514 func test_load_extension(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33515 bp := tls.Alloc(88) 33516 defer tls.Free(88) 33517 33518 var db uintptr 33519 _ = db 33520 var rc int32 33521 var zDb uintptr 33522 var zFile uintptr 33523 _ = zFile 33524 var zProc uintptr = uintptr(0) 33525 _ = zProc 33526 var zErr uintptr = uintptr(0) 33527 33528 if objc != 4 && objc != 3 { 33529 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15828) 33530 return TCL_ERROR 33531 } 33532 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33533 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33534 if objc == 4 { 33535 zProc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 33536 } 33537 33538 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+24) != 0) { 33539 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33540 return TCL_ERROR 33541 } 33542 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)).Fdb 33543 33544 rc = SQLITE_ERROR 33545 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+15850, 0) 33546 _ = zProc 33547 _ = zFile 33548 if rc != SQLITE_OK { 33549 tcl.XTcl_SetResult(tls, interp, func() uintptr { 33550 if zErr != 0 { 33551 return zErr 33552 } 33553 return ts + 584 33554 }(), uintptr(1)) 33555 rc = TCL_ERROR 33556 } else { 33557 rc = TCL_OK 33558 } 33559 sqlite3.Xsqlite3_free(tls, zErr) 33560 33561 return rc 33562 } 33563 33564 func test_enable_load(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33565 bp := tls.Alloc(100) 33566 defer tls.Free(100) 33567 33568 var db uintptr 33569 _ = db 33570 var zDb uintptr 33571 33572 if objc != 3 { 33573 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15892) 33574 return TCL_ERROR 33575 } 33576 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33577 33578 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+32) != 0) { 33579 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33580 return TCL_ERROR 33581 } 33582 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 32)).FobjClientData)).Fdb 33583 33584 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+96) != 0 { 33585 return TCL_ERROR 33586 } 33587 33588 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+15850)) 33589 return TCL_ERROR 33590 } 33591 33592 func sqlite_abort(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33593 libc.Xexit(tls, 255) 33594 33595 return TCL_OK 33596 } 33597 33598 func testFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33599 var zArg0 uintptr 33600 __1: 33601 if !(argc >= 2) { 33602 goto __2 33603 } 33604 zArg0 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33605 if !(zArg0 != 0) { 33606 goto __3 33607 } 33608 if !(0 == sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2577)) { 33609 goto __5 33610 } 33611 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33612 goto __6 33613 __5: 33614 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+3973) == 0) { 33615 goto __7 33616 } 33617 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33618 goto __8 33619 __7: 33620 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+15908) == 0) { 33621 goto __9 33622 } 33623 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), -1, 33624 libc.UintptrFromInt32(-1)) 33625 goto __10 33626 __9: 33627 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2562) == 0) { 33628 goto __11 33629 } 33630 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33631 goto __12 33632 __11: 33633 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+7939) == 0) { 33634 goto __13 33635 } 33636 sqlite3.Xsqlite3_result_null(tls, context) 33637 goto __14 33638 __13: 33639 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+10013) == 0) { 33640 goto __15 33641 } 33642 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv + uintptr(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))*8))) 33643 goto __16 33644 __15: 33645 goto error_out 33646 __16: 33647 ; 33648 __14: 33649 ; 33650 __12: 33651 ; 33652 __10: 33653 ; 33654 __8: 33655 ; 33656 __6: 33657 ; 33658 goto __4 33659 __3: 33660 goto error_out 33661 __4: 33662 ; 33663 argc = argc - 2 33664 argv += 8 * uintptr(2) 33665 goto __1 33666 __2: 33667 ; 33668 return 33669 33670 error_out: 33671 sqlite3.Xsqlite3_result_error(tls, context, 33672 ts+15915, -1) 33673 } 33674 33675 func test_register_func(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33676 bp := tls.Alloc(56) 33677 defer tls.Free(56) 33678 33679 var rc int32 33680 if argc != 3 { 33681 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33682 ts+15983, 0)) 33683 return TCL_ERROR 33684 } 33685 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 33686 return TCL_ERROR 33687 } 33688 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), -1, SQLITE_UTF8, uintptr(0), 33689 *(*uintptr)(unsafe.Pointer(&struct { 33690 f func(*libc.TLS, uintptr, int32, uintptr) 33691 }{testFunc})), uintptr(0), uintptr(0)) 33692 if rc != 0 { 33693 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 33694 return TCL_ERROR 33695 } 33696 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 33697 return TCL_ERROR 33698 } 33699 return TCL_OK 33700 } 33701 33702 func test_finalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33703 bp := tls.Alloc(40) 33704 defer tls.Free(40) 33705 33706 var rc int32 33707 var db uintptr = uintptr(0) 33708 33709 if objc != 2 { 33710 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33711 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33712 return TCL_ERROR 33713 } 33714 33715 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33716 return TCL_ERROR 33717 } 33718 33719 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 { 33720 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33721 } 33722 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33723 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33724 if db != 0 && sqlite3TestErrCode(tls, interp, db, rc) != 0 { 33725 return TCL_ERROR 33726 } 33727 return TCL_OK 33728 } 33729 33730 func test_stmt_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33731 bp := tls.Alloc(16) 33732 defer tls.Free(16) 33733 33734 var iValue int32 33735 var i int32 33736 *(*int32)(unsafe.Pointer(bp + 8)) = 0 33737 33738 var zOpName uintptr 33739 33740 if objc != 4 { 33741 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16009) 33742 return TCL_ERROR 33743 } 33744 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33745 return TCL_ERROR 33746 } 33747 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33748 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 33749 FzName uintptr 33750 Fop int32 33751 F__ccgo_pad1 [4]byte 33752 }{}))); i++ { 33753 if libc.Xstrcmp(tls, aOp[i].FzName, zOpName) == 0 { 33754 *(*int32)(unsafe.Pointer(bp + 8)) = aOp[i].Fop 33755 break 33756 } 33757 } 33758 if i >= int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 33759 FzName uintptr 33760 Fop int32 33761 F__ccgo_pad1 [4]byte 33762 }{}))) { 33763 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33764 return TCL_ERROR 33765 } 33766 } 33767 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 33768 return TCL_ERROR 33769 } 33770 iValue = sqlite3.Xsqlite3_stmt_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 33771 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iValue)) 33772 return TCL_OK 33773 } 33774 33775 var aOp = [7]struct { 33776 FzName uintptr 33777 Fop int32 33778 F__ccgo_pad1 [4]byte 33779 }{ 33780 {FzName: ts + 16034, Fop: SQLITE_STMTSTATUS_FULLSCAN_STEP}, 33781 {FzName: ts + 16066, Fop: SQLITE_STMTSTATUS_SORT}, 33782 {FzName: ts + 16089, Fop: SQLITE_STMTSTATUS_AUTOINDEX}, 33783 {FzName: ts + 16117, Fop: SQLITE_STMTSTATUS_VM_STEP}, 33784 {FzName: ts + 16143, Fop: SQLITE_STMTSTATUS_REPREPARE}, 33785 {FzName: ts + 16171, Fop: SQLITE_STMTSTATUS_RUN}, 33786 {FzName: ts + 16193, Fop: SQLITE_STMTSTATUS_MEMUSED}, 33787 } 33788 33789 func test_config_sorterref(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33790 bp := tls.Alloc(12) 33791 defer tls.Free(12) 33792 33793 if objc != 2 { 33794 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 33795 return TCL_ERROR 33796 } 33797 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 33798 return TCL_ERROR 33799 } 33800 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_SORTERREF_SIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 33801 return TCL_OK 33802 } 33803 33804 func vfsCurrentTimeInt64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33805 bp := tls.Alloc(8) 33806 defer tls.Free(8) 33807 33808 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 33809 if objc != 1 { 33810 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 33811 return TCL_ERROR 33812 } 33813 (*struct { 33814 f func(*libc.TLS, uintptr, uintptr) int32 33815 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTimeInt64})).f(tls, pVfs, bp) 33816 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*i64)(unsafe.Pointer(bp)))) 33817 return TCL_OK 33818 } 33819 33820 func test_snapshot_get(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33821 bp := tls.Alloc(116) 33822 defer tls.Free(116) 33823 33824 var rc int32 33825 33826 var zName uintptr 33827 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 33828 33829 if objc != 3 { 33830 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33831 return TCL_ERROR 33832 } 33833 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33834 return TCL_ERROR 33835 } 33836 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33837 33838 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 33839 if rc != SQLITE_OK { 33840 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33841 return TCL_ERROR 33842 } else { 33843 if sqlite3TestMakePointerStr(tls, interp, bp+16, *(*uintptr)(unsafe.Pointer(bp + 8))) != 0 { 33844 return TCL_ERROR 33845 } 33846 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 33847 } 33848 return TCL_OK 33849 } 33850 33851 func test_snapshot_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33852 bp := tls.Alloc(8) 33853 defer tls.Free(8) 33854 33855 var rc int32 33856 33857 var zName uintptr 33858 33859 if objc != 3 { 33860 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33861 return TCL_ERROR 33862 } 33863 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33864 return TCL_ERROR 33865 } 33866 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33867 33868 rc = sqlite3.Xsqlite3_snapshot_recover(tls, *(*uintptr)(unsafe.Pointer(bp)), zName) 33869 if rc != SQLITE_OK { 33870 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33871 return TCL_ERROR 33872 } else { 33873 tcl.XTcl_ResetResult(tls, interp) 33874 } 33875 return TCL_OK 33876 } 33877 33878 func test_snapshot_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33879 bp := tls.Alloc(8) 33880 defer tls.Free(8) 33881 33882 var rc int32 33883 33884 var zName uintptr 33885 var pSnapshot uintptr 33886 33887 if objc != 4 { 33888 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 33889 return TCL_ERROR 33890 } 33891 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33892 return TCL_ERROR 33893 } 33894 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33895 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)))) 33896 33897 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, pSnapshot) 33898 if rc != SQLITE_OK { 33899 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33900 return TCL_ERROR 33901 } else { 33902 tcl.XTcl_ResetResult(tls, interp) 33903 } 33904 return TCL_OK 33905 } 33906 33907 func test_snapshot_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33908 var pSnapshot uintptr 33909 if objc != 2 { 33910 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16254) 33911 return TCL_ERROR 33912 } 33913 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 33914 sqlite3.Xsqlite3_snapshot_free(tls, pSnapshot) 33915 return TCL_OK 33916 } 33917 33918 func test_snapshot_cmp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33919 var res int32 33920 var p1 uintptr 33921 var p2 uintptr 33922 if objc != 3 { 33923 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 33924 return TCL_ERROR 33925 } 33926 p1 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 33927 p2 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 33928 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 33929 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 33930 return TCL_OK 33931 } 33932 33933 func test_snapshot_get_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33934 bp := tls.Alloc(16) 33935 defer tls.Free(16) 33936 33937 var rc int32 33938 33939 var zName uintptr 33940 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 33941 33942 if objc != 3 { 33943 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33944 return TCL_ERROR 33945 } 33946 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33947 return TCL_ERROR 33948 } 33949 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33950 33951 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 33952 if rc != SQLITE_OK { 33953 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33954 return TCL_ERROR 33955 } else { 33956 tcl.XTcl_SetObjResult(tls, interp, 33957 tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), int32(unsafe.Sizeof(sqlite3_snapshot{})))) 33958 sqlite3.Xsqlite3_snapshot_free(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 33959 } 33960 return TCL_OK 33961 } 33962 33963 func test_snapshot_open_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33964 bp := tls.Alloc(28) 33965 defer tls.Free(28) 33966 33967 var rc int32 33968 33969 var zName uintptr 33970 var pBlob uintptr 33971 33972 if objc != 4 { 33973 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 33974 return TCL_ERROR 33975 } 33976 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33977 return TCL_ERROR 33978 } 33979 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33980 pBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) 33981 if uint64(*(*int32)(unsafe.Pointer(bp + 24))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) { 33982 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 33983 return TCL_ERROR 33984 } 33985 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zName, pBlob) 33986 if rc != SQLITE_OK { 33987 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33988 return TCL_ERROR 33989 } 33990 return TCL_OK 33991 } 33992 33993 func test_snapshot_cmp_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33994 bp := tls.Alloc(24) 33995 defer tls.Free(24) 33996 33997 var res int32 33998 var p1 uintptr 33999 var p2 uintptr 34000 34001 if objc != 3 { 34002 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 34003 return TCL_ERROR 34004 } 34005 34006 p1 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 34007 p2 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) 34008 34009 if uint64(*(*int32)(unsafe.Pointer(bp + 16))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) || *(*int32)(unsafe.Pointer(bp + 16)) != *(*int32)(unsafe.Pointer(bp + 20)) { 34010 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 34011 return TCL_ERROR 34012 } 34013 34014 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 34015 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 34016 return TCL_OK 34017 } 34018 34019 func test_delete_database(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34020 var rc int32 34021 var zFile uintptr 34022 if objc != 2 { 34023 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16296) 34024 return TCL_ERROR 34025 } 34026 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34027 rc = sqlite3_delete_database(tls, zFile) 34028 34029 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34030 return TCL_OK 34031 } 34032 34033 func test_atomic_batch_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34034 bp := tls.Alloc(32) 34035 defer tls.Free(32) 34036 34037 var zFile uintptr = uintptr(0) 34038 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 34039 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 34040 var bRes int32 = 0 34041 var dc int32 = 0 34042 var rc int32 34043 34044 if objc != 2 { 34045 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16301) 34046 return TCL_ERROR 34047 } 34048 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34049 34050 rc = sqlite3.Xsqlite3_open(tls, zFile, bp+16) 34051 if rc != SQLITE_OK { 34052 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 34053 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 34054 return TCL_ERROR 34055 } 34056 34057 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 34058 dc = (*struct { 34059 f func(*libc.TLS, uintptr) int32 34060 })(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))) 34061 if dc&SQLITE_IOCAP_BATCH_ATOMIC != 0 { 34062 bRes = 1 34063 } 34064 34065 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bRes)) 34066 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 34067 return TCL_OK 34068 } 34069 34070 func test_next_stmt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34071 bp := tls.Alloc(114) 34072 defer tls.Free(114) 34073 34074 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 34075 34076 if objc != 3 { 34077 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34078 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16306, 0)) 34079 return TCL_ERROR 34080 } 34081 34082 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 34083 return TCL_ERROR 34084 } 34085 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+56) != 0 { 34086 return TCL_ERROR 34087 } 34088 *(*uintptr)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_next_stmt(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56))) 34089 if *(*uintptr)(unsafe.Pointer(bp + 56)) != 0 { 34090 if sqlite3TestMakePointerStr(tls, interp, bp+64, *(*uintptr)(unsafe.Pointer(bp + 56))) != 0 { 34091 return TCL_ERROR 34092 } 34093 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+64, 0)) 34094 } 34095 return TCL_OK 34096 } 34097 34098 func test_stmt_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34099 bp := tls.Alloc(40) 34100 defer tls.Free(40) 34101 34102 var rc int32 34103 34104 if objc != 2 { 34105 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34106 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34107 return TCL_ERROR 34108 } 34109 34110 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34111 return TCL_ERROR 34112 } 34113 rc = sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34114 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 34115 return TCL_OK 34116 } 34117 34118 func test_stmt_isexplain(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34119 bp := tls.Alloc(40) 34120 defer tls.Free(40) 34121 34122 var rc int32 34123 34124 if objc != 2 { 34125 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34126 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34127 return TCL_ERROR 34128 } 34129 34130 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34131 return TCL_ERROR 34132 } 34133 rc = sqlite3.Xsqlite3_stmt_isexplain(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34134 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 34135 return TCL_OK 34136 } 34137 34138 func test_stmt_busy(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34139 bp := tls.Alloc(40) 34140 defer tls.Free(40) 34141 34142 var rc int32 34143 34144 if objc != 2 { 34145 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34146 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34147 return TCL_ERROR 34148 } 34149 34150 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34151 return TCL_ERROR 34152 } 34153 rc = sqlite3.Xsqlite3_stmt_busy(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34154 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 34155 return TCL_OK 34156 } 34157 34158 func uses_stmt_journal(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34159 bp := tls.Alloc(40) 34160 defer tls.Free(40) 34161 34162 if objc != 2 { 34163 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34164 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34165 return TCL_ERROR 34166 } 34167 34168 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34169 return TCL_ERROR 34170 } 34171 sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34172 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)) + 200))&0x20>>5) != 0))) 34173 return TCL_OK 34174 } 34175 34176 func test_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34177 bp := tls.Alloc(40) 34178 defer tls.Free(40) 34179 34180 var rc int32 34181 34182 if objc != 2 { 34183 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34184 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34185 return TCL_ERROR 34186 } 34187 34188 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34189 return TCL_ERROR 34190 } 34191 34192 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34193 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 && sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34194 return TCL_ERROR 34195 } 34196 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 34197 34198 return TCL_OK 34199 } 34200 34201 func test_expired(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34202 bp := tls.Alloc(40) 34203 defer tls.Free(40) 34204 34205 if objc != 2 { 34206 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34207 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34208 return TCL_ERROR 34209 } 34210 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34211 return TCL_ERROR 34212 } 34213 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(sqlite3.Xsqlite3_expired(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) != 0))) 34214 return TCL_OK 34215 } 34216 34217 func test_transfer_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34218 bp := tls.Alloc(48) 34219 defer tls.Free(48) 34220 34221 if objc != 3 { 34222 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34223 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16321, 0)) 34224 return TCL_ERROR 34225 } 34226 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34227 return TCL_ERROR 34228 } 34229 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+40) != 0 { 34230 return TCL_ERROR 34231 } 34232 tcl.XTcl_SetObjResult(tls, interp, 34233 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_transfer_bindings(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))))) 34234 return TCL_OK 34235 } 34236 34237 func test_changes(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34238 bp := tls.Alloc(40) 34239 defer tls.Free(40) 34240 34241 if objc != 2 { 34242 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34243 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 34244 return TCL_ERROR 34245 } 34246 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34247 return TCL_ERROR 34248 } 34249 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_changes(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 34250 return TCL_OK 34251 } 34252 34253 var sqlite_static_bind_value uintptr = uintptr(0) 34254 var sqlite_static_bind_nbyte int32 = 0 34255 34256 func test_bind(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34257 bp := tls.Alloc(142) 34258 defer tls.Free(142) 34259 34260 var rc int32 34261 34262 if argc != 5 { 34263 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34264 ts+16340, 0)) 34265 return TCL_ERROR 34266 } 34267 if getStmtPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 34268 return TCL_ERROR 34269 } 34270 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+88) != 0 { 34271 return TCL_ERROR 34272 } 34273 if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+7939) == 0 { 34274 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88))) 34275 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16376) == 0 { 34276 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, -1, uintptr(0)) 34277 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16383) == 0 { 34278 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, 34279 sqlite_static_bind_nbyte, uintptr(0)) 34280 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16397) == 0 { 34281 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)) 34282 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16404) == 0 { 34283 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), ts+16411, 10, uintptr(0)) 34284 } else { 34285 tcl.XTcl_AppendResult(tls, interp, 34286 libc.VaList(bp+32, ts+16422, 0)) 34287 return TCL_ERROR 34288 } 34289 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), rc) != 0 { 34290 return TCL_ERROR 34291 } 34292 if rc != 0 { 34293 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+92, ts+16476, libc.VaList(bp+48, rc)) 34294 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 34295 return TCL_ERROR 34296 } 34297 return TCL_OK 34298 } 34299 34300 var pTestCollateInterp uintptr 34301 34302 func test_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 34303 bp := tls.Alloc(4) 34304 defer tls.Free(4) 34305 34306 var i uintptr = pTestCollateInterp 34307 var encin int32 = int32(pCtx) 34308 34309 var n int32 34310 var pVal uintptr 34311 var pX uintptr 34312 34313 pX = tcl.XTcl_NewStringObj(tls, ts+16482, -1) 34314 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34315 34316 switch encin { 34317 case SQLITE_UTF8: 34318 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34319 break 34320 case SQLITE_UTF16LE: 34321 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34322 break 34323 case SQLITE_UTF16BE: 34324 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34325 break 34326 default: 34327 } 34328 34329 sqlite3.Xsqlite3BeginBenignMalloc(tls) 34330 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34331 if pVal != 0 { 34332 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nA, zA, uint8(encin), uintptr(0)) 34333 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 34334 tcl.XTcl_ListObjAppendElement(tls, i, pX, 34335 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 34336 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nB, zB, uint8(encin), uintptr(0)) 34337 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 34338 tcl.XTcl_ListObjAppendElement(tls, i, pX, 34339 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 34340 sqlite3.Xsqlite3ValueFree(tls, pVal) 34341 } 34342 sqlite3.Xsqlite3EndBenignMalloc(tls) 34343 34344 tcl.XTcl_EvalObjEx(tls, i, pX, 0) 34345 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34346 var _objPtr uintptr = pX 34347 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34348 tcl.XTclFreeObj(tls, _objPtr) 34349 } 34350 } 34351 tcl.XTcl_GetIntFromObj(tls, i, tcl.XTcl_GetObjResult(tls, i), bp) 34352 return *(*int32)(unsafe.Pointer(bp)) 34353 } 34354 34355 func test_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34356 bp := tls.Alloc(60) 34357 defer tls.Free(60) 34358 34359 var pVal uintptr 34360 var rc int32 34361 var zUtf16 uintptr 34362 34363 if !(objc != 5) { 34364 goto __1 34365 } 34366 goto bad_args 34367 __1: 34368 ; 34369 pTestCollateInterp = interp 34370 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 34371 goto __2 34372 } 34373 return TCL_ERROR 34374 __2: 34375 ; 34376 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56)) { 34377 goto __3 34378 } 34379 return TCL_ERROR 34380 __3: 34381 ; 34382 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF8, 34383 uintptr(SQLITE_UTF8), func() uintptr { 34384 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 34385 return *(*uintptr)(unsafe.Pointer(&struct { 34386 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34387 }{test_collate_func})) 34388 } 34389 return uintptr(0) 34390 }()) 34391 if !(rc == SQLITE_OK) { 34392 goto __4 34393 } 34394 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+56)) { 34395 goto __5 34396 } 34397 return TCL_ERROR 34398 __5: 34399 ; 34400 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF16LE, 34401 uintptr(SQLITE_UTF16LE), func() uintptr { 34402 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 34403 return *(*uintptr)(unsafe.Pointer(&struct { 34404 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34405 }{test_collate_func})) 34406 } 34407 return uintptr(0) 34408 }()) 34409 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+56)) { 34410 goto __6 34411 } 34412 return TCL_ERROR 34413 __6: 34414 ; 34415 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 34416 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 34417 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+16482, uint8(SQLITE_UTF8), uintptr(0)) 34418 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 34419 if !((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FmallocFailed != 0) { 34420 goto __7 34421 } 34422 rc = SQLITE_NOMEM 34423 goto __8 34424 __7: 34425 rc = sqlite3.Xsqlite3_create_collation16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zUtf16, SQLITE_UTF16BE, 34426 uintptr(SQLITE_UTF16BE), func() uintptr { 34427 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 34428 return *(*uintptr)(unsafe.Pointer(&struct { 34429 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34430 }{test_collate_func})) 34431 } 34432 return uintptr(0) 34433 }()) 34434 __8: 34435 ; 34436 sqlite3.Xsqlite3ValueFree(tls, pVal) 34437 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 34438 __4: 34439 ; 34440 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0) { 34441 goto __9 34442 } 34443 return TCL_ERROR 34444 __9: 34445 ; 34446 if !(rc != SQLITE_OK) { 34447 goto __10 34448 } 34449 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34450 return TCL_ERROR 34451 __10: 34452 ; 34453 return TCL_OK 34454 34455 bad_args: 34456 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+14949, 34457 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 34458 return TCL_ERROR 34459 } 34460 34461 func test_utf16bin_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 34462 var nCmp int32 = func() int32 { 34463 if nA > nB { 34464 return nB 34465 } 34466 return nA 34467 }() 34468 var res int32 = libc.Xmemcmp(tls, zA, zB, uint64(nCmp)) 34469 if res == 0 { 34470 res = nA - nB 34471 } 34472 return res 34473 } 34474 34475 func test_utf16bin_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34476 bp := tls.Alloc(8) 34477 defer tls.Free(8) 34478 34479 var rc int32 34480 34481 if !(objc != 2) { 34482 goto __1 34483 } 34484 goto bad_args 34485 __1: 34486 ; 34487 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 34488 goto __2 34489 } 34490 return TCL_ERROR 34491 __2: 34492 ; 34493 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16552, SQLITE_UTF16, uintptr(0), 34494 *(*uintptr)(unsafe.Pointer(&struct { 34495 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34496 }{test_utf16bin_collate_func}))) 34497 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 34498 goto __3 34499 } 34500 return TCL_ERROR 34501 __3: 34502 ; 34503 return TCL_OK 34504 34505 bad_args: 34506 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 34507 return TCL_ERROR 34508 } 34509 34510 var zNeededCollation [200]int8 34511 var pzNeededCollation uintptr = 0 34512 34513 func test_collate_needed_cb(tls *libc.TLS, pCtx uintptr, db uintptr, eTextRep int32, pName uintptr) { 34514 var enc int32 = int32((*sqlite31)(unsafe.Pointer(db)).Fenc) 34515 var i int32 34516 var z uintptr 34517 z = pName 34518 i = 0 34519 for ; *(*int8)(unsafe.Pointer(z)) != 0 || *(*int8)(unsafe.Pointer(z + 1)) != 0; z++ { 34520 if *(*int8)(unsafe.Pointer(z)) != 0 { 34521 zNeededCollation[libc.PostIncInt32(&i, 1)] = *(*int8)(unsafe.Pointer(z)) 34522 } 34523 } 34524 zNeededCollation[i] = int8(0) 34525 sqlite3.Xsqlite3_create_collation(tls, 34526 db, ts+16482, int32((*sqlite31)(unsafe.Pointer(db)).Fenc), uintptr(intptr_t(enc)), *(*uintptr)(unsafe.Pointer(&struct { 34527 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34528 }{test_collate_func}))) 34529 } 34530 34531 func test_collate_needed(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34532 bp := tls.Alloc(8) 34533 defer tls.Free(8) 34534 34535 var rc int32 34536 34537 if !(objc != 2) { 34538 goto __1 34539 } 34540 goto bad_args 34541 __1: 34542 ; 34543 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 34544 goto __2 34545 } 34546 return TCL_ERROR 34547 __2: 34548 ; 34549 rc = sqlite3.Xsqlite3_collation_needed16(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34550 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 34551 }{test_collate_needed_cb}))) 34552 zNeededCollation[0] = int8(0) 34553 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 34554 goto __3 34555 } 34556 return TCL_ERROR 34557 __3: 34558 ; 34559 return TCL_OK 34560 34561 bad_args: 34562 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 34563 return TCL_ERROR 34564 } 34565 34566 var unaligned_string_counter int32 = 0 34567 34568 func alignmentCollFunc(tls *libc.TLS, NotUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 34569 var rc int32 34570 var n int32 34571 if nKey1 < nKey2 { 34572 n = nKey1 34573 } else { 34574 n = nKey2 34575 } 34576 if nKey1 > 0 && 1 == 1&int32(pKey1) { 34577 unaligned_string_counter++ 34578 } 34579 if nKey2 > 0 && 1 == 1&int32(pKey2) { 34580 unaligned_string_counter++ 34581 } 34582 rc = libc.Xmemcmp(tls, pKey1, pKey2, uint64(n)) 34583 if rc == 0 { 34584 rc = nKey1 - nKey2 34585 } 34586 return rc 34587 } 34588 34589 func add_alignment_test_collations(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34590 bp := tls.Alloc(8) 34591 defer tls.Free(8) 34592 34593 if objc >= 2 { 34594 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34595 return TCL_ERROR 34596 } 34597 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16561, SQLITE_UTF16, 34598 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34599 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34600 }{alignmentCollFunc}))) 34601 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16577, SQLITE_UTF16_ALIGNED, 34602 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34603 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34604 }{alignmentCollFunc}))) 34605 } 34606 return SQLITE_OK 34607 } 34608 34609 func test_function_utf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34610 var interp uintptr 34611 var pX uintptr 34612 var pVal uintptr 34613 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34614 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34615 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34616 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34617 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34618 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34619 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34620 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34621 var _objPtr uintptr = pX 34622 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34623 tcl.XTclFreeObj(tls, _objPtr) 34624 } 34625 } 34626 sqlite3.Xsqlite3_result_text(tls, pCtx, tcl.XTcl_GetStringResult(tls, interp), -1, libc.UintptrFromInt32(-1)) 34627 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34628 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34629 uint8(SQLITE_UTF8), uintptr(0)) 34630 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16be(tls, pVal), 34631 -1, libc.UintptrFromInt32(-1)) 34632 sqlite3.Xsqlite3ValueFree(tls, pVal) 34633 } 34634 34635 func test_function_utf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34636 var interp uintptr 34637 var pX uintptr 34638 var pVal uintptr 34639 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34640 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34641 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34642 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34643 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34644 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34645 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34646 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34647 var _objPtr uintptr = pX 34648 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34649 tcl.XTclFreeObj(tls, _objPtr) 34650 } 34651 } 34652 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34653 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34654 uint8(SQLITE_UTF8), uintptr(0)) 34655 sqlite3.Xsqlite3_result_text(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, pVal), -1, libc.UintptrFromInt32(-1)) 34656 sqlite3.Xsqlite3ValueFree(tls, pVal) 34657 } 34658 34659 func test_function_utf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34660 var interp uintptr 34661 var pX uintptr 34662 var pVal uintptr 34663 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34664 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34665 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34666 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34667 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34668 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34669 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34670 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34671 var _objPtr uintptr = pX 34672 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34673 tcl.XTclFreeObj(tls, _objPtr) 34674 } 34675 } 34676 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34677 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34678 uint8(SQLITE_UTF8), uintptr(0)) 34679 sqlite3.Xsqlite3_result_text16(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34680 -1, libc.UintptrFromInt32(-1)) 34681 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34682 -1, libc.UintptrFromInt32(-1)) 34683 sqlite3.Xsqlite3_result_text16le(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34684 -1, libc.UintptrFromInt32(-1)) 34685 sqlite3.Xsqlite3ValueFree(tls, pVal) 34686 } 34687 34688 func test_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34689 bp := tls.Alloc(44) 34690 defer tls.Free(44) 34691 34692 if !(objc != 5) { 34693 goto __1 34694 } 34695 goto bad_args 34696 __1: 34697 ; 34698 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0) { 34699 goto __2 34700 } 34701 return TCL_ERROR 34702 __2: 34703 ; 34704 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40)) { 34705 goto __3 34706 } 34707 return TCL_ERROR 34708 __3: 34709 ; 34710 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34711 goto __4 34712 } 34713 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF8, 34714 interp, *(*uintptr)(unsafe.Pointer(&struct { 34715 f func(*libc.TLS, uintptr, int32, uintptr) 34716 }{test_function_utf8})), uintptr(0), uintptr(0)) 34717 __4: 34718 ; 34719 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+40)) { 34720 goto __5 34721 } 34722 return TCL_ERROR 34723 __5: 34724 ; 34725 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34726 goto __6 34727 } 34728 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16LE, 34729 interp, *(*uintptr)(unsafe.Pointer(&struct { 34730 f func(*libc.TLS, uintptr, int32, uintptr) 34731 }{test_function_utf16le})), uintptr(0), uintptr(0)) 34732 __6: 34733 ; 34734 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40)) { 34735 goto __7 34736 } 34737 return TCL_ERROR 34738 __7: 34739 ; 34740 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34741 goto __8 34742 } 34743 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16BE, 34744 interp, *(*uintptr)(unsafe.Pointer(&struct { 34745 f func(*libc.TLS, uintptr, int32, uintptr) 34746 }{test_function_utf16be})), uintptr(0), uintptr(0)) 34747 __8: 34748 ; 34749 return TCL_OK 34750 bad_args: 34751 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34752 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 34753 return TCL_ERROR 34754 } 34755 34756 func test_errstr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34757 var zCode uintptr 34758 var i int32 34759 if objc != 1 { 34760 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16605) 34761 } 34762 34763 zCode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34764 for i = 0; i < 200; i++ { 34765 if 0 == libc.Xstrcmp(tls, sqlite3.Xsqlite3ErrName(tls, i), zCode) { 34766 break 34767 } 34768 } 34769 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, i), uintptr(0)) 34770 return TCL_OK 34771 } 34772 34773 func test_breakpoint(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34774 return TCL_OK 34775 } 34776 34777 func test_bind_zeroblob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34778 bp := tls.Alloc(16) 34779 defer tls.Free(16) 34780 34781 var rc int32 34782 34783 if objc != 4 { 34784 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 34785 return TCL_ERROR 34786 } 34787 34788 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34789 return TCL_ERROR 34790 } 34791 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 34792 return TCL_ERROR 34793 } 34794 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 34795 return TCL_ERROR 34796 } 34797 34798 rc = sqlite3.Xsqlite3_bind_zeroblob(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 34799 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp))), rc) != 0 { 34800 return TCL_ERROR 34801 } 34802 if rc != SQLITE_OK { 34803 return TCL_ERROR 34804 } 34805 34806 return TCL_OK 34807 } 34808 34809 func test_bind_zeroblob64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34810 bp := tls.Alloc(40) 34811 defer tls.Free(40) 34812 34813 var rc int32 34814 34815 if objc != 4 { 34816 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 34817 return TCL_ERROR 34818 } 34819 34820 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 34821 return TCL_ERROR 34822 } 34823 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 34824 return TCL_ERROR 34825 } 34826 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+32) != 0 { 34827 return TCL_ERROR 34828 } 34829 34830 rc = sqlite3.Xsqlite3_bind_zeroblob64(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 24)), uint64(*(*Tcl_WideInt)(unsafe.Pointer(bp + 32)))) 34831 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), rc) != 0 { 34832 return TCL_ERROR 34833 } 34834 if rc != SQLITE_OK { 34835 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34836 return TCL_ERROR 34837 } 34838 34839 return TCL_OK 34840 } 34841 34842 func test_bind_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34843 bp := tls.Alloc(48) 34844 defer tls.Free(48) 34845 34846 var rc int32 34847 34848 if objc != 4 { 34849 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34850 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34851 return TCL_ERROR 34852 } 34853 34854 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34855 return TCL_ERROR 34856 } 34857 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34858 return TCL_ERROR 34859 } 34860 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 34861 return TCL_ERROR 34862 } 34863 34864 rc = sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*int32)(unsafe.Pointer(bp + 44))) 34865 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34866 return TCL_ERROR 34867 } 34868 if rc != SQLITE_OK { 34869 return TCL_ERROR 34870 } 34871 34872 return TCL_OK 34873 } 34874 34875 func test_intarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34876 var i int32 34877 34878 sqlite3.Xsqlite3_free(tls, p) 34879 p = uintptr(0) 34880 if objc > 1 { 34881 p = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(objc-1))) 34882 if p == uintptr(0) { 34883 return TCL_ERROR 34884 } 34885 for i = 0; i < objc-1; i++ { 34886 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p+uintptr(i)*4) != 0 { 34887 sqlite3.Xsqlite3_free(tls, p) 34888 p = uintptr(0) 34889 return TCL_ERROR 34890 } 34891 } 34892 } 34893 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p))) 34894 return TCL_OK 34895 } 34896 34897 var p uintptr = uintptr(0) 34898 34899 func test_int64array_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34900 bp := tls.Alloc(8) 34901 defer tls.Free(8) 34902 34903 var i int32 34904 34905 sqlite3.Xsqlite3_free(tls, p1) 34906 p1 = uintptr(0) 34907 if objc > 1 { 34908 p1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(objc-1))) 34909 if p1 == uintptr(0) { 34910 return TCL_ERROR 34911 } 34912 for i = 0; i < objc-1; i++ { 34913 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), bp) != 0 { 34914 sqlite3.Xsqlite3_free(tls, p1) 34915 p1 = uintptr(0) 34916 return TCL_ERROR 34917 } 34918 *(*sqlite3_int64)(unsafe.Pointer(p1 + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 34919 } 34920 } 34921 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p1))) 34922 return TCL_OK 34923 } 34924 34925 var p1 uintptr = uintptr(0) 34926 34927 func test_doublearray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34928 var i int32 34929 34930 sqlite3.Xsqlite3_free(tls, p2) 34931 p2 = uintptr(0) 34932 if objc > 1 { 34933 p2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(objc-1))) 34934 if p2 == uintptr(0) { 34935 return TCL_ERROR 34936 } 34937 for i = 0; i < objc-1; i++ { 34938 if tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p2+uintptr(i)*8) != 0 { 34939 sqlite3.Xsqlite3_free(tls, p2) 34940 p2 = uintptr(0) 34941 return TCL_ERROR 34942 } 34943 } 34944 } 34945 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p2))) 34946 return TCL_OK 34947 } 34948 34949 var p2 uintptr = uintptr(0) 34950 34951 func test_textarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34952 bp := tls.Alloc(8) 34953 defer tls.Free(8) 34954 34955 var i int32 34956 34957 for i = 0; i < n; i++ { 34958 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*8))) 34959 } 34960 sqlite3.Xsqlite3_free(tls, p3) 34961 p3 = uintptr(0) 34962 if objc > 1 { 34963 p3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(objc-1))) 34964 if p3 == uintptr(0) { 34965 return TCL_ERROR 34966 } 34967 for i = 0; i < objc-1; i++ { 34968 *(*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))))) 34969 } 34970 } 34971 n = objc - 1 34972 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p3))) 34973 return TCL_OK 34974 } 34975 34976 var n int32 = 0 34977 var p3 uintptr = uintptr(0) 34978 34979 func test_bind_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34980 bp := tls.Alloc(56) 34981 defer tls.Free(56) 34982 34983 var rc int32 34984 34985 if objc != 4 { 34986 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34987 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34988 return TCL_ERROR 34989 } 34990 34991 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34992 return TCL_ERROR 34993 } 34994 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34995 return TCL_ERROR 34996 } 34997 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 34998 return TCL_ERROR 34999 } 35000 35001 rc = sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 48))) 35002 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35003 return TCL_ERROR 35004 } 35005 if rc != SQLITE_OK { 35006 return TCL_ERROR 35007 } 35008 35009 return TCL_OK 35010 } 35011 35012 func test_bind_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35013 bp := tls.Alloc(64) 35014 defer tls.Free(64) 35015 35016 *(*float64)(unsafe.Pointer(bp + 48)) = float64(0) 35017 var rc int32 35018 var zVal uintptr 35019 var i int32 35020 35021 if objc != 4 { 35022 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35023 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35024 return TCL_ERROR 35025 } 35026 35027 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35028 return TCL_ERROR 35029 } 35030 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35031 return TCL_ERROR 35032 } 35033 35034 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35035 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 35036 FzName uintptr 35037 FiUpper uint32 35038 FiLower uint32 35039 }{})); i++ { 35040 if libc.Xstrcmp(tls, aSpecialFp[i].FzName, zVal) == 0 { 35041 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) = sqlite3_uint64(aSpecialFp[i].FiUpper) 35042 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) <<= 32 35043 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) |= sqlite3_uint64(aSpecialFp[i].FiLower) 35044 35045 libc.Xmemcpy(tls, bp+48, bp+56, uint64(8)) 35046 break 35047 } 35048 } 35049 if uint64(i) >= uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 35050 FzName uintptr 35051 FiUpper uint32 35052 FiLower uint32 35053 }{})) && tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 35054 return TCL_ERROR 35055 } 35056 rc = sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*float64)(unsafe.Pointer(bp + 48))) 35057 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35058 return TCL_ERROR 35059 } 35060 if rc != SQLITE_OK { 35061 return TCL_ERROR 35062 } 35063 35064 return TCL_OK 35065 } 35066 35067 var aSpecialFp = [10]struct { 35068 FzName uintptr 35069 FiUpper uint32 35070 FiLower uint32 35071 }{ 35072 {FzName: ts + 16643, FiUpper: uint32(0x7fffffff), FiLower: 0xffffffff}, 35073 {FzName: ts + 16647, FiUpper: uint32(0x7ff7ffff), FiLower: 0xffffffff}, 35074 {FzName: ts + 16652, FiUpper: 0xffffffff, FiLower: 0xffffffff}, 35075 {FzName: ts + 16657, FiUpper: 0xfff7ffff, FiLower: 0xffffffff}, 35076 {FzName: ts + 16663, FiUpper: uint32(0x7ff00000)}, 35077 {FzName: ts + 16668, FiUpper: 0xfff00000}, 35078 {FzName: ts + 16673, FiLower: uint32(0x00000001)}, 35079 {FzName: ts + 16681, FiUpper: 0x80000000, FiLower: uint32(0x00000001)}, 35080 {FzName: ts + 16690, FiUpper: uint32(0x7ff80000)}, 35081 {FzName: ts + 16695, FiUpper: 0xfff80000}, 35082 } 35083 35084 func test_bind_null(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35085 bp := tls.Alloc(44) 35086 defer tls.Free(44) 35087 35088 var rc int32 35089 35090 if objc != 3 { 35091 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35092 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16701, 0)) 35093 return TCL_ERROR 35094 } 35095 35096 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35097 return TCL_ERROR 35098 } 35099 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35100 return TCL_ERROR 35101 } 35102 35103 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 35104 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35105 return TCL_ERROR 35106 } 35107 if rc != SQLITE_OK { 35108 return TCL_ERROR 35109 } 35110 35111 return TCL_OK 35112 } 35113 35114 func test_bind_text(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35115 bp := tls.Alloc(84) 35116 defer tls.Free(84) 35117 35118 *(*int32)(unsafe.Pointer(bp + 76)) = 0 35119 35120 var value uintptr 35121 var rc int32 35122 var toFree uintptr = uintptr(0) 35123 35124 if objc != 5 { 35125 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35126 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 35127 return TCL_ERROR 35128 } 35129 35130 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 35131 return TCL_ERROR 35132 } 35133 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 35134 return TCL_ERROR 35135 } 35136 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 35137 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 35138 return TCL_ERROR 35139 } 35140 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 { 35141 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+1)) 35142 if toFree == uintptr(0) { 35143 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 35144 return TCL_ERROR 35145 } 35146 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 35147 *(*int8)(unsafe.Pointer(toFree + uintptr(*(*int32)(unsafe.Pointer(bp + 76))))) = int8(0) 35148 value = toFree 35149 } 35150 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)) 35151 libc.Xfree(tls, toFree) 35152 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35153 return TCL_ERROR 35154 } 35155 if rc != SQLITE_OK { 35156 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 35157 return TCL_ERROR 35158 } 35159 35160 return TCL_OK 35161 } 35162 35163 func test_bind_text16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35164 bp := tls.Alloc(84) 35165 defer tls.Free(84) 35166 35167 var value uintptr 35168 var toFree uintptr = uintptr(0) 35169 var rc int32 35170 *(*int32)(unsafe.Pointer(bp + 76)) = 0 35171 35172 var xDel uintptr = func() uintptr { 35173 if objc == 6 { 35174 return uintptr(0) 35175 } 35176 return libc.UintptrFromInt32(-1) 35177 }() 35178 var oStmt uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-4)*8)) 35179 var oN uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)) 35180 var oString uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)) 35181 var oBytes uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 35182 35183 if objc != 5 && objc != 6 { 35184 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35185 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 35186 return TCL_ERROR 35187 } 35188 35189 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, oStmt), bp+64) != 0 { 35190 return TCL_ERROR 35191 } 35192 if tcl.XTcl_GetIntFromObj(tls, interp, oN, bp+72) != 0 { 35193 return TCL_ERROR 35194 } 35195 value = tcl.XTcl_GetByteArrayFromObj(tls, oString, bp+76) 35196 if tcl.XTcl_GetIntFromObj(tls, interp, oBytes, bp+80) != 0 { 35197 return TCL_ERROR 35198 } 35199 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 && xDel == libc.UintptrFromInt32(-1) { 35200 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+3)) 35201 if toFree == uintptr(0) { 35202 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 35203 return TCL_ERROR 35204 } 35205 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 35206 libc.Xmemset(tls, toFree+uintptr(*(*int32)(unsafe.Pointer(bp + 76))), 0, uint64(3)) 35207 value = toFree 35208 } 35209 rc = sqlite3.Xsqlite3_bind_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDel) 35210 libc.Xfree(tls, toFree) 35211 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35212 return TCL_ERROR 35213 } 35214 if rc != SQLITE_OK { 35215 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35216 return TCL_ERROR 35217 } 35218 35219 return TCL_OK 35220 } 35221 35222 func test_bind_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35223 bp := tls.Alloc(284) 35224 defer tls.Free(284) 35225 35226 var value uintptr 35227 var rc int32 35228 var xDestructor sqlite3_destructor_type = libc.UintptrFromInt32(-1) 35229 35230 if objc != 5 && objc != 6 { 35231 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35232 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16729, 0)) 35233 return TCL_ERROR 35234 } 35235 35236 if objc == 6 { 35237 xDestructor = uintptr(0) 35238 objv += 8 35239 } 35240 35241 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 35242 return TCL_ERROR 35243 } 35244 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 35245 return TCL_ERROR 35246 } 35247 35248 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 35249 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 35250 return TCL_ERROR 35251 } 35252 35253 if *(*int32)(unsafe.Pointer(bp + 80)) > *(*int32)(unsafe.Pointer(bp + 76)) { 35254 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+84, 35255 ts+16748, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 76)))) 35256 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+84, uintptr(0))) 35257 return TCL_ERROR 35258 } 35259 35260 rc = sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDestructor) 35261 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35262 return TCL_ERROR 35263 } 35264 if rc != SQLITE_OK { 35265 return TCL_ERROR 35266 } 35267 35268 return TCL_OK 35269 } 35270 35271 func test_bind_value_from_preupdate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35272 bp := tls.Alloc(48) 35273 defer tls.Free(48) 35274 35275 var z3 uintptr = uintptr(0) 35276 var db uintptr = uintptr(0) 35277 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 35278 35279 if objc != 5 { 35280 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16782) 35281 return TCL_ERROR 35282 } 35283 35284 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 35285 return TCL_ERROR 35286 } 35287 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+32) != 0 { 35288 return TCL_ERROR 35289 } 35290 z3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35291 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+36) != 0 { 35292 return TCL_ERROR 35293 } 35294 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 35295 35296 if int32(*(*int8)(unsafe.Pointer(z3))) == 'n' { 35297 sqlite3.Xsqlite3_preupdate_new(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 35298 } else if int32(*(*int8)(unsafe.Pointer(z3))) == 'o' { 35299 sqlite3.Xsqlite3_preupdate_old(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 35300 } else { 35301 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16801, z3, uintptr(0))) 35302 return TCL_ERROR 35303 } 35304 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))) 35305 35306 return TCL_OK 35307 } 35308 35309 func test_bind_value_from_select(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35310 bp := tls.Alloc(72) 35311 defer tls.Free(72) 35312 35313 var zSql uintptr = uintptr(0) 35314 var db uintptr = uintptr(0) 35315 var rc int32 = SQLITE_OK 35316 35317 if objc != 4 { 35318 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16828) 35319 return TCL_ERROR 35320 } 35321 35322 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35323 return TCL_ERROR 35324 } 35325 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) != 0 { 35326 return TCL_ERROR 35327 } 35328 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35329 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35330 35331 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 35332 if rc != SQLITE_OK { 35333 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16842, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 35334 return TCL_ERROR 35335 } 35336 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 35337 var pVal uintptr = sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 35338 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56)), pVal) 35339 } 35340 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 35341 if rc != SQLITE_OK { 35342 tcl.XTcl_AppendResult(tls, interp, 35343 libc.VaList(bp+24, ts+16857, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 35344 return TCL_ERROR 35345 } 35346 35347 return TCL_OK 35348 } 35349 35350 func test_carray_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35351 bp := tls.Alloc(112) 35352 defer tls.Free(112) 35353 35354 var eType int32 35355 var nData int32 35356 var aData uintptr 35357 var isTransient int32 35358 var isStatic int32 35359 35360 var i int32 35361 var j int32 35362 var rc int32 35363 var xDel uintptr 35364 var z uintptr 35365 35366 var a uintptr 35367 35368 var a1 uintptr 35369 35370 var a2 uintptr 35371 var v3 uintptr 35372 var a3 uintptr 35373 eType = 0 35374 nData = 0 35375 aData = uintptr(0) 35376 isTransient = 0 35377 isStatic = 0 35378 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 35379 35380 if !(aStaticData != 0) { 35381 goto __1 35382 } 35383 35384 if !(eStaticType == 3) { 35385 goto __2 35386 } 35387 i = 0 35388 __3: 35389 if !(i < nStaticData) { 35390 goto __5 35391 } 35392 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aStaticData + uintptr(i)*8))) 35393 goto __4 35394 __4: 35395 i++ 35396 goto __3 35397 goto __5 35398 __5: 35399 ; 35400 __2: 35401 ; 35402 sqlite3.Xsqlite3_free(tls, aStaticData) 35403 aStaticData = uintptr(0) 35404 nStaticData = 0 35405 eStaticType = 0 35406 __1: 35407 ; 35408 if !(objc == 1) { 35409 goto __6 35410 } 35411 return TCL_OK 35412 __6: 35413 ; 35414 i = 1 35415 __7: 35416 if !(i < objc && int32(*(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)))))) == '-') { 35417 goto __9 35418 } 35419 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 35420 if !(libc.Xstrcmp(tls, z, ts+16878) == 0) { 35421 goto __10 35422 } 35423 isTransient = 1 35424 xDel = libc.UintptrFromInt32(-1) 35425 goto __11 35426 __10: 35427 if !(libc.Xstrcmp(tls, z, ts+16889) == 0) { 35428 goto __12 35429 } 35430 isStatic = 1 35431 xDel = uintptr(0) 35432 goto __13 35433 __12: 35434 if !(libc.Xstrcmp(tls, z, ts+16897) == 0) { 35435 goto __14 35436 } 35437 eType = 0 35438 goto __15 35439 __14: 35440 if !(libc.Xstrcmp(tls, z, ts+16904) == 0) { 35441 goto __16 35442 } 35443 eType = 1 35444 goto __17 35445 __16: 35446 if !(libc.Xstrcmp(tls, z, ts+16911) == 0) { 35447 goto __18 35448 } 35449 eType = 2 35450 goto __19 35451 __18: 35452 if !(libc.Xstrcmp(tls, z, ts+16919) == 0) { 35453 goto __20 35454 } 35455 eType = 3 35456 goto __21 35457 __20: 35458 if !(libc.Xstrcmp(tls, z, ts+16925) == 0) { 35459 goto __22 35460 } 35461 goto __9 35462 goto __23 35463 __22: 35464 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+12444, z, uintptr(0))) 35465 return TCL_ERROR 35466 __23: 35467 ; 35468 __21: 35469 ; 35470 __19: 35471 ; 35472 __17: 35473 ; 35474 __15: 35475 ; 35476 __13: 35477 ; 35478 __11: 35479 ; 35480 goto __8 35481 __8: 35482 i++ 35483 goto __7 35484 goto __9 35485 __9: 35486 ; 35487 if !(eType == 3 && !(isStatic != 0) && !(isTransient != 0)) { 35488 goto __24 35489 } 35490 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+16928, 35491 uintptr(0))) 35492 return TCL_ERROR 35493 __24: 35494 ; 35495 if !(isStatic != 0 && isTransient != 0) { 35496 goto __25 35497 } 35498 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+16975, 35499 uintptr(0))) 35500 return TCL_ERROR 35501 __25: 35502 ; 35503 if !(objc-i < 2) { 35504 goto __26 35505 } 35506 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17013) 35507 return TCL_ERROR 35508 __26: 35509 ; 35510 if !(getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))), bp+80) != 0) { 35511 goto __27 35512 } 35513 return TCL_ERROR 35514 __27: 35515 ; 35516 i++ 35517 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0) { 35518 goto __28 35519 } 35520 return TCL_ERROR 35521 __28: 35522 ; 35523 i++ 35524 nData = objc - i 35525 switch eType + 4*libc.Bool32(nData <= 0) { 35526 case 0: 35527 goto __30 35528 case 1: 35529 goto __31 35530 case 2: 35531 goto __32 35532 case 3: 35533 goto __33 35534 case 4: 35535 goto __34 35536 } 35537 goto __29 35538 __30: 35539 a = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nData))) 35540 if !(a == uintptr(0)) { 35541 goto __35 35542 } 35543 rc = SQLITE_NOMEM 35544 goto carray_bind_done 35545 __35: 35546 ; 35547 j = 0 35548 __36: 35549 if !(j < nData) { 35550 goto __38 35551 } 35552 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+92) != 0) { 35553 goto __39 35554 } 35555 sqlite3.Xsqlite3_free(tls, a) 35556 return TCL_ERROR 35557 __39: 35558 ; 35559 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = *(*int32)(unsafe.Pointer(bp + 92)) 35560 goto __37 35561 __37: 35562 j++ 35563 goto __36 35564 goto __38 35565 __38: 35566 ; 35567 aData = a 35568 goto __29 35569 35570 __31: 35571 a1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(nData))) 35572 if !(a1 == uintptr(0)) { 35573 goto __40 35574 } 35575 rc = SQLITE_NOMEM 35576 goto carray_bind_done 35577 __40: 35578 ; 35579 j = 0 35580 __41: 35581 if !(j < nData) { 35582 goto __43 35583 } 35584 if !(tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+96) != 0) { 35585 goto __44 35586 } 35587 sqlite3.Xsqlite3_free(tls, a1) 35588 return TCL_ERROR 35589 __44: 35590 ; 35591 *(*sqlite3_int64)(unsafe.Pointer(a1 + uintptr(j)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) 35592 goto __42 35593 __42: 35594 j++ 35595 goto __41 35596 goto __43 35597 __43: 35598 ; 35599 aData = a1 35600 goto __29 35601 35602 __32: 35603 a2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(nData))) 35604 if !(a2 == uintptr(0)) { 35605 goto __45 35606 } 35607 rc = SQLITE_NOMEM 35608 goto carray_bind_done 35609 __45: 35610 ; 35611 j = 0 35612 __46: 35613 if !(j < nData) { 35614 goto __48 35615 } 35616 if !(tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+104) != 0) { 35617 goto __49 35618 } 35619 sqlite3.Xsqlite3_free(tls, a2) 35620 return TCL_ERROR 35621 __49: 35622 ; 35623 *(*float64)(unsafe.Pointer(a2 + uintptr(j)*8)) = *(*float64)(unsafe.Pointer(bp + 104)) 35624 goto __47 35625 __47: 35626 j++ 35627 goto __46 35628 goto __48 35629 __48: 35630 ; 35631 aData = a2 35632 goto __29 35633 35634 __33: 35635 a3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nData))) 35636 if !(a3 == uintptr(0)) { 35637 goto __50 35638 } 35639 rc = SQLITE_NOMEM 35640 goto carray_bind_done 35641 __50: 35642 ; 35643 j = 0 35644 __51: 35645 if !(j < nData) { 35646 goto __53 35647 } 35648 v3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8))) 35649 *(*uintptr)(unsafe.Pointer(a3 + uintptr(j)*8)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+56, v3)) 35650 goto __52 35651 __52: 35652 j++ 35653 goto __51 35654 goto __53 35655 __53: 35656 ; 35657 aData = a3 35658 goto __29 35659 35660 __34: 35661 aData = ts + 584 35662 xDel = uintptr(0) 35663 isTransient = 0 35664 isStatic = 0 35665 goto __29 35666 35667 __29: 35668 ; 35669 if !(isStatic != 0) { 35670 goto __54 35671 } 35672 aStaticData = aData 35673 nStaticData = nData 35674 eStaticType = eType 35675 __54: 35676 ; 35677 rc = sqlite3_carray_bind(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), aData, nData, eType, xDel) 35678 if !(isTransient != 0) { 35679 goto __55 35680 } 35681 if !(eType == 3) { 35682 goto __56 35683 } 35684 i = 0 35685 __57: 35686 if !(i < nData) { 35687 goto __59 35688 } 35689 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8))) 35690 goto __58 35691 __58: 35692 i++ 35693 goto __57 35694 goto __59 35695 __59: 35696 ; 35697 __56: 35698 ; 35699 sqlite3.Xsqlite3_free(tls, aData) 35700 __55: 35701 ; 35702 carray_bind_done: 35703 if !(rc != 0) { 35704 goto __60 35705 } 35706 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, sqlite3.Xsqlite3_errstr(tls, rc), uintptr(0))) 35707 return TCL_ERROR 35708 __60: 35709 ; 35710 return TCL_OK 35711 } 35712 35713 var aStaticData uintptr = uintptr(0) 35714 var nStaticData int32 = 0 35715 var eStaticType int32 = 0 35716 35717 func test_bind_parameter_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35718 bp := tls.Alloc(8) 35719 defer tls.Free(8) 35720 35721 if objc != 2 { 35722 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35723 return TCL_ERROR 35724 } 35725 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35726 return TCL_ERROR 35727 } 35728 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))))) 35729 return TCL_OK 35730 } 35731 35732 func test_bind_parameter_name(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35733 bp := tls.Alloc(12) 35734 defer tls.Free(12) 35735 35736 if objc != 3 { 35737 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17047) 35738 return TCL_ERROR 35739 } 35740 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35741 return TCL_ERROR 35742 } 35743 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 35744 return TCL_ERROR 35745 } 35746 tcl.XTcl_SetObjResult(tls, interp, 35747 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))), -1)) 35748 return TCL_OK 35749 } 35750 35751 func test_bind_parameter_index(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35752 bp := tls.Alloc(8) 35753 defer tls.Free(8) 35754 35755 if objc != 3 { 35756 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17054) 35757 return TCL_ERROR 35758 } 35759 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35760 return TCL_ERROR 35761 } 35762 tcl.XTcl_SetObjResult(tls, interp, 35763 tcl.XTcl_NewIntObj(tls, 35764 sqlite3.Xsqlite3_bind_parameter_index(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))))) 35765 return TCL_OK 35766 } 35767 35768 func test_clear_bindings(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35769 bp := tls.Alloc(8) 35770 defer tls.Free(8) 35771 35772 if objc != 2 { 35773 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35774 return TCL_ERROR 35775 } 35776 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35777 return TCL_ERROR 35778 } 35779 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_clear_bindings(tls, *(*uintptr)(unsafe.Pointer(bp))))) 35780 return TCL_OK 35781 } 35782 35783 func test_sleep(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35784 bp := tls.Alloc(4) 35785 defer tls.Free(4) 35786 35787 if objc != 2 { 35788 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+13117) 35789 return TCL_ERROR 35790 } 35791 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 35792 return TCL_ERROR 35793 } 35794 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_sleep(tls, *(*int32)(unsafe.Pointer(bp))))) 35795 return TCL_OK 35796 } 35797 35798 func test_ex_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35799 bp := tls.Alloc(56) 35800 defer tls.Free(56) 35801 35802 var rc int32 35803 35804 if objc != 2 { 35805 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35806 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35807 return TCL_ERROR 35808 } 35809 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35810 return TCL_ERROR 35811 } 35812 rc = sqlite3.Xsqlite3_extended_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35813 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35814 return TCL_OK 35815 } 35816 35817 func test_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35818 bp := tls.Alloc(56) 35819 defer tls.Free(56) 35820 35821 var rc int32 35822 35823 if objc != 2 { 35824 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35825 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35826 return TCL_ERROR 35827 } 35828 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35829 return TCL_ERROR 35830 } 35831 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35832 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35833 return TCL_OK 35834 } 35835 35836 func test_errmsg(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35837 bp := tls.Alloc(40) 35838 defer tls.Free(40) 35839 35840 var zErr uintptr 35841 35842 if objc != 2 { 35843 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35844 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35845 return TCL_ERROR 35846 } 35847 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35848 return TCL_ERROR 35849 } 35850 35851 zErr = sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35852 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErr, -1)) 35853 return TCL_OK 35854 } 35855 35856 func test_error_offset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35857 bp := tls.Alloc(40) 35858 defer tls.Free(40) 35859 35860 var iByteOffset int32 35861 35862 if objc != 2 { 35863 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35864 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35865 return TCL_ERROR 35866 } 35867 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35868 return TCL_ERROR 35869 } 35870 35871 iByteOffset = sqlite3.Xsqlite3_error_offset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35872 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iByteOffset)) 35873 return TCL_OK 35874 } 35875 35876 func test_errmsg16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35877 bp := tls.Alloc(40) 35878 defer tls.Free(40) 35879 35880 var zErr uintptr 35881 var z uintptr 35882 var bytes int32 = 0 35883 35884 if objc != 2 { 35885 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35886 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35887 return TCL_ERROR 35888 } 35889 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35890 return TCL_ERROR 35891 } 35892 35893 zErr = sqlite3.Xsqlite3_errmsg16(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35894 if zErr != 0 { 35895 z = zErr 35896 for bytes = 0; *(*int8)(unsafe.Pointer(z + uintptr(bytes))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(bytes+1))) != 0; bytes = bytes + 2 { 35897 } 35898 } 35899 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zErr, bytes)) 35900 return TCL_OK 35901 } 35902 35903 func test_prepare(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35904 bp := tls.Alloc(162) 35905 defer tls.Free(162) 35906 35907 var zSql uintptr 35908 35909 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 35910 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 35911 35912 var rc int32 35913 35914 if objc != 5 && objc != 4 { 35915 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35916 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 35917 return TCL_ERROR 35918 } 35919 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35920 return TCL_ERROR 35921 } 35922 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35923 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 35924 return TCL_ERROR 35925 } 35926 35927 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, func() uintptr { 35928 if objc >= 5 { 35929 return bp + 104 35930 } 35931 return uintptr(0) 35932 }()) 35933 tcl.XTcl_ResetResult(tls, interp) 35934 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35935 return TCL_ERROR 35936 } 35937 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 35938 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35939 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 35940 } 35941 if int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) < *(*int32)(unsafe.Pointer(bp + 88)) { 35942 *(*int32)(unsafe.Pointer(bp + 88)) = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) 35943 } 35944 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) 35945 } 35946 if rc != SQLITE_OK { 35947 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 35948 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35949 return TCL_ERROR 35950 } 35951 35952 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 35953 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 35954 return TCL_ERROR 35955 } 35956 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 35957 } 35958 return TCL_OK 35959 } 35960 35961 func test_prepare_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35962 bp := tls.Alloc(162) 35963 defer tls.Free(162) 35964 35965 var zSql uintptr 35966 var zCopy uintptr = uintptr(0) 35967 35968 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 35969 var pzTail uintptr 35970 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 35971 35972 var rc int32 35973 35974 if objc != 5 && objc != 4 { 35975 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35976 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 35977 return TCL_ERROR 35978 } 35979 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35980 return TCL_ERROR 35981 } 35982 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35983 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 35984 return TCL_ERROR 35985 } 35986 35987 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35988 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35989 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35990 } else { 35991 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 35992 zCopy = libc.Xmalloc(tls, uint64(n)) 35993 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 35994 } 35995 if objc >= 5 { 35996 pzTail = bp + 96 35997 } else { 35998 pzTail = uintptr(0) 35999 } 36000 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 88)), bp+104, pzTail) 36001 if objc >= 5 { 36002 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 36003 } 36004 libc.Xfree(tls, zCopy) 36005 36006 tcl.XTcl_ResetResult(tls, interp) 36007 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36008 return TCL_ERROR 36009 } 36010 if rc == SQLITE_OK && objc >= 5 && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 36011 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36012 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 36013 } 36014 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) 36015 } 36016 if rc != SQLITE_OK { 36017 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 36018 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36019 return TCL_ERROR 36020 } 36021 36022 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 36023 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 36024 return TCL_ERROR 36025 } 36026 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 36027 } 36028 return TCL_OK 36029 } 36030 36031 func test_prepare_v3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36032 bp := tls.Alloc(162) 36033 defer tls.Free(162) 36034 36035 var zSql uintptr 36036 var zCopy uintptr = uintptr(0) 36037 36038 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 36039 var pzTail uintptr 36040 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 36041 36042 var rc int32 36043 36044 if objc != 6 && objc != 5 { 36045 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36046 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17110, 0)) 36047 return TCL_ERROR 36048 } 36049 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36050 return TCL_ERROR 36051 } 36052 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36053 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 36054 return TCL_ERROR 36055 } 36056 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+92) != 0 { 36057 return TCL_ERROR 36058 } 36059 36060 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36061 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36062 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36063 } else { 36064 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 36065 zCopy = libc.Xmalloc(tls, uint64(n)) 36066 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 36067 } 36068 if objc >= 6 { 36069 pzTail = bp + 96 36070 } else { 36071 pzTail = uintptr(0) 36072 } 36073 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) 36074 libc.Xfree(tls, zCopy) 36075 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 36076 36077 tcl.XTcl_ResetResult(tls, interp) 36078 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36079 return TCL_ERROR 36080 } 36081 if rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 && objc >= 6 { 36082 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36083 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 36084 } 36085 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) 36086 } 36087 if rc != SQLITE_OK { 36088 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 36089 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36090 return TCL_ERROR 36091 } 36092 36093 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 36094 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 36095 return TCL_ERROR 36096 } 36097 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 36098 } 36099 return TCL_OK 36100 } 36101 36102 func test_prepare_tkt3134(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36103 bp := tls.Alloc(146) 36104 defer tls.Free(146) 36105 36106 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 36107 36108 var rc int32 36109 36110 if objc != 2 { 36111 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36112 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 36113 return TCL_ERROR 36114 } 36115 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36116 return TCL_ERROR 36117 } 36118 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), uintptr(unsafe.Pointer(&zSql))+1, 0, bp+88, uintptr(0)) 36119 36120 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36121 return TCL_ERROR 36122 } 36123 if rc != SQLITE_OK { 36124 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+96, ts+16476, libc.VaList(bp+32, rc)) 36125 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36126 return TCL_ERROR 36127 } 36128 36129 if *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 36130 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 88))) != 0 { 36131 return TCL_ERROR 36132 } 36133 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 36134 } 36135 return TCL_OK 36136 } 36137 36138 var zSql = *(*[10]int8)(unsafe.Pointer(ts + 17138)) 36139 36140 func test_prepare16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36141 bp := tls.Alloc(130) 36142 defer tls.Free(130) 36143 36144 var zSql uintptr 36145 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 36146 var pTail uintptr = uintptr(0) 36147 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 36148 36149 var rc int32 36150 36151 if objc != 5 && objc != 4 { 36152 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36153 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36154 return TCL_ERROR 36155 } 36156 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36157 return TCL_ERROR 36158 } 36159 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 36160 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 36161 return TCL_ERROR 36162 } 36163 36164 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 36165 if objc >= 5 { 36166 return bp + 72 36167 } 36168 return uintptr(0) 36169 }()) 36170 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36171 return TCL_ERROR 36172 } 36173 if rc != 0 { 36174 return TCL_ERROR 36175 } 36176 36177 if objc >= 5 { 36178 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 36179 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 36180 } else { 36181 *(*int32)(unsafe.Pointer(bp + 56)) = 0 36182 } 36183 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 36184 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 36185 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 36186 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36187 var _objPtr uintptr = pTail 36188 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36189 tcl.XTclFreeObj(tls, _objPtr) 36190 } 36191 } 36192 } 36193 36194 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 36195 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 36196 return TCL_ERROR 36197 } 36198 } 36199 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 36200 return TCL_OK 36201 } 36202 36203 func test_prepare16_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36204 bp := tls.Alloc(130) 36205 defer tls.Free(130) 36206 36207 var zSql uintptr 36208 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 36209 var pTail uintptr = uintptr(0) 36210 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 36211 36212 var rc int32 36213 36214 if objc != 5 && objc != 4 { 36215 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36216 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36217 return TCL_ERROR 36218 } 36219 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36220 return TCL_ERROR 36221 } 36222 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 36223 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 36224 return TCL_ERROR 36225 } 36226 36227 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 36228 if objc >= 5 { 36229 return bp + 72 36230 } 36231 return uintptr(0) 36232 }()) 36233 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36234 return TCL_ERROR 36235 } 36236 if rc != 0 { 36237 return TCL_ERROR 36238 } 36239 36240 if objc >= 5 { 36241 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 36242 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 36243 } else { 36244 *(*int32)(unsafe.Pointer(bp + 56)) = 0 36245 } 36246 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 36247 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 36248 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 36249 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36250 var _objPtr uintptr = pTail 36251 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36252 tcl.XTclFreeObj(tls, _objPtr) 36253 } 36254 } 36255 } 36256 36257 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 36258 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 36259 return TCL_ERROR 36260 } 36261 } 36262 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 36263 return TCL_OK 36264 } 36265 36266 func test_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36267 bp := tls.Alloc(156) 36268 defer tls.Free(156) 36269 36270 var zFilename uintptr 36271 36272 if objc != 3 && objc != 2 && objc != 1 { 36273 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36274 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 36275 return TCL_ERROR 36276 } 36277 36278 if objc > 1 { 36279 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36280 } else { 36281 zFilename = uintptr(0) 36282 } 36283 sqlite3.Xsqlite3_open(tls, zFilename, bp+48) 36284 36285 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 36286 return TCL_ERROR 36287 } 36288 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 36289 return TCL_OK 36290 } 36291 36292 func test_open_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36293 bp := tls.Alloc(484) 36294 defer tls.Free(484) 36295 36296 var zFilename uintptr 36297 var zVfs uintptr 36298 var flags int32 = 0 36299 36300 var rc int32 36301 36302 var i int32 36303 36304 if objc != 4 { 36305 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17171) 36306 return TCL_ERROR 36307 } 36308 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36309 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 36310 if int32(*(*int8)(unsafe.Pointer(zVfs))) == 0x00 { 36311 zVfs = uintptr(0) 36312 } 36313 36314 rc = tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16, bp+24) 36315 if rc != TCL_OK { 36316 return rc 36317 } 36318 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 16)); i++ { 36319 *(*[21]OpenFlag)(unsafe.Pointer(bp + 32)) = [21]OpenFlag{ 36320 {FzFlag: ts + 17190, Fflag: SQLITE_OPEN_READONLY}, 36321 {FzFlag: ts + 17211, Fflag: SQLITE_OPEN_READWRITE}, 36322 {FzFlag: ts + 17233, Fflag: SQLITE_OPEN_CREATE}, 36323 {FzFlag: ts + 17252, Fflag: SQLITE_OPEN_DELETEONCLOSE}, 36324 {FzFlag: ts + 17278, Fflag: SQLITE_OPEN_EXCLUSIVE}, 36325 {FzFlag: ts + 17300, Fflag: SQLITE_OPEN_AUTOPROXY}, 36326 {FzFlag: ts + 17322, Fflag: SQLITE_OPEN_MAIN_DB}, 36327 {FzFlag: ts + 17342, Fflag: SQLITE_OPEN_TEMP_DB}, 36328 {FzFlag: ts + 17362, Fflag: SQLITE_OPEN_TRANSIENT_DB}, 36329 {FzFlag: ts + 17387, Fflag: SQLITE_OPEN_MAIN_JOURNAL}, 36330 {FzFlag: ts + 17412, Fflag: SQLITE_OPEN_TEMP_JOURNAL}, 36331 {FzFlag: ts + 17437, Fflag: SQLITE_OPEN_SUBJOURNAL}, 36332 {FzFlag: ts + 17460, Fflag: SQLITE_OPEN_SUPER_JOURNAL}, 36333 {FzFlag: ts + 17486, Fflag: SQLITE_OPEN_NOMUTEX}, 36334 {FzFlag: ts + 17506, Fflag: SQLITE_OPEN_FULLMUTEX}, 36335 {FzFlag: ts + 17528, Fflag: SQLITE_OPEN_SHAREDCACHE}, 36336 {FzFlag: ts + 17552, Fflag: SQLITE_OPEN_PRIVATECACHE}, 36337 {FzFlag: ts + 17577, Fflag: SQLITE_OPEN_WAL}, 36338 {FzFlag: ts + 17593, Fflag: SQLITE_OPEN_URI}, 36339 {FzFlag: ts + 17609, Fflag: SQLITE_OPEN_EXRESCODE}, 36340 {}, 36341 } 36342 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)) + uintptr(i)*8)), bp+32, int32(unsafe.Sizeof(OpenFlag{})), 36343 ts+17631, 0, bp+368) 36344 if rc != TCL_OK { 36345 return rc 36346 } 36347 flags = flags | (*OpenFlag)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 368)))*16)).Fflag 36348 } 36349 36350 rc = sqlite3.Xsqlite3_open_v2(tls, zFilename, bp+376, flags, zVfs) 36351 if sqlite3TestMakePointerStr(tls, interp, bp+384, *(*uintptr)(unsafe.Pointer(bp + 376))) != 0 { 36352 return TCL_ERROR 36353 } 36354 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+384, 0)) 36355 return TCL_OK 36356 } 36357 36358 type OpenFlag = struct { 36359 FzFlag uintptr 36360 Fflag int32 36361 F__ccgo_pad1 [4]byte 36362 } 36363 36364 func test_open16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36365 bp := tls.Alloc(156) 36366 defer tls.Free(156) 36367 36368 var zFilename uintptr 36369 36370 if objc != 3 { 36371 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36372 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 36373 return TCL_ERROR 36374 } 36375 36376 zFilename = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 36377 sqlite3.Xsqlite3_open16(tls, zFilename, bp+48) 36378 36379 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 36380 return TCL_ERROR 36381 } 36382 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 36383 return TCL_OK 36384 } 36385 36386 func test_complete16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36387 var zBuf uintptr 36388 36389 if objc != 2 { 36390 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17636) 36391 return TCL_ERROR 36392 } 36393 36394 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 36395 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_complete16(tls, zBuf))) 36396 return TCL_OK 36397 } 36398 36399 func test_normalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36400 var zSql uintptr 36401 var zNorm uintptr 36402 36403 if objc != 2 { 36404 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9535) 36405 return TCL_ERROR 36406 } 36407 36408 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36409 zNorm = sqlite3_normalize(tls, zSql) 36410 if zNorm != 0 { 36411 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zNorm, -1)) 36412 sqlite3.Xsqlite3_free(tls, zNorm) 36413 } 36414 return TCL_OK 36415 } 36416 36417 func test_step(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36418 bp := tls.Alloc(40) 36419 defer tls.Free(40) 36420 36421 var rc int32 36422 36423 if objc != 2 { 36424 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36425 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+16315, 0)) 36426 return TCL_ERROR 36427 } 36428 36429 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36430 return TCL_ERROR 36431 } 36432 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36433 36434 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36435 return TCL_OK 36436 } 36437 36438 func test_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36439 bp := tls.Alloc(8) 36440 defer tls.Free(8) 36441 36442 if objc != 2 { 36443 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36444 return TCL_ERROR 36445 } 36446 36447 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36448 return TCL_ERROR 36449 } 36450 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 36451 return TCL_OK 36452 } 36453 36454 func test_ex_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36455 bp := tls.Alloc(8) 36456 defer tls.Free(8) 36457 36458 var z uintptr 36459 36460 if objc != 2 { 36461 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36462 return TCL_ERROR 36463 } 36464 36465 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36466 return TCL_ERROR 36467 } 36468 z = sqlite3.Xsqlite3_expanded_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 36469 tcl.XTcl_SetResult(tls, interp, z, uintptr(1)) 36470 sqlite3.Xsqlite3_free(tls, z) 36471 return TCL_OK 36472 } 36473 36474 func test_column_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36475 bp := tls.Alloc(40) 36476 defer tls.Free(40) 36477 36478 if objc != 2 { 36479 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36480 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36481 return TCL_ERROR 36482 } 36483 36484 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36485 return TCL_ERROR 36486 } 36487 36488 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36489 return TCL_OK 36490 } 36491 36492 func test_column_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36493 bp := tls.Alloc(44) 36494 defer tls.Free(44) 36495 36496 var tp int32 36497 36498 if objc != 3 { 36499 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36500 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36501 return TCL_ERROR 36502 } 36503 36504 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36505 return TCL_ERROR 36506 } 36507 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36508 return TCL_ERROR 36509 } 36510 36511 tp = sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36512 switch tp { 36513 case SQLITE_INTEGER: 36514 tcl.XTcl_SetResult(tls, interp, ts+2413, uintptr(0)) 36515 break 36516 case SQLITE_NULL: 36517 tcl.XTcl_SetResult(tls, interp, ts+5846, uintptr(0)) 36518 break 36519 case SQLITE_FLOAT: 36520 tcl.XTcl_SetResult(tls, interp, ts+17662, uintptr(0)) 36521 break 36522 case SQLITE_TEXT: 36523 tcl.XTcl_SetResult(tls, interp, ts+17668, uintptr(0)) 36524 break 36525 case SQLITE_BLOB: 36526 tcl.XTcl_SetResult(tls, interp, ts+17673, uintptr(0)) 36527 break 36528 default: 36529 } 36530 36531 return TCL_OK 36532 } 36533 36534 func test_column_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36535 bp := tls.Alloc(44) 36536 defer tls.Free(44) 36537 36538 var iVal i64 36539 36540 if objc != 3 { 36541 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36542 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36543 return TCL_ERROR 36544 } 36545 36546 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36547 return TCL_ERROR 36548 } 36549 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36550 return TCL_ERROR 36551 } 36552 36553 iVal = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36554 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iVal)) 36555 return TCL_OK 36556 } 36557 36558 func test_column_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36559 bp := tls.Alloc(44) 36560 defer tls.Free(44) 36561 36562 var len int32 36563 var pBlob uintptr 36564 36565 if objc != 3 { 36566 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36567 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36568 return TCL_ERROR 36569 } 36570 36571 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36572 return TCL_ERROR 36573 } 36574 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36575 return TCL_ERROR 36576 } 36577 36578 len = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36579 pBlob = sqlite3.Xsqlite3_column_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36580 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pBlob, len)) 36581 return TCL_OK 36582 } 36583 36584 func test_column_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36585 bp := tls.Alloc(44) 36586 defer tls.Free(44) 36587 36588 var rVal float64 36589 36590 if objc != 3 { 36591 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36592 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36593 return TCL_ERROR 36594 } 36595 36596 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36597 return TCL_ERROR 36598 } 36599 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36600 return TCL_ERROR 36601 } 36602 36603 rVal = sqlite3.Xsqlite3_column_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36604 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewDoubleObj(tls, rVal)) 36605 return TCL_OK 36606 } 36607 36608 func test_data_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36609 bp := tls.Alloc(40) 36610 defer tls.Free(40) 36611 36612 if objc != 2 { 36613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36614 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36615 return TCL_ERROR 36616 } 36617 36618 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36619 return TCL_ERROR 36620 } 36621 36622 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_data_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36623 return TCL_OK 36624 } 36625 36626 func test_stmt_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36627 bp := tls.Alloc(44) 36628 defer tls.Free(44) 36629 36630 var xFunc uintptr 36631 var zRet uintptr 36632 36633 xFunc = clientData 36634 if objc != 3 { 36635 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36636 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36637 return TCL_ERROR 36638 } 36639 36640 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36641 return TCL_ERROR 36642 } 36643 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36644 return TCL_ERROR 36645 } 36646 zRet = (*struct { 36647 f func(*libc.TLS, uintptr, int32) uintptr 36648 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36649 if zRet != 0 { 36650 tcl.XTcl_SetResult(tls, interp, zRet, uintptr(0)) 36651 } 36652 return TCL_OK 36653 } 36654 36655 func test_global_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36656 var rc int32 36657 if objc != 1 { 36658 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 36659 return TCL_ERROR 36660 } 36661 rc = sqlite3.Xsqlite3_global_recover(tls) 36662 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36663 return TCL_OK 36664 } 36665 36666 func test_stmt_utf16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36667 bp := tls.Alloc(44) 36668 defer tls.Free(44) 36669 36670 var pRet uintptr 36671 var zName16 uintptr 36672 var xFunc uintptr 36673 36674 xFunc = clientData 36675 if objc != 3 { 36676 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36677 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36678 return TCL_ERROR 36679 } 36680 36681 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36682 return TCL_ERROR 36683 } 36684 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36685 return TCL_ERROR 36686 } 36687 36688 zName16 = (*struct { 36689 f func(*libc.TLS, uintptr, int32) uintptr 36690 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36691 if zName16 != 0 { 36692 var n int32 36693 var z uintptr = zName16 36694 for n = 0; *(*int8)(unsafe.Pointer(z + uintptr(n))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(n+1))) != 0; n = n + 2 { 36695 } 36696 pRet = tcl.XTcl_NewByteArrayObj(tls, zName16, n+2) 36697 tcl.XTcl_SetObjResult(tls, interp, pRet) 36698 } 36699 36700 return TCL_OK 36701 } 36702 36703 func test_stmt_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36704 bp := tls.Alloc(44) 36705 defer tls.Free(44) 36706 36707 var xFunc uintptr 36708 36709 xFunc = clientData 36710 if objc != 3 { 36711 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36712 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36713 return TCL_ERROR 36714 } 36715 36716 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36717 return TCL_ERROR 36718 } 36719 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36720 return TCL_ERROR 36721 } 36722 36723 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*struct { 36724 f func(*libc.TLS, uintptr, int32) int32 36725 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))))) 36726 return TCL_OK 36727 } 36728 36729 func test_interrupt(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36730 bp := tls.Alloc(40) 36731 defer tls.Free(40) 36732 36733 if argc != 2 { 36734 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15001, 0)) 36735 return TCL_ERROR 36736 } 36737 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36738 return TCL_ERROR 36739 } 36740 sqlite3.Xsqlite3_interrupt(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36741 return TCL_OK 36742 } 36743 36744 func delete_function(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36745 bp := tls.Alloc(40) 36746 defer tls.Free(40) 36747 36748 var rc int32 36749 36750 if argc != 3 { 36751 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36752 ts+17678, 0)) 36753 return TCL_ERROR 36754 } 36755 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36756 return TCL_ERROR 36757 } 36758 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)) 36759 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36760 return TCL_OK 36761 } 36762 36763 func delete_collation(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36764 bp := tls.Alloc(40) 36765 defer tls.Free(40) 36766 36767 var rc int32 36768 36769 if argc != 3 { 36770 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36771 ts+17678, 0)) 36772 return TCL_ERROR 36773 } 36774 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36775 return TCL_ERROR 36776 } 36777 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), SQLITE_UTF8, uintptr(0), uintptr(0)) 36778 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36779 return TCL_OK 36780 } 36781 36782 func get_autocommit(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36783 bp := tls.Alloc(94) 36784 defer tls.Free(94) 36785 36786 if argc != 2 { 36787 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36788 ts+15001, 0)) 36789 return TCL_ERROR 36790 } 36791 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 36792 return TCL_ERROR 36793 } 36794 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))))) 36795 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 36796 return TCL_OK 36797 } 36798 36799 func test_busy_timeout(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36800 bp := tls.Alloc(60) 36801 defer tls.Free(60) 36802 36803 var rc int32 36804 36805 if argc != 3 { 36806 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36807 ts+15001, 0)) 36808 return TCL_ERROR 36809 } 36810 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 36811 return TCL_ERROR 36812 } 36813 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 36814 return TCL_ERROR 36815 } 36816 rc = sqlite3.Xsqlite3_busy_timeout(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56))) 36817 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36818 return TCL_OK 36819 } 36820 36821 func tcl_variable_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36822 var pVar uintptr 36823 if objc != 2 { 36824 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17696) 36825 return TCL_ERROR 36826 } 36827 pVar = tcl.XTcl_GetVar2Ex(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0), TCL_LEAVE_ERR_MSG) 36828 if pVar == uintptr(0) { 36829 return TCL_ERROR 36830 } 36831 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 36832 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname, -1)) 36833 } 36834 return TCL_OK 36835 } 36836 36837 func test_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36838 bp := tls.Alloc(4) 36839 defer tls.Free(4) 36840 36841 var amt int32 36842 if objc != 1 && objc != 2 { 36843 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36844 return TCL_ERROR 36845 } 36846 if objc == 2 { 36847 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36848 return TCL_ERROR 36849 } 36850 } else { 36851 *(*int32)(unsafe.Pointer(bp)) = -1 36852 } 36853 amt = sqlite3.Xsqlite3_release_memory(tls, *(*int32)(unsafe.Pointer(bp))) 36854 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, amt)) 36855 return TCL_OK 36856 } 36857 36858 func test_db_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36859 bp := tls.Alloc(8) 36860 defer tls.Free(8) 36861 36862 var rc int32 36863 if objc != 2 { 36864 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36865 return TCL_ERROR 36866 } 36867 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36868 return TCL_ERROR 36869 } 36870 rc = sqlite3.Xsqlite3_db_release_memory(tls, *(*uintptr)(unsafe.Pointer(bp))) 36871 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36872 return TCL_OK 36873 } 36874 36875 func test_db_cacheflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36876 bp := tls.Alloc(8) 36877 defer tls.Free(8) 36878 36879 var rc int32 36880 if objc != 2 { 36881 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36882 return TCL_ERROR 36883 } 36884 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36885 return TCL_ERROR 36886 } 36887 rc = sqlite3.Xsqlite3_db_cacheflush(tls, *(*uintptr)(unsafe.Pointer(bp))) 36888 if rc != 0 { 36889 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 36890 return TCL_ERROR 36891 } 36892 36893 tcl.XTcl_ResetResult(tls, interp) 36894 return TCL_OK 36895 } 36896 36897 func test_system_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36898 bp := tls.Alloc(8) 36899 defer tls.Free(8) 36900 36901 var iErrno int32 36902 if objc != 2 { 36903 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36904 return TCL_ERROR 36905 } 36906 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36907 return TCL_ERROR 36908 } 36909 iErrno = sqlite3.Xsqlite3_system_errno(tls, *(*uintptr)(unsafe.Pointer(bp))) 36910 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iErrno)) 36911 return TCL_OK 36912 } 36913 36914 func test_db_filename(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36915 bp := tls.Alloc(24) 36916 defer tls.Free(24) 36917 36918 var zDbName uintptr 36919 if objc != 3 { 36920 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36921 return TCL_ERROR 36922 } 36923 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 36924 return TCL_ERROR 36925 } 36926 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36927 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_db_filename(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbName), uintptr(0))) 36928 return TCL_OK 36929 } 36930 36931 func test_db_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36932 bp := tls.Alloc(8) 36933 defer tls.Free(8) 36934 36935 var zDbName uintptr 36936 if objc != 3 { 36937 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36938 return TCL_ERROR 36939 } 36940 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36941 return TCL_ERROR 36942 } 36943 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36944 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_db_readonly(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName))) 36945 return TCL_OK 36946 } 36947 36948 func test_soft_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36949 bp := tls.Alloc(8) 36950 defer tls.Free(8) 36951 36952 var amt sqlite3_int64 36953 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 36954 if objc != 1 && objc != 2 { 36955 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36956 return TCL_ERROR 36957 } 36958 if objc == 2 { 36959 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36960 return TCL_ERROR 36961 } 36962 } 36963 amt = sqlite3.Xsqlite3_soft_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 36964 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 36965 return TCL_OK 36966 } 36967 36968 func test_hard_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36969 bp := tls.Alloc(8) 36970 defer tls.Free(8) 36971 36972 var amt sqlite3_int64 36973 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 36974 if objc != 1 && objc != 2 { 36975 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36976 return TCL_ERROR 36977 } 36978 if objc == 2 { 36979 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36980 return TCL_ERROR 36981 } 36982 } 36983 amt = sqlite3.Xsqlite3_hard_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 36984 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 36985 return TCL_OK 36986 } 36987 36988 func test_thread_cleanup(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36989 sqlite3.Xsqlite3_thread_cleanup(tls) 36990 return TCL_OK 36991 } 36992 36993 func test_pager_refcounts(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36994 bp := tls.Alloc(40) 36995 defer tls.Free(40) 36996 36997 var i int32 36998 var v int32 36999 var a uintptr 37000 var pResult uintptr 37001 37002 if objc != 2 { 37003 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37004 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37005 return TCL_ERROR 37006 } 37007 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37008 return TCL_ERROR 37009 } 37010 pResult = tcl.XTcl_NewObj(tls) 37011 for i = 0; i < (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FnDb; i++ { 37012 if (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt == uintptr(0) { 37013 v = -1 37014 } else { 37015 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 37016 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt)) 37017 v = *(*int32)(unsafe.Pointer(a)) 37018 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 37019 } 37020 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, v)) 37021 } 37022 tcl.XTcl_SetObjResult(tls, interp, pResult) 37023 return TCL_OK 37024 } 37025 37026 func working_64bit_int(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37027 var pTestObj uintptr 37028 var working int32 = 0 37029 37030 pTestObj = tcl.XTcl_NewWideIntObj(tls, int64(1000000)*int64(1234567890)) 37031 working = libc.Bool32(libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, pTestObj), ts+17709) == 0) 37032 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37033 var _objPtr uintptr = pTestObj 37034 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37035 tcl.XTclFreeObj(tls, _objPtr) 37036 } 37037 } 37038 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(working != 0))) 37039 return TCL_OK 37040 } 37041 37042 func vfs_unlink_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37043 bp := tls.Alloc(496) 37044 defer tls.Free(496) 37045 37046 var i int32 37047 var pMain uintptr 37048 37049 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(0)) 37050 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 37051 (*sqlite3_vfs)(unsafe.Pointer(bp + 168)).FzName = ts + 17732 37052 37053 pMain = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37054 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 37055 37056 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 0) 37057 37058 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 37059 37060 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 1) 37061 37062 if pMain != 0 { 37063 sqlite3.Xsqlite3_vfs_register(tls, pMain, 1) 37064 37065 } 37066 37067 for i = 0; uint64(i) < uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 37068 *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37069 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 37070 sqlite3.Xsqlite3_vfs_unregister(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8))) 37071 37072 } 37073 } 37074 37075 sqlite3.Xsqlite3_vfs_register(tls, pMain, 0) 37076 37077 sqlite3.Xsqlite3_vfs_unregister(tls, pMain) 37078 37079 for i = int32(uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)); i >= 0; i-- { 37080 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 37081 sqlite3.Xsqlite3_vfs_register(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)), 1) 37082 37083 } 37084 } 37085 37086 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 37087 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 37088 37089 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 37090 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 37091 37092 return TCL_OK 37093 } 37094 37095 func vfs_initfail_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37096 bp := tls.Alloc(168) 37097 defer tls.Free(168) 37098 37099 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 37100 37101 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37102 return TCL_ERROR 37103 } 37104 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 37105 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37106 return TCL_ERROR 37107 } 37108 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 37109 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37110 return TCL_ERROR 37111 } 37112 return TCL_OK 37113 } 37114 37115 var apVfs [20]uintptr 37116 var nVfs int32 = 0 37117 37118 func vfs_unregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37119 var i int32 37120 for i = 0; i < int32(uint64(unsafe.Sizeof(apVfs))/uint64(unsafe.Sizeof(uintptr(0)))); i++ { 37121 apVfs[i] = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37122 if apVfs[i] == uintptr(0) { 37123 break 37124 } 37125 sqlite3.Xsqlite3_vfs_unregister(tls, apVfs[i]) 37126 } 37127 nVfs = i 37128 return TCL_OK 37129 } 37130 37131 func vfs_reregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37132 var i int32 37133 for i = nVfs - 1; i >= 0; i-- { 37134 sqlite3.Xsqlite3_vfs_register(tls, apVfs[i], 1) 37135 } 37136 return TCL_OK 37137 } 37138 37139 func file_control_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37140 bp := tls.Alloc(44) 37141 defer tls.Free(44) 37142 37143 *(*int32)(unsafe.Pointer(bp + 40)) = 0 37144 37145 var rc int32 37146 _ = rc 37147 37148 if objc != 2 { 37149 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37150 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37151 return TCL_ERROR 37152 } 37153 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37154 return TCL_ERROR 37155 } 37156 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), uintptr(0), 0, bp+40) 37157 37158 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+17738, SQLITE_FCNTL_LOCKSTATE, bp+40) 37159 37160 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+85, -1, bp+40) 37161 37162 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+8931, -1, bp+40) 37163 37164 return TCL_OK 37165 } 37166 37167 func file_control_lasterrno_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37168 bp := tls.Alloc(76) 37169 defer tls.Free(76) 37170 37171 *(*int32)(unsafe.Pointer(bp + 72)) = 0 37172 37173 var rc int32 37174 37175 if objc != 2 { 37176 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37177 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37178 return TCL_ERROR 37179 } 37180 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37181 return TCL_ERROR 37182 } 37183 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_LAST_ERRNO, bp+72) 37184 if rc != 0 { 37185 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37186 return TCL_ERROR 37187 } 37188 if *(*int32)(unsafe.Pointer(bp + 72)) != 0 { 37189 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17751, 37190 tcl.XTcl_GetStringFromObj(tls, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 72))), uintptr(0)), ts+4894, 0)) 37191 return TCL_ERROR 37192 } 37193 return TCL_OK 37194 } 37195 37196 func file_control_data_version(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37197 bp := tls.Alloc(120) 37198 defer tls.Free(120) 37199 37200 var zDb uintptr 37201 37202 var rc int32 37203 37204 if objc != 3 && objc != 2 { 37205 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17779) 37206 return TCL_ERROR 37207 } 37208 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 37209 return TCL_ERROR 37210 } 37211 if objc == 3 { 37212 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37213 } else { 37214 zDb = uintptr(0) 37215 } 37216 37217 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, SQLITE_FCNTL_DATA_VERSION, bp+16) 37218 if rc != 0 { 37219 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37220 return TCL_ERROR 37221 } else { 37222 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+20, ts+17791, libc.VaList(bp, *(*uint32)(unsafe.Pointer(bp + 16)))) 37223 tcl.XTcl_SetResult(tls, interp, bp+20, uintptr(1)) 37224 return TCL_OK 37225 } 37226 return int32(0) 37227 } 37228 37229 func file_control_chunksize_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37230 bp := tls.Alloc(12) 37231 defer tls.Free(12) 37232 37233 var zDb uintptr 37234 37235 var rc int32 37236 37237 if objc != 4 { 37238 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 37239 return TCL_ERROR 37240 } 37241 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37242 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 37243 return TCL_ERROR 37244 } 37245 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37246 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 37247 zDb = uintptr(0) 37248 } 37249 37250 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_CHUNK_SIZE, bp+8) 37251 if rc != 0 { 37252 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37253 return TCL_ERROR 37254 } 37255 return TCL_OK 37256 } 37257 37258 func file_control_sizehint_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37259 bp := tls.Alloc(16) 37260 defer tls.Free(16) 37261 37262 var zDb uintptr 37263 37264 var rc int32 37265 37266 if objc != 4 { 37267 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 37268 return TCL_ERROR 37269 } 37270 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37271 tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 37272 return TCL_ERROR 37273 } 37274 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37275 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 37276 zDb = uintptr(0) 37277 } 37278 37279 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_SIZE_HINT, bp+8) 37280 if rc != 0 { 37281 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37282 return TCL_ERROR 37283 } 37284 return TCL_OK 37285 } 37286 37287 func file_control_lockproxy_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37288 bp := tls.Alloc(40) 37289 defer tls.Free(40) 37290 37291 if objc != 3 { 37292 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37293 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17809, 0)) 37294 return TCL_ERROR 37295 } 37296 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37297 return TCL_ERROR 37298 } 37299 37300 return TCL_OK 37301 } 37302 37303 func file_control_persist_wal(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37304 bp := tls.Alloc(176) 37305 defer tls.Free(176) 37306 37307 var rc int32 37308 37309 if objc != 3 { 37310 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37311 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 37312 return TCL_ERROR 37313 } 37314 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37315 return TCL_ERROR 37316 } 37317 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 37318 return TCL_ERROR 37319 } 37320 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_PERSIST_WAL, bp+72) 37321 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 37322 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 37323 return TCL_OK 37324 } 37325 37326 func file_control_powersafe_overwrite(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37327 bp := tls.Alloc(176) 37328 defer tls.Free(176) 37329 37330 var rc int32 37331 37332 if objc != 3 { 37333 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37334 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 37335 return TCL_ERROR 37336 } 37337 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37338 return TCL_ERROR 37339 } 37340 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 37341 return TCL_ERROR 37342 } 37343 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_POWERSAFE_OVERWRITE, bp+72) 37344 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 37345 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 37346 return TCL_OK 37347 } 37348 37349 func file_control_vfsname(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37350 bp := tls.Alloc(64) 37351 defer tls.Free(64) 37352 37353 var zDbName uintptr = ts + 85 37354 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 37355 37356 if objc != 2 && objc != 3 { 37357 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37358 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37359 return TCL_ERROR 37360 } 37361 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 37362 return TCL_ERROR 37363 } 37364 if objc == 3 { 37365 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37366 } 37367 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_VFSNAME, bp+56) 37368 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 37369 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 37370 return TCL_OK 37371 } 37372 37373 func file_control_reservebytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37374 bp := tls.Alloc(12) 37375 defer tls.Free(12) 37376 37377 var zDbName uintptr = ts + 85 37378 *(*int32)(unsafe.Pointer(bp + 8)) = 0 37379 var rc int32 37380 37381 if objc != 3 { 37382 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17844) 37383 return TCL_ERROR 37384 } 37385 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37386 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 37387 return TCL_ERROR 37388 } 37389 37390 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName, SQLITE_FCNTL_RESERVE_BYTES, bp+8) 37391 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 37392 return TCL_OK 37393 } 37394 37395 func file_control_tempfilename(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37396 bp := tls.Alloc(64) 37397 defer tls.Free(64) 37398 37399 var zDbName uintptr = ts + 85 37400 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 37401 37402 if objc != 2 && objc != 3 { 37403 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37404 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37405 return TCL_ERROR 37406 } 37407 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 37408 return TCL_ERROR 37409 } 37410 if objc == 3 { 37411 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37412 } 37413 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_TEMPFILENAME, bp+56) 37414 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 37415 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 37416 return TCL_OK 37417 } 37418 37419 func file_control_external_reader(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37420 bp := tls.Alloc(44) 37421 defer tls.Free(44) 37422 37423 var zName uintptr = ts + 85 37424 *(*int32)(unsafe.Pointer(bp + 40)) = 0 37425 var rc int32 = SQLITE_OK 37426 37427 if objc != 2 && objc != 3 { 37428 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37429 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37430 return TCL_ERROR 37431 } 37432 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37433 return TCL_ERROR 37434 } 37435 if objc == 3 { 37436 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37437 } 37438 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, SQLITE_FCNTL_EXTERNAL_READER, bp+40) 37439 if rc != SQLITE_OK { 37440 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37441 return TCL_ERROR 37442 } 37443 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 37444 return TCL_OK 37445 } 37446 37447 func vfs_list(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37448 var pVfs uintptr 37449 var pRet uintptr = tcl.XTcl_NewObj(tls) 37450 if objc != 1 { 37451 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 37452 return TCL_ERROR 37453 } 37454 for pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)); pVfs != 0; pVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpNext { 37455 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 37456 } 37457 tcl.XTcl_SetObjResult(tls, interp, pRet) 37458 return TCL_OK 37459 } 37460 37461 func test_limit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37462 bp := tls.Alloc(68) 37463 defer tls.Free(68) 37464 37465 var rc int32 37466 var i int32 37467 var id int32 = 0 37468 37469 var zId uintptr 37470 37471 if objc != 4 { 37472 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37473 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17849, 0)) 37474 return TCL_ERROR 37475 } 37476 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 37477 return TCL_ERROR 37478 } 37479 zId = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37480 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 37481 FzName uintptr 37482 Fid int32 37483 F__ccgo_pad1 [4]byte 37484 }{})); i++ { 37485 if libc.Xstrcmp(tls, zId, aId[i].FzName) == 0 { 37486 id = aId[i].Fid 37487 break 37488 } 37489 } 37490 if uint64(i) >= uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 37491 FzName uintptr 37492 Fid int32 37493 F__ccgo_pad1 [4]byte 37494 }{})) { 37495 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17862, zId, uintptr(0))) 37496 return TCL_ERROR 37497 } 37498 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 37499 return TCL_ERROR 37500 } 37501 rc = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), id, *(*int32)(unsafe.Pointer(bp + 64))) 37502 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37503 return TCL_OK 37504 } 37505 37506 var aId = [14]struct { 37507 FzName uintptr 37508 Fid int32 37509 F__ccgo_pad1 [4]byte 37510 }{ 37511 {FzName: ts + 17883}, 37512 {FzName: ts + 17903, Fid: SQLITE_LIMIT_SQL_LENGTH}, 37513 {FzName: ts + 17927, Fid: SQLITE_LIMIT_COLUMN}, 37514 {FzName: ts + 17947, Fid: SQLITE_LIMIT_EXPR_DEPTH}, 37515 {FzName: ts + 17971, Fid: SQLITE_LIMIT_COMPOUND_SELECT}, 37516 {FzName: ts + 18000, Fid: SQLITE_LIMIT_VDBE_OP}, 37517 {FzName: ts + 18021, Fid: SQLITE_LIMIT_FUNCTION_ARG}, 37518 {FzName: ts + 18047, Fid: SQLITE_LIMIT_ATTACHED}, 37519 {FzName: ts + 18069, Fid: SQLITE_LIMIT_LIKE_PATTERN_LENGTH}, 37520 {FzName: ts + 18102, Fid: SQLITE_LIMIT_VARIABLE_NUMBER}, 37521 {FzName: ts + 18131, Fid: SQLITE_LIMIT_TRIGGER_DEPTH}, 37522 {FzName: ts + 18158, Fid: SQLITE_LIMIT_WORKER_THREADS}, 37523 {FzName: ts + 18186, Fid: -1}, 37524 {FzName: ts + 18208, Fid: SQLITE_LIMIT_WORKER_THREADS + 1}, 37525 } 37526 37527 func save_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37528 var rc int32 = sqlite3.Xsqlite3_test_control(tls, 9999, 0) 37529 _ = rc 37530 37531 rc = sqlite3.Xsqlite3_test_control(tls, -1, 0) 37532 37533 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SAVE, 0) 37534 return TCL_OK 37535 } 37536 37537 func restore_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37538 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_RESTORE, 0) 37539 return TCL_OK 37540 } 37541 37542 func reset_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37543 sqlite3.Xsqlite3_randomness(tls, 0, uintptr(0)) 37544 return TCL_OK 37545 } 37546 37547 func prng_seed(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37548 bp := tls.Alloc(32) 37549 defer tls.Free(32) 37550 37551 *(*int32)(unsafe.Pointer(bp + 16)) = 0 37552 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 37553 if objc != 2 && objc != 3 { 37554 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18228) 37555 return TCL_ERROR 37556 } 37557 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 37558 return TCL_ERROR 37559 } 37560 if objc == 3 && getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) != 0 { 37561 return TCL_ERROR 37562 } 37563 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SEED, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 24)))) 37564 return TCL_OK 37565 } 37566 37567 func extra_schema_checks(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37568 bp := tls.Alloc(12) 37569 defer tls.Free(12) 37570 37571 *(*int32)(unsafe.Pointer(bp + 8)) = 0 37572 if objc != 2 { 37573 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 37574 return TCL_ERROR 37575 } 37576 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 37577 return TCL_ERROR 37578 } 37579 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 37580 return TCL_OK 37581 } 37582 37583 func database_may_be_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37584 bp := tls.Alloc(8) 37585 defer tls.Free(8) 37586 37587 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 0)) 37588 return TCL_OK 37589 } 37590 37591 func database_never_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37592 bp := tls.Alloc(8) 37593 defer tls.Free(8) 37594 37595 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 1)) 37596 return TCL_OK 37597 } 37598 37599 func test_pcache_stats(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37600 bp := tls.Alloc(16) 37601 defer tls.Free(16) 37602 37603 var pRet uintptr 37604 37605 sqlite3.Xsqlite3PcacheStats(tls, bp, bp+4, bp+8, bp+12) 37606 37607 pRet = tcl.XTcl_NewObj(tls) 37608 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18246, -1)) 37609 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp)))) 37610 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18254, -1)) 37611 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 37612 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18258, -1)) 37613 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 37614 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18262, -1)) 37615 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 37616 37617 tcl.XTcl_SetObjResult(tls, interp, pRet) 37618 37619 return TCL_OK 37620 } 37621 37622 func test_unlock_notify_cb(tls *libc.TLS, aArg uintptr, nArg int32) { 37623 var ii int32 37624 for ii = 0; ii < nArg; ii++ { 37625 tcl.XTcl_EvalEx(tls, *(*uintptr)(unsafe.Pointer(aArg + uintptr(ii)*8)), ts+13692, -1, TCL_EVAL_GLOBAL) 37626 } 37627 } 37628 37629 func test_unlock_notify(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37630 bp := tls.Alloc(8) 37631 defer tls.Free(8) 37632 37633 var rc int32 37634 37635 if objc != 2 { 37636 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37637 return TCL_ERROR 37638 } 37639 37640 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37641 return TCL_ERROR 37642 } 37643 rc = sqlite3.Xsqlite3_unlock_notify(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct { 37644 f func(*libc.TLS, uintptr, int32) 37645 }{test_unlock_notify_cb})), interp) 37646 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37647 return TCL_OK 37648 } 37649 37650 func test_wal_checkpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37651 bp := tls.Alloc(8) 37652 defer tls.Free(8) 37653 37654 var zDb uintptr = uintptr(0) 37655 37656 var rc int32 37657 37658 if objc != 3 && objc != 2 { 37659 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18273) 37660 return TCL_ERROR 37661 } 37662 37663 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37664 return TCL_ERROR 37665 } 37666 if objc == 3 { 37667 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37668 } 37669 rc = sqlite3.Xsqlite3_wal_checkpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 37670 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37671 return TCL_OK 37672 } 37673 37674 func test_wal_checkpoint_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37675 bp := tls.Alloc(96) 37676 defer tls.Free(96) 37677 37678 var zDb uintptr = uintptr(0) 37679 37680 var rc int32 37681 37682 *(*int32)(unsafe.Pointer(bp + 88)) = -555 37683 *(*int32)(unsafe.Pointer(bp + 92)) = -555 37684 var pRet uintptr 37685 37686 *(*[5]uintptr)(unsafe.Pointer(bp + 48)) = [5]uintptr{ts + 18283, ts + 18291, ts + 18296, ts + 18304, uintptr(0)} 37687 37688 if objc != 3 && objc != 4 { 37689 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18313) 37690 return TCL_ERROR 37691 } 37692 37693 if objc == 4 { 37694 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37695 } 37696 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) && 37697 TCL_OK != tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+48, int32(unsafe.Sizeof(uintptr(0))), ts+18328, 0, bp+40) { 37698 return TCL_ERROR 37699 } 37700 37701 rc = sqlite3.Xsqlite3_wal_checkpoint_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zDb, *(*int32)(unsafe.Pointer(bp + 40)), bp+88, bp+92) 37702 if rc != SQLITE_OK && rc != SQLITE_BUSY { 37703 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37704 tcl.XTcl_ResetResult(tls, interp) 37705 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErrCode, ts+9645, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0)) 37706 return TCL_ERROR 37707 } 37708 37709 pRet = tcl.XTcl_NewObj(tls) 37710 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, func() int32 { 37711 if rc == SQLITE_BUSY { 37712 return 1 37713 } 37714 return 0 37715 }())) 37716 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 88)))) 37717 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 92)))) 37718 tcl.XTcl_SetObjResult(tls, interp, pRet) 37719 37720 return TCL_OK 37721 } 37722 37723 func test_wal_autocheckpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37724 bp := tls.Alloc(12) 37725 defer tls.Free(12) 37726 37727 var rc int32 37728 37729 if objc != 3 { 37730 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18333) 37731 return TCL_ERROR 37732 } 37733 37734 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37735 tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 37736 return TCL_ERROR 37737 } 37738 37739 rc = sqlite3.Xsqlite3_wal_autocheckpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 37740 tcl.XTcl_ResetResult(tls, interp) 37741 if rc != SQLITE_OK { 37742 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37743 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErrCode, -1)) 37744 return TCL_ERROR 37745 } 37746 37747 return TCL_OK 37748 } 37749 37750 type LogCallback = struct { 37751 FpInterp uintptr 37752 FpObj uintptr 37753 } 37754 37755 var logcallback = LogCallback{} 37756 37757 func xLogcallback(tls *libc.TLS, unused uintptr, err int32, zMsg uintptr) { 37758 var pNew uintptr = tcl.XTcl_DuplicateObj(tls, logcallback.FpObj) 37759 (*Tcl_Obj)(unsafe.Pointer(pNew)).FrefCount++ 37760 tcl.XTcl_ListObjAppendElement(tls, 37761 uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, err), -1)) 37762 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, zMsg, -1)) 37763 tcl.XTcl_EvalObjEx(tls, logcallback.FpInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT) 37764 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37765 var _objPtr uintptr = pNew 37766 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37767 tcl.XTclFreeObj(tls, _objPtr) 37768 } 37769 } 37770 } 37771 37772 func test_sqlite3_log(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37773 bp := tls.Alloc(32) 37774 defer tls.Free(32) 37775 37776 if objc > 2 { 37777 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10187) 37778 return TCL_ERROR 37779 } 37780 if logcallback.FpObj != 0 { 37781 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37782 var _objPtr uintptr = logcallback.FpObj 37783 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37784 tcl.XTclFreeObj(tls, _objPtr) 37785 } 37786 } 37787 logcallback.FpObj = uintptr(0) 37788 logcallback.FpInterp = uintptr(0) 37789 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp, uintptr(0), uintptr(0))) 37790 } 37791 if objc > 1 { 37792 logcallback.FpObj = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 37793 (*Tcl_Obj)(unsafe.Pointer(logcallback.FpObj)).FrefCount++ 37794 logcallback.FpInterp = interp 37795 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct { 37796 f func(*libc.TLS, uintptr, int32, uintptr) 37797 }{xLogcallback})), uintptr(0))) 37798 } 37799 return TCL_OK 37800 } 37801 37802 func runAsObjProc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37803 bp := tls.Alloc(112) 37804 defer tls.Free(112) 37805 37806 if objc < 2 { 37807 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18342) 37808 return TCL_ERROR 37809 } 37810 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 37811 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 37812 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 37813 return TCL_ERROR 37814 } 37815 if (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjProc == uintptr(0) { 37816 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18354, 37817 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 37818 return TCL_ERROR 37819 } 37820 return (*struct { 37821 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 37822 })(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) 37823 } 37824 37825 func printExplainQueryPlan(tls *libc.TLS, pStmt uintptr) int32 { 37826 bp := tls.Alloc(48) 37827 defer tls.Free(48) 37828 37829 var zSql uintptr 37830 var zExplain uintptr 37831 37832 var rc int32 37833 37834 zSql = sqlite3.Xsqlite3_sql(tls, pStmt) 37835 if zSql == uintptr(0) { 37836 return SQLITE_ERROR 37837 } 37838 37839 zExplain = sqlite3.Xsqlite3_mprintf(tls, ts+330, libc.VaList(bp, zSql)) 37840 if zExplain == uintptr(0) { 37841 return SQLITE_NOMEM 37842 } 37843 37844 rc = sqlite3.Xsqlite3_prepare_v2(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt), zExplain, -1, bp+40, uintptr(0)) 37845 sqlite3.Xsqlite3_free(tls, zExplain) 37846 if rc != SQLITE_OK { 37847 return rc 37848 } 37849 37850 for SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 37851 var iSelectid int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 37852 var iOrder int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 37853 var iFrom int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 37854 var zDetail uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 3) 37855 37856 libc.Xprintf(tls, ts+18379, libc.VaList(bp+8, iSelectid, iOrder, iFrom, zDetail)) 37857 } 37858 37859 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 37860 } 37861 37862 func test_print_eqp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37863 bp := tls.Alloc(8) 37864 defer tls.Free(8) 37865 37866 var rc int32 37867 37868 if objc != 2 { 37869 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 37870 return TCL_ERROR 37871 } 37872 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37873 return TCL_ERROR 37874 } 37875 rc = printExplainQueryPlan(tls, *(*uintptr)(unsafe.Pointer(bp))) 37876 37877 libc.Xfflush(tls, libc.X__stdoutp) 37878 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37879 return TCL_OK 37880 } 37881 37882 func testLocaltime(tls *libc.TLS, aliasT uintptr, aliasTM uintptr) int32 { 37883 var t time_t = *(*time_t)(unsafe.Pointer(aliasT)) 37884 var pTm uintptr = aliasTM 37885 var altT time_t 37886 var iJD sqlite3_int64 37887 var Z int32 37888 var A int32 37889 var B int32 37890 var C int32 37891 var D int32 37892 var E int32 37893 var X1 int32 37894 var S int32 37895 37896 if t/int64(86400)&int64(1) != 0 { 37897 altT = t + int64(1800) 37898 } else { 37899 altT = t - int64(1800) 37900 } 37901 iJD = altT + 210866760000 37902 Z = int32((iJD + int64(43200)) / int64(86400)) 37903 A = libc.Int32FromFloat64((float64(Z) - 1867216.25) / 36524.25) 37904 A = Z + 1 + A - A/4 37905 B = A + 1524 37906 C = libc.Int32FromFloat64((float64(B) - 122.1) / 365.25) 37907 D = 36525 * (C & 32767) / 100 37908 E = libc.Int32FromFloat64(float64(B-D) / 30.6001) 37909 X1 = libc.Int32FromFloat64(30.6001 * float64(E)) 37910 (*tm)(unsafe.Pointer(pTm)).Ftm_mday = B - D - X1 37911 (*tm)(unsafe.Pointer(pTm)).Ftm_mon = func() int32 { 37912 if E < 14 { 37913 return E - 2 37914 } 37915 return E - 14 37916 }() 37917 (*tm)(unsafe.Pointer(pTm)).Ftm_year = func() int32 { 37918 if (*tm)(unsafe.Pointer(pTm)).Ftm_mon > 1 { 37919 return C - 4716 37920 } 37921 return C - 4715 37922 }() - 1900 37923 S = int32((iJD + int64(43200)) % int64(86400)) 37924 (*tm)(unsafe.Pointer(pTm)).Ftm_hour = S / 3600 37925 (*tm)(unsafe.Pointer(pTm)).Ftm_min = S / 60 % 60 37926 (*tm)(unsafe.Pointer(pTm)).Ftm_sec = S % 60 37927 return libc.Bool32(t == int64(959609760)) 37928 } 37929 37930 func test_test_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37931 bp := tls.Alloc(192) 37932 defer tls.Free(192) 37933 37934 *(*[4]Verb)(unsafe.Pointer(bp + 72)) = [4]Verb{ 37935 {FzName: ts + 18392, Fi: SQLITE_TESTCTRL_LOCALTIME_FAULT}, 37936 {FzName: ts + 18424, Fi: SQLITE_TESTCTRL_SORTER_MMAP}, 37937 {FzName: ts + 18452, Fi: SQLITE_TESTCTRL_IMPOSTER}, 37938 {FzName: ts + 18477, Fi: SQLITE_TESTCTRL_INTERNAL_FUNCTIONS}, 37939 } 37940 37941 var iFlag int32 37942 var rc int32 37943 37944 if objc < 2 { 37945 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18512) 37946 return TCL_ERROR 37947 } 37948 37949 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 37950 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+72, int32(unsafe.Sizeof(Verb{})), ts+18525, 0, bp+136) 37951 if rc != TCL_OK { 37952 return rc 37953 } 37954 37955 iFlag = (*Verb)(unsafe.Pointer(bp + 72 + uintptr(*(*int32)(unsafe.Pointer(bp + 136)))*16)).Fi 37956 switch iFlag { 37957 case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: 37958 { 37959 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 37960 if objc != 3 { 37961 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 37962 return TCL_ERROR 37963 } 37964 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+144) != 0 { 37965 return TCL_ERROR 37966 } 37967 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(bp + 144)))) 37968 break 37969 37970 } 37971 case SQLITE_TESTCTRL_LOCALTIME_FAULT: 37972 { 37973 if objc != 3 { 37974 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18530) 37975 return TCL_ERROR 37976 } 37977 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+152) != 0 { 37978 return TCL_ERROR 37979 } 37980 sqlite3.Xsqlite3_test_control(tls, iFlag, libc.VaList(bp+8, *(*int32)(unsafe.Pointer(bp + 152)), *(*uintptr)(unsafe.Pointer(&struct { 37981 f func(*libc.TLS, uintptr, uintptr) int32 37982 }{testLocaltime})))) 37983 break 37984 37985 } 37986 37987 case SQLITE_TESTCTRL_SORTER_MMAP: 37988 { 37989 if objc != 4 { 37990 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18536) 37991 return TCL_ERROR 37992 } 37993 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+160) != 0 { 37994 return TCL_ERROR 37995 } 37996 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168) != 0 { 37997 return TCL_ERROR 37998 } 37999 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_SORTER_MMAP, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 160)), *(*int32)(unsafe.Pointer(bp + 168)))) 38000 break 38001 38002 } 38003 38004 case SQLITE_TESTCTRL_IMPOSTER: 38005 { 38006 var zDbName uintptr 38007 38008 if objc != 6 { 38009 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18545) 38010 return TCL_ERROR 38011 } 38012 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+176) != 0 { 38013 return TCL_ERROR 38014 } 38015 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 38016 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+184) != 0 { 38017 return TCL_ERROR 38018 } 38019 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+188) != 0 { 38020 return TCL_ERROR 38021 } 38022 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)))) 38023 break 38024 38025 } 38026 } 38027 38028 tcl.XTcl_ResetResult(tls, interp) 38029 return TCL_OK 38030 } 38031 38032 type Verb = struct { 38033 FzName uintptr 38034 Fi int32 38035 F__ccgo_pad1 [4]byte 38036 } 38037 38038 type rusage = struct { 38039 Fru_utime struct { 38040 Ftv_sec time_t 38041 Ftv_usec suseconds_t 38042 } 38043 Fru_stime struct { 38044 Ftv_sec time_t 38045 Ftv_usec suseconds_t 38046 } 38047 Fru_maxrss int64 38048 Fru_ixrss int64 38049 Fru_idrss int64 38050 Fru_isrss int64 38051 Fru_minflt int64 38052 Fru_majflt int64 38053 Fru_nswap int64 38054 Fru_inblock int64 38055 Fru_oublock int64 38056 Fru_msgsnd int64 38057 Fru_msgrcv int64 38058 Fru_nsignals int64 38059 Fru_nvcsw int64 38060 Fru_nivcsw int64 38061 } 38062 38063 type __wrusage = struct { 38064 Fwru_self struct { 38065 Fru_utime struct { 38066 Ftv_sec time_t 38067 Ftv_usec suseconds_t 38068 } 38069 Fru_stime struct { 38070 Ftv_sec time_t 38071 Ftv_usec suseconds_t 38072 } 38073 Fru_maxrss int64 38074 Fru_ixrss int64 38075 Fru_idrss int64 38076 Fru_isrss int64 38077 Fru_minflt int64 38078 Fru_majflt int64 38079 Fru_nswap int64 38080 Fru_inblock int64 38081 Fru_oublock int64 38082 Fru_msgsnd int64 38083 Fru_msgrcv int64 38084 Fru_nsignals int64 38085 Fru_nvcsw int64 38086 Fru_nivcsw int64 38087 } 38088 Fwru_children struct { 38089 Fru_utime struct { 38090 Ftv_sec time_t 38091 Ftv_usec suseconds_t 38092 } 38093 Fru_stime struct { 38094 Ftv_sec time_t 38095 Ftv_usec suseconds_t 38096 } 38097 Fru_maxrss int64 38098 Fru_ixrss int64 38099 Fru_idrss int64 38100 Fru_isrss int64 38101 Fru_minflt int64 38102 Fru_majflt int64 38103 Fru_nswap int64 38104 Fru_inblock int64 38105 Fru_oublock int64 38106 Fru_msgsnd int64 38107 Fru_msgrcv int64 38108 Fru_nsignals int64 38109 Fru_nvcsw int64 38110 Fru_nivcsw int64 38111 } 38112 } 38113 38114 type rlimit = struct { 38115 Frlim_cur rlim_t 38116 Frlim_max rlim_t 38117 } 38118 38119 type orlimit = struct { 38120 Frlim_cur int32 38121 Frlim_max int32 38122 } 38123 38124 type loadavg = struct { 38125 Fldavg [3]uint32 38126 F__ccgo_pad1 [4]byte 38127 Ffscale int64 38128 } 38129 38130 func test_getrusage(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38131 bp := tls.Alloc(1216) 38132 defer tls.Free(1216) 38133 38134 libc.Xmemset(tls, bp+48, 0, uint64(unsafe.Sizeof(rusage{}))) 38135 libc.Xgetrusage(tls, RUSAGE_SELF, bp+48) 38136 38137 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1024]int8{})), bp+192, 38138 ts+18566, 38139 libc.VaList(bp, int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_usec), 38140 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_usec), 38141 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_minflt), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_majflt))) 38142 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+192, -1)) 38143 return TCL_OK 38144 } 38145 38146 func optimization_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38147 bp := tls.Alloc(68) 38148 defer tls.Free(68) 38149 38150 var i int32 38151 38152 var zOpt uintptr 38153 38154 var mask int32 = 0 38155 38156 if objc != 4 { 38157 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18626) 38158 return TCL_ERROR 38159 } 38160 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 38161 return TCL_ERROR 38162 } 38163 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 38164 return TCL_ERROR 38165 } 38166 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38167 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38168 FzOptName uintptr 38169 Fmask int32 38170 F__ccgo_pad1 [4]byte 38171 }{})); i++ { 38172 if libc.Xstrcmp(tls, zOpt, aOpt[i].FzOptName) == 0 { 38173 mask = aOpt[i].Fmask 38174 break 38175 } 38176 } 38177 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 38178 mask = ^mask 38179 } 38180 if uint64(i) >= uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38181 FzOptName uintptr 38182 Fmask int32 38183 F__ccgo_pad1 [4]byte 38184 }{})) { 38185 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18641, 38186 uintptr(0))) 38187 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38188 FzOptName uintptr 38189 Fmask int32 38190 F__ccgo_pad1 [4]byte 38191 }{})); i++ { 38192 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+4894, aOpt[i].FzOptName, uintptr(0))) 38193 } 38194 return TCL_ERROR 38195 } 38196 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_OPTIMIZATIONS, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 56)), mask)) 38197 return TCL_OK 38198 } 38199 38200 var aOpt = [14]struct { 38201 FzOptName uintptr 38202 Fmask int32 38203 F__ccgo_pad1 [4]byte 38204 }{ 38205 {FzOptName: ts + 18682, Fmask: libc.Int32FromUint32(SQLITE_AllOpts)}, 38206 {FzOptName: ts + 18686}, 38207 {FzOptName: ts + 18691, Fmask: SQLITE_QueryFlattener}, 38208 {FzOptName: ts + 18707, Fmask: SQLITE_GroupByOrder}, 38209 {FzOptName: ts + 18721, Fmask: SQLITE_FactorOutConst}, 38210 {FzOptName: ts + 18738, Fmask: SQLITE_DistinctOpt}, 38211 {FzOptName: ts + 18751, Fmask: SQLITE_CoverIdxScan}, 38212 {FzOptName: ts + 18766, Fmask: SQLITE_OrderByIdxJoin}, 38213 {FzOptName: ts + 18784, Fmask: SQLITE_Transitive}, 38214 {FzOptName: ts + 18795, Fmask: SQLITE_OmitNoopJoin}, 38215 {FzOptName: ts + 18810, Fmask: SQLITE_Stat4}, 38216 {FzOptName: ts + 18816, Fmask: SQLITE_SkipScan}, 38217 {FzOptName: ts + 18826, Fmask: SQLITE_PushDown}, 38218 {FzOptName: ts + 18836, Fmask: SQLITE_BalancedMerge}, 38219 } 38220 38221 func tclLoadStaticExtensionCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38222 bp := tls.Alloc(80) 38223 defer tls.Free(80) 38224 38225 var zName uintptr 38226 var i int32 38227 var j int32 38228 var rc int32 38229 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 38230 if objc < 3 { 38231 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18851) 38232 return TCL_ERROR 38233 } 38234 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 38235 return TCL_ERROR 38236 } 38237 for j = 2; j < objc; j++ { 38238 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(j)*8))) 38239 for i = 0; i < int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 38240 FzExtName uintptr 38241 FpInit uintptr 38242 }{}))); i++ { 38243 if libc.Xstrcmp(tls, zName, aExtension[i].FzExtName) == 0 { 38244 break 38245 } 38246 } 38247 if i >= int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 38248 FzExtName uintptr 38249 FpInit uintptr 38250 }{}))) { 38251 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18863, zName, uintptr(0))) 38252 return TCL_ERROR 38253 } 38254 if aExtension[i].FpInit != 0 { 38255 rc = (*struct { 38256 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 38257 })(unsafe.Pointer(&struct{ uintptr }{aExtension[i].FpInit})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), bp+72, uintptr(0)) 38258 } else { 38259 rc = SQLITE_OK 38260 } 38261 if rc != SQLITE_OK && rc != SQLITE_OK|int32(1)<<8 || *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 38262 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18883, zName, ts+18902, *(*uintptr)(unsafe.Pointer(bp + 72)), 38263 uintptr(0))) 38264 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38265 return TCL_ERROR 38266 } 38267 } 38268 return TCL_OK 38269 } 38270 38271 var aExtension = [22]struct { 38272 FzExtName uintptr 38273 FpInit uintptr 38274 }{ 38275 {FzExtName: ts + 18912, FpInit: 0}, 38276 {FzExtName: ts + 18919, FpInit: 0}, 38277 {FzExtName: ts + 4060, FpInit: 0}, 38278 {FzExtName: ts + 18929, FpInit: 0}, 38279 {FzExtName: ts + 4815, FpInit: 0}, 38280 {FzExtName: ts + 4838, FpInit: 0}, 38281 {FzExtName: ts + 4896, FpInit: 0}, 38282 {FzExtName: ts + 4974, FpInit: 0}, 38283 {FzExtName: ts + 18937, FpInit: 0}, 38284 {FzExtName: ts + 5483, FpInit: 0}, 38285 {FzExtName: ts + 5507, FpInit: 0}, 38286 {FzExtName: ts + 18944, FpInit: 0}, 38287 {FzExtName: ts + 6087, FpInit: 0}, 38288 {FzExtName: ts + 6162, FpInit: 0}, 38289 {FzExtName: ts + 6535, FpInit: 0}, 38290 {FzExtName: ts + 6831, FpInit: 0}, 38291 {FzExtName: ts + 6846, FpInit: 0}, 38292 {FzExtName: ts + 18953, FpInit: 0}, 38293 {FzExtName: ts + 18960, FpInit: 0}, 38294 {FzExtName: ts + 18969, FpInit: 0}, 38295 {FzExtName: ts + 8921, FpInit: 0}, 38296 {FzExtName: ts + 9463, FpInit: 0}, 38297 } 38298 38299 func sorter_test_fakeheap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38300 bp := tls.Alloc(4) 38301 defer tls.Free(4) 38302 38303 if objc != 2 { 38304 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 38305 return TCL_ERROR 38306 } 38307 38308 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 38309 return TCL_ERROR 38310 } 38311 38312 if *(*int32)(unsafe.Pointer(bp)) != 0 { 38313 if sqlite3.Xsqlite3Config.FpHeap == uintptr(0) { 38314 sqlite3.Xsqlite3Config.FpHeap = libc.UintptrFromInt64(int64(-1)) 38315 } 38316 } else { 38317 if sqlite3.Xsqlite3Config.FpHeap == libc.UintptrFromInt64(int64(-1)) { 38318 sqlite3.Xsqlite3Config.FpHeap = uintptr(0) 38319 } 38320 } 38321 38322 tcl.XTcl_ResetResult(tls, interp) 38323 return TCL_OK 38324 } 38325 38326 func sorter_test_sort4_helper(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38327 bp := tls.Alloc(80) 38328 defer tls.Free(80) 38329 38330 var zSql1 uintptr 38331 var zSql2 uintptr 38332 38333 var iStep int32 38334 var iCksum1 uint32 38335 var iCksum2 uint32 38336 var rc int32 38337 var iB int32 38338 38339 var a int32 38340 var a1 int32 38341 iCksum1 = uint32(0) 38342 iCksum2 = uint32(0) 38343 38344 if !(objc != 5) { 38345 goto __1 38346 } 38347 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18976) 38348 return TCL_ERROR 38349 __1: 38350 ; 38351 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0) { 38352 goto __2 38353 } 38354 return TCL_ERROR 38355 __2: 38356 ; 38357 zSql1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38358 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0) { 38359 goto __3 38360 } 38361 return TCL_ERROR 38362 __3: 38363 ; 38364 zSql2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 38365 38366 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql1, -1, bp+72, uintptr(0)) 38367 if !(rc != SQLITE_OK) { 38368 goto __4 38369 } 38370 goto sql_error 38371 __4: 38372 ; 38373 iB = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) - 1 38374 iStep = 0 38375 __5: 38376 if !(iStep < *(*int32)(unsafe.Pointer(bp + 64)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 38377 goto __7 38378 } 38379 a = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 38380 if !(a != sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), iB)) { 38381 goto __8 38382 } 38383 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18995, 0)) 38384 return TCL_ERROR 38385 __8: 38386 ; 38387 iCksum1 = iCksum1 + (iCksum1<<3 + uint32(a)) 38388 goto __6 38389 __6: 38390 iStep++ 38391 goto __5 38392 goto __7 38393 __7: 38394 ; 38395 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38396 if !(rc != SQLITE_OK) { 38397 goto __9 38398 } 38399 goto sql_error 38400 __9: 38401 ; 38402 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql2, -1, bp+72, uintptr(0)) 38403 if !(rc != SQLITE_OK) { 38404 goto __10 38405 } 38406 goto sql_error 38407 __10: 38408 ; 38409 iStep = 0 38410 __11: 38411 if !(SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 38412 goto __13 38413 } 38414 a1 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 38415 iCksum2 = iCksum2 + (iCksum2<<3 + uint32(a1)) 38416 goto __12 38417 __12: 38418 iStep++ 38419 goto __11 38420 goto __13 38421 __13: 38422 ; 38423 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38424 if !(rc != SQLITE_OK) { 38425 goto __14 38426 } 38427 goto sql_error 38428 __14: 38429 ; 38430 if !(iCksum1 != iCksum2) { 38431 goto __15 38432 } 38433 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19014, 0)) 38434 return TCL_ERROR 38435 __15: 38436 ; 38437 return TCL_OK 38438 sql_error: 38439 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19032, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 56))), 0)) 38440 return TCL_ERROR 38441 } 38442 38443 func test_bad_behavior(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38444 bp := tls.Alloc(44) 38445 defer tls.Free(44) 38446 38447 var xyz int32 38448 var i int32 = *(*int32)(unsafe.Pointer(clientData)) 38449 var j int32 38450 38451 var a uintptr 38452 if objc != 2 { 38453 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19044) 38454 return TCL_ERROR 38455 } 38456 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 38457 return TCL_ERROR 38458 } 38459 switch *(*int32)(unsafe.Pointer(bp)) { 38460 case 1: 38461 { 38462 xyz = 0x7fffff00 - i 38463 xyz = xyz + 0x100 38464 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, xyz)) 38465 break 38466 38467 } 38468 case 2: 38469 { 38470 *(*int32)(unsafe.Pointer(bp + 4 + 1*4)) = 5 38471 if *(*int32)(unsafe.Pointer(bp + 4 + uintptr(i)*4)) > 0 { 38472 *(*int32)(unsafe.Pointer(bp + 4 + 1*4))++ 38473 } 38474 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4 + 1*4)))) 38475 break 38476 38477 } 38478 case 3: 38479 { 38480 a = libc.Xmalloc(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(10)) 38481 for j = 0; j < 10; j++ { 38482 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = j 38483 } 38484 libc.Xfree(tls, a) 38485 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 38486 break 38487 38488 } 38489 case 4: 38490 { 38491 tcl.XTcl_Panic(tls, ts+19049, 0) 38492 break 38493 38494 } 38495 } 38496 return TCL_OK 38497 } 38498 38499 func test_register_dbstat_vtab(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38500 bp := tls.Alloc(64) 38501 defer tls.Free(64) 38502 38503 var zDb uintptr 38504 38505 if objc != 2 { 38506 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38507 return TCL_ERROR 38508 } 38509 38510 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38511 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp) != 0 { 38512 var db uintptr = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)).Fdb 38513 sqlite3.Xsqlite3DbstatRegister(tls, db) 38514 } 38515 return TCL_OK 38516 } 38517 38518 func test_sqlite3_db_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38519 bp := tls.Alloc(28) 38520 defer tls.Free(28) 38521 38522 var i int32 38523 *(*int32)(unsafe.Pointer(bp + 24)) = 0 38524 var zSetting uintptr 38525 38526 if objc != 4 && objc != 3 { 38527 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19066) 38528 return TCL_ERROR 38529 } 38530 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 38531 return TCL_ERROR 38532 } 38533 zSetting = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38534 if sqlite3.Xsqlite3_strglob(tls, ts+19085, zSetting) == 0 { 38535 zSetting += uintptr(7) 38536 } 38537 if sqlite3.Xsqlite3_strglob(tls, ts+19094, zSetting) == 0 { 38538 zSetting += uintptr(9) 38539 } 38540 if sqlite3.Xsqlite3_strglob(tls, ts+19105, zSetting) == 0 { 38541 zSetting += uintptr(7) 38542 } 38543 for i = 0; i < int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 38544 FzName uintptr 38545 FeVal int32 38546 F__ccgo_pad1 [4]byte 38547 }{}))); i++ { 38548 if libc.Xstrcmp(tls, zSetting, aSetting[i].FzName) == 0 { 38549 break 38550 } 38551 } 38552 if i >= int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 38553 FzName uintptr 38554 FeVal int32 38555 F__ccgo_pad1 [4]byte 38556 }{}))) { 38557 tcl.XTcl_SetObjResult(tls, interp, 38558 tcl.XTcl_NewStringObj(tls, ts+19114, -1)) 38559 return TCL_ERROR 38560 } 38561 if objc == 4 { 38562 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 38563 return TCL_ERROR 38564 } 38565 } else { 38566 *(*int32)(unsafe.Pointer(bp + 24)) = -1 38567 } 38568 sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), aSetting[i].FeVal, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 24)), bp+24)) 38569 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 24)))) 38570 return TCL_OK 38571 } 38572 38573 var aSetting = [14]struct { 38574 FzName uintptr 38575 FeVal int32 38576 F__ccgo_pad1 [4]byte 38577 }{ 38578 {FzName: ts + 19148, FeVal: SQLITE_DBCONFIG_ENABLE_FKEY}, 38579 {FzName: ts + 19153, FeVal: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 38580 {FzName: ts + 19161, FeVal: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 38581 {FzName: ts + 19176, FeVal: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 38582 {FzName: ts + 19191, FeVal: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 38583 {FzName: ts + 19208, FeVal: SQLITE_DBCONFIG_ENABLE_QPSG}, 38584 {FzName: ts + 19213, FeVal: SQLITE_DBCONFIG_TRIGGER_EQP}, 38585 {FzName: ts + 19225, FeVal: SQLITE_DBCONFIG_RESET_DATABASE}, 38586 {FzName: ts + 19234, FeVal: SQLITE_DBCONFIG_DEFENSIVE}, 38587 {FzName: ts + 19244, FeVal: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 38588 {FzName: ts + 19260, FeVal: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 38589 {FzName: ts + 19279, FeVal: SQLITE_DBCONFIG_DQS_DML}, 38590 {FzName: ts + 19287, FeVal: SQLITE_DBCONFIG_DQS_DDL}, 38591 {FzName: ts + 19295, FeVal: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 38592 } 38593 38594 func test_sqlite3_txn_state(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38595 bp := tls.Alloc(8) 38596 defer tls.Free(8) 38597 38598 var zSchema uintptr 38599 var iTxn int32 38600 38601 if objc != 2 && objc != 3 { 38602 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19314) 38603 return TCL_ERROR 38604 } 38605 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38606 return TCL_ERROR 38607 } 38608 if objc == 3 { 38609 zSchema = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38610 } else { 38611 zSchema = uintptr(0) 38612 } 38613 iTxn = sqlite3.Xsqlite3_txn_state(tls, *(*uintptr)(unsafe.Pointer(bp)), zSchema) 38614 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iTxn)) 38615 return TCL_OK 38616 } 38617 38618 func test_dbconfig_maindbname_icecube(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38619 bp := tls.Alloc(16) 38620 defer tls.Free(16) 38621 38622 var rc int32 38623 38624 if objc != 2 { 38625 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38626 return TCL_ERROR 38627 } else { 38628 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 38629 return TCL_ERROR 38630 } 38631 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), SQLITE_DBCONFIG_MAINDBNAME, libc.VaList(bp, ts+19326)) 38632 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 38633 return TCL_OK 38634 } 38635 return int32(0) 38636 } 38637 38638 func test_mmap_warm(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38639 bp := tls.Alloc(8) 38640 defer tls.Free(8) 38641 38642 if objc != 2 && objc != 3 { 38643 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19334) 38644 return TCL_ERROR 38645 } else { 38646 var rc int32 38647 38648 var zDb uintptr = uintptr(0) 38649 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38650 return TCL_ERROR 38651 } 38652 if objc == 3 { 38653 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38654 } 38655 rc = sqlite3_mmap_warm(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 38656 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 38657 return TCL_OK 38658 } 38659 return int32(0) 38660 } 38661 38662 func test_write_db(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38663 bp := tls.Alloc(32) 38664 defer tls.Free(32) 38665 38666 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 38667 *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) = int64(0) 38668 var aData uintptr = uintptr(0) 38669 *(*int32)(unsafe.Pointer(bp + 16)) = 0 38670 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 38671 var rc int32 38672 38673 if objc != 4 { 38674 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19346) 38675 return TCL_ERROR 38676 } 38677 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38678 return TCL_ERROR 38679 } 38680 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 38681 return TCL_ERROR 38682 } 38683 aData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16) 38684 38685 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 38686 rc = (*struct { 38687 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 38688 })(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))) 38689 38690 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38691 return TCL_OK 38692 } 38693 38694 func test_register_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38695 if objc != 1 { 38696 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38697 return TCL_ERROR 38698 } else { 38699 var rc int32 = sqlite3_register_cksumvfs(tls, uintptr(0)) 38700 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38701 } 38702 return TCL_OK 38703 } 38704 38705 func test_unregister_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38706 if objc != 1 { 38707 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38708 return TCL_ERROR 38709 } else { 38710 var rc int32 = sqlite3_unregister_cksumvfs(tls) 38711 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38712 } 38713 return TCL_OK 38714 } 38715 38716 func test_decode_hexdb(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38717 bp := tls.Alloc(296) 38718 defer tls.Free(296) 38719 38720 var zIn uintptr = uintptr(0) 38721 var a uintptr = uintptr(0) 38722 *(*int32)(unsafe.Pointer(bp + 216)) = 0 38723 var lineno int32 = 0 38724 var i int32 38725 var iNext int32 38726 var iOffset int32 = 0 38727 38728 var rc int32 38729 38730 if objc != 2 { 38731 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19361) 38732 return TCL_ERROR 38733 } 38734 zIn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38735 for i = 0; *(*int8)(unsafe.Pointer(zIn + uintptr(i))) != 0; i = iNext { 38736 lineno++ 38737 for iNext = i; *(*int8)(unsafe.Pointer(zIn + uintptr(iNext))) != 0 && int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) != '\n'; iNext++ { 38738 } 38739 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) == '\n' { 38740 iNext++ 38741 } 38742 for int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == ' ' || int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == '\t' { 38743 i++ 38744 } 38745 if a == uintptr(0) { 38746 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19367, libc.VaList(bp, bp+216, bp+220)) 38747 if rc != 2 { 38748 continue 38749 } 38750 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 { 38751 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19389, uintptr(0))) 38752 return TCL_ERROR 38753 } 38754 *(*int32)(unsafe.Pointer(bp + 216)) = (*(*int32)(unsafe.Pointer(bp + 216)) + *(*int32)(unsafe.Pointer(bp + 220)) - 1) & ^(*(*int32)(unsafe.Pointer(bp + 220)) - 1) 38755 if *(*int32)(unsafe.Pointer(bp + 216)) < 512 { 38756 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19410, uintptr(0))) 38757 return TCL_ERROR 38758 } 38759 a = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 38760 if a == uintptr(0) { 38761 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+2069, uintptr(0))) 38762 return TCL_ERROR 38763 } 38764 libc.Xmemset(tls, a, 0, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 38765 continue 38766 } 38767 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19427, libc.VaList(bp+64, bp+224, bp+228)) 38768 if rc == 2 { 38769 iOffset = *(*int32)(unsafe.Pointer(bp + 228)) 38770 continue 38771 } 38772 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19447, 38773 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, 38774 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)) 38775 if rc == 17 { 38776 *(*int32)(unsafe.Pointer(bp + 228)) = iOffset + *(*int32)(unsafe.Pointer(bp + 224)) 38777 if *(*int32)(unsafe.Pointer(bp + 228))+16 <= *(*int32)(unsafe.Pointer(bp + 216)) { 38778 var ii int32 38779 for ii = 0; ii < 16; ii++ { 38780 *(*uint8)(unsafe.Pointer(a + uintptr(*(*int32)(unsafe.Pointer(bp + 228))+ii))) = uint8(*(*uint32)(unsafe.Pointer(bp + 232 + uintptr(ii)*4)) & uint32(0xff)) 38781 } 38782 } 38783 continue 38784 } 38785 } 38786 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, a, *(*int32)(unsafe.Pointer(bp + 216)))) 38787 libc.Xfree(tls, a) 38788 return TCL_OK 38789 } 38790 38791 type AutovacPageData1 = struct { 38792 Finterp uintptr 38793 FzScript uintptr 38794 } 38795 38796 type AutovacPageData = AutovacPageData1 38797 38798 func test_autovacuum_pages_callback(tls *libc.TLS, pClientData uintptr, zSchema uintptr, nFilePages uint32, nFreePages uint32, nBytePerPage uint32) uint32 { 38799 bp := tls.Alloc(344) 38800 defer tls.Free(344) 38801 38802 var pData uintptr = pClientData 38803 38804 tcl.XTcl_DStringInit(tls, bp+24) 38805 tcl.XTcl_DStringAppend(tls, bp+24, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, -1) 38806 tcl.XTcl_DStringAppendElement(tls, bp+24, zSchema) 38807 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp, nFilePages)) 38808 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38809 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp+8, nFreePages)) 38810 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38811 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp+16, nBytePerPage)) 38812 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38813 tcl.XTcl_ResetResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp) 38814 tcl.XTcl_Eval(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+24)).Fstring) 38815 tcl.XTcl_DStringFree(tls, bp+24) 38816 *(*uint32)(unsafe.Pointer(bp + 340)) = nFreePages 38817 tcl.XTcl_GetIntFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp), bp+340) 38818 return *(*uint32)(unsafe.Pointer(bp + 340)) 38819 } 38820 38821 func test_autovacuum_pages(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38822 bp := tls.Alloc(1048) 38823 defer tls.Free(1048) 38824 38825 var pData uintptr 38826 38827 var rc int32 38828 var zScript uintptr 38829 if objc != 2 && objc != 3 { 38830 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19501) 38831 return TCL_ERROR 38832 } 38833 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) != 0 { 38834 return TCL_ERROR 38835 } 38836 if objc == 3 { 38837 zScript = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38838 } else { 38839 zScript = uintptr(0) 38840 } 38841 if zScript != 0 { 38842 var nScript size_t = libc.Xstrlen(tls, zScript) 38843 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(AutovacPageData{}))+nScript+uint64(1)) 38844 if pData == uintptr(0) { 38845 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, uintptr(0))) 38846 return TCL_ERROR 38847 } 38848 (*AutovacPageData)(unsafe.Pointer(pData)).Finterp = interp 38849 (*AutovacPageData)(unsafe.Pointer(pData)).FzScript = pData + 1*16 38850 libc.Xmemcpy(tls, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, zScript, nScript+uint64(1)) 38851 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), *(*uintptr)(unsafe.Pointer(&struct { 38852 f func(*libc.TLS, uintptr, uintptr, uint32, uint32, uint32) uint32 38853 }{test_autovacuum_pages_callback})), 38854 pData, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 38855 } else { 38856 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), uintptr(0), uintptr(0), uintptr(0)) 38857 } 38858 if rc != 0 { 38859 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+48, 38860 ts+19513, libc.VaList(bp+16, rc)) 38861 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+48, uintptr(0))) 38862 return TCL_ERROR 38863 } 38864 return TCL_OK 38865 } 38866 38867 func Sqlitetest1_Init(tls *libc.TLS, interp uintptr) int32 { 38868 var i int32 38869 38870 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd1))/uint64(unsafe.Sizeof(struct { 38871 FzName uintptr 38872 FxProc uintptr 38873 }{})); i++ { 38874 tcl.XTcl_CreateCommand(tls, interp, aCmd1[i].FzName, aCmd1[i].FxProc, uintptr(0), uintptr(0)) 38875 } 38876 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd1))/uint64(unsafe.Sizeof(struct { 38877 FzName uintptr 38878 FxProc uintptr 38879 FclientData uintptr 38880 }{})); i++ { 38881 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd1[i].FzName, 38882 aObjCmd1[i].FxProc, aObjCmd1[i].FclientData, uintptr(0)) 38883 } 38884 tcl.XTcl_LinkVar(tls, interp, ts+19551, 38885 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_search_count)), TCL_LINK_INT) 38886 tcl.XTcl_LinkVar(tls, interp, ts+19571, 38887 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_found_count)), TCL_LINK_INT) 38888 tcl.XTcl_LinkVar(tls, interp, ts+19590, 38889 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sort_count)), TCL_LINK_INT) 38890 tcl.XTcl_LinkVar(tls, interp, ts+19608, 38891 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_max_blobsize)), TCL_LINK_INT) 38892 tcl.XTcl_LinkVar(tls, interp, ts+19629, 38893 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_like_count)), TCL_LINK_INT) 38894 tcl.XTcl_LinkVar(tls, interp, ts+19647, 38895 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_interrupt_count)), TCL_LINK_INT) 38896 tcl.XTcl_LinkVar(tls, interp, ts+19670, 38897 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_open_file_count)), TCL_LINK_INT) 38898 tcl.XTcl_LinkVar(tls, interp, ts+19693, 38899 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_current_time)), TCL_LINK_INT) 38900 tcl.XTcl_LinkVar(tls, interp, ts+19713, 38901 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_xferopt_count)), TCL_LINK_INT) 38902 tcl.XTcl_LinkVar(tls, interp, ts+19735, 38903 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_readdb_count)), TCL_LINK_INT) 38904 tcl.XTcl_LinkVar(tls, interp, ts+19762, 38905 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writedb_count)), TCL_LINK_INT) 38906 tcl.XTcl_LinkVar(tls, interp, ts+19790, 38907 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writej_count)), TCL_LINK_INT) 38908 tcl.XTcl_LinkVar(tls, interp, ts+19817, 38909 uintptr(unsafe.Pointer(&unaligned_string_counter)), TCL_LINK_INT) 38910 tcl.XTcl_LinkVar(tls, interp, ts+19842, 38911 uintptr(unsafe.Pointer(&pzNeededCollation)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 38912 { 38913 tcl.XTcl_LinkVar(tls, interp, ts+19871, 38914 uintptr(unsafe.Pointer(&query_plan)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 38915 38916 } 38917 tcl.XTcl_LinkVar(tls, interp, ts+19889, 38918 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_opentemp_count)), TCL_LINK_INT) 38919 tcl.XTcl_LinkVar(tls, interp, ts+19911, 38920 uintptr(unsafe.Pointer(&sqlite_static_bind_value)), TCL_LINK_STRING) 38921 tcl.XTcl_LinkVar(tls, interp, ts+19936, 38922 uintptr(unsafe.Pointer(&sqlite_static_bind_nbyte)), TCL_LINK_INT) 38923 tcl.XTcl_LinkVar(tls, interp, ts+19961, 38924 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_temp_directory)), TCL_LINK_STRING) 38925 tcl.XTcl_LinkVar(tls, interp, ts+19983, 38926 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_data_directory)), TCL_LINK_STRING) 38927 tcl.XTcl_LinkVar(tls, interp, ts+20005, 38928 uintptr(unsafe.Pointer(&bitmask_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 38929 tcl.XTcl_LinkVar(tls, interp, ts+20018, 38930 uintptr(unsafe.Pointer(&longdouble_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 38931 tcl.XTcl_LinkVar(tls, interp, ts+20034, 38932 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sync_count)), TCL_LINK_INT) 38933 tcl.XTcl_LinkVar(tls, interp, ts+20052, 38934 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_fullsync_count)), TCL_LINK_INT) 38935 return TCL_OK 38936 } 38937 38938 var iZero int32 = 0 38939 var aCmd1 = [39]struct { 38940 FzName uintptr 38941 FxProc uintptr 38942 }{ 38943 {FzName: ts + 20074, FxProc: 0}, 38944 {FzName: ts + 20083, FxProc: 0}, 38945 {FzName: ts + 20092, FxProc: 0}, 38946 {FzName: ts + 20112, FxProc: 0}, 38947 {FzName: ts + 20134, FxProc: 0}, 38948 {FzName: ts + 20155, FxProc: 0}, 38949 {FzName: ts + 20175, FxProc: 0}, 38950 {FzName: ts + 20196, FxProc: 0}, 38951 {FzName: ts + 20220, FxProc: 0}, 38952 {FzName: ts + 20243, FxProc: 0}, 38953 {FzName: ts + 20266, FxProc: 0}, 38954 {FzName: ts + 20292, FxProc: 0}, 38955 {FzName: ts + 20315, FxProc: 0}, 38956 {FzName: ts + 20338, FxProc: 0}, 38957 {FzName: ts + 20359, FxProc: 0}, 38958 {FzName: ts + 20385, FxProc: 0}, 38959 {FzName: ts + 20405, FxProc: 0}, 38960 {FzName: ts + 20422, FxProc: 0}, 38961 {FzName: ts + 20435, FxProc: 0}, 38962 {FzName: ts + 20451, FxProc: 0}, 38963 {FzName: ts + 20476, FxProc: 0}, 38964 {FzName: ts + 20490, FxProc: 0}, 38965 {FzName: ts + 20507, FxProc: 0}, 38966 {FzName: ts + 20531, FxProc: 0}, 38967 {FzName: ts + 20556, FxProc: 0}, 38968 {FzName: ts + 20577, FxProc: 0}, 38969 {FzName: ts + 20607, FxProc: 0}, 38970 {FzName: ts + 20620, FxProc: 0}, 38971 {FzName: ts + 20632, FxProc: 0}, 38972 {FzName: ts + 20643, FxProc: 0}, 38973 {FzName: ts + 20655, FxProc: 0}, 38974 {FzName: ts + 20669, FxProc: 0}, 38975 {FzName: ts + 20687, FxProc: 0}, 38976 {FzName: ts + 20710, FxProc: 0}, 38977 {FzName: ts + 20734, FxProc: 0}, 38978 {FzName: ts + 20757, FxProc: 0}, 38979 {FzName: ts + 20778, FxProc: 0}, 38980 {FzName: ts + 20785, FxProc: 0}, 38981 {FzName: ts + 20800, FxProc: 0}, 38982 } 38983 var aObjCmd1 = [165]struct { 38984 FzName uintptr 38985 FxProc uintptr 38986 FclientData uintptr 38987 }{ 38988 {FzName: ts + 20823, FxProc: 0}, 38989 {FzName: ts + 20841, FxProc: 0}, 38990 {FzName: ts + 20859, FxProc: 0, FclientData: 0}, 38991 {FzName: ts + 20872, FxProc: 0}, 38992 {FzName: ts + 20893, FxProc: 0}, 38993 {FzName: ts + 20920, FxProc: 0}, 38994 {FzName: ts + 20934, FxProc: 0}, 38995 {FzName: ts + 20950, FxProc: 0}, 38996 {FzName: ts + 20967, FxProc: 0}, 38997 {FzName: ts + 20982, FxProc: 0}, 38998 {FzName: ts + 20999, FxProc: 0}, 38999 {FzName: ts + 21021, FxProc: 0}, 39000 {FzName: ts + 21045, FxProc: 0}, 39001 {FzName: ts + 21064, FxProc: 0}, 39002 {FzName: ts + 21084, FxProc: 0}, 39003 {FzName: ts + 21102, FxProc: 0}, 39004 {FzName: ts + 21120, FxProc: 0}, 39005 {FzName: ts + 21140, FxProc: 0}, 39006 {FzName: ts + 21158, FxProc: 0}, 39007 {FzName: ts + 21189, FxProc: 0}, 39008 {FzName: ts + 21223, FxProc: 0}, 39009 {FzName: ts + 21243, FxProc: 0}, 39010 {FzName: ts + 21272, FxProc: 0}, 39011 {FzName: ts + 21300, FxProc: 0}, 39012 {FzName: ts + 21329, FxProc: 0}, 39013 {FzName: ts + 21352, FxProc: 0}, 39014 {FzName: ts + 21366, FxProc: 0}, 39015 {FzName: ts + 21382, FxProc: 0}, 39016 {FzName: ts + 21407, FxProc: 0}, 39017 {FzName: ts + 21422, FxProc: 0}, 39018 {FzName: ts + 21443, FxProc: 0}, 39019 {FzName: ts + 21460, FxProc: 0}, 39020 {FzName: ts + 21473, FxProc: 0}, 39021 {FzName: ts + 21488, FxProc: 0}, 39022 {FzName: ts + 21504, FxProc: 0}, 39023 {FzName: ts + 21523, FxProc: 0}, 39024 {FzName: ts + 21541, FxProc: 0}, 39025 {FzName: ts + 21557, FxProc: 0}, 39026 {FzName: ts + 21575, FxProc: 0}, 39027 {FzName: ts + 21594, FxProc: 0}, 39028 {FzName: ts + 21613, FxProc: 0}, 39029 {FzName: ts + 21637, FxProc: 0}, 39030 {FzName: ts + 21658, FxProc: 0}, 39031 {FzName: ts + 21675, FxProc: 0}, 39032 {FzName: ts + 21695, FxProc: 0}, 39033 {FzName: ts + 21709, FxProc: 0}, 39034 {FzName: ts + 21725, FxProc: 0}, 39035 {FzName: ts + 21751, FxProc: 0}, 39036 {FzName: ts + 21767, FxProc: 0}, 39037 {FzName: ts + 21780, FxProc: 0}, 39038 {FzName: ts + 21792, FxProc: 0}, 39039 {FzName: ts + 21813, FxProc: 0}, 39040 {FzName: ts + 21831, FxProc: 0}, 39041 {FzName: ts + 21853, FxProc: 0}, 39042 {FzName: ts + 21876, FxProc: 0}, 39043 {FzName: ts + 21894, FxProc: 0}, 39044 {FzName: ts + 21912, FxProc: 0}, 39045 {FzName: ts + 21935, FxProc: 0}, 39046 {FzName: ts + 21961, FxProc: 0}, 39047 {FzName: ts + 21983, FxProc: 0}, 39048 {FzName: ts + 22004, FxProc: 0}, 39049 {FzName: ts + 22024, FxProc: 0}, 39050 {FzName: ts + 22044, FxProc: 0}, 39051 {FzName: ts + 22068, FxProc: 0}, 39052 {FzName: ts + 22094, FxProc: 0}, 39053 {FzName: ts + 22120, FxProc: 0}, 39054 {FzName: ts + 22143, FxProc: 0}, 39055 {FzName: ts + 22167, FxProc: 0}, 39056 {FzName: ts + 22190, FxProc: 0}, 39057 {FzName: ts + 22220, FxProc: 0}, 39058 {FzName: ts + 22250, FxProc: 0}, 39059 {FzName: ts + 22264, FxProc: 0}, 39060 {FzName: ts + 22292, FxProc: 0}, 39061 {FzName: ts + 22308, FxProc: 0}, 39062 {FzName: ts + 22327, FxProc: 0}, 39063 {FzName: ts + 22344, FxProc: 0}, 39064 {FzName: ts + 22354, FxProc: 0}, 39065 {FzName: ts + 22374, FxProc: 0}, 39066 {FzName: ts + 22397, FxProc: 0}, 39067 {FzName: ts + 22421, FxProc: 0}, 39068 {FzName: ts + 22442, FxProc: 0}, 39069 {FzName: ts + 22454, FxProc: 0}, 39070 {FzName: ts + 22475, FxProc: 0}, 39071 {FzName: ts + 22494, FxProc: 0}, 39072 {FzName: ts + 22514, FxProc: 0}, 39073 {FzName: ts + 22534, FxProc: 0}, 39074 {FzName: ts + 22556, FxProc: 0}, 39075 {FzName: ts + 22577, FxProc: 0, FclientData: 0}, 39076 {FzName: ts + 22597, FxProc: 0, FclientData: 0}, 39077 {FzName: ts + 22617, FxProc: 0, FclientData: 0}, 39078 {FzName: ts + 22636, FxProc: 0, FclientData: 0}, 39079 {FzName: ts + 22657, FxProc: 0, FclientData: 0}, 39080 {FzName: ts + 22681, FxProc: 0, FclientData: 0}, 39081 {FzName: ts + 22710, FxProc: 0, FclientData: 0}, 39082 {FzName: ts + 22736, FxProc: 0, FclientData: 0}, 39083 {FzName: ts + 22763, FxProc: 0, FclientData: 0}, 39084 {FzName: ts + 22786, FxProc: 0, FclientData: 0}, 39085 {FzName: ts + 22808, FxProc: 0, FclientData: 0}, 39086 {FzName: ts + 22830, FxProc: 0}, 39087 {FzName: ts + 22860, FxProc: 0, FclientData: 0}, 39088 {FzName: ts + 22886, 39089 FxProc: 0, FclientData: 0}, 39090 {FzName: ts + 22917, FxProc: 0, FclientData: 0}, 39091 {FzName: ts + 22945, FxProc: 0, FclientData: 0}, 39092 {FzName: ts + 22974, FxProc: 0}, 39093 {FzName: ts + 23002, FxProc: 0}, 39094 {FzName: ts + 23025, FxProc: 0}, 39095 {FzName: ts + 23043, FxProc: 0}, 39096 {FzName: ts + 23059, FxProc: 0}, 39097 {FzName: ts + 23077, FxProc: 0}, 39098 {FzName: ts + 23096, FxProc: 0}, 39099 {FzName: ts + 23115, FxProc: 0}, 39100 {FzName: ts + 23133, FxProc: 0}, 39101 {FzName: ts + 23161, FxProc: 0}, 39102 {FzName: ts + 23189, FxProc: 0}, 39103 {FzName: ts + 23217, FxProc: 0}, 39104 {FzName: ts + 23244, FxProc: 0}, 39105 {FzName: ts + 23270, FxProc: 0}, 39106 {FzName: ts + 23295, FxProc: 0}, 39107 {FzName: ts + 23328, FxProc: 0}, 39108 {FzName: ts + 23349, FxProc: 0}, 39109 {FzName: ts + 23375, FxProc: 0}, 39110 {FzName: ts + 23401, FxProc: 0}, 39111 {FzName: ts + 23430, FxProc: 0}, 39112 {FzName: ts + 23447, FxProc: 0}, 39113 {FzName: ts + 23474, FxProc: 0}, 39114 {FzName: ts + 23491, FxProc: 0}, 39115 {FzName: ts + 23515, FxProc: 0}, 39116 {FzName: ts + 23533, FxProc: 0}, 39117 {FzName: ts + 23559, FxProc: 0}, 39118 {FzName: ts + 23579, FxProc: 0}, 39119 {FzName: ts + 23597, FxProc: 0}, 39120 {FzName: ts + 23625, FxProc: 0}, 39121 {FzName: ts + 23653, FxProc: 0}, 39122 {FzName: ts + 23679, FxProc: 0}, 39123 {FzName: ts + 23709, FxProc: 0}, 39124 {FzName: ts + 23729, FxProc: 0}, 39125 {FzName: ts + 23742, FxProc: 0}, 39126 {FzName: ts + 23764, FxProc: 0}, 39127 {FzName: ts + 23787, FxProc: 0}, 39128 {FzName: ts + 23813, FxProc: 0}, 39129 {FzName: ts + 23840, FxProc: 0}, 39130 {FzName: ts + 23857, FxProc: 0}, 39131 {FzName: ts + 23882, FxProc: 0}, 39132 {FzName: ts + 23903, FxProc: 0}, 39133 {FzName: ts + 23913, FxProc: 0}, 39134 {FzName: ts + 23935, FxProc: 0}, 39135 {FzName: ts + 23956, FxProc: 0}, 39136 {FzName: ts + 23981, FxProc: 0}, 39137 {FzName: ts + 24004, FxProc: 0}, 39138 {FzName: ts + 24025, FxProc: 0}, 39139 {FzName: ts + 24047, FxProc: 0}, 39140 {FzName: ts + 24069, FxProc: 0}, 39141 {FzName: ts + 24090, FxProc: 0}, 39142 {FzName: ts + 24115, FxProc: 0}, 39143 {FzName: ts + 24141, FxProc: 0}, 39144 {FzName: ts + 24168, FxProc: 0}, 39145 {FzName: ts + 24194, FxProc: 0}, 39146 {FzName: ts + 24218, FxProc: 0}, 39147 {FzName: ts + 24237, FxProc: 0}, 39148 {FzName: ts + 24255, FxProc: 0}, 39149 {FzName: ts + 24280, FxProc: 0}, 39150 {FzName: ts + 24305, FxProc: 0}, 39151 {FzName: ts + 24318, FxProc: 0}, 39152 {FzName: ts + 24332, FxProc: 0}, 39153 {FzName: ts + 24358, FxProc: 0}, 39154 } 39155 var bitmask_size int32 = int32(uint64(unsafe.Sizeof(Bitmask(0))) * uint64(8)) 39156 var longdouble_size int32 = int32(unsafe.Sizeof(float64(0))) 39157 var query_plan uintptr = ts + 24386 39158 39159 var test_pagesize int32 = 1024 39160 39161 func pager_test_reiniter(tls *libc.TLS, pNotUsed uintptr) { 39162 return 39163 } 39164 39165 func pager_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39166 bp := tls.Alloc(192) 39167 defer tls.Free(192) 39168 39169 var rc int32 39170 39171 if argc != 3 { 39172 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39173 ts+24412, 0)) 39174 return TCL_ERROR 39175 } 39176 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39177 return TCL_ERROR 39178 } 39179 rc = sqlite3.Xsqlite3PagerOpen(tls, sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)), bp+80, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, 0, 39180 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB, 39181 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{pager_test_reiniter}))) 39182 if rc != SQLITE_OK { 39183 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39184 return TCL_ERROR 39185 } 39186 sqlite3.Xsqlite3PagerSetCachesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 39187 *(*u32)(unsafe.Pointer(bp + 88)) = u32(test_pagesize) 39188 sqlite3.Xsqlite3PagerSetPagesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), bp+88, -1) 39189 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+92, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39190 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, 0)) 39191 return TCL_OK 39192 } 39193 39194 func pager_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39195 bp := tls.Alloc(48) 39196 defer tls.Free(48) 39197 39198 var pPager uintptr 39199 var rc int32 39200 if argc != 2 { 39201 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39202 ts+24430, 0)) 39203 return TCL_ERROR 39204 } 39205 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39206 rc = sqlite3.Xsqlite3PagerClose(tls, pPager, uintptr(0)) 39207 if rc != SQLITE_OK { 39208 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39209 return TCL_ERROR 39210 } 39211 return TCL_OK 39212 } 39213 39214 func pager_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39215 bp := tls.Alloc(48) 39216 defer tls.Free(48) 39217 39218 var pPager uintptr 39219 var rc int32 39220 if argc != 2 { 39221 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39222 ts+24430, 0)) 39223 return TCL_ERROR 39224 } 39225 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39226 rc = sqlite3.Xsqlite3PagerRollback(tls, pPager) 39227 if rc != SQLITE_OK { 39228 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39229 return TCL_ERROR 39230 } 39231 return TCL_OK 39232 } 39233 39234 func pager_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39235 bp := tls.Alloc(64) 39236 defer tls.Free(64) 39237 39238 var pPager uintptr 39239 var rc int32 39240 if argc != 2 { 39241 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39242 ts+24430, 0)) 39243 return TCL_ERROR 39244 } 39245 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39246 rc = sqlite3.Xsqlite3PagerCommitPhaseOne(tls, pPager, uintptr(0), 0) 39247 if rc != SQLITE_OK { 39248 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39249 return TCL_ERROR 39250 } 39251 rc = sqlite3.Xsqlite3PagerCommitPhaseTwo(tls, pPager) 39252 if rc != SQLITE_OK { 39253 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39254 return TCL_ERROR 39255 } 39256 return TCL_OK 39257 } 39258 39259 func pager_stmt_begin(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39260 bp := tls.Alloc(48) 39261 defer tls.Free(48) 39262 39263 var pPager uintptr 39264 var rc int32 39265 if argc != 2 { 39266 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39267 ts+24430, 0)) 39268 return TCL_ERROR 39269 } 39270 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39271 rc = sqlite3.Xsqlite3PagerOpenSavepoint(tls, pPager, 1) 39272 if rc != SQLITE_OK { 39273 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39274 return TCL_ERROR 39275 } 39276 return TCL_OK 39277 } 39278 39279 func pager_stmt_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39280 bp := tls.Alloc(48) 39281 defer tls.Free(48) 39282 39283 var pPager uintptr 39284 var rc int32 39285 if argc != 2 { 39286 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39287 ts+24430, 0)) 39288 return TCL_ERROR 39289 } 39290 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39291 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_ROLLBACK, 0) 39292 sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 39293 if rc != SQLITE_OK { 39294 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39295 return TCL_ERROR 39296 } 39297 return TCL_OK 39298 } 39299 39300 func pager_stmt_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39301 bp := tls.Alloc(48) 39302 defer tls.Free(48) 39303 39304 var pPager uintptr 39305 var rc int32 39306 if argc != 2 { 39307 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39308 ts+24430, 0)) 39309 return TCL_ERROR 39310 } 39311 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39312 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 39313 if rc != SQLITE_OK { 39314 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39315 return TCL_ERROR 39316 } 39317 return TCL_OK 39318 } 39319 39320 func pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39321 bp := tls.Alloc(140) 39322 defer tls.Free(140) 39323 39324 var pPager uintptr 39325 var i int32 39326 var a uintptr 39327 if argc != 2 { 39328 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39329 ts+24430, 0)) 39330 return TCL_ERROR 39331 } 39332 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39333 a = sqlite3.Xsqlite3PagerStats(tls, pPager) 39334 for i = 0; i < 9; i++ { 39335 tcl.XTcl_AppendElement(tls, interp, zName[i]) 39336 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 39337 tcl.XTcl_AppendElement(tls, interp, bp+40) 39338 } 39339 return TCL_OK 39340 } 39341 39342 var zName = [9]uintptr{ 39343 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 39344 ts + 24448, ts + 24452, ts + 24457, 39345 } 39346 39347 func pager_pagecount(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39348 bp := tls.Alloc(160) 39349 defer tls.Free(160) 39350 39351 var pPager uintptr 39352 39353 if argc != 2 { 39354 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39355 ts+24430, 0)) 39356 return TCL_ERROR 39357 } 39358 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39359 sqlite3.Xsqlite3PagerPagecount(tls, pPager, bp+56) 39360 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 56)))) 39361 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 39362 return TCL_OK 39363 } 39364 39365 func page_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39366 bp := tls.Alloc(188) 39367 defer tls.Free(188) 39368 39369 var pPager uintptr 39370 39371 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 39372 39373 var rc int32 39374 if argc != 3 { 39375 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39376 ts+24462, 0)) 39377 return TCL_ERROR 39378 } 39379 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39380 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39381 return TCL_ERROR 39382 } 39383 rc = sqlite3.Xsqlite3PagerSharedLock(tls, pPager) 39384 if rc == SQLITE_OK { 39385 rc = sqlite3.Xsqlite3PagerGet(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 72))), bp+80, 0) 39386 } 39387 if rc != SQLITE_OK { 39388 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39389 return TCL_ERROR 39390 } 39391 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39392 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 39393 return TCL_OK 39394 } 39395 39396 func page_lookup(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39397 bp := tls.Alloc(160) 39398 defer tls.Free(160) 39399 39400 var pPager uintptr 39401 39402 var pPage uintptr 39403 39404 if argc != 3 { 39405 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39406 ts+24462, 0)) 39407 return TCL_ERROR 39408 } 39409 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39410 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 39411 return TCL_ERROR 39412 } 39413 pPage = sqlite3.Xsqlite3PagerLookup(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 56)))) 39414 if pPage != 0 { 39415 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+9889, libc.VaList(bp+32, pPage)) 39416 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 39417 } 39418 return TCL_OK 39419 } 39420 39421 func pager_truncate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39422 bp := tls.Alloc(36) 39423 defer tls.Free(36) 39424 39425 var pPager uintptr 39426 39427 if argc != 3 { 39428 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39429 ts+24462, 0)) 39430 return TCL_ERROR 39431 } 39432 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39433 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 39434 return TCL_ERROR 39435 } 39436 sqlite3.Xsqlite3PagerTruncateImage(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 32)))) 39437 return TCL_OK 39438 } 39439 39440 func page_unref(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39441 bp := tls.Alloc(32) 39442 defer tls.Free(32) 39443 39444 var pPage uintptr 39445 if argc != 2 { 39446 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39447 ts+24472, 0)) 39448 return TCL_ERROR 39449 } 39450 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39451 sqlite3.Xsqlite3PagerUnref(tls, pPage) 39452 return TCL_OK 39453 } 39454 39455 func page_read(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39456 bp := tls.Alloc(148) 39457 defer tls.Free(148) 39458 39459 var pPage uintptr 39460 if argc != 2 { 39461 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39462 ts+24472, 0)) 39463 return TCL_ERROR 39464 } 39465 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39466 libc.Xmemcpy(tls, bp+48, sqlite3.Xsqlite3PagerGetData(tls, pPage), uint64(unsafe.Sizeof([100]int8{}))) 39467 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 39468 return TCL_OK 39469 } 39470 39471 func page_number(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39472 bp := tls.Alloc(156) 39473 defer tls.Free(156) 39474 39475 var pPage uintptr 39476 if argc != 2 { 39477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39478 ts+24472, 0)) 39479 return TCL_ERROR 39480 } 39481 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39482 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+56, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3PagerPagenumber(tls, pPage))) 39483 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 39484 return TCL_OK 39485 } 39486 39487 func page_write(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39488 bp := tls.Alloc(48) 39489 defer tls.Free(48) 39490 39491 var pPage uintptr 39492 var pData uintptr 39493 var rc int32 39494 if argc != 3 { 39495 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39496 ts+24479, 0)) 39497 return TCL_ERROR 39498 } 39499 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39500 rc = sqlite3.Xsqlite3PagerWrite(tls, pPage) 39501 if rc != SQLITE_OK { 39502 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39503 return TCL_ERROR 39504 } 39505 pData = sqlite3.Xsqlite3PagerGetData(tls, pPage) 39506 libc.Xstrncpy(tls, pData, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(test_pagesize-1)) 39507 *(*int8)(unsafe.Pointer(pData + uintptr(test_pagesize-1))) = int8(0) 39508 return TCL_OK 39509 } 39510 39511 func fake_big_file(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39512 bp := tls.Alloc(96) 39513 defer tls.Free(96) 39514 39515 var pVfs uintptr 39516 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 39517 var rc int32 39518 39519 var offset i64 39520 var zFile uintptr 39521 var nFile int32 39522 if argc != 3 { 39523 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39524 ts+24491, 0)) 39525 return TCL_ERROR 39526 } 39527 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 39528 return TCL_ERROR 39529 } 39530 39531 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39532 nFile = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 39533 zFile = sqlite3.Xsqlite3_malloc(tls, nFile+2) 39534 if zFile == uintptr(0) { 39535 return TCL_ERROR 39536 } 39537 libc.Xmemcpy(tls, zFile, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(nFile+1)) 39538 *(*int8)(unsafe.Pointer(zFile + uintptr(nFile+1))) = int8(0) 39539 rc = sqlite3.Xsqlite3OsOpenMalloc(tls, pVfs, zFile, bp+88, 39540 SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB, uintptr(0)) 39541 if rc != 0 { 39542 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+24510, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39543 sqlite3.Xsqlite3_free(tls, zFile) 39544 return TCL_ERROR 39545 } 39546 offset = i64(*(*int32)(unsafe.Pointer(bp + 80))) 39547 offset = offset * int64(1024*1024) 39548 rc = sqlite3.Xsqlite3OsWrite(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), ts+24524, 14, offset) 39549 sqlite3.Xsqlite3OsCloseFree(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 39550 sqlite3.Xsqlite3_free(tls, zFile) 39551 if rc != 0 { 39552 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, ts+24538, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39553 return TCL_ERROR 39554 } 39555 return TCL_OK 39556 } 39557 39558 func testPendingByte(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39559 bp := tls.Alloc(44) 39560 defer tls.Free(44) 39561 39562 var rc int32 39563 if argc != 2 { 39564 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39565 ts+24553, uintptr(0))) 39566 return TCL_ERROR 39567 } 39568 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 39569 return TCL_ERROR 39570 } 39571 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PENDING_BYTE, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 40)))) 39572 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39573 return TCL_OK 39574 } 39575 39576 var faultSimInterp uintptr = uintptr(0) 39577 var faultSimScriptSize int32 = 0 39578 var faultSimScript uintptr 39579 39580 func faultSimCallback(tls *libc.TLS, x int32) int32 { 39581 bp := tls.Alloc(38) 39582 defer tls.Free(38) 39583 39584 var i int32 39585 var isNeg int32 39586 var rc int32 39587 if x == 0 { 39588 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), ts+14193, uint64(2)) 39589 } else { 39590 if x < 0 { 39591 isNeg = 1 39592 x = -x 39593 } else { 39594 isNeg = 0 39595 } 39596 *(*int8)(unsafe.Pointer(bp + 8 + 29)) = int8(0) 39597 i = int32(uint64(unsafe.Sizeof([30]int8{})) - uint64(2)) 39598 __1: 39599 if !(i > 0 && x > 0) { 39600 goto __3 39601 } 39602 { 39603 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8(x%10 + '0') 39604 39605 } 39606 goto __2 39607 __2: 39608 i-- 39609 x = x / 10 39610 goto __1 39611 goto __3 39612 __3: 39613 ; 39614 if isNeg != 0 { 39615 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(libc.PostDecInt32(&i, 1)))) = int8('-') 39616 } 39617 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), bp+8+uintptr(i)+uintptr(1), uint64(unsafe.Sizeof([30]int8{}))-uint64(i)) 39618 } 39619 rc = tcl.XTcl_Eval(tls, faultSimInterp, faultSimScript) 39620 if rc != 0 { 39621 libc.Xfprintf(tls, libc.X__stderrp, ts+24568, libc.VaList(bp, faultSimScript)) 39622 rc = SQLITE_ERROR 39623 } else { 39624 rc = libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, faultSimInterp)) 39625 } 39626 tcl.XTcl_ResetResult(tls, faultSimInterp) 39627 return rc 39628 } 39629 39630 func faultInstallCmd(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39631 bp := tls.Alloc(64) 39632 defer tls.Free(64) 39633 39634 var zScript uintptr 39635 var nScript int32 39636 var rc int32 39637 if argc != 1 && argc != 2 { 39638 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39639 ts+24604, uintptr(0))) 39640 } 39641 if argc == 2 { 39642 zScript = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 39643 } else { 39644 zScript = ts + 584 39645 } 39646 nScript = int32(libc.Xstrlen(tls, zScript)) 39647 if faultSimScript != 0 { 39648 libc.Xfree(tls, faultSimScript) 39649 faultSimScript = uintptr(0) 39650 } 39651 if nScript == 0 { 39652 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_FAULT_INSTALL, libc.VaList(bp+32, 0)) 39653 } else { 39654 faultSimScript = libc.Xmalloc(tls, uint64(nScript+100)) 39655 if faultSimScript == uintptr(0) { 39656 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2069, uintptr(0))) 39657 return SQLITE_ERROR 39658 } 39659 libc.Xmemcpy(tls, faultSimScript, zScript, uint64(nScript)) 39660 *(*int8)(unsafe.Pointer(faultSimScript + uintptr(nScript))) = int8(' ') 39661 faultSimScriptSize = nScript + 1 39662 faultSimInterp = interp 39663 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})))) 39664 } 39665 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39666 return SQLITE_OK 39667 } 39668 39669 func testBitvecBuiltinTest(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39670 bp := tls.Alloc(452) 39671 defer tls.Free(452) 39672 39673 var rc int32 39674 var nProg int32 = 0 39675 39676 var z uintptr 39677 if argc != 3 { 39678 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39679 ts+24613, uintptr(0))) 39680 } 39681 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 39682 return TCL_ERROR 39683 } 39684 z = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 39685 for nProg < 99 && *(*int8)(unsafe.Pointer(z)) != 0 { 39686 for *(*int8)(unsafe.Pointer(z)) != 0 && !(int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0) { 39687 z++ 39688 } 39689 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 39690 break 39691 } 39692 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(libc.PostIncInt32(&nProg, 1))*4)) = libc.Xatoi(tls, z) 39693 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 39694 z++ 39695 } 39696 } 39697 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(nProg)*4)) = 0 39698 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BITVEC_TEST, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 48)), bp+52)) 39699 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39700 return TCL_OK 39701 } 39702 39703 func Sqlitetest2_Init(tls *libc.TLS, interp uintptr) int32 { 39704 var i int32 39705 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd2))/uint64(unsafe.Sizeof(struct { 39706 FzName uintptr 39707 FxProc uintptr 39708 }{})); i++ { 39709 tcl.XTcl_CreateCommand(tls, interp, aCmd2[i].FzName, aCmd2[i].FxProc, uintptr(0), uintptr(0)) 39710 } 39711 tcl.XTcl_LinkVar(tls, interp, ts+24628, 39712 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_pending)), TCL_LINK_INT) 39713 tcl.XTcl_LinkVar(tls, interp, ts+24652, 39714 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_persist)), TCL_LINK_INT) 39715 tcl.XTcl_LinkVar(tls, interp, ts+24676, 39716 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hit)), TCL_LINK_INT) 39717 tcl.XTcl_LinkVar(tls, interp, ts+24696, 39718 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hardhit)), TCL_LINK_INT) 39719 tcl.XTcl_LinkVar(tls, interp, ts+24720, 39720 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull_pending)), TCL_LINK_INT) 39721 tcl.XTcl_LinkVar(tls, interp, ts+24744, 39722 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull)), TCL_LINK_INT) 39723 tcl.XTcl_LinkVar(tls, interp, ts+24760, 39724 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3PendingByte)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39725 return TCL_OK 39726 } 39727 39728 var aCmd2 = [20]struct { 39729 FzName uintptr 39730 FxProc uintptr 39731 }{ 39732 {FzName: ts + 24780, FxProc: 0}, 39733 {FzName: ts + 24791, FxProc: 0}, 39734 {FzName: ts + 24803, FxProc: 0}, 39735 {FzName: ts + 24816, FxProc: 0}, 39736 {FzName: ts + 24831, FxProc: 0}, 39737 {FzName: ts + 24848, FxProc: 0}, 39738 {FzName: ts + 24866, FxProc: 0}, 39739 {FzName: ts + 24886, FxProc: 0}, 39740 {FzName: ts + 24898, FxProc: 0}, 39741 {FzName: ts + 24914, FxProc: 0}, 39742 {FzName: ts + 24923, FxProc: 0}, 39743 {FzName: ts + 24935, FxProc: 0}, 39744 {FzName: ts + 24946, FxProc: 0}, 39745 {FzName: ts + 24956, FxProc: 0}, 39746 {FzName: ts + 24967, FxProc: 0}, 39747 {FzName: ts + 24979, FxProc: 0}, 39748 {FzName: ts + 24994, FxProc: 0}, 39749 {FzName: ts + 25008, FxProc: 0}, 39750 {FzName: ts + 25033, FxProc: 0}, 39751 {FzName: ts + 25067, FxProc: 0}, 39752 } 39753 39754 type Btree = Btree1 39755 type BtCursor = BtCursor1 39756 type BtShared = BtShared1 39757 39758 type MemPage1 = struct { 39759 FisInit u8 39760 FintKey u8 39761 FintKeyLeaf u8 39762 F__ccgo_pad1 [1]byte 39763 Fpgno Pgno 39764 Fleaf u8 39765 FhdrOffset u8 39766 FchildPtrSize u8 39767 Fmax1bytePayload u8 39768 FnOverflow u8 39769 F__ccgo_pad2 [1]byte 39770 FmaxLocal u16 39771 FminLocal u16 39772 FcellOffset u16 39773 FnFree int32 39774 FnCell u16 39775 FmaskPage u16 39776 FaiOvfl [4]u16 39777 F__ccgo_pad3 [4]byte 39778 FapOvfl [4]uintptr 39779 FpBt uintptr 39780 FaData uintptr 39781 FaDataEnd uintptr 39782 FaCellIdx uintptr 39783 FaDataOfst uintptr 39784 FpDbPage uintptr 39785 FxCellSize uintptr 39786 FxParseCell uintptr 39787 } 39788 39789 type MemPage = MemPage1 39790 type BtLock1 = struct { 39791 FpBtree uintptr 39792 FiTable Pgno 39793 FeLock u8 39794 F__ccgo_pad1 [3]byte 39795 FpNext uintptr 39796 } 39797 39798 type BtLock = BtLock1 39799 type CellInfo1 = struct { 39800 FnKey i64 39801 FpPayload uintptr 39802 FnPayload u32 39803 FnLocal u16 39804 FnSize u16 39805 } 39806 39807 type CellInfo = CellInfo1 39808 39809 type IntegrityCk1 = struct { 39810 FpBt uintptr 39811 FpPager uintptr 39812 FaPgRef uintptr 39813 FnPage Pgno 39814 FmxErr int32 39815 FnErr int32 39816 FbOomFault int32 39817 FzPfx uintptr 39818 Fv1 Pgno 39819 Fv2 int32 39820 FerrMsg StrAccum 39821 Fheap uintptr 39822 Fdb uintptr 39823 } 39824 39825 type IntegrityCk = IntegrityCk1 39826 39827 var sDb sqlite31 39828 var nRefSqlite3 int32 = 0 39829 39830 func btree_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39831 bp := tls.Alloc(188) 39832 defer tls.Free(188) 39833 39834 var rc int32 39835 39836 var n int32 39837 var zFilename uintptr 39838 if argc != 3 { 39839 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39840 ts+25102, 0)) 39841 return TCL_ERROR 39842 } 39843 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39844 return TCL_ERROR 39845 } 39846 nRefSqlite3++ 39847 if nRefSqlite3 == 1 { 39848 sDb.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39849 sDb.Fmutex = sqlite3.Xsqlite3MutexAlloc(tls, SQLITE_MUTEX_RECURSIVE) 39850 sqlite3.Xsqlite3_mutex_enter(tls, sDb.Fmutex) 39851 } 39852 n = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 39853 zFilename = sqlite3.Xsqlite3_malloc(tls, n+2) 39854 if zFilename == uintptr(0) { 39855 return TCL_ERROR 39856 } 39857 libc.Xmemcpy(tls, zFilename, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint64(n+1)) 39858 *(*int8)(unsafe.Pointer(zFilename + uintptr(n+1))) = int8(0) 39859 rc = sqlite3.Xsqlite3BtreeOpen(tls, sDb.FpVfs, zFilename, uintptr(unsafe.Pointer(&sDb)), bp+80, 0, 39860 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB) 39861 sqlite3.Xsqlite3_free(tls, zFilename) 39862 if rc != SQLITE_OK { 39863 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39864 return TCL_ERROR 39865 } 39866 sqlite3.Xsqlite3BtreeSetCacheSize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 39867 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39868 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 39869 return TCL_OK 39870 } 39871 39872 func btree_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39873 bp := tls.Alloc(48) 39874 defer tls.Free(48) 39875 39876 var pBt uintptr 39877 var rc int32 39878 if argc != 2 { 39879 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39880 ts+24430, 0)) 39881 return TCL_ERROR 39882 } 39883 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39884 rc = sqlite3.Xsqlite3BtreeClose(tls, pBt) 39885 if rc != SQLITE_OK { 39886 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39887 return TCL_ERROR 39888 } 39889 nRefSqlite3-- 39890 if nRefSqlite3 == 0 { 39891 sqlite3.Xsqlite3_mutex_leave(tls, sDb.Fmutex) 39892 sqlite3.Xsqlite3_mutex_free(tls, sDb.Fmutex) 39893 sDb.Fmutex = uintptr(0) 39894 sDb.FpVfs = uintptr(0) 39895 } 39896 return TCL_OK 39897 } 39898 39899 func btree_begin_transaction(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39900 bp := tls.Alloc(48) 39901 defer tls.Free(48) 39902 39903 var pBt uintptr 39904 var rc int32 39905 if argc != 2 { 39906 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39907 ts+24430, 0)) 39908 return TCL_ERROR 39909 } 39910 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39911 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39912 rc = sqlite3.Xsqlite3BtreeBeginTrans(tls, pBt, 1, uintptr(0)) 39913 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39914 if rc != SQLITE_OK { 39915 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39916 return TCL_ERROR 39917 } 39918 return TCL_OK 39919 } 39920 39921 func btree_pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39922 bp := tls.Alloc(140) 39923 defer tls.Free(140) 39924 39925 var pBt uintptr 39926 var i int32 39927 var a uintptr 39928 39929 if argc != 2 { 39930 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39931 ts+24430, 0)) 39932 return TCL_ERROR 39933 } 39934 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39935 39936 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39937 39938 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39939 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 39940 for i = 0; i < 11; i++ { 39941 tcl.XTcl_AppendElement(tls, interp, zName1[i]) 39942 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 39943 tcl.XTcl_AppendElement(tls, interp, bp+40) 39944 } 39945 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39946 39947 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39948 return TCL_OK 39949 } 39950 39951 var zName1 = [11]uintptr{ 39952 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 39953 ts + 24448, ts + 24452, ts + 24457, ts + 25126, ts + 25131, 39954 } 39955 39956 func btree_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39957 bp := tls.Alloc(110) 39958 defer tls.Free(110) 39959 39960 var pBt uintptr 39961 39962 var pCur uintptr 39963 var rc int32 = SQLITE_OK 39964 39965 if argc != 4 { 39966 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39967 ts+25137, 0)) 39968 return TCL_ERROR 39969 } 39970 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39971 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39972 return TCL_ERROR 39973 } 39974 if tcl.XTcl_GetBoolean(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+76) != 0 { 39975 return TCL_ERROR 39976 } 39977 if *(*int32)(unsafe.Pointer(bp + 76)) != 0 { 39978 *(*int32)(unsafe.Pointer(bp + 76)) = BTREE_WRCSR 39979 } 39980 pCur = tcl.XTcl_Alloc(tls, uint32(sqlite3.Xsqlite3BtreeCursorSize(tls))) 39981 libc.Xmemset(tls, pCur, 0, uint64(sqlite3.Xsqlite3BtreeCursorSize(tls))) 39982 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39983 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39984 rc = sqlite3.Xsqlite3BtreeLockTable(tls, pBt, *(*int32)(unsafe.Pointer(bp + 72)), libc.BoolUint8(!!(*(*int32)(unsafe.Pointer(bp + 76)) != 0))) 39985 if rc == SQLITE_OK { 39986 rc = sqlite3.Xsqlite3BtreeCursor(tls, pBt, uint32(*(*int32)(unsafe.Pointer(bp + 72))), *(*int32)(unsafe.Pointer(bp + 76)), uintptr(0), pCur) 39987 } 39988 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39989 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39990 if rc != 0 { 39991 tcl.XTcl_Free(tls, pCur) 39992 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39993 return TCL_ERROR 39994 } 39995 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+80, ts+9889, libc.VaList(bp+48, pCur)) 39996 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 39997 return SQLITE_OK 39998 } 39999 40000 func btree_close_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40001 bp := tls.Alloc(48) 40002 defer tls.Free(48) 40003 40004 var pCur uintptr 40005 var rc int32 40006 40007 if argc != 2 { 40008 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40009 ts+24430, 0)) 40010 return TCL_ERROR 40011 } 40012 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40013 { 40014 var pBt uintptr = (*BtCursor)(unsafe.Pointer(pCur)).FpBtree 40015 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40016 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40017 rc = sqlite3.Xsqlite3BtreeCloseCursor(tls, pCur) 40018 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40019 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40020 40021 } 40022 tcl.XTcl_Free(tls, pCur) 40023 if rc != 0 { 40024 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40025 return TCL_ERROR 40026 } 40027 return SQLITE_OK 40028 } 40029 40030 func btree_next(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40031 bp := tls.Alloc(172) 40032 defer tls.Free(172) 40033 40034 var pCur uintptr 40035 var rc int32 40036 var res int32 = 0 40037 40038 if argc != 2 { 40039 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40040 ts+24430, 0)) 40041 return TCL_ERROR 40042 } 40043 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40044 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40045 rc = sqlite3.Xsqlite3BtreeNext(tls, pCur, 0) 40046 if rc == SQLITE_DONE { 40047 res = 1 40048 rc = SQLITE_OK 40049 } 40050 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40051 if rc != 0 { 40052 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40053 return TCL_ERROR 40054 } 40055 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, res)) 40056 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40057 return SQLITE_OK 40058 } 40059 40060 func btree_first(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40061 bp := tls.Alloc(176) 40062 defer tls.Free(176) 40063 40064 var pCur uintptr 40065 var rc int32 40066 *(*int32)(unsafe.Pointer(bp + 72)) = 0 40067 40068 if argc != 2 { 40069 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40070 ts+24430, 0)) 40071 return TCL_ERROR 40072 } 40073 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40074 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40075 rc = sqlite3.Xsqlite3BtreeFirst(tls, pCur, bp+72) 40076 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40077 if rc != 0 { 40078 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40079 return TCL_ERROR 40080 } 40081 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 72)))) 40082 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+76, 0)) 40083 return SQLITE_OK 40084 } 40085 40086 func btree_eof(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40087 bp := tls.Alloc(106) 40088 defer tls.Free(106) 40089 40090 var pCur uintptr 40091 var rc int32 40092 40093 if argc != 2 { 40094 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40095 ts+24430, 0)) 40096 return TCL_ERROR 40097 } 40098 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40099 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40100 rc = sqlite3.Xsqlite3BtreeEof(tls, pCur) 40101 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40102 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+1333, libc.VaList(bp+32, rc)) 40103 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40104 return SQLITE_OK 40105 } 40106 40107 func btree_payload_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40108 bp := tls.Alloc(106) 40109 defer tls.Free(106) 40110 40111 var pCur uintptr 40112 var n u32 40113 40114 if argc != 2 { 40115 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40116 ts+24430, 0)) 40117 return TCL_ERROR 40118 } 40119 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40120 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40121 n = sqlite3.Xsqlite3BtreePayloadSize(tls, pCur) 40122 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40123 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+17791, libc.VaList(bp+32, n)) 40124 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40125 return SQLITE_OK 40126 } 40127 40128 func btree_varint_test(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40129 bp := tls.Alloc(516) 40130 defer tls.Free(516) 40131 40132 var in u64 40133 40134 var n1 int32 40135 var n2 int32 40136 var i int32 40137 var j int32 40138 40139 if argc != 5 { 40140 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40141 ts+25161, 0)) 40142 return TCL_ERROR 40143 } 40144 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+184) != 0 { 40145 return TCL_ERROR 40146 } 40147 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+188) != 0 { 40148 return TCL_ERROR 40149 } 40150 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+192) != 0 { 40151 return TCL_ERROR 40152 } 40153 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+196) != 0 { 40154 return TCL_ERROR 40155 } 40156 in = u64(*(*u32)(unsafe.Pointer(bp + 184))) 40157 in = in * u64(*(*u32)(unsafe.Pointer(bp + 188))) 40158 for i = 0; i < int32(*(*u32)(unsafe.Pointer(bp + 192))); i++ { 40159 n1 = sqlite3.Xsqlite3PutVarint(tls, bp+200, in) 40160 if n1 > 9 || n1 < 1 { 40161 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40162 ts+25196, libc.VaList(bp+32, n1)) 40163 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+300, 0)) 40164 return TCL_ERROR 40165 } 40166 n2 = int32(sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504)) 40167 if n1 != n2 { 40168 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40169 ts+25246, libc.VaList(bp+56, n1, n2)) 40170 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, bp+300, 0)) 40171 return TCL_ERROR 40172 } 40173 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 40174 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40175 ts+25294, libc.VaList(bp+88, in, *(*u64)(unsafe.Pointer(bp + 504)))) 40176 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, bp+300, 0)) 40177 return TCL_ERROR 40178 } 40179 if in&uint64(0xffffffff) == in { 40180 n2 = int32(func() uint8 { 40181 if int32(*(*uint8)(unsafe.Pointer(bp + 200))) < int32(u8(0x80)) { 40182 return uint8(func() int32 { *(*u32)(unsafe.Pointer(bp + 512)) = u32(*(*uint8)(unsafe.Pointer(bp + 200))); return 1 }()) 40183 } 40184 return sqlite3.Xsqlite3GetVarint32(tls, bp+200, bp+512) 40185 }()) 40186 *(*u64)(unsafe.Pointer(bp + 504)) = u64(*(*u32)(unsafe.Pointer(bp + 512))) 40187 if n1 != n2 { 40188 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40189 ts+25333, 40190 libc.VaList(bp+120, n1, n2)) 40191 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+136, bp+300, 0)) 40192 return TCL_ERROR 40193 } 40194 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 40195 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40196 ts+25383, 40197 libc.VaList(bp+152, in, *(*u64)(unsafe.Pointer(bp + 504)))) 40198 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+168, bp+300, 0)) 40199 return TCL_ERROR 40200 } 40201 } 40202 40203 for j = 0; j < 19; j++ { 40204 sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504) 40205 } 40206 in = in + u64(*(*u32)(unsafe.Pointer(bp + 196))) 40207 } 40208 return TCL_OK 40209 } 40210 40211 func btree_from_db(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40212 bp := tls.Alloc(236) 40213 defer tls.Free(236) 40214 40215 var db uintptr 40216 var pBt uintptr 40217 var iDb int32 = 0 40218 40219 if argc != 2 && argc != 3 { 40220 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40221 ts+25439, 0)) 40222 return TCL_ERROR 40223 } 40224 40225 if 1 != tcl.XTcl_GetCommandInfo(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) { 40226 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25455, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+11945, 0)) 40227 return TCL_ERROR 40228 } 40229 if argc == 3 { 40230 iDb = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40231 } 40232 40233 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 72)).FobjClientData)) 40234 40235 pBt = (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(db)).FaDb + uintptr(iDb)*32)).FpBt 40236 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+136, ts+9889, libc.VaList(bp+64, pBt)) 40237 tcl.XTcl_SetResult(tls, interp, bp+136, uintptr(1)) 40238 return TCL_OK 40239 } 40240 40241 func btree_ismemdb(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40242 bp := tls.Alloc(32) 40243 defer tls.Free(32) 40244 40245 var pBt uintptr 40246 var res int32 40247 var pFile uintptr 40248 40249 if argc != 2 { 40250 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40251 ts+24430, 0)) 40252 return TCL_ERROR 40253 } 40254 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40255 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40256 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40257 pFile = sqlite3.Xsqlite3PagerFile(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 40258 res = libc.Bool32((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods == uintptr(0)) 40259 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40260 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40261 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(res != 0))) 40262 return SQLITE_OK 40263 } 40264 40265 func btree_set_cache_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40266 bp := tls.Alloc(36) 40267 defer tls.Free(36) 40268 40269 var pBt uintptr 40270 40271 if argc != 3 { 40272 tcl.XTcl_AppendResult(tls, 40273 interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+25476, 0)) 40274 return TCL_ERROR 40275 } 40276 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40277 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 40278 return TCL_ERROR 40279 } 40280 40281 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40282 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40283 sqlite3.Xsqlite3BtreeSetCacheSize(tls, pBt, *(*int32)(unsafe.Pointer(bp + 32))) 40284 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40285 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40286 return TCL_OK 40287 } 40288 40289 func btree_insert(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40290 bp := tls.Alloc(68) 40291 defer tls.Free(68) 40292 40293 var pCur uintptr 40294 40295 if objc != 4 && objc != 3 { 40296 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+25488) 40297 return TCL_ERROR 40298 } 40299 40300 libc.Xmemset(tls, bp+16, 0, uint64(unsafe.Sizeof(BtreePayload{}))) 40301 if objc == 4 { 40302 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 40303 return TCL_ERROR 40304 } 40305 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 40306 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16+36) 40307 } else { 40308 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpKey = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) 40309 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 40310 } 40311 pCur = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 40312 40313 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 40314 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40315 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3BtreeInsert(tls, pCur, bp+16, 0, 0) 40316 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40317 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 40318 40319 tcl.XTcl_ResetResult(tls, interp) 40320 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 40321 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, *(*int32)(unsafe.Pointer(bp + 64))), 0)) 40322 return TCL_ERROR 40323 } 40324 return TCL_OK 40325 } 40326 40327 func Sqlitetest3_Init(tls *libc.TLS, interp uintptr) int32 { 40328 var i int32 40329 40330 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd3))/uint64(unsafe.Sizeof(struct { 40331 FzName uintptr 40332 FxProc uintptr 40333 }{})); i++ { 40334 tcl.XTcl_CreateCommand(tls, interp, aCmd3[i].FzName, aCmd3[i].FxProc, uintptr(0), uintptr(0)) 40335 } 40336 40337 tcl.XTcl_CreateObjCommand(tls, interp, ts+25512, *(*uintptr)(unsafe.Pointer(&struct { 40338 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 40339 }{btree_insert})), uintptr(0), uintptr(0)) 40340 40341 return TCL_OK 40342 } 40343 40344 var aCmd3 = [14]struct { 40345 FzName uintptr 40346 FxProc uintptr 40347 }{ 40348 {FzName: ts + 25525, FxProc: 0}, 40349 {FzName: ts + 25536, FxProc: 0}, 40350 {FzName: ts + 25548, FxProc: 0}, 40351 {FzName: ts + 25572, FxProc: 0}, 40352 {FzName: ts + 25590, FxProc: 0}, 40353 {FzName: ts + 25603, FxProc: 0}, 40354 {FzName: ts + 25622, FxProc: 0}, 40355 {FzName: ts + 25633, FxProc: 0}, 40356 {FzName: ts + 25643, FxProc: 0}, 40357 {FzName: ts + 25662, FxProc: 0}, 40358 {FzName: ts + 25674, FxProc: 0}, 40359 {FzName: ts + 25692, FxProc: 0}, 40360 {FzName: ts + 25706, FxProc: 0}, 40361 {FzName: ts + 25720, FxProc: 0}, 40362 } 40363 40364 type sched_param = struct{ Fsched_priority int32 } 40365 40366 type _cpuset = struct{ F__bits [4]int64 } 40367 40368 type cpuset_t = _cpuset 40369 type cpu_set_t = _cpuset 40370 40371 type _pthread_cleanup_info = struct{ Fpthread_cleanup_pad [8]uint64 } 40372 40373 type Thread = struct { 40374 FzFilename uintptr 40375 FxOp uintptr 40376 FzArg uintptr 40377 Fopnum int32 40378 Fbusy int32 40379 Fcompleted int32 40380 F__ccgo_pad1 [4]byte 40381 Fdb uintptr 40382 FpStmt uintptr 40383 FzErr uintptr 40384 FzStaticErr uintptr 40385 Frc int32 40386 Fargc int32 40387 Fargv [100]uintptr 40388 Fcolv [100]uintptr 40389 } 40390 40391 var threadset [26]Thread 40392 40393 func test_barrier(tls *libc.TLS) { 40394 var pMutex uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_APP1) 40395 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 40396 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 40397 } 40398 40399 func test_thread_main(tls *libc.TLS, pArg uintptr) uintptr { 40400 var p uintptr = pArg 40401 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 40402 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40403 } 40404 sqlite3.Xsqlite3_open(tls, (*Thread)(unsafe.Pointer(p)).FzFilename, p+40) 40405 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread)(unsafe.Pointer(p)).Fdb) { 40406 (*Thread)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread)(unsafe.Pointer(p)).Fdb)) 40407 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40408 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 40409 } 40410 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40411 test_barrier(tls) 40412 (*Thread)(unsafe.Pointer(p)).Fcompleted = 1 40413 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 40414 libc.Xsched_yield(tls) 40415 } 40416 test_barrier(tls) 40417 for (*Thread)(unsafe.Pointer(p)).FxOp != 0 { 40418 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 40419 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 40420 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 40421 } 40422 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread)(unsafe.Pointer(p)).FxOp})).f(tls, p) 40423 test_barrier(tls) 40424 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 40425 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 40426 libc.Xsched_yield(tls) 40427 } 40428 test_barrier(tls) 40429 } 40430 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 40431 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40432 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40433 } 40434 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 40435 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40436 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 40437 } 40438 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 40439 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 40440 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 40441 } 40442 test_barrier(tls) 40443 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 40444 sqlite3.Xsqlite3_thread_cleanup(tls) 40445 return uintptr(0) 40446 } 40447 40448 func parse_thread_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 40449 bp := tls.Alloc(16) 40450 defer tls.Free(16) 40451 40452 if zArg == uintptr(0) || int32(*(*int8)(unsafe.Pointer(zArg))) == 0 || int32(*(*int8)(unsafe.Pointer(zArg + 1))) != 0 || !(__sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(zArg)))), uint64(X_CTYPE_U)) != 0) { 40453 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 40454 return -1 40455 } 40456 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 40457 } 40458 40459 func tcl_thread_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40460 bp := tls.Alloc(96) 40461 defer tls.Free(96) 40462 40463 var i int32 40464 40465 var rc int32 40466 40467 if argc != 3 { 40468 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40469 ts+25780, 0)) 40470 return TCL_ERROR 40471 } 40472 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40473 if i < 0 { 40474 return TCL_ERROR 40475 } 40476 if threadset[i].Fbusy != 0 { 40477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 40478 return TCL_ERROR 40479 } 40480 threadset[i].Fbusy = 1 40481 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 40482 threadset[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 40483 threadset[i].Fopnum = 1 40484 threadset[i].Fcompleted = 0 40485 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 40486 f func(*libc.TLS, uintptr) uintptr 40487 }{test_thread_main})), uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40488 if rc != 0 { 40489 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 40490 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 40491 threadset[i].Fbusy = 0 40492 return TCL_ERROR 40493 } 40494 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 40495 return TCL_OK 40496 } 40497 40498 func test_thread_wait(tls *libc.TLS, p uintptr) { 40499 test_barrier(tls) 40500 for (*Thread)(unsafe.Pointer(p)).Fopnum > (*Thread)(unsafe.Pointer(p)).Fcompleted { 40501 libc.Xsched_yield(tls) 40502 } 40503 test_barrier(tls) 40504 } 40505 40506 func tcl_thread_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40507 bp := tls.Alloc(48) 40508 defer tls.Free(48) 40509 40510 var i int32 40511 40512 if argc != 2 { 40513 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40514 ts+25849, 0)) 40515 return TCL_ERROR 40516 } 40517 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40518 if i < 0 { 40519 return TCL_ERROR 40520 } 40521 if !(threadset[i].Fbusy != 0) { 40522 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40523 return TCL_ERROR 40524 } 40525 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40526 return TCL_OK 40527 } 40528 40529 func test_stop_thread(tls *libc.TLS, p uintptr) { 40530 test_thread_wait(tls, p) 40531 (*Thread)(unsafe.Pointer(p)).FxOp = uintptr(0) 40532 (*Thread)(unsafe.Pointer(p)).Fopnum++ 40533 test_thread_wait(tls, p) 40534 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzArg) 40535 (*Thread)(unsafe.Pointer(p)).FzArg = uintptr(0) 40536 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzFilename) 40537 (*Thread)(unsafe.Pointer(p)).FzFilename = uintptr(0) 40538 (*Thread)(unsafe.Pointer(p)).Fbusy = 0 40539 } 40540 40541 func tcl_thread_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40542 bp := tls.Alloc(48) 40543 defer tls.Free(48) 40544 40545 var i int32 40546 40547 if argc != 2 { 40548 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40549 ts+25849, 0)) 40550 return TCL_ERROR 40551 } 40552 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 40553 for i = 0; i < N_THREAD; i++ { 40554 if threadset[i].Fbusy != 0 { 40555 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40556 } 40557 } 40558 } else { 40559 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40560 if i < 0 { 40561 return TCL_ERROR 40562 } 40563 if !(threadset[i].Fbusy != 0) { 40564 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40565 return TCL_ERROR 40566 } 40567 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40568 } 40569 return TCL_OK 40570 } 40571 40572 func tcl_thread_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40573 bp := tls.Alloc(172) 40574 defer tls.Free(172) 40575 40576 var i int32 40577 40578 if argc != 2 { 40579 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40580 ts+25849, 0)) 40581 return TCL_ERROR 40582 } 40583 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40584 if i < 0 { 40585 return TCL_ERROR 40586 } 40587 if !(threadset[i].Fbusy != 0) { 40588 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40589 return TCL_ERROR 40590 } 40591 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40592 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset[i].Fargc)) 40593 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40594 return TCL_OK 40595 } 40596 40597 func tcl_thread_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40598 bp := tls.Alloc(84) 40599 defer tls.Free(84) 40600 40601 var i int32 40602 40603 if argc != 3 { 40604 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40605 ts+25868, 0)) 40606 return TCL_ERROR 40607 } 40608 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40609 if i < 0 { 40610 return TCL_ERROR 40611 } 40612 if !(threadset[i].Fbusy != 0) { 40613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40614 return TCL_ERROR 40615 } 40616 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 40617 return TCL_ERROR 40618 } 40619 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40620 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40621 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40622 return TCL_ERROR 40623 } 40624 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)) 40625 return TCL_OK 40626 } 40627 40628 func tcl_thread_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40629 bp := tls.Alloc(84) 40630 defer tls.Free(84) 40631 40632 var i int32 40633 40634 if argc != 3 { 40635 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40636 ts+25868, 0)) 40637 return TCL_ERROR 40638 } 40639 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40640 if i < 0 { 40641 return TCL_ERROR 40642 } 40643 if !(threadset[i].Fbusy != 0) { 40644 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40645 return TCL_ERROR 40646 } 40647 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 40648 return TCL_ERROR 40649 } 40650 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40651 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40652 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40653 return TCL_ERROR 40654 } 40655 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)) 40656 return TCL_OK 40657 } 40658 40659 func tcl_thread_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40660 bp := tls.Alloc(64) 40661 defer tls.Free(64) 40662 40663 var i int32 40664 var zName uintptr 40665 40666 if argc != 2 { 40667 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40668 ts+25849, 0)) 40669 return TCL_ERROR 40670 } 40671 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40672 if i < 0 { 40673 return TCL_ERROR 40674 } 40675 if !(threadset[i].Fbusy != 0) { 40676 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40677 return TCL_ERROR 40678 } 40679 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40680 zName = sqlite3.Xsqlite3ErrName(tls, threadset[i].Frc) 40681 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 40682 return TCL_OK 40683 } 40684 40685 func tcl_thread_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40686 bp := tls.Alloc(64) 40687 defer tls.Free(64) 40688 40689 var i int32 40690 40691 if argc != 2 { 40692 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40693 ts+25849, 0)) 40694 return TCL_ERROR 40695 } 40696 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40697 if i < 0 { 40698 return TCL_ERROR 40699 } 40700 if !(threadset[i].Fbusy != 0) { 40701 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40702 return TCL_ERROR 40703 } 40704 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40705 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset[i].FzErr, 0)) 40706 return TCL_OK 40707 } 40708 40709 func do_compile(tls *libc.TLS, p uintptr) { 40710 if (*Thread)(unsafe.Pointer(p)).Fdb == uintptr(0) { 40711 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 40712 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40713 return 40714 } 40715 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 40716 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40717 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40718 } 40719 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_prepare(tls, (*Thread)(unsafe.Pointer(p)).Fdb, (*Thread)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 40720 } 40721 40722 func tcl_thread_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40723 bp := tls.Alloc(56) 40724 defer tls.Free(56) 40725 40726 var i int32 40727 if argc != 3 { 40728 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40729 ts+25921, 0)) 40730 return TCL_ERROR 40731 } 40732 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40733 if i < 0 { 40734 return TCL_ERROR 40735 } 40736 if !(threadset[i].Fbusy != 0) { 40737 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40738 return TCL_ERROR 40739 } 40740 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40741 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile})) 40742 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 40743 threadset[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 40744 test_barrier(tls) 40745 threadset[i].Fopnum++ 40746 return TCL_OK 40747 } 40748 40749 func do_step(tls *libc.TLS, p uintptr) { 40750 var i int32 40751 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 40752 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 40753 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40754 return 40755 } 40756 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_step(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40757 if (*Thread)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 40758 (*Thread)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40759 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt); i++ { 40760 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 40761 } 40762 for i = 0; i < (*Thread)(unsafe.Pointer(p)).Fargc; i++ { 40763 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 40764 } 40765 } 40766 } 40767 40768 func tcl_thread_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40769 bp := tls.Alloc(48) 40770 defer tls.Free(48) 40771 40772 var i int32 40773 if argc != 2 { 40774 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40775 ts+25958, 0)) 40776 return TCL_ERROR 40777 } 40778 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40779 if i < 0 { 40780 return TCL_ERROR 40781 } 40782 if !(threadset[i].Fbusy != 0) { 40783 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40784 return TCL_ERROR 40785 } 40786 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40787 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step})) 40788 test_barrier(tls) 40789 threadset[i].Fopnum++ 40790 return TCL_OK 40791 } 40792 40793 func do_finalize(tls *libc.TLS, p uintptr) { 40794 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 40795 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 40796 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40797 return 40798 } 40799 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40800 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40801 } 40802 40803 func tcl_thread_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40804 bp := tls.Alloc(48) 40805 defer tls.Free(48) 40806 40807 var i int32 40808 if argc != 2 { 40809 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40810 ts+25958, 0)) 40811 return TCL_ERROR 40812 } 40813 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40814 if i < 0 { 40815 return TCL_ERROR 40816 } 40817 if !(threadset[i].Fbusy != 0) { 40818 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40819 return TCL_ERROR 40820 } 40821 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40822 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize})) 40823 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 40824 threadset[i].FzArg = uintptr(0) 40825 test_barrier(tls) 40826 threadset[i].Fopnum++ 40827 return TCL_OK 40828 } 40829 40830 func tcl_thread_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40831 bp := tls.Alloc(64) 40832 defer tls.Free(64) 40833 40834 var i int32 40835 var j int32 40836 var temp uintptr 40837 if argc != 3 { 40838 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40839 ts+25963, 0)) 40840 return TCL_ERROR 40841 } 40842 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40843 if i < 0 { 40844 return TCL_ERROR 40845 } 40846 if !(threadset[i].Fbusy != 0) { 40847 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40848 return TCL_ERROR 40849 } 40850 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40851 j = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40852 if j < 0 { 40853 return TCL_ERROR 40854 } 40855 if !(threadset[j].Fbusy != 0) { 40856 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 40857 return TCL_ERROR 40858 } 40859 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(j)*1680) 40860 temp = threadset[i].Fdb 40861 threadset[i].Fdb = threadset[j].Fdb 40862 threadset[j].Fdb = temp 40863 return TCL_OK 40864 } 40865 40866 func tcl_thread_db_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40867 bp := tls.Alloc(164) 40868 defer tls.Free(164) 40869 40870 var i int32 40871 40872 if argc != 2 { 40873 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40874 ts+25849, 0)) 40875 return TCL_ERROR 40876 } 40877 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40878 if i < 0 { 40879 return TCL_ERROR 40880 } 40881 if !(threadset[i].Fbusy != 0) { 40882 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40883 return TCL_ERROR 40884 } 40885 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40886 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].Fdb) 40887 threadset[i].Fdb = uintptr(0) 40888 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 40889 return TCL_OK 40890 } 40891 40892 func tcl_thread_db_put(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40893 bp := tls.Alloc(48) 40894 defer tls.Free(48) 40895 40896 var i int32 40897 if argc != 3 { 40898 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40899 ts+25972, 0)) 40900 return TCL_ERROR 40901 } 40902 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40903 if i < 0 { 40904 return TCL_ERROR 40905 } 40906 if !(threadset[i].Fbusy != 0) { 40907 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40908 return TCL_ERROR 40909 } 40910 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40911 40912 threadset[i].Fdb = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40913 return TCL_OK 40914 } 40915 40916 func tcl_thread_stmt_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40917 bp := tls.Alloc(164) 40918 defer tls.Free(164) 40919 40920 var i int32 40921 40922 if argc != 2 { 40923 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40924 ts+25849, 0)) 40925 return TCL_ERROR 40926 } 40927 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40928 if i < 0 { 40929 return TCL_ERROR 40930 } 40931 if !(threadset[i].Fbusy != 0) { 40932 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40933 return TCL_ERROR 40934 } 40935 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40936 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].FpStmt) 40937 threadset[i].FpStmt = uintptr(0) 40938 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 40939 return TCL_OK 40940 } 40941 40942 func Sqlitetest4_Init(tls *libc.TLS, interp uintptr) int32 { 40943 var i int32 40944 40945 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd4))/uint64(unsafe.Sizeof(struct { 40946 FzName uintptr 40947 FxProc uintptr 40948 }{})); i++ { 40949 tcl.XTcl_CreateCommand(tls, interp, aCmd4[i].FzName, aCmd4[i].FxProc, uintptr(0), uintptr(0)) 40950 } 40951 return TCL_OK 40952 } 40953 40954 var aCmd4 = [15]struct { 40955 FzName uintptr 40956 FxProc uintptr 40957 }{ 40958 {FzName: ts + 25979, FxProc: 0}, 40959 {FzName: ts + 25993, FxProc: 0}, 40960 {FzName: ts + 26005, FxProc: 0}, 40961 {FzName: ts + 26017, FxProc: 0}, 40962 {FzName: ts + 26029, FxProc: 0}, 40963 {FzName: ts + 26041, FxProc: 0}, 40964 {FzName: ts + 26056, FxProc: 0}, 40965 {FzName: ts + 26070, FxProc: 0}, 40966 {FzName: ts + 26083, FxProc: 0}, 40967 {FzName: ts + 26098, FxProc: 0}, 40968 {FzName: ts + 26110, FxProc: 0}, 40969 {FzName: ts + 26126, FxProc: 0}, 40970 {FzName: ts + 26138, FxProc: 0}, 40971 {FzName: ts + 26152, FxProc: 0}, 40972 {FzName: ts + 26166, FxProc: 0}, 40973 } 40974 40975 func binarize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40976 bp := tls.Alloc(4) 40977 defer tls.Free(4) 40978 40979 var bytes uintptr 40980 var pRet uintptr 40981 40982 bytes = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 40983 pRet = tcl.XTcl_NewByteArrayObj(tls, bytes, *(*int32)(unsafe.Pointer(bp))+1) 40984 tcl.XTcl_SetObjResult(tls, interp, pRet) 40985 return TCL_OK 40986 } 40987 40988 func test_value_overhead(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40989 bp := tls.Alloc(96) 40990 defer tls.Free(96) 40991 40992 var i int32 40993 40994 if objc != 3 { 40995 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 40996 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+26182, 0)) 40997 return TCL_ERROR 40998 } 40999 41000 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32) != 0 { 41001 return TCL_ERROR 41002 } 41003 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+36) != 0 { 41004 return TCL_ERROR 41005 } 41006 41007 (*Mem)(unsafe.Pointer(bp + 40)).Fflags = u16(MEM_Str | MEM_Term | MEM_Static) 41008 (*Mem)(unsafe.Pointer(bp + 40)).Fz = ts + 26209 41009 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = u8(SQLITE_UTF8) 41010 41011 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 41012 if *(*int32)(unsafe.Pointer(bp + 36)) != 0 { 41013 sqlite3.Xsqlite3_value_text(tls, bp+40) 41014 } 41015 } 41016 41017 return TCL_OK 41018 } 41019 41020 func name_to_enc(tls *libc.TLS, interp uintptr, pObj uintptr) u8 { 41021 bp := tls.Alloc(104) 41022 defer tls.Free(104) 41023 41024 *(*[5]EncName)(unsafe.Pointer(bp + 24)) = [5]EncName{ 41025 {FzName: ts + 26221, Fenc: u8(SQLITE_UTF8)}, 41026 {FzName: ts + 26226, Fenc: u8(SQLITE_UTF16LE)}, 41027 {FzName: ts + 26234, Fenc: u8(SQLITE_UTF16BE)}, 41028 {FzName: ts + 26242, Fenc: u8(SQLITE_UTF16)}, 41029 {}, 41030 } 41031 var pEnc uintptr 41032 var z uintptr = tcl.XTcl_GetString(tls, pObj) 41033 for pEnc = bp + 24; (*EncName)(unsafe.Pointer(pEnc)).FzName != 0; pEnc += 16 { 41034 if 0 == sqlite3.Xsqlite3StrICmp(tls, z, (*EncName)(unsafe.Pointer(pEnc)).FzName) { 41035 break 41036 } 41037 } 41038 if !(int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) != 0) { 41039 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26248, z, 0)) 41040 } 41041 if int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) == SQLITE_UTF16 { 41042 return u8(SQLITE_UTF16LE) 41043 } 41044 return (*EncName)(unsafe.Pointer(pEnc)).Fenc 41045 } 41046 41047 type EncName = struct { 41048 FzName uintptr 41049 Fenc u8 41050 F__ccgo_pad1 [7]byte 41051 } 41052 41053 func test_translate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41054 bp := tls.Alloc(44) 41055 defer tls.Free(44) 41056 41057 var enc_from u8 41058 var enc_to u8 41059 var pVal uintptr 41060 var z uintptr 41061 41062 var xDel uintptr = uintptr(0) 41063 41064 if objc != 4 && objc != 5 { 41065 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 41066 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), 41067 ts+26267, 0)) 41068 return TCL_ERROR 41069 } 41070 if objc == 5 { 41071 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 41072 } 41073 41074 enc_from = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41075 if !(enc_from != 0) { 41076 return TCL_ERROR 41077 } 41078 enc_to = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 41079 if !(enc_to != 0) { 41080 return TCL_ERROR 41081 } 41082 41083 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 41084 41085 if int32(enc_from) == SQLITE_UTF8 { 41086 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 41087 if objc == 5 { 41088 z = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, z)) 41089 } 41090 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 41091 } else { 41092 z = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) 41093 if objc == 5 { 41094 var zTmp uintptr = z 41095 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 40))) 41096 libc.Xmemcpy(tls, z, zTmp, uint64(*(*int32)(unsafe.Pointer(bp + 40)))) 41097 } 41098 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 41099 } 41100 41101 z = sqlite3.Xsqlite3ValueText(tls, pVal, enc_to) 41102 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3ValueBytes(tls, pVal, enc_to) + func() int32 { 41103 if int32(enc_to) == SQLITE_UTF8 { 41104 return 1 41105 } 41106 return 2 41107 }() 41108 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, z, *(*int32)(unsafe.Pointer(bp + 40)))) 41109 41110 sqlite3.Xsqlite3ValueFree(tls, pVal) 41111 41112 return TCL_OK 41113 } 41114 41115 func test_translate_selftest(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41116 sqlite3.Xsqlite3UtfSelfTest(tls) 41117 return SQLITE_OK 41118 } 41119 41120 func Sqlitetest5_Init(tls *libc.TLS, interp uintptr) int32 { 41121 var i int32 41122 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd5))/uint64(unsafe.Sizeof(struct { 41123 FzName uintptr 41124 FxProc uintptr 41125 }{})); i++ { 41126 tcl.XTcl_CreateObjCommand(tls, interp, aCmd5[i].FzName, aCmd5[i].FxProc, uintptr(0), uintptr(0)) 41127 } 41128 return SQLITE_OK 41129 } 41130 41131 var aCmd5 = [4]struct { 41132 FzName uintptr 41133 FxProc uintptr 41134 }{ 41135 {FzName: ts + 26302, FxProc: 0}, 41136 {FzName: ts + 26311, FxProc: 0}, 41137 {FzName: ts + 26331, FxProc: 0}, 41138 {FzName: ts + 26346, FxProc: 0}, 41139 } 41140 41141 type CrashFile1 = struct { 41142 FpMethod uintptr 41143 FpRealFile uintptr 41144 FzName uintptr 41145 Fflags int32 41146 F__ccgo_pad1 [4]byte 41147 FzData uintptr 41148 FnData int32 41149 F__ccgo_pad2 [4]byte 41150 FiSize i64 41151 } 41152 41153 type CrashFile = CrashFile1 41154 type CrashGlobal1 = struct { 41155 FpWriteList uintptr 41156 FpWriteListEnd uintptr 41157 FiSectorSize int32 41158 FiDeviceCharacteristics int32 41159 FiCrash int32 41160 FzCrashFile [500]int8 41161 } 41162 41163 type CrashGlobal = CrashGlobal1 41164 type WriteBuffer1 = struct { 41165 FiOffset i64 41166 FnBuf int32 41167 F__ccgo_pad1 [4]byte 41168 FzBuf uintptr 41169 FpFile uintptr 41170 FpNext uintptr 41171 } 41172 41173 type WriteBuffer = WriteBuffer1 41174 41175 var g = CrashGlobal{FiSectorSize: SQLITE_DEFAULT_SECTOR_SIZE} 41176 41177 var sqlite3CrashTestEnable int32 = 0 41178 41179 func crash_malloc(tls *libc.TLS, nByte int32) uintptr { 41180 return tcl.XTcl_AttemptAlloc(tls, uint32(size_t(nByte))) 41181 } 41182 41183 func crash_free(tls *libc.TLS, p uintptr) { 41184 tcl.XTcl_Free(tls, p) 41185 } 41186 41187 func crash_realloc(tls *libc.TLS, p uintptr, n int32) uintptr { 41188 return tcl.XTcl_AttemptRealloc(tls, p, uint32(size_t(n))) 41189 } 41190 41191 func writeDbFile(tls *libc.TLS, p uintptr, z uintptr, iAmt i64, iOff i64) int32 { 41192 var rc int32 = SQLITE_OK 41193 var iSkip int32 = 0 41194 if iAmt-i64(iSkip) > int64(0) { 41195 rc = sqlite3.Xsqlite3OsWrite(tls, (*CrashFile)(unsafe.Pointer(p)).FpRealFile, z+uintptr(iSkip), int32(iAmt-i64(iSkip)), iOff+i64(iSkip)) 41196 } 41197 return rc 41198 } 41199 41200 func writeListSync(tls *libc.TLS, pFile uintptr, isCrash int32) int32 { 41201 bp := tls.Alloc(16) 41202 defer tls.Free(16) 41203 41204 var rc int32 = SQLITE_OK 41205 var iDc int32 = g.FiDeviceCharacteristics 41206 var pWrite uintptr 41207 var ppPtr uintptr 41208 41209 var pFinal uintptr = uintptr(0) 41210 if !(isCrash != 0) { 41211 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41212 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile { 41213 pFinal = pWrite 41214 } 41215 } 41216 } else if iDc&(SQLITE_IOCAP_SEQUENTIAL|SQLITE_IOCAP_SAFE_APPEND) != 0 { 41217 var nWrite int32 = 0 41218 41219 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41220 nWrite++ 41221 } 41222 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 41223 *(*int32)(unsafe.Pointer(bp)) = func() int32 { 41224 if *(*int32)(unsafe.Pointer(bp)) < 0 { 41225 return -1 * *(*int32)(unsafe.Pointer(bp)) 41226 } 41227 return *(*int32)(unsafe.Pointer(bp)) 41228 }() % nWrite 41229 for pWrite = g.FpWriteList; *(*int32)(unsafe.Pointer(bp)) > 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41230 *(*int32)(unsafe.Pointer(bp))-- 41231 } 41232 pFinal = pWrite 41233 } 41234 41235 ppPtr = uintptr(unsafe.Pointer(&g)) 41236 for pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)); rc == SQLITE_OK && pWrite != 0; pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)) { 41237 var pRealFile uintptr = (*CrashFile)(unsafe.Pointer((*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile)).FpRealFile 41238 41239 var eAction int32 = 0 41240 if !(isCrash != 0) { 41241 eAction = 2 41242 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile || iDc&SQLITE_IOCAP_SEQUENTIAL != 0 { 41243 eAction = 1 41244 } 41245 } else { 41246 sqlite3.Xsqlite3_randomness(tls, 1, bp+4) 41247 41248 if iDc&SQLITE_IOCAP_ATOMIC != 0 || (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf == uintptr(0) { 41249 *(*int8)(unsafe.Pointer(bp + 4)) &= int8(0x01) 41250 } 41251 41252 if iDc&SQLITE_IOCAP_SEQUENTIAL != 0 && pWrite != pFinal { 41253 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 41254 } 41255 41256 if iDc&SQLITE_IOCAP_SAFE_APPEND != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 41257 sqlite3.Xsqlite3OsFileSize(tls, pRealFile, bp+8) 41258 if *(*i64)(unsafe.Pointer(bp + 8)) == (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset { 41259 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 41260 } 41261 } 41262 41263 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x06 == 0x06 { 41264 eAction = 3 41265 } else { 41266 eAction = func() int32 { 41267 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x01 != 0 { 41268 return 2 41269 } 41270 return 1 41271 }() 41272 } 41273 } 41274 41275 switch eAction { 41276 case 1: 41277 { 41278 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 41279 rc = writeDbFile(tls, 41280 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf, int64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf), (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 41281 } else { 41282 rc = sqlite3.Xsqlite3OsTruncate(tls, pRealFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 41283 } 41284 *(*uintptr)(unsafe.Pointer(ppPtr)) = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext 41285 crash_free(tls, pWrite) 41286 break 41287 41288 } 41289 case 2: 41290 { 41291 ppPtr = pWrite + 32 41292 break 41293 41294 } 41295 case 3: 41296 { 41297 var zGarbage uintptr 41298 var iFirst int32 = int32((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset / i64(g.FiSectorSize)) 41299 var iLast int32 = int32(((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset + i64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf) - int64(1)) / i64(g.FiSectorSize)) 41300 41301 zGarbage = crash_malloc(tls, g.FiSectorSize) 41302 if zGarbage != 0 { 41303 var i sqlite3_int64 41304 for i = sqlite3_int64(iFirst); rc == SQLITE_OK && i <= sqlite3_int64(iLast); i++ { 41305 sqlite3.Xsqlite3_randomness(tls, g.FiSectorSize, zGarbage) 41306 rc = writeDbFile(tls, 41307 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, zGarbage, int64(g.FiSectorSize), i*sqlite3_int64(g.FiSectorSize)) 41308 } 41309 crash_free(tls, zGarbage) 41310 } else { 41311 rc = SQLITE_NOMEM 41312 } 41313 41314 ppPtr = pWrite + 32 41315 break 41316 41317 } 41318 41319 default: 41320 } 41321 41322 if pWrite == pFinal { 41323 break 41324 } 41325 } 41326 41327 if rc == SQLITE_OK && isCrash != 0 { 41328 libc.Xexit(tls, -1) 41329 } 41330 41331 for pWrite = g.FpWriteList; pWrite != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41332 } 41333 g.FpWriteListEnd = pWrite 41334 41335 return rc 41336 } 41337 41338 func writeListAppend(tls *libc.TLS, pFile uintptr, iOffset sqlite3_int64, zBuf uintptr, nBuf int32) int32 { 41339 var pNew uintptr 41340 41341 pNew = crash_malloc(tls, int32(uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf))) 41342 if pNew == uintptr(0) { 41343 libc.Xfprintf(tls, libc.X__stderrp, ts+26365, 0) 41344 } 41345 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf)) 41346 (*WriteBuffer)(unsafe.Pointer(pNew)).FiOffset = iOffset 41347 (*WriteBuffer)(unsafe.Pointer(pNew)).FnBuf = nBuf 41348 (*WriteBuffer)(unsafe.Pointer(pNew)).FpFile = pFile 41349 if zBuf != 0 { 41350 (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf = pNew + 1*40 41351 libc.Xmemcpy(tls, (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf, zBuf, uint64(nBuf)) 41352 } 41353 41354 if g.FpWriteList != 0 { 41355 (*WriteBuffer)(unsafe.Pointer(g.FpWriteListEnd)).FpNext = pNew 41356 } else { 41357 g.FpWriteList = pNew 41358 } 41359 g.FpWriteListEnd = pNew 41360 41361 return SQLITE_OK 41362 } 41363 41364 func cfClose(tls *libc.TLS, pFile uintptr) int32 { 41365 var pCrash uintptr = pFile 41366 writeListSync(tls, pCrash, 0) 41367 sqlite3.Xsqlite3OsClose(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FpRealFile) 41368 return SQLITE_OK 41369 } 41370 41371 func cfRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 41372 var pCrash uintptr = pFile 41373 var nCopy int32 = func() int32 { 41374 if i64(iAmt) < (*CrashFile)(unsafe.Pointer(pCrash)).FiSize-iOfst { 41375 return int32(i64(iAmt)) 41376 } 41377 return int32((*CrashFile)(unsafe.Pointer(pCrash)).FiSize - iOfst) 41378 }() 41379 41380 if nCopy > 0 { 41381 libc.Xmemcpy(tls, zBuf, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), uint64(nCopy)) 41382 } 41383 41384 if nCopy < iAmt { 41385 return SQLITE_IOERR | int32(2)<<8 41386 } 41387 41388 return SQLITE_OK 41389 } 41390 41391 func cfWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 41392 var pCrash uintptr = pFile 41393 if sqlite_int64(iAmt)+iOfst > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 41394 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(sqlite_int64(iAmt) + iOfst)) 41395 } 41396 for (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > i64((*CrashFile)(unsafe.Pointer(pCrash)).FnData) { 41397 var zNew uintptr 41398 var nNew int32 = (*CrashFile)(unsafe.Pointer(pCrash)).FnData*2 + 4096 41399 zNew = crash_realloc(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData, nNew) 41400 if !(zNew != 0) { 41401 return SQLITE_NOMEM 41402 } 41403 libc.Xmemset(tls, zNew+uintptr((*CrashFile)(unsafe.Pointer(pCrash)).FnData), 0, uint64(nNew-(*CrashFile)(unsafe.Pointer(pCrash)).FnData)) 41404 (*CrashFile)(unsafe.Pointer(pCrash)).FnData = nNew 41405 (*CrashFile)(unsafe.Pointer(pCrash)).FzData = zNew 41406 } 41407 libc.Xmemcpy(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), zBuf, uint64(iAmt)) 41408 return writeListAppend(tls, pFile, iOfst, zBuf, iAmt) 41409 } 41410 41411 func cfTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 41412 var pCrash uintptr = pFile 41413 41414 if (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > size { 41415 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(size)) 41416 } 41417 return writeListAppend(tls, pFile, size, uintptr(0), 0) 41418 } 41419 41420 func cfSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 41421 var pCrash uintptr = pFile 41422 var isCrash int32 = 0 41423 41424 var zName uintptr = (*CrashFile)(unsafe.Pointer(pCrash)).FzName 41425 var zCrashFile uintptr = uintptr(unsafe.Pointer(&g)) + 28 41426 var nName int32 = int32(libc.Xstrlen(tls, zName)) 41427 var nCrashFile int32 = int32(libc.Xstrlen(tls, zCrashFile)) 41428 41429 if nCrashFile > 0 && int32(*(*int8)(unsafe.Pointer(zCrashFile + uintptr(nCrashFile-1)))) == '*' { 41430 nCrashFile-- 41431 if nName > nCrashFile { 41432 nName = nCrashFile 41433 } 41434 } 41435 41436 if nName == nCrashFile && 0 == libc.Xmemcmp(tls, zName, zCrashFile, uint64(nName)) { 41437 if libc.PreDecInt32(&g.FiCrash, 1) == 0 { 41438 isCrash = 1 41439 } 41440 } 41441 41442 return writeListSync(tls, pCrash, isCrash) 41443 } 41444 41445 func cfFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 41446 var pCrash uintptr = pFile 41447 *(*sqlite_int64)(unsafe.Pointer(pSize)) = (*CrashFile)(unsafe.Pointer(pCrash)).FiSize 41448 return SQLITE_OK 41449 } 41450 41451 func cfLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 41452 return sqlite3.Xsqlite3OsLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 41453 } 41454 41455 func cfUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 41456 return sqlite3.Xsqlite3OsUnlock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 41457 } 41458 41459 func cfCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 41460 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, pResOut) 41461 } 41462 41463 func cfFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 41464 if op == SQLITE_FCNTL_SIZE_HINT { 41465 var pCrash uintptr = pFile 41466 var nByte i64 = *(*i64)(unsafe.Pointer(pArg)) 41467 if nByte > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 41468 if SQLITE_OK == writeListAppend(tls, pFile, nByte, uintptr(0), 0) { 41469 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(nByte)) 41470 } 41471 } 41472 return SQLITE_OK 41473 } 41474 return sqlite3.Xsqlite3OsFileControl(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, op, pArg) 41475 } 41476 41477 func cfSectorSize(tls *libc.TLS, pFile uintptr) int32 { 41478 return g.FiSectorSize 41479 } 41480 41481 func cfDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 41482 return g.FiDeviceCharacteristics 41483 } 41484 41485 func cfShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 41486 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41487 return (*struct { 41488 f func(*libc.TLS, uintptr, int32, int32, int32) int32 41489 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 41490 } 41491 41492 func cfShmBarrier(tls *libc.TLS, pFile uintptr) { 41493 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41494 (*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) 41495 } 41496 41497 func cfShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 41498 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41499 return (*struct { 41500 f func(*libc.TLS, uintptr, int32) int32 41501 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, delFlag) 41502 } 41503 41504 func cfShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, sz int32, w int32, pp uintptr) int32 { 41505 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41506 return (*struct { 41507 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 41508 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iRegion, sz, w, pp) 41509 } 41510 41511 var CrashFileVtab = sqlite3_io_methods{ 41512 FiVersion: 2, 41513 FxClose: 0, 41514 FxRead: 0, 41515 FxWrite: 0, 41516 FxTruncate: 0, 41517 FxSync: 0, 41518 FxFileSize: 0, 41519 FxLock: 0, 41520 FxUnlock: 0, 41521 FxCheckReservedLock: 0, 41522 FxFileControl: 0, 41523 FxSectorSize: 0, 41524 FxDeviceCharacteristics: 0, 41525 FxShmMap: 0, 41526 FxShmLock: 0, 41527 FxShmBarrier: 0, 41528 FxShmUnmap: 0, 41529 } 41530 41531 type crashAppData = struct{ FpOrig uintptr } 41532 41533 func cfOpen(tls *libc.TLS, pCfVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 41534 bp := tls.Alloc(8) 41535 defer tls.Free(8) 41536 41537 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41538 var rc int32 41539 var pWrapper uintptr = pFile 41540 var pReal uintptr = pWrapper + 1*56 41541 41542 libc.Xmemset(tls, pWrapper, 0, uint64(unsafe.Sizeof(CrashFile{}))) 41543 rc = sqlite3.Xsqlite3OsOpen(tls, pVfs, zName, pReal, flags, pOutFlags) 41544 41545 if rc == SQLITE_OK { 41546 (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod = uintptr(unsafe.Pointer(&CrashFileVtab)) 41547 (*CrashFile)(unsafe.Pointer(pWrapper)).FzName = zName 41548 (*CrashFile)(unsafe.Pointer(pWrapper)).FpRealFile = pReal 41549 rc = sqlite3.Xsqlite3OsFileSize(tls, pReal, bp) 41550 (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize = i64(int32(*(*i64)(unsafe.Pointer(bp)))) 41551 (*CrashFile)(unsafe.Pointer(pWrapper)).Fflags = flags 41552 } 41553 if rc == SQLITE_OK { 41554 (*CrashFile)(unsafe.Pointer(pWrapper)).FnData = int32(int64(4096) + (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize) 41555 (*CrashFile)(unsafe.Pointer(pWrapper)).FzData = crash_malloc(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FnData) 41556 if (*CrashFile)(unsafe.Pointer(pWrapper)).FzData != 0 { 41557 var iOff i64 41558 41559 libc.Xmemset(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData, 0, uint64((*CrashFile)(unsafe.Pointer(pWrapper)).FnData)) 41560 for iOff = int64(0); iOff < (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize; iOff = iOff + int64(512) { 41561 var nRead int32 = int32((*CrashFile)(unsafe.Pointer(pWrapper)).FiSize - iOff) 41562 if nRead > 512 { 41563 nRead = 512 41564 } 41565 rc = sqlite3.Xsqlite3OsRead(tls, pReal, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData+uintptr(iOff), nRead, iOff) 41566 } 41567 } else { 41568 rc = SQLITE_NOMEM 41569 } 41570 } 41571 if rc != SQLITE_OK && (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod != 0 { 41572 sqlite3.Xsqlite3OsClose(tls, pFile) 41573 } 41574 return rc 41575 } 41576 41577 func cfDelete(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, dirSync int32) int32 { 41578 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41579 return (*struct { 41580 f func(*libc.TLS, uintptr, uintptr, int32) int32 41581 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDelete})).f(tls, pVfs, zPath, dirSync) 41582 } 41583 41584 func cfAccess(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 41585 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41586 return (*struct { 41587 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41588 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxAccess})).f(tls, pVfs, zPath, flags, pResOut) 41589 } 41590 41591 func cfFullPathname(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) int32 { 41592 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41593 return (*struct { 41594 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41595 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})).f(tls, pVfs, zPath, nPathOut, zPathOut) 41596 } 41597 41598 func cfDlOpen(tls *libc.TLS, pCfVfs uintptr, zPath uintptr) uintptr { 41599 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41600 return (*struct { 41601 f func(*libc.TLS, uintptr, uintptr) uintptr 41602 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlOpen})).f(tls, pVfs, zPath) 41603 } 41604 41605 func cfDlError(tls *libc.TLS, pCfVfs uintptr, nByte int32, zErrMsg uintptr) { 41606 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41607 (*struct { 41608 f func(*libc.TLS, uintptr, int32, uintptr) 41609 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlError})).f(tls, pVfs, nByte, zErrMsg) 41610 } 41611 41612 func cfDlSym(tls *libc.TLS, pCfVfs uintptr, pH uintptr, zSym uintptr) uintptr { 41613 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41614 return (*struct { 41615 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 41616 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlSym})).f(tls, pVfs, pH, zSym) 41617 } 41618 41619 func cfDlClose(tls *libc.TLS, pCfVfs uintptr, pHandle uintptr) { 41620 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41621 (*struct { 41622 f func(*libc.TLS, uintptr, uintptr) 41623 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlClose})).f(tls, pVfs, pHandle) 41624 } 41625 41626 func cfRandomness(tls *libc.TLS, pCfVfs uintptr, nByte int32, zBufOut uintptr) int32 { 41627 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41628 return (*struct { 41629 f func(*libc.TLS, uintptr, int32, uintptr) int32 41630 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxRandomness})).f(tls, pVfs, nByte, zBufOut) 41631 } 41632 41633 func cfSleep(tls *libc.TLS, pCfVfs uintptr, nMicro int32) int32 { 41634 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41635 return (*struct { 41636 f func(*libc.TLS, uintptr, int32) int32 41637 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSleep})).f(tls, pVfs, nMicro) 41638 } 41639 41640 func cfCurrentTime(tls *libc.TLS, pCfVfs uintptr, pTimeOut uintptr) int32 { 41641 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41642 return (*struct { 41643 f func(*libc.TLS, uintptr, uintptr) int32 41644 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTime})).f(tls, pVfs, pTimeOut) 41645 } 41646 41647 func cfGetLastError(tls *libc.TLS, pCfVfs uintptr, n int32, z uintptr) int32 { 41648 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41649 return (*struct { 41650 f func(*libc.TLS, uintptr, int32, uintptr) int32 41651 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetLastError})).f(tls, pVfs, n, z) 41652 } 41653 41654 func processDevSymArgs(tls *libc.TLS, interp uintptr, objc int32, objv uintptr, piDeviceChar uintptr, piSectorSize uintptr) int32 { 41655 bp := tls.Alloc(316) 41656 defer tls.Free(316) 41657 41658 *(*[14]DeviceFlag)(unsafe.Pointer(bp + 88)) = [14]DeviceFlag{ 41659 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 41660 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 41661 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 41662 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 41663 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 41664 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 41665 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 41666 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 41667 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 41668 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 41669 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 41670 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 41671 {FzName: ts + 26529, FiValue: SQLITE_IOCAP_BATCH_ATOMIC}, 41672 {}, 41673 } 41674 var i int32 41675 var iDc int32 = 0 41676 *(*int32)(unsafe.Pointer(bp + 68)) = 0 41677 var setSectorsize int32 = 0 41678 var setDeviceChar int32 = 0 41679 41680 for i = 0; i < objc; i = i + 2 { 41681 var zOpt uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+64) 41682 41683 if (*(*int32)(unsafe.Pointer(bp + 64)) > 11 || *(*int32)(unsafe.Pointer(bp + 64)) < 2 || libc.Xstrncmp(tls, ts+26542, zOpt, uint64(*(*int32)(unsafe.Pointer(bp + 64)))) != 0) && 41684 (*(*int32)(unsafe.Pointer(bp + 64)) > 16 || *(*int32)(unsafe.Pointer(bp + 64)) < 2 || libc.Xstrncmp(tls, ts+26554, zOpt, uint64(*(*int32)(unsafe.Pointer(bp + 64)))) != 0) { 41685 tcl.XTcl_AppendResult(tls, interp, 41686 libc.VaList(bp, ts+26571, zOpt, 41687 ts+26585, 0)) 41688 return TCL_ERROR 41689 } 41690 if i == objc-1 { 41691 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26633, zOpt, ts+11945, 0)) 41692 return TCL_ERROR 41693 } 41694 41695 if int32(*(*int8)(unsafe.Pointer(zOpt + 1))) == 's' { 41696 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+68) != 0 { 41697 return TCL_ERROR 41698 } 41699 setSectorsize = 1 41700 } else { 41701 var j int32 41702 41703 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+72, bp+80) != 0 { 41704 return TCL_ERROR 41705 } 41706 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 72)); j++ { 41707 var rc int32 41708 41709 var pFlag uintptr = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(j)*8))) 41710 (*Tcl_Obj)(unsafe.Pointer(pFlag)).FrefCount++ 41711 tcl.XTcl_UtfToLower(tls, tcl.XTcl_GetString(tls, pFlag)) 41712 41713 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 41714 interp, pFlag, bp+88, int32(unsafe.Sizeof(DeviceFlag{})), ts+26664, 0, bp+312) 41715 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 41716 var _objPtr uintptr = pFlag 41717 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 41718 tcl.XTclFreeObj(tls, _objPtr) 41719 } 41720 } 41721 if rc != 0 { 41722 return TCL_ERROR 41723 } 41724 41725 iDc = iDc | (*DeviceFlag)(unsafe.Pointer(bp+88+uintptr(*(*int32)(unsafe.Pointer(bp + 312)))*16)).FiValue 41726 } 41727 setDeviceChar = 1 41728 } 41729 } 41730 41731 if setDeviceChar != 0 { 41732 *(*int32)(unsafe.Pointer(piDeviceChar)) = iDc 41733 } 41734 if setSectorsize != 0 { 41735 *(*int32)(unsafe.Pointer(piSectorSize)) = *(*int32)(unsafe.Pointer(bp + 68)) 41736 } 41737 41738 return TCL_OK 41739 } 41740 41741 type DeviceFlag = struct { 41742 FzName uintptr 41743 FiValue int32 41744 F__ccgo_pad1 [4]byte 41745 } 41746 41747 func crashNowCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41748 if objc != 1 { 41749 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41750 return TCL_ERROR 41751 } 41752 writeListSync(tls, uintptr(0), 1) 41753 41754 return TCL_OK 41755 } 41756 41757 func crashEnableCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41758 bp := tls.Alloc(8) 41759 defer tls.Free(8) 41760 41761 *(*int32)(unsafe.Pointer(bp + 4)) = 0 41762 41763 if objc != 2 && objc != 3 { 41764 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26677) 41765 return TCL_ERROR 41766 } 41767 41768 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 41769 return TCL_ERROR 41770 } 41771 if objc == 3 && tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 41772 return TCL_ERROR 41773 } 41774 41775 if *(*int32)(unsafe.Pointer(bp)) != 0 && crashVfs.FpAppData != 0 || !(*(*int32)(unsafe.Pointer(bp)) != 0) && !(int32(crashVfs.FpAppData) != 0) { 41776 return TCL_OK 41777 } 41778 41779 if crashVfs.FpAppData == uintptr(0) { 41780 var pOriginalVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 41781 crashVfs.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FmxPathname 41782 crashVfs.FpAppData = pOriginalVfs 41783 crashVfs.FszOsFile = int32(uint64(unsafe.Sizeof(CrashFile{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FszOsFile)) 41784 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&crashVfs)), *(*int32)(unsafe.Pointer(bp + 4))) 41785 } else { 41786 crashVfs.FpAppData = uintptr(0) 41787 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&crashVfs))) 41788 } 41789 41790 return TCL_OK 41791 } 41792 41793 var crashVfs = sqlite3_vfs{ 41794 FiVersion: 2, 41795 FzName: ts + 26694, 41796 FxOpen: 0, 41797 FxDelete: 0, 41798 FxAccess: 0, 41799 FxFullPathname: 0, 41800 FxDlOpen: 0, 41801 FxDlError: 0, 41802 FxDlSym: 0, 41803 FxDlClose: 0, 41804 FxRandomness: 0, 41805 FxSleep: 0, 41806 FxCurrentTime: 0, 41807 FxGetLastError: 0, 41808 } 41809 41810 func crashParamsObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41811 bp := tls.Alloc(48) 41812 defer tls.Free(48) 41813 41814 var zCrashFile uintptr 41815 41816 *(*int32)(unsafe.Pointer(bp + 40)) = -1 41817 *(*int32)(unsafe.Pointer(bp + 44)) = -1 41818 41819 if !(objc < 3) { 41820 goto __1 41821 } 41822 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26700) 41823 goto error 41824 __1: 41825 ; 41826 zCrashFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+32) 41827 if !(uint64(*(*int32)(unsafe.Pointer(bp + 32))) >= uint64(unsafe.Sizeof([500]int8{}))) { 41828 goto __2 41829 } 41830 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26726, zCrashFile, ts+11945, 0)) 41831 goto error 41832 __2: 41833 ; 41834 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+36) != 0) { 41835 goto __3 41836 } 41837 goto error 41838 __3: 41839 ; 41840 if !(processDevSymArgs(tls, interp, objc-3, objv+1*8, bp+40, bp+44) != 0) { 41841 goto __4 41842 } 41843 return TCL_ERROR 41844 __4: 41845 ; 41846 if !(*(*int32)(unsafe.Pointer(bp + 40)) >= 0) { 41847 goto __5 41848 } 41849 g.FiDeviceCharacteristics = *(*int32)(unsafe.Pointer(bp + 40)) 41850 __5: 41851 ; 41852 if !(*(*int32)(unsafe.Pointer(bp + 44)) >= 0) { 41853 goto __6 41854 } 41855 g.FiSectorSize = *(*int32)(unsafe.Pointer(bp + 44)) 41856 __6: 41857 ; 41858 g.FiCrash = *(*int32)(unsafe.Pointer(bp + 36)) 41859 libc.Xmemcpy(tls, uintptr(unsafe.Pointer(&g))+28, zCrashFile, uint64(*(*int32)(unsafe.Pointer(bp + 32))+1)) 41860 sqlite3CrashTestEnable = 1 41861 return TCL_OK 41862 41863 error: 41864 return TCL_ERROR 41865 } 41866 41867 func devSymObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41868 bp := tls.Alloc(8) 41869 defer tls.Free(8) 41870 41871 *(*int32)(unsafe.Pointer(bp)) = -1 41872 *(*int32)(unsafe.Pointer(bp + 4)) = -1 41873 41874 if processDevSymArgs(tls, interp, objc-1, objv+1*8, bp, bp+4) != 0 { 41875 return TCL_ERROR 41876 } 41877 devsym_register(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 41878 41879 return TCL_OK 41880 } 41881 41882 func writeCrashObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41883 bp := tls.Alloc(4) 41884 defer tls.Free(4) 41885 41886 *(*int32)(unsafe.Pointer(bp)) = 0 41887 41888 if objc != 2 { 41889 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26750) 41890 return TCL_ERROR 41891 } 41892 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 41893 return TCL_ERROR 41894 } 41895 41896 devsym_crash_on_write(tls, *(*int32)(unsafe.Pointer(bp))) 41897 return TCL_OK 41898 } 41899 41900 func dsUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41901 if objc != 1 { 41902 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41903 return TCL_ERROR 41904 } 41905 41906 devsym_unregister(tls) 41907 return TCL_OK 41908 } 41909 41910 func jtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41911 bp := tls.Alloc(48) 41912 defer tls.Free(48) 41913 41914 var zParent uintptr = uintptr(0) 41915 41916 if objc != 2 && objc != 3 { 41917 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26757) 41918 return TCL_ERROR 41919 } 41920 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 41921 if objc == 3 { 41922 if libc.Xstrcmp(tls, zParent, ts+26779) != 0 { 41923 tcl.XTcl_AppendResult(tls, interp, 41924 libc.VaList(bp, ts+11851, zParent, ts+26788, 0)) 41925 return TCL_ERROR 41926 } 41927 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41928 } 41929 41930 if !(int32(*(*int8)(unsafe.Pointer(zParent))) != 0) { 41931 zParent = uintptr(0) 41932 } 41933 if jt_register(tls, zParent, libc.Bool32(objc == 3)) != 0 { 41934 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26808, 0)) 41935 return TCL_ERROR 41936 } 41937 41938 return TCL_OK 41939 } 41940 41941 func jtUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41942 if objc != 1 { 41943 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41944 return TCL_ERROR 41945 } 41946 41947 jt_unregister(tls) 41948 return TCL_OK 41949 } 41950 41951 func Sqlitetest6_Init(tls *libc.TLS, interp uintptr) int32 { 41952 tcl.XTcl_CreateObjCommand(tls, interp, ts+26829, *(*uintptr)(unsafe.Pointer(&struct { 41953 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41954 }{crashEnableCmd})), uintptr(0), uintptr(0)) 41955 tcl.XTcl_CreateObjCommand(tls, interp, ts+26850, *(*uintptr)(unsafe.Pointer(&struct { 41956 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41957 }{crashParamsObjCmd})), uintptr(0), uintptr(0)) 41958 tcl.XTcl_CreateObjCommand(tls, interp, ts+26870, *(*uintptr)(unsafe.Pointer(&struct { 41959 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41960 }{crashNowCmd})), uintptr(0), uintptr(0)) 41961 tcl.XTcl_CreateObjCommand(tls, interp, ts+26888, *(*uintptr)(unsafe.Pointer(&struct { 41962 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41963 }{devSymObjCmd})), uintptr(0), uintptr(0)) 41964 tcl.XTcl_CreateObjCommand(tls, interp, ts+26912, *(*uintptr)(unsafe.Pointer(&struct { 41965 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41966 }{writeCrashObjCmd})), uintptr(0), uintptr(0)) 41967 tcl.XTcl_CreateObjCommand(tls, interp, ts+26935, *(*uintptr)(unsafe.Pointer(&struct { 41968 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41969 }{dsUnregisterObjCmd})), uintptr(0), uintptr(0)) 41970 tcl.XTcl_CreateObjCommand(tls, interp, ts+26953, *(*uintptr)(unsafe.Pointer(&struct { 41971 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41972 }{jtObjCmd})), uintptr(0), uintptr(0)) 41973 tcl.XTcl_CreateObjCommand(tls, interp, ts+26969, *(*uintptr)(unsafe.Pointer(&struct { 41974 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41975 }{jtUnregisterObjCmd})), uintptr(0), uintptr(0)) 41976 return TCL_OK 41977 } 41978 41979 type Thread1 = struct { 41980 FzFilename uintptr 41981 FxOp uintptr 41982 FzArg uintptr 41983 Fopnum int32 41984 Fbusy int32 41985 Fcompleted int32 41986 F__ccgo_pad1 [4]byte 41987 Fdb uintptr 41988 FpStmt uintptr 41989 FzErr uintptr 41990 FzStaticErr uintptr 41991 Frc int32 41992 Fargc int32 41993 Fargv [100]uintptr 41994 Fcolv [100]uintptr 41995 FnServer int32 41996 F__ccgo_pad2 [4]byte 41997 } 41998 41999 var threadset1 [26]Thread1 42000 42001 func client_main(tls *libc.TLS, pArg uintptr) uintptr { 42002 var p uintptr = pArg 42003 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 42004 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42005 } 42006 sqlite3_client_open(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename, p+40) 42007 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) { 42008 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread1)(unsafe.Pointer(p)).Fdb)) 42009 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42010 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 42011 } 42012 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42013 (*Thread1)(unsafe.Pointer(p)).Fcompleted = 1 42014 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42015 libc.Xsched_yield(tls) 42016 } 42017 for (*Thread1)(unsafe.Pointer(p)).FxOp != 0 { 42018 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 42019 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 42020 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 42021 } 42022 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread1)(unsafe.Pointer(p)).FxOp})).f(tls, p) 42023 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 42024 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42025 libc.Xsched_yield(tls) 42026 } 42027 } 42028 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 42029 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42030 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42031 } 42032 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 42033 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42034 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 42035 } 42036 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 42037 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 42038 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 42039 } 42040 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 42041 sqlite3.Xsqlite3_thread_cleanup(tls) 42042 return uintptr(0) 42043 } 42044 42045 func parse_client_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 42046 bp := tls.Alloc(16) 42047 defer tls.Free(16) 42048 42049 if zArg == uintptr(0) || int32(*(*int8)(unsafe.Pointer(zArg))) == 0 || int32(*(*int8)(unsafe.Pointer(zArg + 1))) != 0 || !(__sbistype(tls, int32(uint8(*(*int8)(unsafe.Pointer(zArg)))), uint64(X_CTYPE_U)) != 0) { 42050 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 42051 return -1 42052 } 42053 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 42054 } 42055 42056 func tcl_client_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42057 bp := tls.Alloc(96) 42058 defer tls.Free(96) 42059 42060 var i int32 42061 42062 var rc int32 42063 42064 if argc != 3 { 42065 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42066 ts+25780, 0)) 42067 return TCL_ERROR 42068 } 42069 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42070 if i < 0 { 42071 return TCL_ERROR 42072 } 42073 if threadset1[i].Fbusy != 0 { 42074 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 42075 return TCL_ERROR 42076 } 42077 threadset1[i].Fbusy = 1 42078 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 42079 threadset1[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42080 threadset1[i].Fopnum = 1 42081 threadset1[i].Fcompleted = 0 42082 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 42083 f func(*libc.TLS, uintptr) uintptr 42084 }{client_main})), uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42085 if rc != 0 { 42086 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 42087 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 42088 threadset1[i].Fbusy = 0 42089 return TCL_ERROR 42090 } 42091 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 42092 if threadset1[i].FnServer == 0 { 42093 threadset1[i].FnServer = 1 42094 sqlite3_server_start2(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688+1680) 42095 } 42096 return TCL_OK 42097 } 42098 42099 func client_wait(tls *libc.TLS, p uintptr) { 42100 for (*Thread1)(unsafe.Pointer(p)).Fopnum > (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42101 libc.Xsched_yield(tls) 42102 } 42103 } 42104 42105 func tcl_client_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42106 bp := tls.Alloc(48) 42107 defer tls.Free(48) 42108 42109 var i int32 42110 42111 if argc != 2 { 42112 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42113 ts+25849, 0)) 42114 return TCL_ERROR 42115 } 42116 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42117 if i < 0 { 42118 return TCL_ERROR 42119 } 42120 if !(threadset1[i].Fbusy != 0) { 42121 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42122 return TCL_ERROR 42123 } 42124 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42125 return TCL_OK 42126 } 42127 42128 func stop_thread(tls *libc.TLS, p uintptr) { 42129 client_wait(tls, p) 42130 (*Thread1)(unsafe.Pointer(p)).FxOp = uintptr(0) 42131 (*Thread1)(unsafe.Pointer(p)).Fopnum++ 42132 client_wait(tls, p) 42133 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzArg) 42134 (*Thread1)(unsafe.Pointer(p)).FzArg = uintptr(0) 42135 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename) 42136 (*Thread1)(unsafe.Pointer(p)).FzFilename = uintptr(0) 42137 (*Thread1)(unsafe.Pointer(p)).Fbusy = 0 42138 } 42139 42140 func tcl_client_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42141 bp := tls.Alloc(48) 42142 defer tls.Free(48) 42143 42144 var i int32 42145 42146 if argc != 2 { 42147 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42148 ts+25849, 0)) 42149 return TCL_ERROR 42150 } 42151 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 42152 for i = 0; i < N_THREAD; i++ { 42153 if threadset1[i].Fbusy != 0 { 42154 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42155 } 42156 } 42157 } else { 42158 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42159 if i < 0 { 42160 return TCL_ERROR 42161 } 42162 if !(threadset1[i].Fbusy != 0) { 42163 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42164 return TCL_ERROR 42165 } 42166 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42167 } 42168 42169 for i = 0; i < N_THREAD && threadset1[i].Fbusy == 0; i++ { 42170 } 42171 if i >= N_THREAD { 42172 sqlite3_server_stop(tls) 42173 for 1 != 0 { 42174 for i = 0; i < N_THREAD && threadset1[i].FnServer == 0; i++ { 42175 } 42176 if i == N_THREAD { 42177 break 42178 } 42179 libc.Xsched_yield(tls) 42180 } 42181 } 42182 return TCL_OK 42183 } 42184 42185 func tcl_client_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42186 bp := tls.Alloc(172) 42187 defer tls.Free(172) 42188 42189 var i int32 42190 42191 if argc != 2 { 42192 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42193 ts+25849, 0)) 42194 return TCL_ERROR 42195 } 42196 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42197 if i < 0 { 42198 return TCL_ERROR 42199 } 42200 if !(threadset1[i].Fbusy != 0) { 42201 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42202 return TCL_ERROR 42203 } 42204 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42205 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset1[i].Fargc)) 42206 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 42207 return TCL_OK 42208 } 42209 42210 func tcl_client_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42211 bp := tls.Alloc(84) 42212 defer tls.Free(84) 42213 42214 var i int32 42215 42216 if argc != 3 { 42217 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42218 ts+25868, 0)) 42219 return TCL_ERROR 42220 } 42221 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42222 if i < 0 { 42223 return TCL_ERROR 42224 } 42225 if !(threadset1[i].Fbusy != 0) { 42226 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42227 return TCL_ERROR 42228 } 42229 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 42230 return TCL_ERROR 42231 } 42232 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42233 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 42234 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 42235 return TCL_ERROR 42236 } 42237 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)) 42238 return TCL_OK 42239 } 42240 42241 func tcl_client_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42242 bp := tls.Alloc(84) 42243 defer tls.Free(84) 42244 42245 var i int32 42246 42247 if argc != 3 { 42248 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42249 ts+25868, 0)) 42250 return TCL_ERROR 42251 } 42252 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42253 if i < 0 { 42254 return TCL_ERROR 42255 } 42256 if !(threadset1[i].Fbusy != 0) { 42257 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42258 return TCL_ERROR 42259 } 42260 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 42261 return TCL_ERROR 42262 } 42263 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42264 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 42265 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 42266 return TCL_ERROR 42267 } 42268 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)) 42269 return TCL_OK 42270 } 42271 42272 func tcl_client_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42273 bp := tls.Alloc(64) 42274 defer tls.Free(64) 42275 42276 var i int32 42277 var zName uintptr 42278 42279 if argc != 2 { 42280 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42281 ts+25849, 0)) 42282 return TCL_ERROR 42283 } 42284 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42285 if i < 0 { 42286 return TCL_ERROR 42287 } 42288 if !(threadset1[i].Fbusy != 0) { 42289 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42290 return TCL_ERROR 42291 } 42292 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42293 zName = sqlite3.Xsqlite3ErrName(tls, threadset1[i].Frc) 42294 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 42295 return TCL_OK 42296 } 42297 42298 func tcl_client_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42299 bp := tls.Alloc(64) 42300 defer tls.Free(64) 42301 42302 var i int32 42303 42304 if argc != 2 { 42305 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42306 ts+25849, 0)) 42307 return TCL_ERROR 42308 } 42309 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42310 if i < 0 { 42311 return TCL_ERROR 42312 } 42313 if !(threadset1[i].Fbusy != 0) { 42314 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42315 return TCL_ERROR 42316 } 42317 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42318 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset1[i].FzErr, 0)) 42319 return TCL_OK 42320 } 42321 42322 func do_compile1(tls *libc.TLS, p uintptr) { 42323 if (*Thread1)(unsafe.Pointer(p)).Fdb == uintptr(0) { 42324 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 42325 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42326 return 42327 } 42328 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 42329 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42330 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42331 } 42332 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_prepare(tls, (*Thread1)(unsafe.Pointer(p)).Fdb, (*Thread1)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 42333 } 42334 42335 func tcl_client_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42336 bp := tls.Alloc(56) 42337 defer tls.Free(56) 42338 42339 var i int32 42340 if argc != 3 { 42341 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42342 ts+25921, 0)) 42343 return TCL_ERROR 42344 } 42345 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42346 if i < 0 { 42347 return TCL_ERROR 42348 } 42349 if !(threadset1[i].Fbusy != 0) { 42350 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42351 return TCL_ERROR 42352 } 42353 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42354 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile1})) 42355 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42356 threadset1[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42357 threadset1[i].Fopnum++ 42358 return TCL_OK 42359 } 42360 42361 func do_step1(tls *libc.TLS, p uintptr) { 42362 var i int32 42363 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42364 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 42365 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42366 return 42367 } 42368 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_step(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42369 if (*Thread1)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 42370 (*Thread1)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42371 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt); i++ { 42372 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 42373 } 42374 for i = 0; i < (*Thread1)(unsafe.Pointer(p)).Fargc; i++ { 42375 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 42376 } 42377 } 42378 } 42379 42380 func tcl_client_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42381 bp := tls.Alloc(48) 42382 defer tls.Free(48) 42383 42384 var i int32 42385 if argc != 2 { 42386 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42387 ts+25958, 0)) 42388 return TCL_ERROR 42389 } 42390 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42391 if i < 0 { 42392 return TCL_ERROR 42393 } 42394 if !(threadset1[i].Fbusy != 0) { 42395 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42396 return TCL_ERROR 42397 } 42398 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42399 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step1})) 42400 threadset1[i].Fopnum++ 42401 return TCL_OK 42402 } 42403 42404 func do_finalize1(tls *libc.TLS, p uintptr) { 42405 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42406 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 42407 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42408 return 42409 } 42410 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42411 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42412 } 42413 42414 func tcl_client_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42415 bp := tls.Alloc(48) 42416 defer tls.Free(48) 42417 42418 var i int32 42419 if argc != 2 { 42420 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42421 ts+25958, 0)) 42422 return TCL_ERROR 42423 } 42424 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42425 if i < 0 { 42426 return TCL_ERROR 42427 } 42428 if !(threadset1[i].Fbusy != 0) { 42429 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42430 return TCL_ERROR 42431 } 42432 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42433 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize1})) 42434 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42435 threadset1[i].FzArg = uintptr(0) 42436 threadset1[i].Fopnum++ 42437 return TCL_OK 42438 } 42439 42440 func do_reset(tls *libc.TLS, p uintptr) { 42441 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42442 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 42443 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42444 return 42445 } 42446 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_reset(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42447 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42448 } 42449 42450 func tcl_client_reset(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42451 bp := tls.Alloc(48) 42452 defer tls.Free(48) 42453 42454 var i int32 42455 if argc != 2 { 42456 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42457 ts+25958, 0)) 42458 return TCL_ERROR 42459 } 42460 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42461 if i < 0 { 42462 return TCL_ERROR 42463 } 42464 if !(threadset1[i].Fbusy != 0) { 42465 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42466 return TCL_ERROR 42467 } 42468 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42469 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_reset})) 42470 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42471 threadset1[i].FzArg = uintptr(0) 42472 threadset1[i].Fopnum++ 42473 return TCL_OK 42474 } 42475 42476 func tcl_client_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42477 bp := tls.Alloc(64) 42478 defer tls.Free(64) 42479 42480 var i int32 42481 var j int32 42482 var temp uintptr 42483 if argc != 3 { 42484 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42485 ts+25963, 0)) 42486 return TCL_ERROR 42487 } 42488 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42489 if i < 0 { 42490 return TCL_ERROR 42491 } 42492 if !(threadset1[i].Fbusy != 0) { 42493 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42494 return TCL_ERROR 42495 } 42496 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42497 j = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 42498 if j < 0 { 42499 return TCL_ERROR 42500 } 42501 if !(threadset1[j].Fbusy != 0) { 42502 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 42503 return TCL_ERROR 42504 } 42505 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(j)*1688) 42506 temp = threadset1[i].Fdb 42507 threadset1[i].Fdb = threadset1[j].Fdb 42508 threadset1[j].Fdb = temp 42509 return TCL_OK 42510 } 42511 42512 func Sqlitetest7_Init(tls *libc.TLS, interp uintptr) int32 { 42513 var i int32 42514 42515 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd6))/uint64(unsafe.Sizeof(struct { 42516 FzName uintptr 42517 FxProc uintptr 42518 }{})); i++ { 42519 tcl.XTcl_CreateCommand(tls, interp, aCmd6[i].FzName, aCmd6[i].FxProc, uintptr(0), uintptr(0)) 42520 } 42521 return TCL_OK 42522 } 42523 42524 var aCmd6 = [13]struct { 42525 FzName uintptr 42526 FxProc uintptr 42527 }{ 42528 {FzName: ts + 26987, FxProc: 0}, 42529 {FzName: ts + 27001, FxProc: 0}, 42530 {FzName: ts + 27013, FxProc: 0}, 42531 {FzName: ts + 27025, FxProc: 0}, 42532 {FzName: ts + 27037, FxProc: 0}, 42533 {FzName: ts + 27049, FxProc: 0}, 42534 {FzName: ts + 27064, FxProc: 0}, 42535 {FzName: ts + 27078, FxProc: 0}, 42536 {FzName: ts + 27091, FxProc: 0}, 42537 {FzName: ts + 27106, FxProc: 0}, 42538 {FzName: ts + 27118, FxProc: 0}, 42539 {FzName: ts + 27131, FxProc: 0}, 42540 {FzName: ts + 27147, FxProc: 0}, 42541 } 42542 42543 type echo_vtab1 = struct { 42544 Fbase sqlite3_vtab 42545 Finterp uintptr 42546 Fdb uintptr 42547 FisPattern int32 42548 FinTransaction int32 42549 FzThis uintptr 42550 FzTableName uintptr 42551 FzLogName uintptr 42552 FnCol int32 42553 F__ccgo_pad1 [4]byte 42554 FaIndex uintptr 42555 FaCol uintptr 42556 } 42557 42558 type echo_vtab = echo_vtab1 42559 type echo_cursor1 = struct { 42560 Fbase sqlite3_vtab_cursor 42561 FpStmt uintptr 42562 } 42563 42564 type echo_cursor = echo_cursor1 42565 42566 func simulateVtabError(tls *libc.TLS, p uintptr, zMethod uintptr) int32 { 42567 bp := tls.Alloc(152) 42568 defer tls.Free(152) 42569 42570 var zErr uintptr 42571 42572 *(*int8)(unsafe.Pointer(bp + 24 + 127)) = int8(0) 42573 sqlite3.Xsqlite3_snprintf(tls, 127, bp+24, ts+27159, libc.VaList(bp, zMethod, (*echo_vtab)(unsafe.Pointer(p)).FzTableName)) 42574 zErr = tcl.XTcl_GetVar2(tls, (*echo_vtab)(unsafe.Pointer(p)).Finterp, bp+24, uintptr(0), TCL_GLOBAL_ONLY) 42575 if zErr != 0 { 42576 (*echo_vtab)(unsafe.Pointer(p)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+16, zErr)) 42577 } 42578 return libc.Bool32(zErr != uintptr(0)) 42579 } 42580 42581 func dequoteString(tls *libc.TLS, z uintptr) { 42582 var quote int32 42583 var i int32 42584 var j int32 42585 if z == uintptr(0) { 42586 return 42587 } 42588 quote = int32(*(*int8)(unsafe.Pointer(z))) 42589 switch quote { 42590 case '\'': 42591 break 42592 case '"': 42593 break 42594 case '`': 42595 break 42596 case '[': 42597 quote = ']' 42598 break 42599 default: 42600 return 42601 } 42602 i = 1 42603 j = 0 42604 for ; *(*int8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 42605 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == quote { 42606 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i+1)))) == quote { 42607 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(quote) 42608 i++ 42609 } else { 42610 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(0) 42611 break 42612 } 42613 } else { 42614 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 42615 } 42616 } 42617 } 42618 42619 func getColumnNames(tls *libc.TLS, db uintptr, zTab uintptr, paCol uintptr, pnCol uintptr) int32 { 42620 bp := tls.Alloc(24) 42621 defer tls.Free(24) 42622 42623 var aCol uintptr 42624 var zSql uintptr 42625 42626 var rc int32 42627 var nCol int32 42628 var zName uintptr 42629 var ii int32 42630 var nBytes int32 42631 var zSpace uintptr 42632 aCol = uintptr(0) 42633 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42634 rc = SQLITE_OK 42635 nCol = 0 42636 42637 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27203, libc.VaList(bp, zTab)) 42638 if !!(zSql != 0) { 42639 goto __1 42640 } 42641 rc = SQLITE_NOMEM 42642 goto out 42643 __1: 42644 ; 42645 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42646 sqlite3.Xsqlite3_free(tls, zSql) 42647 42648 if !(rc == SQLITE_OK) { 42649 goto __2 42650 } 42651 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42652 42653 nBytes = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(nCol)) 42654 ii = 0 42655 __3: 42656 if !(ii < nCol) { 42657 goto __5 42658 } 42659 zName = sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii) 42660 if !!(zName != 0) { 42661 goto __6 42662 } 42663 rc = SQLITE_NOMEM 42664 goto out 42665 __6: 42666 ; 42667 nBytes = nBytes + (int32(libc.Xstrlen(tls, zName)) + 1) 42668 goto __4 42669 __4: 42670 ii++ 42671 goto __3 42672 goto __5 42673 __5: 42674 ; 42675 aCol = sqlite3.Xsqlite3MallocZero(tls, uint64(nBytes)) 42676 if !!(aCol != 0) { 42677 goto __7 42678 } 42679 rc = SQLITE_NOMEM 42680 goto out 42681 __7: 42682 ; 42683 zSpace = aCol + uintptr(nCol)*8 42684 ii = 0 42685 __8: 42686 if !(ii < nCol) { 42687 goto __10 42688 } 42689 *(*uintptr)(unsafe.Pointer(aCol + uintptr(ii)*8)) = zSpace 42690 sqlite3.Xsqlite3_snprintf(tls, nBytes, zSpace, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii))) 42691 zSpace += uintptr(int32(libc.Xstrlen(tls, zSpace)) + 1) 42692 goto __9 42693 __9: 42694 ii++ 42695 goto __8 42696 goto __10 42697 __10: 42698 ; 42699 __2: 42700 ; 42701 *(*uintptr)(unsafe.Pointer(paCol)) = aCol 42702 *(*int32)(unsafe.Pointer(pnCol)) = nCol 42703 42704 out: 42705 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42706 return rc 42707 } 42708 42709 func getIndexArray(tls *libc.TLS, db uintptr, zTab uintptr, nCol int32, paIndex uintptr) int32 { 42710 bp := tls.Alloc(32) 42711 defer tls.Free(32) 42712 42713 var aIndex uintptr 42714 var rc int32 42715 var zSql uintptr 42716 var cid int32 42717 var zIdx uintptr 42718 42719 var rc2 int32 42720 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42721 aIndex = uintptr(0) 42722 42723 aIndex = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(nCol)) 42724 if !!(aIndex != 0) { 42725 goto __1 42726 } 42727 rc = SQLITE_NOMEM 42728 goto get_index_array_out 42729 __1: 42730 ; 42731 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27220, libc.VaList(bp, zTab)) 42732 if !!(zSql != 0) { 42733 goto __2 42734 } 42735 rc = SQLITE_NOMEM 42736 goto get_index_array_out 42737 __2: 42738 ; 42739 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42740 sqlite3.Xsqlite3_free(tls, zSql) 42741 42742 __3: 42743 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW) { 42744 goto __4 42745 } 42746 zIdx = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 42747 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 42748 if !(zIdx == uintptr(0)) { 42749 goto __5 42750 } 42751 goto __3 42752 __5: 42753 ; 42754 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27242, libc.VaList(bp+8, zIdx)) 42755 if !!(zSql != 0) { 42756 goto __6 42757 } 42758 rc = SQLITE_NOMEM 42759 goto get_index_array_out 42760 __6: 42761 ; 42762 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+24, uintptr(0)) 42763 sqlite3.Xsqlite3_free(tls, zSql) 42764 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW) { 42765 goto __7 42766 } 42767 cid = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 42768 42769 *(*int32)(unsafe.Pointer(aIndex + uintptr(cid)*4)) = 1 42770 __7: 42771 ; 42772 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0) { 42773 goto __8 42774 } 42775 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 42776 __8: 42777 ; 42778 if !(rc != SQLITE_OK) { 42779 goto __9 42780 } 42781 goto get_index_array_out 42782 __9: 42783 ; 42784 goto __3 42785 __4: 42786 ; 42787 get_index_array_out: 42788 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { 42789 goto __10 42790 } 42791 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42792 if !(rc == SQLITE_OK) { 42793 goto __11 42794 } 42795 rc = rc2 42796 __11: 42797 ; 42798 __10: 42799 ; 42800 if !(rc != SQLITE_OK) { 42801 goto __12 42802 } 42803 sqlite3.Xsqlite3_free(tls, aIndex) 42804 aIndex = uintptr(0) 42805 __12: 42806 ; 42807 *(*uintptr)(unsafe.Pointer(paIndex)) = aIndex 42808 return rc 42809 } 42810 42811 func appendToEchoModule(tls *libc.TLS, interp uintptr, zArg uintptr) { 42812 var flags int32 = TCL_APPEND_VALUE | TCL_LIST_ELEMENT | TCL_GLOBAL_ONLY 42813 tcl.XTcl_SetVar2(tls, interp, ts+27264, uintptr(0), func() uintptr { 42814 if zArg != 0 { 42815 return zArg 42816 } 42817 return ts + 584 42818 }(), flags) 42819 } 42820 42821 func echoDeclareVtab(tls *libc.TLS, pVtab uintptr, db uintptr) int32 { 42822 bp := tls.Alloc(8) 42823 defer tls.Free(8) 42824 42825 var rc int32 = SQLITE_OK 42826 42827 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 { 42828 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 42829 rc = sqlite3.Xsqlite3_prepare(tls, db, 42830 ts+27276, 42831 -1, bp, uintptr(0)) 42832 if rc == SQLITE_OK { 42833 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, -1, uintptr(0)) 42834 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) == SQLITE_ROW { 42835 var rc2 int32 42836 var zCreateTable uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 42837 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 42838 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 42839 if rc == SQLITE_OK { 42840 rc = rc2 42841 } 42842 } else { 42843 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 42844 if rc == SQLITE_OK { 42845 rc = SQLITE_ERROR 42846 } 42847 } 42848 if rc == SQLITE_OK { 42849 rc = getColumnNames(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, pVtab+88, pVtab+72) 42850 } 42851 if rc == SQLITE_OK { 42852 rc = getIndexArray(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, (*echo_vtab)(unsafe.Pointer(pVtab)).FnCol, pVtab+80) 42853 } 42854 } 42855 } 42856 42857 return rc 42858 } 42859 42860 func echoDestructor(tls *libc.TLS, pVtab uintptr) int32 { 42861 var p uintptr = pVtab 42862 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaIndex) 42863 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaCol) 42864 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis) 42865 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzTableName) 42866 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzLogName) 42867 sqlite3.Xsqlite3_free(tls, p) 42868 return 0 42869 } 42870 42871 type EchoModule1 = struct { 42872 Finterp uintptr 42873 Fdb uintptr 42874 } 42875 42876 type EchoModule = EchoModule1 42877 42878 func echoConstructor(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42879 bp := tls.Alloc(32) 42880 defer tls.Free(32) 42881 42882 var rc int32 42883 var i int32 42884 var pVtab uintptr 42885 42886 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_vtab{}))) 42887 if !(pVtab != 0) { 42888 return SQLITE_NOMEM 42889 } 42890 (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp = (*EchoModule)(unsafe.Pointer(pAux)).Finterp 42891 (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb = db 42892 42893 (*echo_vtab)(unsafe.Pointer(pVtab)).FzThis = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42894 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzThis) != 0) { 42895 echoDestructor(tls, pVtab) 42896 return SQLITE_NOMEM 42897 } 42898 42899 if argc > 3 { 42900 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 42901 dequoteString(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 42902 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 && int32(*(*int8)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName))) == '*' { 42903 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)), (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName+1)) 42904 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 42905 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = z 42906 (*echo_vtab)(unsafe.Pointer(pVtab)).FisPattern = 1 42907 } 42908 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) != 0) { 42909 echoDestructor(tls, pVtab) 42910 return SQLITE_NOMEM 42911 } 42912 } 42913 42914 for i = 0; i < argc; i++ { 42915 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 42916 } 42917 42918 rc = echoDeclareVtab(tls, pVtab, db) 42919 if rc != SQLITE_OK { 42920 echoDestructor(tls, pVtab) 42921 return rc 42922 } 42923 42924 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 42925 return SQLITE_OK 42926 } 42927 42928 func echoCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42929 bp := tls.Alloc(24) 42930 defer tls.Free(24) 42931 42932 var rc int32 = SQLITE_OK 42933 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27345) 42934 rc = echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 42935 42936 if rc == SQLITE_OK && argc == 5 { 42937 var zSql uintptr 42938 var pVtab uintptr = *(*uintptr)(unsafe.Pointer(ppVtab)) 42939 (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) 42940 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27353, libc.VaList(bp+8, (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName)) 42941 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 42942 sqlite3.Xsqlite3_free(tls, zSql) 42943 if rc != SQLITE_OK { 42944 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, sqlite3.Xsqlite3_errmsg(tls, db))) 42945 } 42946 } 42947 42948 if *(*uintptr)(unsafe.Pointer(ppVtab)) != 0 && rc != SQLITE_OK { 42949 echoDestructor(tls, *(*uintptr)(unsafe.Pointer(ppVtab))) 42950 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 42951 } 42952 42953 if rc == SQLITE_OK { 42954 (*echo_vtab)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppVtab)))).FinTransaction = 1 42955 } 42956 42957 return rc 42958 } 42959 42960 func echoConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42961 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27377) 42962 return echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 42963 } 42964 42965 func echoDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 42966 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27386) 42967 return echoDestructor(tls, pVtab) 42968 } 42969 42970 func echoDestroy(tls *libc.TLS, pVtab uintptr) int32 { 42971 bp := tls.Alloc(8) 42972 defer tls.Free(8) 42973 42974 var rc int32 = SQLITE_OK 42975 var p uintptr = pVtab 42976 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27398) 42977 42978 if p != 0 && (*echo_vtab)(unsafe.Pointer(p)).FzLogName != 0 { 42979 var zSql uintptr 42980 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27407, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzLogName)) 42981 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 42982 sqlite3.Xsqlite3_free(tls, zSql) 42983 } 42984 42985 if rc == SQLITE_OK { 42986 rc = echoDestructor(tls, pVtab) 42987 } 42988 return rc 42989 } 42990 42991 func echoOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 42992 var pCur uintptr 42993 if simulateVtabError(tls, pVTab, ts+27421) != 0 { 42994 return SQLITE_ERROR 42995 } 42996 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_cursor{}))) 42997 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 42998 return func() int32 { 42999 if pCur != 0 { 43000 return SQLITE_OK 43001 } 43002 return SQLITE_NOMEM 43003 }() 43004 } 43005 43006 func echoClose(tls *libc.TLS, cur uintptr) int32 { 43007 var rc int32 43008 var pCur uintptr = cur 43009 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt 43010 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43011 sqlite3.Xsqlite3_free(tls, pCur) 43012 rc = sqlite3.Xsqlite3_finalize(tls, pStmt) 43013 return rc 43014 } 43015 43016 func echoEof(tls *libc.TLS, cur uintptr) int32 { 43017 return func() int32 { 43018 if (*echo_cursor)(unsafe.Pointer(cur)).FpStmt != 0 { 43019 return 0 43020 } 43021 return 1 43022 }() 43023 } 43024 43025 func echoNext(tls *libc.TLS, cur uintptr) int32 { 43026 var rc int32 = SQLITE_OK 43027 var pCur uintptr = cur 43028 43029 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27427) != 0 { 43030 return SQLITE_ERROR 43031 } 43032 43033 if (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt != 0 { 43034 rc = sqlite3.Xsqlite3_step(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43035 if rc == SQLITE_ROW { 43036 rc = SQLITE_OK 43037 } else { 43038 rc = sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43039 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43040 } 43041 } 43042 43043 return rc 43044 } 43045 43046 func echoColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 43047 var iCol int32 = i + 1 43048 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 43049 43050 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27433) != 0 { 43051 return SQLITE_ERROR 43052 } 43053 43054 if !(pStmt != 0) { 43055 sqlite3.Xsqlite3_result_null(tls, ctx) 43056 } else { 43057 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, pStmt, iCol)) 43058 } 43059 return SQLITE_OK 43060 } 43061 43062 func echoRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 43063 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 43064 43065 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+2304) != 0 { 43066 return SQLITE_ERROR 43067 } 43068 43069 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 43070 return SQLITE_OK 43071 } 43072 43073 func hashString(tls *libc.TLS, zString uintptr) int32 { 43074 var val u32 = u32(0) 43075 var ii int32 43076 for ii = 0; *(*int8)(unsafe.Pointer(zString + uintptr(ii))) != 0; ii++ { 43077 val = val<<3 + u32(int32(*(*int8)(unsafe.Pointer(zString + uintptr(ii))))) 43078 } 43079 return int32(val & u32(0x7fffffff)) 43080 } 43081 43082 func echoFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 43083 var rc int32 43084 var i int32 43085 43086 var pCur uintptr = pVtabCursor 43087 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 43088 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 43089 43090 if simulateVtabError(tls, pVtab, ts+27441) != 0 { 43091 return SQLITE_ERROR 43092 } 43093 43094 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27441) 43095 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, idxStr) 43096 for i = 0; i < argc; i++ { 43097 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 43098 } 43099 43100 sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43101 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43102 43103 rc = sqlite3.Xsqlite3_prepare(tls, db, idxStr, -1, pCur+8, uintptr(0)) 43104 43105 for i = 0; rc == SQLITE_OK && i < argc; i++ { 43106 rc = sqlite3.Xsqlite3_bind_value(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt, i+1, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 43107 } 43108 43109 if rc == SQLITE_OK { 43110 rc = echoNext(tls, pVtabCursor) 43111 } 43112 43113 return rc 43114 } 43115 43116 func string_concat(tls *libc.TLS, pzStr uintptr, zAppend uintptr, doFree int32, pRc uintptr) { 43117 bp := tls.Alloc(24) 43118 defer tls.Free(24) 43119 43120 var zIn uintptr = *(*uintptr)(unsafe.Pointer(pzStr)) 43121 if !(zAppend != 0) && doFree != 0 && *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 43122 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 43123 } 43124 if *(*int32)(unsafe.Pointer(pRc)) != SQLITE_OK { 43125 sqlite3.Xsqlite3_free(tls, zIn) 43126 zIn = uintptr(0) 43127 } else { 43128 if zIn != 0 { 43129 var zTemp uintptr = zIn 43130 zIn = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp, zIn, zAppend)) 43131 sqlite3.Xsqlite3_free(tls, zTemp) 43132 } else { 43133 zIn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zAppend)) 43134 } 43135 if !(zIn != 0) { 43136 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 43137 } 43138 } 43139 *(*uintptr)(unsafe.Pointer(pzStr)) = zIn 43140 if doFree != 0 { 43141 sqlite3.Xsqlite3_free(tls, zAppend) 43142 } 43143 } 43144 43145 func echoSelectList(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) uintptr { 43146 bp := tls.Alloc(24) 43147 defer tls.Free(24) 43148 43149 var zRet uintptr = uintptr(0) 43150 if sqlite3.Xsqlite3_libversion_number(tls) < 3010000 { 43151 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27449, 0) 43152 } else { 43153 var i int32 43154 for i = 0; i < (*echo_vtab)(unsafe.Pointer(pTab)).FnCol; i++ { 43155 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed&(uint64(1)<<func() int32 { 43156 if i >= 63 { 43157 return 63 43158 } 43159 return i 43160 }()) != 0 { 43161 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27453, libc.VaList(bp, zRet, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pTab)).FaCol + uintptr(i)*8)))) 43162 } else { 43163 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27460, libc.VaList(bp+16, zRet)) 43164 } 43165 if !(zRet != 0) { 43166 break 43167 } 43168 } 43169 } 43170 return zRet 43171 } 43172 43173 func echoBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 43174 bp := tls.Alloc(100) 43175 defer tls.Free(100) 43176 43177 var ii int32 43178 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 43179 var zCol uintptr = uintptr(0) 43180 var zNew uintptr 43181 var nArg int32 = 0 43182 var zSep uintptr = ts + 9392 43183 var pVtab uintptr = tab 43184 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 43185 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43186 43187 var nRow int32 = 0 43188 var useIdx int32 = 0 43189 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 43190 var useCost int32 = 0 43191 var cost float64 = float64(0) 43192 var isIgnoreUsable int32 = 0 43193 if tcl.XTcl_GetVar2(tls, interp, ts+27469, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 43194 isIgnoreUsable = 1 43195 } 43196 43197 if simulateVtabError(tls, pVtab, ts+27495) != 0 { 43198 return SQLITE_ERROR 43199 } 43200 43201 if tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 43202 cost = libc.Xatof(tls, tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY)) 43203 useCost = 1 43204 } else { 43205 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27523, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43206 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43207 return SQLITE_NOMEM 43208 } 43209 *(*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)) 43210 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 43211 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 43212 return *(*int32)(unsafe.Pointer(bp + 96)) 43213 } 43214 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 43215 nRow = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 43216 *(*int32)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 43217 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 43218 return *(*int32)(unsafe.Pointer(bp + 96)) 43219 } 43220 } 43221 43222 zCol = echoSelectList(tls, pVtab, pIdxInfo) 43223 if !(zCol != 0) { 43224 return SQLITE_NOMEM 43225 } 43226 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27547, libc.VaList(bp+8, zCol, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43227 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43228 return SQLITE_NOMEM 43229 } 43230 43231 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 43232 var pConstraint uintptr 43233 var pUsage uintptr 43234 var iCol int32 43235 43236 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 43237 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 43238 43239 if !(isIgnoreUsable != 0) && !(int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) != 0) { 43240 continue 43241 } 43242 43243 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn 43244 if iCol < 0 || *(*int32)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaIndex + uintptr(iCol)*4)) != 0 { 43245 var zNewCol uintptr 43246 if iCol >= 0 { 43247 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 43248 } else { 43249 zNewCol = ts + 6427 43250 } 43251 var zOp uintptr = uintptr(0) 43252 useIdx = 1 43253 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) { 43254 case SQLITE_INDEX_CONSTRAINT_EQ: 43255 zOp = ts + 27570 43256 break 43257 fallthrough 43258 case SQLITE_INDEX_CONSTRAINT_LT: 43259 zOp = ts + 27572 43260 break 43261 fallthrough 43262 case SQLITE_INDEX_CONSTRAINT_GT: 43263 zOp = ts + 27574 43264 break 43265 fallthrough 43266 case SQLITE_INDEX_CONSTRAINT_LE: 43267 zOp = ts + 27576 43268 break 43269 fallthrough 43270 case SQLITE_INDEX_CONSTRAINT_GE: 43271 zOp = ts + 27579 43272 break 43273 fallthrough 43274 case SQLITE_INDEX_CONSTRAINT_MATCH: 43275 zOp = ts + 27582 43276 break 43277 fallthrough 43278 case SQLITE_INDEX_CONSTRAINT_LIKE: 43279 zOp = ts + 27587 43280 break 43281 fallthrough 43282 case SQLITE_INDEX_CONSTRAINT_GLOB: 43283 zOp = ts + 27592 43284 break 43285 fallthrough 43286 case SQLITE_INDEX_CONSTRAINT_REGEXP: 43287 zOp = ts + 6831 43288 break 43289 } 43290 if zOp != 0 { 43291 if int32(*(*int8)(unsafe.Pointer(zOp))) == 'L' { 43292 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27597, 43293 libc.VaList(bp+24, zSep, zNewCol)) 43294 } else { 43295 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27632, libc.VaList(bp+40, zSep, zNewCol, zOp)) 43296 } 43297 string_concat(tls, bp+88, zNew, 1, bp+96) 43298 zSep = ts + 9419 43299 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&nArg, 1) 43300 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 43301 } 43302 } 43303 } 43304 43305 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) { 43306 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn 43307 var zNewCol uintptr 43308 if iCol >= 0 { 43309 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 43310 } else { 43311 zNewCol = ts + 6427 43312 } 43313 var zDir uintptr 43314 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 43315 zDir = ts + 27644 43316 } else { 43317 zDir = ts + 27649 43318 } 43319 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27653, libc.VaList(bp+64, zNewCol, zDir)) 43320 string_concat(tls, bp+88, zNew, 1, bp+96) 43321 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 43322 } 43323 43324 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27495) 43325 43326 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(bp + 88))) 43327 43328 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43329 return *(*int32)(unsafe.Pointer(bp + 96)) 43330 } 43331 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = hashString(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 43332 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = *(*uintptr)(unsafe.Pointer(bp + 88)) 43333 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 43334 if useCost != 0 { 43335 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = cost 43336 } else if useIdx != 0 { 43337 for ii = 0; uint64(ii) < uint64(unsafe.Sizeof(int32(0)))*uint64(8)-uint64(1); ii++ { 43338 if nRow&(int32(1)<<ii) != 0 { 43339 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(ii) 43340 } 43341 } 43342 } else { 43343 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(nRow) 43344 } 43345 return *(*int32)(unsafe.Pointer(bp + 96)) 43346 } 43347 43348 func echoUpdate(tls *libc.TLS, tab uintptr, nData int32, apData uintptr, pRowid uintptr) int32 { 43349 bp := tls.Alloc(136) 43350 defer tls.Free(136) 43351 43352 var pVtab uintptr = tab 43353 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 43354 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 43355 43356 *(*uintptr)(unsafe.Pointer(bp + 128)) = uintptr(0) 43357 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 43358 var bindArgZero int32 = 0 43359 var bindArgOne int32 = 0 43360 var i int32 43361 43362 if simulateVtabError(tls, pVtab, ts+27669) != 0 { 43363 return SQLITE_ERROR 43364 } 43365 43366 if nData > 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 43367 var zSep uintptr = ts + 27677 43368 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27682, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43369 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 43370 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43371 } 43372 43373 bindArgOne = libc.Bool32(*(*uintptr)(unsafe.Pointer(apData + 1*8)) != 0 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER) 43374 bindArgZero = 1 43375 43376 if bindArgOne != 0 { 43377 string_concat(tls, bp+96, ts+27692, 0, bp+104) 43378 zSep = ts + 4758 43379 } 43380 for i = 2; i < nData; i++ { 43381 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) == uintptr(0) { 43382 continue 43383 } 43384 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, 43385 ts+27707, libc.VaList(bp+8, zSep, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(i-2)*8)), i)), 1, bp+104) 43386 zSep = ts + 4758 43387 } 43388 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, ts+27717, libc.VaList(bp+32, nData)), 1, bp+104) 43389 } else if nData == 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 43390 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27734, libc.VaList(bp+40, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43391 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 43392 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43393 } 43394 bindArgZero = 1 43395 } else if nData > 2 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_NULL { 43396 var ii int32 43397 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 43398 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 43399 43400 *(*uintptr)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_mprintf(tls, ts+27766, libc.VaList(bp+48, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43401 if !(*(*uintptr)(unsafe.Pointer(bp + 112)) != 0) { 43402 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43403 } 43404 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER { 43405 bindArgOne = 1 43406 *(*uintptr)(unsafe.Pointer(bp + 120)) = sqlite3.Xsqlite3_mprintf(tls, ts+3405, 0) 43407 string_concat(tls, bp+112, ts+6427, 0, bp+104) 43408 } 43409 43410 for ii = 2; ii < nData; ii++ { 43411 string_concat(tls, bp+112, 43412 sqlite3.Xsqlite3_mprintf(tls, ts+27783, libc.VaList(bp+56, func() uintptr { 43413 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 43414 return ts + 97 43415 } 43416 return ts + 584 43417 }(), *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(ii-2)*8)))), 1, bp+104) 43418 string_concat(tls, bp+120, 43419 sqlite3.Xsqlite3_mprintf(tls, ts+27788, libc.VaList(bp+72, func() uintptr { 43420 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 43421 return ts + 97 43422 } 43423 return ts + 584 43424 }(), ii)), 1, bp+104) 43425 } 43426 43427 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 112)), 1, bp+104) 43428 string_concat(tls, bp+96, ts+27794, 0, bp+104) 43429 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 120)), 1, bp+104) 43430 string_concat(tls, bp+96, ts+585, 0, bp+104) 43431 } else { 43432 return SQLITE_ERROR 43433 } 43434 43435 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 43436 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_prepare(tls, db, *(*uintptr)(unsafe.Pointer(bp + 96)), -1, bp+128, uintptr(0)) 43437 } 43438 43439 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 96))) 43440 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 43441 if bindArgZero != 0 { 43442 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), nData, *(*uintptr)(unsafe.Pointer(apData))) 43443 } 43444 if bindArgOne != 0 { 43445 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), 1, *(*uintptr)(unsafe.Pointer(apData + 1*8))) 43446 } 43447 for i = 2; i < nData && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK; i++ { 43448 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) != 0 { 43449 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), i, *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8))) 43450 } 43451 } 43452 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 43453 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 43454 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 43455 } else { 43456 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 43457 } 43458 } 43459 43460 if pRowid != 0 && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 43461 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 43462 } 43463 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 43464 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+88, sqlite3.Xsqlite3_errmsg(tls, db))) 43465 } 43466 43467 return *(*int32)(unsafe.Pointer(bp + 104)) 43468 } 43469 43470 func echoTransactionCall(tls *libc.TLS, tab uintptr, zCall uintptr) int32 { 43471 bp := tls.Alloc(8) 43472 defer tls.Free(8) 43473 43474 var z uintptr 43475 var pVtab uintptr = tab 43476 z = sqlite3.Xsqlite3_mprintf(tls, ts+27804, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43477 if z == uintptr(0) { 43478 return SQLITE_NOMEM 43479 } 43480 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, zCall) 43481 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, z) 43482 sqlite3.Xsqlite3_free(tls, z) 43483 return SQLITE_OK 43484 } 43485 43486 func echoBegin(tls *libc.TLS, tab uintptr) int32 { 43487 var rc int32 43488 var pVtab uintptr = tab 43489 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43490 var zVal uintptr 43491 43492 if simulateVtabError(tls, pVtab, ts+27813) != 0 { 43493 return SQLITE_ERROR 43494 } 43495 43496 rc = echoTransactionCall(tls, tab, ts+27813) 43497 43498 if rc == SQLITE_OK { 43499 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27820, uintptr(0), TCL_GLOBAL_ONLY) 43500 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 43501 rc = SQLITE_ERROR 43502 } 43503 } 43504 if rc == SQLITE_OK { 43505 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 1 43506 } 43507 return rc 43508 } 43509 43510 func echoSync(tls *libc.TLS, tab uintptr) int32 { 43511 var rc int32 43512 var pVtab uintptr = tab 43513 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43514 var zVal uintptr 43515 43516 if simulateVtabError(tls, pVtab, ts+27843) != 0 { 43517 return SQLITE_ERROR 43518 } 43519 43520 rc = echoTransactionCall(tls, tab, ts+27843) 43521 43522 if rc == SQLITE_OK { 43523 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27849, uintptr(0), TCL_GLOBAL_ONLY) 43524 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 43525 rc = -1 43526 } 43527 } 43528 return rc 43529 } 43530 43531 func echoCommit(tls *libc.TLS, tab uintptr) int32 { 43532 var pVtab uintptr = tab 43533 var rc int32 43534 43535 if simulateVtabError(tls, pVtab, ts+27871) != 0 { 43536 return SQLITE_ERROR 43537 } 43538 43539 sqlite3.Xsqlite3BeginBenignMalloc(tls) 43540 rc = echoTransactionCall(tls, tab, ts+27871) 43541 sqlite3.Xsqlite3EndBenignMalloc(tls) 43542 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 43543 return rc 43544 } 43545 43546 func echoRollback(tls *libc.TLS, tab uintptr) int32 { 43547 var rc int32 43548 var pVtab uintptr = tab 43549 43550 rc = echoTransactionCall(tls, tab, ts+27879) 43551 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 43552 return rc 43553 } 43554 43555 func overloadedGlobFunction(tls *libc.TLS, pContext uintptr, nArg int32, apArg uintptr) { 43556 bp := tls.Alloc(216) 43557 defer tls.Free(216) 43558 43559 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pContext) 43560 43561 var i int32 43562 var rc int32 43563 tcl.XTcl_DStringInit(tls, bp) 43564 tcl.XTcl_DStringAppendElement(tls, bp, ts+27889) 43565 for i = 0; i < nArg; i++ { 43566 tcl.XTcl_DStringAppendElement(tls, bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)))) 43567 } 43568 rc = tcl.XTcl_Eval(tls, interp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 43569 tcl.XTcl_DStringFree(tls, bp) 43570 if rc != 0 { 43571 sqlite3.Xsqlite3_result_error(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), -1) 43572 } else { 43573 sqlite3.Xsqlite3_result_text(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), 43574 -1, libc.UintptrFromInt32(-1)) 43575 } 43576 tcl.XTcl_ResetResult(tls, interp) 43577 } 43578 43579 func echoFindFunction(tls *libc.TLS, vtab uintptr, nArg int32, zFuncName uintptr, pxFunc uintptr, ppArg uintptr) int32 { 43580 bp := tls.Alloc(64) 43581 defer tls.Free(64) 43582 43583 var pVtab uintptr = vtab 43584 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43585 43586 if libc.Xstrcmp(tls, zFuncName, ts+27592) != 0 { 43587 return 0 43588 } 43589 if tcl.XTcl_GetCommandInfo(tls, interp, ts+27889, bp) == 0 { 43590 return 0 43591 } 43592 *(*uintptr)(unsafe.Pointer(pxFunc)) = *(*uintptr)(unsafe.Pointer(&struct { 43593 f func(*libc.TLS, uintptr, int32, uintptr) 43594 }{overloadedGlobFunction})) 43595 *(*uintptr)(unsafe.Pointer(ppArg)) = interp 43596 return 1 43597 } 43598 43599 func echoRename(tls *libc.TLS, vtab uintptr, zNewName uintptr) int32 { 43600 bp := tls.Alloc(24) 43601 defer tls.Free(24) 43602 43603 var rc int32 = SQLITE_OK 43604 var p uintptr = vtab 43605 43606 if simulateVtabError(tls, p, ts+27910) != 0 { 43607 return SQLITE_ERROR 43608 } 43609 43610 if (*echo_vtab)(unsafe.Pointer(p)).FisPattern != 0 { 43611 var nThis int32 = int32(libc.Xstrlen(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis)) 43612 var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27918, 43613 libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzTableName, zNewName, (*echo_vtab)(unsafe.Pointer(p)).FzTableName+uintptr(nThis))) 43614 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 43615 sqlite3.Xsqlite3_free(tls, zSql) 43616 } 43617 43618 return rc 43619 } 43620 43621 func echoSavepoint(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43622 return SQLITE_OK 43623 } 43624 43625 func echoRelease(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43626 return SQLITE_OK 43627 } 43628 43629 func echoRollbackTo(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43630 return SQLITE_OK 43631 } 43632 43633 var echoModule = sqlite3_module{ 43634 FiVersion: 1, 43635 FxCreate: 0, 43636 FxConnect: 0, 43637 FxBestIndex: 0, 43638 FxDisconnect: 0, 43639 FxDestroy: 0, 43640 FxOpen: 0, 43641 FxClose: 0, 43642 FxFilter: 0, 43643 FxNext: 0, 43644 FxEof: 0, 43645 FxColumn: 0, 43646 FxRowid: 0, 43647 FxUpdate: 0, 43648 FxBegin: 0, 43649 FxSync: 0, 43650 FxCommit: 0, 43651 FxRollback: 0, 43652 FxFindFunction: 0, 43653 FxRename: 0, 43654 } 43655 43656 var echoModuleV2 = sqlite3_module{ 43657 FiVersion: 2, 43658 FxCreate: 0, 43659 FxConnect: 0, 43660 FxBestIndex: 0, 43661 FxDisconnect: 0, 43662 FxDestroy: 0, 43663 FxOpen: 0, 43664 FxClose: 0, 43665 FxFilter: 0, 43666 FxNext: 0, 43667 FxEof: 0, 43668 FxColumn: 0, 43669 FxRowid: 0, 43670 FxUpdate: 0, 43671 FxBegin: 0, 43672 FxSync: 0, 43673 FxCommit: 0, 43674 FxRollback: 0, 43675 FxFindFunction: 0, 43676 FxRename: 0, 43677 FxSavepoint: 0, 43678 FxRelease: 0, 43679 FxRollbackTo: 0, 43680 } 43681 43682 func moduleDestroy(tls *libc.TLS, p uintptr) { 43683 var pMod uintptr = p 43684 sqlite3.Xsqlite3_create_function(tls, (*EchoModule)(unsafe.Pointer(pMod)).Fdb, ts+27948, 43685 SQLITE_ANY, 1, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 43686 sqlite3.Xsqlite3_free(tls, p) 43687 } 43688 43689 func register_echo_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43690 bp := tls.Alloc(8) 43691 defer tls.Free(8) 43692 43693 var rc int32 43694 43695 var pMod uintptr 43696 if objc != 2 { 43697 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 43698 return TCL_ERROR 43699 } 43700 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 43701 return TCL_ERROR 43702 } 43703 43704 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43705 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43706 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43707 rc = sqlite3.Xsqlite3_create_module_v2(tls, 43708 *(*uintptr)(unsafe.Pointer(bp)), ts+27986, uintptr(unsafe.Pointer(&echoModule)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43709 43710 if rc == SQLITE_OK { 43711 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43712 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43713 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43714 rc = sqlite3.Xsqlite3_create_module_v2(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+27991, 43715 uintptr(unsafe.Pointer(&echoModuleV2)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43716 } 43717 43718 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43719 return TCL_OK 43720 } 43721 43722 func declare_vtab(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43723 bp := tls.Alloc(8) 43724 defer tls.Free(8) 43725 43726 var rc int32 43727 if objc != 3 { 43728 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 43729 return TCL_ERROR 43730 } 43731 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 43732 return TCL_ERROR 43733 } 43734 rc = sqlite3.Xsqlite3_declare_vtab(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 43735 if rc != SQLITE_OK { 43736 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 43737 return TCL_ERROR 43738 } 43739 return TCL_OK 43740 } 43741 43742 func Sqlitetest8_Init(tls *libc.TLS, interp uintptr) int32 { 43743 var i int32 43744 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd2))/uint64(unsafe.Sizeof(struct { 43745 FzName uintptr 43746 FxProc uintptr 43747 FclientData uintptr 43748 }{})); i++ { 43749 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd2[i].FzName, 43750 aObjCmd2[i].FxProc, aObjCmd2[i].FclientData, uintptr(0)) 43751 } 43752 return TCL_OK 43753 } 43754 43755 var aObjCmd2 = [2]struct { 43756 FzName uintptr 43757 FxProc uintptr 43758 FclientData uintptr 43759 }{ 43760 {FzName: ts + 27999, FxProc: 0}, 43761 {FzName: ts + 28020, FxProc: 0}, 43762 } 43763 43764 func c_collation_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43765 bp := tls.Alloc(32) 43766 defer tls.Free(32) 43767 43768 var zErrFunction uintptr 43769 43770 var rc int32 43771 zErrFunction = ts + 28041 43772 if !(objc != 1) { 43773 goto __1 43774 } 43775 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43776 return TCL_ERROR 43777 __1: 43778 ; 43779 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 43780 if !(rc != SQLITE_OK) { 43781 goto __2 43782 } 43783 zErrFunction = ts + 21460 43784 goto error_out 43785 __2: 43786 ; 43787 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), ts+13402, 456, uintptr(0), uintptr(0)) 43788 if !(rc != SQLITE_MISUSE) { 43789 goto __3 43790 } 43791 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43792 zErrFunction = ts + 28045 43793 goto error_out 43794 __3: 43795 ; 43796 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43797 return TCL_OK 43798 43799 error_out: 43800 tcl.XTcl_ResetResult(tls, interp) 43801 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43802 return TCL_ERROR 43803 } 43804 43805 func c_realloc_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43806 bp := tls.Alloc(24) 43807 defer tls.Free(24) 43808 43809 var p uintptr 43810 var zErrFunction uintptr 43811 zErrFunction = ts + 28041 43812 43813 if !(objc != 1) { 43814 goto __1 43815 } 43816 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43817 return TCL_ERROR 43818 __1: 43819 ; 43820 p = sqlite3.Xsqlite3_malloc(tls, 5) 43821 if !!(p != 0) { 43822 goto __2 43823 } 43824 zErrFunction = ts + 28095 43825 goto error_out 43826 __2: 43827 ; 43828 p = sqlite3.Xsqlite3_realloc(tls, p, -1) 43829 if !(p != 0) { 43830 goto __3 43831 } 43832 zErrFunction = ts + 28110 43833 goto error_out 43834 __3: 43835 ; 43836 return TCL_OK 43837 43838 error_out: 43839 tcl.XTcl_ResetResult(tls, interp) 43840 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43841 return TCL_ERROR 43842 } 43843 43844 func c_misuse_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43845 bp := tls.Alloc(40) 43846 defer tls.Free(40) 43847 43848 var zErrFunction uintptr 43849 43850 var rc int32 43851 zErrFunction = ts + 28041 43852 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 43853 43854 if !(objc != 1) { 43855 goto __1 43856 } 43857 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43858 return TCL_ERROR 43859 __1: 43860 ; 43861 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 43862 if !(rc != SQLITE_OK) { 43863 goto __2 43864 } 43865 zErrFunction = ts + 21460 43866 goto error_out 43867 __2: 43868 ; 43869 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43870 43871 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43872 if !(rc != SQLITE_MISUSE) { 43873 goto __3 43874 } 43875 zErrFunction = ts + 21366 43876 goto error_out 43877 __3: 43878 ; 43879 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43880 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43881 if !(rc != SQLITE_MISUSE) { 43882 goto __4 43883 } 43884 zErrFunction = ts + 21541 43885 goto error_out 43886 __4: 43887 ; 43888 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43889 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43890 if !(rc != SQLITE_MISUSE) { 43891 goto __5 43892 } 43893 zErrFunction = ts + 21575 43894 goto error_out 43895 __5: 43896 ; 43897 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43898 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43899 if !(rc != SQLITE_MISUSE) { 43900 goto __6 43901 } 43902 zErrFunction = ts + 21557 43903 goto error_out 43904 __6: 43905 ; 43906 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43907 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43908 if !(rc != SQLITE_MISUSE) { 43909 goto __7 43910 } 43911 zErrFunction = ts + 21637 43912 goto error_out 43913 __7: 43914 ; 43915 return TCL_OK 43916 43917 error_out: 43918 tcl.XTcl_ResetResult(tls, interp) 43919 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43920 return TCL_ERROR 43921 } 43922 43923 func Sqlitetest9_Init(tls *libc.TLS, interp uintptr) int32 { 43924 var i int32 43925 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd3))/uint64(unsafe.Sizeof(struct { 43926 FzName uintptr 43927 FxProc uintptr 43928 FclientData uintptr 43929 }{})); i++ { 43930 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd3[i].FzName, 43931 aObjCmd3[i].FxProc, aObjCmd3[i].FclientData, uintptr(0)) 43932 } 43933 return TCL_OK 43934 } 43935 43936 var aObjCmd3 = [3]struct { 43937 FzName uintptr 43938 FxProc uintptr 43939 FclientData uintptr 43940 }{ 43941 {FzName: ts + 28126, FxProc: 0}, 43942 {FzName: ts + 28140, FxProc: 0}, 43943 {FzName: ts + 28155, FxProc: 0}, 43944 } 43945 43946 func Sqlitetestasync_Init(tls *libc.TLS, interp uintptr) int32 { 43947 return TCL_OK 43948 } 43949 43950 func resetAutoExtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 43951 sqlite3.Xsqlite3_reset_auto_extension(tls) 43952 return SQLITE_OK 43953 } 43954 43955 func Sqlitetest_autoext_Init(tls *libc.TLS, interp uintptr) int32 { 43956 tcl.XTcl_CreateObjCommand(tls, interp, ts+28172, 43957 *(*uintptr)(unsafe.Pointer(&struct { 43958 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 43959 }{resetAutoExtObjCmd})), uintptr(0), uintptr(0)) 43960 return TCL_OK 43961 } 43962 43963 func backupTestCmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43964 bp := tls.Alloc(196) 43965 defer tls.Free(196) 43966 43967 *(*[5]BackupSubCommand)(unsafe.Pointer(bp)) = [5]BackupSubCommand{ 43968 {FzCmd: ts + 9485, FnArg: 1, FzArg: ts + 28201}, 43969 {FzCmd: ts + 28207, FeCmd: uint32(1), FzArg: ts + 584}, 43970 {FzCmd: ts + 28214, FeCmd: uint32(2), FzArg: ts + 584}, 43971 {FzCmd: ts + 28224, FeCmd: uint32(3), FzArg: ts + 584}, 43972 {}, 43973 } 43974 43975 var p uintptr = clientData 43976 43977 var rc int32 43978 43979 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 43980 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(BackupSubCommand{})), ts+11691, 0, bp+120) 43981 if rc != TCL_OK { 43982 return rc 43983 } 43984 if objc != 2+(*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FnArg { 43985 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FzArg) 43986 return TCL_ERROR 43987 } 43988 43989 switch (*BackupSubCommand)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FeCmd { 43990 case uint32(1): 43991 { 43992 var zCmdName uintptr 43993 43994 zCmdName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))) 43995 tcl.XTcl_GetCommandInfo(tls, interp, zCmdName, bp+128) 43996 (*Tcl_CmdInfo)(unsafe.Pointer(bp + 128)).FdeleteProc = uintptr(0) 43997 tcl.XTcl_SetCommandInfo(tls, interp, zCmdName, bp+128) 43998 tcl.XTcl_DeleteCommand(tls, interp, zCmdName) 43999 44000 rc = sqlite3.Xsqlite3_backup_finish(tls, p) 44001 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44002 break 44003 44004 } 44005 44006 case uint32(0): 44007 { 44008 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+192) { 44009 return TCL_ERROR 44010 } 44011 rc = sqlite3.Xsqlite3_backup_step(tls, p, *(*int32)(unsafe.Pointer(bp + 192))) 44012 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44013 break 44014 44015 } 44016 44017 case uint32(2): 44018 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_remaining(tls, p))) 44019 break 44020 44021 case uint32(3): 44022 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_pagecount(tls, p))) 44023 break 44024 } 44025 44026 return TCL_OK 44027 } 44028 44029 type BackupSubCommand = struct { 44030 FzCmd uintptr 44031 FeCmd uint32 44032 FnArg int32 44033 FzArg uintptr 44034 } 44035 44036 func backupTestFinish(tls *libc.TLS, clientData ClientData) { 44037 var pBackup uintptr = clientData 44038 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 44039 } 44040 44041 func backupTestInit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44042 bp := tls.Alloc(32) 44043 defer tls.Free(32) 44044 44045 var pBackup uintptr 44046 44047 var zDestName uintptr 44048 var zSrcName uintptr 44049 var zCmd uintptr 44050 44051 if objc != 6 { 44052 tcl.XTcl_WrongNumArgs(tls, 44053 interp, 1, objv, ts+28234) 44054 return TCL_ERROR 44055 } 44056 44057 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 44058 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+16) 44059 zDestName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 44060 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))), bp+24) 44061 zSrcName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 44062 44063 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDestName, *(*uintptr)(unsafe.Pointer(bp + 24)), zSrcName) 44064 if !(pBackup != 0) { 44065 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28280, 0)) 44066 return TCL_ERROR 44067 } 44068 44069 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 44070 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44071 }{backupTestCmd})), pBackup, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{backupTestFinish}))) 44072 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 44073 return TCL_OK 44074 } 44075 44076 func Sqlitetestbackup_Init(tls *libc.TLS, interp uintptr) int32 { 44077 tcl.XTcl_CreateObjCommand(tls, interp, ts+28309, *(*uintptr)(unsafe.Pointer(&struct { 44078 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44079 }{backupTestInit})), uintptr(0), uintptr(0)) 44080 return TCL_OK 44081 } 44082 44083 type tcl_vtab1 = struct { 44084 Fbase sqlite3_vtab 44085 Finterp uintptr 44086 FpCmd uintptr 44087 Fdb uintptr 44088 } 44089 44090 type tcl_vtab = tcl_vtab1 44091 type tcl_cursor1 = struct { 44092 Fbase sqlite3_vtab_cursor 44093 FpStmt uintptr 44094 } 44095 44096 type tcl_cursor = tcl_cursor1 44097 44098 func tclDequote(tls *libc.TLS, z uintptr) { 44099 var q int8 = *(*int8)(unsafe.Pointer(z)) 44100 44101 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 44102 var iIn int32 = 1 44103 var iOut int32 = 0 44104 if int32(q) == '[' { 44105 q = int8(']') 44106 } 44107 44108 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 44109 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 44110 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 44111 iIn++ 44112 break 44113 } else { 44114 iIn = iIn + 2 44115 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 44116 } 44117 } else { 44118 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 44119 } 44120 } 44121 44122 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 44123 } 44124 } 44125 44126 func tclConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 44127 bp := tls.Alloc(8) 44128 defer tls.Free(8) 44129 44130 var interp uintptr = pAux 44131 var pTab uintptr = uintptr(0) 44132 var zCmd uintptr = uintptr(0) 44133 var pScript uintptr = uintptr(0) 44134 var rc int32 = SQLITE_OK 44135 44136 if argc != 4 { 44137 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 44138 return SQLITE_ERROR 44139 } 44140 44141 zCmd = sqlite3.Xsqlite3_malloc64(tls, libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 44142 pTab = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(tcl_vtab{}))) 44143 if zCmd != 0 && pTab != 0 { 44144 libc.Xmemcpy(tls, zCmd, *(*uintptr)(unsafe.Pointer(argv + 3*8)), libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 44145 tclDequote(tls, zCmd) 44146 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(tcl_vtab{}))) 44147 44148 (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd = tcl.XTcl_NewStringObj(tls, zCmd, -1) 44149 (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp = interp 44150 (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb = db 44151 (*Tcl_Obj)(unsafe.Pointer((*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd)).FrefCount++ 44152 44153 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44154 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44155 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27377, -1)) 44156 44157 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44158 if rc != TCL_OK { 44159 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetStringResult(tls, interp))) 44160 rc = SQLITE_ERROR 44161 } else { 44162 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, tcl.XTcl_GetStringResult(tls, interp)) 44163 } 44164 44165 if rc != SQLITE_OK { 44166 sqlite3.Xsqlite3_free(tls, pTab) 44167 pTab = uintptr(0) 44168 } 44169 } else { 44170 rc = SQLITE_NOMEM 44171 } 44172 44173 sqlite3.Xsqlite3_free(tls, zCmd) 44174 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 44175 return rc 44176 } 44177 44178 func tclDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 44179 var pTab uintptr = pVtab 44180 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44181 var _objPtr uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd 44182 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44183 tcl.XTclFreeObj(tls, _objPtr) 44184 } 44185 } 44186 sqlite3.Xsqlite3_free(tls, pTab) 44187 return SQLITE_OK 44188 } 44189 44190 func tclOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 44191 var pCur uintptr 44192 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(tcl_cursor{}))) 44193 if pCur == uintptr(0) { 44194 return SQLITE_NOMEM 44195 } 44196 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(tcl_cursor{}))) 44197 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 44198 return SQLITE_OK 44199 } 44200 44201 func tclClose(tls *libc.TLS, cur uintptr) int32 { 44202 var pCur uintptr = cur 44203 if pCur != 0 { 44204 sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCur)).FpStmt) 44205 sqlite3.Xsqlite3_free(tls, pCur) 44206 } 44207 return SQLITE_OK 44208 } 44209 44210 func tclNext(tls *libc.TLS, pVtabCursor uintptr) int32 { 44211 bp := tls.Alloc(8) 44212 defer tls.Free(8) 44213 44214 var pCsr uintptr = pVtabCursor 44215 if (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt != 0 { 44216 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 44217 var rc int32 = sqlite3.Xsqlite3_step(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 44218 if rc != SQLITE_ROW { 44219 var zErr uintptr 44220 rc = sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 44221 (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 44222 if rc != SQLITE_OK { 44223 zErr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 44224 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 44225 } 44226 } 44227 } 44228 return SQLITE_OK 44229 } 44230 44231 func tclFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 44232 bp := tls.Alloc(56) 44233 defer tls.Free(56) 44234 44235 var pCsr uintptr = pVtabCursor 44236 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 44237 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 44238 var pScript uintptr 44239 var pArg uintptr 44240 var ii int32 44241 var rc int32 44242 44243 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44244 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44245 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27441, -1)) 44246 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewIntObj(tls, idxNum)) 44247 if idxStr != 0 { 44248 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, idxStr, -1)) 44249 } else { 44250 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 44251 } 44252 44253 pArg = tcl.XTcl_NewObj(tls) 44254 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 44255 for ii = 0; ii < argc; ii++ { 44256 var zVal uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8))) 44257 var pVal uintptr 44258 if zVal == uintptr(0) { 44259 pVal = tcl.XTcl_NewObj(tls) 44260 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) { 44261 var pVal2 uintptr = uintptr(0) 44262 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 44263 if zVal != 0 { 44264 pVal2 = tcl.XTcl_NewStringObj(tls, zVal, -1) 44265 } else { 44266 pVal2 = tcl.XTcl_NewObj(tls) 44267 } 44268 tcl.XTcl_ListObjAppendElement(tls, interp, pVal, pVal2) 44269 } 44270 } else { 44271 pVal = tcl.XTcl_NewStringObj(tls, zVal, -1) 44272 } 44273 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pVal) 44274 } 44275 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pArg) 44276 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44277 var _objPtr uintptr = pArg 44278 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44279 tcl.XTclFreeObj(tls, _objPtr) 44280 } 44281 } 44282 44283 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44284 if rc != TCL_OK { 44285 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44286 rc = SQLITE_ERROR 44287 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 44288 } else { 44289 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44290 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 44291 44292 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+40, bp+48) 44293 if rc != TCL_OK { 44294 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44295 rc = SQLITE_ERROR 44296 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44297 } else { 44298 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 40)); ii = ii + 2 { 44299 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii)*8))) 44300 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii+1)*8)) 44301 if sqlite3.Xsqlite3_stricmp(tls, ts+1947, zCmd) == 0 { 44302 var zSql uintptr = tcl.XTcl_GetString(tls, p) 44303 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 44304 if rc != SQLITE_OK { 44305 var zErr uintptr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 44306 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+16, zErr)) 44307 } 44308 } else { 44309 rc = SQLITE_ERROR 44310 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+24, zCmd)) 44311 } 44312 } 44313 } 44314 } 44315 44316 if rc == SQLITE_OK { 44317 rc = tclNext(tls, pVtabCursor) 44318 } 44319 return rc 44320 } 44321 44322 func tclColumn(tls *libc.TLS, pVtabCursor uintptr, ctx uintptr, i int32) int32 { 44323 var pCsr uintptr = pVtabCursor 44324 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 44325 return SQLITE_OK 44326 } 44327 44328 func tclRowid(tls *libc.TLS, pVtabCursor uintptr, pRowid uintptr) int32 { 44329 var pCsr uintptr = pVtabCursor 44330 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, 0) 44331 return SQLITE_OK 44332 } 44333 44334 func tclEof(tls *libc.TLS, pVtabCursor uintptr) int32 { 44335 var pCsr uintptr = pVtabCursor 44336 return libc.Bool32((*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 44337 } 44338 44339 func testBestIndexObjConstraints(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 44340 var ii int32 44341 var pRes uintptr = tcl.XTcl_NewObj(tls) 44342 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 44343 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 44344 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 44345 var pElem uintptr = tcl.XTcl_NewObj(tls) 44346 var zOp uintptr = ts + 3405 44347 44348 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 44349 44350 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) { 44351 case SQLITE_INDEX_CONSTRAINT_EQ: 44352 zOp = ts + 28365 44353 break 44354 case SQLITE_INDEX_CONSTRAINT_GT: 44355 zOp = ts + 28368 44356 break 44357 case SQLITE_INDEX_CONSTRAINT_LE: 44358 zOp = ts + 28371 44359 break 44360 case SQLITE_INDEX_CONSTRAINT_LT: 44361 zOp = ts + 28374 44362 break 44363 case SQLITE_INDEX_CONSTRAINT_GE: 44364 zOp = ts + 28377 44365 break 44366 case SQLITE_INDEX_CONSTRAINT_MATCH: 44367 zOp = ts + 28380 44368 break 44369 case SQLITE_INDEX_CONSTRAINT_LIKE: 44370 zOp = ts + 27587 44371 break 44372 case SQLITE_INDEX_CONSTRAINT_GLOB: 44373 zOp = ts + 27592 44374 break 44375 case SQLITE_INDEX_CONSTRAINT_REGEXP: 44376 zOp = ts + 6831 44377 break 44378 case SQLITE_INDEX_CONSTRAINT_NE: 44379 zOp = ts + 28386 44380 break 44381 case SQLITE_INDEX_CONSTRAINT_ISNOT: 44382 zOp = ts + 28389 44383 break 44384 case SQLITE_INDEX_CONSTRAINT_ISNOTNULL: 44385 zOp = ts + 28395 44386 break 44387 case SQLITE_INDEX_CONSTRAINT_ISNULL: 44388 zOp = ts + 28405 44389 break 44390 case SQLITE_INDEX_CONSTRAINT_IS: 44391 zOp = ts + 5851 44392 break 44393 case SQLITE_INDEX_CONSTRAINT_LIMIT: 44394 zOp = ts + 28412 44395 break 44396 case SQLITE_INDEX_CONSTRAINT_OFFSET: 44397 zOp = ts + 28418 44398 break 44399 } 44400 44401 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+6194, -1)) 44402 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, zOp, -1)) 44403 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 44404 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)) 44405 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28432, -1)) 44406 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable))) 44407 44408 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 44409 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44410 var _objPtr uintptr = pElem 44411 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44412 tcl.XTclFreeObj(tls, _objPtr) 44413 } 44414 } 44415 } 44416 44417 tcl.XTcl_SetObjResult(tls, interp, pRes) 44418 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 44419 var _objPtr uintptr = pRes 44420 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44421 tcl.XTclFreeObj(tls, _objPtr) 44422 } 44423 } 44424 } 44425 44426 func testBestIndexObjOrderby(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 44427 var ii int32 44428 var pRes uintptr = tcl.XTcl_NewObj(tls) 44429 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 44430 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; ii++ { 44431 var pOrder uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(ii)*8 44432 var pElem uintptr = tcl.XTcl_NewObj(tls) 44433 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 44434 44435 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 44436 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).FiColumn)) 44437 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28439, -1)) 44438 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).Fdesc))) 44439 44440 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 44441 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44442 var _objPtr uintptr = pElem 44443 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44444 tcl.XTclFreeObj(tls, _objPtr) 44445 } 44446 } 44447 } 44448 44449 tcl.XTcl_SetObjResult(tls, interp, pRes) 44450 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 44451 var _objPtr uintptr = pRes 44452 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44453 tcl.XTclFreeObj(tls, _objPtr) 44454 } 44455 } 44456 } 44457 44458 func testBestIndexObj(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44459 bp := tls.Alloc(80) 44460 defer tls.Free(80) 44461 44462 *(*[7]uintptr)(unsafe.Pointer(bp)) = [7]uintptr{ 44463 ts + 28444, 44464 ts + 28456, 44465 ts + 28464, 44466 ts + 28469, 44467 ts + 28478, 44468 ts + 28481, 44469 uintptr(0), 44470 } 44471 44472 var pIdxInfo uintptr = clientData 44473 44474 if objc < 2 { 44475 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 44476 return TCL_ERROR 44477 } 44478 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+56) != 0 { 44479 return TCL_ERROR 44480 } 44481 44482 if *(*int32)(unsafe.Pointer(bp + 56)) < 4 && objc != 2 { 44483 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 44484 return TCL_ERROR 44485 } 44486 if *(*int32)(unsafe.Pointer(bp + 56)) == 4 && objc != 4 { 44487 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28491) 44488 return TCL_ERROR 44489 } 44490 if *(*int32)(unsafe.Pointer(bp + 56)) == 5 && objc != 3 && objc != 4 { 44491 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28505) 44492 return TCL_ERROR 44493 } 44494 44495 switch *(*int32)(unsafe.Pointer(bp + 56)) { 44496 case 0: 44497 testBestIndexObjConstraints(tls, interp, pIdxInfo) 44498 break 44499 44500 case 1: 44501 testBestIndexObjOrderby(tls, interp, pIdxInfo) 44502 break 44503 44504 case 2: 44505 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 44506 break 44507 44508 case 3: 44509 { 44510 var bDistinct int32 = sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo) 44511 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bDistinct)) 44512 break 44513 44514 } 44515 44516 case 4: 44517 { 44518 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+60) != 0 || 44519 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 44520 return TCL_ERROR 44521 } 44522 tcl.XTcl_SetObjResult(tls, interp, 44523 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_vtab_in(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 60)), *(*int32)(unsafe.Pointer(bp + 64))))) 44524 break 44525 44526 } 44527 44528 case 5: 44529 { 44530 *(*int32)(unsafe.Pointer(bp + 68)) = 0 44531 var rc int32 44532 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 44533 var zVal uintptr = ts + 584 44534 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+68) != 0 { 44535 return TCL_ERROR 44536 } 44537 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 44538 if rc != SQLITE_OK && rc != SQLITE_NOTFOUND { 44539 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44540 return TCL_ERROR 44541 } 44542 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 44543 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 44544 } else if objc == 4 { 44545 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 44546 } 44547 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zVal, -1)) 44548 break 44549 44550 } 44551 } 44552 44553 return TCL_OK 44554 } 44555 44556 func tclBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 44557 bp := tls.Alloc(108) 44558 defer tls.Free(108) 44559 44560 var pTab uintptr = tab 44561 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 44562 var rc int32 = SQLITE_OK 44563 44564 var pScript uintptr 44565 44566 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44567 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44568 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27495, -1)) 44569 44570 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([24]int8{})), bp+56, ts+28521, libc.VaList(bp, libc.PostIncInt32(&iNext, 1))) 44571 tcl.XTcl_CreateObjCommand(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(&struct { 44572 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44573 }{testBestIndexObj})), pIdxInfo, uintptr(0)) 44574 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+56, -1)) 44575 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44576 tcl.XTcl_DeleteCommand(tls, interp, bp+56) 44577 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44578 var _objPtr uintptr = pScript 44579 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44580 tcl.XTclFreeObj(tls, _objPtr) 44581 } 44582 } 44583 44584 if rc != TCL_OK { 44585 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44586 rc = SQLITE_ERROR 44587 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44588 } else { 44589 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44590 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 44591 44592 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) 44593 if rc != TCL_OK { 44594 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44595 rc = SQLITE_ERROR 44596 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zErr)) 44597 } else { 44598 var ii int32 44599 var iArgv int32 = 1 44600 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 80)); ii = ii + 2 { 44601 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii)*8))) 44602 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii+1)*8)) 44603 if sqlite3.Xsqlite3_stricmp(tls, ts+28533, zCmd) == 0 { 44604 rc = tcl.XTcl_GetDoubleFromObj(tls, interp, p, pIdxInfo+64) 44605 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28456, zCmd) == 0 { 44606 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+60) 44607 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28538, zCmd) == 0 { 44608 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+40) 44609 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28545, zCmd) == 0 { 44610 sqlite3.Xsqlite3_free(tls, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr) 44611 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+24, tcl.XTcl_GetString(tls, p))) 44612 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 44613 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28552, zCmd) == 0 { 44614 *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) = int64(0) 44615 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, p, bp+96) 44616 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = sqlite3_int64(tRowcnt(*(*Tcl_WideInt)(unsafe.Pointer(bp + 96)))) 44617 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28557, zCmd) == 0 || 44618 sqlite3.Xsqlite3_stricmp(tls, ts+28561, zCmd) == 0 { 44619 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, bp+104) 44620 if rc == SQLITE_OK { 44621 if *(*int32)(unsafe.Pointer(bp + 104)) < 0 || *(*int32)(unsafe.Pointer(bp + 104)) >= (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint { 44622 rc = SQLITE_ERROR 44623 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28566, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 104)))) 44624 } else { 44625 var bOmit int32 = libc.Bool32(int32(*(*int8)(unsafe.Pointer(zCmd))) == 'o' || int32(*(*int8)(unsafe.Pointer(zCmd))) == 'O') 44626 (*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) 44627 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).Fomit = uint8(bOmit) 44628 } 44629 } 44630 } else { 44631 rc = SQLITE_ERROR 44632 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+40, zCmd)) 44633 } 44634 if rc != SQLITE_OK && (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg == uintptr(0) { 44635 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44636 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, zErr)) 44637 } 44638 } 44639 } 44640 } 44641 44642 return rc 44643 } 44644 44645 var iNext int32 = 43 44646 44647 var tclModule = sqlite3_module{ 44648 FxCreate: 0, 44649 FxConnect: 0, 44650 FxBestIndex: 0, 44651 FxDisconnect: 0, 44652 FxDestroy: 0, 44653 FxOpen: 0, 44654 FxClose: 0, 44655 FxFilter: 0, 44656 FxNext: 0, 44657 FxEof: 0, 44658 FxColumn: 0, 44659 FxRowid: 0, 44660 } 44661 44662 func register_tcl_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44663 bp := tls.Alloc(8) 44664 defer tls.Free(8) 44665 44666 if objc != 2 { 44667 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 44668 return TCL_ERROR 44669 } 44670 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 44671 return TCL_ERROR 44672 } 44673 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+28581, uintptr(unsafe.Pointer(&tclModule)), interp) 44674 return TCL_OK 44675 } 44676 44677 func Sqlitetesttcl_Init(tls *libc.TLS, interp uintptr) int32 { 44678 var i int32 44679 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd4))/uint64(unsafe.Sizeof(struct { 44680 FzName uintptr 44681 FxProc uintptr 44682 FclientData uintptr 44683 }{})); i++ { 44684 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd4[i].FzName, 44685 aObjCmd4[i].FxProc, aObjCmd4[i].FclientData, uintptr(0)) 44686 } 44687 return TCL_OK 44688 } 44689 44690 var aObjCmd4 = [1]struct { 44691 FzName uintptr 44692 FxProc uintptr 44693 FclientData uintptr 44694 }{ 44695 {FzName: ts + 28585, FxProc: 0}, 44696 } 44697 44698 func ptrToText(tls *libc.TLS, p uintptr) uintptr { 44699 bp := tls.Alloc(8) 44700 defer tls.Free(8) 44701 44702 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof(buf))-uint64(1)), uintptr(unsafe.Pointer(&buf)), ts+9889, libc.VaList(bp, p)) 44703 return uintptr(unsafe.Pointer(&buf)) 44704 } 44705 44706 var buf [100]int8 44707 44708 func blobHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 44709 bp := tls.Alloc(8) 44710 defer tls.Free(8) 44711 44712 var z uintptr 44713 44714 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44715 if *(*int32)(unsafe.Pointer(bp)) == 0 { 44716 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 44717 } else if *(*int32)(unsafe.Pointer(bp)) > 9 && 0 == libc.Xmemcmp(tls, ts+28605, z, uint64(9)) { 44718 var channel Tcl_Channel 44719 var instanceData ClientData 44720 44721 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 44722 if !(channel != 0) { 44723 return TCL_ERROR 44724 } 44725 44726 tcl.XTcl_Flush(tls, channel) 44727 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 44728 44729 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 44730 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 44731 } else { 44732 *(*uintptr)(unsafe.Pointer(ppBlob)) = sqlite3TestTextToPtr(tls, z) 44733 } 44734 44735 return TCL_OK 44736 } 44737 44738 func blobStringFromObj(tls *libc.TLS, pObj uintptr) uintptr { 44739 bp := tls.Alloc(4) 44740 defer tls.Free(4) 44741 44742 var z uintptr 44743 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44744 return func() uintptr { 44745 if *(*int32)(unsafe.Pointer(bp)) != 0 { 44746 return z 44747 } 44748 return uintptr(0) 44749 }() 44750 } 44751 44752 func test_blob_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44753 bp := tls.Alloc(40) 44754 defer tls.Free(40) 44755 44756 var zDb uintptr 44757 var zTable uintptr 44758 var zColumn uintptr 44759 44760 var zVarname uintptr 44761 44762 *(*uintptr)(unsafe.Pointer(bp + 32)) = bp 44763 var rc int32 44764 44765 if objc != 8 { 44766 var zUsage uintptr = ts + 28615 44767 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zUsage) 44768 return TCL_ERROR 44769 } 44770 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 44771 return TCL_ERROR 44772 } 44773 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 44774 zTable = blobStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 44775 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 44776 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+16) != 0 { 44777 return TCL_ERROR 44778 } 44779 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp) != 0 { 44780 return TCL_ERROR 44781 } 44782 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 7*8)), bp+24) 44783 44784 if *(*int32)(unsafe.Pointer(bp + 24)) > 0 { 44785 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) 44786 tcl.XTcl_SetVar2(tls, interp, zVarname, uintptr(0), ptrToText(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0) 44787 } else { 44788 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)) 44789 } 44790 44791 if rc == SQLITE_OK { 44792 tcl.XTcl_ResetResult(tls, interp) 44793 } else { 44794 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44795 return TCL_ERROR 44796 } 44797 return TCL_OK 44798 } 44799 44800 func test_blob_close(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44801 bp := tls.Alloc(8) 44802 defer tls.Free(8) 44803 44804 var rc int32 44805 44806 if objc != 2 { 44807 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 44808 return TCL_ERROR 44809 } 44810 44811 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44812 return TCL_ERROR 44813 } 44814 rc = sqlite3.Xsqlite3_blob_close(tls, *(*uintptr)(unsafe.Pointer(bp))) 44815 44816 if rc != 0 { 44817 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44818 } else { 44819 tcl.XTcl_ResetResult(tls, interp) 44820 } 44821 return TCL_OK 44822 } 44823 44824 func test_blob_bytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44825 bp := tls.Alloc(8) 44826 defer tls.Free(8) 44827 44828 var nByte int32 44829 44830 if objc != 2 { 44831 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 44832 return TCL_ERROR 44833 } 44834 44835 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44836 return TCL_ERROR 44837 } 44838 nByte = sqlite3.Xsqlite3_blob_bytes(tls, *(*uintptr)(unsafe.Pointer(bp))) 44839 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nByte)) 44840 44841 return TCL_OK 44842 } 44843 44844 func test_blob_read(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44845 bp := tls.Alloc(32) 44846 defer tls.Free(32) 44847 44848 var zBuf uintptr = uintptr(0) 44849 var rc int32 44850 44851 if objc != 4 { 44852 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28667) 44853 return TCL_ERROR 44854 } 44855 44856 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 44857 return TCL_ERROR 44858 } 44859 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) || 44860 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) { 44861 return TCL_ERROR 44862 } 44863 44864 if *(*int32)(unsafe.Pointer(bp + 28)) > 0 { 44865 zBuf = tcl.XTcl_AttemptAlloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 44866 if zBuf == uintptr(0) { 44867 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28684, 0)) 44868 return TCL_ERROR 44869 } 44870 } 44871 rc = sqlite3.Xsqlite3_blob_read(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zBuf, *(*int32)(unsafe.Pointer(bp + 28)), *(*int32)(unsafe.Pointer(bp + 24))) 44872 if rc == SQLITE_OK { 44873 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zBuf, *(*int32)(unsafe.Pointer(bp + 28)))) 44874 } else { 44875 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44876 } 44877 tcl.XTcl_Free(tls, zBuf) 44878 44879 return func() int32 { 44880 if rc == SQLITE_OK { 44881 return TCL_OK 44882 } 44883 return TCL_ERROR 44884 }() 44885 } 44886 44887 func test_blob_write(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44888 bp := tls.Alloc(16) 44889 defer tls.Free(16) 44890 44891 var rc int32 44892 var zBuf uintptr 44893 44894 if objc != 4 && objc != 5 { 44895 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28745) 44896 return TCL_ERROR 44897 } 44898 44899 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44900 return TCL_ERROR 44901 } 44902 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) { 44903 return TCL_ERROR 44904 } 44905 44906 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) 44907 if objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+12) != 0 { 44908 return TCL_ERROR 44909 } 44910 rc = sqlite3.Xsqlite3_blob_write(tls, *(*uintptr)(unsafe.Pointer(bp)), zBuf, *(*int32)(unsafe.Pointer(bp + 12)), *(*int32)(unsafe.Pointer(bp + 8))) 44911 if rc != SQLITE_OK { 44912 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44913 } 44914 44915 return func() int32 { 44916 if rc == SQLITE_OK { 44917 return TCL_OK 44918 } 44919 return TCL_ERROR 44920 }() 44921 } 44922 44923 func Sqlitetest_blob_Init(tls *libc.TLS, interp uintptr) int32 { 44924 var i int32 44925 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd5))/uint64(unsafe.Sizeof(struct { 44926 FzName uintptr 44927 FxProc uintptr 44928 }{})); i++ { 44929 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd5[i].FzName, aObjCmd5[i].FxProc, uintptr(0), uintptr(0)) 44930 } 44931 return TCL_OK 44932 } 44933 44934 var aObjCmd5 = [5]struct { 44935 FzName uintptr 44936 FxProc uintptr 44937 }{ 44938 {FzName: ts + 28772, FxProc: 0}, 44939 {FzName: ts + 28790, FxProc: 0}, 44940 {FzName: ts + 28809, FxProc: 0}, 44941 {FzName: ts + 28828, FxProc: 0}, 44942 {FzName: ts + 28846, FxProc: 0}, 44943 } 44944 44945 func sqlite3BtreeSharedCacheReport(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44946 var pBt uintptr 44947 var pRet uintptr = tcl.XTcl_NewObj(tls) 44948 for pBt = sqlite3.Xsqlite3SharedCacheList; pBt != 0; pBt = (*BtShared)(unsafe.Pointer(pBt)).FpNext { 44949 var zFile uintptr = sqlite3.Xsqlite3PagerFilename(tls, (*BtShared)(unsafe.Pointer(pBt)).FpPager, 1) 44950 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, zFile, -1)) 44951 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, (*BtShared)(unsafe.Pointer(pBt)).FnRef)) 44952 } 44953 tcl.XTcl_SetObjResult(tls, interp, pRet) 44954 return TCL_OK 44955 } 44956 44957 func sqlite3BtreeCursorList(tls *libc.TLS, p uintptr) { 44958 } 44959 44960 func set_options(tls *libc.TLS, interp uintptr) { 44961 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28880, ts+28899, 44962 TCL_GLOBAL_ONLY) 44963 44964 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28901, ts+14193, TCL_GLOBAL_ONLY) 44965 44966 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28909, ts+14193, TCL_GLOBAL_ONLY) 44967 44968 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28927, ts+28940, TCL_GLOBAL_ONLY) 44969 44970 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28944, ts+28899, TCL_GLOBAL_ONLY) 44971 44972 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28951, ts+14193, TCL_GLOBAL_ONLY) 44973 44974 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28963, ts+14193, TCL_GLOBAL_ONLY) 44975 44976 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28969, ts+14193, TCL_GLOBAL_ONLY) 44977 44978 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28991, ts+14193, TCL_GLOBAL_ONLY) 44979 44980 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29003, ts+28899, TCL_GLOBAL_ONLY) 44981 44982 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29011, ts+28899, TCL_GLOBAL_ONLY) 44983 44984 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29015, ts+28899, TCL_GLOBAL_ONLY) 44985 44986 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29040, ts+28899, TCL_GLOBAL_ONLY) 44987 44988 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29045, 44989 ts+29060, TCL_GLOBAL_ONLY) 44990 44991 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29062, ts+14193, TCL_GLOBAL_ONLY) 44992 44993 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29071, ts+14193, TCL_GLOBAL_ONLY) 44994 44995 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29081, ts+14193, TCL_GLOBAL_ONLY) 44996 44997 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29093, ts+14193, TCL_GLOBAL_ONLY) 44998 44999 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13460, ts+28899, TCL_GLOBAL_ONLY) 45000 45001 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29107, ts+28899, TCL_GLOBAL_ONLY) 45002 45003 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29115, ts+14193, TCL_GLOBAL_ONLY) 45004 45005 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29120, ts+14193, TCL_GLOBAL_ONLY) 45006 45007 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29125, ts+28899, TCL_GLOBAL_ONLY) 45008 45009 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13580, ts+28899, TCL_GLOBAL_ONLY) 45010 45011 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29141, ts+28899, TCL_GLOBAL_ONLY) 45012 45013 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29150, ts+28899, TCL_GLOBAL_ONLY) 45014 45015 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29156, ts+28899, TCL_GLOBAL_ONLY) 45016 45017 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29167, ts+28899, TCL_GLOBAL_ONLY) 45018 45019 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+1957, ts+28899, TCL_GLOBAL_ONLY) 45020 45021 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29178, ts+14193, TCL_GLOBAL_ONLY) 45022 45023 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29188, ts+14193, TCL_GLOBAL_ONLY) 45024 45025 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29200, ts+28899, TCL_GLOBAL_ONLY) 45026 45027 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29208, ts+28899, TCL_GLOBAL_ONLY) 45028 45029 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29214, ts+14193, TCL_GLOBAL_ONLY) 45030 45031 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29224, ts+14193, TCL_GLOBAL_ONLY) 45032 45033 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10121, ts+28899, TCL_GLOBAL_ONLY) 45034 45035 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29241, ts+28899, TCL_GLOBAL_ONLY) 45036 45037 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29246, ts+28899, TCL_GLOBAL_ONLY) 45038 45039 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13044, ts+28899, TCL_GLOBAL_ONLY) 45040 45041 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29254, ts+28899, TCL_GLOBAL_ONLY) 45042 45043 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29264, ts+28899, TCL_GLOBAL_ONLY) 45044 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29275, 45045 ts+14193, TCL_GLOBAL_ONLY) 45046 45047 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29294, ts+28899, TCL_GLOBAL_ONLY) 45048 45049 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29306, ts+28899, TCL_GLOBAL_ONLY) 45050 45051 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29319, ts+28899, TCL_GLOBAL_ONLY) 45052 45053 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29327, ts+28899, TCL_GLOBAL_ONLY) 45054 45055 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29332, ts+28899, TCL_GLOBAL_ONLY) 45056 45057 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29338, ts+28899, TCL_GLOBAL_ONLY) 45058 45059 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29342, ts+28899, TCL_GLOBAL_ONLY) 45060 45061 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29357, ts+14193, 45062 TCL_GLOBAL_ONLY) 45063 45064 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29377, ts+28899, TCL_GLOBAL_ONLY) 45065 45066 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13439, ts+28899, TCL_GLOBAL_ONLY) 45067 45068 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29397, ts+28899, TCL_GLOBAL_ONLY) 45069 45070 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29406, ts+28899, TCL_GLOBAL_ONLY) 45071 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29415, ts+28899, TCL_GLOBAL_ONLY) 45072 45073 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29425, ts+28899, TCL_GLOBAL_ONLY) 45074 45075 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29434, ts+28899, TCL_GLOBAL_ONLY) 45076 45077 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29443, ts+28899, TCL_GLOBAL_ONLY) 45078 45079 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29454, ts+28899, TCL_GLOBAL_ONLY) 45080 45081 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+4974, ts+28899, TCL_GLOBAL_ONLY) 45082 45083 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29461, ts+28899, TCL_GLOBAL_ONLY) 45084 45085 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29475, ts+28899, TCL_GLOBAL_ONLY) 45086 45087 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29486, ts+14193, TCL_GLOBAL_ONLY) 45088 45089 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29491, ts+14193, TCL_GLOBAL_ONLY) 45090 45091 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29496, ts+14193, TCL_GLOBAL_ONLY) 45092 45093 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29501, ts+28899, TCL_GLOBAL_ONLY) 45094 45095 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29506, ts+14193, TCL_GLOBAL_ONLY) 45096 45097 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29519, ts+28899, TCL_GLOBAL_ONLY) 45098 45099 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29533, ts+28899, TCL_GLOBAL_ONLY) 45100 45101 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29542, ts+14193, TCL_GLOBAL_ONLY) 45102 45103 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29546, ts+14193, TCL_GLOBAL_ONLY) 45104 45105 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10868, ts+28899, TCL_GLOBAL_ONLY) 45106 45107 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29561, ts+28899, TCL_GLOBAL_ONLY) 45108 45109 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29573, ts+14193, TCL_GLOBAL_ONLY) 45110 45111 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29586, ts+28899, TCL_GLOBAL_ONLY) 45112 45113 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29595, ts+14193, TCL_GLOBAL_ONLY) 45114 45115 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29604, ts+28899, TCL_GLOBAL_ONLY) 45116 45117 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29614, ts+28899, TCL_GLOBAL_ONLY) 45118 45119 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29624, 45120 func() uintptr { 45121 if uint64(unsafe.Sizeof(float64(0))) > uint64(unsafe.Sizeof(float64(0))) { 45122 return ts + 28899 45123 } 45124 return ts + 14193 45125 }(), 45126 TCL_GLOBAL_ONLY) 45127 45128 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29636, ts+28899, TCL_GLOBAL_ONLY) 45129 45130 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29645, ts+28899, TCL_GLOBAL_ONLY) 45131 45132 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29658, ts+28899, TCL_GLOBAL_ONLY) 45133 45134 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29668, ts+14193, TCL_GLOBAL_ONLY) 45135 45136 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29678, ts+28899, TCL_GLOBAL_ONLY) 45137 45138 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29685, ts+28899, TCL_GLOBAL_ONLY) 45139 45140 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29689, ts+28899, TCL_GLOBAL_ONLY) 45141 45142 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29703, ts+28899, TCL_GLOBAL_ONLY) 45143 45144 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+9564, ts+28899, TCL_GLOBAL_ONLY) 45145 45146 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29710, ts+28899, TCL_GLOBAL_ONLY) 45147 45148 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29718, ts+28899, TCL_GLOBAL_ONLY) 45149 45150 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29724, ts+14193, TCL_GLOBAL_ONLY) 45151 45152 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29739, ts+28899, TCL_GLOBAL_ONLY) 45153 45154 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29754, ts+28899, TCL_GLOBAL_ONLY) 45155 45156 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29769, ts+28899, TCL_GLOBAL_ONLY) 45157 45158 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+18810, ts+28899, TCL_GLOBAL_ONLY) 45159 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29777, ts+28899, TCL_GLOBAL_ONLY) 45160 45161 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29786, ts+14193, TCL_GLOBAL_ONLY) 45162 45163 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29797, ts+14193, TCL_GLOBAL_ONLY) 45164 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29816, ts+14193, TCL_GLOBAL_ONLY) 45165 45166 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29837, ts+28899, TCL_GLOBAL_ONLY) 45167 45168 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29850, ts+28899, TCL_GLOBAL_ONLY) 45169 45170 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29859, ts+28899, TCL_GLOBAL_ONLY) 45171 45172 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29866, 45173 func() uintptr { 45174 if 1 != 0 { 45175 return ts + 28899 45176 } 45177 return ts + 14193 45178 }(), TCL_GLOBAL_ONLY) 45179 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29877, 45180 func() uintptr { 45181 if SQLITE_THREADSAFE == 1 { 45182 return ts + 28899 45183 } 45184 return ts + 14193 45185 }(), TCL_GLOBAL_ONLY) 45186 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29889, 45187 func() uintptr { 45188 if SQLITE_THREADSAFE == 2 { 45189 return ts + 28899 45190 } 45191 return ts + 14193 45192 }(), TCL_GLOBAL_ONLY) 45193 45194 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29901, ts+28899, TCL_GLOBAL_ONLY) 45195 45196 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13665, ts+28899, TCL_GLOBAL_ONLY) 45197 45198 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29908, ts+28899, TCL_GLOBAL_ONLY) 45199 45200 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29916, ts+28899, TCL_GLOBAL_ONLY) 45201 45202 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+15733, ts+28899, TCL_GLOBAL_ONLY) 45203 45204 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29929, ts+28899, TCL_GLOBAL_ONLY) 45205 45206 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29936, ts+28899, TCL_GLOBAL_ONLY) 45207 45208 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29941, ts+28899, TCL_GLOBAL_ONLY) 45209 45210 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29946, ts+28899, TCL_GLOBAL_ONLY) 45211 45212 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29950, ts+28899, TCL_GLOBAL_ONLY) 45213 45214 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29954, ts+14193, TCL_GLOBAL_ONLY) 45215 45216 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13692, ts+28899, TCL_GLOBAL_ONLY) 45217 45218 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29974, ts+14193, TCL_GLOBAL_ONLY) 45219 45220 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29993, ts+14193, TCL_GLOBAL_ONLY) 45221 45222 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30007, ts+14193, TCL_GLOBAL_ONLY) 45223 45224 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30016, ts+14193, TCL_GLOBAL_ONLY) 45225 45226 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30040, ts+14193, TCL_GLOBAL_ONLY) 45227 45228 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30061, ts+14193, TCL_GLOBAL_ONLY) 45229 45230 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30068, ts+14193, TCL_GLOBAL_ONLY) 45231 45232 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30081, ts+14193, TCL_GLOBAL_ONLY) 45233 45234 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30091, ts+28899, TCL_GLOBAL_ONLY) 45235 45236 { 45237 tcl.XTcl_LinkVar(tls, interp, ts+30102, uintptr(unsafe.Pointer(&cv_MAX_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45238 } 45239 45240 { 45241 tcl.XTcl_LinkVar(tls, interp, ts+30120, uintptr(unsafe.Pointer(&cv_MAX_COLUMN)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45242 } 45243 45244 { 45245 tcl.XTcl_LinkVar(tls, interp, ts+30138, uintptr(unsafe.Pointer(&cv_MAX_SQL_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45246 } 45247 45248 { 45249 tcl.XTcl_LinkVar(tls, interp, ts+30160, uintptr(unsafe.Pointer(&cv_MAX_EXPR_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45250 } 45251 45252 { 45253 tcl.XTcl_LinkVar(tls, interp, ts+30182, uintptr(unsafe.Pointer(&cv_MAX_COMPOUND_SELECT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45254 } 45255 45256 { 45257 tcl.XTcl_LinkVar(tls, interp, ts+30209, uintptr(unsafe.Pointer(&cv_MAX_VDBE_OP)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45258 } 45259 45260 { 45261 tcl.XTcl_LinkVar(tls, interp, ts+30228, uintptr(unsafe.Pointer(&cv_MAX_FUNCTION_ARG)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45262 } 45263 45264 { 45265 tcl.XTcl_LinkVar(tls, interp, ts+30252, uintptr(unsafe.Pointer(&cv_MAX_VARIABLE_NUMBER)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45266 } 45267 45268 { 45269 tcl.XTcl_LinkVar(tls, interp, ts+30279, uintptr(unsafe.Pointer(&cv_MAX_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45270 } 45271 45272 { 45273 tcl.XTcl_LinkVar(tls, interp, ts+30300, uintptr(unsafe.Pointer(&cv_MAX_PAGE_COUNT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45274 } 45275 45276 { 45277 tcl.XTcl_LinkVar(tls, interp, ts+30322, uintptr(unsafe.Pointer(&cv_MAX_LIKE_PATTERN_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45278 } 45279 45280 { 45281 tcl.XTcl_LinkVar(tls, interp, ts+30353, uintptr(unsafe.Pointer(&cv_MAX_TRIGGER_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45282 } 45283 45284 { 45285 tcl.XTcl_LinkVar(tls, interp, ts+30378, uintptr(unsafe.Pointer(&cv_DEFAULT_CACHE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45286 } 45287 45288 { 45289 tcl.XTcl_LinkVar(tls, interp, ts+30404, uintptr(unsafe.Pointer(&cv_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45290 } 45291 45292 { 45293 tcl.XTcl_LinkVar(tls, interp, ts+30429, uintptr(unsafe.Pointer(&cv_DEFAULT_FILE_FORMAT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45294 } 45295 45296 { 45297 tcl.XTcl_LinkVar(tls, interp, ts+30456, uintptr(unsafe.Pointer(&cv_DEFAULT_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45298 } 45299 45300 { 45301 tcl.XTcl_LinkVar(tls, interp, ts+30483, uintptr(unsafe.Pointer(&cv_DEFAULT_WAL_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45302 } 45303 45304 { 45305 tcl.XTcl_LinkVar(tls, interp, ts+30514, uintptr(unsafe.Pointer(&cv_MAX_ATTACHED)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45306 } 45307 45308 { 45309 tcl.XTcl_LinkVar(tls, interp, ts+30534, uintptr(unsafe.Pointer(&cv_MAX_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45310 } 45311 45312 { 45313 tcl.XTcl_LinkVar(tls, interp, ts+30563, uintptr(unsafe.Pointer(&cv_MAX_WORKER_THREADS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45314 } 45315 45316 { 45317 tcl.XTcl_LinkVar(tls, interp, ts+30589, uintptr(unsafe.Pointer(&cv_TEMP_STORE)), 45318 TCL_LINK_INT|TCL_LINK_READ_ONLY) 45319 45320 } 45321 45322 { 45323 tcl.XTcl_LinkVar(tls, interp, ts+30600, uintptr(unsafe.Pointer(&cv___GNUC__)), 45324 TCL_LINK_INT|TCL_LINK_READ_ONLY) 45325 45326 } 45327 } 45328 45329 var cv_MAX_LENGTH int32 = SQLITE_MAX_LENGTH 45330 var cv_MAX_COLUMN int32 = SQLITE_MAX_COLUMN 45331 var cv_MAX_SQL_LENGTH int32 = SQLITE_MAX_SQL_LENGTH 45332 var cv_MAX_EXPR_DEPTH int32 = SQLITE_MAX_EXPR_DEPTH 45333 var cv_MAX_COMPOUND_SELECT int32 = SQLITE_MAX_COMPOUND_SELECT 45334 var cv_MAX_VDBE_OP int32 = SQLITE_MAX_VDBE_OP 45335 var cv_MAX_FUNCTION_ARG int32 = SQLITE_MAX_FUNCTION_ARG 45336 var cv_MAX_VARIABLE_NUMBER int32 = SQLITE_MAX_VARIABLE_NUMBER 45337 var cv_MAX_PAGE_SIZE int32 = SQLITE_MAX_PAGE_SIZE 45338 var cv_MAX_PAGE_COUNT int32 = SQLITE_MAX_PAGE_COUNT 45339 var cv_MAX_LIKE_PATTERN_LENGTH int32 = SQLITE_MAX_LIKE_PATTERN_LENGTH 45340 var cv_MAX_TRIGGER_DEPTH int32 = SQLITE_MAX_TRIGGER_DEPTH 45341 var cv_DEFAULT_CACHE_SIZE int32 = -2000 45342 var cv_DEFAULT_PAGE_SIZE int32 = SQLITE_DEFAULT_PAGE_SIZE 45343 var cv_DEFAULT_FILE_FORMAT int32 = SQLITE_DEFAULT_FILE_FORMAT 45344 var cv_DEFAULT_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 45345 var cv_DEFAULT_WAL_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 45346 var cv_MAX_ATTACHED int32 = SQLITE_MAX_ATTACHED 45347 var cv_MAX_DEFAULT_PAGE_SIZE int32 = SQLITE_MAX_DEFAULT_PAGE_SIZE 45348 var cv_MAX_WORKER_THREADS int32 = SQLITE_MAX_WORKER_THREADS 45349 var cv_TEMP_STORE int32 = SQLITE_TEMP_STORE 45350 var cv___GNUC__ int32 = 1 45351 45352 func Sqliteconfig_Init(tls *libc.TLS, interp uintptr) int32 { 45353 set_options(tls, interp) 45354 return TCL_OK 45355 } 45356 45357 func sqlite3Delete83Name(tls *libc.TLS, z uintptr) { 45358 var i int32 45359 var sz int32 45360 sz = int32(libc.Xstrlen(tls, z)) 45361 for i = sz - 1; i > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '/' && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '.'; i-- { 45362 } 45363 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == '.' && sz > i+4 { 45364 libc.Xmemmove(tls, z+uintptr(i+1), z+uintptr(sz-3), uint64(4)) 45365 } 45366 } 45367 45368 func sqlite3DeleteUnlinkIfExists(tls *libc.TLS, pVfs uintptr, zFile uintptr, pbExists uintptr) int32 { 45369 var rc int32 = SQLITE_ERROR 45370 45371 rc = libc.Xaccess(tls, zFile, F_OK) 45372 if rc != 0 { 45373 if *(*int32)(unsafe.Pointer(libc.X__error(tls))) == ENOENT { 45374 if pbExists != 0 { 45375 *(*int32)(unsafe.Pointer(pbExists)) = 0 45376 } 45377 rc = SQLITE_OK 45378 } 45379 } else { 45380 if pbExists != 0 { 45381 *(*int32)(unsafe.Pointer(pbExists)) = 1 45382 } 45383 rc = libc.Xunlink(tls, zFile) 45384 } 45385 return rc 45386 } 45387 45388 func sqlite3_delete_database(tls *libc.TLS, zFile uintptr) int32 { 45389 bp := tls.Alloc(156) 45390 defer tls.Free(156) 45391 45392 var zBuf uintptr 45393 var nBuf int32 45394 var rc int32 = 0 45395 var i int32 45396 45397 *(*[4]uintptr)(unsafe.Pointer(bp + 24)) = [4]uintptr{ts, ts + 30609, ts + 30620, ts + 30627} 45398 45399 *(*[6]MFile)(unsafe.Pointer(bp + 56)) = [6]MFile{ 45400 {FzFmt: ts + 30634}, 45401 {FzFmt: ts + 30641}, 45402 {FzFmt: ts + 30656}, 45403 {FzFmt: ts + 30634, Fb83: 1}, 45404 {FzFmt: ts + 30641, FiOffset: SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET, Fb83: 1}, 45405 {FzFmt: ts + 30656, FiOffset: SQLITE_MULTIPLEX_WAL_8_3_OFFSET, Fb83: 1}, 45406 } 45407 45408 var pVfs uintptr = uintptr(0) 45409 45410 nBuf = int32(libc.Xstrlen(tls, zFile)) + 100 45411 zBuf = sqlite3.Xsqlite3_malloc(tls, nBuf) 45412 if zBuf == uintptr(0) { 45413 return SQLITE_NOMEM 45414 } 45415 45416 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([4]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 45417 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, *(*uintptr)(unsafe.Pointer(bp + 24 + uintptr(i)*8)), libc.VaList(bp, zFile)) 45418 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 45419 if rc == 0 && i != 0 { 45420 sqlite3Delete83Name(tls, zBuf) 45421 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 45422 } 45423 } 45424 45425 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([6]MFile{}))/uint64(unsafe.Sizeof(MFile{})); i++ { 45426 var p uintptr = bp + 56 + uintptr(i)*16 45427 var iChunk int32 45428 for iChunk = 1; iChunk <= MX_CHUNK_NUMBER; iChunk++ { 45429 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, (*MFile)(unsafe.Pointer(p)).FzFmt, libc.VaList(bp+8, zFile, iChunk+(*MFile)(unsafe.Pointer(p)).FiOffset)) 45430 if (*MFile)(unsafe.Pointer(p)).Fb83 != 0 { 45431 sqlite3Delete83Name(tls, zBuf) 45432 } 45433 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, bp+152) 45434 if *(*int32)(unsafe.Pointer(bp + 152)) == 0 || rc != 0 { 45435 break 45436 } 45437 } 45438 } 45439 45440 sqlite3.Xsqlite3_free(tls, zBuf) 45441 return func() int32 { 45442 if rc != 0 { 45443 return SQLITE_ERROR 45444 } 45445 return SQLITE_OK 45446 }() 45447 } 45448 45449 type MFile = struct { 45450 FzFmt uintptr 45451 FiOffset int32 45452 Fb83 int32 45453 } 45454 45455 func Sqlitetest_demovfs_Init(tls *libc.TLS, interp uintptr) int32 { 45456 return TCL_OK 45457 } 45458 45459 type devsym_file1 = struct { 45460 Fbase sqlite3_file 45461 FpReal uintptr 45462 } 45463 45464 type devsym_file = devsym_file1 45465 45466 type DevsymGlobal = struct { 45467 FpVfs uintptr 45468 FiDeviceChar int32 45469 FiSectorSize int32 45470 FnWriteCrash int32 45471 F__ccgo_pad1 [4]byte 45472 } 45473 45474 var g1 = DevsymGlobal{FiSectorSize: 512} 45475 45476 func devsymClose(tls *libc.TLS, pFile uintptr) int32 { 45477 var p uintptr = pFile 45478 sqlite3.Xsqlite3OsClose(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45479 return SQLITE_OK 45480 } 45481 45482 func devsymRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45483 var p uintptr = pFile 45484 return sqlite3.Xsqlite3OsRead(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45485 } 45486 45487 func devsymWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45488 var p uintptr = pFile 45489 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45490 } 45491 45492 func devsymTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 45493 var p uintptr = pFile 45494 return sqlite3.Xsqlite3OsTruncate(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, size) 45495 } 45496 45497 func devsymSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 45498 var p uintptr = pFile 45499 return sqlite3.Xsqlite3OsSync(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags) 45500 } 45501 45502 func devsymFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 45503 var p uintptr = pFile 45504 return sqlite3.Xsqlite3OsFileSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pSize) 45505 } 45506 45507 func devsymLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 45508 var p uintptr = pFile 45509 return sqlite3.Xsqlite3OsLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 45510 } 45511 45512 func devsymUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 45513 var p uintptr = pFile 45514 return sqlite3.Xsqlite3OsUnlock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 45515 } 45516 45517 func devsymCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 45518 var p uintptr = pFile 45519 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pResOut) 45520 } 45521 45522 func devsymFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 45523 var p uintptr = pFile 45524 return sqlite3.Xsqlite3OsFileControl(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, op, pArg) 45525 } 45526 45527 func devsymSectorSize(tls *libc.TLS, pFile uintptr) int32 { 45528 return g1.FiSectorSize 45529 } 45530 45531 func devsymDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 45532 return g1.FiDeviceChar 45533 } 45534 45535 func devsymShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 45536 var p uintptr = pFile 45537 return (*struct { 45538 f func(*libc.TLS, uintptr, int32, int32, int32) int32 45539 })(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) 45540 } 45541 45542 func devsymShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 45543 var p uintptr = pFile 45544 return (*struct { 45545 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 45546 })(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) 45547 } 45548 45549 func devsymShmBarrier(tls *libc.TLS, pFile uintptr) { 45550 var p uintptr = pFile 45551 (*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) 45552 } 45553 45554 func devsymShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 45555 var p uintptr = pFile 45556 return (*struct { 45557 f func(*libc.TLS, uintptr, int32) int32 45558 })(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) 45559 } 45560 45561 func devsymOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45562 var rc int32 45563 var p uintptr = pFile 45564 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 45565 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45566 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45567 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&devsym_io_methods)) 45568 } 45569 return rc 45570 } 45571 45572 var devsym_io_methods = sqlite3_io_methods{ 45573 FiVersion: 2, 45574 FxClose: 0, 45575 FxRead: 0, 45576 FxWrite: 0, 45577 FxTruncate: 0, 45578 FxSync: 0, 45579 FxFileSize: 0, 45580 FxLock: 0, 45581 FxUnlock: 0, 45582 FxCheckReservedLock: 0, 45583 FxFileControl: 0, 45584 FxSectorSize: 0, 45585 FxDeviceCharacteristics: 0, 45586 FxShmMap: 0, 45587 FxShmLock: 0, 45588 FxShmBarrier: 0, 45589 FxShmUnmap: 0, 45590 } 45591 45592 func devsymDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 45593 return sqlite3.Xsqlite3OsDelete(tls, g1.FpVfs, zPath, dirSync) 45594 } 45595 45596 func devsymAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 45597 return sqlite3.Xsqlite3OsAccess(tls, g1.FpVfs, zPath, flags, pResOut) 45598 } 45599 45600 func devsymFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 45601 return sqlite3.Xsqlite3OsFullPathname(tls, g1.FpVfs, zPath, nOut, zOut) 45602 } 45603 45604 func devsymRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 45605 return sqlite3.Xsqlite3OsRandomness(tls, g1.FpVfs, nByte, zBufOut) 45606 } 45607 45608 func devsymSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 45609 return sqlite3.Xsqlite3OsSleep(tls, g1.FpVfs, nMicro) 45610 } 45611 45612 func devsymCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 45613 return (*struct { 45614 f func(*libc.TLS, uintptr, uintptr) int32 45615 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FxCurrentTime})).f(tls, g1.FpVfs, pTimeOut) 45616 } 45617 45618 func writecrashSectorSize(tls *libc.TLS, pFile uintptr) int32 { 45619 var p uintptr = pFile 45620 return sqlite3.Xsqlite3OsSectorSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45621 } 45622 45623 func writecrashDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 45624 var p uintptr = pFile 45625 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45626 } 45627 45628 func writecrashWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45629 var p uintptr = pFile 45630 if g1.FnWriteCrash > 0 { 45631 g1.FnWriteCrash-- 45632 if g1.FnWriteCrash == 0 { 45633 libc.Xabort(tls) 45634 } 45635 } 45636 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45637 } 45638 45639 func writecrashOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45640 var rc int32 45641 var p uintptr = pFile 45642 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 45643 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45644 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45645 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&writecrash_io_methods)) 45646 } 45647 return rc 45648 } 45649 45650 var writecrash_io_methods = sqlite3_io_methods{ 45651 FiVersion: 2, 45652 FxClose: 0, 45653 FxRead: 0, 45654 FxWrite: 0, 45655 FxTruncate: 0, 45656 FxSync: 0, 45657 FxFileSize: 0, 45658 FxLock: 0, 45659 FxUnlock: 0, 45660 FxCheckReservedLock: 0, 45661 FxFileControl: 0, 45662 FxSectorSize: 0, 45663 FxDeviceCharacteristics: 0, 45664 FxShmMap: 0, 45665 FxShmLock: 0, 45666 FxShmBarrier: 0, 45667 FxShmUnmap: 0, 45668 } 45669 45670 var devsym_vfs = sqlite3_vfs{ 45671 FiVersion: 2, 45672 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45673 FmxPathname: DEVSYM_MAX_PATHNAME, 45674 FzName: ts + 30667, 45675 FxOpen: 0, 45676 FxDelete: 0, 45677 FxAccess: 0, 45678 FxFullPathname: 0, 45679 FxRandomness: 0, 45680 FxSleep: 0, 45681 FxCurrentTime: 0, 45682 } 45683 45684 var writecrash_vfs = sqlite3_vfs{ 45685 FiVersion: 2, 45686 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45687 FmxPathname: DEVSYM_MAX_PATHNAME, 45688 FzName: ts + 30674, 45689 FxOpen: 0, 45690 FxDelete: 0, 45691 FxAccess: 0, 45692 FxFullPathname: 0, 45693 FxRandomness: 0, 45694 FxSleep: 0, 45695 FxCurrentTime: 0, 45696 } 45697 45698 func devsym_register(tls *libc.TLS, iDeviceChar int32, iSectorSize int32) { 45699 if g1.FpVfs == uintptr(0) { 45700 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45701 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45702 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45703 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45704 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45705 } 45706 if iDeviceChar >= 0 { 45707 g1.FiDeviceChar = iDeviceChar 45708 } else { 45709 g1.FiDeviceChar = 0 45710 } 45711 if iSectorSize >= 0 { 45712 g1.FiSectorSize = iSectorSize 45713 } else { 45714 g1.FiSectorSize = 512 45715 } 45716 } 45717 45718 func devsym_unregister(tls *libc.TLS) { 45719 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&devsym_vfs))) 45720 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&writecrash_vfs))) 45721 g1.FpVfs = uintptr(0) 45722 g1.FiDeviceChar = 0 45723 g1.FiSectorSize = 0 45724 } 45725 45726 func devsym_crash_on_write(tls *libc.TLS, nWrite int32) { 45727 if g1.FpVfs == uintptr(0) { 45728 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45729 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45730 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45731 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45732 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45733 } 45734 g1.FnWriteCrash = nWrite 45735 } 45736 45737 type Tcl_StatBuf = stat 45738 45739 type fs_vtab1 = struct { 45740 Fbase sqlite3_vtab 45741 Fdb uintptr 45742 FzDb uintptr 45743 FzTbl uintptr 45744 } 45745 45746 type fs_vtab = fs_vtab1 45747 type fs_cursor1 = struct { 45748 Fbase sqlite3_vtab_cursor 45749 FpStmt uintptr 45750 FzBuf uintptr 45751 FnBuf int32 45752 FnAlloc int32 45753 } 45754 45755 type fs_cursor = fs_cursor1 45756 45757 type FsdirVtab1 = struct{ Fbase sqlite3_vtab } 45758 45759 type FsdirVtab = FsdirVtab1 45760 type FsdirCsr1 = struct { 45761 Fbase sqlite3_vtab_cursor 45762 FzDir uintptr 45763 FpDir uintptr 45764 FiRowid sqlite3_int64 45765 FpEntry uintptr 45766 } 45767 45768 type FsdirCsr = FsdirCsr1 45769 45770 func fsdirConnect1(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45771 var pTab uintptr 45772 45773 if argc != 3 { 45774 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45775 return SQLITE_ERROR 45776 } 45777 45778 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FsdirVtab{}))) 45779 if !(pTab != 0) { 45780 return SQLITE_NOMEM 45781 } 45782 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FsdirVtab{}))) 45783 45784 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 45785 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30685) 45786 45787 return SQLITE_OK 45788 } 45789 45790 func fsdirDisconnect1(tls *libc.TLS, pVtab uintptr) int32 { 45791 sqlite3.Xsqlite3_free(tls, pVtab) 45792 return SQLITE_OK 45793 } 45794 45795 func fsdirBestIndex1(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45796 var ii int32 45797 45798 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 45799 45800 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45801 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45802 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 { 45803 var pUsage uintptr 45804 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45805 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 45806 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45807 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 45808 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 45809 break 45810 } 45811 } 45812 45813 return SQLITE_OK 45814 } 45815 45816 func fsdirOpen1(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45817 var pCur uintptr 45818 45819 pCur = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(FsdirCsr{}))+uint64(256))) 45820 if pCur == uintptr(0) { 45821 return SQLITE_NOMEM 45822 } 45823 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FsdirCsr{}))) 45824 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45825 return SQLITE_OK 45826 } 45827 45828 func fsdirClose1(tls *libc.TLS, cur uintptr) int32 { 45829 var pCur uintptr = cur 45830 if (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir != 0 { 45831 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir) 45832 } 45833 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FzDir) 45834 sqlite3.Xsqlite3_free(tls, pCur) 45835 return SQLITE_OK 45836 } 45837 45838 func fsdirNext1(tls *libc.TLS, cur uintptr) int32 { 45839 var pCsr uintptr = cur 45840 45841 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 45842 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry = libc.Xreaddir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45843 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry == uintptr(0) { 45844 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45845 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 45846 } 45847 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid++ 45848 } 45849 45850 return SQLITE_OK 45851 } 45852 45853 func fsdirFilter1(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 45854 var pCsr uintptr = pVtabCursor 45855 var zDir uintptr 45856 var nDir int32 45857 45858 if idxNum != 1 || argc != 1 { 45859 return SQLITE_ERROR 45860 } 45861 45862 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 45863 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 45864 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 45865 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45866 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 45867 } 45868 45869 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 45870 nDir = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 45871 (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir = sqlite3.Xsqlite3_malloc(tls, nDir+1) 45872 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir == uintptr(0) { 45873 return SQLITE_NOMEM 45874 } 45875 libc.Xmemcpy(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, zDir, uint64(nDir+1)) 45876 45877 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = libc.Xopendir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 45878 return fsdirNext1(tls, pVtabCursor) 45879 } 45880 45881 func fsdirEof1(tls *libc.TLS, cur uintptr) int32 { 45882 var pCsr uintptr = cur 45883 return libc.Bool32((*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir == uintptr(0)) 45884 } 45885 45886 func fsdirColumn1(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 45887 var pCsr uintptr = cur 45888 switch i { 45889 case 0: 45890 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, -1, uintptr(0)) 45891 break 45892 45893 case 1: 45894 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry+24, -1, libc.UintptrFromInt32(-1)) 45895 break 45896 45897 default: 45898 } 45899 45900 return SQLITE_OK 45901 } 45902 45903 func fsdirRowid1(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 45904 var pCsr uintptr = cur 45905 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid 45906 return SQLITE_OK 45907 } 45908 45909 type FstreeVtab1 = struct { 45910 Fbase sqlite3_vtab 45911 Fdb uintptr 45912 } 45913 45914 type FstreeVtab = FstreeVtab1 45915 type FstreeCsr1 = struct { 45916 Fbase sqlite3_vtab_cursor 45917 FpStmt uintptr 45918 Ffd int32 45919 F__ccgo_pad1 [4]byte 45920 } 45921 45922 type FstreeCsr = FstreeCsr1 45923 45924 func fstreeConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45925 var pTab uintptr 45926 45927 if argc != 3 { 45928 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45929 return SQLITE_ERROR 45930 } 45931 45932 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeVtab{}))) 45933 if !(pTab != 0) { 45934 return SQLITE_NOMEM 45935 } 45936 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FstreeVtab{}))) 45937 (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb = db 45938 45939 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 45940 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30714) 45941 45942 return SQLITE_OK 45943 } 45944 45945 func fstreeDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 45946 sqlite3.Xsqlite3_free(tls, pVtab) 45947 return SQLITE_OK 45948 } 45949 45950 func fstreeBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45951 var ii int32 45952 45953 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45954 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45955 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 || 45956 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE || 45957 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 45958 var pUsage uintptr 45959 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45960 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) 45961 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45962 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100000.0 45963 return SQLITE_OK 45964 } 45965 } 45966 45967 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 45968 return SQLITE_OK 45969 } 45970 45971 func fstreeOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45972 var pCur uintptr 45973 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeCsr{}))) 45974 if pCur == uintptr(0) { 45975 return SQLITE_NOMEM 45976 } 45977 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FstreeCsr{}))) 45978 (*FstreeCsr)(unsafe.Pointer(pCur)).Ffd = -1 45979 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45980 return SQLITE_OK 45981 } 45982 45983 func fstreeCloseFd(tls *libc.TLS, pCsr uintptr) { 45984 if (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd >= 0 { 45985 libc.Xclose(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd) 45986 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = -1 45987 } 45988 } 45989 45990 func fstreeClose(tls *libc.TLS, cur uintptr) int32 { 45991 var pCsr uintptr = cur 45992 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45993 fstreeCloseFd(tls, pCsr) 45994 sqlite3.Xsqlite3_free(tls, pCsr) 45995 return SQLITE_OK 45996 } 45997 45998 func fstreeNext(tls *libc.TLS, cur uintptr) int32 { 45999 var pCsr uintptr = cur 46000 var rc int32 46001 46002 fstreeCloseFd(tls, pCsr) 46003 rc = sqlite3.Xsqlite3_step(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46004 if rc != SQLITE_ROW { 46005 rc = sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46006 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46007 } else { 46008 rc = SQLITE_OK 46009 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = libc.Xopen(tls, sqlite3.Xsqlite3_column_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0), O_RDONLY, 0) 46010 } 46011 46012 return rc 46013 } 46014 46015 func fstreeFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46016 bp := tls.Alloc(2) 46017 defer tls.Free(2) 46018 46019 var pCsr uintptr = pVtabCursor 46020 var pTab uintptr = (*FstreeCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 46021 var rc int32 46022 var zSql uintptr = ts + 30750 46023 var zRoot uintptr 46024 var nRoot int32 46025 var zPrefix uintptr 46026 var nPrefix int32 46027 var zDir uintptr 46028 var nDir int32 46029 *(*[2]int8)(unsafe.Pointer(bp)) = [2]int8{int8(0), int8(0)} 46030 46031 zRoot = ts + 30982 46032 nRoot = 1 46033 zPrefix = ts + 584 46034 nPrefix = 0 46035 46036 zDir = zRoot 46037 nDir = nRoot 46038 46039 fstreeCloseFd(tls, pCsr) 46040 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46041 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46042 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 46043 if rc != SQLITE_OK { 46044 return rc 46045 } 46046 46047 if idxNum != 0 { 46048 var zQuery uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46049 switch idxNum { 46050 case SQLITE_INDEX_CONSTRAINT_GLOB: 46051 *(*int8)(unsafe.Pointer(bp)) = int8('*') 46052 *(*int8)(unsafe.Pointer(bp + 1)) = int8('?') 46053 break 46054 fallthrough 46055 case SQLITE_INDEX_CONSTRAINT_LIKE: 46056 *(*int8)(unsafe.Pointer(bp)) = int8('_') 46057 *(*int8)(unsafe.Pointer(bp + 1)) = int8('%') 46058 break 46059 } 46060 46061 if sqlite3.Xsqlite3_strnicmp(tls, zQuery, zPrefix, nPrefix) == 0 { 46062 var i int32 46063 for i = nPrefix; *(*int8)(unsafe.Pointer(zQuery + uintptr(i))) != 0; i++ { 46064 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))) { 46065 break 46066 } 46067 if int32(*(*int8)(unsafe.Pointer(zQuery + uintptr(i)))) == '/' { 46068 nDir = i 46069 } 46070 } 46071 zDir = zQuery 46072 } 46073 } 46074 if nDir == 0 { 46075 nDir = 1 46076 } 46077 46078 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 1, zDir, nDir, libc.UintptrFromInt32(-1)) 46079 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 2, zRoot, nRoot, libc.UintptrFromInt32(-1)) 46080 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 3, zPrefix, nPrefix, libc.UintptrFromInt32(-1)) 46081 46082 return fstreeNext(tls, pVtabCursor) 46083 } 46084 46085 func fstreeEof(tls *libc.TLS, cur uintptr) int32 { 46086 var pCsr uintptr = cur 46087 return libc.Bool32((*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 46088 } 46089 46090 func fstreeColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46091 bp := tls.Alloc(224) 46092 defer tls.Free(224) 46093 46094 var pCsr uintptr = cur 46095 if i == 0 { 46096 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0)) 46097 } else { 46098 libc.Xfstat(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, bp) 46099 46100 if int32((*stat)(unsafe.Pointer(bp)).Fst_mode)&0170000 == 0100000 { 46101 if i == 1 { 46102 sqlite3.Xsqlite3_result_int64(tls, ctx, (*stat)(unsafe.Pointer(bp)).Fst_size) 46103 } else { 46104 var nRead int32 46105 var aBuf uintptr = sqlite3.Xsqlite3_malloc(tls, int32((*stat)(unsafe.Pointer(bp)).Fst_mode)+1) 46106 if !(aBuf != 0) { 46107 return SQLITE_NOMEM 46108 } 46109 nRead = int32(libc.Xread(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, aBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_mode))) 46110 if nRead != int32((*stat)(unsafe.Pointer(bp)).Fst_mode) { 46111 return SQLITE_IOERR 46112 } 46113 sqlite3.Xsqlite3_result_blob(tls, ctx, aBuf, nRead, libc.UintptrFromInt32(-1)) 46114 sqlite3.Xsqlite3_free(tls, aBuf) 46115 } 46116 } 46117 } 46118 46119 return SQLITE_OK 46120 } 46121 46122 func fstreeRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46123 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 46124 return SQLITE_OK 46125 } 46126 46127 func fsConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46128 var pVtab uintptr 46129 var nByte int32 46130 var zTbl uintptr 46131 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 46132 46133 if argc != 4 { 46134 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46135 return SQLITE_ERROR 46136 } 46137 zTbl = *(*uintptr)(unsafe.Pointer(argv + 3*8)) 46138 46139 nByte = int32(uint64(unsafe.Sizeof(fs_vtab{})) + uint64(int32(libc.Xstrlen(tls, zTbl))) + uint64(1) + uint64(int32(libc.Xstrlen(tls, zDb))) + uint64(1)) 46140 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(nByte)) 46141 if !(pVtab != 0) { 46142 return SQLITE_NOMEM 46143 } 46144 46145 (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl = pVtab + 1*48 46146 (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb = (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl + uintptr(libc.Xstrlen(tls, zTbl)+uint64(1)) 46147 (*fs_vtab)(unsafe.Pointer(pVtab)).Fdb = db 46148 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl, zTbl, libc.Xstrlen(tls, zTbl)) 46149 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb, zDb, libc.Xstrlen(tls, zDb)) 46150 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 46151 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30984) 46152 46153 return SQLITE_OK 46154 } 46155 46156 func fsDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 46157 sqlite3.Xsqlite3_free(tls, pVtab) 46158 return SQLITE_OK 46159 } 46160 46161 func fsOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46162 var pCur uintptr 46163 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(fs_cursor{}))) 46164 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46165 return SQLITE_OK 46166 } 46167 46168 func fsClose(tls *libc.TLS, cur uintptr) int32 { 46169 var pCur uintptr = cur 46170 sqlite3.Xsqlite3_finalize(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 46171 sqlite3.Xsqlite3_free(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf) 46172 sqlite3.Xsqlite3_free(tls, pCur) 46173 return SQLITE_OK 46174 } 46175 46176 func fsNext(tls *libc.TLS, cur uintptr) int32 { 46177 var pCur uintptr = cur 46178 var rc int32 46179 46180 rc = sqlite3.Xsqlite3_step(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 46181 if rc == SQLITE_ROW || rc == SQLITE_DONE { 46182 rc = SQLITE_OK 46183 } 46184 46185 return rc 46186 } 46187 46188 func fsFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46189 bp := tls.Alloc(32) 46190 defer tls.Free(32) 46191 46192 var rc int32 46193 var pCur uintptr = pVtabCursor 46194 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 46195 46196 if idxNum == 1 { 46197 var zStmt uintptr = sqlite3.Xsqlite3_mprintf(tls, 46198 ts+31021, libc.VaList(bp, (*fs_vtab)(unsafe.Pointer(p)).FzDb, (*fs_vtab)(unsafe.Pointer(p)).FzTbl)) 46199 if !(zStmt != 0) { 46200 return SQLITE_NOMEM 46201 } 46202 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 46203 sqlite3.Xsqlite3_free(tls, zStmt) 46204 if rc == SQLITE_OK { 46205 sqlite3.Xsqlite3_bind_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1, *(*uintptr)(unsafe.Pointer(argv))) 46206 } 46207 } else { 46208 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)) 46209 if !(zStmt != 0) { 46210 return SQLITE_NOMEM 46211 } 46212 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 46213 sqlite3.Xsqlite3_free(tls, zStmt) 46214 } 46215 46216 if rc == SQLITE_OK { 46217 rc = fsNext(tls, pVtabCursor) 46218 } 46219 return rc 46220 } 46221 46222 func fsColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46223 bp := tls.Alloc(224) 46224 defer tls.Free(224) 46225 46226 var pCur uintptr = cur 46227 46228 if i == 0 { 46229 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0)) 46230 } else { 46231 var zFile uintptr = sqlite3.Xsqlite3_column_text(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1) 46232 46233 var fd int32 46234 var n int32 46235 fd = libc.Xopen(tls, zFile, O_RDONLY, 0) 46236 if fd < 0 { 46237 return SQLITE_IOERR 46238 } 46239 libc.Xfstat(tls, fd, bp) 46240 46241 if (*stat)(unsafe.Pointer(bp)).Fst_size >= off_t((*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc) { 46242 var nNew sqlite3_int64 = (*stat)(unsafe.Pointer(bp)).Fst_size * int64(2) 46243 var zNew uintptr 46244 if nNew < int64(1024) { 46245 nNew = int64(1024) 46246 } 46247 46248 zNew = sqlite3.Xsqlite3Realloc(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64(nNew)) 46249 if zNew == uintptr(0) { 46250 libc.Xclose(tls, fd) 46251 return SQLITE_NOMEM 46252 } 46253 (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf = zNew 46254 (*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc = int32(nNew) 46255 } 46256 46257 n = int32(libc.Xread(tls, fd, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_size))) 46258 libc.Xclose(tls, fd) 46259 if off_t(n) != (*stat)(unsafe.Pointer(bp)).Fst_size { 46260 return SQLITE_ERROR 46261 } 46262 (*fs_cursor)(unsafe.Pointer(pCur)).FnBuf = int32((*stat)(unsafe.Pointer(bp)).Fst_size) 46263 *(*int8)(unsafe.Pointer((*fs_cursor)(unsafe.Pointer(pCur)).FzBuf + uintptr((*fs_cursor)(unsafe.Pointer(pCur)).FnBuf))) = int8(0) 46264 46265 sqlite3.Xsqlite3_result_text(tls, ctx, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 46266 } 46267 return SQLITE_OK 46268 } 46269 46270 func fsRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46271 var pCur uintptr = cur 46272 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0) 46273 return SQLITE_OK 46274 } 46275 46276 func fsEof(tls *libc.TLS, cur uintptr) int32 { 46277 var pCur uintptr = cur 46278 return libc.Bool32(sqlite3.Xsqlite3_data_count(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) == 0) 46279 } 46280 46281 func fsBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46282 var ii int32 46283 46284 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46285 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46286 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn < 0 && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 46287 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 46288 var pUsage uintptr 46289 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46290 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 46291 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46292 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 46293 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 46294 break 46295 } 46296 } 46297 46298 return SQLITE_OK 46299 } 46300 46301 var fsModule = sqlite3_module{ 46302 FxCreate: 0, 46303 FxConnect: 0, 46304 FxBestIndex: 0, 46305 FxDisconnect: 0, 46306 FxDestroy: 0, 46307 FxOpen: 0, 46308 FxClose: 0, 46309 FxFilter: 0, 46310 FxNext: 0, 46311 FxEof: 0, 46312 FxColumn: 0, 46313 FxRowid: 0, 46314 } 46315 46316 var fsdirModule = sqlite3_module{ 46317 FxCreate: 0, 46318 FxConnect: 0, 46319 FxBestIndex: 0, 46320 FxDisconnect: 0, 46321 FxDestroy: 0, 46322 FxOpen: 0, 46323 FxClose: 0, 46324 FxFilter: 0, 46325 FxNext: 0, 46326 FxEof: 0, 46327 FxColumn: 0, 46328 FxRowid: 0, 46329 } 46330 46331 var fstreeModule = sqlite3_module{ 46332 FxCreate: 0, 46333 FxConnect: 0, 46334 FxBestIndex: 0, 46335 FxDisconnect: 0, 46336 FxDestroy: 0, 46337 FxOpen: 0, 46338 FxClose: 0, 46339 FxFilter: 0, 46340 FxNext: 0, 46341 FxEof: 0, 46342 FxColumn: 0, 46343 FxRowid: 0, 46344 } 46345 46346 func register_fs_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46347 bp := tls.Alloc(8) 46348 defer tls.Free(8) 46349 46350 if objc != 2 { 46351 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 46352 return TCL_ERROR 46353 } 46354 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 46355 return TCL_ERROR 46356 } 46357 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31055, uintptr(unsafe.Pointer(&fsModule)), interp) 46358 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+5325, uintptr(unsafe.Pointer(&fsdirModule)), uintptr(0)) 46359 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31058, uintptr(unsafe.Pointer(&fstreeModule)), uintptr(0)) 46360 return TCL_OK 46361 } 46362 46363 func Sqlitetestfs_Init(tls *libc.TLS, interp uintptr) int32 { 46364 var i int32 46365 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd6))/uint64(unsafe.Sizeof(struct { 46366 FzName uintptr 46367 FxProc uintptr 46368 FclientData uintptr 46369 }{})); i++ { 46370 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd6[i].FzName, 46371 aObjCmd6[i].FxProc, aObjCmd6[i].FclientData, uintptr(0)) 46372 } 46373 return TCL_OK 46374 } 46375 46376 var aObjCmd6 = [1]struct { 46377 FzName uintptr 46378 FxProc uintptr 46379 FclientData uintptr 46380 }{ 46381 {FzName: ts + 31065, FxProc: 0}, 46382 } 46383 46384 func testContextMalloc(tls *libc.TLS, context uintptr, nByte int32) uintptr { 46385 var z uintptr = sqlite3.Xsqlite3_malloc(tls, nByte) 46386 if !(z != 0) && nByte > 0 { 46387 sqlite3.Xsqlite3_result_error_nomem(tls, context) 46388 } 46389 return z 46390 } 46391 46392 func randStr(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46393 bp := tls.Alloc(1004) 46394 defer tls.Free(1004) 46395 46396 var iMin int32 46397 var iMax int32 46398 var n int32 46399 46400 var i int32 46401 46402 iMin = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46403 if iMin < 0 { 46404 iMin = 0 46405 } 46406 if uint64(iMin) >= uint64(unsafe.Sizeof([1000]uint8{})) { 46407 iMin = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 46408 } 46409 iMax = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 46410 if iMax < iMin { 46411 iMax = iMin 46412 } 46413 if uint64(iMax) >= uint64(unsafe.Sizeof([1000]uint8{})) { 46414 iMax = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 46415 } 46416 n = iMin 46417 if iMax > iMin { 46418 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 46419 *(*int32)(unsafe.Pointer(bp)) &= 0x7fffffff 46420 n = n + *(*int32)(unsafe.Pointer(bp))%(iMax+1-iMin) 46421 } 46422 46423 sqlite3.Xsqlite3_randomness(tls, n, bp+4) 46424 for i = 0; i < n; i++ { 46425 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))) = zSrc[uint64(*(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))))%(uint64(unsafe.Sizeof(zSrc))-uint64(1))] 46426 } 46427 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(n))) = uint8(0) 46428 sqlite3.Xsqlite3_result_text(tls, context, bp+4, n, libc.UintptrFromInt32(-1)) 46429 } 46430 46431 var zSrc = *(*[79]uint8)(unsafe.Pointer(ts + 31084)) 46432 46433 var test_destructor_count_var int32 = 0 46434 46435 func destructor(tls *libc.TLS, p uintptr) { 46436 var zVal uintptr = p 46437 46438 zVal-- 46439 sqlite3.Xsqlite3_free(tls, zVal) 46440 test_destructor_count_var-- 46441 } 46442 46443 func test_destructor(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46444 var zVal uintptr 46445 var len int32 46446 46447 test_destructor_count_var++ 46448 46449 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 46450 return 46451 } 46452 len = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46453 zVal = testContextMalloc(tls, pCtx, len+3) 46454 if !(zVal != 0) { 46455 return 46456 } 46457 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 46458 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 46459 zVal++ 46460 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 46461 sqlite3.Xsqlite3_result_text(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 46462 } 46463 46464 func test_destructor16(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46465 var zVal uintptr 46466 var len int32 46467 46468 test_destructor_count_var++ 46469 46470 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 46471 return 46472 } 46473 len = sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46474 zVal = testContextMalloc(tls, pCtx, len+3) 46475 if !(zVal != 0) { 46476 return 46477 } 46478 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 46479 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 46480 zVal++ 46481 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 46482 sqlite3.Xsqlite3_result_text16(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 46483 } 46484 46485 func test_destructor_count(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46486 sqlite3.Xsqlite3_result_int(tls, pCtx, test_destructor_count_var) 46487 } 46488 46489 func test_agg_errmsg16_step(tls *libc.TLS, a uintptr, b int32, c uintptr) { 46490 } 46491 46492 func test_agg_errmsg16_final(tls *libc.TLS, ctx uintptr) { 46493 var z uintptr 46494 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 46495 sqlite3.Xsqlite3_aggregate_context(tls, ctx, 2048) 46496 z = sqlite3.Xsqlite3_errmsg16(tls, db) 46497 sqlite3.Xsqlite3_result_text16(tls, ctx, z, -1, libc.UintptrFromInt32(-1)) 46498 } 46499 46500 func free_test_auxdata(tls *libc.TLS, p uintptr) { 46501 sqlite3.Xsqlite3_free(tls, p) 46502 } 46503 46504 func test_auxdata(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46505 var i int32 46506 var zRet uintptr = testContextMalloc(tls, pCtx, nArg*2) 46507 if !(zRet != 0) { 46508 return 46509 } 46510 libc.Xmemset(tls, zRet, 0, uint64(nArg*2)) 46511 for i = 0; i < nArg; i++ { 46512 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 46513 if z != 0 { 46514 var n int32 46515 var zAux uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, i) 46516 if zAux != 0 { 46517 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('1') 46518 46519 } else { 46520 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('0') 46521 } 46522 n = int32(libc.Xstrlen(tls, z)) + 1 46523 zAux = testContextMalloc(tls, pCtx, n) 46524 if zAux != 0 { 46525 libc.Xmemcpy(tls, zAux, z, uint64(n)) 46526 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, i, zAux, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 46527 } 46528 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2+1))) = int8(' ') 46529 } 46530 } 46531 sqlite3.Xsqlite3_result_text(tls, pCtx, zRet, 2*nArg-1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 46532 } 46533 46534 func test_error(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46535 sqlite3.Xsqlite3_result_error(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1) 46536 if nArg == 2 { 46537 sqlite3.Xsqlite3_result_error_code(tls, pCtx, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 46538 } 46539 } 46540 46541 func counterFunc(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46542 var pCounter uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, 0) 46543 if pCounter == uintptr(0) { 46544 pCounter = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(int32(0)))) 46545 if pCounter == uintptr(0) { 46546 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46547 return 46548 } 46549 *(*int32)(unsafe.Pointer(pCounter)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46550 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, 0, pCounter, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46551 } else { 46552 *(*int32)(unsafe.Pointer(pCounter))++ 46553 } 46554 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(pCounter))) 46555 } 46556 46557 func test_isolation(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46558 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46559 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46560 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46561 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46562 sqlite3.Xsqlite3_result_value(tls, pCtx, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 46563 } 46564 46565 func test_eval(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46566 bp := tls.Alloc(16) 46567 defer tls.Free(16) 46568 46569 var rc int32 46570 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, pCtx) 46571 var zSql uintptr 46572 46573 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46574 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 46575 if rc == SQLITE_OK { 46576 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46577 if rc == SQLITE_ROW { 46578 sqlite3.Xsqlite3_result_value(tls, pCtx, sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0)) 46579 } 46580 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46581 } 46582 if rc != 0 { 46583 var zErr uintptr 46584 46585 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+31163, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 46586 sqlite3.Xsqlite3_result_text(tls, pCtx, zErr, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46587 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 46588 } 46589 } 46590 46591 func testHexChar(tls *libc.TLS, c int8) int32 { 46592 if int32(c) >= '0' && int32(c) <= '9' { 46593 return int32(c) - '0' 46594 } else if int32(c) >= 'a' && int32(c) <= 'f' { 46595 return int32(c) - 'a' + 10 46596 } else if int32(c) >= 'A' && int32(c) <= 'F' { 46597 return int32(c) - 'A' + 10 46598 } 46599 return 0 46600 } 46601 46602 func testHexToBin(tls *libc.TLS, zIn uintptr, zOut uintptr) { 46603 for *(*int8)(unsafe.Pointer(zIn)) != 0 && *(*int8)(unsafe.Pointer(zIn + 1)) != 0 { 46604 *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zOut, 1))) = int8(testHexChar(tls, *(*int8)(unsafe.Pointer(zIn)))<<4 + testHexChar(tls, *(*int8)(unsafe.Pointer(zIn + 1)))) 46605 zIn += uintptr(2) 46606 } 46607 } 46608 46609 func testHexToUtf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46610 var n int32 46611 var zIn uintptr 46612 var zOut uintptr 46613 46614 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46615 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46616 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46617 if zOut == uintptr(0) { 46618 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46619 } else { 46620 testHexToBin(tls, zIn, zOut) 46621 sqlite3.Xsqlite3_result_text16be(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46622 } 46623 } 46624 46625 func testHexToUtf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46626 var n int32 46627 var zIn uintptr 46628 var zOut uintptr 46629 46630 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46631 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46632 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46633 if zOut == uintptr(0) { 46634 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46635 } else { 46636 testHexToBin(tls, zIn, zOut) 46637 sqlite3.Xsqlite3_result_text(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46638 } 46639 } 46640 46641 func testHexToUtf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46642 var n int32 46643 var zIn uintptr 46644 var zOut uintptr 46645 46646 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46647 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46648 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46649 if zOut == uintptr(0) { 46650 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46651 } else { 46652 testHexToBin(tls, zIn, zOut) 46653 sqlite3.Xsqlite3_result_text16le(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46654 } 46655 } 46656 46657 func real2hex(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46658 bp := tls.Alloc(28) 46659 defer tls.Free(28) 46660 46661 var i int32 46662 var bigEndian int32 46663 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(1) 46664 bigEndian = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(bp))) == 0) 46665 *(*float64)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 46666 for i = 0; i < 8; i++ { 46667 if bigEndian != 0 { 46668 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 46669 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 46670 } else { 46671 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 46672 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 46673 } 46674 } 46675 *(*int8)(unsafe.Pointer(bp + 8 + 16)) = int8(0) 46676 sqlite3.Xsqlite3_result_text(tls, context, bp+8, -1, libc.UintptrFromInt32(-1)) 46677 } 46678 46679 func test_extract(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46680 bp := tls.Alloc(72) 46681 defer tls.Free(72) 46682 46683 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 46684 var pRec uintptr 46685 var pEndHdr uintptr 46686 var pHdr uintptr 46687 var pBody uintptr 46688 46689 var iIdx int32 46690 var iCurrent int32 = 0 46691 46692 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 46693 iIdx = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 46694 46695 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp)) 46696 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp)))) 46697 46698 for iCurrent = 0; pHdr < pEndHdr && iCurrent <= iIdx; iCurrent++ { 46699 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(Mem{}))) 46700 (*Mem)(unsafe.Pointer(bp + 8)).Fdb = db 46701 (*Mem)(unsafe.Pointer(bp + 8)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 46702 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+64)) 46703 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 64))), bp+8) 46704 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 64))))) 46705 46706 if iCurrent == iIdx { 46707 sqlite3.Xsqlite3_result_value(tls, context, bp+8) 46708 } 46709 46710 if (*Mem)(unsafe.Pointer(bp+8)).FszMalloc != 0 { 46711 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+8)).FzMalloc) 46712 } 46713 } 46714 } 46715 46716 func test_decode(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46717 bp := tls.Alloc(123) 46718 defer tls.Free(123) 46719 46720 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 46721 var pRec uintptr 46722 var pEndHdr uintptr 46723 var pHdr uintptr 46724 var pBody uintptr 46725 46726 var pRet uintptr 46727 46728 pRet = tcl.XTcl_NewObj(tls) 46729 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 46730 46731 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 46732 46733 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp+32)) 46734 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp + 32)))) 46735 for pHdr < pEndHdr { 46736 var pVal uintptr = uintptr(0) 46737 46738 libc.Xmemset(tls, bp+40, 0, uint64(unsafe.Sizeof(Mem{}))) 46739 (*Mem)(unsafe.Pointer(bp + 40)).Fdb = db 46740 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 46741 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+96)) 46742 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 96))), bp+40) 46743 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 96))))) 46744 46745 switch sqlite3.Xsqlite3_value_type(tls, bp+40) { 46746 case SQLITE_TEXT: 46747 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, bp+40), -1) 46748 break 46749 46750 case SQLITE_BLOB: 46751 { 46752 *(*[16]int8)(unsafe.Pointer(bp + 107)) = [16]int8{ 46753 int8('0'), int8('1'), int8('2'), int8('3'), int8('4'), int8('5'), int8('6'), int8('7'), 46754 int8('8'), int8('9'), int8('a'), int8('b'), int8('c'), int8('d'), int8('e'), int8('f'), 46755 } 46756 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, bp+40) 46757 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, bp+40) 46758 var i int32 46759 pVal = tcl.XTcl_NewStringObj(tls, ts+6334, -1) 46760 for i = 0; i < n; i++ { 46761 *(*int8)(unsafe.Pointer(bp + 104)) = *(*int8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))>>4&0x0F))) 46762 *(*int8)(unsafe.Pointer(bp + 104 + 1)) = *(*int8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))&0x0F))) 46763 *(*int8)(unsafe.Pointer(bp + 104 + 2)) = int8(0) 46764 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp, bp+104, 0)) 46765 } 46766 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp+16, ts+5624, 0)) 46767 break 46768 46769 } 46770 46771 case SQLITE_FLOAT: 46772 pVal = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, bp+40)) 46773 break 46774 46775 case SQLITE_INTEGER: 46776 pVal = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, bp+40)) 46777 break 46778 46779 case SQLITE_NULL: 46780 pVal = tcl.XTcl_NewStringObj(tls, ts+5846, -1) 46781 break 46782 46783 default: 46784 } 46785 46786 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, pVal) 46787 46788 if (*Mem)(unsafe.Pointer(bp+40)).FszMalloc != 0 { 46789 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+40)).FzMalloc) 46790 } 46791 } 46792 46793 sqlite3.Xsqlite3_result_text(tls, context, tcl.XTcl_GetString(tls, pRet), -1, libc.UintptrFromInt32(-1)) 46794 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 46795 var _objPtr uintptr = pRet 46796 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 46797 tcl.XTclFreeObj(tls, _objPtr) 46798 } 46799 } 46800 } 46801 46802 func test_zeroblob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46803 var nZero int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46804 sqlite3.Xsqlite3_result_zeroblob(tls, context, nZero) 46805 } 46806 46807 func test_getsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46808 sqlite3.Xsqlite3_result_int(tls, context, int32(sqlite3.Xsqlite3_value_subtype(tls, *(*uintptr)(unsafe.Pointer(argv))))) 46809 } 46810 46811 func test_frombind(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46812 var m sqlite3_uint64 = uint64(0) 46813 var i int32 46814 for i = 0; i < argc && i < 63; i++ { 46815 if sqlite3.Xsqlite3_value_frombind(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) != 0 { 46816 m = m | uint64(1)<<i 46817 } 46818 } 46819 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3_int64(m)) 46820 } 46821 46822 func test_setsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46823 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv))) 46824 sqlite3.Xsqlite3_result_subtype(tls, context, uint32(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 46825 } 46826 46827 func registerTestFunctions(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 46828 var i int32 46829 46830 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aFuncs))/uint64(unsafe.Sizeof(struct { 46831 FzName uintptr 46832 FnArg int8 46833 F__ccgo_pad1 [3]byte 46834 FeTextRep uint32 46835 FxFunc uintptr 46836 }{})); i++ { 46837 sqlite3.Xsqlite3_create_function(tls, db, aFuncs[i].FzName, int32(aFuncs[i].FnArg), 46838 int32(aFuncs[i].FeTextRep), uintptr(0), aFuncs[i].FxFunc, uintptr(0), uintptr(0)) 46839 } 46840 46841 sqlite3.Xsqlite3_create_function(tls, db, ts+31211, 0, SQLITE_ANY, uintptr(0), uintptr(0), 46842 *(*uintptr)(unsafe.Pointer(&struct { 46843 f func(*libc.TLS, uintptr, int32, uintptr) 46844 }{test_agg_errmsg16_step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_agg_errmsg16_final}))) 46845 46846 return SQLITE_OK 46847 } 46848 46849 var aFuncs = [20]struct { 46850 FzName uintptr 46851 FnArg int8 46852 F__ccgo_pad1 [3]byte 46853 FeTextRep uint32 46854 FxFunc uintptr 46855 }{ 46856 {FzName: ts + 31229, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46857 {FzName: ts + 31237, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46858 {FzName: ts + 31253, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46859 {FzName: ts + 31271, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46860 {FzName: ts + 31286, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46861 {FzName: ts + 31301, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46862 {FzName: ts + 31313, FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46863 {FzName: ts + 31335, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46864 {FzName: ts + 31348, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46865 {FzName: ts + 31348, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46866 {FzName: ts + 31359, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46867 {FzName: ts + 31369, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46868 {FzName: ts + 31384, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46869 {FzName: ts + 31397, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46870 {FzName: ts + 31406, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46871 {FzName: ts + 31418, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46872 {FzName: ts + 31431, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8 | SQLITE_DETERMINISTIC), FxFunc: 0}, 46873 {FzName: ts + 31445, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46874 {FzName: ts + 31461, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46875 {FzName: ts + 31477, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46876 } 46877 46878 func autoinstall_test_funcs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46879 var rc int32 = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46880 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46881 }{registerTestFunctions}))) 46882 if rc == SQLITE_OK { 46883 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46884 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46885 }{Md5_Register}))) 46886 } 46887 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 46888 return TCL_OK 46889 } 46890 46891 func tStep(tls *libc.TLS, a uintptr, b int32, c uintptr) { 46892 } 46893 46894 func tFinal(tls *libc.TLS, a uintptr) { 46895 } 46896 46897 func abuse_create_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46898 bp := tls.Alloc(24) 46899 defer tls.Free(24) 46900 46901 var rc int32 46902 var mxArg int32 46903 46904 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0) { 46905 goto __1 46906 } 46907 return TCL_ERROR 46908 __1: 46909 ; 46910 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46911 f func(*libc.TLS, uintptr, int32, uintptr) 46912 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 46913 f func(*libc.TLS, uintptr, int32, uintptr) 46914 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 46915 if !(rc != SQLITE_MISUSE) { 46916 goto __2 46917 } 46918 goto abuse_err 46919 __2: 46920 ; 46921 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46922 f func(*libc.TLS, uintptr, int32, uintptr) 46923 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 46924 f func(*libc.TLS, uintptr, int32, uintptr) 46925 }{tStep})), uintptr(0)) 46926 if !(rc != SQLITE_MISUSE) { 46927 goto __3 46928 } 46929 goto abuse_err 46930 __3: 46931 ; 46932 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46933 f func(*libc.TLS, uintptr, int32, uintptr) 46934 }{tStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 46935 if !(rc != SQLITE_MISUSE) { 46936 goto __4 46937 } 46938 goto abuse_err 46939 __4: 46940 ; 46941 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 46942 if !(rc != SQLITE_MISUSE) { 46943 goto __5 46944 } 46945 goto abuse_err 46946 __5: 46947 ; 46948 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46949 f func(*libc.TLS, uintptr, int32, uintptr) 46950 }{tStep})), uintptr(0)) 46951 if !(rc != SQLITE_MISUSE) { 46952 goto __6 46953 } 46954 goto abuse_err 46955 __6: 46956 ; 46957 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, -2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46958 f func(*libc.TLS, uintptr, int32, uintptr) 46959 }{tStep})), uintptr(0), uintptr(0)) 46960 if !(rc != SQLITE_MISUSE) { 46961 goto __7 46962 } 46963 goto abuse_err 46964 __7: 46965 ; 46966 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 128, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46967 f func(*libc.TLS, uintptr, int32, uintptr) 46968 }{tStep})), uintptr(0), uintptr(0)) 46969 if !(rc != SQLITE_MISUSE) { 46970 goto __8 46971 } 46972 goto abuse_err 46973 __8: 46974 ; 46975 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 46976 ts+31494, 46977 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46978 f func(*libc.TLS, uintptr, int32, uintptr) 46979 }{tStep})), uintptr(0), uintptr(0)) 46980 if !(rc != SQLITE_MISUSE) { 46981 goto __9 46982 } 46983 goto abuse_err 46984 __9: 46985 ; 46986 sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, 10000) 46987 mxArg = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, -1) 46988 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 46989 ts+31751, 46990 mxArg, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46991 f func(*libc.TLS, uintptr, int32, uintptr) 46992 }{tStep})), uintptr(0), uintptr(0)) 46993 if !(rc != SQLITE_OK) { 46994 goto __10 46995 } 46996 goto abuse_err 46997 __10: 46998 ; 46999 return TCL_OK 47000 47001 abuse_err: 47002 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32007, 47003 uintptr(0))) 47004 return TCL_ERROR 47005 } 47006 47007 func rankfunc(tls *libc.TLS, pCtx uintptr, nVal int32, apVal uintptr) { 47008 var aMatchinfo uintptr 47009 var nMatchinfo int32 47010 var nCol int32 47011 var nPhrase int32 47012 var iPhrase int32 47013 var score float64 47014 var nHitCount int32 47015 var nGlobalHitCount int32 47016 var weight float64 47017 var iCol int32 47018 47019 var aPhraseinfo uintptr 47020 nCol = 0 47021 nPhrase = 0 47022 score = 0.0 47023 47024 if !(nVal < 1) { 47025 goto __1 47026 } 47027 goto wrong_number_args 47028 __1: 47029 ; 47030 aMatchinfo = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal))) 47031 nMatchinfo = int32(uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal)))) / uint64(unsafe.Sizeof(int32(0)))) 47032 if !(nMatchinfo >= 2) { 47033 goto __2 47034 } 47035 nPhrase = *(*int32)(unsafe.Pointer(aMatchinfo)) 47036 nCol = *(*int32)(unsafe.Pointer(aMatchinfo + 1*4)) 47037 __2: 47038 ; 47039 if !(nMatchinfo != 2+3*nCol*nPhrase) { 47040 goto __3 47041 } 47042 sqlite3.Xsqlite3_result_error(tls, pCtx, 47043 ts+32050, -1) 47044 return 47045 __3: 47046 ; 47047 if !(nVal != 1+nCol) { 47048 goto __4 47049 } 47050 goto wrong_number_args 47051 __4: 47052 ; 47053 iPhrase = 0 47054 __5: 47055 if !(iPhrase < nPhrase) { 47056 goto __7 47057 } 47058 47059 aPhraseinfo = aMatchinfo + uintptr(2+iPhrase*nCol*3)*4 47060 iCol = 0 47061 __8: 47062 if !(iCol < nCol) { 47063 goto __10 47064 } 47065 nHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol)*4)) 47066 nGlobalHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol+1)*4)) 47067 weight = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(iCol+1)*8))) 47068 if !(nHitCount > 0) { 47069 goto __11 47070 } 47071 score = score + float64(nHitCount)/float64(nGlobalHitCount)*weight 47072 __11: 47073 ; 47074 goto __9 47075 __9: 47076 iCol++ 47077 goto __8 47078 goto __10 47079 __10: 47080 ; 47081 goto __6 47082 __6: 47083 iPhrase++ 47084 goto __5 47085 goto __7 47086 __7: 47087 ; 47088 sqlite3.Xsqlite3_result_double(tls, pCtx, score) 47089 return 47090 47091 wrong_number_args: 47092 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+32099, -1) 47093 } 47094 47095 func install_fts3_rank_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47096 bp := tls.Alloc(8) 47097 defer tls.Free(8) 47098 47099 if objc != 2 { 47100 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 47101 return TCL_ERROR 47102 } 47103 47104 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 47105 return TCL_ERROR 47106 } 47107 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+32144, -1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47108 f func(*libc.TLS, uintptr, int32, uintptr) 47109 }{rankfunc})), uintptr(0), uintptr(0)) 47110 return TCL_OK 47111 } 47112 47113 func Sqlitetest_func_Init(tls *libc.TLS, interp uintptr) int32 { 47114 var i int32 47115 47116 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd7))/uint64(unsafe.Sizeof(struct { 47117 FzName uintptr 47118 FxProc uintptr 47119 }{})); i++ { 47120 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd7[i].FzName, aObjCmd7[i].FxProc, uintptr(0), uintptr(0)) 47121 } 47122 sqlite3.Xsqlite3_initialize(tls) 47123 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47124 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47125 }{registerTestFunctions}))) 47126 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47127 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47128 }{Md5_Register}))) 47129 return TCL_OK 47130 } 47131 47132 var aObjCmd7 = [3]struct { 47133 FzName uintptr 47134 FxProc uintptr 47135 }{ 47136 {FzName: ts + 32149, FxProc: 0}, 47137 {FzName: ts + 32176, FxProc: 0}, 47138 {FzName: ts + 32198, FxProc: 0}, 47139 } 47140 47141 func sqlite3TestBinToHex(tls *libc.TLS, zBuf uintptr, N int32) { 47142 bp := tls.Alloc(17) 47143 defer tls.Free(17) 47144 47145 *(*[17]uint8)(unsafe.Pointer(bp)) = *(*[17]uint8)(unsafe.Pointer(ts + 32225)) 47146 var i int32 47147 var j int32 47148 var c uint8 47149 i = N * 2 47150 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = uint8(0) 47151 for j = N - 1; j >= 0; j-- { 47152 c = *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) 47153 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)&0xf))) 47154 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)>>4))) 47155 } 47156 47157 } 47158 47159 func sqlite3TestHexToBin(tls *libc.TLS, zIn uintptr, N int32, aOut uintptr) int32 { 47160 bp := tls.Alloc(256) 47161 defer tls.Free(256) 47162 47163 *(*[256]uint8)(unsafe.Pointer(bp)) = [256]uint8{ 47164 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), 47165 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), 47166 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), 47167 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), 47168 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), 47169 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), 47170 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), 47171 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), 47172 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), 47173 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), 47174 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), 47175 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), 47176 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), 47177 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), 47178 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), 47179 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), 47180 } 47181 var i int32 47182 var j int32 47183 var hi int32 = 1 47184 var c uint8 47185 47186 for i = libc.AssignInt32(&j, 0); i < N; i++ { 47187 c = *(*uint8)(unsafe.Pointer(bp + uintptr(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))))) 47188 if int32(c) == 0 { 47189 continue 47190 } 47191 if hi != 0 { 47192 *(*uint8)(unsafe.Pointer(aOut + uintptr(j))) = uint8((int32(c) - 1) << 4) 47193 hi = 0 47194 } else { 47195 *(*uint8)(unsafe.Pointer(aOut + uintptr(libc.PostIncInt32(&j, 1)))) |= uint8(int32(c) - 1) 47196 hi = 1 47197 } 47198 } 47199 return j 47200 } 47201 47202 func hexio_read(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47203 bp := tls.Alloc(48) 47204 defer tls.Free(48) 47205 47206 var got int32 47207 var zFile uintptr 47208 var zBuf uintptr 47209 var in uintptr 47210 47211 if objc != 4 { 47212 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32242) 47213 return TCL_ERROR 47214 } 47215 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 47216 return TCL_ERROR 47217 } 47218 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 47219 return TCL_ERROR 47220 } 47221 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 47222 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 44))*2+1) 47223 if zBuf == uintptr(0) { 47224 return TCL_ERROR 47225 } 47226 in = libc.Xfopen(tls, zFile, ts+4402) 47227 if in == uintptr(0) { 47228 in = libc.Xfopen(tls, zFile, ts+32262) 47229 } 47230 if in == uintptr(0) { 47231 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32264, zFile, 0)) 47232 return TCL_ERROR 47233 } 47234 libc.Xfseek(tls, in, int64(*(*int32)(unsafe.Pointer(bp + 40))), SEEK_SET) 47235 got = int32(libc.Xfread(tls, zBuf, uint64(1), uint64(*(*int32)(unsafe.Pointer(bp + 44))), in)) 47236 libc.Xfclose(tls, in) 47237 if got < 0 { 47238 got = 0 47239 } 47240 sqlite3TestBinToHex(tls, zBuf, got) 47241 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zBuf, 0)) 47242 sqlite3.Xsqlite3_free(tls, zBuf) 47243 return TCL_OK 47244 } 47245 47246 func hexio_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47247 bp := tls.Alloc(32) 47248 defer tls.Free(32) 47249 47250 var nOut int32 47251 var written int32 47252 var zFile uintptr 47253 var zIn uintptr 47254 var aOut uintptr 47255 var out uintptr 47256 47257 if objc != 4 { 47258 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32288) 47259 return TCL_ERROR 47260 } 47261 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 47262 return TCL_ERROR 47263 } 47264 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 47265 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) 47266 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp + 28))/2) 47267 if aOut == uintptr(0) { 47268 return TCL_ERROR 47269 } 47270 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp + 28)), aOut) 47271 out = libc.Xfopen(tls, zFile, ts+32312) 47272 if out == uintptr(0) { 47273 out = libc.Xfopen(tls, zFile, ts+32316) 47274 } 47275 if out == uintptr(0) { 47276 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32319, zFile, 0)) 47277 return TCL_ERROR 47278 } 47279 libc.Xfseek(tls, out, int64(*(*int32)(unsafe.Pointer(bp + 24))), SEEK_SET) 47280 written = int32(libc.Xfwrite(tls, aOut, uint64(1), uint64(nOut), out)) 47281 sqlite3.Xsqlite3_free(tls, aOut) 47282 libc.Xfclose(tls, out) 47283 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, written)) 47284 return TCL_OK 47285 } 47286 47287 func hexio_get_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47288 bp := tls.Alloc(8) 47289 defer tls.Free(8) 47290 47291 var val int32 47292 47293 var nOut int32 47294 var zIn uintptr 47295 var aOut uintptr 47296 47297 if objc != 2 { 47298 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32344) 47299 return TCL_ERROR 47300 } 47301 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 47302 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp))/2) 47303 if aOut == uintptr(0) { 47304 return TCL_ERROR 47305 } 47306 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp)), aOut) 47307 if nOut >= 4 { 47308 libc.Xmemcpy(tls, bp+4, aOut, uint64(4)) 47309 } else { 47310 libc.Xmemset(tls, bp+4, 0, uint64(unsafe.Sizeof([4]uint8{}))) 47311 libc.Xmemcpy(tls, bp+4+uintptr(4-nOut), aOut, uint64(nOut)) 47312 } 47313 sqlite3.Xsqlite3_free(tls, aOut) 47314 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))) 47315 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, val)) 47316 return TCL_OK 47317 } 47318 47319 func hexio_render_int16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47320 bp := tls.Alloc(14) 47321 defer tls.Free(14) 47322 47323 if objc != 2 { 47324 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 47325 return TCL_ERROR 47326 } 47327 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 47328 return TCL_ERROR 47329 } 47330 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 47331 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp))) 47332 sqlite3TestBinToHex(tls, bp+4, 2) 47333 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 4)) 47334 return TCL_OK 47335 } 47336 47337 func hexio_render_int32(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47338 bp := tls.Alloc(14) 47339 defer tls.Free(14) 47340 47341 if objc != 2 { 47342 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 47343 return TCL_ERROR 47344 } 47345 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 47346 return TCL_ERROR 47347 } 47348 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 24) 47349 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 16) 47350 *(*uint8)(unsafe.Pointer(bp + 4 + 2)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 47351 *(*uint8)(unsafe.Pointer(bp + 4 + 3)) = uint8(*(*int32)(unsafe.Pointer(bp))) 47352 sqlite3TestBinToHex(tls, bp+4, 4) 47353 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 8)) 47354 return TCL_OK 47355 } 47356 47357 func utf8_to_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47358 bp := tls.Alloc(16) 47359 defer tls.Free(16) 47360 47361 tcl.XTcl_AppendResult(tls, interp, 47362 libc.VaList(bp, ts+32352, 0)) 47363 return TCL_ERROR 47364 } 47365 47366 func getFts3Varint(tls *libc.TLS, p uintptr, v uintptr) int32 { 47367 var q uintptr = p 47368 var x sqlite_uint64 = uint64(0) 47369 var y sqlite_uint64 = uint64(1) 47370 for int32(*(*uint8)(unsafe.Pointer(q)))&0x80 == 0x80 { 47371 x = x + y*sqlite_uint64(int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))))&0x7f) 47372 y <<= 7 47373 } 47374 x = x + y*sqlite_uint64(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1)))) 47375 *(*sqlite_int64)(unsafe.Pointer(v)) = sqlite_int64(x) 47376 return int32((int64(q) - int64(p)) / 1) 47377 } 47378 47379 func putFts3Varint(tls *libc.TLS, p uintptr, v sqlite_int64) int32 { 47380 var q uintptr = p 47381 var vu sqlite_uint64 = sqlite_uint64(v) 47382 for __ccgo := true; __ccgo; __ccgo = vu != uint64(0) { 47383 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))) = uint8(vu&uint64(0x7f) | uint64(0x80)) 47384 vu >>= 7 47385 } 47386 *(*uint8)(unsafe.Pointer(q + libc.UintptrFromInt32(-1))) &= uint8(0x7f) 47387 47388 return int32((int64(q) - int64(p)) / 1) 47389 } 47390 47391 func read_fts3varint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47392 bp := tls.Alloc(16) 47393 defer tls.Free(16) 47394 47395 var zBlob uintptr 47396 47397 var nVal int32 47398 47399 if objc != 3 { 47400 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32406) 47401 return TCL_ERROR 47402 } 47403 zBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 47404 47405 nVal = getFts3Varint(tls, zBlob, bp+8) 47406 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))), 0) 47407 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nVal)) 47408 return TCL_OK 47409 } 47410 47411 func make_fts3record(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47412 bp := tls.Alloc(28) 47413 defer tls.Free(28) 47414 47415 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 47416 *(*int32)(unsafe.Pointer(bp)) = 0 47417 var aOut uintptr = uintptr(0) 47418 var nOut int32 = 0 47419 var nAlloc int32 = 0 47420 var i int32 47421 47422 if objc != 2 { 47423 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32419) 47424 return TCL_ERROR 47425 } 47426 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 47427 return TCL_ERROR 47428 } 47429 47430 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 47431 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+16) { 47432 if nOut+10 > nAlloc { 47433 var nNew int32 47434 if nAlloc != 0 { 47435 nNew = nAlloc * 2 47436 } else { 47437 nNew = 128 47438 } 47439 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 47440 if aNew == uintptr(0) { 47441 sqlite3.Xsqlite3_free(tls, aOut) 47442 return TCL_ERROR 47443 } 47444 aOut = aNew 47445 nAlloc = nNew 47446 } 47447 nOut = nOut + putFts3Varint(tls, aOut+uintptr(nOut), *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 47448 } else { 47449 *(*int32)(unsafe.Pointer(bp + 24)) = 0 47450 var zVal uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+24) 47451 for nOut+*(*int32)(unsafe.Pointer(bp + 24)) > nAlloc { 47452 var nNew int32 47453 if nAlloc != 0 { 47454 nNew = nAlloc * 2 47455 } else { 47456 nNew = 128 47457 } 47458 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 47459 if aNew == uintptr(0) { 47460 sqlite3.Xsqlite3_free(tls, aOut) 47461 return TCL_ERROR 47462 } 47463 aOut = aNew 47464 nAlloc = nNew 47465 } 47466 libc.Xmemcpy(tls, aOut+uintptr(nOut), zVal, uint64(*(*int32)(unsafe.Pointer(bp + 24)))) 47467 nOut = nOut + *(*int32)(unsafe.Pointer(bp + 24)) 47468 } 47469 } 47470 47471 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, aOut, nOut)) 47472 sqlite3.Xsqlite3_free(tls, aOut) 47473 return TCL_OK 47474 } 47475 47476 func Sqlitetest_hexio_Init(tls *libc.TLS, interp uintptr) int32 { 47477 var i int32 47478 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd8))/uint64(unsafe.Sizeof(struct { 47479 FzName uintptr 47480 FxProc uintptr 47481 }{})); i++ { 47482 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd8[i].FzName, aObjCmd8[i].FxProc, uintptr(0), uintptr(0)) 47483 } 47484 return TCL_OK 47485 } 47486 47487 var aObjCmd8 = [8]struct { 47488 FzName uintptr 47489 FxProc uintptr 47490 }{ 47491 {FzName: ts + 32424, FxProc: 0}, 47492 {FzName: ts + 32435, FxProc: 0}, 47493 {FzName: ts + 32447, FxProc: 0}, 47494 {FzName: ts + 32461, FxProc: 0}, 47495 {FzName: ts + 32480, FxProc: 0}, 47496 {FzName: ts + 32499, FxProc: 0}, 47497 {FzName: ts + 32512, FxProc: 0}, 47498 {FzName: ts + 32528, FxProc: 0}, 47499 } 47500 47501 type Wrapped = struct { 47502 Fpcache sqlite3_pcache_methods2 47503 Fmem sqlite3_mem_methods 47504 Fmutex sqlite3_mutex_methods 47505 Fmem_init int32 47506 Fmem_fail int32 47507 Fmutex_init int32 47508 Fmutex_fail int32 47509 Fpcache_init int32 47510 Fpcache_fail int32 47511 } 47512 47513 var wrapped Wrapped 47514 47515 func wrMemInit(tls *libc.TLS, pAppData uintptr) int32 { 47516 var rc int32 47517 if wrapped.Fmem_fail != 0 { 47518 rc = SQLITE_ERROR 47519 } else { 47520 rc = (*struct { 47521 f func(*libc.TLS, uintptr) int32 47522 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxInit})).f(tls, wrapped.Fmem.FpAppData) 47523 } 47524 if rc == SQLITE_OK { 47525 wrapped.Fmem_init = 1 47526 } 47527 return rc 47528 } 47529 47530 func wrMemShutdown(tls *libc.TLS, pAppData uintptr) { 47531 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxShutdown})).f(tls, wrapped.Fmem.FpAppData) 47532 wrapped.Fmem_init = 0 47533 } 47534 47535 func wrMemMalloc(tls *libc.TLS, n int32) uintptr { 47536 return (*struct { 47537 f func(*libc.TLS, int32) uintptr 47538 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxMalloc})).f(tls, n) 47539 } 47540 47541 func wrMemFree(tls *libc.TLS, p uintptr) { 47542 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxFree})).f(tls, p) 47543 } 47544 47545 func wrMemRealloc(tls *libc.TLS, p uintptr, n int32) uintptr { 47546 return (*struct { 47547 f func(*libc.TLS, uintptr, int32) uintptr 47548 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRealloc})).f(tls, p, n) 47549 } 47550 47551 func wrMemSize(tls *libc.TLS, p uintptr) int32 { 47552 return (*struct { 47553 f func(*libc.TLS, uintptr) int32 47554 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxSize})).f(tls, p) 47555 } 47556 47557 func wrMemRoundup(tls *libc.TLS, n int32) int32 { 47558 return (*struct{ f func(*libc.TLS, int32) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRoundup})).f(tls, n) 47559 } 47560 47561 func wrMutexInit(tls *libc.TLS) int32 { 47562 var rc int32 47563 if wrapped.Fmutex_fail != 0 { 47564 rc = SQLITE_ERROR 47565 } else { 47566 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexInit})).f(tls) 47567 } 47568 if rc == SQLITE_OK { 47569 wrapped.Fmutex_init = 1 47570 } 47571 return rc 47572 } 47573 47574 func wrMutexEnd(tls *libc.TLS) int32 { 47575 (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnd})).f(tls) 47576 wrapped.Fmutex_init = 0 47577 return SQLITE_OK 47578 } 47579 47580 func wrMutexAlloc(tls *libc.TLS, e int32) uintptr { 47581 return (*struct { 47582 f func(*libc.TLS, int32) uintptr 47583 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexAlloc})).f(tls, e) 47584 } 47585 47586 func wrMutexFree(tls *libc.TLS, p uintptr) { 47587 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexFree})).f(tls, p) 47588 } 47589 47590 func wrMutexEnter(tls *libc.TLS, p uintptr) { 47591 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnter})).f(tls, p) 47592 } 47593 47594 func wrMutexTry(tls *libc.TLS, p uintptr) int32 { 47595 return (*struct { 47596 f func(*libc.TLS, uintptr) int32 47597 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexTry})).f(tls, p) 47598 } 47599 47600 func wrMutexLeave(tls *libc.TLS, p uintptr) { 47601 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexLeave})).f(tls, p) 47602 } 47603 47604 func wrMutexHeld(tls *libc.TLS, p uintptr) int32 { 47605 return (*struct { 47606 f func(*libc.TLS, uintptr) int32 47607 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexHeld})).f(tls, p) 47608 } 47609 47610 func wrMutexNotheld(tls *libc.TLS, p uintptr) int32 { 47611 return (*struct { 47612 f func(*libc.TLS, uintptr) int32 47613 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexNotheld})).f(tls, p) 47614 } 47615 47616 func wrPCacheInit(tls *libc.TLS, pArg uintptr) int32 { 47617 var rc int32 47618 if wrapped.Fpcache_fail != 0 { 47619 rc = SQLITE_ERROR 47620 } else { 47621 rc = (*struct { 47622 f func(*libc.TLS, uintptr) int32 47623 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxInit})).f(tls, wrapped.Fpcache.FpArg) 47624 } 47625 if rc == SQLITE_OK { 47626 wrapped.Fpcache_init = 1 47627 } 47628 return rc 47629 } 47630 47631 func wrPCacheShutdown(tls *libc.TLS, pArg uintptr) { 47632 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxShutdown})).f(tls, wrapped.Fpcache.FpArg) 47633 wrapped.Fpcache_init = 0 47634 } 47635 47636 func wrPCacheCreate(tls *libc.TLS, a int32, b int32, c int32) uintptr { 47637 return (*struct { 47638 f func(*libc.TLS, int32, int32, int32) uintptr 47639 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCreate})).f(tls, a, b, c) 47640 } 47641 47642 func wrPCacheCachesize(tls *libc.TLS, p uintptr, n int32) { 47643 (*struct { 47644 f func(*libc.TLS, uintptr, int32) 47645 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCachesize})).f(tls, p, n) 47646 } 47647 47648 func wrPCachePagecount(tls *libc.TLS, p uintptr) int32 { 47649 return (*struct { 47650 f func(*libc.TLS, uintptr) int32 47651 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxPagecount})).f(tls, p) 47652 } 47653 47654 func wrPCacheFetch(tls *libc.TLS, p uintptr, a uint32, b int32) uintptr { 47655 return (*struct { 47656 f func(*libc.TLS, uintptr, uint32, int32) uintptr 47657 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxFetch})).f(tls, p, a, b) 47658 } 47659 47660 func wrPCacheUnpin(tls *libc.TLS, p uintptr, a uintptr, b int32) { 47661 (*struct { 47662 f func(*libc.TLS, uintptr, uintptr, int32) 47663 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxUnpin})).f(tls, p, a, b) 47664 } 47665 47666 func wrPCacheRekey(tls *libc.TLS, p uintptr, a uintptr, b uint32, c uint32) { 47667 (*struct { 47668 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 47669 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxRekey})).f(tls, p, a, b, c) 47670 } 47671 47672 func wrPCacheTruncate(tls *libc.TLS, p uintptr, a uint32) { 47673 (*struct { 47674 f func(*libc.TLS, uintptr, uint32) 47675 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxTruncate})).f(tls, p, a) 47676 } 47677 47678 func wrPCacheDestroy(tls *libc.TLS, p uintptr) { 47679 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxDestroy})).f(tls, p) 47680 } 47681 47682 func installInitWrappers(tls *libc.TLS) { 47683 bp := tls.Alloc(288) 47684 defer tls.Free(288) 47685 47686 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 48)) = sqlite3_mutex_methods{ 47687 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 { 47688 f func(*libc.TLS, int32) uintptr 47689 }{wrMutexAlloc})), 47690 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 { 47691 f func(*libc.TLS, uintptr) int32 47692 }{wrMutexTry})), 47693 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexLeave})), FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 47694 f func(*libc.TLS, uintptr) int32 47695 }{wrMutexHeld})), FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 47696 f func(*libc.TLS, uintptr) int32 47697 }{wrMutexNotheld})), 47698 } 47699 *(*sqlite3_pcache_methods2)(unsafe.Pointer(bp + 184)) = sqlite3_pcache_methods2{ 47700 FiVersion: 1, 47701 FxInit: *(*uintptr)(unsafe.Pointer(&struct { 47702 f func(*libc.TLS, uintptr) int32 47703 }{wrPCacheInit})), FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheShutdown})), FxCreate: *(*uintptr)(unsafe.Pointer(&struct { 47704 f func(*libc.TLS, int32, int32, int32) uintptr 47705 }{wrPCacheCreate})), 47706 FxCachesize: *(*uintptr)(unsafe.Pointer(&struct { 47707 f func(*libc.TLS, uintptr, int32) 47708 }{wrPCacheCachesize})), FxPagecount: *(*uintptr)(unsafe.Pointer(&struct { 47709 f func(*libc.TLS, uintptr) int32 47710 }{wrPCachePagecount})), FxFetch: *(*uintptr)(unsafe.Pointer(&struct { 47711 f func(*libc.TLS, uintptr, uint32, int32) uintptr 47712 }{wrPCacheFetch})), 47713 FxUnpin: *(*uintptr)(unsafe.Pointer(&struct { 47714 f func(*libc.TLS, uintptr, uintptr, int32) 47715 }{wrPCacheUnpin})), FxRekey: *(*uintptr)(unsafe.Pointer(&struct { 47716 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 47717 }{wrPCacheRekey})), FxTruncate: *(*uintptr)(unsafe.Pointer(&struct { 47718 f func(*libc.TLS, uintptr, uint32) 47719 }{wrPCacheTruncate})), 47720 FxDestroy: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheDestroy})), 47721 } 47722 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 120)) = sqlite3_mem_methods{ 47723 FxMalloc: *(*uintptr)(unsafe.Pointer(&struct { 47724 f func(*libc.TLS, int32) uintptr 47725 }{wrMemMalloc})), FxFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemFree})), FxRealloc: *(*uintptr)(unsafe.Pointer(&struct { 47726 f func(*libc.TLS, uintptr, int32) uintptr 47727 }{wrMemRealloc})), 47728 FxSize: *(*uintptr)(unsafe.Pointer(&struct { 47729 f func(*libc.TLS, uintptr) int32 47730 }{wrMemSize})), FxRoundup: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{wrMemRoundup})), FxInit: *(*uintptr)(unsafe.Pointer(&struct { 47731 f func(*libc.TLS, uintptr) int32 47732 }{wrMemInit})), 47733 FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemShutdown})), 47734 } 47735 47736 libc.Xmemset(tls, uintptr(unsafe.Pointer(&wrapped)), 0, uint64(unsafe.Sizeof(wrapped))) 47737 47738 sqlite3.Xsqlite3_shutdown(tls) 47739 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 47740 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 47741 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 47742 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+24, bp+48)) 47743 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+120)) 47744 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+40, bp+184)) 47745 } 47746 47747 func init_wrapper_install(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47748 bp := tls.Alloc(24) 47749 defer tls.Free(24) 47750 47751 var i int32 47752 installInitWrappers(tls) 47753 for i = 1; i < objc; i++ { 47754 var z uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 47755 if libc.Xstrcmp(tls, z, ts+32544) == 0 { 47756 wrapped.Fmem_fail = 1 47757 } else if libc.Xstrcmp(tls, z, ts+29150) == 0 { 47758 wrapped.Fmutex_fail = 1 47759 } else if libc.Xstrcmp(tls, z, ts+32548) == 0 { 47760 wrapped.Fpcache_fail = 1 47761 } else { 47762 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32555, z, ts+11945)) 47763 return TCL_ERROR 47764 } 47765 } 47766 return TCL_OK 47767 } 47768 47769 func init_wrapper_uninstall(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47770 bp := tls.Alloc(24) 47771 defer tls.Free(24) 47772 47773 if objc != 1 { 47774 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47775 return TCL_ERROR 47776 } 47777 47778 sqlite3.Xsqlite3_shutdown(tls) 47779 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 47780 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 47781 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 47782 return TCL_OK 47783 } 47784 47785 func init_wrapper_clear(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47786 if objc != 1 { 47787 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47788 return TCL_ERROR 47789 } 47790 47791 wrapped.Fmem_fail = 0 47792 wrapped.Fmutex_fail = 0 47793 wrapped.Fpcache_fail = 0 47794 return TCL_OK 47795 } 47796 47797 func init_wrapper_query(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47798 var pRet uintptr 47799 47800 if objc != 1 { 47801 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47802 return TCL_ERROR 47803 } 47804 47805 pRet = tcl.XTcl_NewObj(tls) 47806 if wrapped.Fmutex_init != 0 { 47807 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+29150, -1)) 47808 } 47809 if wrapped.Fmem_init != 0 { 47810 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32544, -1)) 47811 } 47812 if wrapped.Fpcache_init != 0 { 47813 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32548, -1)) 47814 } 47815 47816 tcl.XTcl_SetObjResult(tls, interp, pRet) 47817 return TCL_OK 47818 } 47819 47820 func Sqlitetest_init_Init(tls *libc.TLS, interp uintptr) int32 { 47821 var i int32 47822 47823 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd9))/uint64(unsafe.Sizeof(struct { 47824 FzName uintptr 47825 FxProc uintptr 47826 }{})); i++ { 47827 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd9[i].FzName, aObjCmd9[i].FxProc, uintptr(0), uintptr(0)) 47828 } 47829 47830 return TCL_OK 47831 } 47832 47833 var aObjCmd9 = [4]struct { 47834 FzName uintptr 47835 FxProc uintptr 47836 }{ 47837 {FzName: ts + 32575, FxProc: 0}, 47838 {FzName: ts + 32596, FxProc: 0}, 47839 {FzName: ts + 32615, FxProc: 0}, 47840 {FzName: ts + 32638, FxProc: 0}, 47841 } 47842 47843 type sqlite3_intarray1 = struct { 47844 Fn int32 47845 F__ccgo_pad1 [4]byte 47846 Fa uintptr 47847 FxFree uintptr 47848 } 47849 47850 type sqlite3_intarray = sqlite3_intarray1 47851 47852 type intarray_vtab1 = struct { 47853 Fbase sqlite3_vtab 47854 FpContent uintptr 47855 } 47856 47857 type intarray_vtab = intarray_vtab1 47858 type intarray_cursor1 = struct { 47859 Fbase sqlite3_vtab_cursor 47860 Fi int32 47861 F__ccgo_pad1 [4]byte 47862 } 47863 47864 type intarray_cursor = intarray_cursor1 47865 47866 func intarrayFree(tls *libc.TLS, p uintptr) { 47867 if (*sqlite3_intarray)(unsafe.Pointer(p)).FxFree != 0 { 47868 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(p)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(p)).Fa) 47869 } 47870 sqlite3.Xsqlite3_free(tls, p) 47871 } 47872 47873 func intarrayDestroy(tls *libc.TLS, p uintptr) int32 { 47874 var pVtab uintptr = p 47875 sqlite3.Xsqlite3_free(tls, pVtab) 47876 return 0 47877 } 47878 47879 func intarrayCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 47880 var rc int32 = SQLITE_NOMEM 47881 var pVtab uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_vtab{}))) 47882 47883 if pVtab != 0 { 47884 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(intarray_vtab{}))) 47885 (*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent = pAux 47886 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+32657) 47887 } 47888 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 47889 return rc 47890 } 47891 47892 func intarrayOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 47893 var rc int32 = SQLITE_NOMEM 47894 var pCur uintptr 47895 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_cursor{}))) 47896 if pCur != 0 { 47897 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(intarray_cursor{}))) 47898 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 47899 rc = SQLITE_OK 47900 } 47901 return rc 47902 } 47903 47904 func intarrayClose(tls *libc.TLS, cur uintptr) int32 { 47905 var pCur uintptr = cur 47906 sqlite3.Xsqlite3_free(tls, pCur) 47907 return SQLITE_OK 47908 } 47909 47910 func intarrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 47911 var pCur uintptr = cur 47912 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 47913 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 { 47914 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))) 47915 } 47916 return SQLITE_OK 47917 } 47918 47919 func intarrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 47920 var pCur uintptr = cur 47921 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*intarray_cursor)(unsafe.Pointer(pCur)).Fi) 47922 return SQLITE_OK 47923 } 47924 47925 func intarrayEof(tls *libc.TLS, cur uintptr) int32 { 47926 var pCur uintptr = cur 47927 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 47928 return libc.Bool32((*intarray_cursor)(unsafe.Pointer(pCur)).Fi >= (*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fn) 47929 } 47930 47931 func intarrayNext(tls *libc.TLS, cur uintptr) int32 { 47932 var pCur uintptr = cur 47933 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi++ 47934 return SQLITE_OK 47935 } 47936 47937 func intarrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 47938 var pCur uintptr = pVtabCursor 47939 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi = 0 47940 return SQLITE_OK 47941 } 47942 47943 func intarrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 47944 return SQLITE_OK 47945 } 47946 47947 var intarrayModule = sqlite3_module{ 47948 FxCreate: 0, 47949 FxConnect: 0, 47950 FxBestIndex: 0, 47951 FxDisconnect: 0, 47952 FxDestroy: 0, 47953 FxOpen: 0, 47954 FxClose: 0, 47955 FxFilter: 0, 47956 FxNext: 0, 47957 FxEof: 0, 47958 FxColumn: 0, 47959 FxRowid: 0, 47960 } 47961 47962 func sqlite3_intarray_create(tls *libc.TLS, db uintptr, zName uintptr, ppReturn uintptr) int32 { 47963 bp := tls.Alloc(16) 47964 defer tls.Free(16) 47965 47966 var rc int32 = SQLITE_OK 47967 var p uintptr 47968 47969 *(*uintptr)(unsafe.Pointer(ppReturn)) = libc.AssignUintptr(&p, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_intarray{})))) 47970 if p == uintptr(0) { 47971 return SQLITE_NOMEM 47972 } 47973 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(sqlite3_intarray{}))) 47974 rc = sqlite3.Xsqlite3_create_module_v2(tls, db, zName, uintptr(unsafe.Pointer(&intarrayModule)), p, 47975 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{intarrayFree}))) 47976 if rc == SQLITE_OK { 47977 var zSql uintptr 47978 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+32699, 47979 libc.VaList(bp, zName, zName)) 47980 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 47981 sqlite3.Xsqlite3_free(tls, zSql) 47982 } 47983 return rc 47984 } 47985 47986 func sqlite3_intarray_bind(tls *libc.TLS, pIntArray uintptr, nElements int32, aElements uintptr, xFree uintptr) int32 { 47987 if (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree != 0 { 47988 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa) 47989 } 47990 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fn = nElements 47991 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa = aElements 47992 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree = xFree 47993 return SQLITE_OK 47994 } 47995 47996 func test_intarray_create(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47997 bp := tls.Alloc(148) 47998 defer tls.Free(148) 47999 48000 var zName uintptr 48001 48002 var rc int32 = SQLITE_OK 48003 48004 if objc != 3 { 48005 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 48006 return TCL_ERROR 48007 } 48008 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 48009 return TCL_ERROR 48010 } 48011 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 48012 rc = sqlite3_intarray_create(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, bp+40) 48013 if rc != SQLITE_OK { 48014 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 48015 return TCL_ERROR 48016 } 48017 sqlite3TestMakePointerStr(tls, interp, bp+48, *(*uintptr)(unsafe.Pointer(bp + 40))) 48018 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, bp+48, uintptr(0))) 48019 return TCL_OK 48020 } 48021 48022 func test_intarray_bind(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48023 bp := tls.Alloc(40) 48024 defer tls.Free(40) 48025 48026 var pArray uintptr 48027 var rc int32 = SQLITE_OK 48028 var i int32 48029 var n int32 48030 var a uintptr 48031 48032 if objc < 2 { 48033 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32737) 48034 return TCL_ERROR 48035 } 48036 pArray = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 48037 n = objc - 2 48038 a = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(n)) 48039 if a == uintptr(0) { 48040 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32746, uintptr(0))) 48041 return TCL_ERROR 48042 } 48043 for i = 0; i < n; i++ { 48044 *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) = int64(0) 48045 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + uintptr(i+2)*8)), bp+32) 48046 *(*sqlite3_int64)(unsafe.Pointer(a + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) 48047 } 48048 rc = sqlite3_intarray_bind(tls, pArray, n, a, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 48049 if rc != SQLITE_OK { 48050 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 48051 return TCL_ERROR 48052 } 48053 return TCL_OK 48054 } 48055 48056 func Sqlitetestintarray_Init(tls *libc.TLS, interp uintptr) int32 { 48057 var i int32 48058 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd10))/uint64(unsafe.Sizeof(struct { 48059 FzName uintptr 48060 FxProc uintptr 48061 FclientData uintptr 48062 }{})); i++ { 48063 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd10[i].FzName, 48064 aObjCmd10[i].FxProc, aObjCmd10[i].FclientData, uintptr(0)) 48065 } 48066 return TCL_OK 48067 } 48068 48069 var aObjCmd10 = [2]struct { 48070 FzName uintptr 48071 FxProc uintptr 48072 FclientData uintptr 48073 }{ 48074 {FzName: ts + 32759, FxProc: 0}, 48075 {FzName: ts + 32783, FxProc: 0}, 48076 } 48077 48078 type jt_file1 = struct { 48079 Fbase sqlite3_file 48080 FzName uintptr 48081 Fflags int32 48082 FeLock int32 48083 FnPage u32 48084 FnPagesize u32 48085 FpWritable uintptr 48086 FaCksum uintptr 48087 FnSync int32 48088 F__ccgo_pad1 [4]byte 48089 FiMaxOff sqlite3_int64 48090 FpNext uintptr 48091 FpReal uintptr 48092 } 48093 48094 type jt_file = jt_file1 48095 48096 var jt_vfs = sqlite3_vfs{ 48097 FiVersion: 2, 48098 FszOsFile: int32(unsafe.Sizeof(jt_file{})), 48099 FmxPathname: JT_MAX_PATHNAME, 48100 FzName: ts + 32805, 48101 FxOpen: 0, 48102 FxDelete: 0, 48103 FxAccess: 0, 48104 FxFullPathname: 0, 48105 FxDlOpen: 0, 48106 FxDlError: 0, 48107 FxDlSym: 0, 48108 FxDlClose: 0, 48109 FxRandomness: 0, 48110 FxSleep: 0, 48111 FxCurrentTime: 0, 48112 FxGetLastError: 0, 48113 FxCurrentTimeInt64: 0, 48114 } 48115 48116 var jt_io_methods = sqlite3_io_methods{ 48117 FiVersion: 1, 48118 FxClose: 0, 48119 FxRead: 0, 48120 FxWrite: 0, 48121 FxTruncate: 0, 48122 FxSync: 0, 48123 FxFileSize: 0, 48124 FxLock: 0, 48125 FxUnlock: 0, 48126 FxCheckReservedLock: 0, 48127 FxFileControl: 0, 48128 FxSectorSize: 0, 48129 FxDeviceCharacteristics: 0, 48130 } 48131 48132 type JtGlobal = struct { 48133 FpVfs uintptr 48134 FpList uintptr 48135 } 48136 48137 var g2 = JtGlobal{} 48138 48139 func enterJtMutex(tls *libc.TLS) { 48140 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 48141 } 48142 48143 func leaveJtMutex(tls *libc.TLS) { 48144 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 48145 } 48146 48147 func stop_ioerr_simulation(tls *libc.TLS, piSave uintptr, piSave2 uintptr) { 48148 *(*int32)(unsafe.Pointer(piSave)) = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 48149 *(*int32)(unsafe.Pointer(piSave2)) = sqlite3.Xsqlite3_io_error_hit 48150 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(-1)) 48151 sqlite3.Xsqlite3_io_error_hit = 0 48152 } 48153 48154 func start_ioerr_simulation(tls *libc.TLS, iSave int32, iSave2 int32) { 48155 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, iSave) 48156 sqlite3.Xsqlite3_io_error_hit = iSave2 48157 } 48158 48159 func closeTransaction(tls *libc.TLS, p uintptr) { 48160 sqlite3.Xsqlite3BitvecDestroy(tls, (*jt_file)(unsafe.Pointer(p)).FpWritable) 48161 sqlite3.Xsqlite3_free(tls, (*jt_file)(unsafe.Pointer(p)).FaCksum) 48162 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 48163 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 48164 (*jt_file)(unsafe.Pointer(p)).FnSync = 0 48165 } 48166 48167 func jtClose(tls *libc.TLS, pFile uintptr) int32 { 48168 var pp uintptr 48169 var p uintptr = pFile 48170 48171 closeTransaction(tls, p) 48172 enterJtMutex(tls) 48173 if (*jt_file)(unsafe.Pointer(p)).FzName != 0 { 48174 for pp = uintptr(unsafe.Pointer(&g2)) + 8; *(*uintptr)(unsafe.Pointer(pp)) != p; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 48175 } 48176 *(*uintptr)(unsafe.Pointer(pp)) = (*jt_file)(unsafe.Pointer(p)).FpNext 48177 } 48178 leaveJtMutex(tls) 48179 sqlite3.Xsqlite3OsClose(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48180 return SQLITE_OK 48181 } 48182 48183 func jtRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48184 var p uintptr = pFile 48185 return sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48186 } 48187 48188 func locateDatabaseHandle(tls *libc.TLS, zJournal uintptr, noLock int32) uintptr { 48189 var pMain uintptr = uintptr(0) 48190 enterJtMutex(tls) 48191 for pMain = g2.FpList; pMain != 0; pMain = (*jt_file)(unsafe.Pointer(pMain)).FpNext { 48192 var nName int32 = int32(libc.Xstrlen(tls, zJournal) - libc.Xstrlen(tls, ts+32808)) 48193 if (*jt_file)(unsafe.Pointer(pMain)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && 48194 int32(libc.Xstrlen(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName)) == nName && 48195 0 == libc.Xmemcmp(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName, zJournal, uint64(nName)) && 48196 ((*jt_file)(unsafe.Pointer(pMain)).FeLock >= SQLITE_LOCK_RESERVED || noLock != 0) { 48197 break 48198 } 48199 } 48200 leaveJtMutex(tls) 48201 return pMain 48202 } 48203 48204 func decodeUint32(tls *libc.TLS, z uintptr) u32 { 48205 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)))) 48206 } 48207 48208 func genCksum(tls *libc.TLS, z uintptr, n int32) u32 { 48209 var i int32 48210 var cksum u32 = u32(0) 48211 for i = 0; i < n; i++ { 48212 cksum = cksum + u32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) + cksum<<3 48213 } 48214 return cksum 48215 } 48216 48217 func decodeJournalHdr(tls *libc.TLS, zBuf uintptr, pnRec uintptr, pnPage uintptr, pnSector uintptr, pnPagesize uintptr) int32 { 48218 bp := tls.Alloc(8) 48219 defer tls.Free(8) 48220 48221 *(*[8]uint8)(unsafe.Pointer(bp)) = [8]uint8{uint8(0xd9), uint8(0xd5), uint8(0x05), uint8(0xf9), uint8(0x20), uint8(0xa1), uint8(0x63), uint8(0xd7)} 48222 if libc.Xmemcmp(tls, bp, zBuf, uint64(8)) != 0 { 48223 return SQLITE_ERROR 48224 } 48225 if pnRec != 0 { 48226 *(*u32)(unsafe.Pointer(pnRec)) = decodeUint32(tls, zBuf+8) 48227 } 48228 if pnPage != 0 { 48229 *(*u32)(unsafe.Pointer(pnPage)) = decodeUint32(tls, zBuf+16) 48230 } 48231 if pnSector != 0 { 48232 *(*u32)(unsafe.Pointer(pnSector)) = decodeUint32(tls, zBuf+20) 48233 } 48234 if pnPagesize != 0 { 48235 *(*u32)(unsafe.Pointer(pnPagesize)) = decodeUint32(tls, zBuf+24) 48236 } 48237 return SQLITE_OK 48238 } 48239 48240 func openTransaction(tls *libc.TLS, pMain uintptr, pJournal uintptr) int32 { 48241 bp := tls.Alloc(8) 48242 defer tls.Free(8) 48243 48244 var aData uintptr 48245 var p uintptr = (*jt_file)(unsafe.Pointer(pMain)).FpReal 48246 var rc int32 = SQLITE_OK 48247 48248 closeTransaction(tls, pMain) 48249 aData = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48250 (*jt_file)(unsafe.Pointer(pMain)).FpWritable = sqlite3.Xsqlite3BitvecCreate(tls, (*jt_file)(unsafe.Pointer(pMain)).FnPage) 48251 (*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)))) 48252 (*jt_file)(unsafe.Pointer(pJournal)).FiMaxOff = int64(0) 48253 48254 if !(int32((*jt_file)(unsafe.Pointer(pMain)).FpWritable) != 0) || !(int32((*jt_file)(unsafe.Pointer(pMain)).FaCksum) != 0) || !(aData != 0) { 48255 rc = SQLITE_IOERR | int32(12)<<8 48256 } else if (*jt_file)(unsafe.Pointer(pMain)).FnPage > u32(0) { 48257 var iTrunk u32 48258 48259 stop_ioerr_simulation(tls, bp, bp+4) 48260 48261 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), int64(0)) 48262 if rc == SQLITE_OK { 48263 var nDbsize u32 = decodeUint32(tls, aData+28) 48264 if nDbsize > u32(0) && libc.Xmemcmp(tls, aData+24, aData+92, uint64(4)) == 0 { 48265 var iPg u32 48266 for iPg = nDbsize + u32(1); iPg <= (*jt_file)(unsafe.Pointer(pMain)).FnPage; iPg++ { 48267 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, iPg) 48268 } 48269 } 48270 } 48271 iTrunk = decodeUint32(tls, aData+32) 48272 for rc == SQLITE_OK && iTrunk > u32(0) { 48273 var nLeaf u32 48274 var iLeaf u32 48275 var iOff sqlite3_int64 = i64(iTrunk-u32(1)) * i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 48276 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 48277 nLeaf = decodeUint32(tls, aData+4) 48278 for iLeaf = u32(0); rc == SQLITE_OK && iLeaf < nLeaf; iLeaf++ { 48279 var pgno u32 = decodeUint32(tls, aData+uintptr(u32(8)+u32(4)*iLeaf)) 48280 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 48281 } 48282 iTrunk = decodeUint32(tls, aData) 48283 } 48284 48285 if rc == SQLITE_OK { 48286 var ii int32 48287 for ii = 0; rc == SQLITE_OK && ii < int32((*jt_file)(unsafe.Pointer(pMain)).FnPage); ii++ { 48288 var iOff i64 = i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) * i64(ii) 48289 if iOff == i64(sqlite3.Xsqlite3PendingByte) { 48290 continue 48291 } 48292 rc = sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(pMain)).FpReal, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 48293 *(*u32)(unsafe.Pointer((*jt_file)(unsafe.Pointer(pMain)).FaCksum + uintptr(ii)*4)) = genCksum(tls, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48294 if ii+1 == int32((*jt_file)(unsafe.Pointer(pMain)).FnPage) && rc == SQLITE_IOERR|int32(2)<<8 { 48295 rc = SQLITE_OK 48296 } 48297 } 48298 } 48299 48300 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 48301 } 48302 48303 sqlite3.Xsqlite3_free(tls, aData) 48304 return rc 48305 } 48306 48307 func readJournalFile(tls *libc.TLS, p uintptr, pMain uintptr) int32 { 48308 bp := tls.Alloc(52) 48309 defer tls.Free(52) 48310 48311 var rc int32 48312 48313 var pReal uintptr 48314 var iOff sqlite3_int64 48315 var iSize sqlite3_int64 48316 var aPage uintptr 48317 48318 var cksum u32 48319 _ = cksum 48320 var pgno u32 48321 48322 var ii u32 48323 rc = SQLITE_OK 48324 pReal = (*jt_file)(unsafe.Pointer(p)).FpReal 48325 iOff = int64(0) 48326 iSize = (*jt_file)(unsafe.Pointer(p)).FiMaxOff 48327 48328 aPage = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48329 if !!(aPage != 0) { 48330 goto __1 48331 } 48332 return SQLITE_IOERR | int32(12)<<8 48333 __1: 48334 ; 48335 stop_ioerr_simulation(tls, bp, bp+4) 48336 48337 __2: 48338 if !(rc == SQLITE_OK && iOff < iSize) { 48339 goto __3 48340 } 48341 48342 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 48343 if !(rc != SQLITE_OK || 48344 decodeJournalHdr(tls, bp+8, bp+36, bp+40, bp+44, bp+48) != 0) { 48345 goto __4 48346 } 48347 goto finish_rjf 48348 __4: 48349 ; 48350 iOff = iOff + sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) 48351 48352 if !(*(*u32)(unsafe.Pointer(bp + 36)) == u32(0)) { 48353 goto __5 48354 } 48355 48356 if !(iSize >= iOff+sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44)))) { 48357 goto __6 48358 } 48359 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 48360 if !(rc != SQLITE_OK || 0 == decodeJournalHdr(tls, bp+8, uintptr(0), uintptr(0), uintptr(0), uintptr(0))) { 48361 goto __7 48362 } 48363 goto __2 48364 __7: 48365 ; 48366 __6: 48367 ; 48368 *(*u32)(unsafe.Pointer(bp + 36)) = u32((iSize - iOff) / sqlite3_int64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize+u32(8))) 48369 __5: 48370 ; 48371 ii = u32(0) 48372 __8: 48373 if !(rc == SQLITE_OK && ii < *(*u32)(unsafe.Pointer(bp + 36)) && iOff < iSize) { 48374 goto __10 48375 } 48376 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 4, iOff) 48377 if !(rc == SQLITE_OK) { 48378 goto __11 48379 } 48380 pgno = decodeUint32(tls, bp+8) 48381 if !(pgno > u32(0) && pgno <= (*jt_file)(unsafe.Pointer(pMain)).FnPage) { 48382 goto __12 48383 } 48384 if !(0 == sqlite3.Xsqlite3BitvecTest(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno)) { 48385 goto __13 48386 } 48387 rc = sqlite3.Xsqlite3OsRead(tls, pReal, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff+int64(4)) 48388 if !(rc == SQLITE_OK) { 48389 goto __14 48390 } 48391 cksum = genCksum(tls, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48392 48393 __14: 48394 ; 48395 __13: 48396 ; 48397 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 48398 __12: 48399 ; 48400 iOff = iOff + sqlite3_int64(u32(8)+(*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 48401 __11: 48402 ; 48403 goto __9 48404 __9: 48405 ii++ 48406 goto __8 48407 goto __10 48408 __10: 48409 ; 48410 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))) 48411 goto __2 48412 __3: 48413 ; 48414 finish_rjf: 48415 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 48416 sqlite3.Xsqlite3_free(tls, aPage) 48417 if !(rc == SQLITE_IOERR|int32(2)<<8) { 48418 goto __15 48419 } 48420 rc = SQLITE_OK 48421 __15: 48422 ; 48423 return rc 48424 } 48425 48426 func jtWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48427 var rc int32 48428 var p uintptr = pFile 48429 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 48430 if iOfst == int64(0) { 48431 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48432 48433 if iAmt == 28 { 48434 closeTransaction(tls, pMain) 48435 } else if iAmt != 12 { 48436 var z uintptr = zBuf 48437 (*jt_file)(unsafe.Pointer(pMain)).FnPage = decodeUint32(tls, z+16) 48438 (*jt_file)(unsafe.Pointer(pMain)).FnPagesize = decodeUint32(tls, z+24) 48439 if SQLITE_OK != libc.AssignInt32(&rc, openTransaction(tls, pMain, p)) { 48440 return rc 48441 } 48442 } 48443 } 48444 if (*jt_file)(unsafe.Pointer(p)).FiMaxOff < iOfst+sqlite_int64(iAmt) { 48445 (*jt_file)(unsafe.Pointer(p)).FiMaxOff = iOfst + sqlite_int64(iAmt) 48446 } 48447 } 48448 48449 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 48450 if iAmt < int32((*jt_file)(unsafe.Pointer(p)).FnPagesize) && 48451 (*jt_file)(unsafe.Pointer(p)).FnPagesize%u32(iAmt) == u32(0) && 48452 iOfst >= sqlite_int64(sqlite3.Xsqlite3PendingByte+512) && 48453 iOfst+sqlite_int64(iAmt) <= sqlite_int64(u32(sqlite3.Xsqlite3PendingByte)+(*jt_file)(unsafe.Pointer(p)).FnPagesize) { 48454 } else { 48455 var pgno u32 = u32(iOfst/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)) 48456 _ = pgno 48457 48458 } 48459 } 48460 48461 rc = sqlite3.Xsqlite3OsWrite(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48462 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && iAmt == 12 { 48463 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48464 var rc2 int32 = readJournalFile(tls, p, pMain) 48465 if rc == SQLITE_OK { 48466 rc = rc2 48467 } 48468 } 48469 return rc 48470 } 48471 48472 func jtTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 48473 var p uintptr = pFile 48474 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && size == int64(0) { 48475 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48476 closeTransaction(tls, pMain) 48477 } 48478 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 48479 var pgno u32 48480 var locking_page u32 = u32(sqlite3.Xsqlite3PendingByte)/(*jt_file)(unsafe.Pointer(p)).FnPagesize + u32(1) 48481 _ = locking_page 48482 for pgno = u32(size/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)); pgno <= (*jt_file)(unsafe.Pointer(p)).FnPage; pgno++ { 48483 } 48484 } 48485 return sqlite3.Xsqlite3OsTruncate(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, size) 48486 } 48487 48488 func jtSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 48489 var p uintptr = pFile 48490 48491 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 48492 var rc int32 48493 var pMain uintptr 48494 48495 pMain = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48496 48497 if pMain != 0 && (*jt_file)(unsafe.Pointer(pMain)).FpWritable != 0 { 48498 (*jt_file)(unsafe.Pointer(pMain)).FnSync++ 48499 rc = readJournalFile(tls, p, pMain) 48500 if rc != SQLITE_OK { 48501 return rc 48502 } 48503 } 48504 } 48505 48506 return sqlite3.Xsqlite3OsSync(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, flags) 48507 } 48508 48509 func jtFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 48510 var p uintptr = pFile 48511 return sqlite3.Xsqlite3OsFileSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pSize) 48512 } 48513 48514 func jtLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48515 var rc int32 48516 var p uintptr = pFile 48517 rc = sqlite3.Xsqlite3OsLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 48518 if rc == SQLITE_OK && eLock > (*jt_file)(unsafe.Pointer(p)).FeLock { 48519 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 48520 } 48521 return rc 48522 } 48523 48524 func jtUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48525 var rc int32 48526 var p uintptr = pFile 48527 rc = sqlite3.Xsqlite3OsUnlock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 48528 if rc == SQLITE_OK && eLock < (*jt_file)(unsafe.Pointer(p)).FeLock { 48529 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 48530 } 48531 return rc 48532 } 48533 48534 func jtCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 48535 var p uintptr = pFile 48536 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pResOut) 48537 } 48538 48539 func jtFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 48540 var p uintptr = pFile 48541 return (*struct { 48542 f func(*libc.TLS, uintptr, int32, uintptr) int32 48543 })(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) 48544 } 48545 48546 func jtSectorSize(tls *libc.TLS, pFile uintptr) int32 { 48547 var p uintptr = pFile 48548 return sqlite3.Xsqlite3OsSectorSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48549 } 48550 48551 func jtDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 48552 var p uintptr = pFile 48553 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48554 } 48555 48556 func jtOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 48557 var rc int32 48558 var p uintptr = pFile 48559 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 48560 (*jt_file)(unsafe.Pointer(p)).FpReal = p + 1*80 48561 (*sqlite3_file)(unsafe.Pointer((*jt_file)(unsafe.Pointer(p)).FpReal)).FpMethods = uintptr(0) 48562 rc = sqlite3.Xsqlite3OsOpen(tls, g2.FpVfs, zName, (*jt_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 48563 48564 if rc == SQLITE_OK { 48565 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&jt_io_methods)) 48566 (*jt_file)(unsafe.Pointer(p)).FeLock = 0 48567 (*jt_file)(unsafe.Pointer(p)).FzName = zName 48568 (*jt_file)(unsafe.Pointer(p)).Fflags = flags 48569 (*jt_file)(unsafe.Pointer(p)).FpNext = uintptr(0) 48570 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 48571 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 48572 enterJtMutex(tls) 48573 if zName != 0 { 48574 (*jt_file)(unsafe.Pointer(p)).FpNext = g2.FpList 48575 g2.FpList = p 48576 } 48577 leaveJtMutex(tls) 48578 } 48579 return rc 48580 } 48581 48582 func jtDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 48583 var nPath int32 = int32(libc.Xstrlen(tls, zPath)) 48584 if nPath > 8 && 0 == libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nPath-8)) { 48585 var pMain uintptr = locateDatabaseHandle(tls, zPath, 0) 48586 if pMain != 0 { 48587 closeTransaction(tls, pMain) 48588 } 48589 } 48590 48591 return sqlite3.Xsqlite3OsDelete(tls, g2.FpVfs, zPath, dirSync) 48592 } 48593 48594 func jtAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 48595 return sqlite3.Xsqlite3OsAccess(tls, g2.FpVfs, zPath, flags, pResOut) 48596 } 48597 48598 func jtFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 48599 return sqlite3.Xsqlite3OsFullPathname(tls, g2.FpVfs, zPath, nOut, zOut) 48600 } 48601 48602 func jtDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 48603 return (*struct { 48604 f func(*libc.TLS, uintptr, uintptr) uintptr 48605 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlOpen})).f(tls, g2.FpVfs, zPath) 48606 } 48607 48608 func jtDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 48609 (*struct { 48610 f func(*libc.TLS, uintptr, int32, uintptr) 48611 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlError})).f(tls, g2.FpVfs, nByte, zErrMsg) 48612 } 48613 48614 func jtDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 48615 return (*struct { 48616 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 48617 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlSym})).f(tls, g2.FpVfs, p, zSym) 48618 } 48619 48620 func jtDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 48621 (*struct { 48622 f func(*libc.TLS, uintptr, uintptr) 48623 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlClose})).f(tls, g2.FpVfs, pHandle) 48624 } 48625 48626 func jtRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 48627 return sqlite3.Xsqlite3OsRandomness(tls, g2.FpVfs, nByte, zBufOut) 48628 } 48629 48630 func jtSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 48631 return sqlite3.Xsqlite3OsSleep(tls, g2.FpVfs, nMicro) 48632 } 48633 48634 func jtCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48635 return (*struct { 48636 f func(*libc.TLS, uintptr, uintptr) int32 48637 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTime})).f(tls, g2.FpVfs, pTimeOut) 48638 } 48639 48640 func jtCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48641 return (*struct { 48642 f func(*libc.TLS, uintptr, uintptr) int32 48643 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64})).f(tls, g2.FpVfs, pTimeOut) 48644 } 48645 48646 func jtGetLastError(tls *libc.TLS, pVfs uintptr, n int32, z uintptr) int32 { 48647 return (*struct { 48648 f func(*libc.TLS, uintptr, int32, uintptr) int32 48649 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxGetLastError})).f(tls, g2.FpVfs, n, z) 48650 } 48651 48652 func jt_register(tls *libc.TLS, zWrap uintptr, isDefault int32) int32 { 48653 g2.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, zWrap) 48654 if g2.FpVfs == uintptr(0) { 48655 return SQLITE_ERROR 48656 } 48657 jt_vfs.FszOsFile = int32(uint64(unsafe.Sizeof(jt_file{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FszOsFile)) 48658 if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FiVersion == 1 { 48659 jt_vfs.FiVersion = 1 48660 } else if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64 == uintptr(0) { 48661 jt_vfs.FxCurrentTimeInt64 = uintptr(0) 48662 } 48663 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&jt_vfs)), isDefault) 48664 return SQLITE_OK 48665 } 48666 48667 func jt_unregister(tls *libc.TLS) { 48668 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&jt_vfs))) 48669 } 48670 48671 type MemFault = struct { 48672 FiCountdown int32 48673 FnRepeat int32 48674 FnBenign int32 48675 FnFail int32 48676 FnOkBefore int32 48677 FnOkAfter int32 48678 Fenable u8 48679 F__ccgo_pad1 [3]byte 48680 FisInstalled int32 48681 FisBenignMode int32 48682 F__ccgo_pad2 [4]byte 48683 Fm sqlite3_mem_methods 48684 } 48685 48686 var memfault MemFault 48687 48688 func sqlite3Fault(tls *libc.TLS) { 48689 cnt1++ 48690 } 48691 48692 var cnt1 int32 = 0 48693 48694 func sqlite3FirstFault(tls *libc.TLS) { 48695 cnt2++ 48696 } 48697 48698 var cnt2 int32 = 0 48699 48700 func faultsimStep(tls *libc.TLS) int32 { 48701 if !(int32(memfault.Fenable) != 0) { 48702 memfault.FnOkAfter++ 48703 return 0 48704 } 48705 if memfault.FiCountdown > 0 { 48706 memfault.FiCountdown-- 48707 memfault.FnOkBefore++ 48708 return 0 48709 } 48710 if memfault.FnFail == 0 { 48711 sqlite3FirstFault(tls) 48712 } 48713 sqlite3Fault(tls) 48714 memfault.FnFail++ 48715 if memfault.FisBenignMode > 0 { 48716 memfault.FnBenign++ 48717 } 48718 memfault.FnRepeat-- 48719 if memfault.FnRepeat <= 0 { 48720 memfault.Fenable = u8(0) 48721 } 48722 return 1 48723 } 48724 48725 func faultsimMalloc(tls *libc.TLS, n int32) uintptr { 48726 var p uintptr = uintptr(0) 48727 if !(faultsimStep(tls) != 0) { 48728 p = (*struct { 48729 f func(*libc.TLS, int32) uintptr 48730 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxMalloc})).f(tls, n) 48731 } 48732 return p 48733 } 48734 48735 func faultsimRealloc(tls *libc.TLS, pOld uintptr, n int32) uintptr { 48736 var p uintptr = uintptr(0) 48737 if !(faultsimStep(tls) != 0) { 48738 p = (*struct { 48739 f func(*libc.TLS, uintptr, int32) uintptr 48740 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxRealloc})).f(tls, pOld, n) 48741 } 48742 return p 48743 } 48744 48745 func faultsimConfig(tls *libc.TLS, nDelay int32, nRepeat int32) { 48746 memfault.FiCountdown = nDelay 48747 memfault.FnRepeat = nRepeat 48748 memfault.FnBenign = 0 48749 memfault.FnFail = 0 48750 memfault.FnOkBefore = 0 48751 memfault.FnOkAfter = 0 48752 memfault.Fenable = u8(libc.Bool32(nDelay >= 0)) 48753 48754 memfault.FisBenignMode = 0 48755 } 48756 48757 func faultsimFailures(tls *libc.TLS) int32 { 48758 return memfault.FnFail 48759 } 48760 48761 func faultsimBenignFailures(tls *libc.TLS) int32 { 48762 return memfault.FnBenign 48763 } 48764 48765 func faultsimPending(tls *libc.TLS) int32 { 48766 if memfault.Fenable != 0 { 48767 return memfault.FiCountdown 48768 } else { 48769 return -1 48770 } 48771 return int32(0) 48772 } 48773 48774 func faultsimBeginBenign(tls *libc.TLS) { 48775 memfault.FisBenignMode++ 48776 } 48777 48778 func faultsimEndBenign(tls *libc.TLS) { 48779 memfault.FisBenignMode-- 48780 } 48781 48782 func faultsimInstall(tls *libc.TLS, install int32) int32 { 48783 bp := tls.Alloc(200) 48784 defer tls.Free(200) 48785 48786 var rc int32 48787 48788 install = func() int32 { 48789 if install != 0 { 48790 return 1 48791 } 48792 return 0 48793 }() 48794 48795 if install == memfault.FisInstalled { 48796 return SQLITE_ERROR 48797 } 48798 48799 if install != 0 { 48800 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp, uintptr(unsafe.Pointer(&memfault))+40)) 48801 48802 if rc == SQLITE_OK { 48803 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)) = memfault.Fm 48804 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxMalloc = *(*uintptr)(unsafe.Pointer(&struct { 48805 f func(*libc.TLS, int32) uintptr 48806 }{faultsimMalloc})) 48807 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxRealloc = *(*uintptr)(unsafe.Pointer(&struct { 48808 f func(*libc.TLS, uintptr, int32) uintptr 48809 }{faultsimRealloc})) 48810 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, bp+72)) 48811 } 48812 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 48813 libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimBeginBenign})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimEndBenign})))) 48814 } else { 48815 libc.Xmemset(tls, bp+136, 0, uint64(unsafe.Sizeof(sqlite3_mem_methods{}))) 48816 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+136)) 48817 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+40, bp+136)) 48818 48819 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+48, uintptr(unsafe.Pointer(&memfault))+40)) 48820 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 48821 libc.VaList(bp+56, uintptr(0), uintptr(0))) 48822 } 48823 48824 if rc == SQLITE_OK { 48825 memfault.FisInstalled = 1 48826 } 48827 return rc 48828 } 48829 48830 func pointerToText(tls *libc.TLS, p uintptr, z uintptr) { 48831 bp := tls.Alloc(20) 48832 defer tls.Free(20) 48833 *(*uintptr)(unsafe.Pointer(bp + 8)) = p 48834 48835 var i int32 48836 var k int32 48837 48838 if *(*uintptr)(unsafe.Pointer(bp + 8)) == uintptr(0) { 48839 libc.Xstrcpy(tls, z, ts+14193) 48840 return 48841 } 48842 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48843 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 48844 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48845 libc.Xmemcpy(tls, bp+16, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 48846 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = sqlite3_uint64(*(*uint32)(unsafe.Pointer(bp + 16))) 48847 } else { 48848 } 48849 i = 0 48850 k = int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) - uint64(1)) 48851 __1: 48852 if !(uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2)) { 48853 goto __3 48854 } 48855 { 48856 *(*int8)(unsafe.Pointer(z + uintptr(k))) = zHex[*(*sqlite3_uint64)(unsafe.Pointer(bp))&uint64(0xf)] 48857 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 4 48858 48859 } 48860 goto __2 48861 __2: 48862 i++ 48863 k-- 48864 goto __1 48865 goto __3 48866 __3: 48867 ; 48868 *(*int8)(unsafe.Pointer(z + 16)) = int8(0) 48869 } 48870 48871 var zHex = *(*[17]int8)(unsafe.Pointer(ts + 31194)) 48872 48873 func hexToInt(tls *libc.TLS, h int32) int32 { 48874 if h >= '0' && h <= '9' { 48875 return h - '0' 48876 } else if h >= 'a' && h <= 'f' { 48877 return h - 'a' + 10 48878 } else { 48879 return -1 48880 } 48881 return int32(0) 48882 } 48883 48884 func textToPointer(tls *libc.TLS, z uintptr, pp uintptr) int32 { 48885 bp := tls.Alloc(12) 48886 defer tls.Free(12) 48887 48888 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(0) 48889 var i int32 48890 48891 for i = 0; uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) && *(*int8)(unsafe.Pointer(z)) != 0; i++ { 48892 var v int32 48893 v = hexToInt(tls, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) 48894 if v < 0 { 48895 return TCL_ERROR 48896 } 48897 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = *(*sqlite3_uint64)(unsafe.Pointer(bp))*uint64(16) + sqlite3_uint64(v) 48898 } 48899 if int32(*(*int8)(unsafe.Pointer(z))) != 0 { 48900 return TCL_ERROR 48901 } 48902 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48903 libc.Xmemcpy(tls, pp, bp, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 48904 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48905 *(*uint32)(unsafe.Pointer(bp + 8)) = uint32(*(*sqlite3_uint64)(unsafe.Pointer(bp))) 48906 libc.Xmemcpy(tls, pp, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 48907 } else { 48908 } 48909 return TCL_OK 48910 } 48911 48912 func test_malloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48913 bp := tls.Alloc(120) 48914 defer tls.Free(120) 48915 48916 var p uintptr 48917 48918 if objc != 2 { 48919 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32817) 48920 return TCL_ERROR 48921 } 48922 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 48923 return TCL_ERROR 48924 } 48925 p = sqlite3.Xsqlite3_malloc(tls, int32(uint32(*(*int32)(unsafe.Pointer(bp + 16))))) 48926 pointerToText(tls, p, bp+20) 48927 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+20, uintptr(0))) 48928 return TCL_OK 48929 } 48930 48931 func test_realloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48932 bp := tls.Alloc(156) 48933 defer tls.Free(156) 48934 48935 var p uintptr 48936 48937 if objc != 3 { 48938 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32824) 48939 return TCL_ERROR 48940 } 48941 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 48942 return TCL_ERROR 48943 } 48944 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 48945 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48946 return TCL_ERROR 48947 } 48948 p = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), int32(uint32(*(*int32)(unsafe.Pointer(bp + 40))))) 48949 pointerToText(tls, p, bp+56) 48950 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+56, uintptr(0))) 48951 return TCL_OK 48952 } 48953 48954 func test_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48955 bp := tls.Alloc(32) 48956 defer tls.Free(32) 48957 48958 if objc != 2 { 48959 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32851) 48960 return TCL_ERROR 48961 } 48962 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 48963 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48964 return TCL_ERROR 48965 } 48966 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 48967 return TCL_OK 48968 } 48969 48970 func test_memset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48971 bp := tls.Alloc(172) 48972 defer tls.Free(172) 48973 48974 var i int32 48975 var zHex uintptr 48976 var zOut uintptr 48977 48978 if objc != 4 { 48979 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32857) 48980 return TCL_ERROR 48981 } 48982 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 48983 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48984 return TCL_ERROR 48985 } 48986 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 48987 return TCL_ERROR 48988 } 48989 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 48990 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 48991 return TCL_ERROR 48992 } 48993 zHex = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+68) 48994 if uint64(*(*int32)(unsafe.Pointer(bp + 68))) > uint64(unsafe.Sizeof([100]int8{}))*uint64(2) { 48995 *(*int32)(unsafe.Pointer(bp + 68)) = int32(uint64(unsafe.Sizeof([100]int8{})) * uint64(2)) 48996 } 48997 *(*int32)(unsafe.Pointer(bp + 68)) = sqlite3TestHexToBin(tls, zHex, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 48998 if *(*int32)(unsafe.Pointer(bp + 68)) == 0 { 48999 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+32896, uintptr(0))) 49000 return TCL_ERROR 49001 } 49002 zOut = *(*uintptr)(unsafe.Pointer(bp + 56)) 49003 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 49004 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i%*(*int32)(unsafe.Pointer(bp + 68))))) 49005 } 49006 return TCL_OK 49007 } 49008 49009 func test_memget(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49010 bp := tls.Alloc(168) 49011 defer tls.Free(168) 49012 49013 var n int32 49014 var zBin uintptr 49015 49016 if objc != 3 { 49017 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32904) 49018 return TCL_ERROR 49019 } 49020 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 49021 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49022 return TCL_ERROR 49023 } 49024 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 49025 return TCL_ERROR 49026 } 49027 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 49028 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 49029 return TCL_ERROR 49030 } 49031 zBin = *(*uintptr)(unsafe.Pointer(bp + 56)) 49032 for *(*int32)(unsafe.Pointer(bp + 64)) > 0 { 49033 if uint64(*(*int32)(unsafe.Pointer(bp + 64))) > (uint64(unsafe.Sizeof([100]int8{}))-uint64(1))/uint64(2) { 49034 n = int32((uint64(unsafe.Sizeof([100]int8{})) - uint64(1)) / uint64(2)) 49035 } else { 49036 n = *(*int32)(unsafe.Pointer(bp + 64)) 49037 } 49038 libc.Xmemcpy(tls, bp+68, zBin, uint64(n)) 49039 zBin += uintptr(n) 49040 *(*int32)(unsafe.Pointer(bp + 64)) -= n 49041 sqlite3TestBinToHex(tls, bp+68, n) 49042 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+68, uintptr(0))) 49043 } 49044 return TCL_OK 49045 } 49046 49047 func test_memory_used(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49048 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_used(tls))) 49049 return TCL_OK 49050 } 49051 49052 func test_memory_highwater(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49053 bp := tls.Alloc(4) 49054 defer tls.Free(4) 49055 49056 *(*int32)(unsafe.Pointer(bp)) = 0 49057 if objc != 1 && objc != 2 { 49058 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32917) 49059 return TCL_ERROR 49060 } 49061 if objc == 2 { 49062 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49063 return TCL_ERROR 49064 } 49065 } 49066 tcl.XTcl_SetObjResult(tls, interp, 49067 tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_highwater(tls, *(*int32)(unsafe.Pointer(bp))))) 49068 return TCL_OK 49069 } 49070 49071 func test_memdebug_backtrace(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49072 bp := tls.Alloc(4) 49073 defer tls.Free(4) 49074 49075 if objc != 2 { 49076 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32925) 49077 return TCL_ERROR 49078 } 49079 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49080 return TCL_ERROR 49081 } 49082 return TCL_OK 49083 } 49084 49085 func test_memdebug_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49086 if objc != 2 { 49087 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49088 return TCL_ERROR 49089 } 49090 return TCL_OK 49091 } 49092 49093 func test_memdebug_malloc_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49094 var nMalloc int32 = -1 49095 if objc != 1 { 49096 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 49097 return TCL_ERROR 49098 } 49099 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nMalloc)) 49100 return TCL_OK 49101 } 49102 49103 func test_memdebug_fail(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49104 bp := tls.Alloc(36) 49105 defer tls.Free(36) 49106 49107 var ii int32 49108 49109 *(*int32)(unsafe.Pointer(bp + 32)) = 1 49110 var pBenignCnt uintptr = uintptr(0) 49111 var nBenign int32 49112 var nFail int32 = 0 49113 49114 if objc < 2 { 49115 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32939) 49116 return TCL_ERROR 49117 } 49118 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24) != 0 { 49119 return TCL_ERROR 49120 } 49121 49122 for ii = 2; ii < objc; ii = ii + 2 { 49123 var zOption uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii)*8)), bp+28) 49124 var zErr uintptr = uintptr(0) 49125 49126 if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32957, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 49127 if ii == objc-1 { 49128 zErr = ts + 12638 49129 } else { 49130 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)), bp+32) != 0 { 49131 return TCL_ERROR 49132 } 49133 } 49134 } else if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32965, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 49135 if ii == objc-1 { 49136 zErr = ts + 12638 49137 } else { 49138 pBenignCnt = *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)) 49139 } 49140 } else { 49141 zErr = ts + 12444 49142 } 49143 49144 if zErr != 0 { 49145 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErr, zOption, 0)) 49146 return TCL_ERROR 49147 } 49148 } 49149 49150 nBenign = faultsimBenignFailures(tls) 49151 nFail = faultsimFailures(tls) 49152 faultsimConfig(tls, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32))) 49153 49154 if pBenignCnt != 0 { 49155 tcl.XTcl_ObjSetVar2(tls, interp, pBenignCnt, uintptr(0), tcl.XTcl_NewIntObj(tls, nBenign), 0) 49156 } 49157 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nFail)) 49158 return TCL_OK 49159 } 49160 49161 func test_memdebug_pending(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49162 var nPending int32 49163 if objc != 1 { 49164 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 49165 return TCL_ERROR 49166 } 49167 nPending = faultsimPending(tls) 49168 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPending)) 49169 return TCL_OK 49170 } 49171 49172 var sqlite3_memdebug_title_count int32 = 0 49173 49174 func test_memdebug_settitle(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49175 sqlite3_memdebug_title_count++ 49176 if objc != 2 { 49177 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32976) 49178 return TCL_ERROR 49179 } 49180 return TCL_OK 49181 } 49182 49183 var aMallocLog Tcl_HashTable 49184 var mallocLogEnabled int32 = 0 49185 49186 type MallocLog1 = struct { 49187 FnCall int32 49188 FnByte int32 49189 } 49190 49191 type MallocLog = MallocLog1 49192 49193 func test_memdebug_log_clear(tls *libc.TLS) { 49194 bp := tls.Alloc(24) 49195 defer tls.Free(24) 49196 49197 var pEntry uintptr 49198 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp) { 49199 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 49200 tcl.XTcl_Free(tls, pLog) 49201 } 49202 tcl.XTcl_DeleteHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog))) 49203 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 49204 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 49205 return uint64(1) 49206 } 49207 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 49208 }())) 49209 } 49210 49211 func test_memdebug_log(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49212 bp := tls.Alloc(128) 49213 defer tls.Free(128) 49214 49215 if !(isInit != 0) { 49216 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 49217 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 49218 return uint64(1) 49219 } 49220 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 49221 }())) 49222 isInit = 1 49223 } 49224 49225 if objc < 2 { 49226 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 49227 } 49228 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&MB_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp) != 0 { 49229 return TCL_ERROR 49230 } 49231 49232 switch uint32(*(*int32)(unsafe.Pointer(bp))) { 49233 case uint32(0): 49234 mallocLogEnabled = 1 49235 break 49236 case uint32(1): 49237 mallocLogEnabled = 0 49238 break 49239 case uint32(2): 49240 { 49241 var pEntry uintptr 49242 var pRet uintptr = tcl.XTcl_NewObj(tls) 49243 49244 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp+8); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp+8) { 49245 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 49246 var aKey uintptr = func() uintptr { 49247 if (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == 1 || (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == -1 { 49248 return *(*uintptr)(unsafe.Pointer(pEntry + 32)) 49249 } 49250 return pEntry + 32 49251 }() 49252 var ii int32 49253 49254 *(*uintptr)(unsafe.Pointer(bp + 32)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnCall) 49255 *(*uintptr)(unsafe.Pointer(bp + 32 + 1*8)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnByte) 49256 for ii = 0; ii < MALLOC_LOG_FRAMES; ii++ { 49257 *(*uintptr)(unsafe.Pointer(bp + 32 + uintptr(ii+2)*8)) = tcl.XTcl_NewWideIntObj(tls, *(*Tcl_WideInt)(unsafe.Pointer(aKey + uintptr(ii)*8))) 49258 } 49259 49260 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, 49261 tcl.XTcl_NewListObj(tls, MALLOC_LOG_FRAMES+2, bp+32)) 49262 } 49263 49264 tcl.XTcl_SetObjResult(tls, interp, pRet) 49265 break 49266 49267 } 49268 case uint32(3): 49269 { 49270 test_memdebug_log_clear(tls) 49271 break 49272 49273 } 49274 49275 case uint32(4): 49276 { 49277 break 49278 49279 } 49280 } 49281 49282 return TCL_OK 49283 } 49284 49285 var isInit int32 = 0 49286 var MB_strs = [5]uintptr{ts + 32998, ts + 33004, ts + 33009, ts + 33014, ts + 33020} 49287 49288 func test_config_pagecache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49289 bp := tls.Alloc(56) 49290 defer tls.Free(56) 49291 49292 var pRes uintptr 49293 if objc != 3 { 49294 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33025) 49295 return TCL_ERROR 49296 } 49297 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+48) != 0 { 49298 return TCL_ERROR 49299 } 49300 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+52) != 0 { 49301 return TCL_ERROR 49302 } 49303 libc.Xfree(tls, buf1) 49304 buf1 = uintptr(0) 49305 49306 pRes = tcl.XTcl_NewObj(tls) 49307 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszPage)) 49308 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnPage)) 49309 tcl.XTcl_SetObjResult(tls, interp, pRes) 49310 49311 if *(*int32)(unsafe.Pointer(bp + 48)) < 0 { 49312 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp, uintptr(0), 0, 0)) 49313 } else { 49314 buf1 = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 48))**(*int32)(unsafe.Pointer(bp + 52)))) 49315 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp+24, buf1, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 49316 } 49317 return TCL_OK 49318 } 49319 49320 var buf1 uintptr = uintptr(0) 49321 49322 func test_alt_pcache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49323 bp := tls.Alloc(32) 49324 defer tls.Free(32) 49325 49326 *(*int32)(unsafe.Pointer(bp + 20)) = 0 49327 *(*int32)(unsafe.Pointer(bp + 24)) = 0 49328 *(*int32)(unsafe.Pointer(bp + 28)) = 0 49329 if objc < 2 || objc > 5 { 49330 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 49331 ts+33032) 49332 return TCL_ERROR 49333 } 49334 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 49335 return TCL_ERROR 49336 } 49337 if objc >= 3 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 49338 return TCL_ERROR 49339 } 49340 if objc >= 4 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 49341 return TCL_ERROR 49342 } 49343 if objc >= 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 49344 return TCL_ERROR 49345 } 49346 if *(*int32)(unsafe.Pointer(bp + 20)) < 0 || *(*int32)(unsafe.Pointer(bp + 20)) > 100 { 49347 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33079, 49348 uintptr(0))) 49349 return TCL_ERROR 49350 } 49351 installTestPCache(tls, *(*int32)(unsafe.Pointer(bp + 16)), uint32(*(*int32)(unsafe.Pointer(bp + 20))), uint32(*(*int32)(unsafe.Pointer(bp + 24))), 49352 uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 49353 return TCL_OK 49354 } 49355 49356 func test_config_memstatus(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49357 bp := tls.Alloc(12) 49358 defer tls.Free(12) 49359 49360 var rc int32 49361 if objc != 2 { 49362 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 49363 return TCL_ERROR 49364 } 49365 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49366 return TCL_ERROR 49367 } 49368 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MEMSTATUS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49369 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 49370 return TCL_OK 49371 } 49372 49373 func test_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49374 bp := tls.Alloc(24) 49375 defer tls.Free(24) 49376 49377 var pRet uintptr 49378 if objc != 3 { 49379 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33122) 49380 return TCL_ERROR 49381 } 49382 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 49383 return TCL_ERROR 49384 } 49385 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 49386 return TCL_ERROR 49387 } 49388 pRet = tcl.XTcl_NewObj(tls) 49389 tcl.XTcl_ListObjAppendElement(tls, 49390 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszLookaside)) 49391 tcl.XTcl_ListObjAppendElement(tls, 49392 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnLookaside)) 49393 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOOKASIDE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 20)))) 49394 tcl.XTcl_SetObjResult(tls, interp, pRet) 49395 return TCL_OK 49396 } 49397 49398 func test_db_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49399 bp := tls.Alloc(84) 49400 defer tls.Free(84) 49401 49402 var rc int32 49403 49404 if objc != 5 { 49405 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33133) 49406 return TCL_ERROR 49407 } 49408 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 49409 return TCL_ERROR 49410 } 49411 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 49412 return TCL_ERROR 49413 } 49414 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) != 0 { 49415 return TCL_ERROR 49416 } 49417 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 49418 return TCL_ERROR 49419 } 49420 if *(*int32)(unsafe.Pointer(bp + 72)) == 0 { 49421 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)))) 49422 } 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{})) { 49423 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)))) 49424 } else { 49425 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+33150, uintptr(0))) 49426 return TCL_ERROR 49427 } 49428 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 49429 return TCL_OK 49430 } 49431 49432 var azBuf [2][10000]int8 49433 49434 func test_config_heap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49435 bp := tls.Alloc(56) 49436 defer tls.Free(56) 49437 49438 var rc int32 49439 49440 var aArg uintptr = objv + 1*8 49441 var nArg int32 = objc - 1 49442 49443 if nArg != 2 { 49444 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33188) 49445 return TCL_ERROR 49446 } 49447 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+48) != 0 { 49448 return TCL_ERROR 49449 } 49450 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg + 1*8)), bp+52) != 0 { 49451 return TCL_ERROR 49452 } 49453 49454 if *(*int32)(unsafe.Pointer(bp + 48)) == 0 { 49455 libc.Xfree(tls, zBuf) 49456 zBuf = uintptr(0) 49457 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp, uintptr(0), 0, 0)) 49458 } else { 49459 zBuf = libc.Xrealloc(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp + 48)))) 49460 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp+24, zBuf, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 49461 } 49462 49463 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49464 return TCL_OK 49465 } 49466 49467 var zBuf uintptr 49468 49469 func test_config_heap_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49470 bp := tls.Alloc(12) 49471 defer tls.Free(12) 49472 49473 var rc int32 49474 49475 var aArg uintptr = objv + 1*8 49476 var nArg int32 = objc - 1 49477 49478 if nArg != 1 { 49479 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 49480 return TCL_ERROR 49481 } 49482 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+8) != 0 { 49483 return TCL_ERROR 49484 } 49485 49486 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_WIN32_HEAPSIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49487 49488 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49489 return TCL_OK 49490 } 49491 49492 func test_config_error(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49493 bp := tls.Alloc(40) 49494 defer tls.Free(40) 49495 49496 if objc != 2 && objc != 1 { 49497 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33204) 49498 return TCL_ERROR 49499 } 49500 if objc == 2 { 49501 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 49502 return TCL_ERROR 49503 } 49504 if sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 99999, 0) != SQLITE_ERROR { 49505 tcl.XTcl_AppendResult(tls, interp, 49506 libc.VaList(bp, ts+33209, 49507 uintptr(0))) 49508 return TCL_ERROR 49509 } 49510 } else { 49511 if sqlite3.Xsqlite3_config(tls, 99999, 0) != SQLITE_ERROR { 49512 tcl.XTcl_AppendResult(tls, interp, 49513 libc.VaList(bp+16, ts+33267, 49514 uintptr(0))) 49515 return TCL_ERROR 49516 } 49517 } 49518 return TCL_OK 49519 } 49520 49521 func test_config_uri(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49522 bp := tls.Alloc(12) 49523 defer tls.Free(12) 49524 49525 var rc int32 49526 49527 if objc != 2 { 49528 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49529 return TCL_ERROR 49530 } 49531 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49532 return TCL_ERROR 49533 } 49534 49535 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_URI, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49536 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49537 49538 return TCL_OK 49539 } 49540 49541 func test_config_cis(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49542 bp := tls.Alloc(12) 49543 defer tls.Free(12) 49544 49545 var rc int32 49546 49547 if objc != 2 { 49548 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49549 return TCL_ERROR 49550 } 49551 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49552 return TCL_ERROR 49553 } 49554 49555 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_COVERING_INDEX_SCAN, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49556 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49557 49558 return TCL_OK 49559 } 49560 49561 func test_config_pmasz(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49562 bp := tls.Alloc(12) 49563 defer tls.Free(12) 49564 49565 var rc int32 49566 49567 if objc != 2 { 49568 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49569 return TCL_ERROR 49570 } 49571 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49572 return TCL_ERROR 49573 } 49574 49575 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PMASZ, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49576 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49577 49578 return TCL_OK 49579 } 49580 49581 func test_dump_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49582 if objc != 2 { 49583 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49584 return TCL_ERROR 49585 } 49586 49587 switch int32(clientData) { 49588 case 3: 49589 { 49590 } 49591 fallthrough 49592 case 5: 49593 { 49594 } 49595 } 49596 return TCL_OK 49597 } 49598 49599 func test_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49600 bp := tls.Alloc(16) 49601 defer tls.Free(16) 49602 49603 var rc int32 49604 49605 var i int32 49606 *(*int32)(unsafe.Pointer(bp)) = 0 49607 49608 var zOpName uintptr 49609 var pResult uintptr 49610 if objc != 3 { 49611 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33318) 49612 return TCL_ERROR 49613 } 49614 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 49615 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 49616 FzName uintptr 49617 Fop int32 49618 F__ccgo_pad1 [4]byte 49619 }{}))); i++ { 49620 if libc.Xstrcmp(tls, aOp1[i].FzName, zOpName) == 0 { 49621 *(*int32)(unsafe.Pointer(bp)) = aOp1[i].Fop 49622 break 49623 } 49624 } 49625 if i >= int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 49626 FzName uintptr 49627 Fop int32 49628 F__ccgo_pad1 [4]byte 49629 }{}))) { 49630 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49631 return TCL_ERROR 49632 } 49633 } 49634 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 49635 return TCL_ERROR 49636 } 49637 *(*int32)(unsafe.Pointer(bp + 8)) = 0 49638 *(*int32)(unsafe.Pointer(bp + 12)) = 0 49639 rc = sqlite3.Xsqlite3_status(tls, *(*int32)(unsafe.Pointer(bp)), bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 4))) 49640 pResult = tcl.XTcl_NewObj(tls) 49641 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 49642 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 49643 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 49644 tcl.XTcl_SetObjResult(tls, interp, pResult) 49645 return TCL_OK 49646 } 49647 49648 var aOp1 = [10]struct { 49649 FzName uintptr 49650 Fop int32 49651 F__ccgo_pad1 [4]byte 49652 }{ 49653 {FzName: ts + 33338}, 49654 {FzName: ts + 33364, Fop: SQLITE_STATUS_MALLOC_SIZE}, 49655 {FzName: ts + 33390, Fop: SQLITE_STATUS_PAGECACHE_USED}, 49656 {FzName: ts + 33419, Fop: SQLITE_STATUS_PAGECACHE_OVERFLOW}, 49657 {FzName: ts + 33452, Fop: SQLITE_STATUS_PAGECACHE_SIZE}, 49658 {FzName: ts + 33481, Fop: SQLITE_STATUS_SCRATCH_USED}, 49659 {FzName: ts + 33508, Fop: SQLITE_STATUS_SCRATCH_OVERFLOW}, 49660 {FzName: ts + 33539, Fop: SQLITE_STATUS_SCRATCH_SIZE}, 49661 {FzName: ts + 33566, Fop: SQLITE_STATUS_PARSER_STACK}, 49662 {FzName: ts + 33593, Fop: SQLITE_STATUS_MALLOC_COUNT}, 49663 } 49664 49665 func test_db_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49666 bp := tls.Alloc(24) 49667 defer tls.Free(24) 49668 49669 var rc int32 49670 49671 var i int32 49672 *(*int32)(unsafe.Pointer(bp + 8)) = 0 49673 49674 var zOpName uintptr 49675 49676 var pResult uintptr 49677 if objc != 4 { 49678 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33620) 49679 return TCL_ERROR 49680 } 49681 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 49682 return TCL_ERROR 49683 } 49684 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 49685 if libc.Xmemcmp(tls, zOpName, ts+33643, uint64(7)) == 0 { 49686 zOpName += uintptr(7) 49687 } 49688 if libc.Xmemcmp(tls, zOpName, ts+33651, uint64(9)) == 0 { 49689 zOpName += uintptr(9) 49690 } 49691 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 49692 FzName uintptr 49693 Fop int32 49694 F__ccgo_pad1 [4]byte 49695 }{}))); i++ { 49696 if libc.Xstrcmp(tls, aOp2[i].FzName, zOpName) == 0 { 49697 *(*int32)(unsafe.Pointer(bp + 8)) = aOp2[i].Fop 49698 break 49699 } 49700 } 49701 if i >= int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 49702 FzName uintptr 49703 Fop int32 49704 F__ccgo_pad1 [4]byte 49705 }{}))) { 49706 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 49707 return TCL_ERROR 49708 } 49709 } 49710 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 49711 return TCL_ERROR 49712 } 49713 *(*int32)(unsafe.Pointer(bp + 16)) = 0 49714 *(*int32)(unsafe.Pointer(bp + 20)) = 0 49715 rc = sqlite3.Xsqlite3_db_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+16, bp+20, *(*int32)(unsafe.Pointer(bp + 12))) 49716 pResult = tcl.XTcl_NewObj(tls) 49717 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 49718 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 49719 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 20)))) 49720 tcl.XTcl_SetObjResult(tls, interp, pResult) 49721 return TCL_OK 49722 } 49723 49724 var aOp2 = [13]struct { 49725 FzName uintptr 49726 Fop int32 49727 F__ccgo_pad1 [4]byte 49728 }{ 49729 {FzName: ts + 33661}, 49730 {FzName: ts + 33676, Fop: SQLITE_DBSTATUS_CACHE_USED}, 49731 {FzName: ts + 33687, Fop: SQLITE_DBSTATUS_SCHEMA_USED}, 49732 {FzName: ts + 33699, Fop: SQLITE_DBSTATUS_STMT_USED}, 49733 {FzName: ts + 33709, Fop: SQLITE_DBSTATUS_LOOKASIDE_HIT}, 49734 {FzName: ts + 33723, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE}, 49735 {FzName: ts + 33743, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL}, 49736 {FzName: ts + 33763, Fop: SQLITE_DBSTATUS_CACHE_HIT}, 49737 {FzName: ts + 33773, Fop: SQLITE_DBSTATUS_CACHE_MISS}, 49738 {FzName: ts + 33784, Fop: SQLITE_DBSTATUS_CACHE_WRITE}, 49739 {FzName: ts + 33796, Fop: SQLITE_DBSTATUS_DEFERRED_FKS}, 49740 {FzName: ts + 33809, Fop: SQLITE_DBSTATUS_CACHE_USED_SHARED}, 49741 {FzName: ts + 33827, Fop: SQLITE_DBSTATUS_CACHE_SPILL}, 49742 } 49743 49744 func test_install_malloc_faultsim(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49745 bp := tls.Alloc(4) 49746 defer tls.Free(4) 49747 49748 var rc int32 49749 49750 if objc != 2 { 49751 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 49752 return TCL_ERROR 49753 } 49754 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) { 49755 return TCL_ERROR 49756 } 49757 rc = faultsimInstall(tls, *(*int32)(unsafe.Pointer(bp))) 49758 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49759 return TCL_OK 49760 } 49761 49762 func test_install_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49763 var rc int32 = SQLITE_MISUSE 49764 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49765 return TCL_OK 49766 } 49767 49768 func test_vfs_oom_test(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49769 bp := tls.Alloc(4) 49770 defer tls.Free(4) 49771 49772 if objc > 2 { 49773 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33839) 49774 return TCL_ERROR 49775 } else if objc == 2 { 49776 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49777 return TCL_ERROR 49778 } 49779 sqlite3.Xsqlite3_memdebug_vfs_oom_test = *(*int32)(unsafe.Pointer(bp)) 49780 } 49781 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_memdebug_vfs_oom_test)) 49782 return TCL_OK 49783 } 49784 49785 func Sqlitetest_malloc_Init(tls *libc.TLS, interp uintptr) int32 { 49786 var i int32 49787 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd11))/uint64(unsafe.Sizeof(struct { 49788 FzName uintptr 49789 FxProc uintptr 49790 FclientData int32 49791 F__ccgo_pad1 [4]byte 49792 }{})); i++ { 49793 var c ClientData = uintptr(intptr_t(aObjCmd11[i].FclientData)) 49794 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd11[i].FzName, aObjCmd11[i].FxProc, c, uintptr(0)) 49795 } 49796 return TCL_OK 49797 } 49798 49799 var aObjCmd11 = [32]struct { 49800 FzName uintptr 49801 FxProc uintptr 49802 FclientData int32 49803 F__ccgo_pad1 [4]byte 49804 }{ 49805 {FzName: ts + 28095, FxProc: 0}, 49806 {FzName: ts + 28110, FxProc: 0}, 49807 {FzName: ts + 33849, FxProc: 0}, 49808 {FzName: ts + 33862, FxProc: 0}, 49809 {FzName: ts + 33869, FxProc: 0}, 49810 {FzName: ts + 33876, FxProc: 0}, 49811 {FzName: ts + 33896, FxProc: 0}, 49812 {FzName: ts + 33921, FxProc: 0}, 49813 {FzName: ts + 33948, FxProc: 0}, 49814 {FzName: ts + 33970, FxProc: 0}, 49815 {FzName: ts + 33992, FxProc: 0}, 49816 {FzName: ts + 34017, FxProc: 0}, 49817 {FzName: ts + 34043, FxProc: 0}, 49818 {FzName: ts + 34073, FxProc: 0}, 49819 {FzName: ts + 34094, FxProc: 0}, 49820 {FzName: ts + 34119, FxProc: 0}, 49821 {FzName: ts + 34145, FxProc: 0}, 49822 {FzName: ts + 34160, FxProc: 0}, 49823 {FzName: ts + 34178, FxProc: 0}, 49824 {FzName: ts + 34202, FxProc: 0}, 49825 {FzName: ts + 34222, FxProc: 0}, 49826 {FzName: ts + 34247, FxProc: 0}, 49827 {FzName: ts + 34272, FxProc: 0}, 49828 {FzName: ts + 34297, FxProc: 0}, 49829 {FzName: ts + 34318, FxProc: 0}, 49830 {FzName: ts + 34337, FxProc: 0}, 49831 {FzName: ts + 34356, FxProc: 0}, 49832 {FzName: ts + 34377, FxProc: 0}, 49833 {FzName: ts + 34405, FxProc: 0, FclientData: 3}, 49834 {FzName: ts + 34426, FxProc: 0, FclientData: 5}, 49835 {FzName: ts + 34447, FxProc: 0}, 49836 {FzName: ts + 34471, FxProc: 0}, 49837 } 49838 49839 type MD5Context1 = struct { 49840 FisInit int32 49841 Fbuf [4]uint32 49842 Fbits [2]uint32 49843 Fin [64]uint8 49844 } 49845 49846 type MD5Context = MD5Context1 49847 49848 func byteReverse(tls *libc.TLS, buf uintptr, longs uint32) { 49849 var t uint32 49850 for __ccgo := true; __ccgo; __ccgo = libc.PreDecUint32(&longs, 1) != 0 { 49851 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)))) 49852 *(*uint32)(unsafe.Pointer(buf)) = t 49853 buf += uintptr(4) 49854 } 49855 } 49856 49857 func MD5Transform(tls *libc.TLS, buf uintptr, in uintptr) { 49858 var a uint32 49859 var b uint32 49860 var c uint32 49861 var d uint32 49862 49863 a = *(*uint32)(unsafe.Pointer(buf)) 49864 b = *(*uint32)(unsafe.Pointer(buf + 1*4)) 49865 c = *(*uint32)(unsafe.Pointer(buf + 2*4)) 49866 d = *(*uint32)(unsafe.Pointer(buf + 3*4)) 49867 49868 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xd76aa478) 49869 a = a<<7 | a>>(32-7) 49870 a = a + b 49871 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xe8c7b756) 49872 d = d<<12 | d>>(32-12) 49873 d = d + a 49874 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x242070db)) 49875 c = c<<17 | c>>(32-17) 49876 c = c + d 49877 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xc1bdceee) 49878 b = b<<22 | b>>(32-22) 49879 b = b + c 49880 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf57c0faf) 49881 a = a<<7 | a>>(32-7) 49882 a = a + b 49883 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + uint32(0x4787c62a)) 49884 d = d<<12 | d>>(32-12) 49885 d = d + a 49886 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa8304613) 49887 c = c<<17 | c>>(32-17) 49888 c = c + d 49889 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xfd469501) 49890 b = b<<22 | b>>(32-22) 49891 b = b + c 49892 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x698098d8)) 49893 a = a<<7 | a>>(32-7) 49894 a = a + b 49895 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0x8b44f7af) 49896 d = d<<12 | d>>(32-12) 49897 d = d + a 49898 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffff5bb1) 49899 c = c<<17 | c>>(32-17) 49900 c = c + d 49901 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0x895cd7be) 49902 b = b<<22 | b>>(32-22) 49903 b = b + c 49904 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x6b901122)) 49905 a = a<<7 | a>>(32-7) 49906 a = a + b 49907 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xfd987193) 49908 d = d<<12 | d>>(32-12) 49909 d = d + a 49910 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xa679438e) 49911 c = c<<17 | c>>(32-17) 49912 c = c + d 49913 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x49b40821)) 49914 b = b<<22 | b>>(32-22) 49915 b = b + c 49916 49917 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xf61e2562) 49918 a = a<<5 | a>>(32-5) 49919 a = a + b 49920 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xc040b340) 49921 d = d<<9 | d>>(32-9) 49922 d = d + a 49923 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x265e5a51)) 49924 c = c<<14 | c>>(32-14) 49925 c = c + d 49926 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xe9b6c7aa) 49927 b = b<<20 | b>>(32-20) 49928 b = b + c 49929 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xd62f105d) 49930 a = a<<5 | a>>(32-5) 49931 a = a + b 49932 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + uint32(0x02441453)) 49933 d = d<<9 | d>>(32-9) 49934 d = d + a 49935 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xd8a1e681) 49936 c = c<<14 | c>>(32-14) 49937 c = c + d 49938 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xe7d3fbc8) 49939 b = b<<20 | b>>(32-20) 49940 b = b + c 49941 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + uint32(0x21e1cde6)) 49942 a = a<<5 | a>>(32-5) 49943 a = a + b 49944 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xc33707d6) 49945 d = d<<9 | d>>(32-9) 49946 d = d + a 49947 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xf4d50d87) 49948 c = c<<14 | c>>(32-14) 49949 c = c + d 49950 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x455a14ed)) 49951 b = b<<20 | b>>(32-20) 49952 b = b + c 49953 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xa9e3e905) 49954 a = a<<5 | a>>(32-5) 49955 a = a + b 49956 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xfcefa3f8) 49957 d = d<<9 | d>>(32-9) 49958 d = d + a 49959 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x676f02d9)) 49960 c = c<<14 | c>>(32-14) 49961 c = c + d 49962 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0x8d2a4c8a) 49963 b = b<<20 | b>>(32-20) 49964 b = b + c 49965 49966 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfffa3942) 49967 a = a<<4 | a>>(32-4) 49968 a = a + b 49969 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 8*4)) + 0x8771f681) 49970 d = d<<11 | d>>(32-11) 49971 d = d + a 49972 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x6d9d6122)) 49973 c = c<<16 | c>>(32-16) 49974 c = c + d 49975 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xfde5380c) 49976 b = b<<23 | b>>(32-23) 49977 b = b + c 49978 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xa4beea44) 49979 a = a<<4 | a>>(32-4) 49980 a = a + b 49981 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 4*4)) + uint32(0x4bdecfa9)) 49982 d = d<<11 | d>>(32-11) 49983 d = d + a 49984 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xf6bb4b60) 49985 c = c<<16 | c>>(32-16) 49986 c = c + d 49987 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xbebfbc70) 49988 b = b<<23 | b>>(32-23) 49989 b = b + c 49990 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x289b7ec6)) 49991 a = a<<4 | a>>(32-4) 49992 a = a + b 49993 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in)) + 0xeaa127fa) 49994 d = d<<11 | d>>(32-11) 49995 d = d + a 49996 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xd4ef3085) 49997 c = c<<16 | c>>(32-16) 49998 c = c + d 49999 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 6*4)) + uint32(0x04881d05)) 50000 b = b<<23 | b>>(32-23) 50001 b = b + c 50002 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xd9d4d039) 50003 a = a<<4 | a>>(32-4) 50004 a = a + b 50005 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0xe6db99e5) 50006 d = d<<11 | d>>(32-11) 50007 d = d + a 50008 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x1fa27cf8)) 50009 c = c<<16 | c>>(32-16) 50010 c = c + d 50011 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xc4ac5665) 50012 b = b<<23 | b>>(32-23) 50013 b = b + c 50014 50015 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in)) + 0xf4292244) 50016 a = a<<6 | a>>(32-6) 50017 a = a + b 50018 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x432aff97)) 50019 d = d<<10 | d>>(32-10) 50020 d = d + a 50021 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xab9423a7) 50022 c = c<<15 | c>>(32-15) 50023 c = c + d 50024 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfc93a039) 50025 b = b<<21 | b>>(32-21) 50026 b = b + c 50027 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x655b59c3)) 50028 a = a<<6 | a>>(32-6) 50029 a = a + b 50030 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0x8f0ccc92) 50031 d = d<<10 | d>>(32-10) 50032 d = d + a 50033 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffeff47d) 50034 c = c<<15 | c>>(32-15) 50035 c = c + d 50036 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0x85845dd1) 50037 b = b<<21 | b>>(32-21) 50038 b = b + c 50039 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x6fa87e4f)) 50040 a = a<<6 | a>>(32-6) 50041 a = a + b 50042 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xfe2ce6e0) 50043 d = d<<10 | d>>(32-10) 50044 d = d + a 50045 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa3014314) 50046 c = c<<15 | c>>(32-15) 50047 c = c + d 50048 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x4e0811a1)) 50049 b = b<<21 | b>>(32-21) 50050 b = b + c 50051 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf7537e82) 50052 a = a<<6 | a>>(32-6) 50053 a = a + b 50054 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0xbd3af235) 50055 d = d<<10 | d>>(32-10) 50056 d = d + a 50057 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x2ad7d2bb)) 50058 c = c<<15 | c>>(32-15) 50059 c = c + d 50060 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xeb86d391) 50061 b = b<<21 | b>>(32-21) 50062 b = b + c 50063 50064 *(*uint32)(unsafe.Pointer(buf)) += a 50065 *(*uint32)(unsafe.Pointer(buf + 1*4)) += b 50066 *(*uint32)(unsafe.Pointer(buf + 2*4)) += c 50067 *(*uint32)(unsafe.Pointer(buf + 3*4)) += d 50068 } 50069 50070 func MD5Init(tls *libc.TLS, ctx uintptr) { 50071 (*MD5Context)(unsafe.Pointer(ctx)).FisInit = 1 50072 *(*uint32)(unsafe.Pointer(ctx + 4)) = uint32(0x67452301) 50073 *(*uint32)(unsafe.Pointer(ctx + 4 + 1*4)) = 0xefcdab89 50074 *(*uint32)(unsafe.Pointer(ctx + 4 + 2*4)) = 0x98badcfe 50075 *(*uint32)(unsafe.Pointer(ctx + 4 + 3*4)) = uint32(0x10325476) 50076 *(*uint32)(unsafe.Pointer(ctx + 20)) = uint32(0) 50077 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) = uint32(0) 50078 } 50079 50080 func MD5Update(tls *libc.TLS, ctx uintptr, buf uintptr, len uint32) { 50081 var t uint32 50082 50083 t = *(*uint32)(unsafe.Pointer(ctx + 20)) 50084 if libc.AssignPtrUint32(ctx+20, t+len<<3) < t { 50085 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4))++ 50086 } 50087 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) += len >> 29 50088 50089 t = t >> 3 & uint32(0x3f) 50090 50091 if t != 0 { 50092 var p uintptr = ctx + 28 + uintptr(t) 50093 50094 t = uint32(64) - t 50095 if len < t { 50096 libc.Xmemcpy(tls, p, buf, uint64(len)) 50097 return 50098 } 50099 libc.Xmemcpy(tls, p, buf, uint64(t)) 50100 byteReverse(tls, ctx+28, uint32(16)) 50101 MD5Transform(tls, ctx+4, ctx+28) 50102 buf += uintptr(t) 50103 len = len - t 50104 } 50105 50106 for len >= uint32(64) { 50107 libc.Xmemcpy(tls, ctx+28, buf, uint64(64)) 50108 byteReverse(tls, ctx+28, uint32(16)) 50109 MD5Transform(tls, ctx+4, ctx+28) 50110 buf += uintptr(64) 50111 len = len - uint32(64) 50112 } 50113 50114 libc.Xmemcpy(tls, ctx+28, buf, uint64(len)) 50115 } 50116 50117 func MD5Final(tls *libc.TLS, digest uintptr, ctx uintptr) { 50118 var count uint32 50119 var p uintptr 50120 50121 count = *(*uint32)(unsafe.Pointer(ctx + 20)) >> 3 & uint32(0x3F) 50122 50123 p = ctx + 28 + uintptr(count) 50124 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&p, 1))) = uint8(0x80) 50125 50126 count = uint32(64-1) - count 50127 50128 if count < uint32(8) { 50129 libc.Xmemset(tls, p, 0, uint64(count)) 50130 byteReverse(tls, ctx+28, uint32(16)) 50131 MD5Transform(tls, ctx+4, ctx+28) 50132 50133 libc.Xmemset(tls, ctx+28, 0, uint64(56)) 50134 } else { 50135 libc.Xmemset(tls, p, 0, uint64(count-uint32(8))) 50136 } 50137 byteReverse(tls, ctx+28, uint32(14)) 50138 50139 libc.Xmemcpy(tls, ctx+28+uintptr(14*4), ctx+20, uint64(8)) 50140 50141 MD5Transform(tls, ctx+4, ctx+28) 50142 byteReverse(tls, ctx+4, uint32(4)) 50143 libc.Xmemcpy(tls, digest, ctx+4, uint64(16)) 50144 } 50145 50146 func MD5DigestToBase16(tls *libc.TLS, digest uintptr, zBuf uintptr) { 50147 var i int32 50148 var j int32 50149 50150 for j = libc.AssignInt32(&i, 0); i < 16; i++ { 50151 var a int32 = int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i)))) 50152 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a>>4&0xf] 50153 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a&0xf] 50154 } 50155 *(*int8)(unsafe.Pointer(zBuf + uintptr(j))) = int8(0) 50156 } 50157 50158 var zEncode = *(*[17]int8)(unsafe.Pointer(ts + 31194)) 50159 50160 func MD5DigestToBase10x8(tls *libc.TLS, digest uintptr, zDigest uintptr) { 50161 bp := tls.Alloc(8) 50162 defer tls.Free(8) 50163 50164 var i int32 50165 var j int32 50166 var x uint32 50167 for i = libc.AssignInt32(&j, 0); i < 16; i = i + 2 { 50168 x = uint32(int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i))))*256 + int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i+1))))) 50169 if i > 0 { 50170 *(*int8)(unsafe.Pointer(zDigest + uintptr(libc.PostIncInt32(&j, 1)))) = int8('-') 50171 } 50172 sqlite3.Xsqlite3_snprintf(tls, 50-j, zDigest+uintptr(j), ts+34501, libc.VaList(bp, x)) 50173 j = j + 5 50174 } 50175 *(*int8)(unsafe.Pointer(zDigest + uintptr(j))) = int8(0) 50176 } 50177 50178 func md5_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 50179 bp := tls.Alloc(206) 50180 defer tls.Free(206) 50181 50182 var converter uintptr 50183 50184 if argc != 2 { 50185 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 50186 ts+15307, uintptr(0))) 50187 return TCL_ERROR 50188 } 50189 MD5Init(tls, bp+48) 50190 MD5Update(tls, bp+48, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 50191 MD5Final(tls, bp+140, bp+48) 50192 converter = cd 50193 (*struct { 50194 f func(*libc.TLS, uintptr, uintptr) 50195 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+140, bp+156) 50196 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+156, uintptr(0))) 50197 return TCL_OK 50198 } 50199 50200 func md5file_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 50201 bp := tls.Alloc(10428) 50202 defer tls.Free(10428) 50203 50204 var in uintptr 50205 var ofst int32 50206 var amt int32 50207 50208 var converter uintptr 50209 50210 if argc != 2 && argc != 4 { 50211 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 50212 ts+34506, uintptr(0))) 50213 return TCL_ERROR 50214 } 50215 if argc == 4 { 50216 ofst = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 50217 amt = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 50218 } else { 50219 ofst = 0 50220 amt = 2147483647 50221 } 50222 in = libc.Xfopen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4402) 50223 if in == uintptr(0) { 50224 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+34530, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 50225 ts+34552, uintptr(0))) 50226 return TCL_ERROR 50227 } 50228 libc.Xfseek(tls, in, int64(ofst), SEEK_SET) 50229 MD5Init(tls, bp+80) 50230 for amt > 0 { 50231 var n int32 50232 n = int32(libc.Xfread(tls, bp+172, uint64(1), func() uint64 { 50233 if uint64(unsafe.Sizeof([10240]int8{})) <= uint64(amt) { 50234 return uint64(unsafe.Sizeof([10240]int8{})) 50235 } 50236 return uint64(amt) 50237 }(), in)) 50238 if n <= 0 { 50239 break 50240 } 50241 MD5Update(tls, bp+80, bp+172, uint32(n)) 50242 amt = amt - n 50243 } 50244 libc.Xfclose(tls, in) 50245 MD5Final(tls, bp+10412, bp+80) 50246 converter = cd 50247 (*struct { 50248 f func(*libc.TLS, uintptr, uintptr) 50249 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+10412, bp+172) 50250 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+172, uintptr(0))) 50251 return TCL_OK 50252 } 50253 50254 func Md5_Init(tls *libc.TLS, interp uintptr) int32 { 50255 tcl.XTcl_CreateCommand(tls, interp, ts+34566, *(*uintptr)(unsafe.Pointer(&struct { 50256 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50257 }{md5_cmd})), 50258 *(*uintptr)(unsafe.Pointer(&struct { 50259 f func(*libc.TLS, uintptr, uintptr) 50260 }{MD5DigestToBase16})), uintptr(0)) 50261 tcl.XTcl_CreateCommand(tls, interp, ts+34570, *(*uintptr)(unsafe.Pointer(&struct { 50262 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50263 }{md5_cmd})), 50264 *(*uintptr)(unsafe.Pointer(&struct { 50265 f func(*libc.TLS, uintptr, uintptr) 50266 }{MD5DigestToBase10x8})), uintptr(0)) 50267 tcl.XTcl_CreateCommand(tls, interp, ts+34579, *(*uintptr)(unsafe.Pointer(&struct { 50268 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50269 }{md5file_cmd})), 50270 *(*uintptr)(unsafe.Pointer(&struct { 50271 f func(*libc.TLS, uintptr, uintptr) 50272 }{MD5DigestToBase16})), uintptr(0)) 50273 tcl.XTcl_CreateCommand(tls, interp, ts+34587, *(*uintptr)(unsafe.Pointer(&struct { 50274 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50275 }{md5file_cmd})), 50276 *(*uintptr)(unsafe.Pointer(&struct { 50277 f func(*libc.TLS, uintptr, uintptr) 50278 }{MD5DigestToBase10x8})), uintptr(0)) 50279 return TCL_OK 50280 } 50281 50282 func md5step(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 50283 var p uintptr 50284 var i int32 50285 if argc < 1 { 50286 return 50287 } 50288 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 50289 if p == uintptr(0) { 50290 return 50291 } 50292 if !((*MD5Context)(unsafe.Pointer(p)).FisInit != 0) { 50293 MD5Init(tls, p) 50294 } 50295 for i = 0; i < argc; i++ { 50296 var zData uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 50297 if zData != 0 { 50298 MD5Update(tls, p, zData, uint32(int32(libc.Xstrlen(tls, zData)))) 50299 } 50300 } 50301 } 50302 50303 func md5finalize(tls *libc.TLS, context uintptr) { 50304 bp := tls.Alloc(49) 50305 defer tls.Free(49) 50306 50307 var p uintptr 50308 50309 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 50310 MD5Final(tls, bp, p) 50311 MD5DigestToBase16(tls, bp, bp+16) 50312 sqlite3.Xsqlite3_result_text(tls, context, bp+16, -1, libc.UintptrFromInt32(-1)) 50313 } 50314 50315 func Md5_Register(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 50316 var rc int32 = sqlite3.Xsqlite3_create_function(tls, db, ts+34600, -1, SQLITE_UTF8, uintptr(0), uintptr(0), 50317 *(*uintptr)(unsafe.Pointer(&struct { 50318 f func(*libc.TLS, uintptr, int32, uintptr) 50319 }{md5step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{md5finalize}))) 50320 sqlite3.Xsqlite3_overload_function(tls, db, ts+34600, -1) 50321 return rc 50322 } 50323 50324 type multiplexGroup1 = struct { 50325 FaReal uintptr 50326 FnReal int32 50327 F__ccgo_pad1 [4]byte 50328 FzName uintptr 50329 FnName int32 50330 Fflags int32 50331 FszChunk uint32 50332 FbEnabled uint8 50333 FbTruncate uint8 50334 F__ccgo_pad2 [2]byte 50335 } 50336 50337 type multiplexGroup = multiplexGroup1 50338 type multiplexConn1 = struct { 50339 Fbase sqlite3_file 50340 FpGroup uintptr 50341 } 50342 50343 type multiplexConn = multiplexConn1 50344 50345 type multiplexReal = struct { 50346 Fp uintptr 50347 Fz uintptr 50348 } 50349 50350 var gMultiplex struct { 50351 FpOrigVfs uintptr 50352 FsThisVfs sqlite3_vfs 50353 FsIoMethodsV1 sqlite3_io_methods 50354 FsIoMethodsV2 sqlite3_io_methods 50355 FisInitialized int32 50356 F__ccgo_pad1 [4]byte 50357 } 50358 50359 func multiplexStrlen30(tls *libc.TLS, z uintptr) int32 { 50360 var z2 uintptr = z 50361 if z == uintptr(0) { 50362 return 0 50363 } 50364 for *(*int8)(unsafe.Pointer(z2)) != 0 { 50365 z2++ 50366 } 50367 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 50368 } 50369 50370 func multiplexFilename(tls *libc.TLS, zBase uintptr, nBase int32, flags int32, iChunk int32, zOut uintptr) { 50371 bp := tls.Alloc(8) 50372 defer tls.Free(8) 50373 50374 var n int32 = nBase 50375 libc.Xmemcpy(tls, zOut, zBase, uint64(n+1)) 50376 if iChunk != 0 && iChunk <= MX_CHUNK_NUMBER { 50377 sqlite3.Xsqlite3_snprintf(tls, 4, zOut+uintptr(n), ts+34607, libc.VaList(bp, iChunk)) 50378 n = n + 3 50379 } 50380 50381 *(*int8)(unsafe.Pointer(zOut + uintptr(n+1))) = int8(0) 50382 } 50383 50384 func multiplexSubFilename(tls *libc.TLS, pGroup uintptr, iChunk int32) int32 { 50385 if iChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal { 50386 var p uintptr 50387 p = sqlite3.Xsqlite3_realloc64(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal, uint64(iChunk+1)*uint64(unsafe.Sizeof(multiplexReal{}))) 50388 if p == uintptr(0) { 50389 return SQLITE_NOMEM 50390 } 50391 libc.Xmemset(tls, p+uintptr((*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))*uint64(iChunk+1-(*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)) 50392 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = p 50393 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = iChunk + 1 50394 } 50395 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 50396 var z uintptr 50397 var n int32 = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName 50398 z = sqlite3.Xsqlite3_malloc64(tls, uint64(n+5)) 50399 if z == uintptr(0) { 50400 return SQLITE_NOMEM 50401 } 50402 multiplexFilename(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName, (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags, iChunk, z) 50403 (*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)) 50404 sqlite3.Xsqlite3_free(tls, z) 50405 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 50406 return SQLITE_NOMEM 50407 } 50408 } 50409 return SQLITE_OK 50410 } 50411 50412 func multiplexSubOpen(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr, pOutFlags uintptr, createFlag int32) uintptr { 50413 bp := tls.Alloc(20) 50414 defer tls.Free(20) 50415 50416 var pSubOpen uintptr = uintptr(0) 50417 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50418 50419 *(*int32)(unsafe.Pointer(rc)) = multiplexSubFilename(tls, pGroup, iChunk) 50420 if *(*int32)(unsafe.Pointer(rc)) == SQLITE_OK && libc.AssignUintptr(&pSubOpen, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) == uintptr(0) { 50421 var flags int32 50422 50423 flags = (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags 50424 if createFlag != 0 { 50425 flags = flags | SQLITE_OPEN_CREATE 50426 } else if iChunk == 0 { 50427 } else if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 50428 return uintptr(0) 50429 } else { 50430 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50431 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50432 })(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, 50433 SQLITE_ACCESS_EXISTS, bp+16) 50434 if *(*int32)(unsafe.Pointer(rc)) != 0 || !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) { 50435 if *(*int32)(unsafe.Pointer(rc)) != 0 { 50436 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34612, 50437 libc.VaList(bp, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 50438 } 50439 return uintptr(0) 50440 } 50441 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 50442 } 50443 pSubOpen = sqlite3.Xsqlite3_malloc64(tls, uint64((*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FszOsFile)) 50444 if pSubOpen == uintptr(0) { 50445 *(*int32)(unsafe.Pointer(rc)) = SQLITE_IOERR | int32(12)<<8 50446 return uintptr(0) 50447 } 50448 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = pSubOpen 50449 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50450 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 50451 })(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, 50452 flags, pOutFlags) 50453 if *(*int32)(unsafe.Pointer(rc)) != SQLITE_OK { 50454 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34646, 50455 libc.VaList(bp+8, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 50456 sqlite3.Xsqlite3_free(tls, pSubOpen) 50457 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = uintptr(0) 50458 return uintptr(0) 50459 } 50460 } 50461 return pSubOpen 50462 } 50463 50464 func multiplexSubSize(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr) sqlite3_int64 { 50465 bp := tls.Alloc(8) 50466 defer tls.Free(8) 50467 50468 var pSub uintptr 50469 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 50470 50471 if *(*int32)(unsafe.Pointer(rc)) != 0 { 50472 return int64(0) 50473 } 50474 pSub = multiplexSubOpen(tls, pGroup, iChunk, rc, uintptr(0), 0) 50475 if pSub == uintptr(0) { 50476 return int64(0) 50477 } 50478 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50479 f func(*libc.TLS, uintptr, uintptr) int32 50480 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSub)).FpMethods)).FxFileSize})).f(tls, pSub, bp) 50481 return *(*sqlite3_int64)(unsafe.Pointer(bp)) 50482 } 50483 50484 func multiplexControlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 50485 bp := tls.Alloc(4) 50486 defer tls.Free(4) 50487 50488 var rc int32 = SQLITE_OK 50489 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 50490 var op int32 = 0 50491 50492 if !(db != 0) || argc != 2 { 50493 rc = SQLITE_ERROR 50494 } else { 50495 op = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 50496 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 50497 50498 switch op { 50499 case 1: 50500 op = MULTIPLEX_CTRL_ENABLE 50501 break 50502 fallthrough 50503 case 2: 50504 op = MULTIPLEX_CTRL_SET_CHUNK_SIZE 50505 break 50506 fallthrough 50507 case 3: 50508 op = MULTIPLEX_CTRL_SET_MAX_CHUNKS 50509 break 50510 fallthrough 50511 default: 50512 rc = SQLITE_NOTFOUND 50513 break 50514 } 50515 } 50516 if rc == SQLITE_OK { 50517 rc = sqlite3.Xsqlite3_file_control(tls, db, uintptr(0), op, bp) 50518 } 50519 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 50520 } 50521 50522 func multiplexFuncInit(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 50523 var rc int32 50524 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+34678, 2, SQLITE_ANY, 50525 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 50526 f func(*libc.TLS, uintptr, int32, uintptr) 50527 }{multiplexControlFunc})), uintptr(0), uintptr(0)) 50528 return rc 50529 } 50530 50531 func multiplexSubClose(tls *libc.TLS, pGroup uintptr, iChunk int32, pOrigVfs uintptr) { 50532 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp 50533 if pSubOpen != 0 { 50534 (*struct { 50535 f func(*libc.TLS, uintptr) int32 50536 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 50537 if pOrigVfs != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz != 0 { 50538 (*struct { 50539 f func(*libc.TLS, uintptr, uintptr, int32) int32 50540 })(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) 50541 } 50542 sqlite3.Xsqlite3_free(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) 50543 } 50544 sqlite3.Xsqlite3_free_filename(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz) 50545 libc.Xmemset(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))) 50546 } 50547 50548 func multiplexFreeComponents(tls *libc.TLS, pGroup uintptr) { 50549 var i int32 50550 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 50551 multiplexSubClose(tls, pGroup, i, uintptr(0)) 50552 } 50553 sqlite3.Xsqlite3_free(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal) 50554 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = uintptr(0) 50555 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = 0 50556 } 50557 50558 func multiplexOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 50559 bp := tls.Alloc(20) 50560 defer tls.Free(20) 50561 50562 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50563 var pMultiplexOpen uintptr 50564 var pGroup uintptr = uintptr(0) 50565 var pSubOpen uintptr = uintptr(0) 50566 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50567 var nName int32 = 0 50568 var sz int32 = 0 50569 var zToFree uintptr = uintptr(0) 50570 50571 _ = pVfs 50572 libc.Xmemset(tls, pConn, 0, uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile)) 50573 50574 pMultiplexOpen = pConn 50575 50576 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50577 if zName != 0 { 50578 nName = multiplexStrlen30(tls, zName) 50579 } else { 50580 nName = 0 50581 } 50582 sz = int32(uint64(unsafe.Sizeof(multiplexGroup{})) + 50583 uint64(nName) + uint64(1)) 50584 pGroup = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 50585 if pGroup == uintptr(0) { 50586 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 50587 } 50588 } 50589 50590 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50591 var zUri uintptr 50592 if flags&SQLITE_OPEN_URI != 0 { 50593 zUri = zName 50594 } else { 50595 zUri = uintptr(0) 50596 } 50597 50598 libc.Xmemset(tls, pGroup, 0, uint64(sz)) 50599 (*multiplexConn)(unsafe.Pointer(pMultiplexOpen)).FpGroup = pGroup 50600 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = libc.Uint8(libc.Uint8FromInt32(-1)) 50601 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(sqlite3.Xsqlite3_uri_boolean(tls, zUri, ts+18304, 50602 libc.Bool32(flags&SQLITE_OPEN_MAIN_DB == 0))) 50603 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(sqlite3.Xsqlite3_uri_int64(tls, zUri, ts+34696, 50604 int64(SQLITE_MULTIPLEX_CHUNK_SIZE)))) 50605 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = ((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk + uint32(0xffff)) & libc.Uint32FromInt32(libc.CplInt32(0xffff)) 50606 if zName != 0 { 50607 var p uintptr = pGroup + 1*40 50608 (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName = p 50609 libc.Xmemcpy(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, zName, uint64(nName+1)) 50610 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName = nName 50611 } 50612 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 50613 for uint32(sqlite3.Xsqlite3PendingByte)%(*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk-uint32(65536) { 50614 *(*uint32)(unsafe.Pointer(pGroup + 32)) += uint32(65536) 50615 } 50616 } 50617 (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags = flags & libc.CplInt32(SQLITE_OPEN_URI) 50618 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, 1) 50619 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50620 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp, pOutFlags, 0) 50621 if pSubOpen == uintptr(0) && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50622 *(*int32)(unsafe.Pointer(bp)) = SQLITE_CANTOPEN 50623 } 50624 } 50625 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50626 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50627 f func(*libc.TLS, uintptr, uintptr) int32 50628 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp+8) 50629 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && zName != 0 { 50630 if flags&SQLITE_OPEN_SUPER_JOURNAL != 0 { 50631 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 50632 } else if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 50633 if flags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 50634 var iChunk int32 = 1 50635 for __ccgo := true; __ccgo; __ccgo = *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 50636 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50637 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50638 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, 50639 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, SQLITE_ACCESS_EXISTS, bp+16) 50640 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 50641 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50642 f func(*libc.TLS, uintptr, uintptr, int32) int32 50643 })(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) 50644 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50645 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, libc.PreIncInt32(&iChunk, 1)) 50646 } 50647 } 50648 } 50649 } 50650 } else { 50651 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50652 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50653 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+1*16)).Fz, 50654 SQLITE_ACCESS_EXISTS, bp+16) 50655 *(*int32)(unsafe.Pointer(bp + 16)) = libc.Bool32(multiplexSubSize(tls, pGroup, 1, bp) > int64(0)) 50656 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) && 50657 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) != sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 50658 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)))) 50659 } 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) { 50660 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 50661 } 50662 } 50663 } 50664 } 50665 50666 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50667 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 50668 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 176 50669 } else { 50670 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 328 50671 } 50672 } else { 50673 multiplexFreeComponents(tls, pGroup) 50674 sqlite3.Xsqlite3_free(tls, pGroup) 50675 } 50676 } 50677 sqlite3.Xsqlite3_free(tls, zToFree) 50678 return *(*int32)(unsafe.Pointer(bp)) 50679 } 50680 50681 func multiplexDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 50682 bp := tls.Alloc(4) 50683 defer tls.Free(4) 50684 50685 var rc int32 50686 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50687 rc = (*struct { 50688 f func(*libc.TLS, uintptr, uintptr, int32) int32 50689 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 50690 if rc == SQLITE_OK { 50691 var nName int32 = int32(libc.Xstrlen(tls, zName)) 50692 var z uintptr 50693 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nName+5)) 50694 if z == uintptr(0) { 50695 rc = SQLITE_IOERR | int32(12)<<8 50696 } else { 50697 var iChunk int32 = 0 50698 50699 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 50700 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreIncInt32(&iChunk, 1), z) 50701 rc = (*struct { 50702 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50703 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 50704 } 50705 for rc == SQLITE_OK && iChunk > 1 { 50706 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreDecInt32(&iChunk, 1), z) 50707 rc = (*struct { 50708 f func(*libc.TLS, uintptr, uintptr, int32) int32 50709 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 50710 } 50711 if rc == SQLITE_OK { 50712 iChunk = 0 50713 for __ccgo1 := true; __ccgo1; __ccgo1 = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 50714 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreIncInt32(&iChunk, 1), z) 50715 rc = (*struct { 50716 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50717 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 50718 } 50719 for rc == SQLITE_OK && iChunk > 1 { 50720 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreDecInt32(&iChunk, 1), z) 50721 rc = (*struct { 50722 f func(*libc.TLS, uintptr, uintptr, int32) int32 50723 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 50724 } 50725 } 50726 } 50727 sqlite3.Xsqlite3_free(tls, z) 50728 } 50729 return rc 50730 } 50731 50732 func multiplexAccess(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 50733 return (*struct { 50734 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50735 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxAccess})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 50736 } 50737 50738 func multiplexFullPathname(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 50739 return (*struct { 50740 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50741 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxFullPathname})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 50742 } 50743 50744 func multiplexDlOpen(tls *libc.TLS, a uintptr, b uintptr) uintptr { 50745 return (*struct { 50746 f func(*libc.TLS, uintptr, uintptr) uintptr 50747 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlOpen})).f(tls, gMultiplex.FpOrigVfs, b) 50748 } 50749 50750 func multiplexDlError(tls *libc.TLS, a uintptr, b int32, c uintptr) { 50751 (*struct { 50752 f func(*libc.TLS, uintptr, int32, uintptr) 50753 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlError})).f(tls, gMultiplex.FpOrigVfs, b, c) 50754 } 50755 50756 func multiplexDlSym(tls *libc.TLS, a uintptr, b uintptr, c uintptr) uintptr { 50757 return (*struct { 50758 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 50759 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlSym})).f(tls, gMultiplex.FpOrigVfs, b, c) 50760 } 50761 50762 func multiplexDlClose(tls *libc.TLS, a uintptr, b uintptr) { 50763 (*struct { 50764 f func(*libc.TLS, uintptr, uintptr) 50765 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlClose})).f(tls, gMultiplex.FpOrigVfs, b) 50766 } 50767 50768 func multiplexRandomness(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 50769 return (*struct { 50770 f func(*libc.TLS, uintptr, int32, uintptr) int32 50771 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxRandomness})).f(tls, gMultiplex.FpOrigVfs, b, c) 50772 } 50773 50774 func multiplexSleep(tls *libc.TLS, a uintptr, b int32) int32 { 50775 return (*struct { 50776 f func(*libc.TLS, uintptr, int32) int32 50777 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxSleep})).f(tls, gMultiplex.FpOrigVfs, b) 50778 } 50779 50780 func multiplexCurrentTime(tls *libc.TLS, a uintptr, b uintptr) int32 { 50781 return (*struct { 50782 f func(*libc.TLS, uintptr, uintptr) int32 50783 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTime})).f(tls, gMultiplex.FpOrigVfs, b) 50784 } 50785 50786 func multiplexGetLastError(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 50787 if (*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError != 0 { 50788 return (*struct { 50789 f func(*libc.TLS, uintptr, int32, uintptr) int32 50790 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError})).f(tls, gMultiplex.FpOrigVfs, b, c) 50791 } else { 50792 return 0 50793 } 50794 return int32(0) 50795 } 50796 50797 func multiplexCurrentTimeInt64(tls *libc.TLS, a uintptr, b uintptr) int32 { 50798 return (*struct { 50799 f func(*libc.TLS, uintptr, uintptr) int32 50800 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTimeInt64})).f(tls, gMultiplex.FpOrigVfs, b) 50801 } 50802 50803 func multiplexClose(tls *libc.TLS, pConn uintptr) int32 { 50804 var p uintptr = pConn 50805 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50806 var rc int32 = SQLITE_OK 50807 multiplexFreeComponents(tls, pGroup) 50808 sqlite3.Xsqlite3_free(tls, pGroup) 50809 return rc 50810 } 50811 50812 func multiplexRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 50813 bp := tls.Alloc(4) 50814 defer tls.Free(4) 50815 50816 var p uintptr = pConn 50817 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50818 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50819 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50820 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50821 if pSubOpen == uintptr(0) { 50822 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 50823 } else { 50824 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50825 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50826 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 50827 } 50828 } else { 50829 for iAmt > 0 { 50830 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50831 var pSubOpen uintptr 50832 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 50833 if pSubOpen != 0 { 50834 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 50835 if extra < 0 { 50836 extra = 0 50837 } 50838 iAmt = iAmt - extra 50839 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50840 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50841 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, 50842 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50843 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 50844 break 50845 } 50846 pBuf = pBuf + uintptr(iAmt) 50847 iOfst = iOfst + sqlite3_int64(iAmt) 50848 iAmt = extra 50849 } else { 50850 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 50851 break 50852 } 50853 } 50854 } 50855 50856 return *(*int32)(unsafe.Pointer(bp)) 50857 } 50858 50859 func multiplexWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 50860 bp := tls.Alloc(4) 50861 defer tls.Free(4) 50862 50863 var p uintptr = pConn 50864 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50865 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50866 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50867 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50868 if pSubOpen == uintptr(0) { 50869 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(3)<<8 50870 } else { 50871 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50872 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50873 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 50874 } 50875 } else { 50876 for *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && iAmt > 0 { 50877 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50878 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 50879 if pSubOpen != 0 { 50880 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 50881 if extra < 0 { 50882 extra = 0 50883 } 50884 iAmt = iAmt - extra 50885 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50886 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50887 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, 50888 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50889 pBuf = pBuf + uintptr(iAmt) 50890 iOfst = iOfst + sqlite3_int64(iAmt) 50891 iAmt = extra 50892 } 50893 } 50894 } 50895 return *(*int32)(unsafe.Pointer(bp)) 50896 } 50897 50898 func multiplexTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 50899 bp := tls.Alloc(4) 50900 defer tls.Free(4) 50901 50902 var p uintptr = pConn 50903 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50904 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50905 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50906 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50907 if pSubOpen == uintptr(0) { 50908 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 50909 } else { 50910 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50911 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50912 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 50913 } 50914 } else { 50915 var i int32 50916 var iBaseGroup int32 = int32(size / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50917 var pSubOpen uintptr 50918 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50919 50920 for i = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal - 1; i > iBaseGroup && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i-- { 50921 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 50922 multiplexSubClose(tls, pGroup, i, pOrigVfs) 50923 } else { 50924 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 0) 50925 if pSubOpen != 0 { 50926 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50927 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50928 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, int64(0)) 50929 } 50930 } 50931 } 50932 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50933 pSubOpen = multiplexSubOpen(tls, pGroup, iBaseGroup, bp, uintptr(0), 0) 50934 if pSubOpen != 0 { 50935 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50936 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50937 })(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)) 50938 } 50939 } 50940 if *(*int32)(unsafe.Pointer(bp)) != 0 { 50941 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 50942 } 50943 } 50944 return *(*int32)(unsafe.Pointer(bp)) 50945 } 50946 50947 func multiplexSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 50948 var p uintptr = pConn 50949 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50950 var rc int32 = SQLITE_OK 50951 var i int32 50952 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 50953 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(i)*16)).Fp 50954 if pSubOpen != 0 { 50955 var rc2 int32 = (*struct { 50956 f func(*libc.TLS, uintptr, int32) int32 50957 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 50958 if rc2 != SQLITE_OK { 50959 rc = rc2 50960 } 50961 } 50962 } 50963 return rc 50964 } 50965 50966 func multiplexFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 50967 bp := tls.Alloc(4) 50968 defer tls.Free(4) 50969 50970 var p uintptr = pConn 50971 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50972 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50973 var i int32 50974 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50975 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50976 if pSubOpen == uintptr(0) { 50977 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(7)<<8 50978 } else { 50979 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50980 f func(*libc.TLS, uintptr, uintptr) int32 50981 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, pSize) 50982 } 50983 } else { 50984 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = int64(0) 50985 for i = 0; *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i++ { 50986 var sz sqlite3_int64 = multiplexSubSize(tls, pGroup, i, bp) 50987 if sz == int64(0) { 50988 break 50989 } 50990 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = sqlite3_int64(i)*sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) + sz 50991 } 50992 } 50993 return *(*int32)(unsafe.Pointer(bp)) 50994 } 50995 50996 func multiplexLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 50997 bp := tls.Alloc(4) 50998 defer tls.Free(4) 50999 51000 var p uintptr = pConn 51001 51002 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51003 if pSubOpen != 0 { 51004 return (*struct { 51005 f func(*libc.TLS, uintptr, int32) int32 51006 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 51007 } 51008 return SQLITE_BUSY 51009 } 51010 51011 func multiplexUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 51012 bp := tls.Alloc(4) 51013 defer tls.Free(4) 51014 51015 var p uintptr = pConn 51016 51017 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51018 if pSubOpen != 0 { 51019 return (*struct { 51020 f func(*libc.TLS, uintptr, int32) int32 51021 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 51022 } 51023 return SQLITE_IOERR | int32(8)<<8 51024 } 51025 51026 func multiplexCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 51027 bp := tls.Alloc(4) 51028 defer tls.Free(4) 51029 51030 var p uintptr = pConn 51031 51032 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51033 if pSubOpen != 0 { 51034 return (*struct { 51035 f func(*libc.TLS, uintptr, uintptr) int32 51036 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 51037 } 51038 return SQLITE_IOERR | int32(14)<<8 51039 } 51040 51041 func multiplexFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 51042 bp := tls.Alloc(44) 51043 defer tls.Free(44) 51044 51045 var p uintptr = pConn 51046 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51047 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 51048 var pSubOpen uintptr 51049 51050 if !(gMultiplex.FisInitialized != 0) { 51051 return SQLITE_MISUSE 51052 } 51053 switch op { 51054 case MULTIPLEX_CTRL_ENABLE: 51055 if pArg != 0 { 51056 var bEnabled int32 = *(*int32)(unsafe.Pointer(pArg)) 51057 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(bEnabled) 51058 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51059 } 51060 break 51061 case MULTIPLEX_CTRL_SET_CHUNK_SIZE: 51062 if pArg != 0 { 51063 var szChunk uint32 = *(*uint32)(unsafe.Pointer(pArg)) 51064 if szChunk < uint32(1) { 51065 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_MISUSE 51066 } else { 51067 szChunk = szChunk + uint32(MAX_PAGE_SIZE-1) 51068 szChunk = szChunk & libc.Uint32FromInt32(libc.CplInt32(MAX_PAGE_SIZE-1)) 51069 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = szChunk 51070 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51071 } 51072 } 51073 break 51074 case MULTIPLEX_CTRL_SET_MAX_CHUNKS: 51075 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51076 break 51077 case SQLITE_FCNTL_SIZE_HINT: 51078 fallthrough 51079 case SQLITE_FCNTL_CHUNK_SIZE: 51080 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51081 break 51082 case SQLITE_FCNTL_PRAGMA: 51083 { 51084 var aFcntl uintptr = pArg 51085 51086 if *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)) != 0 && sqlite3.Xsqlite3_strnicmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34706, 10) == 0 { 51087 *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) = int64(0) 51088 multiplexFileSize(tls, pConn, bp+32) 51089 51090 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34717) == 0 { 51091 if *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(aFcntl + 2*8)))) != 0 { 51092 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4178) == 0 || 51093 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+28899) == 0 { 51094 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(1) 51095 } else if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4542) == 0 || 51096 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+14193) == 0 { 51097 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(0) 51098 } 51099 } 51100 51101 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, func() uintptr { 51102 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 51103 return ts + 4178 51104 } 51105 return ts + 4542 51106 }(), 0) 51107 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51108 break 51109 } 51110 51111 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34736) == 0 { 51112 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, libc.Bool32(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0))) 51113 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51114 break 51115 } 51116 51117 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34754) == 0 && 51118 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 51119 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+17791, libc.VaList(bp+8, (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51120 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51121 break 51122 } 51123 51124 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34774) == 0 { 51125 var n int32 = 0 51126 var ii int32 51127 for ii = 0; ii < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; ii++ { 51128 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(ii)*16)).Fp != uintptr(0) { 51129 n++ 51130 } 51131 } 51132 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+16, n)) 51133 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51134 break 51135 } 51136 } 51137 51138 } 51139 fallthrough 51140 default: 51141 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp+40, uintptr(0), 0) 51142 if pSubOpen != 0 { 51143 *(*int32)(unsafe.Pointer(bp + 40)) = (*struct { 51144 f func(*libc.TLS, uintptr, int32, uintptr) int32 51145 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 51146 if op == SQLITE_FCNTL_VFSNAME && *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 51147 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+34794, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(pArg)))) 51148 } 51149 } 51150 break 51151 } 51152 return *(*int32)(unsafe.Pointer(bp + 40)) 51153 } 51154 51155 func multiplexSectorSize(tls *libc.TLS, pConn uintptr) int32 { 51156 bp := tls.Alloc(4) 51157 defer tls.Free(4) 51158 51159 var p uintptr = pConn 51160 51161 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51162 if pSubOpen != 0 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize != 0 { 51163 return (*struct { 51164 f func(*libc.TLS, uintptr) int32 51165 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 51166 } 51167 return DEFAULT_SECTOR_SIZE 51168 } 51169 51170 func multiplexDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 51171 bp := tls.Alloc(4) 51172 defer tls.Free(4) 51173 51174 var p uintptr = pConn 51175 51176 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51177 if pSubOpen != 0 { 51178 return (*struct { 51179 f func(*libc.TLS, uintptr) int32 51180 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 51181 } 51182 return 0 51183 } 51184 51185 func multiplexShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 51186 bp := tls.Alloc(4) 51187 defer tls.Free(4) 51188 51189 var p uintptr = pConn 51190 51191 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51192 if pSubOpen != 0 { 51193 return (*struct { 51194 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 51195 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 51196 } 51197 return SQLITE_IOERR 51198 } 51199 51200 func multiplexShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 51201 bp := tls.Alloc(4) 51202 defer tls.Free(4) 51203 51204 var p uintptr = pConn 51205 51206 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51207 if pSubOpen != 0 { 51208 return (*struct { 51209 f func(*libc.TLS, uintptr, int32, int32, int32) int32 51210 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 51211 } 51212 return SQLITE_BUSY 51213 } 51214 51215 func multiplexShmBarrier(tls *libc.TLS, pConn uintptr) { 51216 bp := tls.Alloc(4) 51217 defer tls.Free(4) 51218 51219 var p uintptr = pConn 51220 51221 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51222 if pSubOpen != 0 { 51223 (*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) 51224 } 51225 } 51226 51227 func multiplexShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 51228 bp := tls.Alloc(4) 51229 defer tls.Free(4) 51230 51231 var p uintptr = pConn 51232 51233 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51234 if pSubOpen != 0 { 51235 return (*struct { 51236 f func(*libc.TLS, uintptr, int32) int32 51237 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 51238 } 51239 return SQLITE_OK 51240 } 51241 51242 func sqlite3_multiplex_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 51243 var pOrigVfs uintptr 51244 if gMultiplex.FisInitialized != 0 { 51245 return SQLITE_MISUSE 51246 } 51247 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 51248 if pOrigVfs == uintptr(0) { 51249 return SQLITE_ERROR 51250 } 51251 51252 gMultiplex.FisInitialized = 1 51253 gMultiplex.FpOrigVfs = pOrigVfs 51254 gMultiplex.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 51255 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gMultiplex)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(multiplexConn{}))) 51256 gMultiplex.FsThisVfs.FzName = ts + 34807 51257 gMultiplex.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 51258 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 51259 }{multiplexOpen})) 51260 gMultiplex.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 51261 f func(*libc.TLS, uintptr, uintptr, int32) int32 51262 }{multiplexDelete})) 51263 gMultiplex.FsThisVfs.FxAccess = *(*uintptr)(unsafe.Pointer(&struct { 51264 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51265 }{multiplexAccess})) 51266 gMultiplex.FsThisVfs.FxFullPathname = *(*uintptr)(unsafe.Pointer(&struct { 51267 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51268 }{multiplexFullPathname})) 51269 gMultiplex.FsThisVfs.FxDlOpen = *(*uintptr)(unsafe.Pointer(&struct { 51270 f func(*libc.TLS, uintptr, uintptr) uintptr 51271 }{multiplexDlOpen})) 51272 gMultiplex.FsThisVfs.FxDlError = *(*uintptr)(unsafe.Pointer(&struct { 51273 f func(*libc.TLS, uintptr, int32, uintptr) 51274 }{multiplexDlError})) 51275 gMultiplex.FsThisVfs.FxDlSym = *(*uintptr)(unsafe.Pointer(&struct { 51276 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51277 }{multiplexDlSym})) 51278 gMultiplex.FsThisVfs.FxDlClose = *(*uintptr)(unsafe.Pointer(&struct { 51279 f func(*libc.TLS, uintptr, uintptr) 51280 }{multiplexDlClose})) 51281 gMultiplex.FsThisVfs.FxRandomness = *(*uintptr)(unsafe.Pointer(&struct { 51282 f func(*libc.TLS, uintptr, int32, uintptr) int32 51283 }{multiplexRandomness})) 51284 gMultiplex.FsThisVfs.FxSleep = *(*uintptr)(unsafe.Pointer(&struct { 51285 f func(*libc.TLS, uintptr, int32) int32 51286 }{multiplexSleep})) 51287 gMultiplex.FsThisVfs.FxCurrentTime = *(*uintptr)(unsafe.Pointer(&struct { 51288 f func(*libc.TLS, uintptr, uintptr) int32 51289 }{multiplexCurrentTime})) 51290 gMultiplex.FsThisVfs.FxGetLastError = *(*uintptr)(unsafe.Pointer(&struct { 51291 f func(*libc.TLS, uintptr, int32, uintptr) int32 51292 }{multiplexGetLastError})) 51293 gMultiplex.FsThisVfs.FxCurrentTimeInt64 = *(*uintptr)(unsafe.Pointer(&struct { 51294 f func(*libc.TLS, uintptr, uintptr) int32 51295 }{multiplexCurrentTimeInt64})) 51296 51297 gMultiplex.FsIoMethodsV1.FiVersion = 1 51298 gMultiplex.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 51299 f func(*libc.TLS, uintptr) int32 51300 }{multiplexClose})) 51301 gMultiplex.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 51302 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51303 }{multiplexRead})) 51304 gMultiplex.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 51305 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51306 }{multiplexWrite})) 51307 gMultiplex.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 51308 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51309 }{multiplexTruncate})) 51310 gMultiplex.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 51311 f func(*libc.TLS, uintptr, int32) int32 51312 }{multiplexSync})) 51313 gMultiplex.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 51314 f func(*libc.TLS, uintptr, uintptr) int32 51315 }{multiplexFileSize})) 51316 gMultiplex.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 51317 f func(*libc.TLS, uintptr, int32) int32 51318 }{multiplexLock})) 51319 gMultiplex.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 51320 f func(*libc.TLS, uintptr, int32) int32 51321 }{multiplexUnlock})) 51322 gMultiplex.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 51323 f func(*libc.TLS, uintptr, uintptr) int32 51324 }{multiplexCheckReservedLock})) 51325 gMultiplex.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 51326 f func(*libc.TLS, uintptr, int32, uintptr) int32 51327 }{multiplexFileControl})) 51328 gMultiplex.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 51329 f func(*libc.TLS, uintptr) int32 51330 }{multiplexSectorSize})) 51331 gMultiplex.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 51332 f func(*libc.TLS, uintptr) int32 51333 }{multiplexDeviceCharacteristics})) 51334 gMultiplex.FsIoMethodsV2 = gMultiplex.FsIoMethodsV1 51335 gMultiplex.FsIoMethodsV2.FiVersion = 2 51336 gMultiplex.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 51337 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 51338 }{multiplexShmMap})) 51339 gMultiplex.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 51340 f func(*libc.TLS, uintptr, int32, int32, int32) int32 51341 }{multiplexShmLock})) 51342 gMultiplex.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{multiplexShmBarrier})) 51343 gMultiplex.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 51344 f func(*libc.TLS, uintptr, int32) int32 51345 }{multiplexShmUnmap})) 51346 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gMultiplex))+8, makeDefault) 51347 51348 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 51349 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 51350 }{multiplexFuncInit}))) 51351 51352 return SQLITE_OK 51353 } 51354 51355 func sqlite3_multiplex_shutdown(tls *libc.TLS, eForce int32) int32 { 51356 var rc int32 = SQLITE_OK 51357 if gMultiplex.FisInitialized == 0 { 51358 return SQLITE_MISUSE 51359 } 51360 gMultiplex.FisInitialized = 0 51361 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gMultiplex))+8) 51362 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gMultiplex)), 0, uint64(unsafe.Sizeof(gMultiplex))) 51363 return rc 51364 } 51365 51366 func test_multiplex_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51367 bp := tls.Alloc(4) 51368 defer tls.Free(4) 51369 51370 var zName uintptr 51371 51372 var rc int32 51373 51374 _ = clientData 51375 51376 if objc != 3 { 51377 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 51378 return TCL_ERROR 51379 } 51380 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51381 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 51382 return TCL_ERROR 51383 } 51384 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 51385 zName = uintptr(0) 51386 } 51387 51388 rc = sqlite3_multiplex_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 51389 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51390 51391 return TCL_OK 51392 } 51393 51394 func test_multiplex_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51395 var rc int32 51396 51397 _ = clientData 51398 51399 if objc == 2 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+34834) != 0 { 51400 objc = 3 51401 } 51402 if objc != 1 && objc != 2 { 51403 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34841) 51404 return TCL_ERROR 51405 } 51406 51407 rc = sqlite3_multiplex_shutdown(tls, libc.Bool32(objc == 2)) 51408 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51409 51410 return TCL_OK 51411 } 51412 51413 func test_multiplex_control(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 51414 bp := tls.Alloc(176) 51415 defer tls.Free(176) 51416 51417 var rc int32 51418 51419 var db uintptr 51420 *(*int32)(unsafe.Pointer(bp + 172)) = 0 51421 var pArg uintptr = uintptr(0) 51422 51423 *(*[4]struct { 51424 FzName uintptr 51425 Fop int32 51426 Fargtype int32 51427 })(unsafe.Pointer(bp + 104)) = [4]struct { 51428 FzName uintptr 51429 Fop int32 51430 Fargtype int32 51431 }{ 51432 {FzName: ts + 10145, Fop: MULTIPLEX_CTRL_ENABLE, Fargtype: 1}, 51433 {FzName: ts + 34850, Fop: MULTIPLEX_CTRL_SET_CHUNK_SIZE, Fargtype: 1}, 51434 {FzName: ts + 34861, Fop: MULTIPLEX_CTRL_SET_MAX_CHUNKS, Fargtype: 1}, 51435 {}, 51436 } 51437 51438 if objc != 5 { 51439 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34872) 51440 return TCL_ERROR 51441 } 51442 51443 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) { 51444 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+34908, 0)) 51445 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+11945, 0)) 51446 return TCL_ERROR 51447 } else { 51448 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 40)).FobjClientData)) 51449 } 51450 51451 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 51452 interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+104, int32(unsafe.Sizeof(struct { 51453 FzName uintptr 51454 Fop int32 51455 Fargtype int32 51456 }{})), ts+2014, 0, bp+168) 51457 if rc != TCL_OK { 51458 return rc 51459 } 51460 51461 switch (*struct { 51462 FzName uintptr 51463 Fop int32 51464 Fargtype int32 51465 })(unsafe.Pointer(bp + 104 + uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fargtype { 51466 case 1: 51467 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+172) != 0 { 51468 return TCL_ERROR 51469 } 51470 pArg = bp + 172 51471 break 51472 default: 51473 tcl.XTcl_WrongNumArgs(tls, interp, 4, objv, ts+2523) 51474 return TCL_ERROR 51475 } 51476 51477 rc = sqlite3.Xsqlite3_file_control(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), (*struct { 51478 FzName uintptr 51479 Fop int32 51480 Fargtype int32 51481 })(unsafe.Pointer(bp+104+uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fop, pArg) 51482 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51483 if rc == SQLITE_OK { 51484 return TCL_OK 51485 } 51486 return TCL_ERROR 51487 } 51488 51489 func Sqlitemultiplex_Init(tls *libc.TLS, interp uintptr) int32 { 51490 var i int32 51491 51492 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd7))/uint64(unsafe.Sizeof(struct { 51493 FzName uintptr 51494 FxProc uintptr 51495 }{})); i++ { 51496 tcl.XTcl_CreateObjCommand(tls, interp, aCmd7[i].FzName, aCmd7[i].FxProc, uintptr(0), uintptr(0)) 51497 } 51498 51499 return TCL_OK 51500 } 51501 51502 var aCmd7 = [3]struct { 51503 FzName uintptr 51504 FxProc uintptr 51505 }{ 51506 {FzName: ts + 34940, FxProc: 0}, 51507 {FzName: ts + 34969, FxProc: 0}, 51508 {FzName: ts + 34996, FxProc: 0}, 51509 } 51510 51511 type sqlite3_mutex = sqlite3_mutex1 51512 51513 var aName = [15]uintptr{ 51514 ts + 35022, ts + 35027, ts + 35037, ts + 35049, 51515 ts + 35060, ts + 35072, ts + 35084, ts + 35095, 51516 ts + 35107, ts + 35119, ts + 35131, ts + 35143, 51517 ts + 35155, ts + 35167, uintptr(0), 51518 } 51519 51520 type test_mutex_globals = struct { 51521 FisInstalled int32 51522 FdisableInit int32 51523 FdisableTry int32 51524 FisInit int32 51525 Fm sqlite3_mutex_methods 51526 FaCounter [14]int32 51527 FaStatic [12]sqlite3_mutex 51528 } 51529 51530 var g3 = test_mutex_globals{} 51531 51532 func counterMutexHeld(tls *libc.TLS, p uintptr) int32 { 51533 return (*struct { 51534 f func(*libc.TLS, uintptr) int32 51535 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexHeld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51536 } 51537 51538 func counterMutexNotheld(tls *libc.TLS, p uintptr) int32 { 51539 return (*struct { 51540 f func(*libc.TLS, uintptr) int32 51541 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexNotheld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51542 } 51543 51544 func counterMutexInit(tls *libc.TLS) int32 { 51545 var rc int32 51546 if g3.FdisableInit != 0 { 51547 return g3.FdisableInit 51548 } 51549 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexInit})).f(tls) 51550 g3.FisInit = 1 51551 return rc 51552 } 51553 51554 func counterMutexEnd(tls *libc.TLS) int32 { 51555 g3.FisInit = 0 51556 return (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnd})).f(tls) 51557 } 51558 51559 func counterMutexAlloc(tls *libc.TLS, eType int32) uintptr { 51560 var pReal uintptr 51561 var pRet uintptr = uintptr(0) 51562 51563 pReal = (*struct { 51564 f func(*libc.TLS, int32) uintptr 51565 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexAlloc})).f(tls, eType) 51566 if !(pReal != 0) { 51567 return uintptr(0) 51568 } 51569 51570 if eType == SQLITE_MUTEX_FAST || eType == SQLITE_MUTEX_RECURSIVE { 51571 pRet = libc.Xmalloc(tls, uint64(unsafe.Sizeof(sqlite3_mutex{}))) 51572 } else { 51573 var eStaticType int32 = eType - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_RECURSIVE + 1))) 51574 51575 pRet = uintptr(unsafe.Pointer(&g3)) + 144 + uintptr(eStaticType)*16 51576 } 51577 51578 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FeType = eType 51579 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FpReal = pReal 51580 return pRet 51581 } 51582 51583 func counterMutexFree(tls *libc.TLS, p uintptr) { 51584 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexFree})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51585 if (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_FAST || (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_RECURSIVE { 51586 libc.Xfree(tls, p) 51587 } 51588 } 51589 51590 func counterMutexEnter(tls *libc.TLS, p uintptr) { 51591 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51592 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnter})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51593 } 51594 51595 func counterMutexTry(tls *libc.TLS, p uintptr) int32 { 51596 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51597 if g3.FdisableTry != 0 { 51598 return SQLITE_BUSY 51599 } 51600 return (*struct { 51601 f func(*libc.TLS, uintptr) int32 51602 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexTry})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51603 } 51604 51605 func counterMutexLeave(tls *libc.TLS, p uintptr) { 51606 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexLeave})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51607 } 51608 51609 func test_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51610 var rc int32 51611 51612 if objc != 1 { 51613 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51614 return TCL_ERROR 51615 } 51616 51617 rc = sqlite3.Xsqlite3_shutdown(tls) 51618 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51619 return TCL_OK 51620 } 51621 51622 func test_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51623 var rc int32 51624 51625 if objc != 1 { 51626 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51627 return TCL_ERROR 51628 } 51629 51630 rc = sqlite3.Xsqlite3_initialize(tls) 51631 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51632 return TCL_OK 51633 } 51634 51635 func test_install_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51636 bp := tls.Alloc(136) 51637 defer tls.Free(136) 51638 51639 var rc int32 = SQLITE_OK 51640 51641 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 64)) = sqlite3_mutex_methods{ 51642 FxMutexInit: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexInit})), 51643 FxMutexEnd: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexEnd})), 51644 FxMutexAlloc: *(*uintptr)(unsafe.Pointer(&struct { 51645 f func(*libc.TLS, int32) uintptr 51646 }{counterMutexAlloc})), 51647 FxMutexFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexFree})), 51648 FxMutexEnter: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexEnter})), 51649 FxMutexTry: *(*uintptr)(unsafe.Pointer(&struct { 51650 f func(*libc.TLS, uintptr) int32 51651 }{counterMutexTry})), 51652 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexLeave})), 51653 FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 51654 f func(*libc.TLS, uintptr) int32 51655 }{counterMutexHeld})), 51656 FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 51657 f func(*libc.TLS, uintptr) int32 51658 }{counterMutexNotheld})), 51659 } 51660 51661 if objc != 2 { 51662 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 51663 return TCL_ERROR 51664 } 51665 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+56) { 51666 return TCL_ERROR 51667 } 51668 51669 if *(*int32)(unsafe.Pointer(bp + 56)) == g3.FisInstalled { 51670 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35179, 0)) 51671 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, func() uintptr { 51672 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 51673 return ts + 35199 51674 } 51675 return ts + 35217 51676 }(), 0)) 51677 return TCL_ERROR 51678 } 51679 51680 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 51681 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp+32, uintptr(unsafe.Pointer(&g3))+16)) 51682 if rc == SQLITE_OK { 51683 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+40, bp+64)) 51684 } 51685 g3.FdisableTry = 0 51686 } else { 51687 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+48, uintptr(unsafe.Pointer(&g3))+16)) 51688 libc.Xmemset(tls, uintptr(unsafe.Pointer(&g3))+16, 0, uint64(unsafe.Sizeof(sqlite3_mutex_methods{}))) 51689 } 51690 51691 if rc == SQLITE_OK { 51692 g3.FisInstalled = *(*int32)(unsafe.Pointer(bp + 56)) 51693 } 51694 51695 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51696 return TCL_OK 51697 } 51698 51699 func test_read_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51700 var pRet uintptr 51701 var ii int32 51702 51703 if objc != 1 { 51704 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51705 return TCL_ERROR 51706 } 51707 51708 pRet = tcl.XTcl_NewObj(tls) 51709 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 51710 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 51711 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, aName[ii], -1)) 51712 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)))) 51713 } 51714 tcl.XTcl_SetObjResult(tls, interp, pRet) 51715 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 51716 var _objPtr uintptr = pRet 51717 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 51718 tcl.XTclFreeObj(tls, _objPtr) 51719 } 51720 } 51721 51722 return TCL_OK 51723 } 51724 51725 func test_clear_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51726 var ii int32 51727 51728 if objc != 1 { 51729 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51730 return TCL_ERROR 51731 } 51732 51733 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 51734 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)) = 0 51735 } 51736 return TCL_OK 51737 } 51738 51739 func test_alloc_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51740 bp := tls.Alloc(124) 51741 defer tls.Free(124) 51742 51743 var p uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 51744 51745 sqlite3.Xsqlite3_mutex_free(tls, p) 51746 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+9889, libc.VaList(bp, p)) 51747 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, uintptr(0))) 51748 return TCL_OK 51749 } 51750 51751 func test_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51752 bp := tls.Alloc(68) 51753 defer tls.Free(68) 51754 51755 *(*[4]ConfigOption)(unsafe.Pointer(bp)) = [4]ConfigOption{ 51756 {FzName: ts + 35231, FiValue: SQLITE_CONFIG_SINGLETHREAD}, 51757 {FzName: ts + 35244, FiValue: SQLITE_CONFIG_MULTITHREAD}, 51758 {FzName: ts + 35256, FiValue: SQLITE_CONFIG_SERIALIZED}, 51759 {}, 51760 } 51761 var s int32 = int32(unsafe.Sizeof(ConfigOption{})) 51762 51763 var rc int32 51764 51765 if objc != 2 { 51766 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51767 return TCL_ERROR 51768 } 51769 51770 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, s, ts+17631, 0, bp+64) != 0 { 51771 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+64) != 0 { 51772 return TCL_ERROR 51773 } 51774 } else { 51775 *(*int32)(unsafe.Pointer(bp + 64)) = (*ConfigOption)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 64)))*16)).FiValue 51776 } 51777 51778 rc = sqlite3.Xsqlite3_config(tls, *(*int32)(unsafe.Pointer(bp + 64)), 0) 51779 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51780 return TCL_OK 51781 } 51782 51783 type ConfigOption = struct { 51784 FzName uintptr 51785 FiValue int32 51786 F__ccgo_pad1 [4]byte 51787 } 51788 51789 func getDbPointer1(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 51790 bp := tls.Alloc(64) 51791 defer tls.Free(64) 51792 51793 var db uintptr 51794 51795 var zCmd uintptr = tcl.XTcl_GetString(tls, pObj) 51796 if tcl.XTcl_GetCommandInfo(tls, pInterp, zCmd, bp) != 0 { 51797 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)) 51798 } else { 51799 db = sqlite3TestTextToPtr(tls, zCmd) 51800 } 51801 51802 return db 51803 } 51804 51805 func getStaticMutexPointer(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 51806 bp := tls.Alloc(4) 51807 defer tls.Free(4) 51808 51809 if tcl.XTcl_GetIndexFromObjStruct(tls, pInterp, pObj, uintptr(unsafe.Pointer(&aName)), int32(unsafe.Sizeof(uintptr(0))), ts+35267, 0, bp) != 0 { 51810 return uintptr(0) 51811 } 51812 51813 return counterMutexAlloc(tls, *(*int32)(unsafe.Pointer(bp))) 51814 } 51815 51816 func test_enter_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51817 var pMutex uintptr 51818 if objc != 2 { 51819 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 51820 return TCL_ERROR 51821 } 51822 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51823 if !(pMutex != 0) { 51824 return TCL_ERROR 51825 } 51826 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 51827 return TCL_OK 51828 } 51829 51830 func test_leave_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51831 var pMutex uintptr 51832 if objc != 2 { 51833 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 51834 return TCL_ERROR 51835 } 51836 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51837 if !(pMutex != 0) { 51838 return TCL_ERROR 51839 } 51840 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 51841 return TCL_OK 51842 } 51843 51844 func test_enter_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51845 var db uintptr 51846 if objc != 2 { 51847 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 51848 return TCL_ERROR 51849 } 51850 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51851 if !(db != 0) { 51852 return TCL_ERROR 51853 } 51854 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 51855 return TCL_OK 51856 } 51857 51858 func test_leave_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51859 var db uintptr 51860 if objc != 2 { 51861 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 51862 return TCL_ERROR 51863 } 51864 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51865 if !(db != 0) { 51866 return TCL_ERROR 51867 } 51868 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 51869 return TCL_OK 51870 } 51871 51872 func Sqlitetest_mutex_Init(tls *libc.TLS, interp uintptr) int32 { 51873 var i int32 51874 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd8))/uint64(unsafe.Sizeof(struct { 51875 FzName uintptr 51876 FxProc uintptr 51877 }{})); i++ { 51878 tcl.XTcl_CreateObjCommand(tls, interp, aCmd8[i].FzName, aCmd8[i].FxProc, uintptr(0), uintptr(0)) 51879 } 51880 51881 tcl.XTcl_LinkVar(tls, interp, ts+35278, 51882 uintptr(unsafe.Pointer(&g3))+4, TCL_LINK_INT) 51883 tcl.XTcl_LinkVar(tls, interp, ts+35297, 51884 uintptr(unsafe.Pointer(&g3))+8, TCL_LINK_INT) 51885 return SQLITE_OK 51886 } 51887 51888 var aCmd8 = [11]struct { 51889 FzName uintptr 51890 FxProc uintptr 51891 }{ 51892 {FzName: ts + 35315, FxProc: 0}, 51893 {FzName: ts + 35332, FxProc: 0}, 51894 {FzName: ts + 35351, FxProc: 0}, 51895 {FzName: ts + 35366, FxProc: 0}, 51896 {FzName: ts + 35385, FxProc: 0}, 51897 {FzName: ts + 35404, FxProc: 0}, 51898 {FzName: ts + 35419, FxProc: 0}, 51899 {FzName: ts + 35434, FxProc: 0}, 51900 {FzName: ts + 35454, FxProc: 0}, 51901 {FzName: ts + 35477, FxProc: 0}, 51902 {FzName: ts + 35497, FxProc: 0}, 51903 } 51904 51905 type fs_real_file1 = struct { 51906 FpFile uintptr 51907 FzName uintptr 51908 FnDatabase int32 51909 FnJournal int32 51910 FnBlob int32 51911 FnRef int32 51912 FpNext uintptr 51913 FppThis uintptr 51914 } 51915 51916 type fs_real_file = fs_real_file1 51917 51918 type fs_file1 = struct { 51919 Fbase sqlite3_file 51920 FeType int32 51921 F__ccgo_pad1 [4]byte 51922 FpReal uintptr 51923 } 51924 51925 type fs_file = fs_file1 51926 51927 type tmp_file1 = struct { 51928 Fbase sqlite3_file 51929 FnSize int32 51930 FnAlloc int32 51931 FzAlloc uintptr 51932 } 51933 51934 type tmp_file = tmp_file1 51935 51936 type fs_vfs_t1 = struct { 51937 Fbase sqlite3_vfs 51938 FpFileList uintptr 51939 FpParent uintptr 51940 } 51941 51942 type fs_vfs_t = fs_vfs_t1 51943 51944 var fs_vfs = fs_vfs_t{ 51945 Fbase: sqlite3_vfs{ 51946 FiVersion: 1, 51947 FzName: ts + 31055, 51948 FxOpen: 0, 51949 FxDelete: 0, 51950 FxAccess: 0, 51951 FxFullPathname: 0, 51952 FxDlOpen: 0, 51953 FxDlError: 0, 51954 FxDlSym: 0, 51955 FxDlClose: 0, 51956 FxRandomness: 0, 51957 FxSleep: 0, 51958 FxCurrentTime: 0, 51959 }, 51960 } 51961 51962 var fs_io_methods = sqlite3_io_methods{ 51963 FiVersion: 1, 51964 FxClose: 0, 51965 FxRead: 0, 51966 FxWrite: 0, 51967 FxTruncate: 0, 51968 FxSync: 0, 51969 FxFileSize: 0, 51970 FxLock: 0, 51971 FxUnlock: 0, 51972 FxCheckReservedLock: 0, 51973 FxFileControl: 0, 51974 FxSectorSize: 0, 51975 FxDeviceCharacteristics: 0, 51976 } 51977 51978 var tmp_io_methods = sqlite3_io_methods{ 51979 FiVersion: 1, 51980 FxClose: 0, 51981 FxRead: 0, 51982 FxWrite: 0, 51983 FxTruncate: 0, 51984 FxSync: 0, 51985 FxFileSize: 0, 51986 FxLock: 0, 51987 FxUnlock: 0, 51988 FxCheckReservedLock: 0, 51989 FxFileControl: 0, 51990 FxSectorSize: 0, 51991 FxDeviceCharacteristics: 0, 51992 } 51993 51994 func tmpClose(tls *libc.TLS, pFile uintptr) int32 { 51995 var pTmp uintptr = pFile 51996 sqlite3.Xsqlite3_free(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc) 51997 return SQLITE_OK 51998 } 51999 52000 func tmpRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52001 var pTmp uintptr = pFile 52002 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) { 52003 return SQLITE_IOERR | int32(2)<<8 52004 } 52005 libc.Xmemcpy(tls, zBuf, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), uint64(iAmt)) 52006 return SQLITE_OK 52007 } 52008 52009 func tmpWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52010 var pTmp uintptr = pFile 52011 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc) { 52012 var nNew int32 = int32(int64(2) * (sqlite_int64(iAmt) + iOfst + sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc))) 52013 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc, nNew) 52014 if !(zNew != 0) { 52015 return SQLITE_NOMEM 52016 } 52017 (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc = zNew 52018 (*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc = nNew 52019 } 52020 libc.Xmemcpy(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), zBuf, uint64(iAmt)) 52021 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 52022 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) > iOfst+sqlite_int64(iAmt) { 52023 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 52024 } 52025 return int32(iOfst + sqlite_int64(iAmt)) 52026 }() 52027 return SQLITE_OK 52028 } 52029 52030 func tmpTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52031 var pTmp uintptr = pFile 52032 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 52033 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) < size { 52034 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 52035 } 52036 return int32(size) 52037 }() 52038 return SQLITE_OK 52039 } 52040 52041 func tmpSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52042 return SQLITE_OK 52043 } 52044 52045 func tmpFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52046 var pTmp uintptr = pFile 52047 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) 52048 return SQLITE_OK 52049 } 52050 52051 func tmpLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52052 return SQLITE_OK 52053 } 52054 52055 func tmpUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52056 return SQLITE_OK 52057 } 52058 52059 func tmpCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52060 *(*int32)(unsafe.Pointer(pResOut)) = 0 52061 return SQLITE_OK 52062 } 52063 52064 func tmpFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52065 return SQLITE_OK 52066 } 52067 52068 func tmpSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52069 return 0 52070 } 52071 52072 func tmpDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52073 return 0 52074 } 52075 52076 func fsClose1(tls *libc.TLS, pFile uintptr) int32 { 52077 var rc int32 = SQLITE_OK 52078 var p uintptr = pFile 52079 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52080 52081 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef-- 52082 52083 if (*fs_real_file)(unsafe.Pointer(pReal)).FnRef == 0 { 52084 *(*uintptr)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FppThis)) = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 52085 if (*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0 { 52086 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = (*fs_real_file)(unsafe.Pointer(pReal)).FppThis 52087 } 52088 rc = (*struct { 52089 f func(*libc.TLS, uintptr) int32 52090 })(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) 52091 sqlite3.Xsqlite3_free(tls, pReal) 52092 } 52093 52094 return rc 52095 } 52096 52097 func fsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52098 var rc int32 = SQLITE_OK 52099 var p uintptr = pFile 52100 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52101 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52102 52103 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) || 52104 (*fs_file)(unsafe.Pointer(p)).FeType == JOURNAL_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 52105 rc = SQLITE_IOERR | int32(2)<<8 52106 } else if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52107 rc = (*struct { 52108 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52109 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxRead})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 52110 } else { 52111 var iRem int32 = iAmt 52112 var iBuf int32 = 0 52113 var ii int32 = int32(iOfst) 52114 for iRem > 0 && rc == SQLITE_OK { 52115 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 52116 var iRealAmt int32 = func() int32 { 52117 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 52118 return iRem 52119 } 52120 return BLOCKSIZE - iRealOff%BLOCKSIZE 52121 }() 52122 52123 rc = (*struct { 52124 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52125 })(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)) 52126 ii = ii + iRealAmt 52127 iBuf = iBuf + iRealAmt 52128 iRem = iRem - iRealAmt 52129 } 52130 } 52131 52132 return rc 52133 } 52134 52135 func fsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52136 var rc int32 = SQLITE_OK 52137 var p uintptr = pFile 52138 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52139 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52140 52141 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52142 if sqlite_int64(iAmt)+iOfst+int64(BLOCKSIZE) > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-(*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 52143 rc = SQLITE_FULL 52144 } else { 52145 rc = (*struct { 52146 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52147 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 52148 if rc == SQLITE_OK { 52149 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 52150 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) > sqlite_int64(iAmt)+iOfst { 52151 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 52152 } 52153 return int32(sqlite_int64(iAmt) + iOfst) 52154 }() 52155 } 52156 } 52157 } else { 52158 var iRem int32 = iAmt 52159 var iBuf int32 = 0 52160 var ii int32 = int32(iOfst) 52161 for iRem > 0 && rc == SQLITE_OK { 52162 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 52163 var iRealAmt int32 = func() int32 { 52164 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 52165 return iRem 52166 } 52167 return BLOCKSIZE - iRealOff%BLOCKSIZE 52168 }() 52169 52170 if iRealOff < (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase+BLOCKSIZE { 52171 rc = SQLITE_FULL 52172 } else { 52173 rc = (*struct { 52174 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52175 })(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)) 52176 ii = ii + iRealAmt 52177 iBuf = iBuf + iRealAmt 52178 iRem = iRem - iRealAmt 52179 } 52180 } 52181 if rc == SQLITE_OK { 52182 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 52183 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) > sqlite_int64(iAmt)+iOfst { 52184 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 52185 } 52186 return int32(sqlite_int64(iAmt) + iOfst) 52187 }() 52188 } 52189 } 52190 52191 return rc 52192 } 52193 52194 func fsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52195 var p uintptr = pFile 52196 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52197 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52198 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 52199 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) < size { 52200 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 52201 } 52202 return int32(size) 52203 }() 52204 } else { 52205 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 52206 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) < size { 52207 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 52208 } 52209 return int32(size) 52210 }() 52211 } 52212 return SQLITE_OK 52213 } 52214 52215 func fsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52216 bp := tls.Alloc(4) 52217 defer tls.Free(4) 52218 52219 var p uintptr = pFile 52220 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52221 var pRealFile uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52222 var rc int32 = SQLITE_OK 52223 52224 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52225 *(*uint8)(unsafe.Pointer(bp)) = uint8(uint32((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) & 0xFF000000 >> 24) 52226 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x00FF0000 >> 16) 52227 *(*uint8)(unsafe.Pointer(bp + 2)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x0000FF00 >> 8) 52228 *(*uint8)(unsafe.Pointer(bp + 3)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x000000FF) 52229 rc = (*struct { 52230 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52231 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, bp, 4, int64(0)) 52232 } 52233 if rc == SQLITE_OK { 52234 rc = (*struct { 52235 f func(*libc.TLS, uintptr, int32) int32 52236 })(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)) 52237 } 52238 52239 return rc 52240 } 52241 52242 func fsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52243 var p uintptr = pFile 52244 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52245 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52246 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) 52247 } else { 52248 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) 52249 } 52250 return SQLITE_OK 52251 } 52252 52253 func fsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52254 return SQLITE_OK 52255 } 52256 52257 func fsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52258 return SQLITE_OK 52259 } 52260 52261 func fsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52262 *(*int32)(unsafe.Pointer(pResOut)) = 0 52263 return SQLITE_OK 52264 } 52265 52266 func fsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52267 if op == SQLITE_FCNTL_PRAGMA { 52268 return SQLITE_NOTFOUND 52269 } 52270 return SQLITE_OK 52271 } 52272 52273 func fsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52274 return BLOCKSIZE 52275 } 52276 52277 func fsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52278 return 0 52279 } 52280 52281 func fsOpen1(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 52282 bp := tls.Alloc(12) 52283 defer tls.Free(12) 52284 52285 var pFsVfs uintptr 52286 var p uintptr 52287 var pReal uintptr 52288 var eType int32 52289 var nName int32 52290 var rc int32 52291 var p2 uintptr 52292 52293 var real_flags int32 52294 52295 var pRealFile uintptr 52296 var pParent uintptr 52297 pFsVfs = pVfs 52298 p = pFile 52299 pReal = uintptr(0) 52300 rc = SQLITE_OK 52301 52302 if !(0 == flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL)) { 52303 goto __1 52304 } 52305 p2 = pFile 52306 libc.Xmemset(tls, p2, 0, uint64(unsafe.Sizeof(tmp_file{}))) 52307 (*tmp_file)(unsafe.Pointer(p2)).Fbase.FpMethods = uintptr(unsafe.Pointer(&tmp_io_methods)) 52308 return SQLITE_OK 52309 __1: 52310 ; 52311 eType = func() int32 { 52312 if flags&SQLITE_OPEN_MAIN_DB != 0 { 52313 return DATABASE_FILE 52314 } 52315 return JOURNAL_FILE 52316 }() 52317 (*fs_file)(unsafe.Pointer(p)).Fbase.FpMethods = uintptr(unsafe.Pointer(&fs_io_methods)) 52318 (*fs_file)(unsafe.Pointer(p)).FeType = eType 52319 52320 nName = int32(libc.Xstrlen(tls, zName)) - func() int32 { 52321 if eType == JOURNAL_FILE { 52322 return 8 52323 } 52324 return 0 52325 }() 52326 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52327 __2: 52328 if !(pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zName, uint64(nName)) != 0) { 52329 goto __4 52330 } 52331 goto __3 52332 __3: 52333 pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 52334 goto __2 52335 goto __4 52336 __4: 52337 ; 52338 if !!(pReal != 0) { 52339 goto __5 52340 } 52341 real_flags = flags&libc.CplInt32(SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB 52342 pParent = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpParent 52343 52344 pReal = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile))) 52345 if !!(pReal != 0) { 52346 goto __6 52347 } 52348 rc = SQLITE_NOMEM 52349 goto open_out 52350 __6: 52351 ; 52352 libc.Xmemset(tls, pReal, 0, uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile)) 52353 (*fs_real_file)(unsafe.Pointer(pReal)).FzName = zName 52354 (*fs_real_file)(unsafe.Pointer(pReal)).FpFile = pReal + 1*48 52355 52356 rc = (*struct { 52357 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52358 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zName, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile, real_flags, pOutFlags) 52359 if !(rc != SQLITE_OK) { 52360 goto __7 52361 } 52362 goto open_out 52363 __7: 52364 ; 52365 pRealFile = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52366 52367 rc = (*struct { 52368 f func(*libc.TLS, uintptr, uintptr) int32 52369 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxFileSize})).f(tls, pRealFile, bp) 52370 if !(rc != SQLITE_OK) { 52371 goto __8 52372 } 52373 goto open_out 52374 __8: 52375 ; 52376 if !(*(*sqlite3_int64)(unsafe.Pointer(bp)) == int64(0)) { 52377 goto __9 52378 } 52379 rc = (*struct { 52380 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52381 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, ts+35518, 1, int64(BLOBSIZE-1)) 52382 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = BLOBSIZE 52383 goto __10 52384 __9: 52385 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = int32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 52386 rc = (*struct { 52387 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52388 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxRead})).f(tls, pRealFile, bp+8, 4, int64(0)) 52389 (*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))) 52390 if !(rc == SQLITE_OK) { 52391 goto __11 52392 } 52393 rc = (*struct { 52394 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52395 })(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)) 52396 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) { 52397 goto __12 52398 } 52399 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob 52400 __12: 52401 ; 52402 __11: 52403 ; 52404 __10: 52405 ; 52406 if !(rc == SQLITE_OK) { 52407 goto __13 52408 } 52409 (*fs_real_file)(unsafe.Pointer(pReal)).FpNext = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52410 if !((*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0) { 52411 goto __14 52412 } 52413 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = pReal + 32 52414 __14: 52415 ; 52416 (*fs_real_file)(unsafe.Pointer(pReal)).FppThis = pFsVfs + 168 52417 (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList = pReal 52418 __13: 52419 ; 52420 __5: 52421 ; 52422 open_out: 52423 if !(pReal != 0) { 52424 goto __15 52425 } 52426 if !(rc == SQLITE_OK) { 52427 goto __16 52428 } 52429 (*fs_file)(unsafe.Pointer(p)).FpReal = pReal 52430 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef++ 52431 goto __17 52432 __16: 52433 if !((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods != 0) { 52434 goto __18 52435 } 52436 (*struct { 52437 f func(*libc.TLS, uintptr) int32 52438 })(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) 52439 __18: 52440 ; 52441 sqlite3.Xsqlite3_free(tls, pReal) 52442 __17: 52443 ; 52444 __15: 52445 ; 52446 return rc 52447 } 52448 52449 func fsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 52450 var rc int32 = SQLITE_OK 52451 var pFsVfs uintptr = pVfs 52452 var pReal uintptr 52453 var pF uintptr 52454 var nName int32 = int32(libc.Xstrlen(tls, zPath)) - 8 52455 52456 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52457 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 { 52458 } 52459 if pReal != 0 { 52460 pF = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52461 rc = (*struct { 52462 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52463 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, ts+35520, 4, int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-BLOCKSIZE)) 52464 if rc == SQLITE_OK { 52465 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = 0 52466 } 52467 } 52468 return rc 52469 } 52470 52471 func fsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 52472 var pFsVfs uintptr = pVfs 52473 var pReal uintptr 52474 var isJournal int32 = 0 52475 var nName int32 = int32(libc.Xstrlen(tls, zPath)) 52476 52477 if flags != SQLITE_ACCESS_EXISTS { 52478 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52479 return (*struct { 52480 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52481 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxAccess})).f(tls, pParent, zPath, flags, pResOut) 52482 } 52483 52484 if nName > 8 && libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nName-8)) == 0 { 52485 nName = nName - 8 52486 isJournal = 1 52487 } 52488 52489 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52490 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 { 52491 } 52492 52493 *(*int32)(unsafe.Pointer(pResOut)) = libc.Bool32(pReal != 0 && (!(isJournal != 0) || (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal > 0)) 52494 return SQLITE_OK 52495 } 52496 52497 func fsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 52498 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52499 return (*struct { 52500 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52501 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zPath, nOut, zOut) 52502 } 52503 52504 func fsDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 52505 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52506 return (*struct { 52507 f func(*libc.TLS, uintptr, uintptr) uintptr 52508 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlOpen})).f(tls, pParent, zPath) 52509 } 52510 52511 func fsDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 52512 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52513 (*struct { 52514 f func(*libc.TLS, uintptr, int32, uintptr) 52515 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlError})).f(tls, pParent, nByte, zErrMsg) 52516 } 52517 52518 func fsDlSym(tls *libc.TLS, pVfs uintptr, pH uintptr, zSym uintptr) uintptr { 52519 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52520 return (*struct { 52521 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 52522 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlSym})).f(tls, pParent, pH, zSym) 52523 } 52524 52525 func fsDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 52526 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52527 (*struct { 52528 f func(*libc.TLS, uintptr, uintptr) 52529 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlClose})).f(tls, pParent, pHandle) 52530 } 52531 52532 func fsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 52533 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52534 return (*struct { 52535 f func(*libc.TLS, uintptr, int32, uintptr) int32 52536 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxRandomness})).f(tls, pParent, nByte, zBufOut) 52537 } 52538 52539 func fsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 52540 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52541 return (*struct { 52542 f func(*libc.TLS, uintptr, int32) int32 52543 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxSleep})).f(tls, pParent, nMicro) 52544 } 52545 52546 func fsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 52547 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52548 return (*struct { 52549 f func(*libc.TLS, uintptr, uintptr) int32 52550 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxCurrentTime})).f(tls, pParent, pTimeOut) 52551 } 52552 52553 func fs_register(tls *libc.TLS) int32 { 52554 if fs_vfs.FpParent != 0 { 52555 return SQLITE_OK 52556 } 52557 fs_vfs.FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 52558 fs_vfs.Fbase.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(fs_vfs.FpParent)).FmxPathname 52559 fs_vfs.Fbase.FszOsFile = func() int32 { 52560 if uint64(unsafe.Sizeof(tmp_file{})) > uint64(unsafe.Sizeof(fs_file{})) { 52561 return int32(unsafe.Sizeof(tmp_file{})) 52562 } 52563 return int32(unsafe.Sizeof(fs_file{})) 52564 }() 52565 return sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&fs_vfs)), 0) 52566 } 52567 52568 func SqlitetestOnefile_Init(tls *libc.TLS) int32 { 52569 return fs_register(tls) 52570 } 52571 52572 type VfslogVfs1 = struct { 52573 Fbase sqlite3_vfs 52574 FpVfs uintptr 52575 FiNextFileId int32 52576 F__ccgo_pad1 [4]byte 52577 FpLog uintptr 52578 FiOffset sqlite3_int64 52579 FnBuf int32 52580 FaBuf [8192]int8 52581 F__ccgo_pad2 [4]byte 52582 } 52583 52584 type VfslogVfs = VfslogVfs1 52585 type VfslogFile1 = struct { 52586 Fbase sqlite3_file 52587 FpReal uintptr 52588 FpVfslog uintptr 52589 FiFileId int32 52590 F__ccgo_pad1 [4]byte 52591 } 52592 52593 type VfslogFile = VfslogFile1 52594 52595 var vfslog_vfs = sqlite3_vfs{ 52596 FiVersion: 1, 52597 FszOsFile: int32(unsafe.Sizeof(VfslogFile{})), 52598 FmxPathname: INST_MAX_PATHNAME, 52599 FxOpen: 0, 52600 FxDelete: 0, 52601 FxAccess: 0, 52602 FxFullPathname: 0, 52603 FxDlOpen: 0, 52604 FxDlError: 0, 52605 FxDlSym: 0, 52606 FxDlClose: 0, 52607 FxRandomness: 0, 52608 FxSleep: 0, 52609 FxCurrentTime: 0, 52610 FxGetLastError: 0, 52611 FxCurrentTimeInt64: 0, 52612 } 52613 52614 var vfslog_io_methods = sqlite3_io_methods{ 52615 FiVersion: 2, 52616 FxClose: 0, 52617 FxRead: 0, 52618 FxWrite: 0, 52619 FxTruncate: 0, 52620 FxSync: 0, 52621 FxFileSize: 0, 52622 FxLock: 0, 52623 FxUnlock: 0, 52624 FxCheckReservedLock: 0, 52625 FxFileControl: 0, 52626 FxSectorSize: 0, 52627 FxDeviceCharacteristics: 0, 52628 FxShmMap: 0, 52629 FxShmLock: 0, 52630 FxShmBarrier: 0, 52631 FxShmUnmap: 0, 52632 } 52633 52634 func vfslog_time(tls *libc.TLS) sqlite3_uint64 { 52635 bp := tls.Alloc(16) 52636 defer tls.Free(16) 52637 52638 libc.Xgettimeofday(tls, bp, uintptr(0)) 52639 return sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_usec) + sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_sec)*uint64(1000000) 52640 } 52641 52642 func vfslogClose(tls *libc.TLS, pFile uintptr) int32 { 52643 var t sqlite3_uint64 52644 var rc int32 = SQLITE_OK 52645 var p uintptr = pFile 52646 52647 t = vfslog_time(tls) 52648 if (*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 52649 rc = (*struct { 52650 f func(*libc.TLS, uintptr) int32 52651 })(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) 52652 } 52653 t = vfslog_time(tls) - t 52654 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CLOSE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52655 return rc 52656 } 52657 52658 func vfslogRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52659 var rc int32 52660 var t sqlite3_uint64 52661 var p uintptr = pFile 52662 t = vfslog_time(tls) 52663 rc = (*struct { 52664 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52665 })(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) 52666 t = vfslog_time(tls) - t 52667 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_READ, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 52668 return rc 52669 } 52670 52671 func vfslogWrite(tls *libc.TLS, pFile uintptr, z uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52672 var rc int32 52673 var t sqlite3_uint64 52674 var p uintptr = pFile 52675 t = vfslog_time(tls) 52676 rc = (*struct { 52677 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52678 })(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) 52679 t = vfslog_time(tls) - t 52680 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_WRITE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 52681 return rc 52682 } 52683 52684 func vfslogTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52685 var rc int32 52686 var t sqlite3_uint64 52687 var p uintptr = pFile 52688 t = vfslog_time(tls) 52689 rc = (*struct { 52690 f func(*libc.TLS, uintptr, sqlite3_int64) int32 52691 })(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) 52692 t = vfslog_time(tls) - t 52693 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_TRUNCATE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, int32(size)) 52694 return rc 52695 } 52696 52697 func vfslogSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52698 var rc int32 52699 var t sqlite3_uint64 52700 var p uintptr = pFile 52701 t = vfslog_time(tls) 52702 rc = (*struct { 52703 f func(*libc.TLS, uintptr, int32) int32 52704 })(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) 52705 t = vfslog_time(tls) - t 52706 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SYNC, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, flags, 0) 52707 return rc 52708 } 52709 52710 func vfslogFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52711 var rc int32 52712 var t sqlite3_uint64 52713 var p uintptr = pFile 52714 t = vfslog_time(tls) 52715 rc = (*struct { 52716 f func(*libc.TLS, uintptr, uintptr) int32 52717 })(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) 52718 t = vfslog_time(tls) - t 52719 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)))) 52720 return rc 52721 } 52722 52723 func vfslogLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52724 var rc int32 52725 var t sqlite3_uint64 52726 var p uintptr = pFile 52727 t = vfslog_time(tls) 52728 rc = (*struct { 52729 f func(*libc.TLS, uintptr, int32) int32 52730 })(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) 52731 t = vfslog_time(tls) - t 52732 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_LOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 52733 return rc 52734 } 52735 52736 func vfslogUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52737 var rc int32 52738 var t sqlite3_uint64 52739 var p uintptr = pFile 52740 t = vfslog_time(tls) 52741 rc = (*struct { 52742 f func(*libc.TLS, uintptr, int32) int32 52743 })(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) 52744 t = vfslog_time(tls) - t 52745 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_UNLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 52746 return rc 52747 } 52748 52749 func vfslogCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52750 var rc int32 52751 var t sqlite3_uint64 52752 var p uintptr = pFile 52753 t = vfslog_time(tls) 52754 rc = (*struct { 52755 f func(*libc.TLS, uintptr, uintptr) int32 52756 })(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) 52757 t = vfslog_time(tls) - t 52758 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CHECKRESERVEDLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, *(*int32)(unsafe.Pointer(pResOut)), 0) 52759 return rc 52760 } 52761 52762 func vfslogFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52763 bp := tls.Alloc(8) 52764 defer tls.Free(8) 52765 52766 var p uintptr = pFile 52767 var rc int32 = (*struct { 52768 f func(*libc.TLS, uintptr, int32, uintptr) int32 52769 })(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) 52770 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 52771 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35525, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 52772 } 52773 return rc 52774 } 52775 52776 func vfslogSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52777 var rc int32 52778 var t sqlite3_uint64 52779 var p uintptr = pFile 52780 t = vfslog_time(tls) 52781 rc = (*struct { 52782 f func(*libc.TLS, uintptr) int32 52783 })(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) 52784 t = vfslog_time(tls) - t 52785 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SECTORSIZE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52786 return rc 52787 } 52788 52789 func vfslogDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52790 var rc int32 52791 var t sqlite3_uint64 52792 var p uintptr = pFile 52793 t = vfslog_time(tls) 52794 rc = (*struct { 52795 f func(*libc.TLS, uintptr) int32 52796 })(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) 52797 t = vfslog_time(tls) - t 52798 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_DEVCHAR, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52799 return rc 52800 } 52801 52802 func vfslogShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 52803 var rc int32 52804 var t sqlite3_uint64 52805 var p uintptr = pFile 52806 t = vfslog_time(tls) 52807 rc = (*struct { 52808 f func(*libc.TLS, uintptr, int32, int32, int32) int32 52809 })(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) 52810 t = vfslog_time(tls) - t 52811 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52812 return rc 52813 } 52814 52815 func vfslogShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 52816 var rc int32 52817 var t sqlite3_uint64 52818 var p uintptr = pFile 52819 t = vfslog_time(tls) 52820 rc = (*struct { 52821 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 52822 })(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) 52823 t = vfslog_time(tls) - t 52824 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52825 return rc 52826 } 52827 52828 func vfslogShmBarrier(tls *libc.TLS, pFile uintptr) { 52829 var t sqlite3_uint64 52830 var p uintptr = pFile 52831 t = vfslog_time(tls) 52832 (*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) 52833 t = vfslog_time(tls) - t 52834 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMBARRIER, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), SQLITE_OK, 0, 0) 52835 } 52836 52837 func vfslogShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 52838 var rc int32 52839 var t sqlite3_uint64 52840 var p uintptr = pFile 52841 t = vfslog_time(tls) 52842 rc = (*struct { 52843 f func(*libc.TLS, uintptr, int32) int32 52844 })(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) 52845 t = vfslog_time(tls) - t 52846 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMUNMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52847 return rc 52848 } 52849 52850 func vfslogOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 52851 var rc int32 52852 var t sqlite3_uint64 52853 var p uintptr = pFile 52854 var pLog uintptr = pVfs 52855 52856 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&vfslog_io_methods)) 52857 (*VfslogFile)(unsafe.Pointer(p)).FpReal = p + 1*32 52858 (*VfslogFile)(unsafe.Pointer(p)).FpVfslog = pVfs 52859 (*VfslogFile)(unsafe.Pointer(p)).FiFileId = libc.PreIncInt32(&(*VfslogVfs)(unsafe.Pointer(pLog)).FiNextFileId, 1) 52860 52861 t = vfslog_time(tls) 52862 rc = (*struct { 52863 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52864 })(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) 52865 t = vfslog_time(tls) - t 52866 52867 vfslog_call(tls, pVfs, OS_OPEN, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52868 vfslog_string(tls, pVfs, zName) 52869 return rc 52870 } 52871 52872 func vfslogDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 52873 var rc int32 52874 var t sqlite3_uint64 52875 t = vfslog_time(tls) 52876 rc = (*struct { 52877 f func(*libc.TLS, uintptr, uintptr, int32) int32 52878 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDelete})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, dirSync) 52879 t = vfslog_time(tls) - t 52880 vfslog_call(tls, pVfs, OS_DELETE, 0, int64(t), rc, dirSync, 0) 52881 vfslog_string(tls, pVfs, zPath) 52882 return rc 52883 } 52884 52885 func vfslogAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 52886 var rc int32 52887 var t sqlite3_uint64 52888 t = vfslog_time(tls) 52889 rc = (*struct { 52890 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52891 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxAccess})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, flags, pResOut) 52892 t = vfslog_time(tls) - t 52893 vfslog_call(tls, pVfs, OS_ACCESS, 0, int64(t), rc, flags, *(*int32)(unsafe.Pointer(pResOut))) 52894 vfslog_string(tls, pVfs, zPath) 52895 return rc 52896 } 52897 52898 func vfslogFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 52899 return (*struct { 52900 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52901 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxFullPathname})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, nOut, zOut) 52902 } 52903 52904 func vfslogDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 52905 return (*struct { 52906 f func(*libc.TLS, uintptr, uintptr) uintptr 52907 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlOpen})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath) 52908 } 52909 52910 func vfslogDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 52911 (*struct { 52912 f func(*libc.TLS, uintptr, int32, uintptr) 52913 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zErrMsg) 52914 } 52915 52916 func vfslogDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 52917 return (*struct { 52918 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 52919 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlSym})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p, zSym) 52920 } 52921 52922 func vfslogDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 52923 (*struct { 52924 f func(*libc.TLS, uintptr, uintptr) 52925 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlClose})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pHandle) 52926 } 52927 52928 func vfslogRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 52929 return (*struct { 52930 f func(*libc.TLS, uintptr, int32, uintptr) int32 52931 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxRandomness})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zBufOut) 52932 } 52933 52934 func vfslogSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 52935 return (*struct { 52936 f func(*libc.TLS, uintptr, int32) int32 52937 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxSleep})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nMicro) 52938 } 52939 52940 func vfslogCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 52941 return (*struct { 52942 f func(*libc.TLS, uintptr, uintptr) int32 52943 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTime})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pTimeOut) 52944 } 52945 52946 func vfslogGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 52947 return (*struct { 52948 f func(*libc.TLS, uintptr, int32, uintptr) int32 52949 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxGetLastError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, a, b) 52950 } 52951 52952 func vfslogCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 52953 return (*struct { 52954 f func(*libc.TLS, uintptr, uintptr) int32 52955 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTimeInt64})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p) 52956 } 52957 52958 func vfslog_flush(tls *libc.TLS, p uintptr) { 52959 var pending int32 = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 52960 var persist int32 = sqlite3.Xsqlite3_io_error_persist 52961 var diskfull int32 = sqlite3.Xsqlite3_diskfull_pending 52962 52963 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(0)) 52964 sqlite3.Xsqlite3_io_error_persist = 0 52965 sqlite3.Xsqlite3_diskfull_pending = 0 52966 52967 if (*VfslogVfs)(unsafe.Pointer(p)).FnBuf != 0 { 52968 (*struct { 52969 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52970 })(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) 52971 *(*sqlite3_int64)(unsafe.Pointer(p + 192)) += sqlite3_int64((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 52972 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 0 52973 } 52974 52975 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, pending) 52976 sqlite3.Xsqlite3_io_error_persist = persist 52977 sqlite3.Xsqlite3_diskfull_pending = diskfull 52978 } 52979 52980 func put32bits(tls *libc.TLS, p uintptr, v uint32) { 52981 *(*uint8)(unsafe.Pointer(p)) = uint8(v >> 24) 52982 *(*uint8)(unsafe.Pointer(p + 1)) = uint8(v >> 16) 52983 *(*uint8)(unsafe.Pointer(p + 2)) = uint8(v >> 8) 52984 *(*uint8)(unsafe.Pointer(p + 3)) = uint8(v) 52985 } 52986 52987 func vfslog_call(tls *libc.TLS, pVfs uintptr, eEvent int32, iFileid int32, nClick sqlite3_int64, return_code int32, size int32, offset int32) { 52988 var p uintptr = pVfs 52989 var zRec uintptr 52990 if uint64(24+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]int8{})) { 52991 vfslog_flush(tls, p) 52992 } 52993 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 52994 put32bits(tls, zRec, uint32(eEvent)) 52995 put32bits(tls, zRec+4, uint32(iFileid)) 52996 put32bits(tls, zRec+8, uint32(nClick&int64(0xffff))) 52997 put32bits(tls, zRec+12, uint32(return_code)) 52998 put32bits(tls, zRec+16, uint32(size)) 52999 put32bits(tls, zRec+20, uint32(offset)) 53000 *(*int32)(unsafe.Pointer(p + 200)) += 24 53001 } 53002 53003 func vfslog_string(tls *libc.TLS, pVfs uintptr, zStr uintptr) { 53004 var p uintptr = pVfs 53005 var zRec uintptr 53006 var nStr int32 53007 if zStr != 0 { 53008 nStr = int32(libc.Xstrlen(tls, zStr)) 53009 } else { 53010 nStr = 0 53011 } 53012 if uint64(4+nStr+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]int8{})) { 53013 vfslog_flush(tls, p) 53014 } 53015 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53016 put32bits(tls, zRec, uint32(nStr)) 53017 if zStr != 0 { 53018 libc.Xmemcpy(tls, zRec+4, zStr, uint64(nStr)) 53019 } 53020 *(*int32)(unsafe.Pointer(p + 200)) += 4 + nStr 53021 } 53022 53023 func vfslog_finalize(tls *libc.TLS, p uintptr) { 53024 if (*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods != 0 { 53025 vfslog_flush(tls, p) 53026 (*struct { 53027 f func(*libc.TLS, uintptr) int32 53028 })(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) 53029 } 53030 sqlite3.Xsqlite3_free(tls, p) 53031 } 53032 53033 func sqlite3_vfslog_finalize(tls *libc.TLS, zVfs uintptr) int32 { 53034 var pVfs uintptr 53035 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 53036 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 53037 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53038 }{vfslogOpen})) { 53039 return SQLITE_ERROR 53040 } 53041 sqlite3.Xsqlite3_vfs_unregister(tls, pVfs) 53042 vfslog_finalize(tls, pVfs) 53043 return SQLITE_OK 53044 } 53045 53046 func sqlite3_vfslog_new(tls *libc.TLS, zVfs uintptr, zParentVfs uintptr, zLog uintptr) int32 { 53047 bp := tls.Alloc(4) 53048 defer tls.Free(4) 53049 53050 var p uintptr 53051 var pParent uintptr 53052 var nByte int32 53053 53054 var rc int32 53055 var zFile uintptr 53056 var nVfs int32 53057 53058 pParent = sqlite3.Xsqlite3_vfs_find(tls, zParentVfs) 53059 if !(pParent != 0) { 53060 return SQLITE_ERROR 53061 } 53062 53063 nVfs = int32(libc.Xstrlen(tls, zVfs)) 53064 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)) 53065 p = sqlite3.Xsqlite3_malloc(tls, nByte) 53066 libc.Xmemset(tls, p, 0, uint64(nByte)) 53067 53068 (*VfslogVfs)(unsafe.Pointer(p)).FpVfs = pParent 53069 (*VfslogVfs)(unsafe.Pointer(p)).FpLog = p + 1*8400 53070 libc.Xmemcpy(tls, p, uintptr(unsafe.Pointer(&vfslog_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 53071 (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName = (*VfslogVfs)(unsafe.Pointer(p)).FpLog + uintptr((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) 53072 *(*int32)(unsafe.Pointer(p + 4)) += (*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile 53073 libc.Xmemcpy(tls, (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName, zVfs, uint64(nVfs)) 53074 53075 zFile = (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName + uintptr(nVfs+1) 53076 (*struct { 53077 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53078 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zLog, (*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname, zFile) 53079 53080 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SUPER_JOURNAL 53081 (*struct { 53082 f func(*libc.TLS, uintptr, uintptr, int32) int32 53083 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDelete})).f(tls, pParent, zFile, 0) 53084 rc = (*struct { 53085 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53086 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zFile, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, *(*int32)(unsafe.Pointer(bp)), bp) 53087 if rc == SQLITE_OK { 53088 libc.Xmemcpy(tls, p+204, ts+35535, uint64(20)) 53089 (*VfslogVfs)(unsafe.Pointer(p)).FiOffset = int64(0) 53090 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 20 53091 rc = sqlite3.Xsqlite3_vfs_register(tls, p, 1) 53092 } 53093 if rc != 0 { 53094 vfslog_finalize(tls, p) 53095 } 53096 return rc 53097 } 53098 53099 func sqlite3_vfslog_annotate(tls *libc.TLS, zVfs uintptr, zMsg uintptr) int32 { 53100 var pVfs uintptr 53101 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 53102 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 53103 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53104 }{vfslogOpen})) { 53105 return SQLITE_ERROR 53106 } 53107 vfslog_call(tls, pVfs, OS_ANNOTATE, 0, int64(0), 0, 0, 0) 53108 vfslog_string(tls, pVfs, zMsg) 53109 return SQLITE_OK 53110 } 53111 53112 func vfslog_eventname(tls *libc.TLS, eEvent int32) uintptr { 53113 var zEvent uintptr = uintptr(0) 53114 53115 switch eEvent { 53116 case OS_CLOSE: 53117 zEvent = ts + 35556 53118 break 53119 case OS_READ: 53120 zEvent = ts + 35563 53121 break 53122 case OS_WRITE: 53123 zEvent = ts + 35569 53124 break 53125 case OS_TRUNCATE: 53126 zEvent = ts + 35576 53127 break 53128 case OS_SYNC: 53129 zEvent = ts + 27843 53130 break 53131 case OS_FILESIZE: 53132 zEvent = ts + 35586 53133 break 53134 case OS_LOCK: 53135 zEvent = ts + 35596 53136 break 53137 case OS_UNLOCK: 53138 zEvent = ts + 35602 53139 break 53140 case OS_CHECKRESERVEDLOCK: 53141 zEvent = ts + 35610 53142 break 53143 case OS_FILECONTROL: 53144 zEvent = ts + 35624 53145 break 53146 case OS_SECTORSIZE: 53147 zEvent = ts + 35637 53148 break 53149 case OS_DEVCHAR: 53150 zEvent = ts + 35649 53151 break 53152 case OS_OPEN: 53153 zEvent = ts + 27421 53154 break 53155 case OS_DELETE: 53156 zEvent = ts + 35661 53157 break 53158 case OS_ACCESS: 53159 zEvent = ts + 35669 53160 break 53161 case OS_FULLPATHNAME: 53162 zEvent = ts + 35677 53163 break 53164 case OS_RANDOMNESS: 53165 zEvent = ts + 35691 53166 break 53167 case OS_SLEEP: 53168 zEvent = ts + 35703 53169 break 53170 case OS_CURRENTTIME: 53171 zEvent = ts + 35710 53172 break 53173 53174 case OS_SHMUNMAP: 53175 zEvent = ts + 35723 53176 break 53177 case OS_SHMLOCK: 53178 zEvent = ts + 35733 53179 break 53180 case OS_SHMBARRIER: 53181 zEvent = ts + 35742 53182 break 53183 case OS_SHMMAP: 53184 zEvent = ts + 35754 53185 break 53186 53187 case OS_ANNOTATE: 53188 zEvent = ts + 35762 53189 break 53190 } 53191 53192 return zEvent 53193 } 53194 53195 type VfslogVtab1 = struct { 53196 Fbase sqlite3_vtab 53197 FpFd uintptr 53198 FnByte sqlite3_int64 53199 FzFile uintptr 53200 } 53201 53202 type VfslogVtab = VfslogVtab1 53203 type VfslogCsr1 = struct { 53204 Fbase sqlite3_vtab_cursor 53205 FiRowid sqlite3_int64 53206 FiOffset sqlite3_int64 53207 FzTransient uintptr 53208 FnFile int32 53209 F__ccgo_pad1 [4]byte 53210 FazFile uintptr 53211 FaBuf [1024]uint8 53212 } 53213 53214 type VfslogCsr = VfslogCsr1 53215 53216 func get32bits(tls *libc.TLS, p uintptr) uint32 { 53217 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)))) 53218 } 53219 53220 func dequote(tls *libc.TLS, z uintptr) { 53221 var quote int8 53222 quote = *(*int8)(unsafe.Pointer(z)) 53223 if int32(quote) == '[' || int32(quote) == '\'' || int32(quote) == '"' || int32(quote) == '`' { 53224 var iIn int32 = 1 53225 var iOut int32 = 0 53226 if int32(quote) == '[' { 53227 quote = int8(']') 53228 } 53229 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 53230 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(quote) { 53231 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(quote) { 53232 break 53233 } 53234 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = quote 53235 iIn = iIn + 2 53236 } else { 53237 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 53238 } 53239 } 53240 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 53241 } 53242 } 53243 53244 func vlogConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 53245 bp := tls.Alloc(12) 53246 defer tls.Free(12) 53247 53248 var pVfs uintptr 53249 53250 var p uintptr 53251 var rc int32 53252 var nByte int32 53253 var zFile uintptr 53254 53255 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 53256 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 53257 nByte = int32(uint64(unsafe.Sizeof(VfslogVtab{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname)) 53258 p = sqlite3.Xsqlite3_malloc(tls, nByte) 53259 if p == uintptr(0) { 53260 return SQLITE_NOMEM 53261 } 53262 libc.Xmemset(tls, p, 0, uint64(nByte)) 53263 53264 (*VfslogVtab)(unsafe.Pointer(p)).FpFd = p + 1*48 53265 (*VfslogVtab)(unsafe.Pointer(p)).FzFile = (*VfslogVtab)(unsafe.Pointer(p)).FpFd + uintptr((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) 53266 53267 zFile = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 53268 if !(zFile != 0) { 53269 sqlite3.Xsqlite3_free(tls, p) 53270 return SQLITE_NOMEM 53271 } 53272 dequote(tls, zFile) 53273 (*struct { 53274 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53275 })(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) 53276 sqlite3.Xsqlite3_free(tls, zFile) 53277 53278 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL 53279 rc = (*struct { 53280 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53281 })(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) 53282 53283 if rc == SQLITE_OK { 53284 (*struct { 53285 f func(*libc.TLS, uintptr, uintptr) int32 53286 })(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) 53287 sqlite3.Xsqlite3_declare_vtab(tls, db, 53288 ts+35773) 53289 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 53290 } else { 53291 sqlite3.Xsqlite3_free(tls, p) 53292 } 53293 53294 return rc 53295 } 53296 53297 func vlogBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 53298 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 53299 return SQLITE_OK 53300 } 53301 53302 func vlogDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 53303 var p uintptr = pVtab 53304 if (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods != 0 { 53305 (*struct { 53306 f func(*libc.TLS, uintptr) int32 53307 })(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) 53308 (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods = uintptr(0) 53309 } 53310 sqlite3.Xsqlite3_free(tls, p) 53311 return SQLITE_OK 53312 } 53313 53314 func vlogOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 53315 var pCsr uintptr 53316 53317 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(VfslogCsr{}))) 53318 if !(pCsr != 0) { 53319 return SQLITE_NOMEM 53320 } 53321 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(VfslogCsr{}))) 53322 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 53323 return SQLITE_OK 53324 } 53325 53326 func vlogClose(tls *libc.TLS, pCursor uintptr) int32 { 53327 var p uintptr = pCursor 53328 var i int32 53329 for i = 0; i < (*VfslogCsr)(unsafe.Pointer(p)).FnFile; i++ { 53330 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(p)).FazFile + uintptr(i)*8))) 53331 } 53332 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FazFile) 53333 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FzTransient) 53334 sqlite3.Xsqlite3_free(tls, p) 53335 return SQLITE_OK 53336 } 53337 53338 func vlogNext(tls *libc.TLS, pCursor uintptr) int32 { 53339 bp := tls.Alloc(4) 53340 defer tls.Free(4) 53341 53342 var pCsr uintptr = pCursor 53343 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 53344 var rc int32 = SQLITE_OK 53345 var nRead int32 53346 53347 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient) 53348 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = uintptr(0) 53349 53350 nRead = 24 53351 if (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead) <= (*VfslogVtab)(unsafe.Pointer(p)).FnByte { 53352 var eEvent int32 53353 rc = (*struct { 53354 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53355 })(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) 53356 53357 eEvent = int32(get32bits(tls, pCsr+48)) 53358 if rc == SQLITE_OK && 53359 (eEvent == OS_OPEN || eEvent == OS_DELETE || eEvent == OS_ACCESS) { 53360 rc = (*struct { 53361 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53362 })(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)) 53363 nRead = nRead + 4 53364 if rc == SQLITE_OK { 53365 var nStr int32 = int32(get32bits(tls, bp)) 53366 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, nStr+1) 53367 rc = (*struct { 53368 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53369 })(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)) 53370 *(*int8)(unsafe.Pointer(zStr + uintptr(nStr))) = int8(0) 53371 nRead = nRead + nStr 53372 53373 if eEvent == OS_OPEN { 53374 var iFileid int32 = int32(get32bits(tls, pCsr+48+4)) 53375 if iFileid >= (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile { 53376 var nNew int32 = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(iFileid+1)) 53377 (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile = sqlite3.Xsqlite3_realloc(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile, nNew) 53378 nNew = int32(uint64(nNew) - uint64(unsafe.Sizeof(uintptr(0)))*uint64((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)) 53379 libc.Xmemset(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile+uintptr((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)*8, 0, uint64(nNew)) 53380 (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile = iFileid + 1 53381 } 53382 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8))) 53383 *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8)) = zStr 53384 } else { 53385 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = zStr 53386 } 53387 } 53388 } 53389 } 53390 53391 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 8)) += int64(1) 53392 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 16)) += sqlite3_int64(nRead) 53393 return rc 53394 } 53395 53396 func vlogEof(tls *libc.TLS, pCursor uintptr) int32 { 53397 var pCsr uintptr = pCursor 53398 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 53399 return libc.Bool32((*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset >= (*VfslogVtab)(unsafe.Pointer(p)).FnByte) 53400 } 53401 53402 func vlogFilter(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 53403 var pCsr uintptr = pCursor 53404 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 53405 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset = int64(20) 53406 return vlogNext(tls, pCursor) 53407 } 53408 53409 func vlogColumn(tls *libc.TLS, pCursor uintptr, ctx uintptr, i int32) int32 { 53410 var val uint32 53411 var pCsr uintptr = pCursor 53412 53413 val = get32bits(tls, pCsr+48+uintptr(4*i)) 53414 53415 switch i { 53416 case 0: 53417 { 53418 sqlite3.Xsqlite3_result_text(tls, ctx, vfslog_eventname(tls, int32(val)), -1, uintptr(0)) 53419 break 53420 53421 } 53422 case 1: 53423 { 53424 var zStr uintptr = (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient 53425 if val != uint32(0) && val < uint32((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile) { 53426 zStr = *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(val)*8)) 53427 } 53428 sqlite3.Xsqlite3_result_text(tls, ctx, zStr, -1, libc.UintptrFromInt32(-1)) 53429 break 53430 53431 } 53432 default: 53433 sqlite3.Xsqlite3_result_int(tls, ctx, int32(val)) 53434 break 53435 } 53436 53437 return SQLITE_OK 53438 } 53439 53440 func vlogRowid(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 53441 var pCsr uintptr = pCursor 53442 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid 53443 return SQLITE_OK 53444 } 53445 53446 func sqlite3_vfslog_register(tls *libc.TLS, db uintptr) int32 { 53447 sqlite3.Xsqlite3_create_module(tls, db, ts+35828, uintptr(unsafe.Pointer(&vfslog_module)), uintptr(0)) 53448 return SQLITE_OK 53449 } 53450 53451 var vfslog_module = sqlite3_module{ 53452 FxCreate: 0, 53453 FxConnect: 0, 53454 FxBestIndex: 0, 53455 FxDisconnect: 0, 53456 FxDestroy: 0, 53457 FxOpen: 0, 53458 FxClose: 0, 53459 FxFilter: 0, 53460 FxNext: 0, 53461 FxEof: 0, 53462 FxColumn: 0, 53463 FxRowid: 0, 53464 } 53465 53466 func test_vfslog(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 53467 bp := tls.Alloc(144) 53468 defer tls.Free(144) 53469 53470 var db uintptr 53471 53472 var rc int32 = SQLITE_ERROR 53473 53474 if objc < 2 { 53475 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 53476 return TCL_ERROR 53477 } 53478 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&strs)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+72) != 0 { 53479 return TCL_ERROR 53480 } 53481 53482 switch uint32(*(*int32)(unsafe.Pointer(bp + 72))) { 53483 case uint32(0): 53484 { 53485 var zVfs uintptr 53486 var zMsg uintptr 53487 if objc != 4 { 53488 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+35835) 53489 return TCL_ERROR 53490 } 53491 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 53492 zMsg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 53493 rc = sqlite3_vfslog_annotate(tls, zVfs, zMsg) 53494 if rc != SQLITE_OK { 53495 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35839, 0)) 53496 return TCL_ERROR 53497 } 53498 break 53499 53500 } 53501 case uint32(1): 53502 { 53503 var zVfs uintptr 53504 if objc != 3 { 53505 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35835) 53506 return TCL_ERROR 53507 } 53508 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 53509 rc = sqlite3_vfslog_finalize(tls, zVfs) 53510 if rc != SQLITE_OK { 53511 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+35839, 0)) 53512 return TCL_ERROR 53513 } 53514 break 53515 53516 } 53517 53518 case uint32(2): 53519 { 53520 var zVfs uintptr 53521 var zParent uintptr 53522 var zLog uintptr 53523 if objc != 5 { 53524 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35846) 53525 return TCL_ERROR 53526 } 53527 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 53528 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 53529 zLog = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 53530 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 53531 zParent = uintptr(0) 53532 } 53533 rc = sqlite3_vfslog_new(tls, zVfs, zParent, zLog) 53534 if rc != SQLITE_OK { 53535 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+35839, 0)) 53536 return TCL_ERROR 53537 } 53538 break 53539 53540 } 53541 53542 case uint32(3): 53543 { 53544 var zDb uintptr 53545 if objc != 3 { 53546 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 53547 return TCL_ERROR 53548 } 53549 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 53550 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+80) != 0 { 53551 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 80)).FobjClientData)).Fdb 53552 rc = sqlite3_vfslog_register(tls, db) 53553 } 53554 if rc != SQLITE_OK { 53555 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+35865, zDb, uintptr(0))) 53556 return TCL_ERROR 53557 } 53558 break 53559 53560 } 53561 } 53562 53563 return TCL_OK 53564 } 53565 53566 var strs = [5]uintptr{ts + 35886, ts + 35895, ts + 14009, ts + 35904, uintptr(0)} 53567 53568 func SqlitetestOsinst_Init(tls *libc.TLS, interp uintptr) int32 { 53569 tcl.XTcl_CreateObjCommand(tls, interp, ts+35828, *(*uintptr)(unsafe.Pointer(&struct { 53570 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53571 }{test_vfslog})), uintptr(0), uintptr(0)) 53572 return TCL_OK 53573 } 53574 53575 type testpcacheGlobalType1 = struct { 53576 FpDummy uintptr 53577 FnInstance int32 53578 FdiscardChance uint32 53579 FprngSeed uint32 53580 FhighStress uint32 53581 } 53582 53583 type testpcacheGlobalType = testpcacheGlobalType1 53584 53585 var testpcacheGlobal testpcacheGlobalType 53586 53587 func testpcacheInit(tls *libc.TLS, pArg uintptr) int32 { 53588 testpcacheGlobal.FpDummy = sqlite3.Xsqlite3_malloc(tls, 10) 53589 if testpcacheGlobal.FpDummy == uintptr(0) { 53590 return SQLITE_NOMEM 53591 } 53592 return SQLITE_OK 53593 } 53594 53595 func testpcacheShutdown(tls *libc.TLS, pArg uintptr) { 53596 sqlite3.Xsqlite3_free(tls, testpcacheGlobal.FpDummy) 53597 testpcacheGlobal.FpDummy = uintptr(0) 53598 } 53599 53600 type testpcache1 = struct { 53601 FszPage int32 53602 FszExtra int32 53603 FbPurgeable int32 53604 FnFree int32 53605 FnPinned int32 53606 FiRand uint32 53607 FiMagic uint32 53608 F__ccgo_pad1 [4]byte 53609 Fa [217]struct { 53610 Fpage sqlite3_pcache_page 53611 Fkey uint32 53612 FisPinned int32 53613 } 53614 } 53615 53616 type testpcache = testpcache1 53617 type testpcachePage = struct { 53618 Fpage sqlite3_pcache_page 53619 Fkey uint32 53620 FisPinned int32 53621 } 53622 53623 func testpcacheRandom(tls *libc.TLS, p uintptr) uint32 { 53624 var x uint32 = uint32(0) 53625 var i int32 53626 for i = 0; i < 4; i++ { 53627 (*testpcache)(unsafe.Pointer(p)).FiRand = (*testpcache)(unsafe.Pointer(p)).FiRand*uint32(69069) + uint32(5) 53628 x = x<<8 | (*testpcache)(unsafe.Pointer(p)).FiRand>>16&uint32(0xff) 53629 } 53630 return x 53631 } 53632 53633 func testpcacheCreate(tls *libc.TLS, szPage int32, szExtra int32, bPurgeable int32) uintptr { 53634 var nMem int32 53635 var x uintptr 53636 var p uintptr 53637 var i int32 53638 53639 szPage = (szPage + 7) & libc.CplInt32(7) 53640 nMem = int32(uint64(unsafe.Sizeof(testpcache{})) + uint64(TESTPCACHE_NPAGE*(szPage+szExtra))) 53641 p = sqlite3.Xsqlite3_malloc(tls, nMem) 53642 if p == uintptr(0) { 53643 return uintptr(0) 53644 } 53645 x = p + 1*5240 53646 (*testpcache)(unsafe.Pointer(p)).FszPage = szPage 53647 (*testpcache)(unsafe.Pointer(p)).FszExtra = szExtra 53648 (*testpcache)(unsafe.Pointer(p)).FnFree = TESTPCACHE_NPAGE 53649 (*testpcache)(unsafe.Pointer(p)).FnPinned = 0 53650 (*testpcache)(unsafe.Pointer(p)).FiRand = testpcacheGlobal.FprngSeed 53651 (*testpcache)(unsafe.Pointer(p)).FbPurgeable = bPurgeable 53652 (*testpcache)(unsafe.Pointer(p)).FiMagic = uint32(TESTPCACHE_VALID) 53653 i = 0 53654 __1: 53655 if !(i < TESTPCACHE_NPAGE) { 53656 goto __3 53657 } 53658 { 53659 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53660 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 53661 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpBuf = x 53662 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpExtra = x + uintptr(szPage) 53663 53664 } 53665 goto __2 53666 __2: 53667 i++ 53668 x += uintptr(szPage + szExtra) 53669 goto __1 53670 goto __3 53671 __3: 53672 ; 53673 testpcacheGlobal.FnInstance++ 53674 return p 53675 } 53676 53677 func testpcacheCachesize(tls *libc.TLS, pCache uintptr, newSize int32) { 53678 var p uintptr = pCache 53679 _ = p 53680 53681 } 53682 53683 func testpcachePagecount(tls *libc.TLS, pCache uintptr) int32 { 53684 var p uintptr = pCache 53685 53686 return TESTPCACHE_NPAGE - (*testpcache)(unsafe.Pointer(p)).FnFree 53687 } 53688 53689 func testpcacheFetch(tls *libc.TLS, pCache uintptr, key uint32, createFlag int32) uintptr { 53690 var p uintptr = pCache 53691 var i int32 53692 var j int32 53693 53694 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53695 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == key { 53696 if !((*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0) { 53697 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53698 53699 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 1 53700 } 53701 return p + 32 + uintptr(i)*24 53702 } 53703 } 53704 53705 if createFlag == 0 { 53706 return uintptr(0) 53707 } 53708 53709 if (*testpcache)(unsafe.Pointer(p)).FnPinned == TESTPCACHE_NPAGE { 53710 return uintptr(0) 53711 } 53712 53713 if (*testpcache)(unsafe.Pointer(p)).FnPinned >= TESTPCACHE_NPAGE-TESTPCACHE_RESERVE && createFlag < 2 { 53714 return uintptr(0) 53715 } 53716 53717 if testpcacheGlobal.FhighStress != 0 && createFlag < 2 { 53718 return uintptr(0) 53719 } 53720 53721 if (*testpcache)(unsafe.Pointer(p)).FnFree > TESTPCACHE_RESERVE || createFlag == 2 && (*testpcache)(unsafe.Pointer(p)).FnFree > 0 { 53722 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 53723 i = 0 53724 __1: 53725 if !(i < TESTPCACHE_NPAGE) { 53726 goto __3 53727 } 53728 { 53729 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey == uint32(0) { 53730 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 53731 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 53732 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 53733 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 53734 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53735 (*testpcache)(unsafe.Pointer(p)).FnFree-- 53736 53737 return p + 32 + uintptr(j)*24 53738 } 53739 53740 } 53741 goto __2 53742 __2: 53743 i++ 53744 j = (j + 1) % TESTPCACHE_NPAGE 53745 goto __1 53746 goto __3 53747 __3: 53748 } 53749 53750 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable == 0 { 53751 return uintptr(0) 53752 } 53753 53754 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 53755 i = 0 53756 __4: 53757 if !(i < TESTPCACHE_NPAGE) { 53758 goto __6 53759 } 53760 { 53761 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey > uint32(0) && (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).FisPinned == 0 { 53762 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 53763 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 53764 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 53765 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 53766 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53767 53768 return p + 32 + uintptr(j)*24 53769 } 53770 53771 } 53772 goto __5 53773 __5: 53774 i++ 53775 j = (j + 1) % TESTPCACHE_NPAGE 53776 goto __4 53777 goto __6 53778 __6: 53779 ; 53780 return uintptr(0) 53781 } 53782 53783 func testpcacheUnpin(tls *libc.TLS, pCache uintptr, pOldPage uintptr, discard int32) { 53784 var p uintptr = pCache 53785 var i int32 53786 53787 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable != 0 && 53788 uint32(100)-testpcacheGlobal.FdiscardChance <= testpcacheRandom(tls, p)%uint32(100) { 53789 discard = 1 53790 } 53791 53792 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53793 if p+32+uintptr(i)*24 == pOldPage { 53794 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 53795 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 53796 53797 if discard != 0 { 53798 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53799 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53800 53801 } 53802 return 53803 } 53804 } 53805 53806 } 53807 53808 func testpcacheRekey(tls *libc.TLS, pCache uintptr, pOldPage uintptr, oldKey uint32, newKey uint32) { 53809 var p uintptr = pCache 53810 var i int32 53811 53812 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53813 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == newKey { 53814 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53815 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53816 53817 break 53818 } 53819 } 53820 53821 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53822 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == oldKey { 53823 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = newKey 53824 return 53825 } 53826 } 53827 53828 } 53829 53830 func testpcacheTruncate(tls *libc.TLS, pCache uintptr, iLimit uint32) { 53831 var p uintptr = pCache 53832 var i uint32 53833 53834 for i = uint32(0); i < uint32(TESTPCACHE_NPAGE); i++ { 53835 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey >= iLimit { 53836 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53837 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0 { 53838 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 53839 53840 } 53841 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53842 53843 } 53844 } 53845 } 53846 53847 func testpcacheDestroy(tls *libc.TLS, pCache uintptr) { 53848 var p uintptr = pCache 53849 53850 (*testpcache)(unsafe.Pointer(p)).FiMagic = TESTPCACHE_CLEAR 53851 sqlite3.Xsqlite3_free(tls, p) 53852 testpcacheGlobal.FnInstance-- 53853 } 53854 53855 func installTestPCache(tls *libc.TLS, installFlag int32, discardChance uint32, prngSeed uint32, highStress uint32) { 53856 bp := tls.Alloc(24) 53857 defer tls.Free(24) 53858 53859 testpcacheGlobal.FdiscardChance = discardChance 53860 testpcacheGlobal.FprngSeed = prngSeed ^ prngSeed<<16 53861 testpcacheGlobal.FhighStress = highStress 53862 if installFlag != isInstalled { 53863 if installFlag != 0 { 53864 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp, uintptr(unsafe.Pointer(&defaultPcache)))) 53865 53866 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+8, uintptr(unsafe.Pointer(&testPcache)))) 53867 } else { 53868 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&defaultPcache)))) 53869 } 53870 isInstalled = installFlag 53871 } 53872 } 53873 53874 var testPcache = sqlite3_pcache_methods2{ 53875 FiVersion: 1, 53876 FpArg: 0, 53877 FxInit: 0, 53878 FxShutdown: 0, 53879 FxCreate: 0, 53880 FxCachesize: 0, 53881 FxPagecount: 0, 53882 FxFetch: 0, 53883 FxUnpin: 0, 53884 FxRekey: 0, 53885 FxTruncate: 0, 53886 FxDestroy: 0, 53887 } 53888 var defaultPcache sqlite3_pcache_methods2 53889 var isInstalled int32 = 0 53890 53891 type quota_FILE1 = struct { 53892 Ff uintptr 53893 FiOfst sqlite3_int64 53894 FpFile uintptr 53895 } 53896 53897 type quota_FILE = quota_FILE1 53898 53899 type quotaGroup1 = struct { 53900 FzPattern uintptr 53901 FiLimit sqlite3_int64 53902 FiSize sqlite3_int64 53903 FxCallback uintptr 53904 FpArg uintptr 53905 FxDestroy uintptr 53906 FpNext uintptr 53907 FppPrev uintptr 53908 FpFiles uintptr 53909 } 53910 53911 type quotaGroup = quotaGroup1 53912 type quotaConn1 = struct { 53913 Fbase sqlite3_file 53914 FpFile uintptr 53915 } 53916 53917 type quotaConn = quotaConn1 53918 type quotaFile1 = struct { 53919 FzFilename uintptr 53920 FpGroup uintptr 53921 FiSize sqlite3_int64 53922 FnRef int32 53923 FdeleteOnClose int32 53924 FpNext uintptr 53925 FppPrev uintptr 53926 } 53927 53928 type quotaFile = quotaFile1 53929 53930 var gQuota struct { 53931 FpOrigVfs uintptr 53932 FsThisVfs sqlite3_vfs 53933 FsIoMethodsV1 sqlite3_io_methods 53934 FsIoMethodsV2 sqlite3_io_methods 53935 FisInitialized int32 53936 F__ccgo_pad1 [4]byte 53937 FpMutex uintptr 53938 FpGroup uintptr 53939 } 53940 53941 func quotaEnter(tls *libc.TLS) { 53942 sqlite3.Xsqlite3_mutex_enter(tls, gQuota.FpMutex) 53943 } 53944 53945 func quotaLeave(tls *libc.TLS) { 53946 sqlite3.Xsqlite3_mutex_leave(tls, gQuota.FpMutex) 53947 } 53948 53949 func quotaGroupOpenFileCount(tls *libc.TLS, pGroup uintptr) int32 { 53950 var N int32 = 0 53951 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 53952 for pFile != 0 { 53953 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 53954 N++ 53955 } 53956 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 53957 } 53958 return N 53959 } 53960 53961 func quotaRemoveFile(tls *libc.TLS, pFile uintptr) { 53962 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53963 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 53964 *(*uintptr)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FppPrev)) = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 53965 if (*quotaFile)(unsafe.Pointer(pFile)).FpNext != 0 { 53966 (*quotaFile)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpNext)).FppPrev = (*quotaFile)(unsafe.Pointer(pFile)).FppPrev 53967 } 53968 sqlite3.Xsqlite3_free(tls, pFile) 53969 } 53970 53971 func quotaRemoveAllFiles(tls *libc.TLS, pGroup uintptr) { 53972 for (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 53973 quotaRemoveFile(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles) 53974 } 53975 } 53976 53977 func quotaGroupDeref(tls *libc.TLS, pGroup uintptr) { 53978 if (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit == int64(0) && quotaGroupOpenFileCount(tls, pGroup) == 0 { 53979 quotaRemoveAllFiles(tls, pGroup) 53980 *(*uintptr)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev)) = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 53981 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext != 0 { 53982 (*quotaGroup)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpNext)).FppPrev = (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev 53983 } 53984 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 { 53985 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 53986 } 53987 sqlite3.Xsqlite3_free(tls, pGroup) 53988 } 53989 } 53990 53991 func quotaStrglob(tls *libc.TLS, zGlob uintptr, z uintptr) int32 { 53992 var c int32 53993 var c2 int32 53994 var cx int32 53995 var invert int32 53996 var seen int32 53997 53998 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) != 0 { 53999 if c == '*' { 54000 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) == '*' || c == '?' { 54001 if c == '?' && int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 54002 return 0 54003 } 54004 } 54005 if c == 0 { 54006 return 1 54007 } else if c == '[' { 54008 for *(*int8)(unsafe.Pointer(z)) != 0 && quotaStrglob(tls, zGlob-uintptr(1), z) == 0 { 54009 z++ 54010 } 54011 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) != 0) 54012 } 54013 if c == '/' { 54014 cx = '\\' 54015 } else { 54016 cx = c 54017 } 54018 for libc.AssignInt32(&c2, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) != 0 { 54019 for c2 != c && c2 != cx { 54020 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 54021 if c2 == 0 { 54022 return 0 54023 } 54024 } 54025 if quotaStrglob(tls, zGlob, z) != 0 { 54026 return 1 54027 } 54028 } 54029 return 0 54030 } else if c == '?' { 54031 if int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 54032 return 0 54033 } 54034 } else if c == '[' { 54035 var prior_c int32 = 0 54036 seen = 0 54037 invert = 0 54038 c = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 54039 if c == 0 { 54040 return 0 54041 } 54042 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54043 if c2 == '^' { 54044 invert = 1 54045 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54046 } 54047 if c2 == ']' { 54048 if c == ']' { 54049 seen = 1 54050 } 54051 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54052 } 54053 for c2 != 0 && c2 != ']' { 54054 if c2 == '-' && int32(*(*int8)(unsafe.Pointer(zGlob))) != ']' && int32(*(*int8)(unsafe.Pointer(zGlob))) != 0 && prior_c > 0 { 54055 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54056 if c >= prior_c && c <= c2 { 54057 seen = 1 54058 } 54059 prior_c = 0 54060 } else { 54061 if c == c2 { 54062 seen = 1 54063 } 54064 prior_c = c2 54065 } 54066 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54067 } 54068 if c2 == 0 || seen^invert == 0 { 54069 return 0 54070 } 54071 } else if c == '/' { 54072 if int32(*(*int8)(unsafe.Pointer(z))) != '/' && int32(*(*int8)(unsafe.Pointer(z))) != '\\' { 54073 return 0 54074 } 54075 z++ 54076 } else { 54077 if c != int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) { 54078 return 0 54079 } 54080 } 54081 } 54082 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) == 0) 54083 } 54084 54085 func quotaGroupFind(tls *libc.TLS, zFilename uintptr) uintptr { 54086 var p uintptr 54087 for p = gQuota.FpGroup; p != 0 && quotaStrglob(tls, (*quotaGroup)(unsafe.Pointer(p)).FzPattern, zFilename) == 0; p = (*quotaGroup)(unsafe.Pointer(p)).FpNext { 54088 } 54089 return p 54090 } 54091 54092 func quotaSubOpen(tls *libc.TLS, pConn uintptr) uintptr { 54093 var p uintptr = pConn 54094 return p + 1*16 54095 } 54096 54097 func quotaFindFile(tls *libc.TLS, pGroup uintptr, zName uintptr, createFlag int32) uintptr { 54098 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54099 for pFile != 0 && libc.Xstrcmp(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName) != 0 { 54100 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54101 } 54102 if pFile == uintptr(0) && createFlag != 0 { 54103 var nName int32 = int32(libc.Xstrlen(tls, zName) & uint64(0x3fffffff)) 54104 pFile = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaFile{}))+uint64(nName)+uint64(1))) 54105 if pFile != 0 { 54106 libc.Xmemset(tls, pFile, 0, uint64(unsafe.Sizeof(quotaFile{}))) 54107 (*quotaFile)(unsafe.Pointer(pFile)).FzFilename = pFile + 1*48 54108 libc.Xmemcpy(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName, uint64(nName+1)) 54109 (*quotaFile)(unsafe.Pointer(pFile)).FpNext = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54110 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 54111 (*quotaFile)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles)).FppPrev = pFile + 32 54112 } 54113 (*quotaFile)(unsafe.Pointer(pFile)).FppPrev = pGroup + 64 54114 (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles = pFile 54115 (*quotaFile)(unsafe.Pointer(pFile)).FpGroup = pGroup 54116 } 54117 } 54118 return pFile 54119 } 54120 54121 func quota_utf8_to_mbcs(tls *libc.TLS, zUtf8 uintptr) uintptr { 54122 return zUtf8 54123 } 54124 54125 func quota_mbcs_free(tls *libc.TLS, zOld uintptr) { 54126 } 54127 54128 func quotaOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 54129 var rc int32 54130 var pQuotaOpen uintptr 54131 var pFile uintptr 54132 var pGroup uintptr 54133 var pSubOpen uintptr 54134 var pOrigVfs uintptr = gQuota.FpOrigVfs 54135 54136 if flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0 { 54137 return (*struct { 54138 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54139 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 54140 } 54141 54142 quotaEnter(tls) 54143 pGroup = quotaGroupFind(tls, zName) 54144 if pGroup == uintptr(0) { 54145 rc = (*struct { 54146 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54147 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 54148 } else { 54149 pQuotaOpen = pConn 54150 pSubOpen = quotaSubOpen(tls, pConn) 54151 rc = (*struct { 54152 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54153 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pSubOpen, flags, pOutFlags) 54154 if rc == SQLITE_OK { 54155 pFile = quotaFindFile(tls, pGroup, zName, 1) 54156 if pFile == uintptr(0) { 54157 quotaLeave(tls) 54158 (*struct { 54159 f func(*libc.TLS, uintptr) int32 54160 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 54161 return SQLITE_NOMEM 54162 } 54163 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = libc.Bool32(flags&SQLITE_OPEN_DELETEONCLOSE != 0) 54164 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 54165 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).FpFile = pFile 54166 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 54167 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 176 54168 } else { 54169 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 328 54170 } 54171 } 54172 } 54173 quotaLeave(tls) 54174 return rc 54175 } 54176 54177 func quotaDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 54178 var rc int32 54179 var pFile uintptr 54180 var pGroup uintptr 54181 var pOrigVfs uintptr = gQuota.FpOrigVfs 54182 54183 rc = (*struct { 54184 f func(*libc.TLS, uintptr, uintptr, int32) int32 54185 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 54186 54187 if rc == SQLITE_OK { 54188 quotaEnter(tls) 54189 pGroup = quotaGroupFind(tls, zName) 54190 if pGroup != 0 { 54191 pFile = quotaFindFile(tls, pGroup, zName, 0) 54192 if pFile != 0 { 54193 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54194 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 54195 } else { 54196 quotaRemoveFile(tls, pFile) 54197 quotaGroupDeref(tls, pGroup) 54198 } 54199 } 54200 } 54201 quotaLeave(tls) 54202 } 54203 return rc 54204 } 54205 54206 func quotaClose(tls *libc.TLS, pConn uintptr) int32 { 54207 var p uintptr = pConn 54208 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54209 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54210 var rc int32 54211 rc = (*struct { 54212 f func(*libc.TLS, uintptr) int32 54213 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 54214 quotaEnter(tls) 54215 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 54216 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 54217 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54218 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 54219 (*struct { 54220 f func(*libc.TLS, uintptr, uintptr, int32) int32 54221 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54222 quotaRemoveFile(tls, pFile) 54223 } 54224 quotaGroupDeref(tls, pGroup) 54225 } 54226 quotaLeave(tls) 54227 return rc 54228 } 54229 54230 func quotaRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 54231 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54232 return (*struct { 54233 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54234 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 54235 } 54236 54237 func quotaWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 54238 var p uintptr = pConn 54239 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54240 var iEnd sqlite3_int64 = iOfst + sqlite3_int64(iAmt) 54241 var pGroup uintptr 54242 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54243 var szNew sqlite3_int64 54244 54245 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 54246 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54247 quotaEnter(tls) 54248 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54249 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54250 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 54251 (*struct { 54252 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54253 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 54254 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54255 } 54256 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54257 quotaLeave(tls) 54258 return SQLITE_FULL 54259 } 54260 } 54261 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 54262 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 54263 quotaLeave(tls) 54264 } 54265 return (*struct { 54266 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54267 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 54268 } 54269 54270 func quotaTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 54271 var p uintptr = pConn 54272 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54273 var rc int32 = (*struct { 54274 f func(*libc.TLS, uintptr, sqlite3_int64) int32 54275 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 54276 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54277 var pGroup uintptr 54278 if rc == SQLITE_OK { 54279 quotaEnter(tls) 54280 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54281 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54282 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = size 54283 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += size 54284 quotaLeave(tls) 54285 } 54286 return rc 54287 } 54288 54289 func quotaSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 54290 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54291 return (*struct { 54292 f func(*libc.TLS, uintptr, int32) int32 54293 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 54294 } 54295 54296 func quotaFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 54297 bp := tls.Alloc(8) 54298 defer tls.Free(8) 54299 54300 var p uintptr = pConn 54301 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54302 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54303 var pGroup uintptr 54304 54305 var rc int32 54306 54307 rc = (*struct { 54308 f func(*libc.TLS, uintptr, uintptr) int32 54309 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp) 54310 if rc == SQLITE_OK { 54311 quotaEnter(tls) 54312 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54313 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54314 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = *(*sqlite3_int64)(unsafe.Pointer(bp)) 54315 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += *(*sqlite3_int64)(unsafe.Pointer(bp)) 54316 quotaLeave(tls) 54317 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = *(*sqlite3_int64)(unsafe.Pointer(bp)) 54318 } 54319 return rc 54320 } 54321 54322 func quotaLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 54323 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54324 return (*struct { 54325 f func(*libc.TLS, uintptr, int32) int32 54326 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 54327 } 54328 54329 func quotaUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 54330 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54331 return (*struct { 54332 f func(*libc.TLS, uintptr, int32) int32 54333 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 54334 } 54335 54336 func quotaCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 54337 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54338 return (*struct { 54339 f func(*libc.TLS, uintptr, uintptr) int32 54340 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 54341 } 54342 54343 func quotaFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 54344 bp := tls.Alloc(8) 54345 defer tls.Free(8) 54346 54347 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54348 var rc int32 = (*struct { 54349 f func(*libc.TLS, uintptr, int32, uintptr) int32 54350 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 54351 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 54352 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35913, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 54353 } 54354 return rc 54355 } 54356 54357 func quotaSectorSize(tls *libc.TLS, pConn uintptr) int32 { 54358 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54359 return (*struct { 54360 f func(*libc.TLS, uintptr) int32 54361 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 54362 } 54363 54364 func quotaDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 54365 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54366 return (*struct { 54367 f func(*libc.TLS, uintptr) int32 54368 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 54369 } 54370 54371 func quotaShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 54372 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54373 return (*struct { 54374 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 54375 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 54376 } 54377 54378 func quotaShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 54379 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54380 return (*struct { 54381 f func(*libc.TLS, uintptr, int32, int32, int32) int32 54382 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 54383 } 54384 54385 func quotaShmBarrier(tls *libc.TLS, pConn uintptr) { 54386 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54387 (*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) 54388 } 54389 54390 func quotaShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 54391 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54392 return (*struct { 54393 f func(*libc.TLS, uintptr, int32) int32 54394 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 54395 } 54396 54397 func sqlite3_quota_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 54398 var pOrigVfs uintptr 54399 if gQuota.FisInitialized != 0 { 54400 return SQLITE_MISUSE 54401 } 54402 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 54403 if pOrigVfs == uintptr(0) { 54404 return SQLITE_ERROR 54405 } 54406 54407 gQuota.FpMutex = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 54408 if !(int32(gQuota.FpMutex) != 0) { 54409 return SQLITE_NOMEM 54410 } 54411 gQuota.FisInitialized = 1 54412 gQuota.FpOrigVfs = pOrigVfs 54413 gQuota.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 54414 gQuota.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 54415 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54416 }{quotaOpen})) 54417 gQuota.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 54418 f func(*libc.TLS, uintptr, uintptr, int32) int32 54419 }{quotaDelete})) 54420 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gQuota)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(quotaConn{}))) 54421 gQuota.FsThisVfs.FzName = ts + 35922 54422 gQuota.FsIoMethodsV1.FiVersion = 1 54423 gQuota.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 54424 f func(*libc.TLS, uintptr) int32 54425 }{quotaClose})) 54426 gQuota.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 54427 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54428 }{quotaRead})) 54429 gQuota.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 54430 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54431 }{quotaWrite})) 54432 gQuota.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 54433 f func(*libc.TLS, uintptr, sqlite3_int64) int32 54434 }{quotaTruncate})) 54435 gQuota.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 54436 f func(*libc.TLS, uintptr, int32) int32 54437 }{quotaSync})) 54438 gQuota.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 54439 f func(*libc.TLS, uintptr, uintptr) int32 54440 }{quotaFileSize})) 54441 gQuota.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 54442 f func(*libc.TLS, uintptr, int32) int32 54443 }{quotaLock})) 54444 gQuota.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 54445 f func(*libc.TLS, uintptr, int32) int32 54446 }{quotaUnlock})) 54447 gQuota.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 54448 f func(*libc.TLS, uintptr, uintptr) int32 54449 }{quotaCheckReservedLock})) 54450 gQuota.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 54451 f func(*libc.TLS, uintptr, int32, uintptr) int32 54452 }{quotaFileControl})) 54453 gQuota.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 54454 f func(*libc.TLS, uintptr) int32 54455 }{quotaSectorSize})) 54456 gQuota.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 54457 f func(*libc.TLS, uintptr) int32 54458 }{quotaDeviceCharacteristics})) 54459 gQuota.FsIoMethodsV2 = gQuota.FsIoMethodsV1 54460 gQuota.FsIoMethodsV2.FiVersion = 2 54461 gQuota.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 54462 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 54463 }{quotaShmMap})) 54464 gQuota.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 54465 f func(*libc.TLS, uintptr, int32, int32, int32) int32 54466 }{quotaShmLock})) 54467 gQuota.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{quotaShmBarrier})) 54468 gQuota.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 54469 f func(*libc.TLS, uintptr, int32) int32 54470 }{quotaShmUnmap})) 54471 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gQuota))+8, makeDefault) 54472 return SQLITE_OK 54473 } 54474 54475 func sqlite3_quota_shutdown(tls *libc.TLS) int32 { 54476 var pGroup uintptr 54477 if gQuota.FisInitialized == 0 { 54478 return SQLITE_MISUSE 54479 } 54480 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 54481 if quotaGroupOpenFileCount(tls, pGroup) > 0 { 54482 return SQLITE_MISUSE 54483 } 54484 } 54485 for gQuota.FpGroup != 0 { 54486 pGroup = gQuota.FpGroup 54487 gQuota.FpGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54488 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = int64(0) 54489 54490 quotaGroupDeref(tls, pGroup) 54491 } 54492 gQuota.FisInitialized = 0 54493 sqlite3.Xsqlite3_mutex_free(tls, gQuota.FpMutex) 54494 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gQuota))+8) 54495 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gQuota)), 0, uint64(unsafe.Sizeof(gQuota))) 54496 return SQLITE_OK 54497 } 54498 54499 func sqlite3_quota_set(tls *libc.TLS, zPattern uintptr, iLimit sqlite3_int64, xCallback uintptr, pArg uintptr, xDestroy uintptr) int32 { 54500 var pGroup uintptr 54501 quotaEnter(tls) 54502 pGroup = gQuota.FpGroup 54503 for pGroup != 0 && libc.Xstrcmp(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern) != 0 { 54504 pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54505 } 54506 if pGroup == uintptr(0) { 54507 var nPattern int32 = int32(libc.Xstrlen(tls, zPattern) & uint64(0x3fffffff)) 54508 if iLimit <= int64(0) { 54509 quotaLeave(tls) 54510 return SQLITE_OK 54511 } 54512 pGroup = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaGroup{}))+uint64(nPattern)+uint64(1))) 54513 if pGroup == uintptr(0) { 54514 quotaLeave(tls) 54515 return SQLITE_NOMEM 54516 } 54517 libc.Xmemset(tls, pGroup, 0, uint64(unsafe.Sizeof(quotaGroup{}))) 54518 (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern = pGroup + 1*72 54519 libc.Xmemcpy(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern, uint64(nPattern+1)) 54520 if gQuota.FpGroup != 0 { 54521 (*quotaGroup)(unsafe.Pointer(gQuota.FpGroup)).FppPrev = pGroup + 48 54522 } 54523 (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext = gQuota.FpGroup 54524 (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev = uintptr(unsafe.Pointer(&gQuota)) + 496 54525 gQuota.FpGroup = pGroup 54526 } 54527 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = iLimit 54528 (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback = xCallback 54529 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 && (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg != pArg { 54530 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54531 } 54532 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg = pArg 54533 (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy = xDestroy 54534 quotaGroupDeref(tls, pGroup) 54535 quotaLeave(tls) 54536 return SQLITE_OK 54537 } 54538 54539 func sqlite3_quota_file(tls *libc.TLS, zFilename uintptr) int32 { 54540 bp := tls.Alloc(16) 54541 defer tls.Free(16) 54542 54543 var zFull uintptr = uintptr(0) 54544 var fd uintptr 54545 var rc int32 54546 *(*int32)(unsafe.Pointer(bp)) = 0 54547 54548 var nAlloc int32 = gQuota.FsThisVfs.FszOsFile + gQuota.FsThisVfs.FmxPathname + 2 54549 54550 fd = sqlite3.Xsqlite3_malloc(tls, nAlloc) 54551 if fd == uintptr(0) { 54552 rc = SQLITE_NOMEM 54553 } else { 54554 zFull = fd + uintptr(gQuota.FsThisVfs.FszOsFile) 54555 rc = (*struct { 54556 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54557 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54558 gQuota.FsThisVfs.FmxPathname+1, zFull) 54559 } 54560 54561 if rc == SQLITE_OK { 54562 *(*int8)(unsafe.Pointer(zFull + uintptr(libc.Xstrlen(tls, zFull)+uint64(1)))) = int8(0) 54563 rc = quotaOpen(tls, uintptr(unsafe.Pointer(&gQuota))+8, zFull, fd, 54564 SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_DB, bp) 54565 if rc == SQLITE_OK { 54566 (*struct { 54567 f func(*libc.TLS, uintptr, uintptr) int32 54568 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxFileSize})).f(tls, fd, bp+8) 54569 (*struct { 54570 f func(*libc.TLS, uintptr) int32 54571 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxClose})).f(tls, fd) 54572 } else if rc == SQLITE_CANTOPEN { 54573 var pGroup uintptr 54574 var pFile uintptr 54575 quotaEnter(tls) 54576 pGroup = quotaGroupFind(tls, zFull) 54577 if pGroup != 0 { 54578 pFile = quotaFindFile(tls, pGroup, zFull, 0) 54579 if pFile != 0 { 54580 quotaRemoveFile(tls, pFile) 54581 } 54582 } 54583 quotaLeave(tls) 54584 } 54585 } 54586 54587 sqlite3.Xsqlite3_free(tls, fd) 54588 return rc 54589 } 54590 54591 func sqlite3_quota_fopen(tls *libc.TLS, zFilename uintptr, zMode uintptr) uintptr { 54592 var p uintptr 54593 var zFull uintptr 54594 var zFullTranslated uintptr 54595 var rc int32 54596 var pGroup uintptr 54597 var pFile uintptr 54598 p = uintptr(0) 54599 zFull = uintptr(0) 54600 zFullTranslated = uintptr(0) 54601 54602 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 54603 if !(zFull == uintptr(0)) { 54604 goto __1 54605 } 54606 return uintptr(0) 54607 __1: 54608 ; 54609 rc = (*struct { 54610 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54611 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54612 gQuota.FsThisVfs.FmxPathname+1, zFull) 54613 if !(rc != 0) { 54614 goto __2 54615 } 54616 goto quota_fopen_error 54617 __2: 54618 ; 54619 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(quota_FILE{}))) 54620 if !(p == uintptr(0)) { 54621 goto __3 54622 } 54623 goto quota_fopen_error 54624 __3: 54625 ; 54626 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(quota_FILE{}))) 54627 zFullTranslated = quota_utf8_to_mbcs(tls, zFull) 54628 if !(zFullTranslated == uintptr(0)) { 54629 goto __4 54630 } 54631 goto quota_fopen_error 54632 __4: 54633 ; 54634 (*quota_FILE)(unsafe.Pointer(p)).Ff = libc.Xfopen(tls, zFullTranslated, zMode) 54635 if !((*quota_FILE)(unsafe.Pointer(p)).Ff == uintptr(0)) { 54636 goto __5 54637 } 54638 goto quota_fopen_error 54639 __5: 54640 ; 54641 quotaEnter(tls) 54642 pGroup = quotaGroupFind(tls, zFull) 54643 if !(pGroup != 0) { 54644 goto __6 54645 } 54646 pFile = quotaFindFile(tls, pGroup, zFull, 1) 54647 if !(pFile == uintptr(0)) { 54648 goto __7 54649 } 54650 quotaLeave(tls) 54651 goto quota_fopen_error 54652 __7: 54653 ; 54654 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 54655 (*quota_FILE)(unsafe.Pointer(p)).FpFile = pFile 54656 __6: 54657 ; 54658 quotaLeave(tls) 54659 sqlite3.Xsqlite3_free(tls, zFull) 54660 return p 54661 54662 quota_fopen_error: 54663 quota_mbcs_free(tls, zFullTranslated) 54664 sqlite3.Xsqlite3_free(tls, zFull) 54665 if !(p != 0 && (*quota_FILE)(unsafe.Pointer(p)).Ff != 0) { 54666 goto __8 54667 } 54668 libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54669 __8: 54670 ; 54671 sqlite3.Xsqlite3_free(tls, p) 54672 return uintptr(0) 54673 } 54674 54675 func sqlite3_quota_fread(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 54676 return libc.Xfread(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54677 } 54678 54679 func sqlite3_quota_fwrite(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 54680 var iOfst sqlite3_int64 54681 var iEnd sqlite3_int64 54682 var szNew sqlite3_int64 54683 var pFile uintptr 54684 var rc size_t 54685 54686 iOfst = libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54687 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 54688 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54689 if pFile != 0 && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 54690 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54691 quotaEnter(tls) 54692 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54693 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54694 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 54695 (*struct { 54696 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54697 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 54698 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54699 } 54700 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54701 iEnd = (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit - (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize + (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54702 nmemb = uint64(iEnd-iOfst) / size 54703 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 54704 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54705 } 54706 } 54707 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 54708 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 54709 quotaLeave(tls) 54710 } else { 54711 pFile = uintptr(0) 54712 } 54713 rc = libc.Xfwrite(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54714 54715 if rc < nmemb && pFile != 0 { 54716 var nWritten size_t = rc 54717 var iNewEnd sqlite3_int64 = sqlite3_int64(uint64(iOfst) + size*nWritten) 54718 if iNewEnd < iEnd { 54719 iNewEnd = iEnd 54720 } 54721 quotaEnter(tls) 54722 *(*sqlite3_int64)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpGroup + 16)) += iNewEnd - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54723 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iNewEnd 54724 quotaLeave(tls) 54725 } 54726 return rc 54727 } 54728 54729 func sqlite3_quota_fclose(tls *libc.TLS, p uintptr) int32 { 54730 var rc int32 54731 var pFile uintptr 54732 rc = libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54733 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54734 if pFile != 0 { 54735 quotaEnter(tls) 54736 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 54737 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 54738 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54739 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 54740 (*struct { 54741 f func(*libc.TLS, uintptr, uintptr, int32) int32 54742 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54743 quotaRemoveFile(tls, pFile) 54744 } 54745 quotaGroupDeref(tls, pGroup) 54746 } 54747 quotaLeave(tls) 54748 } 54749 sqlite3.Xsqlite3_free(tls, p) 54750 return rc 54751 } 54752 54753 func sqlite3_quota_fflush(tls *libc.TLS, p uintptr, doFsync int32) int32 { 54754 var rc int32 54755 rc = libc.Xfflush(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54756 if rc == 0 && doFsync != 0 { 54757 rc = libc.Xfsync(tls, func() int32 { 54758 if !(libc.X__isthreaded != 0) { 54759 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54760 } 54761 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54762 }()) 54763 } 54764 return libc.Bool32(rc != 0) 54765 } 54766 54767 func sqlite3_quota_fseek(tls *libc.TLS, p uintptr, offset int64, whence int32) int32 { 54768 return libc.Xfseek(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff, offset, whence) 54769 } 54770 54771 func sqlite3_quota_rewind(tls *libc.TLS, p uintptr) { 54772 libc.Xrewind(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54773 } 54774 54775 func sqlite3_quota_ftell(tls *libc.TLS, p uintptr) int64 { 54776 return libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54777 } 54778 54779 func sqlite3_quota_ferror(tls *libc.TLS, p uintptr) int32 { 54780 return func() int32 { 54781 if !(libc.X__isthreaded != 0) { 54782 return libc.Bool32(int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_flags)&0x0040 != 0) 54783 } 54784 return libc.Xferror(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54785 }() 54786 } 54787 54788 func sqlite3_quota_ftruncate(tls *libc.TLS, p uintptr, szNew sqlite3_int64) int32 { 54789 var pFile uintptr = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54790 var rc int32 54791 if libc.AssignUintptr(&pFile, (*quota_FILE)(unsafe.Pointer(p)).FpFile) != uintptr(0) && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 54792 var pGroup uintptr 54793 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 54794 return -1 54795 } 54796 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54797 quotaEnter(tls) 54798 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54799 quotaLeave(tls) 54800 } 54801 rc = libc.Xftruncate(tls, func() int32 { 54802 if !(libc.X__isthreaded != 0) { 54803 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54804 } 54805 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54806 }(), szNew) 54807 if pFile != 0 && rc == 0 { 54808 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54809 quotaEnter(tls) 54810 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54811 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = szNew 54812 quotaLeave(tls) 54813 } 54814 return rc 54815 } 54816 54817 func sqlite3_quota_file_mtime(tls *libc.TLS, p uintptr, pTime uintptr) int32 { 54818 bp := tls.Alloc(224) 54819 defer tls.Free(224) 54820 54821 var rc int32 54822 54823 rc = libc.Xfstat(tls, func() int32 { 54824 if !(libc.X__isthreaded != 0) { 54825 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54826 } 54827 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54828 }(), bp) 54829 if rc == 0 { 54830 *(*time_t)(unsafe.Pointer(pTime)) = (*stat)(unsafe.Pointer(bp)).Fst_mtim.Ftv_sec 54831 } 54832 return rc 54833 } 54834 54835 func sqlite3_quota_file_truesize(tls *libc.TLS, p uintptr) sqlite3_int64 { 54836 bp := tls.Alloc(224) 54837 defer tls.Free(224) 54838 54839 var rc int32 54840 54841 rc = libc.Xfstat(tls, func() int32 { 54842 if !(libc.X__isthreaded != 0) { 54843 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54844 } 54845 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54846 }(), bp) 54847 if rc == 0 { 54848 return (*stat)(unsafe.Pointer(bp)).Fst_size 54849 } 54850 return int64(-1) 54851 } 54852 54853 func sqlite3_quota_file_size(tls *libc.TLS, p uintptr) sqlite3_int64 { 54854 if (*quota_FILE)(unsafe.Pointer(p)).FpFile != 0 { 54855 return (*quotaFile)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).FpFile)).FiSize 54856 } 54857 return int64(-1) 54858 } 54859 54860 func sqlite3_quota_file_available(tls *libc.TLS, p uintptr) int64 { 54861 var f uintptr = (*quota_FILE)(unsafe.Pointer(p)).Ff 54862 var pos1 int64 54863 var pos2 int64 54864 var rc int32 54865 pos1 = libc.Xftell(tls, f) 54866 if pos1 < int64(0) { 54867 return int64(-1) 54868 } 54869 rc = libc.Xfseek(tls, f, int64(0), SEEK_END) 54870 if rc != 0 { 54871 return int64(-1) 54872 } 54873 pos2 = libc.Xftell(tls, f) 54874 if pos2 < int64(0) { 54875 return int64(-1) 54876 } 54877 rc = libc.Xfseek(tls, f, pos1, SEEK_SET) 54878 if rc != 0 { 54879 return int64(-1) 54880 } 54881 return pos2 - pos1 54882 } 54883 54884 func sqlite3_quota_remove(tls *libc.TLS, zFilename uintptr) int32 { 54885 var zFull uintptr 54886 var nFull size_t 54887 var rc int32 54888 var pGroup uintptr 54889 var pFile uintptr 54890 var pNextFile uintptr 54891 var diff int32 54892 var c int8 54893 54894 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 54895 if zFull == uintptr(0) { 54896 return SQLITE_NOMEM 54897 } 54898 rc = (*struct { 54899 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54900 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54901 gQuota.FsThisVfs.FmxPathname+1, zFull) 54902 if rc != 0 { 54903 sqlite3.Xsqlite3_free(tls, zFull) 54904 return rc 54905 } 54906 54907 nFull = libc.Xstrlen(tls, zFull) 54908 if nFull > uint64(0) && (int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '/' || int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '\\') { 54909 nFull-- 54910 *(*int8)(unsafe.Pointer(zFull + uintptr(nFull))) = int8(0) 54911 } 54912 54913 quotaEnter(tls) 54914 pGroup = quotaGroupFind(tls, zFull) 54915 if pGroup != 0 { 54916 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0 && rc == SQLITE_OK; pFile = pNextFile { 54917 pNextFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54918 diff = libc.Xstrncmp(tls, zFull, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, nFull) 54919 if diff == 0 && (int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FzFilename + uintptr(nFull))))) == 0 || int32(c) == '/' || int32(c) == '\\') { 54920 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54921 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 54922 } else { 54923 rc = (*struct { 54924 f func(*libc.TLS, uintptr, uintptr, int32) int32 54925 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54926 quotaRemoveFile(tls, pFile) 54927 quotaGroupDeref(tls, pGroup) 54928 } 54929 } 54930 } 54931 } 54932 quotaLeave(tls) 54933 sqlite3.Xsqlite3_free(tls, zFull) 54934 return rc 54935 } 54936 54937 type TclQuotaCallback1 = struct { 54938 Finterp uintptr 54939 FpScript uintptr 54940 } 54941 54942 type TclQuotaCallback = TclQuotaCallback1 54943 54944 func tclQuotaCallback(tls *libc.TLS, zFilename uintptr, piLimit uintptr, iSize sqlite3_int64, pArg uintptr) { 54945 bp := tls.Alloc(16) 54946 defer tls.Free(16) 54947 54948 var p uintptr 54949 var pEval uintptr 54950 var pVarname uintptr 54951 54952 var rc int32 54953 54954 p = pArg 54955 if p == uintptr(0) { 54956 return 54957 } 54958 54959 pVarname = tcl.XTcl_NewStringObj(tls, ts+35928, -1) 54960 (*Tcl_Obj)(unsafe.Pointer(pVarname)).FrefCount++ 54961 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(uint32(0))), bp) 54962 tcl.XTcl_AppendObjToObj(tls, pVarname, tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer(bp))&uint32(0x7FFFFFFF)))) 54963 tcl.XTcl_ObjSetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(piLimit))), 0) 54964 54965 pEval = tcl.XTcl_DuplicateObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript) 54966 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 54967 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zFilename, -1)) 54968 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pVarname) 54969 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewWideIntObj(tls, iSize)) 54970 rc = tcl.XTcl_EvalObjEx(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 54971 54972 if rc == TCL_OK { 54973 var pLimit uintptr = tcl.XTcl_ObjGetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), 0) 54974 rc = tcl.XTcl_GetWideIntFromObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pLimit, bp+8) 54975 *(*sqlite3_int64)(unsafe.Pointer(piLimit)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) 54976 tcl.XTcl_UnsetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetString(tls, pVarname), uintptr(0), 0) 54977 } 54978 54979 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 54980 var _objPtr uintptr = pEval 54981 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 54982 tcl.XTclFreeObj(tls, _objPtr) 54983 } 54984 } 54985 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 54986 var _objPtr uintptr = pVarname 54987 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 54988 tcl.XTclFreeObj(tls, _objPtr) 54989 } 54990 } 54991 if rc != TCL_OK { 54992 tcl.XTcl_BackgroundError(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp) 54993 } 54994 } 54995 54996 func tclCallbackDestructor(tls *libc.TLS, pObj uintptr) { 54997 var p uintptr = pObj 54998 if p != 0 { 54999 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 55000 var _objPtr uintptr = (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript 55001 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55002 tcl.XTclFreeObj(tls, _objPtr) 55003 } 55004 } 55005 sqlite3.Xsqlite3_free(tls, p) 55006 } 55007 } 55008 55009 func test_quota_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55010 bp := tls.Alloc(4) 55011 defer tls.Free(4) 55012 55013 var zName uintptr 55014 55015 var rc int32 55016 55017 if objc != 3 { 55018 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 55019 return TCL_ERROR 55020 } 55021 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55022 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55023 return TCL_ERROR 55024 } 55025 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 55026 zName = uintptr(0) 55027 } 55028 55029 rc = sqlite3_quota_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 55030 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55031 55032 return TCL_OK 55033 } 55034 55035 func test_quota_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55036 var rc int32 55037 55038 if objc != 1 { 55039 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 55040 return TCL_ERROR 55041 } 55042 55043 rc = sqlite3_quota_shutdown(tls) 55044 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55045 55046 return TCL_OK 55047 } 55048 55049 func test_quota_set(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55050 bp := tls.Alloc(12) 55051 defer tls.Free(12) 55052 55053 var zPattern uintptr 55054 55055 var pScript uintptr 55056 var rc int32 55057 var p uintptr 55058 55059 var xDestroy uintptr 55060 var xCallback uintptr 55061 55062 if objc != 4 { 55063 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35939) 55064 return TCL_ERROR 55065 } 55066 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55067 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55068 return TCL_ERROR 55069 } 55070 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 55071 tcl.XTcl_GetStringFromObj(tls, pScript, bp+8) 55072 55073 if *(*int32)(unsafe.Pointer(bp + 8)) > 0 { 55074 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TclQuotaCallback{}))) 55075 if !(p != 0) { 55076 tcl.XTcl_SetResult(tls, interp, ts+32746, uintptr(0)) 55077 return TCL_OK 55078 } 55079 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TclQuotaCallback{}))) 55080 (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp = interp 55081 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 55082 (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript = pScript 55083 xDestroy = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tclCallbackDestructor})) 55084 xCallback = *(*uintptr)(unsafe.Pointer(&struct { 55085 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 55086 }{tclQuotaCallback})) 55087 } else { 55088 p = uintptr(0) 55089 xDestroy = uintptr(0) 55090 xCallback = uintptr(0) 55091 } 55092 55093 rc = sqlite3_quota_set(tls, zPattern, *(*Tcl_WideInt)(unsafe.Pointer(bp)), xCallback, p, xDestroy) 55094 55095 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55096 return TCL_OK 55097 } 55098 55099 func test_quota_file(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55100 var zFilename uintptr 55101 var rc int32 55102 55103 if objc != 2 { 55104 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 55105 return TCL_ERROR 55106 } 55107 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55108 55109 rc = sqlite3_quota_file(tls, zFilename) 55110 55111 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55112 return TCL_OK 55113 } 55114 55115 func test_quota_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55116 bp := tls.Alloc(1008) 55117 defer tls.Free(1008) 55118 55119 var pResult uintptr 55120 var pGroupTerm uintptr 55121 var pFileTerm uintptr 55122 var pGroup uintptr 55123 var pFile uintptr 55124 55125 pResult = tcl.XTcl_NewObj(tls) 55126 quotaEnter(tls) 55127 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 55128 pGroupTerm = tcl.XTcl_NewObj(tls) 55129 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55130 tcl.XTcl_NewStringObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, -1)) 55131 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55132 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit)) 55133 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55134 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize)) 55135 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0; pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext { 55136 var i int32 55137 55138 pFileTerm = tcl.XTcl_NewObj(tls) 55139 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+8, ts, libc.VaList(bp, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename)) 55140 for i = 0; *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) != 0; i++ { 55141 if int32(*(*int8)(unsafe.Pointer(bp + 8 + uintptr(i)))) == '\\' { 55142 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8('/') 55143 } 55144 } 55145 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55146 tcl.XTcl_NewStringObj(tls, bp+8, -1)) 55147 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55148 tcl.XTcl_NewWideIntObj(tls, (*quotaFile)(unsafe.Pointer(pFile)).FiSize)) 55149 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55150 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FnRef))) 55151 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55152 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose))) 55153 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, pFileTerm) 55154 } 55155 tcl.XTcl_ListObjAppendElement(tls, interp, pResult, pGroupTerm) 55156 } 55157 quotaLeave(tls) 55158 tcl.XTcl_SetObjResult(tls, interp, pResult) 55159 return TCL_OK 55160 } 55161 55162 func test_quota_fopen(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55163 bp := tls.Alloc(58) 55164 defer tls.Free(58) 55165 55166 var zFilename uintptr 55167 var zMode uintptr 55168 var p uintptr 55169 55170 if objc != 3 { 55171 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35960) 55172 return TCL_ERROR 55173 } 55174 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55175 zMode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 55176 p = sqlite3_quota_fopen(tls, zFilename, zMode) 55177 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+8, ts+9889, libc.VaList(bp, p)) 55178 tcl.XTcl_SetResult(tls, interp, bp+8, uintptr(1)) 55179 return TCL_OK 55180 } 55181 55182 func test_quota_fread(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55183 bp := tls.Alloc(8) 55184 defer tls.Free(8) 55185 55186 var p uintptr 55187 var zBuf uintptr 55188 55189 var got size_t 55190 55191 if objc != 4 { 55192 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35974) 55193 return TCL_ERROR 55194 } 55195 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55196 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55197 return TCL_ERROR 55198 } 55199 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 55200 return TCL_ERROR 55201 } 55202 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp))**(*int32)(unsafe.Pointer(bp + 4))+1) 55203 if zBuf == uintptr(0) { 55204 tcl.XTcl_SetResult(tls, interp, ts+2069, uintptr(0)) 55205 return TCL_ERROR 55206 } 55207 got = sqlite3_quota_fread(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 55208 *(*int8)(unsafe.Pointer(zBuf + uintptr(got*size_t(*(*int32)(unsafe.Pointer(bp)))))) = int8(0) 55209 tcl.XTcl_SetResult(tls, interp, zBuf, uintptr(1)) 55210 sqlite3.Xsqlite3_free(tls, zBuf) 55211 return TCL_OK 55212 } 55213 55214 func test_quota_fwrite(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55215 bp := tls.Alloc(8) 55216 defer tls.Free(8) 55217 55218 var p uintptr 55219 var zBuf uintptr 55220 55221 var got size_t 55222 55223 if objc != 5 { 55224 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35992) 55225 return TCL_ERROR 55226 } 55227 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55228 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55229 return TCL_ERROR 55230 } 55231 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 55232 return TCL_ERROR 55233 } 55234 zBuf = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 55235 got = sqlite3_quota_fwrite(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 55236 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(got))) 55237 return TCL_OK 55238 } 55239 55240 func test_quota_fclose(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55241 var p uintptr 55242 var rc int32 55243 55244 if objc != 2 { 55245 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55246 return TCL_ERROR 55247 } 55248 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55249 rc = sqlite3_quota_fclose(tls, p) 55250 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55251 return TCL_OK 55252 } 55253 55254 func test_quota_fflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55255 bp := tls.Alloc(4) 55256 defer tls.Free(4) 55257 55258 var p uintptr 55259 var rc int32 55260 *(*int32)(unsafe.Pointer(bp)) = 0 55261 55262 if objc != 2 && objc != 3 { 55263 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36018) 55264 return TCL_ERROR 55265 } 55266 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55267 if objc == 3 { 55268 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55269 return TCL_ERROR 55270 } 55271 } 55272 rc = sqlite3_quota_fflush(tls, p, *(*int32)(unsafe.Pointer(bp))) 55273 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55274 return TCL_OK 55275 } 55276 55277 func test_quota_fseek(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55278 bp := tls.Alloc(20) 55279 defer tls.Free(20) 55280 55281 var p uintptr 55282 55283 var zWhence uintptr 55284 var whence int32 55285 var rc int32 55286 55287 if objc != 4 { 55288 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36036) 55289 return TCL_ERROR 55290 } 55291 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55292 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 55293 return TCL_ERROR 55294 } 55295 zWhence = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 55296 if libc.Xstrcmp(tls, zWhence, ts+36057) == 0 { 55297 whence = SEEK_SET 55298 } else if libc.Xstrcmp(tls, zWhence, ts+36066) == 0 { 55299 whence = SEEK_CUR 55300 } else if libc.Xstrcmp(tls, zWhence, ts+36075) == 0 { 55301 whence = SEEK_END 55302 } else { 55303 tcl.XTcl_AppendResult(tls, interp, 55304 libc.VaList(bp, ts+36084, uintptr(0))) 55305 return TCL_ERROR 55306 } 55307 rc = sqlite3_quota_fseek(tls, p, int64(*(*int32)(unsafe.Pointer(bp + 16))), whence) 55308 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55309 return TCL_OK 55310 } 55311 55312 func test_quota_rewind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55313 var p uintptr 55314 if objc != 2 { 55315 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55316 return TCL_ERROR 55317 } 55318 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55319 sqlite3_quota_rewind(tls, p) 55320 return TCL_OK 55321 } 55322 55323 func test_quota_ftell(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55324 var p uintptr 55325 var x sqlite3_int64 55326 if objc != 2 { 55327 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55328 return TCL_ERROR 55329 } 55330 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55331 x = sqlite3_quota_ftell(tls, p) 55332 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55333 return TCL_OK 55334 } 55335 55336 func test_quota_ftruncate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55337 bp := tls.Alloc(8) 55338 defer tls.Free(8) 55339 55340 var p uintptr 55341 var x sqlite3_int64 55342 55343 var rc int32 55344 if objc != 3 { 55345 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36133) 55346 return TCL_ERROR 55347 } 55348 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55349 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55350 return TCL_ERROR 55351 } 55352 x = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 55353 rc = sqlite3_quota_ftruncate(tls, p, x) 55354 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55355 return TCL_OK 55356 } 55357 55358 func test_quota_file_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55359 var p uintptr 55360 var x sqlite3_int64 55361 if objc != 2 { 55362 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55363 return TCL_ERROR 55364 } 55365 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55366 x = sqlite3_quota_file_size(tls, p) 55367 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55368 return TCL_OK 55369 } 55370 55371 func test_quota_file_truesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55372 var p uintptr 55373 var x sqlite3_int64 55374 if objc != 2 { 55375 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55376 return TCL_ERROR 55377 } 55378 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55379 x = sqlite3_quota_file_truesize(tls, p) 55380 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55381 return TCL_OK 55382 } 55383 55384 func test_quota_file_mtime(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55385 bp := tls.Alloc(8) 55386 defer tls.Free(8) 55387 55388 var p uintptr 55389 55390 if objc != 2 { 55391 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55392 return TCL_ERROR 55393 } 55394 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55395 *(*time_t)(unsafe.Pointer(bp)) = int64(0) 55396 sqlite3_quota_file_mtime(tls, p, bp) 55397 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*time_t)(unsafe.Pointer(bp)))) 55398 return TCL_OK 55399 } 55400 55401 func test_quota_remove(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55402 var zFilename uintptr 55403 var rc int32 55404 if objc != 2 { 55405 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 55406 return TCL_ERROR 55407 } 55408 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55409 rc = sqlite3_quota_remove(tls, zFilename) 55410 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55411 return TCL_OK 55412 } 55413 55414 func test_quota_glob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55415 var zPattern uintptr 55416 var zText uintptr 55417 var rc int32 55418 if objc != 3 { 55419 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36145) 55420 return TCL_ERROR 55421 } 55422 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55423 zText = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 55424 rc = quotaStrglob(tls, zPattern, zText) 55425 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55426 return TCL_OK 55427 } 55428 55429 func test_quota_file_available(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55430 var p uintptr 55431 var x sqlite3_int64 55432 if objc != 2 { 55433 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55434 return TCL_ERROR 55435 } 55436 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55437 x = sqlite3_quota_file_available(tls, p) 55438 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55439 return TCL_OK 55440 } 55441 55442 func test_quota_ferror(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55443 var p uintptr 55444 var x int32 55445 if objc != 2 { 55446 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55447 return TCL_ERROR 55448 } 55449 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55450 x = sqlite3_quota_ferror(tls, p) 55451 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, x)) 55452 return TCL_OK 55453 } 55454 55455 func Sqlitequota_Init(tls *libc.TLS, interp uintptr) int32 { 55456 var i int32 55457 55458 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd9))/uint64(unsafe.Sizeof(struct { 55459 FzName uintptr 55460 FxProc uintptr 55461 }{})); i++ { 55462 tcl.XTcl_CreateObjCommand(tls, interp, aCmd9[i].FzName, aCmd9[i].FxProc, uintptr(0), uintptr(0)) 55463 } 55464 55465 return TCL_OK 55466 } 55467 55468 var aCmd9 = [21]struct { 55469 FzName uintptr 55470 FxProc uintptr 55471 }{ 55472 {FzName: ts + 36158, FxProc: 0}, 55473 {FzName: ts + 36183, FxProc: 0}, 55474 {FzName: ts + 36206, FxProc: 0}, 55475 {FzName: ts + 36224, FxProc: 0}, 55476 {FzName: ts + 36243, FxProc: 0}, 55477 {FzName: ts + 36262, FxProc: 0}, 55478 {FzName: ts + 36282, FxProc: 0}, 55479 {FzName: ts + 36302, FxProc: 0}, 55480 {FzName: ts + 36323, FxProc: 0}, 55481 {FzName: ts + 36344, FxProc: 0}, 55482 {FzName: ts + 36365, FxProc: 0}, 55483 {FzName: ts + 36385, FxProc: 0}, 55484 {FzName: ts + 36406, FxProc: 0}, 55485 {FzName: ts + 36426, FxProc: 0}, 55486 {FzName: ts + 36450, FxProc: 0}, 55487 {FzName: ts + 36474, FxProc: 0}, 55488 {FzName: ts + 36502, FxProc: 0}, 55489 {FzName: ts + 36527, FxProc: 0}, 55490 {FzName: ts + 36548, FxProc: 0}, 55491 {FzName: ts + 36567, FxProc: 0}, 55492 {FzName: ts + 36596, FxProc: 0}, 55493 } 55494 55495 type Circle1 = struct { 55496 FaBox [2]struct { 55497 Fxmin float64 55498 Fxmax float64 55499 Fymin float64 55500 Fymax float64 55501 } 55502 Fcenterx float64 55503 Fcentery float64 55504 Fradius float64 55505 FmxArea float64 55506 FeScoreType int32 55507 F__ccgo_pad1 [4]byte 55508 } 55509 55510 type Circle = Circle1 55511 type Box = struct { 55512 Fxmin float64 55513 Fxmax float64 55514 Fymin float64 55515 Fymax float64 55516 } 55517 55518 func circle_del(tls *libc.TLS, p uintptr) { 55519 sqlite3.Xsqlite3_free(tls, p) 55520 } 55521 55522 func circle_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 55523 var i int32 55524 var pCircle uintptr 55525 var xmin float64 55526 var xmax float64 55527 var ymin float64 55528 var ymax float64 55529 55530 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) 55531 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) 55532 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) 55533 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) 55534 pCircle = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 55535 if pCircle == uintptr(0) { 55536 if nCoord != 4 { 55537 return SQLITE_ERROR 55538 } 55539 55540 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 { 55541 return SQLITE_ERROR 55542 } 55543 55544 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 55545 if !(pCircle != 0) { 55546 return SQLITE_NOMEM 55547 } 55548 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 55549 55550 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 55551 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 55552 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 55553 55554 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55555 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55556 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55557 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55558 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55559 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55560 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55561 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55562 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = (xmax-xmin)*(ymax-ymin) + 1.0 55563 } 55564 55565 for i = 0; i < 4; i++ { 55566 var x float64 55567 if i&0x01 != 0 { 55568 x = xmax 55569 } else { 55570 x = xmin 55571 } 55572 var y float64 55573 if i&0x02 != 0 { 55574 y = ymax 55575 } else { 55576 y = ymin 55577 } 55578 var d2 float64 55579 55580 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55581 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55582 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55583 *(*int32)(unsafe.Pointer(pRes)) = 1 55584 return SQLITE_OK 55585 } 55586 } 55587 55588 for i = 0; i < 2; i++ { 55589 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55590 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55591 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55592 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55593 *(*int32)(unsafe.Pointer(pRes)) = 1 55594 return SQLITE_OK 55595 } 55596 } 55597 55598 *(*int32)(unsafe.Pointer(pRes)) = 0 55599 return SQLITE_OK 55600 } 55601 55602 func circle_query_func(tls *libc.TLS, p uintptr) int32 { 55603 var i int32 55604 var pCircle uintptr 55605 var xmin float64 55606 var xmax float64 55607 var ymin float64 55608 var ymax float64 55609 var nWithin int32 = 0 55610 55611 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55612 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55613 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55614 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55615 pCircle = (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FpUser 55616 if pCircle == uintptr(0) { 55617 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnCoord != 4 { 55618 return SQLITE_ERROR 55619 } 55620 55621 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 && (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 1 { 55622 return SQLITE_ERROR 55623 } 55624 55625 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 55626 if !(pCircle != 0) { 55627 return SQLITE_NOMEM 55628 } 55629 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 55630 55631 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam == 4 { 55632 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55633 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55634 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55635 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(*(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8))) 55636 } else { 55637 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FapSqlParam))) 55638 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = 0.0 55639 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = 0.0 55640 (*Circle)(unsafe.Pointer(pCircle)).Fradius = 0.0 55641 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = 0 55642 for z != 0 && *(*int8)(unsafe.Pointer(z)) != 0 { 55643 if int32(*(*int8)(unsafe.Pointer(z))) == 'r' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55644 (*Circle)(unsafe.Pointer(pCircle)).Fradius = libc.Xatof(tls, z+2) 55645 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'x' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55646 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = libc.Xatof(tls, z+2) 55647 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'y' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55648 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = libc.Xatof(tls, z+2) 55649 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'e' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55650 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(libc.Xatof(tls, z+2)) 55651 } else if int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 55652 z++ 55653 continue 55654 } 55655 for int32(*(*int8)(unsafe.Pointer(z))) != 0 && int32(*(*int8)(unsafe.Pointer(z))) != ' ' { 55656 z++ 55657 } 55658 for int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 55659 z++ 55660 } 55661 } 55662 } 55663 if (*Circle)(unsafe.Pointer(pCircle)).Fradius < 0.0 { 55664 sqlite3.Xsqlite3_free(tls, pCircle) 55665 return SQLITE_NOMEM 55666 } 55667 55668 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55669 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55670 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55671 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55672 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55673 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55674 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55675 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55676 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = float64(200.0) * 200.0 55677 } 55678 55679 for i = 0; i < 4; i++ { 55680 var x float64 55681 if i&0x01 != 0 { 55682 x = xmax 55683 } else { 55684 x = xmin 55685 } 55686 var y float64 55687 if i&0x02 != 0 { 55688 y = ymax 55689 } else { 55690 y = ymin 55691 } 55692 var d2 float64 55693 55694 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55695 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55696 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55697 nWithin++ 55698 } 55699 } 55700 55701 if nWithin == 0 { 55702 for i = 0; i < 2; i++ { 55703 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55704 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55705 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55706 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55707 nWithin = 1 55708 break 55709 } 55710 } 55711 } 55712 55713 if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 1 { 55714 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55715 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 2 { 55716 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55717 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 3 { 55718 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel == 1 { 55719 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 1.0 - (xmax-xmin)*(ymax-ymin)/(*Circle)(unsafe.Pointer(pCircle)).FmxArea 55720 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore < 0.01 { 55721 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.01 55722 } 55723 } else { 55724 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.0 55725 } 55726 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 4 { 55727 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55728 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 55729 nWithin = 0 55730 } 55731 } else { 55732 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55733 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 55734 nWithin = 0 55735 } 55736 } 55737 if nWithin == 0 { 55738 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 55739 } else if nWithin >= 4 { 55740 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55741 } else { 55742 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 55743 } 55744 return SQLITE_OK 55745 } 55746 55747 func bfs_query_func(tls *libc.TLS, p uintptr) int32 { 55748 var x0 float64 55749 var x1 float64 55750 var y0 float64 55751 var y1 float64 55752 var bx0 float64 55753 var bx1 float64 55754 var by0 float64 55755 var by1 float64 55756 55757 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 { 55758 return SQLITE_ERROR 55759 } 55760 x0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55761 x1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55762 y0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55763 y1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55764 bx0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55765 bx1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55766 by0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55767 by1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8)) 55768 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55769 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeParentWithin == FULLY_WITHIN { 55770 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55771 } else if x0 >= bx0 && x1 <= bx1 && y0 >= by0 && y1 <= by1 { 55772 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55773 } else if x1 >= bx0 && x0 <= bx1 && y1 >= by0 && y0 <= by1 { 55774 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 55775 } else { 55776 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 55777 } 55778 return SQLITE_OK 55779 } 55780 55781 type Cube1 = struct { 55782 Fx float64 55783 Fy float64 55784 Fz float64 55785 Fwidth float64 55786 Fheight float64 55787 Fdepth float64 55788 } 55789 55790 type Cube = Cube1 55791 55792 func cube_context_free(tls *libc.TLS, p uintptr) { 55793 sqlite3.Xsqlite3_free(tls, p) 55794 } 55795 55796 var gHere int32 = 42 55797 55798 func cube_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, piRes uintptr) int32 { 55799 var pCube uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 55800 55801 if pCube == uintptr(0) { 55802 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != 6 || nCoord != 6 || 55803 *(*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 { 55804 return SQLITE_ERROR 55805 } 55806 pCube = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Cube{}))) 55807 if !(pCube != 0) { 55808 return SQLITE_NOMEM 55809 } 55810 (*Cube)(unsafe.Pointer(pCube)).Fx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 55811 (*Cube)(unsafe.Pointer(pCube)).Fy = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 55812 (*Cube)(unsafe.Pointer(pCube)).Fz = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 55813 (*Cube)(unsafe.Pointer(pCube)).Fwidth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 3*8)) 55814 (*Cube)(unsafe.Pointer(pCube)).Fheight = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 4*8)) 55815 (*Cube)(unsafe.Pointer(pCube)).Fdepth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 5*8)) 55816 55817 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pCube 55818 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cube_context_free})) 55819 } 55820 55821 *(*int32)(unsafe.Pointer(piRes)) = 0 55822 if *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) <= (*Cube)(unsafe.Pointer(pCube)).Fx+(*Cube)(unsafe.Pointer(pCube)).Fwidth && 55823 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fx && 55824 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fy+(*Cube)(unsafe.Pointer(pCube)).Fheight && 55825 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fy && 55826 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 4*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fz+(*Cube)(unsafe.Pointer(pCube)).Fdepth && 55827 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 5*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fz { 55828 *(*int32)(unsafe.Pointer(piRes)) = 1 55829 } 55830 55831 return SQLITE_OK 55832 } 55833 55834 func register_cube_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55835 bp := tls.Alloc(8) 55836 defer tls.Free(8) 55837 55838 var rc int32 55839 55840 if objc != 2 { 55841 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55842 return TCL_ERROR 55843 } 55844 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 55845 return TCL_ERROR 55846 } 55847 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36617, *(*uintptr)(unsafe.Pointer(&struct { 55848 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 55849 }{cube_geom})), uintptr(unsafe.Pointer(&gHere))) 55850 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55851 return TCL_OK 55852 } 55853 55854 func register_circle_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55855 bp := tls.Alloc(8) 55856 defer tls.Free(8) 55857 55858 var rc int32 55859 55860 if objc != 2 { 55861 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55862 return TCL_ERROR 55863 } 55864 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 55865 return TCL_ERROR 55866 } 55867 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36622, *(*uintptr)(unsafe.Pointer(&struct { 55868 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 55869 }{circle_geom})), uintptr(0)) 55870 if rc == SQLITE_OK { 55871 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36629, 55872 *(*uintptr)(unsafe.Pointer(&struct { 55873 f func(*libc.TLS, uintptr) int32 55874 }{circle_query_func})), uintptr(0), uintptr(0)) 55875 } 55876 if rc == SQLITE_OK { 55877 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36637, 55878 *(*uintptr)(unsafe.Pointer(&struct { 55879 f func(*libc.TLS, uintptr) int32 55880 }{bfs_query_func})), uintptr(0), uintptr(0)) 55881 } 55882 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55883 return TCL_OK 55884 } 55885 55886 func Sqlitetestrtree_Init(tls *libc.TLS, interp uintptr) int32 { 55887 tcl.XTcl_CreateObjCommand(tls, interp, ts+36656, *(*uintptr)(unsafe.Pointer(&struct { 55888 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55889 }{register_cube_geom})), uintptr(0), uintptr(0)) 55890 tcl.XTcl_CreateObjCommand(tls, interp, ts+36675, *(*uintptr)(unsafe.Pointer(&struct { 55891 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55892 }{register_circle_geom})), uintptr(0), uintptr(0)) 55893 return TCL_OK 55894 } 55895 55896 type schema_vtab1 = struct { 55897 Fbase sqlite3_vtab 55898 Fdb uintptr 55899 } 55900 55901 type schema_vtab = schema_vtab1 55902 type schema_cursor1 = struct { 55903 Fbase sqlite3_vtab_cursor 55904 FpDbList uintptr 55905 FpTableList uintptr 55906 FpColumnList uintptr 55907 Frowid int32 55908 F__ccgo_pad1 [4]byte 55909 } 55910 55911 type schema_cursor = schema_cursor1 55912 55913 func schemaDestroy(tls *libc.TLS, pVtab uintptr) int32 { 55914 sqlite3.Xsqlite3_free(tls, pVtab) 55915 return 0 55916 } 55917 55918 func schemaCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 55919 var rc int32 = SQLITE_NOMEM 55920 var pVtab uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_vtab{}))) 55921 if pVtab != 0 { 55922 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(schema_vtab{}))) 55923 (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb = db 55924 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+36696) 55925 } 55926 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 55927 return rc 55928 } 55929 55930 func schemaOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 55931 var rc int32 = SQLITE_NOMEM 55932 var pCur uintptr 55933 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_cursor{}))) 55934 if pCur != 0 { 55935 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(schema_cursor{}))) 55936 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 55937 rc = SQLITE_OK 55938 } 55939 return rc 55940 } 55941 55942 func schemaClose(tls *libc.TLS, cur uintptr) int32 { 55943 var pCur uintptr = cur 55944 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList) 55945 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) 55946 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) 55947 sqlite3.Xsqlite3_free(tls, pCur) 55948 return SQLITE_OK 55949 } 55950 55951 func schemaColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 55952 var pCur uintptr = cur 55953 switch i { 55954 case 0: 55955 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1)) 55956 break 55957 case 1: 55958 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0)) 55959 break 55960 default: 55961 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList, i-2)) 55962 break 55963 } 55964 return SQLITE_OK 55965 } 55966 55967 func schemaRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 55968 var pCur uintptr = cur 55969 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*schema_cursor)(unsafe.Pointer(pCur)).Frowid) 55970 return SQLITE_OK 55971 } 55972 55973 func finalize(tls *libc.TLS, ppStmt uintptr) int32 { 55974 var rc int32 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(ppStmt))) 55975 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 55976 return rc 55977 } 55978 55979 func schemaEof(tls *libc.TLS, cur uintptr) int32 { 55980 var pCur uintptr = cur 55981 return func() int32 { 55982 if (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList != 0 { 55983 return 0 55984 } 55985 return 1 55986 }() 55987 } 55988 55989 func schemaNext(tls *libc.TLS, cur uintptr) int32 { 55990 bp := tls.Alloc(24) 55991 defer tls.Free(24) 55992 55993 var rc int32 55994 var pCur uintptr 55995 var pVtab uintptr 55996 var zSql uintptr 55997 var pDbList uintptr 55998 rc = SQLITE_OK 55999 pCur = cur 56000 pVtab = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 56001 zSql = uintptr(0) 56002 56003 __1: 56004 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList)) { 56005 goto __2 56006 } 56007 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+24))) { 56008 goto __3 56009 } 56010 goto next_exit 56011 __3: 56012 ; 56013 __4: 56014 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList)) { 56015 goto __5 56016 } 56017 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+16))) { 56018 goto __6 56019 } 56020 goto next_exit 56021 __6: 56022 ; 56023 __7: 56024 if !(SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList)) { 56025 goto __8 56026 } 56027 rc = finalize(tls, pCur+8) 56028 goto next_exit 56029 goto __7 56030 __8: 56031 ; 56032 if !(sqlite3.Xsqlite3_column_int(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 0) == 1) { 56033 goto __9 56034 } 56035 zSql = sqlite3.Xsqlite3_mprintf(tls, 56036 ts+36768, 0) 56037 goto __10 56038 __9: 56039 pDbList = (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList 56040 zSql = sqlite3.Xsqlite3_mprintf(tls, 56041 ts+36823, 56042 libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pDbList, 1))) 56043 __10: 56044 ; 56045 if !!(zSql != 0) { 56046 goto __11 56047 } 56048 rc = SQLITE_NOMEM 56049 goto next_exit 56050 __11: 56051 ; 56052 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+16, uintptr(0)) 56053 sqlite3.Xsqlite3_free(tls, zSql) 56054 if !(rc != SQLITE_OK) { 56055 goto __12 56056 } 56057 goto next_exit 56058 __12: 56059 ; 56060 goto __4 56061 __5: 56062 ; 56063 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+36876, 56064 libc.VaList(bp+8, sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1), 56065 sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0))) 56066 56067 if !!(zSql != 0) { 56068 goto __13 56069 } 56070 rc = SQLITE_NOMEM 56071 goto next_exit 56072 __13: 56073 ; 56074 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+24, uintptr(0)) 56075 sqlite3.Xsqlite3_free(tls, zSql) 56076 if !(rc != SQLITE_OK) { 56077 goto __14 56078 } 56079 goto next_exit 56080 __14: 56081 ; 56082 goto __1 56083 __2: 56084 ; 56085 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid++ 56086 56087 next_exit: 56088 return rc 56089 } 56090 56091 func schemaFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 56092 var rc int32 56093 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 56094 var pCur uintptr = pVtabCursor 56095 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid = 0 56096 finalize(tls, pCur+16) 56097 finalize(tls, pCur+24) 56098 finalize(tls, pCur+8) 56099 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, ts+36901, -1, pCur+8, uintptr(0)) 56100 return func() int32 { 56101 if rc == SQLITE_OK { 56102 return schemaNext(tls, pVtabCursor) 56103 } 56104 return rc 56105 }() 56106 } 56107 56108 func schemaBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 56109 return SQLITE_OK 56110 } 56111 56112 var schemaModule = sqlite3_module{ 56113 FxCreate: 0, 56114 FxConnect: 0, 56115 FxBestIndex: 0, 56116 FxDisconnect: 0, 56117 FxDestroy: 0, 56118 FxOpen: 0, 56119 FxClose: 0, 56120 FxFilter: 0, 56121 FxNext: 0, 56122 FxEof: 0, 56123 FxColumn: 0, 56124 FxRowid: 0, 56125 } 56126 56127 func register_schema_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56128 bp := tls.Alloc(8) 56129 defer tls.Free(8) 56130 56131 if objc != 2 { 56132 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 56133 return TCL_ERROR 56134 } 56135 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 56136 return TCL_ERROR 56137 } 56138 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+4808, uintptr(unsafe.Pointer(&schemaModule)), uintptr(0)) 56139 return TCL_OK 56140 } 56141 56142 func Sqlitetestschema_Init(tls *libc.TLS, interp uintptr) int32 { 56143 var i int32 56144 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd12))/uint64(unsafe.Sizeof(struct { 56145 FzName uintptr 56146 FxProc uintptr 56147 FclientData uintptr 56148 }{})); i++ { 56149 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd12[i].FzName, 56150 aObjCmd12[i].FxProc, aObjCmd12[i].FclientData, uintptr(0)) 56151 } 56152 return TCL_OK 56153 } 56154 56155 var aObjCmd12 = [1]struct { 56156 FzName uintptr 56157 FxProc uintptr 56158 FclientData uintptr 56159 }{ 56160 {FzName: ts + 36922, FxProc: 0}, 56161 } 56162 56163 type SqlMessage1 = struct { 56164 Fop int32 56165 F__ccgo_pad1 [4]byte 56166 FpDb uintptr 56167 FpStmt uintptr 56168 FerrCode int32 56169 F__ccgo_pad2 [4]byte 56170 FzIn uintptr 56171 FnByte int32 56172 F__ccgo_pad3 [4]byte 56173 FzOut uintptr 56174 FpNext uintptr 56175 FpPrev uintptr 56176 FclientMutex pthread_mutex_t 56177 FclientWakeup pthread_cond_t 56178 } 56179 56180 type SqlMessage = SqlMessage1 56181 56182 type ServerState = struct { 56183 FqueueMutex pthread_mutex_t 56184 FserverMutex pthread_mutex_t 56185 FserverWakeup pthread_cond_t 56186 FserverHalt int32 56187 F__ccgo_pad1 [4]byte 56188 FpQueueHead uintptr 56189 FpQueueTail uintptr 56190 } 56191 56192 var g4 = ServerState{} 56193 56194 func sendToServer(tls *libc.TLS, pMsg uintptr) { 56195 libc.Xpthread_mutex_init(tls, pMsg+72, uintptr(0)) 56196 libc.Xpthread_cond_init(tls, pMsg+80, uintptr(0)) 56197 56198 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 56199 (*SqlMessage)(unsafe.Pointer(pMsg)).FpNext = g4.FpQueueHead 56200 if g4.FpQueueHead == uintptr(0) { 56201 g4.FpQueueTail = pMsg 56202 } else { 56203 (*SqlMessage)(unsafe.Pointer(g4.FpQueueHead)).FpPrev = pMsg 56204 } 56205 (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev = uintptr(0) 56206 g4.FpQueueHead = pMsg 56207 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 56208 56209 libc.Xpthread_mutex_lock(tls, pMsg+72) 56210 libc.Xpthread_cond_signal(tls, uintptr(unsafe.Pointer(&g4))+16) 56211 for (*SqlMessage)(unsafe.Pointer(pMsg)).Fop != MSG_Done { 56212 libc.Xpthread_cond_wait(tls, pMsg+80, pMsg+72) 56213 } 56214 libc.Xpthread_mutex_unlock(tls, pMsg+72) 56215 56216 libc.Xpthread_mutex_destroy(tls, pMsg+72) 56217 libc.Xpthread_cond_destroy(tls, pMsg+80) 56218 } 56219 56220 func sqlite3_client_open(tls *libc.TLS, zDatabaseName uintptr, ppDb uintptr) int32 { 56221 bp := tls.Alloc(88) 56222 defer tls.Free(88) 56223 56224 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Open 56225 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zDatabaseName 56226 sendToServer(tls, bp) 56227 *(*uintptr)(unsafe.Pointer(ppDb)) = (*SqlMessage)(unsafe.Pointer(bp)).FpDb 56228 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56229 } 56230 56231 func sqlite3_client_prepare(tls *libc.TLS, pDb uintptr, zSql uintptr, nByte int32, ppStmt uintptr, pzTail uintptr) int32 { 56232 bp := tls.Alloc(88) 56233 defer tls.Free(88) 56234 56235 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Prepare 56236 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 56237 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zSql 56238 (*SqlMessage)(unsafe.Pointer(bp)).FnByte = nByte 56239 sendToServer(tls, bp) 56240 *(*uintptr)(unsafe.Pointer(ppStmt)) = (*SqlMessage)(unsafe.Pointer(bp)).FpStmt 56241 if pzTail != 0 { 56242 *(*uintptr)(unsafe.Pointer(pzTail)) = (*SqlMessage)(unsafe.Pointer(bp)).FzOut 56243 } 56244 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56245 } 56246 56247 func sqlite3_client_step(tls *libc.TLS, pStmt uintptr) int32 { 56248 bp := tls.Alloc(88) 56249 defer tls.Free(88) 56250 56251 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Step 56252 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56253 sendToServer(tls, bp) 56254 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56255 } 56256 56257 func sqlite3_client_reset(tls *libc.TLS, pStmt uintptr) int32 { 56258 bp := tls.Alloc(88) 56259 defer tls.Free(88) 56260 56261 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Reset 56262 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56263 sendToServer(tls, bp) 56264 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56265 } 56266 56267 func sqlite3_client_finalize(tls *libc.TLS, pStmt uintptr) int32 { 56268 bp := tls.Alloc(88) 56269 defer tls.Free(88) 56270 56271 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Finalize 56272 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56273 sendToServer(tls, bp) 56274 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56275 } 56276 56277 func sqlite3_client_close(tls *libc.TLS, pDb uintptr) int32 { 56278 bp := tls.Alloc(88) 56279 defer tls.Free(88) 56280 56281 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Close 56282 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 56283 sendToServer(tls, bp) 56284 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56285 } 56286 56287 func sqlite3_server(tls *libc.TLS, NotUsed uintptr) uintptr { 56288 if libc.Xpthread_mutex_trylock(tls, uintptr(unsafe.Pointer(&g4))+8) != 0 { 56289 return uintptr(0) 56290 } 56291 sqlite3.Xsqlite3_enable_shared_cache(tls, 1) 56292 for !(g4.FserverHalt != 0) { 56293 var pMsg uintptr 56294 56295 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 56296 for g4.FpQueueTail == uintptr(0) && g4.FserverHalt == 0 { 56297 libc.Xpthread_cond_wait(tls, uintptr(unsafe.Pointer(&g4))+16, uintptr(unsafe.Pointer(&g4))) 56298 } 56299 pMsg = g4.FpQueueTail 56300 if pMsg != 0 { 56301 if (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev != 0 { 56302 (*SqlMessage)(unsafe.Pointer((*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev)).FpNext = uintptr(0) 56303 } else { 56304 g4.FpQueueHead = uintptr(0) 56305 } 56306 g4.FpQueueTail = (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev 56307 } 56308 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 56309 if pMsg == uintptr(0) { 56310 break 56311 } 56312 56313 libc.Xpthread_mutex_lock(tls, pMsg+72) 56314 switch (*SqlMessage)(unsafe.Pointer(pMsg)).Fop { 56315 case MSG_Open: 56316 { 56317 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_open(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, pMsg+8) 56318 break 56319 56320 } 56321 case MSG_Prepare: 56322 { 56323 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_prepare(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, (*SqlMessage)(unsafe.Pointer(pMsg)).FnByte, 56324 pMsg+16, pMsg+48) 56325 break 56326 56327 } 56328 case MSG_Step: 56329 { 56330 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_step(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56331 break 56332 56333 } 56334 case MSG_Reset: 56335 { 56336 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_reset(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56337 break 56338 56339 } 56340 case MSG_Finalize: 56341 { 56342 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_finalize(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56343 break 56344 56345 } 56346 case MSG_Close: 56347 { 56348 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_close(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb) 56349 break 56350 56351 } 56352 } 56353 56354 (*SqlMessage)(unsafe.Pointer(pMsg)).Fop = MSG_Done 56355 libc.Xpthread_mutex_unlock(tls, pMsg+72) 56356 libc.Xpthread_cond_signal(tls, pMsg+80) 56357 } 56358 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+8) 56359 return uintptr(0) 56360 } 56361 56362 func sqlite3_server_start(tls *libc.TLS) { 56363 bp := tls.Alloc(8) 56364 defer tls.Free(8) 56365 56366 var rc int32 56367 g4.FserverHalt = 0 56368 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 56369 f func(*libc.TLS, uintptr) uintptr 56370 }{sqlite3_server})), uintptr(0)) 56371 if rc == 0 { 56372 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 56373 } 56374 } 56375 56376 func serverWrapper(tls *libc.TLS, pnDecr uintptr) uintptr { 56377 var p uintptr = sqlite3_server(tls, uintptr(0)) 56378 *(*int32)(unsafe.Pointer(pnDecr))-- 56379 return p 56380 } 56381 56382 func sqlite3_server_start2(tls *libc.TLS, pnDecr uintptr) { 56383 bp := tls.Alloc(8) 56384 defer tls.Free(8) 56385 56386 var rc int32 56387 g4.FserverHalt = 0 56388 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 56389 f func(*libc.TLS, uintptr) uintptr 56390 }{serverWrapper})), pnDecr) 56391 if rc == 0 { 56392 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 56393 } 56394 } 56395 56396 func sqlite3_server_stop(tls *libc.TLS) { 56397 g4.FserverHalt = 1 56398 libc.Xpthread_cond_broadcast(tls, uintptr(unsafe.Pointer(&g4))+16) 56399 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))+8) 56400 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+8) 56401 } 56402 56403 type SuperlockBusy1 = struct { 56404 FxBusy uintptr 56405 FpBusyArg uintptr 56406 FnBusy int32 56407 F__ccgo_pad1 [4]byte 56408 } 56409 56410 type SuperlockBusy = SuperlockBusy1 56411 56412 type Superlock1 = struct { 56413 Fdb uintptr 56414 FbWal int32 56415 F__ccgo_pad1 [4]byte 56416 } 56417 56418 type Superlock = Superlock1 56419 56420 func superlockBusyHandler(tls *libc.TLS, pCtx uintptr, UNUSED int32) int32 { 56421 var pBusy uintptr = pCtx 56422 if (*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy == uintptr(0) { 56423 return 0 56424 } 56425 return (*struct { 56426 f func(*libc.TLS, uintptr, int32) int32 56427 })(unsafe.Pointer(&struct{ uintptr }{(*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy})).f(tls, (*SuperlockBusy)(unsafe.Pointer(pBusy)).FpBusyArg, libc.PostIncInt32(&(*SuperlockBusy)(unsafe.Pointer(pBusy)).FnBusy, 1)) 56428 } 56429 56430 func superlockIsWal(tls *libc.TLS, pLock uintptr) int32 { 56431 bp := tls.Alloc(8) 56432 defer tls.Free(8) 56433 56434 var rc int32 56435 56436 rc = sqlite3.Xsqlite3_prepare(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+36945, -1, bp, uintptr(0)) 56437 if rc != SQLITE_OK { 56438 return rc 56439 } 56440 56441 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 0 56442 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 56443 var zMode uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 56444 if zMode != 0 && libc.Xstrlen(tls, zMode) == uint64(3) && sqlite3.Xsqlite3_strnicmp(tls, ts+29946, zMode, 3) == 0 { 56445 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 1 56446 } 56447 } 56448 56449 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 56450 } 56451 56452 func superlockShmLock(tls *libc.TLS, fd uintptr, idx int32, nByte int32, pBusy uintptr) int32 { 56453 var rc int32 56454 var xShmLock uintptr = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxShmLock 56455 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_BUSY && superlockBusyHandler(tls, pBusy, 0) != 0 { 56456 rc = (*struct { 56457 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56458 })(unsafe.Pointer(&struct{ uintptr }{xShmLock})).f(tls, fd, idx, nByte, SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) 56459 } 56460 return rc 56461 } 56462 56463 func superlockWalLock(tls *libc.TLS, db uintptr, pBusy uintptr) int32 { 56464 bp := tls.Alloc(16) 56465 defer tls.Free(16) 56466 56467 var rc int32 56468 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 56469 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 56470 56471 rc = sqlite3.Xsqlite3_file_control(tls, db, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 56472 if rc != SQLITE_OK { 56473 return rc 56474 } 56475 56476 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 2, 1, pBusy) 56477 if rc != SQLITE_OK { 56478 return rc 56479 } 56480 56481 rc = (*struct { 56482 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 56483 })(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) 56484 if rc != SQLITE_OK { 56485 return rc 56486 } 56487 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, uint64(32)) 56488 56489 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 3, SQLITE_SHM_NLOCK-3, pBusy) 56490 return rc 56491 } 56492 56493 func sqlite3demo_superunlock(tls *libc.TLS, pLock uintptr) { 56494 bp := tls.Alloc(8) 56495 defer tls.Free(8) 56496 56497 var p uintptr = pLock 56498 if (*Superlock)(unsafe.Pointer(p)).FbWal != 0 { 56499 var rc int32 56500 var flags int32 = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE 56501 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 56502 rc = sqlite3.Xsqlite3_file_control(tls, (*Superlock)(unsafe.Pointer(p)).Fdb, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 56503 if rc == SQLITE_OK { 56504 (*struct { 56505 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56506 })(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) 56507 (*struct { 56508 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56509 })(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) 56510 } 56511 } 56512 sqlite3.Xsqlite3_close(tls, (*Superlock)(unsafe.Pointer(p)).Fdb) 56513 sqlite3.Xsqlite3_free(tls, p) 56514 } 56515 56516 func sqlite3demo_superlock(tls *libc.TLS, zPath uintptr, zVfs uintptr, xBusy uintptr, pBusyArg uintptr, ppLock uintptr) int32 { 56517 bp := tls.Alloc(24) 56518 defer tls.Free(24) 56519 56520 *(*SuperlockBusy)(unsafe.Pointer(bp)) = SuperlockBusy{} 56521 var rc int32 56522 var pLock uintptr 56523 56524 pLock = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Superlock{}))) 56525 if !(pLock != 0) { 56526 return SQLITE_NOMEM 56527 } 56528 libc.Xmemset(tls, pLock, 0, uint64(unsafe.Sizeof(Superlock{}))) 56529 56530 rc = sqlite3.Xsqlite3_open_v2(tls, 56531 zPath, pLock, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs) 56532 56533 if rc == SQLITE_OK { 56534 (*SuperlockBusy)(unsafe.Pointer(bp)).FxBusy = xBusy 56535 (*SuperlockBusy)(unsafe.Pointer(bp)).FpBusyArg = pBusyArg 56536 sqlite3.Xsqlite3_busy_handler(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 56537 f func(*libc.TLS, uintptr, int32) int32 56538 }{superlockBusyHandler})), bp) 56539 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+13217, uintptr(0), uintptr(0), uintptr(0)) 56540 } 56541 56542 if rc == SQLITE_OK { 56543 if SQLITE_OK == libc.AssignInt32(&rc, superlockIsWal(tls, pLock)) && (*Superlock)(unsafe.Pointer(pLock)).FbWal != 0 { 56544 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+11628, uintptr(0), uintptr(0), uintptr(0)) 56545 if rc == SQLITE_OK { 56546 rc = superlockWalLock(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, bp) 56547 } 56548 } 56549 } 56550 56551 if rc != SQLITE_OK { 56552 sqlite3demo_superunlock(tls, pLock) 56553 *(*uintptr)(unsafe.Pointer(ppLock)) = uintptr(0) 56554 } else { 56555 *(*uintptr)(unsafe.Pointer(ppLock)) = pLock 56556 } 56557 56558 return rc 56559 } 56560 56561 type InterpAndScript1 = struct { 56562 Finterp uintptr 56563 FpScript uintptr 56564 } 56565 56566 type InterpAndScript = InterpAndScript1 56567 56568 func superunlock_del(tls *libc.TLS, cd ClientData) { 56569 sqlite3demo_superunlock(tls, cd) 56570 } 56571 56572 func superunlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56573 if objc != 1 { 56574 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 56575 return TCL_ERROR 56576 } 56577 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 56578 return TCL_OK 56579 } 56580 56581 func superlock_busy(tls *libc.TLS, pCtx uintptr, nBusy int32) int32 { 56582 bp := tls.Alloc(4) 56583 defer tls.Free(4) 56584 56585 var p uintptr = pCtx 56586 var pEval uintptr 56587 *(*int32)(unsafe.Pointer(bp)) = 0 56588 56589 pEval = tcl.XTcl_DuplicateObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).FpScript) 56590 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 56591 tcl.XTcl_ListObjAppendElement(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, nBusy)) 56592 tcl.XTcl_EvalObjEx(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 56593 tcl.XTcl_GetIntFromObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp), bp) 56594 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56595 var _objPtr uintptr = pEval 56596 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56597 tcl.XTclFreeObj(tls, _objPtr) 56598 } 56599 } 56600 56601 return *(*int32)(unsafe.Pointer(bp)) 56602 } 56603 56604 func superlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56605 bp := tls.Alloc(40) 56606 defer tls.Free(40) 56607 56608 var zPath uintptr 56609 var zVfs uintptr = uintptr(0) 56610 *(*InterpAndScript)(unsafe.Pointer(bp + 16)) = InterpAndScript{} 56611 var xBusy uintptr = uintptr(0) 56612 var rc int32 56613 56614 if objc < 3 || objc > 5 { 56615 tcl.XTcl_WrongNumArgs(tls, 56616 interp, 1, objv, ts+36970) 56617 return TCL_ERROR 56618 } 56619 56620 zPath = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56621 56622 if objc > 3 { 56623 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 56624 if libc.Xstrlen(tls, zVfs) == uint64(0) { 56625 zVfs = uintptr(0) 56626 } 56627 } 56628 if objc > 4 { 56629 (*InterpAndScript)(unsafe.Pointer(bp + 16)).Finterp = interp 56630 (*InterpAndScript)(unsafe.Pointer(bp + 16)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 56631 xBusy = *(*uintptr)(unsafe.Pointer(&struct { 56632 f func(*libc.TLS, uintptr, int32) int32 56633 }{superlock_busy})) 56634 } 56635 56636 rc = sqlite3demo_superlock(tls, zPath, zVfs, xBusy, bp+16, bp+32) 56637 56638 if rc != SQLITE_OK { 56639 tcl.XTcl_ResetResult(tls, interp) 56640 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 56641 return TCL_ERROR 56642 } 56643 56644 tcl.XTcl_CreateObjCommand(tls, 56645 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 56646 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56647 }{superunlock_cmd})), *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{superunlock_del}))) 56648 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 56649 return TCL_OK 56650 } 56651 56652 func SqliteSuperlock_Init(tls *libc.TLS, interp uintptr) int32 { 56653 tcl.XTcl_CreateObjCommand(tls, interp, ts+37011, *(*uintptr)(unsafe.Pointer(&struct { 56654 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56655 }{superlock_cmd})), uintptr(0), uintptr(0)) 56656 return TCL_OK 56657 } 56658 56659 type shm_largepage_conf = struct { 56660 Fpsind int32 56661 Falloc_policy int32 56662 Fpad [10]int32 56663 } 56664 56665 type TestSyscallGlobal = struct { 56666 FbPersist int32 56667 FnCount int32 56668 FnFail int32 56669 Fpgsz int32 56670 Forig_getpagesize sqlite3_syscall_ptr 56671 } 56672 56673 var gSyscall = TestSyscallGlobal{} 56674 56675 type TestSyscallArray = struct { 56676 FzName uintptr 56677 FxTest sqlite3_syscall_ptr 56678 FxOrig sqlite3_syscall_ptr 56679 Fdefault_errno int32 56680 Fcustom_errno int32 56681 } 56682 56683 var aSyscall = [19]TestSyscallArray{ 56684 {FzName: ts + 37033, FxTest: 0, Fdefault_errno: EACCES}, 56685 {FzName: ts + 9490, FxTest: 0}, 56686 {FzName: ts + 37038, FxTest: 0}, 56687 {FzName: ts + 37045, FxTest: 0}, 56688 {FzName: ts + 37052, FxTest: 0}, 56689 {FzName: ts + 37057, FxTest: 0}, 56690 {FzName: ts + 37063, FxTest: 0, Fdefault_errno: EIO}, 56691 {FzName: ts + 37073, FxTest: 0, Fdefault_errno: EACCES}, 56692 {FzName: ts + 25126, FxTest: 0}, 56693 {FzName: ts + 37079, FxTest: 0}, 56694 {FzName: ts + 37085, FxTest: 0}, 56695 {FzName: ts + 25131, FxTest: 0}, 56696 {FzName: ts + 37093, FxTest: 0}, 56697 {FzName: ts + 37100, FxTest: 0}, 56698 {FzName: ts + 37109, FxTest: 0}, 56699 {FzName: ts + 37116, FxTest: 0}, 56700 {FzName: ts + 29040, FxTest: 0}, 56701 {FzName: ts + 37126, FxTest: 0}, 56702 {}, 56703 } 56704 56705 func tsIsFail(tls *libc.TLS) int32 { 56706 gSyscall.FnCount-- 56707 if gSyscall.FnCount == 0 || gSyscall.FnFail != 0 && gSyscall.FbPersist != 0 { 56708 gSyscall.FnFail++ 56709 return 1 56710 } 56711 return 0 56712 } 56713 56714 func tsErrno(tls *libc.TLS, zFunc uintptr) int32 { 56715 var i int32 56716 var nFunc int32 = int32(libc.Xstrlen(tls, zFunc)) 56717 for i = 0; aSyscall[i].FzName != 0; i++ { 56718 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(nFunc) { 56719 continue 56720 } 56721 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(nFunc)) != 0 { 56722 continue 56723 } 56724 return aSyscall[i].Fcustom_errno 56725 } 56726 56727 return 0 56728 } 56729 56730 func tsIsFailErrno(tls *libc.TLS, zFunc uintptr) int32 { 56731 if tsIsFail(tls) != 0 { 56732 *(*int32)(unsafe.Pointer(libc.X__error(tls))) = tsErrno(tls, zFunc) 56733 return 1 56734 } 56735 return 0 56736 } 56737 56738 func ts_open(tls *libc.TLS, zFile uintptr, flags int32, mode int32) int32 { 56739 if tsIsFailErrno(tls, ts+37033) != 0 { 56740 return -1 56741 } 56742 return (*(*func(*libc.TLS, uintptr, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16)))(tls, zFile, flags, mode) 56743 } 56744 56745 func ts_close(tls *libc.TLS, fd int32) int32 { 56746 if tsIsFail(tls) != 0 { 56747 (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 56748 return -1 56749 } 56750 return (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 56751 } 56752 56753 func ts_access(tls *libc.TLS, zPath uintptr, mode int32) int32 { 56754 if tsIsFail(tls) != 0 { 56755 return -1 56756 } 56757 return (*(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 2*32 + 16)))(tls, zPath, mode) 56758 } 56759 56760 func ts_getcwd(tls *libc.TLS, zPath uintptr, nPath size_t) uintptr { 56761 if tsIsFail(tls) != 0 { 56762 return uintptr(0) 56763 } 56764 return (*(*func(*libc.TLS, uintptr, size_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 3*32 + 16)))(tls, zPath, nPath) 56765 } 56766 56767 func ts_stat(tls *libc.TLS, zPath uintptr, p uintptr) int32 { 56768 if tsIsFail(tls) != 0 { 56769 return -1 56770 } 56771 return (*(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 4*32 + 16)))(tls, zPath, p) 56772 } 56773 56774 func ts_fstat(tls *libc.TLS, fd int32, p uintptr) int32 { 56775 if tsIsFailErrno(tls, ts+37057) != 0 { 56776 return -1 56777 } 56778 return (*(*func(*libc.TLS, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 5*32 + 16)))(tls, fd, p) 56779 } 56780 56781 func ts_ftruncate(tls *libc.TLS, fd int32, n off_t) int32 { 56782 if tsIsFailErrno(tls, ts+37063) != 0 { 56783 return -1 56784 } 56785 return (*(*func(*libc.TLS, int32, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 6*32 + 16)))(tls, fd, n) 56786 } 56787 56788 func ts_fcntl(tls *libc.TLS, fd int32, cmd int32, va uintptr) int32 { 56789 bp := tls.Alloc(8) 56790 defer tls.Free(8) 56791 56792 var ap va_list 56793 _ = ap 56794 var pArg uintptr 56795 if tsIsFailErrno(tls, ts+37073) != 0 { 56796 return -1 56797 } 56798 ap = va 56799 pArg = libc.VaUintptr(&ap) 56800 return (*(*func(*libc.TLS, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 7*32 + 16)))(tls, fd, cmd, libc.VaList(bp, pArg)) 56801 } 56802 56803 func ts_read(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 56804 if tsIsFailErrno(tls, ts+25126) != 0 { 56805 return -1 56806 } 56807 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8*32 + 16)))(tls, fd, aBuf, nBuf)) 56808 } 56809 56810 func ts_pread(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 56811 if tsIsFailErrno(tls, ts+37079) != 0 { 56812 return -1 56813 } 56814 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)) 56815 } 56816 56817 func ts_pread64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 56818 if tsIsFailErrno(tls, ts+37085) != 0 { 56819 return -1 56820 } 56821 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)) 56822 } 56823 56824 func ts_write(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 56825 if tsIsFailErrno(tls, ts+25131) != 0 { 56826 if tsErrno(tls, ts+25131) == EINTR { 56827 (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf/uint64(2)) 56828 } 56829 return -1 56830 } 56831 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf)) 56832 } 56833 56834 func ts_pwrite(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 56835 if tsIsFailErrno(tls, ts+37093) != 0 { 56836 return -1 56837 } 56838 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)) 56839 } 56840 56841 func ts_pwrite64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 56842 if tsIsFailErrno(tls, ts+37100) != 0 { 56843 return -1 56844 } 56845 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)) 56846 } 56847 56848 func ts_fchmod(tls *libc.TLS, fd int32, mode mode_t) int32 { 56849 if tsIsFail(tls) != 0 { 56850 return -1 56851 } 56852 return (*(*func(*libc.TLS, int32, mode_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 14*32 + 16)))(tls, fd, mode) 56853 } 56854 56855 func ts_fallocate(tls *libc.TLS, fd int32, off off_t, len off_t) int32 { 56856 if tsIsFail(tls) != 0 { 56857 return tsErrno(tls, ts+37116) 56858 } 56859 return (*(*func(*libc.TLS, int32, off_t, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 15*32 + 16)))(tls, fd, off, len) 56860 } 56861 56862 func ts_mmap(tls *libc.TLS, pAddr uintptr, nByte size_t, prot int32, flags int32, fd int32, iOff off_t) uintptr { 56863 if tsIsFailErrno(tls, ts+29040) != 0 { 56864 return libc.UintptrFromInt32(-1) 56865 } 56866 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) 56867 } 56868 56869 func ts_mremap(tls *libc.TLS, a uintptr, b size_t, c size_t, d int32, va uintptr) uintptr { 56870 bp := tls.Alloc(8) 56871 defer tls.Free(8) 56872 56873 var ap va_list 56874 _ = ap 56875 var pArg uintptr 56876 if tsIsFailErrno(tls, ts+37126) != 0 { 56877 return libc.UintptrFromInt32(-1) 56878 } 56879 ap = va 56880 pArg = libc.VaUintptr(&ap) 56881 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)) 56882 } 56883 56884 func test_syscall_install(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56885 bp := tls.Alloc(20) 56886 defer tls.Free(20) 56887 56888 var pVfs uintptr 56889 56890 var i int32 56891 56892 if objc != 3 { 56893 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37133) 56894 return TCL_ERROR 56895 } 56896 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp, bp+8) != 0 { 56897 return TCL_ERROR 56898 } 56899 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56900 56901 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 56902 var rc int32 = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56903 *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp+16) 56904 if rc != 0 { 56905 return rc 56906 } 56907 if aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig == uintptr(0) { 56908 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig = (*struct { 56909 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 56910 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FzName) 56911 (*struct { 56912 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56913 })(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) 56914 } 56915 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fcustom_errno = aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fdefault_errno 56916 } 56917 56918 return TCL_OK 56919 } 56920 56921 func test_syscall_uninstall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56922 var pVfs uintptr 56923 var i int32 56924 56925 if objc != 2 { 56926 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56927 return TCL_ERROR 56928 } 56929 56930 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56931 for i = 0; aSyscall[i].FzName != 0; i++ { 56932 if aSyscall[i].FxOrig != 0 { 56933 (*struct { 56934 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56935 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[i].FzName, uintptr(0)) 56936 aSyscall[i].FxOrig = uintptr(0) 56937 } 56938 } 56939 return TCL_OK 56940 } 56941 56942 func test_syscall_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56943 bp := tls.Alloc(4) 56944 defer tls.Free(4) 56945 56946 var pVfs uintptr 56947 var i int32 56948 var rc int32 56949 56950 if objc != 2 && objc != 3 { 56951 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56952 return TCL_ERROR 56953 } 56954 56955 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56956 if objc == 2 { 56957 rc = (*struct { 56958 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56959 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, uintptr(0), uintptr(0)) 56960 for i = 0; aSyscall[i].FzName != 0; i++ { 56961 aSyscall[i].FxOrig = uintptr(0) 56962 } 56963 } else { 56964 var zFunc uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) 56965 rc = (*struct { 56966 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56967 })(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)) 56968 for i = 0; rc == SQLITE_OK && aSyscall[i].FzName != 0; i++ { 56969 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(*(*int32)(unsafe.Pointer(bp))) { 56970 continue 56971 } 56972 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(*(*int32)(unsafe.Pointer(bp)))) != 0 { 56973 continue 56974 } 56975 aSyscall[i].FxOrig = uintptr(0) 56976 } 56977 } 56978 if rc != SQLITE_OK { 56979 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 56980 return TCL_ERROR 56981 } 56982 56983 tcl.XTcl_ResetResult(tls, interp) 56984 return TCL_OK 56985 } 56986 56987 func test_syscall_exists(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56988 var pVfs uintptr 56989 var x sqlite3_syscall_ptr 56990 56991 if objc != 3 { 56992 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56993 return TCL_ERROR 56994 } 56995 56996 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56997 x = (*struct { 56998 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 56999 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 57000 57001 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(x != uintptr(0)) != 0))) 57002 return TCL_OK 57003 } 57004 57005 func test_syscall_fault(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57006 bp := tls.Alloc(8) 57007 defer tls.Free(8) 57008 57009 *(*int32)(unsafe.Pointer(bp)) = 0 57010 *(*int32)(unsafe.Pointer(bp + 4)) = 0 57011 57012 if objc != 2 && objc != 4 { 57013 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37158) 57014 return TCL_ERROR 57015 } 57016 57017 if objc == 4 { 57018 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 || 57019 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 57020 return TCL_ERROR 57021 } 57022 } 57023 57024 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, gSyscall.FnFail)) 57025 gSyscall.FnCount = *(*int32)(unsafe.Pointer(bp)) 57026 gSyscall.FbPersist = *(*int32)(unsafe.Pointer(bp + 4)) 57027 gSyscall.FnFail = 0 57028 return TCL_OK 57029 } 57030 57031 func test_syscall_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57032 bp := tls.Alloc(204) 57033 defer tls.Free(204) 57034 57035 var rc int32 57036 57037 *(*[12]Errno)(unsafe.Pointer(bp + 8)) = [12]Errno{ 57038 {Fz: ts + 37174, Fi: EACCES}, 57039 {Fz: ts + 37181, Fi: EINTR}, 57040 {Fz: ts + 37187, Fi: EIO}, 57041 {Fz: ts + 37191, Fi: EOVERFLOW}, 57042 {Fz: ts + 37201, Fi: ENOMEM}, 57043 {Fz: ts + 37208, Fi: EAGAIN}, 57044 {Fz: ts + 37215, Fi: ETIMEDOUT}, 57045 {Fz: ts + 37225, Fi: EBUSY}, 57046 {Fz: ts + 37231, Fi: EPERM}, 57047 {Fz: ts + 37237, Fi: EDEADLK}, 57048 {Fz: ts + 37245, Fi: ENOLCK}, 57049 {}, 57050 } 57051 57052 if objc != 4 { 57053 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37252) 57054 return TCL_ERROR 57055 } 57056 57057 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57058 *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp) 57059 if rc != TCL_OK { 57060 return rc 57061 } 57062 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57063 *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(Errno{})), ts+37266, 0, bp+200) 57064 if rc != TCL_OK { 57065 return rc 57066 } 57067 57068 aSyscall[*(*int32)(unsafe.Pointer(bp))].Fcustom_errno = (*Errno)(unsafe.Pointer(bp + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 200)))*16)).Fi 57069 return TCL_OK 57070 } 57071 57072 type Errno = struct { 57073 Fz uintptr 57074 Fi int32 57075 F__ccgo_pad1 [4]byte 57076 } 57077 57078 func test_syscall_list(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57079 var zSys uintptr 57080 var pVfs uintptr 57081 var pList uintptr 57082 57083 if objc != 2 { 57084 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57085 return TCL_ERROR 57086 } 57087 57088 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57089 pList = tcl.XTcl_NewObj(tls) 57090 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 57091 for zSys = (*struct { 57092 f func(*libc.TLS, uintptr, uintptr) uintptr 57093 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, uintptr(0)); zSys != uintptr(0); zSys = (*struct { 57094 f func(*libc.TLS, uintptr, uintptr) uintptr 57095 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, zSys) { 57096 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, zSys, -1)) 57097 } 57098 57099 tcl.XTcl_SetObjResult(tls, interp, pList) 57100 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57101 var _objPtr uintptr = pList 57102 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57103 tcl.XTclFreeObj(tls, _objPtr) 57104 } 57105 } 57106 return TCL_OK 57107 } 57108 57109 func test_syscall_defaultvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57110 var pVfs uintptr 57111 57112 if objc != 2 { 57113 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57114 return TCL_ERROR 57115 } 57116 57117 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57118 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 57119 return TCL_OK 57120 } 57121 57122 func ts_getpagesize(tls *libc.TLS) int32 { 57123 return gSyscall.Fpgsz 57124 } 57125 57126 func test_syscall_pagesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57127 bp := tls.Alloc(20) 57128 defer tls.Free(20) 57129 57130 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57131 57132 if objc != 3 { 57133 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37272) 57134 return TCL_ERROR 57135 } 57136 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 57137 return TCL_ERROR 57138 } 57139 57140 if *(*int32)(unsafe.Pointer(bp + 16)) < 0 { 57141 if gSyscall.Forig_getpagesize != 0 { 57142 (*struct { 57143 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57144 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, ts+37277, gSyscall.Forig_getpagesize) 57145 } 57146 } else { 57147 if *(*int32)(unsafe.Pointer(bp + 16)) < 512 || *(*int32)(unsafe.Pointer(bp + 16))&(*(*int32)(unsafe.Pointer(bp + 16))-1) != 0 { 57148 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37289, 0)) 57149 return TCL_ERROR 57150 } 57151 gSyscall.Forig_getpagesize = (*struct { 57152 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57153 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, ts+37277) 57154 gSyscall.Fpgsz = *(*int32)(unsafe.Pointer(bp + 16)) 57155 (*struct { 57156 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57157 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, 57158 pVfs, ts+37277, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{ts_getpagesize}))) 57159 } 57160 57161 return TCL_OK 57162 } 57163 57164 func test_syscall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57165 bp := tls.Alloc(180) 57166 defer tls.Free(180) 57167 57168 *(*[10]SyscallCmd)(unsafe.Pointer(bp + 16)) = [10]SyscallCmd{ 57169 {FzName: ts + 37307, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57170 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57171 }{test_syscall_fault}))}, 57172 {FzName: ts + 37313, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57173 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57174 }{test_syscall_install}))}, 57175 {FzName: ts + 37321, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57176 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57177 }{test_syscall_uninstall}))}, 57178 {FzName: ts + 7933, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57179 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57180 }{test_syscall_reset}))}, 57181 {FzName: ts + 37266, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57182 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57183 }{test_syscall_errno}))}, 57184 {FzName: ts + 13516, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57185 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57186 }{test_syscall_exists}))}, 57187 {FzName: ts + 37331, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57188 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57189 }{test_syscall_list}))}, 57190 {FzName: ts + 37336, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57191 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57192 }{test_syscall_defaultvfs}))}, 57193 {FzName: ts + 37347, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57194 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57195 }{test_syscall_pagesize}))}, 57196 {}, 57197 } 57198 57199 var rc int32 57200 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57201 57202 if objc < 2 { 57203 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 57204 return TCL_ERROR 57205 } 57206 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion < 3 || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall == uintptr(0) { 57207 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37356, 0)) 57208 rc = TCL_ERROR 57209 } else { 57210 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57211 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, int32(unsafe.Sizeof(SyscallCmd{})), ts+2014, 0, bp+176) 57212 } 57213 if rc != TCL_OK { 57214 return rc 57215 } 57216 return (*struct { 57217 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57218 })(unsafe.Pointer(&struct{ uintptr }{(*SyscallCmd)(unsafe.Pointer(bp + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*16)).FxCmd})).f(tls, clientData, interp, objc, objv) 57219 } 57220 57221 type SyscallCmd = struct { 57222 FzName uintptr 57223 FxCmd uintptr 57224 } 57225 57226 func SqlitetestSyscall_Init(tls *libc.TLS, interp uintptr) int32 { 57227 bp := tls.Alloc(16) 57228 defer tls.Free(16) 57229 57230 *(*[1]SyscallCmd)(unsafe.Pointer(bp)) = [1]SyscallCmd{ 57231 {FzName: ts + 37392, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57232 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57233 }{test_syscall}))}, 57234 } 57235 var i int32 57236 57237 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]SyscallCmd{}))/uint64(unsafe.Sizeof(SyscallCmd{})); i++ { 57238 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)) 57239 } 57240 return TCL_OK 57241 } 57242 57243 func sqlite3TestInit(tls *libc.TLS, interp uintptr) uintptr { 57244 bp := tls.Alloc(80) 57245 defer tls.Free(80) 57246 57247 { 57248 libc.Xgetrlimit(tls, RLIMIT_CORE, bp) 57249 (*rlimit)(unsafe.Pointer(bp)).Frlim_cur = (*rlimit)(unsafe.Pointer(bp)).Frlim_max 57250 libc.Xsetrlimit(tls, RLIMIT_CORE, bp) 57251 57252 } 57253 57254 if tcl.XTcl_GetCommandInfo(tls, interp, ts+14267, bp+16) == 0 { 57255 Sqlite3_Init(tls, interp) 57256 } 57257 Md5_Init(tls, interp) 57258 Sqliteconfig_Init(tls, interp) 57259 Sqlitetest1_Init(tls, interp) 57260 Sqlitetest2_Init(tls, interp) 57261 Sqlitetest3_Init(tls, interp) 57262 Sqlitetest4_Init(tls, interp) 57263 Sqlitetest5_Init(tls, interp) 57264 Sqlitetest6_Init(tls, interp) 57265 Sqlitetest7_Init(tls, interp) 57266 Sqlitetest8_Init(tls, interp) 57267 Sqlitetest9_Init(tls, interp) 57268 Sqlitetestasync_Init(tls, interp) 57269 Sqlitetest_autoext_Init(tls, interp) 57270 Sqlitetest_blob_Init(tls, interp) 57271 Sqlitetest_demovfs_Init(tls, interp) 57272 Sqlitetest_func_Init(tls, interp) 57273 Sqlitetest_hexio_Init(tls, interp) 57274 Sqlitetest_init_Init(tls, interp) 57275 Sqlitetest_malloc_Init(tls, interp) 57276 Sqlitetest_mutex_Init(tls, interp) 57277 Sqlitetestschema_Init(tls, interp) 57278 Sqlitetesttclvar_Init(tls, interp) 57279 Sqlitetestfs_Init(tls, interp) 57280 SqlitetestThread_Init(tls, interp) 57281 SqlitetestOnefile_Init(tls) 57282 SqlitetestOsinst_Init(tls, interp) 57283 Sqlitetestbackup_Init(tls, interp) 57284 Sqlitetestintarray_Init(tls, interp) 57285 Sqlitetestvfs_Init(tls, interp) 57286 Sqlitetestrtree_Init(tls, interp) 57287 Sqlitetestrtreedoc_Init(tls, interp) 57288 Sqlitequota_Init(tls, interp) 57289 Sqlitemultiplex_Init(tls, interp) 57290 SqliteSuperlock_Init(tls, interp) 57291 SqlitetestSyscall_Init(tls, interp) 57292 TestSession_Init(tls, interp) 57293 Fts5tcl_Init(tls, interp) 57294 SqliteRbu_Init(tls, interp) 57295 Sqlitetesttcl_Init(tls, interp) 57296 57297 TestExpert_Init(tls, interp) 57298 Sqlitetest_window_Init(tls, interp) 57299 Sqlitetestvdbecov_Init(tls, interp) 57300 57301 tcl.XTcl_CreateObjCommand(tls, 57302 interp, ts+37405, *(*uintptr)(unsafe.Pointer(&struct { 57303 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57304 }{load_testfixture_extensions})), uintptr(0), uintptr(0)) 57305 return uintptr(0) 57306 } 57307 57308 func load_testfixture_extensions(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57309 var slave uintptr 57310 if objc != 2 { 57311 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+37433) 57312 return TCL_ERROR 57313 } 57314 57315 slave = tcl.XTcl_GetSlave(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 57316 if !(slave != 0) { 57317 return TCL_ERROR 57318 } 57319 57320 sqlite3TestInit(tls, slave) 57321 return TCL_OK 57322 } 57323 57324 type tclvar_vtab1 = struct { 57325 Fbase sqlite3_vtab 57326 Finterp uintptr 57327 } 57328 57329 type tclvar_vtab = tclvar_vtab1 57330 type tclvar_cursor1 = struct { 57331 Fbase sqlite3_vtab_cursor 57332 FpList1 uintptr 57333 FpList2 uintptr 57334 Fi1 int32 57335 Fi2 int32 57336 } 57337 57338 type tclvar_cursor = tclvar_cursor1 57339 57340 func tclvarConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 57341 var pVtab uintptr 57342 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_vtab{}))) 57343 if pVtab == uintptr(0) { 57344 return SQLITE_NOMEM 57345 } 57346 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 57347 (*tclvar_vtab)(unsafe.Pointer(pVtab)).Finterp = pAux 57348 sqlite3.Xsqlite3_declare_vtab(tls, db, uintptr(unsafe.Pointer(&zSchema))) 57349 return SQLITE_OK 57350 } 57351 57352 var zSchema = *(*[100]int8)(unsafe.Pointer(ts + 37439)) 57353 57354 func tclvarDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 57355 sqlite3.Xsqlite3_free(tls, pVtab) 57356 return SQLITE_OK 57357 } 57358 57359 func tclvarOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 57360 var pCur uintptr 57361 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_cursor{}))) 57362 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 57363 return SQLITE_OK 57364 } 57365 57366 func tclvarClose(tls *libc.TLS, cur uintptr) int32 { 57367 var pCur uintptr = cur 57368 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 57369 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57370 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 57371 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57372 tcl.XTclFreeObj(tls, _objPtr) 57373 } 57374 } 57375 } 57376 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57377 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57378 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57379 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57380 tcl.XTclFreeObj(tls, _objPtr) 57381 } 57382 } 57383 } 57384 sqlite3.Xsqlite3_free(tls, pCur) 57385 return SQLITE_OK 57386 } 57387 57388 func next2(tls *libc.TLS, interp uintptr, pCur uintptr, pObj uintptr) int32 { 57389 bp := tls.Alloc(4) 57390 defer tls.Free(4) 57391 57392 var p uintptr 57393 57394 if pObj != 0 { 57395 if !(int32((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) != 0) { 57396 p = tcl.XTcl_NewStringObj(tls, ts+37539, -1) 57397 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 57398 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, pObj) 57399 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 57400 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57401 var _objPtr uintptr = p 57402 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57403 tcl.XTclFreeObj(tls, _objPtr) 57404 } 57405 } 57406 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = tcl.XTcl_GetObjResult(tls, interp) 57407 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount++ 57408 57409 } else { 57410 *(*int32)(unsafe.Pointer(bp)) = 0 57411 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2++ 57412 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, bp) 57413 if (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 >= *(*int32)(unsafe.Pointer(bp)) { 57414 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57415 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57416 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57417 tcl.XTclFreeObj(tls, _objPtr) 57418 } 57419 } 57420 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 57421 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 57422 return 0 57423 } 57424 } 57425 } 57426 57427 return 1 57428 } 57429 57430 func tclvarNext(tls *libc.TLS, cur uintptr) int32 { 57431 bp := tls.Alloc(16) 57432 defer tls.Free(16) 57433 57434 *(*int32)(unsafe.Pointer(bp)) = 0 57435 var ok int32 = 0 57436 57437 var pCur uintptr = cur 57438 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 57439 57440 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, bp) 57441 for !(ok != 0) && (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 < *(*int32)(unsafe.Pointer(bp)) { 57442 tcl.XTcl_ListObjIndex(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+8) 57443 ok = next2(tls, interp, pCur, *(*uintptr)(unsafe.Pointer(bp + 8))) 57444 if !(ok != 0) { 57445 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1++ 57446 } 57447 } 57448 57449 return 0 57450 } 57451 57452 func tclvarFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 57453 var pCur uintptr = pVtabCursor 57454 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).Finterp 57455 var p uintptr = tcl.XTcl_NewStringObj(tls, ts+37551, -1) 57456 57457 var zEq uintptr = ts + 584 57458 var zMatch uintptr = ts + 584 57459 var zGlob uintptr = ts + 584 57460 var zRegexp uintptr = ts + 584 57461 var zLike uintptr = ts + 584 57462 var i int32 57463 57464 for i = 0; *(*int8)(unsafe.Pointer(idxStr + uintptr(i))) != 0; i++ { 57465 switch int32(*(*int8)(unsafe.Pointer(idxStr + uintptr(i)))) { 57466 case 'e': 57467 zEq = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57468 break 57469 case 'm': 57470 zMatch = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57471 break 57472 case 'g': 57473 zGlob = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57474 break 57475 case 'r': 57476 zRegexp = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57477 break 57478 case 'l': 57479 zLike = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57480 break 57481 default: 57482 } 57483 } 57484 57485 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 57486 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zEq, -1)) 57487 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zMatch, -1)) 57488 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zGlob, -1)) 57489 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zRegexp, -1)) 57490 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zLike, -1)) 57491 57492 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 57493 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 57494 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57495 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 57496 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57497 tcl.XTclFreeObj(tls, _objPtr) 57498 } 57499 } 57500 } 57501 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57502 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57503 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57504 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57505 tcl.XTclFreeObj(tls, _objPtr) 57506 } 57507 } 57508 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 57509 } 57510 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 = 0 57511 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 57512 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 = tcl.XTcl_GetObjResult(tls, interp) 57513 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount++ 57514 57515 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 57516 var _objPtr uintptr = p 57517 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57518 tcl.XTclFreeObj(tls, _objPtr) 57519 } 57520 } 57521 return tclvarNext(tls, pVtabCursor) 57522 } 57523 57524 func tclvarColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 57525 bp := tls.Alloc(32) 57526 defer tls.Free(32) 57527 57528 var z1 uintptr 57529 var z2 uintptr = ts + 584 57530 var pCur uintptr = cur 57531 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 57532 57533 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+16) 57534 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2, bp+24) 57535 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 57536 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 57537 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 57538 } 57539 switch i { 57540 case 0: 57541 { 57542 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 57543 break 57544 57545 } 57546 case 1: 57547 { 57548 sqlite3.Xsqlite3_result_text(tls, ctx, z2, -1, libc.UintptrFromInt32(-1)) 57549 break 57550 57551 } 57552 case 2: 57553 { 57554 var pVal uintptr = tcl.XTcl_GetVar2Ex(tls, interp, z1, func() uintptr { 57555 if *(*int8)(unsafe.Pointer(z2)) != 0 { 57556 return z2 57557 } 57558 return uintptr(0) 57559 }(), TCL_GLOBAL_ONLY) 57560 sqlite3.Xsqlite3_result_text(tls, ctx, tcl.XTcl_GetString(tls, pVal), -1, libc.UintptrFromInt32(-1)) 57561 break 57562 57563 } 57564 case 3: 57565 { 57566 var z3 uintptr 57567 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 57568 z3 = sqlite3.Xsqlite3_mprintf(tls, ts+37569, libc.VaList(bp, z1, z2)) 57569 sqlite3.Xsqlite3_result_text(tls, ctx, z3, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 57570 } else { 57571 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 57572 } 57573 break 57574 57575 } 57576 } 57577 return SQLITE_OK 57578 } 57579 57580 func tclvarRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 57581 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 57582 return SQLITE_OK 57583 } 57584 57585 func tclvarEof(tls *libc.TLS, cur uintptr) int32 { 57586 var pCur uintptr = cur 57587 return func() int32 { 57588 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57589 return 0 57590 } 57591 return 1 57592 }() 57593 } 57594 57595 func tclvarAddToIdxstr(tls *libc.TLS, zStr uintptr, x int8) int32 { 57596 var i int32 57597 for i = 0; *(*int8)(unsafe.Pointer(zStr + uintptr(i))) != 0; i++ { 57598 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) == int32(x) { 57599 return 1 57600 } 57601 } 57602 *(*int8)(unsafe.Pointer(zStr + uintptr(i))) = x 57603 *(*int8)(unsafe.Pointer(zStr + uintptr(i+1))) = int8(0) 57604 return 0 57605 } 57606 57607 func tclvarSetOmit(tls *libc.TLS, interp uintptr) int32 { 57608 bp := tls.Alloc(4) 57609 defer tls.Free(4) 57610 57611 var rc int32 57612 *(*int32)(unsafe.Pointer(bp)) = 0 57613 var pRes uintptr 57614 rc = tcl.XTcl_Eval(tls, interp, 57615 ts+37576) 57616 if rc == TCL_OK { 57617 pRes = tcl.XTcl_GetObjResult(tls, interp) 57618 rc = tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), pRes, bp) 57619 } 57620 return libc.Bool32(rc == TCL_OK && *(*int32)(unsafe.Pointer(bp)) != 0) 57621 } 57622 57623 func tclvarBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 57624 var pTab uintptr = tab 57625 var ii int32 57626 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, 32) 57627 var iStr int32 = 0 57628 57629 if zStr == uintptr(0) { 57630 return SQLITE_NOMEM 57631 } 57632 *(*int8)(unsafe.Pointer(zStr)) = int8(0) 57633 57634 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 57635 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 57636 var pUsage uintptr 57637 57638 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 57639 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 { 57640 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 57641 if 0 == tclvarAddToIdxstr(tls, zStr, int8('e')) { 57642 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57643 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 57644 } 57645 } 57646 57647 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 57648 if 0 == tclvarAddToIdxstr(tls, zStr, int8('m')) { 57649 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57650 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 57651 } 57652 } 57653 57654 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_GLOB && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57655 if 0 == tclvarAddToIdxstr(tls, zStr, int8('g')) { 57656 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57657 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57658 } 57659 } 57660 57661 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_REGEXP && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57662 if 0 == tclvarAddToIdxstr(tls, zStr, int8('r')) { 57663 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57664 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57665 } 57666 } 57667 57668 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57669 if 0 == tclvarAddToIdxstr(tls, zStr, int8('l')) { 57670 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57671 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57672 } 57673 } 57674 } 57675 } 57676 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = zStr 57677 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 57678 57679 return SQLITE_OK 57680 } 57681 57682 func tclvarUpdate(tls *libc.TLS, tab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 57683 var pTab uintptr = tab 57684 if argc == 1 { 57685 var zVar uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 57686 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zVar, uintptr(0), TCL_GLOBAL_ONLY) 57687 return SQLITE_OK 57688 } 57689 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 57690 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 57691 var zName uintptr 57692 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) != SQLITE_TEXT { 57693 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37637, 0) 57694 return SQLITE_ERROR 57695 } 57696 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 57697 if zValue != 0 { 57698 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 57699 } else { 57700 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), TCL_GLOBAL_ONLY) 57701 } 57702 return SQLITE_OK 57703 } 57704 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_TEXT && 57705 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_TEXT { 57706 var zOldName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 57707 var zNewName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 57708 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 57709 57710 if libc.Xstrcmp(tls, zOldName, zNewName) != 0 || zValue == uintptr(0) { 57711 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zOldName, uintptr(0), TCL_GLOBAL_ONLY) 57712 } 57713 if zValue != uintptr(0) { 57714 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zNewName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 57715 } 57716 return SQLITE_OK 57717 } 57718 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37672, 0) 57719 return SQLITE_ERROR 57720 } 57721 57722 var tclvarModule = sqlite3_module{ 57723 FxCreate: 0, 57724 FxConnect: 0, 57725 FxBestIndex: 0, 57726 FxDisconnect: 0, 57727 FxDestroy: 0, 57728 FxOpen: 0, 57729 FxClose: 0, 57730 FxFilter: 0, 57731 FxNext: 0, 57732 FxEof: 0, 57733 FxColumn: 0, 57734 FxRowid: 0, 57735 FxUpdate: 0, 57736 } 57737 57738 func register_tclvar_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57739 bp := tls.Alloc(8) 57740 defer tls.Free(8) 57741 57742 var rc int32 = TCL_OK 57743 57744 if objc != 2 { 57745 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 57746 return TCL_ERROR 57747 } 57748 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 57749 return TCL_ERROR 57750 } 57751 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+29859, uintptr(unsafe.Pointer(&tclvarModule)), interp) 57752 rc = tcl.XTcl_Eval(tls, interp, 57753 ts+37703) 57754 return rc 57755 } 57756 57757 func Sqlitetesttclvar_Init(tls *libc.TLS, interp uintptr) int32 { 57758 var i int32 57759 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd13))/uint64(unsafe.Sizeof(struct { 57760 FzName uintptr 57761 FxProc uintptr 57762 FclientData uintptr 57763 }{})); i++ { 57764 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd13[i].FzName, 57765 aObjCmd13[i].FxProc, aObjCmd13[i].FclientData, uintptr(0)) 57766 } 57767 return TCL_OK 57768 } 57769 57770 var aObjCmd13 = [1]struct { 57771 FzName uintptr 57772 FxProc uintptr 57773 FclientData uintptr 57774 }{ 57775 {FzName: ts + 38239, FxProc: 0}, 57776 } 57777 57778 type SqlThread1 = struct { 57779 Fparent Tcl_ThreadId 57780 Finterp uintptr 57781 FzScript uintptr 57782 FzVarname uintptr 57783 } 57784 57785 type SqlThread = SqlThread1 57786 57787 type EvalEvent1 = struct { 57788 Fbase Tcl_Event 57789 FzScript uintptr 57790 Finterp uintptr 57791 } 57792 57793 type EvalEvent = EvalEvent1 57794 57795 func tclScriptEvent(tls *libc.TLS, evPtr uintptr, flags int32) int32 { 57796 var rc int32 57797 var p uintptr = evPtr 57798 rc = tcl.XTcl_Eval(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp, (*EvalEvent)(unsafe.Pointer(p)).FzScript) 57799 if rc != TCL_OK { 57800 tcl.XTcl_BackgroundError(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp) 57801 } 57802 _ = flags 57803 return 1 57804 } 57805 57806 func postToParent(tls *libc.TLS, p uintptr, pScript uintptr) { 57807 bp := tls.Alloc(4) 57808 defer tls.Free(4) 57809 57810 var pEvent uintptr 57811 var zMsg uintptr 57812 57813 zMsg = tcl.XTcl_GetStringFromObj(tls, pScript, bp) 57814 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp)))+uint64(1))) 57815 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 57816 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 57817 f func(*libc.TLS, uintptr, int32) int32 57818 }{tclScriptEvent})) 57819 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 57820 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp))+1)) 57821 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 57822 57823 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 57824 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 57825 } 57826 57827 func tclScriptThread(tls *libc.TLS, pSqlThread ClientData) { 57828 var interp uintptr 57829 var pRes uintptr 57830 var pList uintptr 57831 var rc int32 57832 var p uintptr = pSqlThread 57833 57834 interp = tcl.XTcl_CreateInterp(tls) 57835 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 57836 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57837 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 57838 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 57839 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57840 }{sqlthread_proc})), pSqlThread, uintptr(0)) 57841 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 57842 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57843 }{blocking_step_proc})), uintptr(0), uintptr(0)) 57844 tcl.XTcl_CreateObjCommand(tls, interp, 57845 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 57846 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57847 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 57848 tcl.XTcl_CreateObjCommand(tls, interp, 57849 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 57850 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57851 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 57852 Sqlitetest1_Init(tls, interp) 57853 Sqlitetest_mutex_Init(tls, interp) 57854 Sqlite3_Init(tls, interp) 57855 57856 rc = tcl.XTcl_Eval(tls, interp, (*SqlThread)(unsafe.Pointer(p)).FzScript) 57857 pRes = tcl.XTcl_GetObjResult(tls, interp) 57858 pList = tcl.XTcl_NewObj(tls) 57859 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 57860 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 57861 57862 if rc != TCL_OK { 57863 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+9674, -1)) 57864 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 57865 postToParent(tls, p, pList) 57866 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57867 var _objPtr uintptr = pList 57868 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57869 tcl.XTclFreeObj(tls, _objPtr) 57870 } 57871 } 57872 pList = tcl.XTcl_NewObj(tls) 57873 } 57874 57875 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+38367, -1)) 57876 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, (*SqlThread)(unsafe.Pointer(p)).FzVarname, -1)) 57877 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 57878 postToParent(tls, p, pList) 57879 57880 tcl.XTcl_Free(tls, p) 57881 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57882 var _objPtr uintptr = pList 57883 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57884 tcl.XTclFreeObj(tls, _objPtr) 57885 } 57886 } 57887 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 57888 var _objPtr uintptr = pRes 57889 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57890 tcl.XTclFreeObj(tls, _objPtr) 57891 } 57892 } 57893 tcl.XTcl_DeleteInterp(tls, interp) 57894 for tcl.XTcl_DoOneEvent(tls, libc.CplInt32(int32(1)<<1)|int32(1)<<1) != 0 { 57895 } 57896 tcl.XTcl_ExitThread(tls, 0) 57897 57898 } 57899 57900 func sqlthread_spawn(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57901 bp := tls.Alloc(32) 57902 defer tls.Free(32) 57903 57904 var pNew uintptr 57905 var rc int32 57906 57907 var zVarname uintptr 57908 57909 var zScript uintptr 57910 57911 var nStack int32 = 0 57912 var flags int32 = 0000 57913 57914 _ = clientData 57915 _ = objc 57916 57917 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 57918 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+20) 57919 57920 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlThread{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(*(*int32)(unsafe.Pointer(bp + 20)))+uint64(2))) 57921 (*SqlThread)(unsafe.Pointer(pNew)).FzVarname = pNew + 1*32 57922 (*SqlThread)(unsafe.Pointer(pNew)).FzScript = (*SqlThread)(unsafe.Pointer(pNew)).FzVarname + uintptr(*(*int32)(unsafe.Pointer(bp + 16))+1) 57923 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzVarname, zVarname, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 57924 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 20))+1)) 57925 (*SqlThread)(unsafe.Pointer(pNew)).Fparent = tcl.XTcl_GetCurrentThread(tls) 57926 (*SqlThread)(unsafe.Pointer(pNew)).Finterp = interp 57927 57928 rc = tcl.XTcl_CreateThread(tls, bp+24, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{tclScriptThread})), pNew, nStack, flags) 57929 if rc != TCL_OK { 57930 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38371, 0)) 57931 tcl.XTcl_Free(tls, pNew) 57932 return TCL_ERROR 57933 } 57934 57935 return TCL_OK 57936 } 57937 57938 func sqlthread_parent(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57939 bp := tls.Alloc(20) 57940 defer tls.Free(20) 57941 57942 var pEvent uintptr 57943 var zMsg uintptr 57944 57945 var p uintptr = clientData 57946 57947 _ = objc 57948 57949 if p == uintptr(0) { 57950 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38399, 0)) 57951 return TCL_ERROR 57952 } 57953 57954 zMsg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 57955 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(1))) 57956 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 57957 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 57958 f func(*libc.TLS, uintptr, int32) int32 57959 }{tclScriptEvent})) 57960 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 57961 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 57962 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 57963 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 57964 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 57965 57966 return TCL_OK 57967 } 57968 57969 func xBusy(tls *libc.TLS, pArg uintptr, nBusy int32) int32 { 57970 _ = pArg 57971 _ = nBusy 57972 sqlite3.Xsqlite3_sleep(tls, 50) 57973 return 1 57974 } 57975 57976 func sqlthread_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57977 bp := tls.Alloc(124) 57978 defer tls.Free(124) 57979 57980 var zFilename uintptr 57981 57982 _ = clientData 57983 _ = objc 57984 57985 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 57986 sqlite3.Xsqlite3_open(tls, zFilename, bp+16) 57987 Md5_Register(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), uintptr(0), uintptr(0)) 57988 sqlite3.Xsqlite3_busy_handler(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(&struct { 57989 f func(*libc.TLS, uintptr, int32) int32 57990 }{xBusy})), uintptr(0)) 57991 57992 if sqlite3TestMakePointerStr(tls, interp, bp+24, *(*uintptr)(unsafe.Pointer(bp + 16))) != 0 { 57993 return TCL_ERROR 57994 } 57995 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+24, 0)) 57996 57997 return TCL_OK 57998 } 57999 58000 func sqlthread_id(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58001 var id Tcl_ThreadId = tcl.XTcl_GetCurrentThread(tls) 58002 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(id))) 58003 _ = clientData 58004 _ = objc 58005 _ = objv 58006 return TCL_OK 58007 } 58008 58009 func sqlthread_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58010 bp := tls.Alloc(164) 58011 defer tls.Free(164) 58012 58013 *(*[5]struct { 58014 FzName uintptr 58015 FxProc uintptr 58016 FnArg int32 58017 F__ccgo_pad1 [4]byte 58018 FzUsage uintptr 58019 })(unsafe.Pointer(bp)) = [5]struct { 58020 FzName uintptr 58021 FxProc uintptr 58022 FnArg int32 58023 F__ccgo_pad1 [4]byte 58024 FzUsage uintptr 58025 }{ 58026 {FzName: ts + 38416, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58027 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58028 }{sqlthread_parent})), FnArg: 1, FzUsage: ts + 10187}, 58029 {FzName: ts + 38423, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58030 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58031 }{sqlthread_spawn})), FnArg: 2, FzUsage: ts + 38429}, 58032 {FzName: ts + 37033, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58033 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58034 }{sqlthread_open})), FnArg: 1, FzUsage: ts + 38444}, 58035 {FzName: ts + 38451, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58036 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58037 }{sqlthread_id})), FzUsage: ts + 584}, 58038 {}, 58039 } 58040 var pSub uintptr 58041 var rc int32 58042 58043 if objc < 2 { 58044 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 58045 return TCL_ERROR 58046 } 58047 58048 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 58049 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(struct { 58050 FzName uintptr 58051 FxProc uintptr 58052 FnArg int32 58053 F__ccgo_pad1 [4]byte 58054 FzUsage uintptr 58055 }{})), ts+2014, 0, bp+160) 58056 if rc != TCL_OK { 58057 return rc 58058 } 58059 pSub = bp + uintptr(*(*int32)(unsafe.Pointer(bp + 160)))*32 58060 58061 if objc < (*struct { 58062 FzName uintptr 58063 FxProc uintptr 58064 FnArg int32 58065 F__ccgo_pad1 [4]byte 58066 FzUsage uintptr 58067 })(unsafe.Pointer(pSub)).FnArg+2 { 58068 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*struct { 58069 FzName uintptr 58070 FxProc uintptr 58071 FnArg int32 58072 F__ccgo_pad1 [4]byte 58073 FzUsage uintptr 58074 })(unsafe.Pointer(pSub)).FzUsage) 58075 return TCL_ERROR 58076 } 58077 58078 return (*struct { 58079 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58080 })(unsafe.Pointer(&struct{ uintptr }{(*struct { 58081 FzName uintptr 58082 FxProc uintptr 58083 FnArg int32 58084 F__ccgo_pad1 [4]byte 58085 FzUsage uintptr 58086 })(unsafe.Pointer(pSub)).FxProc})).f(tls, clientData, interp, objc, objv) 58087 } 58088 58089 func clock_seconds_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58090 bp := tls.Alloc(16) 58091 defer tls.Free(16) 58092 58093 tcl.XTcl_GetTime(tls, bp) 58094 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32((*Tcl_Time)(unsafe.Pointer(bp)).Fsec))) 58095 _ = clientData 58096 _ = objc 58097 _ = objv 58098 return TCL_OK 58099 } 58100 58101 type UnlockNotification1 = struct { 58102 Ffired int32 58103 F__ccgo_pad1 [4]byte 58104 Fcond pthread_cond_t 58105 Fmutex pthread_mutex_t 58106 } 58107 58108 type UnlockNotification = UnlockNotification1 58109 58110 func unlock_notify_cb(tls *libc.TLS, apArg uintptr, nArg int32) { 58111 var i int32 58112 for i = 0; i < nArg; i++ { 58113 var p uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 58114 libc.Xpthread_mutex_lock(tls, p+16) 58115 (*UnlockNotification)(unsafe.Pointer(p)).Ffired = 1 58116 libc.Xpthread_cond_signal(tls, p+8) 58117 libc.Xpthread_mutex_unlock(tls, p+16) 58118 } 58119 } 58120 58121 func wait_for_unlock_notify(tls *libc.TLS, db uintptr) int32 { 58122 bp := tls.Alloc(24) 58123 defer tls.Free(24) 58124 58125 var rc int32 58126 58127 (*UnlockNotification)(unsafe.Pointer(bp)).Ffired = 0 58128 libc.Xpthread_mutex_init(tls, bp+16, uintptr(0)) 58129 libc.Xpthread_cond_init(tls, bp+8, uintptr(0)) 58130 58131 rc = sqlite3.Xsqlite3_unlock_notify(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 58132 f func(*libc.TLS, uintptr, int32) 58133 }{unlock_notify_cb})), bp) 58134 58135 if rc == SQLITE_OK { 58136 libc.Xpthread_mutex_lock(tls, bp+16) 58137 if !((*UnlockNotification)(unsafe.Pointer(bp)).Ffired != 0) { 58138 libc.Xpthread_cond_wait(tls, bp+8, bp+16) 58139 } 58140 libc.Xpthread_mutex_unlock(tls, bp+16) 58141 } 58142 58143 libc.Xpthread_cond_destroy(tls, bp+8) 58144 libc.Xpthread_mutex_destroy(tls, bp+16) 58145 58146 return rc 58147 } 58148 58149 func sqlite3_blocking_step(tls *libc.TLS, pStmt uintptr) int32 { 58150 var rc int32 58151 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt)) { 58152 rc = wait_for_unlock_notify(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt)) 58153 if rc != SQLITE_OK { 58154 break 58155 } 58156 sqlite3.Xsqlite3_reset(tls, pStmt) 58157 } 58158 return rc 58159 } 58160 58161 func sqlite3_blocking_prepare_v2(tls *libc.TLS, db uintptr, zSql uintptr, nSql int32, ppStmt uintptr, pz uintptr) int32 { 58162 var rc int32 58163 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, nSql, ppStmt, pz)) { 58164 rc = wait_for_unlock_notify(tls, db) 58165 if rc != SQLITE_OK { 58166 break 58167 } 58168 } 58169 return rc 58170 } 58171 58172 func blocking_step_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58173 var pStmt uintptr 58174 var rc int32 58175 58176 if objc != 2 { 58177 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 58178 return TCL_ERROR 58179 } 58180 58181 pStmt = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58182 rc = sqlite3_blocking_step(tls, pStmt) 58183 58184 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 58185 return TCL_OK 58186 } 58187 58188 func blocking_prepare_v2_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58189 bp := tls.Alloc(162) 58190 defer tls.Free(162) 58191 58192 var zSql uintptr 58193 58194 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 58195 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 58196 58197 var rc int32 58198 var isBlocking int32 = libc.BoolInt32(!(clientData == uintptr(0))) 58199 58200 if objc != 5 && objc != 4 { 58201 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 58202 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 58203 return TCL_ERROR 58204 } 58205 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 58206 return TCL_ERROR 58207 } 58208 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58209 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 58210 return TCL_ERROR 58211 } 58212 58213 if isBlocking != 0 { 58214 rc = sqlite3_blocking_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 58215 } else { 58216 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 58217 } 58218 58219 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 58220 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 58221 *(*int32)(unsafe.Pointer(bp + 88)) = int32(int64(*(*int32)(unsafe.Pointer(bp + 88))) - (int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 58222 } 58223 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) 58224 } 58225 if rc != SQLITE_OK { 58226 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+38454, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc))) 58227 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 58228 return TCL_ERROR 58229 } 58230 58231 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 58232 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 58233 return TCL_ERROR 58234 } 58235 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 58236 } 58237 return TCL_OK 58238 } 58239 58240 func SqlitetestThread_Init(tls *libc.TLS, interp uintptr) int32 { 58241 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 58242 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58243 }{sqlthread_proc})), uintptr(0), uintptr(0)) 58244 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 58245 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58246 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 58247 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 58248 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58249 }{blocking_step_proc})), uintptr(0), uintptr(0)) 58250 tcl.XTcl_CreateObjCommand(tls, interp, 58251 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 58252 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58253 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 58254 tcl.XTcl_CreateObjCommand(tls, interp, 58255 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 58256 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58257 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 58258 return TCL_OK 58259 } 58260 58261 func Sqlitetestvdbecov_Init(tls *libc.TLS, interp uintptr) int32 { 58262 return TCL_OK 58263 } 58264 58265 type Testvfs1 = struct { 58266 FzName uintptr 58267 FpParent uintptr 58268 FpVfs uintptr 58269 Finterp uintptr 58270 FpScript uintptr 58271 FpBuffer uintptr 58272 FisNoshm int32 58273 FisFullshm int32 58274 Fmask int32 58275 Fioerr_err TestFaultInject 58276 Ffull_err TestFaultInject 58277 Fcantopen_err TestFaultInject 58278 FiDevchar int32 58279 FiSectorsize int32 58280 } 58281 58282 type Testvfs = Testvfs1 58283 type TestvfsBuffer1 = struct { 58284 FzFile uintptr 58285 Fpgsz int32 58286 F__ccgo_pad1 [4]byte 58287 FaPage [1024]uintptr 58288 FpFile uintptr 58289 FpNext uintptr 58290 } 58291 58292 type TestvfsBuffer = TestvfsBuffer1 58293 type TestvfsFile1 = struct { 58294 Fbase sqlite3_file 58295 FpFd uintptr 58296 } 58297 58298 type TestvfsFile = TestvfsFile1 58299 type TestvfsFd1 = struct { 58300 FpVfs uintptr 58301 FzFilename uintptr 58302 FpReal uintptr 58303 FpShmId uintptr 58304 FpShm uintptr 58305 Fexcllock u32 58306 Fsharedlock u32 58307 FpNext uintptr 58308 } 58309 58310 type TestvfsFd = TestvfsFd1 58311 58312 type TestFaultInject1 = struct { 58313 FiCnt int32 58314 FeFault int32 58315 FnFail int32 58316 } 58317 58318 type TestFaultInject = TestFaultInject1 58319 58320 var tvfs_io_methods = sqlite3_io_methods{ 58321 FiVersion: 3, 58322 FxClose: 0, 58323 FxRead: 0, 58324 FxWrite: 0, 58325 FxTruncate: 0, 58326 FxSync: 0, 58327 FxFileSize: 0, 58328 FxLock: 0, 58329 FxUnlock: 0, 58330 FxCheckReservedLock: 0, 58331 FxFileControl: 0, 58332 FxSectorSize: 0, 58333 FxDeviceCharacteristics: 0, 58334 FxShmMap: 0, 58335 FxShmLock: 0, 58336 FxShmBarrier: 0, 58337 FxShmUnmap: 0, 58338 FxFetch: 0, 58339 FxUnfetch: 0, 58340 } 58341 58342 func tvfsResultCode(tls *libc.TLS, p uintptr, pRc uintptr) int32 { 58343 bp := tls.Alloc(144) 58344 defer tls.Free(144) 58345 58346 *(*[9]errcode)(unsafe.Pointer(bp)) = [9]errcode{ 58347 {FzCode: ts + 2127}, 58348 {FeCode: SQLITE_ERROR, FzCode: ts + 2114}, 58349 {FeCode: SQLITE_IOERR, FzCode: ts + 38458}, 58350 {FeCode: SQLITE_LOCKED, FzCode: ts + 38471}, 58351 {FeCode: SQLITE_BUSY, FzCode: ts + 38485}, 58352 {FeCode: SQLITE_READONLY, FzCode: ts + 38497}, 58353 {FeCode: SQLITE_READONLY | int32(5)<<8, FzCode: ts + 38513}, 58354 {FeCode: SQLITE_NOTFOUND, FzCode: ts + 38538}, 58355 {FeCode: -1, FzCode: ts + 38554}, 58356 } 58357 var z uintptr 58358 var i int32 58359 58360 z = tcl.XTcl_GetStringResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58361 for i = 0; i < int32(uint64(unsafe.Sizeof([9]errcode{}))/uint64(unsafe.Sizeof(errcode{}))); i++ { 58362 if 0 == libc.Xstrcmp(tls, z, (*errcode)(unsafe.Pointer(bp+uintptr(i)*16)).FzCode) { 58363 *(*int32)(unsafe.Pointer(pRc)) = (*errcode)(unsafe.Pointer(bp + uintptr(i)*16)).FeCode 58364 return 1 58365 } 58366 } 58367 58368 return 0 58369 } 58370 58371 type errcode = struct { 58372 FeCode int32 58373 F__ccgo_pad1 [4]byte 58374 FzCode uintptr 58375 } 58376 58377 func tvfsInjectFault(tls *libc.TLS, p uintptr) int32 { 58378 var ret int32 = 0 58379 if (*TestFaultInject)(unsafe.Pointer(p)).FeFault != 0 { 58380 (*TestFaultInject)(unsafe.Pointer(p)).FiCnt-- 58381 if (*TestFaultInject)(unsafe.Pointer(p)).FiCnt == 0 || (*TestFaultInject)(unsafe.Pointer(p)).FiCnt < 0 && (*TestFaultInject)(unsafe.Pointer(p)).FeFault == FAULT_INJECT_PERSISTENT { 58382 ret = 1 58383 (*TestFaultInject)(unsafe.Pointer(p)).FnFail++ 58384 } 58385 } 58386 return ret 58387 } 58388 58389 func tvfsInjectIoerr(tls *libc.TLS, p uintptr) int32 { 58390 return tvfsInjectFault(tls, p+60) 58391 } 58392 58393 func tvfsInjectFullerr(tls *libc.TLS, p uintptr) int32 { 58394 return tvfsInjectFault(tls, p+72) 58395 } 58396 58397 func tvfsInjectCantopenerr(tls *libc.TLS, p uintptr) int32 { 58398 return tvfsInjectFault(tls, p+84) 58399 } 58400 58401 func tvfsExecTcl(tls *libc.TLS, p uintptr, zMethod uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr, arg4 uintptr) { 58402 var rc int32 58403 var pEval uintptr 58404 58405 pEval = tcl.XTcl_DuplicateObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 58406 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 58407 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zMethod, -1)) 58408 if arg1 != 0 { 58409 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg1) 58410 } 58411 if arg2 != 0 { 58412 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg2) 58413 } 58414 if arg3 != 0 { 58415 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg3) 58416 } 58417 if arg4 != 0 { 58418 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg4) 58419 } 58420 58421 rc = tcl.XTcl_EvalObjEx(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 58422 if rc != TCL_OK { 58423 tcl.XTcl_BackgroundError(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58424 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58425 } 58426 } 58427 58428 func tvfsClose(tls *libc.TLS, pFile uintptr) int32 { 58429 var pTestfile uintptr = pFile 58430 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd 58431 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58432 58433 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CLOSE_MASK != 0 { 58434 tvfsExecTcl(tls, p, ts+35556, 58435 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58436 } 58437 58438 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId != 0 { 58439 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58440 var _objPtr uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId 58441 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58442 tcl.XTclFreeObj(tls, _objPtr) 58443 } 58444 } 58445 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 58446 } 58447 if (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods != 0 { 58448 tcl.XTcl_Free(tls, (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods) 58449 } 58450 sqlite3.Xsqlite3OsClose(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58451 tcl.XTcl_Free(tls, pFd) 58452 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = uintptr(0) 58453 return SQLITE_OK 58454 } 58455 58456 func tvfsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 58457 bp := tls.Alloc(4) 58458 defer tls.Free(4) 58459 58460 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58461 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58462 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58463 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 { 58464 tvfsExecTcl(tls, p, ts+35563, 58465 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58466 tvfsResultCode(tls, p, bp) 58467 } 58468 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58469 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58470 } 58471 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58472 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsRead(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 58473 } 58474 return *(*int32)(unsafe.Pointer(bp)) 58475 } 58476 58477 func tvfsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 58478 bp := tls.Alloc(4) 58479 defer tls.Free(4) 58480 58481 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58482 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58483 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58484 58485 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 { 58486 tvfsExecTcl(tls, p, ts+35569, 58487 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58488 tcl.XTcl_NewWideIntObj(tls, iOfst), tcl.XTcl_NewIntObj(tls, iAmt)) 58489 tvfsResultCode(tls, p, bp) 58490 if *(*int32)(unsafe.Pointer(bp)) < 0 { 58491 return SQLITE_OK 58492 } 58493 } 58494 58495 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 58496 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 58497 } 58498 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58499 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58500 } 58501 58502 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58503 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsWrite(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 58504 } 58505 return *(*int32)(unsafe.Pointer(bp)) 58506 } 58507 58508 func tvfsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 58509 bp := tls.Alloc(4) 58510 defer tls.Free(4) 58511 58512 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58513 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58514 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58515 58516 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_TRUNCATE_MASK != 0 { 58517 tvfsExecTcl(tls, p, ts+35576, 58518 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58519 tvfsResultCode(tls, p, bp) 58520 } 58521 58522 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58523 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsTruncate(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, size) 58524 } 58525 return *(*int32)(unsafe.Pointer(bp)) 58526 } 58527 58528 func tvfsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 58529 bp := tls.Alloc(4) 58530 defer tls.Free(4) 58531 58532 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58533 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58534 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58535 58536 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SYNC_MASK != 0 { 58537 var zFlags uintptr = uintptr(0) 58538 58539 switch flags { 58540 case SQLITE_SYNC_NORMAL: 58541 zFlags = ts + 16397 58542 break 58543 fallthrough 58544 case SQLITE_SYNC_FULL: 58545 zFlags = ts + 18291 58546 break 58547 fallthrough 58548 case SQLITE_SYNC_NORMAL | SQLITE_SYNC_DATAONLY: 58549 zFlags = ts + 38566 58550 break 58551 fallthrough 58552 case SQLITE_SYNC_FULL | SQLITE_SYNC_DATAONLY: 58553 zFlags = ts + 38582 58554 break 58555 fallthrough 58556 default: 58557 } 58558 58559 tvfsExecTcl(tls, p, ts+27843, 58560 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58561 tcl.XTcl_NewStringObj(tls, zFlags, -1), uintptr(0)) 58562 tvfsResultCode(tls, p, bp) 58563 } 58564 58565 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 58566 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 58567 } 58568 58569 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58570 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsSync(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, flags) 58571 } 58572 58573 return *(*int32)(unsafe.Pointer(bp)) 58574 } 58575 58576 func tvfsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 58577 var p uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58578 return sqlite3.Xsqlite3OsFileSize(tls, (*TestvfsFd)(unsafe.Pointer(p)).FpReal, pSize) 58579 } 58580 58581 func tvfsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58582 bp := tls.Alloc(38) 58583 defer tls.Free(38) 58584 58585 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58586 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58587 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_LOCK_MASK != 0 { 58588 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58589 tvfsExecTcl(tls, p, ts+35596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58590 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58591 } 58592 return sqlite3.Xsqlite3OsLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58593 } 58594 58595 func tvfsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58596 bp := tls.Alloc(38) 58597 defer tls.Free(38) 58598 58599 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58600 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58601 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_UNLOCK_MASK != 0 { 58602 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58603 tvfsExecTcl(tls, p, ts+35602, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58604 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58605 } 58606 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58607 return SQLITE_IOERR | int32(8)<<8 58608 } 58609 return sqlite3.Xsqlite3OsUnlock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58610 } 58611 58612 func tvfsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 58613 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58614 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58615 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CKLOCK_MASK != 0 { 58616 tvfsExecTcl(tls, p, ts+38596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58617 uintptr(0), uintptr(0), uintptr(0)) 58618 } 58619 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, pResOut) 58620 } 58621 58622 func tvfsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 58623 bp := tls.Alloc(68) 58624 defer tls.Free(68) 58625 58626 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58627 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58628 if op == SQLITE_FCNTL_PRAGMA { 58629 var argv uintptr = pArg 58630 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+9674) == 0 { 58631 var rc int32 = SQLITE_ERROR 58632 if *(*uintptr)(unsafe.Pointer(argv + 2*8)) != 0 { 58633 var z uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 58634 var x int32 = libc.Xatoi(tls, z) 58635 if x != 0 { 58636 rc = x 58637 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 58638 z++ 58639 } 58640 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x01 != 0 { 58641 z++ 58642 } 58643 } 58644 if *(*int8)(unsafe.Pointer(z)) != 0 { 58645 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, z)) 58646 } 58647 } 58648 return rc 58649 } 58650 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4794) == 0 { 58651 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 58652 return SQLITE_OK 58653 } 58654 } 58655 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FCNTL_MASK != 0 { 58656 *(*[3]Fcntl)(unsafe.Pointer(bp + 16)) = [3]Fcntl{ 58657 {FiFnctl: SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, FzFnctl: ts + 38615}, 58658 {FiFnctl: SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, FzFnctl: ts + 38634}, 58659 {FiFnctl: SQLITE_FCNTL_ZIPVFS, FzFnctl: ts + 38654}, 58660 } 58661 var i int32 58662 for i = 0; uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})); i++ { 58663 if op == (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FiFnctl { 58664 break 58665 } 58666 } 58667 if uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})) { 58668 *(*int32)(unsafe.Pointer(bp + 64)) = 0 58669 tvfsExecTcl(tls, p, ts+35624, 58670 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58671 tcl.XTcl_NewStringObj(tls, (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FzFnctl, -1), 58672 uintptr(0), uintptr(0)) 58673 tvfsResultCode(tls, p, bp+64) 58674 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 58675 return func() int32 { 58676 if *(*int32)(unsafe.Pointer(bp + 64)) < 0 { 58677 return SQLITE_OK 58678 } 58679 return *(*int32)(unsafe.Pointer(bp + 64)) 58680 }() 58681 } 58682 } 58683 } 58684 return sqlite3.Xsqlite3OsFileControl(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, op, pArg) 58685 } 58686 58687 type Fcntl = struct { 58688 FiFnctl int32 58689 F__ccgo_pad1 [4]byte 58690 FzFnctl uintptr 58691 } 58692 58693 func tvfsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 58694 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58695 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58696 if (*Testvfs)(unsafe.Pointer(p)).FiSectorsize >= 0 { 58697 return (*Testvfs)(unsafe.Pointer(p)).FiSectorsize 58698 } 58699 return sqlite3.Xsqlite3OsSectorSize(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58700 } 58701 58702 func tvfsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 58703 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58704 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58705 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar >= 0 { 58706 return (*Testvfs)(unsafe.Pointer(p)).FiDevchar 58707 } 58708 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58709 } 58710 58711 func tvfsOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 58712 bp := tls.Alloc(4) 58713 defer tls.Free(4) 58714 58715 var pTestfile uintptr = pFile 58716 var pFd uintptr 58717 var pId uintptr = uintptr(0) 58718 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58719 58720 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))) 58721 libc.Xmemset(tls, pFd, 0, uint64(unsafe.Sizeof(TestvfsFd{}))+uint64((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent)).FszOsFile)) 58722 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 58723 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 58724 (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename = zName 58725 (*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs = pVfs 58726 (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal = pFd + 1*56 58727 libc.Xmemset(tls, pTestfile, 0, uint64(unsafe.Sizeof(TestvfsFile{}))) 58728 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = pFd 58729 58730 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58731 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 { 58732 var pArg uintptr = tcl.XTcl_NewObj(tls) 58733 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 58734 if flags&SQLITE_OPEN_MAIN_DB != 0 { 58735 var z uintptr = zName + uintptr(libc.Xstrlen(tls, zName)+uint64(1)) 58736 for *(*int8)(unsafe.Pointer(z)) != 0 { 58737 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 58738 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 58739 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 58740 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 58741 } 58742 } 58743 tvfsExecTcl(tls, p, ts+27421, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), pArg, uintptr(0), uintptr(0)) 58744 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58745 var _objPtr uintptr = pArg 58746 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58747 tcl.XTclFreeObj(tls, _objPtr) 58748 } 58749 } 58750 if tvfsResultCode(tls, p, bp) != 0 { 58751 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58752 return *(*int32)(unsafe.Pointer(bp)) 58753 } 58754 } else { 58755 pId = tcl.XTcl_GetObjResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58756 } 58757 } 58758 58759 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58760 return SQLITE_IOERR 58761 } 58762 if tvfsInjectCantopenerr(tls, p) != 0 { 58763 return SQLITE_CANTOPEN 58764 } 58765 if tvfsInjectFullerr(tls, p) != 0 { 58766 return SQLITE_FULL 58767 } 58768 58769 if !(pId != 0) { 58770 pId = tcl.XTcl_NewStringObj(tls, ts+38661, -1) 58771 } 58772 (*Tcl_Obj)(unsafe.Pointer(pId)).FrefCount++ 58773 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = pId 58774 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58775 58776 *(*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) 58777 if (*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods != 0 { 58778 var pMethods uintptr 58779 var nByte int32 58780 58781 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 { 58782 nByte = int32(unsafe.Sizeof(sqlite3_io_methods{})) 58783 } else { 58784 nByte = int32(uintptr(0) + 104) 58785 } 58786 58787 pMethods = tcl.XTcl_Alloc(tls, uint32(nByte)) 58788 libc.Xmemcpy(tls, pMethods, uintptr(unsafe.Pointer(&tvfs_io_methods)), uint64(nByte)) 58789 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods)).FiVersion 58790 if (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion > (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion { 58791 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion 58792 } 58793 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 && (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FisNoshm != 0 { 58794 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmUnmap = uintptr(0) 58795 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmLock = uintptr(0) 58796 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmBarrier = uintptr(0) 58797 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmMap = uintptr(0) 58798 } 58799 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = pMethods 58800 } 58801 58802 return *(*int32)(unsafe.Pointer(bp)) 58803 } 58804 58805 func tvfsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 58806 bp := tls.Alloc(4) 58807 defer tls.Free(4) 58808 58809 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58810 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58811 58812 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_DELETE_MASK != 0 { 58813 tvfsExecTcl(tls, p, ts+35661, 58814 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewIntObj(tls, dirSync), uintptr(0), uintptr(0)) 58815 tvfsResultCode(tls, p, bp) 58816 } 58817 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58818 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsDelete(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, dirSync) 58819 } 58820 return *(*int32)(unsafe.Pointer(bp)) 58821 } 58822 58823 func tvfsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 58824 bp := tls.Alloc(4) 58825 defer tls.Free(4) 58826 58827 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58828 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_ACCESS_MASK != 0 { 58829 var zArg uintptr = uintptr(0) 58830 if flags == SQLITE_ACCESS_EXISTS { 58831 zArg = ts + 38666 58832 } 58833 if flags == SQLITE_ACCESS_READWRITE { 58834 zArg = ts + 38687 58835 } 58836 if flags == SQLITE_ACCESS_READ { 58837 zArg = ts + 38711 58838 } 58839 tvfsExecTcl(tls, p, ts+35669, 58840 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewStringObj(tls, zArg, -1), uintptr(0), uintptr(0)) 58841 if tvfsResultCode(tls, p, bp) != 0 { 58842 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58843 return *(*int32)(unsafe.Pointer(bp)) 58844 } 58845 } else { 58846 var interp uintptr = (*Testvfs)(unsafe.Pointer(p)).Finterp 58847 if TCL_OK == tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, interp), pResOut) { 58848 return SQLITE_OK 58849 } 58850 } 58851 } 58852 return sqlite3.Xsqlite3OsAccess(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, flags, pResOut) 58853 } 58854 58855 func tvfsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 58856 bp := tls.Alloc(4) 58857 defer tls.Free(4) 58858 58859 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58860 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FULLPATHNAME_MASK != 0 { 58861 tvfsExecTcl(tls, p, ts+35677, tcl.XTcl_NewStringObj(tls, zPath, -1), uintptr(0), uintptr(0), uintptr(0)) 58862 if tvfsResultCode(tls, p, bp) != 0 { 58863 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58864 return *(*int32)(unsafe.Pointer(bp)) 58865 } 58866 } 58867 } 58868 return sqlite3.Xsqlite3OsFullPathname(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, nOut, zOut) 58869 } 58870 58871 func tvfsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 58872 return sqlite3.Xsqlite3OsRandomness(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nByte, zBufOut) 58873 } 58874 58875 func tvfsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 58876 return sqlite3.Xsqlite3OsSleep(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nMicro) 58877 } 58878 58879 func tvfsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 58880 return (*struct { 58881 f func(*libc.TLS, uintptr, uintptr) int32 58882 })(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) 58883 } 58884 58885 func tvfsShmOpen(tls *libc.TLS, pFile uintptr) int32 { 58886 bp := tls.Alloc(4) 58887 defer tls.Free(4) 58888 58889 var p uintptr 58890 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58891 var pBuffer uintptr 58892 var pFd uintptr 58893 58894 pFd = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58895 p = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58896 58897 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58898 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 { 58899 tvfsExecTcl(tls, p, ts+38730, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), uintptr(0), uintptr(0), uintptr(0)) 58900 if tvfsResultCode(tls, p, bp) != 0 { 58901 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58902 return *(*int32)(unsafe.Pointer(bp)) 58903 } 58904 } 58905 } 58906 58907 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58908 return SQLITE_IOERR 58909 } 58910 58911 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 58912 if 0 == libc.Xstrcmp(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile) { 58913 break 58914 } 58915 } 58916 if !(pBuffer != 0) { 58917 var szName int32 = int32(libc.Xstrlen(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 58918 var nByte int32 = int32(uint64(unsafe.Sizeof(TestvfsBuffer{})) + uint64(szName) + uint64(1)) 58919 pBuffer = tcl.XTcl_Alloc(tls, uint32(nByte)) 58920 libc.Xmemset(tls, pBuffer, 0, uint64(nByte)) 58921 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile = pBuffer + 1*8224 58922 libc.Xmemcpy(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, uint64(szName+1)) 58923 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext = (*Testvfs)(unsafe.Pointer(p)).FpBuffer 58924 (*Testvfs)(unsafe.Pointer(p)).FpBuffer = pBuffer 58925 } 58926 58927 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile 58928 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile = pFd 58929 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = pBuffer 58930 return *(*int32)(unsafe.Pointer(bp)) 58931 } 58932 58933 func tvfsAllocPage(tls *libc.TLS, p uintptr, iPage int32, pgsz int32) { 58934 if *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) == uintptr(0) { 58935 *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) = tcl.XTcl_Alloc(tls, uint32(pgsz)) 58936 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)), 0, uint64(pgsz)) 58937 (*TestvfsBuffer)(unsafe.Pointer(p)).Fpgsz = pgsz 58938 } 58939 } 58940 58941 func tvfsShmMap(tls *libc.TLS, pFile uintptr, iPage int32, pgsz int32, isWrite int32, pp uintptr) int32 { 58942 bp := tls.Alloc(4) 58943 defer tls.Free(4) 58944 58945 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58946 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58947 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58948 58949 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58950 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58951 return (*struct { 58952 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 58953 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iPage, pgsz, isWrite, pp) 58954 } 58955 58956 if uintptr(0) == (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm { 58957 *(*int32)(unsafe.Pointer(bp)) = tvfsShmOpen(tls, pFile) 58958 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58959 return *(*int32)(unsafe.Pointer(bp)) 58960 } 58961 } 58962 58963 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 { 58964 var pArg uintptr = tcl.XTcl_NewObj(tls) 58965 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 58966 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, iPage)) 58967 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, pgsz)) 58968 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, isWrite)) 58969 tvfsExecTcl(tls, p, ts+35754, 58970 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, pArg, uintptr(0)) 58971 tvfsResultCode(tls, p, bp) 58972 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58973 var _objPtr uintptr = pArg 58974 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58975 tcl.XTclFreeObj(tls, _objPtr) 58976 } 58977 } 58978 } 58979 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58980 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58981 } 58982 58983 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && isWrite != 0 && !(int32(*(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8))) != 0) { 58984 tvfsAllocPage(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm, iPage, pgsz) 58985 } 58986 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK || *(*int32)(unsafe.Pointer(bp)) == SQLITE_READONLY { 58987 *(*uintptr)(unsafe.Pointer(pp)) = *(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8)) 58988 } 58989 58990 return *(*int32)(unsafe.Pointer(bp)) 58991 } 58992 58993 func tvfsShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 58994 bp := tls.Alloc(100) 58995 defer tls.Free(100) 58996 58997 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 58998 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58999 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59000 var nLock int32 59001 59002 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59003 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59004 return (*struct { 59005 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59006 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 59007 } 59008 59009 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 { 59010 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+16, ts+17826, libc.VaList(bp, ofst, n)) 59011 nLock = int32(libc.Xstrlen(tls, bp+16)) 59012 if flags&SQLITE_SHM_LOCK != 0 { 59013 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38739) 59014 } else { 59015 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38745) 59016 } 59017 nLock = nLock + int32(libc.Xstrlen(tls, bp+16+uintptr(nLock))) 59018 if flags&SQLITE_SHM_SHARED != 0 { 59019 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38753) 59020 } else { 59021 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38761) 59022 } 59023 tvfsExecTcl(tls, p, ts+35733, 59024 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 59025 tcl.XTcl_NewStringObj(tls, bp+16, -1), uintptr(0)) 59026 tvfsResultCode(tls, p, bp+96) 59027 } 59028 59029 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59030 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_IOERR 59031 } 59032 59033 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 59034 var isLock int32 = flags & SQLITE_SHM_LOCK 59035 var isExcl int32 = flags & SQLITE_SHM_EXCLUSIVE 59036 var mask u32 = u32((int32(1)<<n - 1) << ofst) 59037 if isLock != 0 { 59038 var p2 uintptr 59039 for p2 = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FpFile; p2 != 0; p2 = (*TestvfsFd)(unsafe.Pointer(p2)).FpNext { 59040 if p2 == pFd { 59041 continue 59042 } 59043 if (*TestvfsFd)(unsafe.Pointer(p2)).Fexcllock&mask != 0 || isExcl != 0 && (*TestvfsFd)(unsafe.Pointer(p2)).Fsharedlock&mask != 0 { 59044 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_BUSY 59045 break 59046 } 59047 } 59048 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 59049 if isExcl != 0 { 59050 *(*u32)(unsafe.Pointer(pFd + 40)) |= mask 59051 } 59052 if !(isExcl != 0) { 59053 *(*u32)(unsafe.Pointer(pFd + 44)) |= mask 59054 } 59055 } 59056 } else { 59057 if isExcl != 0 { 59058 *(*u32)(unsafe.Pointer(pFd + 40)) &= ^mask 59059 } 59060 if !(isExcl != 0) { 59061 *(*u32)(unsafe.Pointer(pFd + 44)) &= ^mask 59062 } 59063 } 59064 } 59065 59066 return *(*int32)(unsafe.Pointer(bp + 96)) 59067 } 59068 59069 func tvfsShmBarrier(tls *libc.TLS, pFile uintptr) { 59070 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59071 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59072 59073 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMBARRIER_MASK != 0 { 59074 var z uintptr 59075 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm != 0 { 59076 z = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile 59077 } else { 59078 z = ts + 584 59079 } 59080 tvfsExecTcl(tls, p, ts+35742, tcl.XTcl_NewStringObj(tls, z, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59081 } 59082 59083 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59084 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59085 (*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) 59086 return 59087 } 59088 } 59089 59090 func tvfsShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 59091 bp := tls.Alloc(4) 59092 defer tls.Free(4) 59093 59094 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59095 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59096 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59097 var pBuffer uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm 59098 var ppFd uintptr 59099 59100 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59101 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59102 return (*struct { 59103 f func(*libc.TLS, uintptr, int32) int32 59104 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, deleteFlag) 59105 } 59106 59107 if !(pBuffer != 0) { 59108 return SQLITE_OK 59109 } 59110 59111 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMCLOSE_MASK != 0 { 59112 tvfsExecTcl(tls, p, ts+35723, 59113 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59114 tvfsResultCode(tls, p, bp) 59115 } 59116 59117 for ppFd = pBuffer + 8208; *(*uintptr)(unsafe.Pointer(ppFd)) != pFd; ppFd = *(*uintptr)(unsafe.Pointer(ppFd)) + 48 { 59118 } 59119 59120 *(*uintptr)(unsafe.Pointer(ppFd)) = (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext 59121 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = uintptr(0) 59122 59123 if (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile == uintptr(0) { 59124 var i int32 59125 var pp uintptr 59126 for pp = p + 40; *(*uintptr)(unsafe.Pointer(pp)) != pBuffer; pp = *(*uintptr)(unsafe.Pointer(pp)) + 8216 { 59127 } 59128 *(*uintptr)(unsafe.Pointer(pp)) = (*TestvfsBuffer)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNext 59129 for i = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8)) != 0; i++ { 59130 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8))) 59131 } 59132 tcl.XTcl_Free(tls, pBuffer) 59133 } 59134 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 59135 59136 return *(*int32)(unsafe.Pointer(bp)) 59137 } 59138 59139 func tvfsFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 59140 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59141 return sqlite3.Xsqlite3OsFetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, iAmt, pp) 59142 } 59143 59144 func tvfsUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, p uintptr) int32 { 59145 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59146 return sqlite3.Xsqlite3OsUnfetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, p) 59147 } 59148 59149 func testvfs_obj_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59150 bp := tls.Alloc(568) 59151 defer tls.Free(568) 59152 59153 var p uintptr = cd 59154 *(*[10]TestvfsSubcmd)(unsafe.Pointer(bp + 96)) = [10]TestvfsSubcmd{ 59155 {FzName: ts + 38772}, 59156 {FzName: ts + 10138, FeCmd: uint32(1)}, 59157 {FzName: ts + 38776, FeCmd: uint32(2)}, 59158 {FzName: ts + 38783, FeCmd: uint32(3)}, 59159 {FzName: ts + 38789, FeCmd: uint32(7)}, 59160 {FzName: ts + 38797, FeCmd: uint32(8)}, 59161 {FzName: ts + 38809, FeCmd: uint32(4)}, 59162 {FzName: ts + 38816, FeCmd: uint32(5)}, 59163 {FzName: ts + 38824, FeCmd: uint32(6)}, 59164 {}, 59165 } 59166 59167 if objc < 2 { 59168 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 59169 return TCL_ERROR 59170 } 59171 if tcl.XTcl_GetIndexFromObjStruct(tls, 59172 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+96, int32(unsafe.Sizeof(TestvfsSubcmd{})), ts+38835, 0, bp+256) != 0 { 59173 return TCL_ERROR 59174 } 59175 tcl.XTcl_ResetResult(tls, interp) 59176 59177 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 59178 case uint32(0): 59179 { 59180 var pObj uintptr 59181 var rc int32 59182 var pBuffer uintptr 59183 var zName uintptr 59184 if objc != 3 && objc != 4 { 59185 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38846) 59186 return TCL_ERROR 59187 } 59188 zName = tcl.XTcl_Alloc(tls, uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname)) 59189 rc = (*struct { 59190 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59191 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FxFullPathname})).f(tls, 59192 (*Testvfs)(unsafe.Pointer(p)).FpParent, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 59193 (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname, zName) 59194 if rc != SQLITE_OK { 59195 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38859, 59196 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 59197 tcl.XTcl_Free(tls, zName) 59198 return TCL_ERROR 59199 } 59200 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 59201 if 0 == libc.Xstrcmp(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, zName) { 59202 break 59203 } 59204 } 59205 tcl.XTcl_Free(tls, zName) 59206 if !(pBuffer != 0) { 59207 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+38885, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 59208 return TCL_ERROR 59209 } 59210 if objc == 4 { 59211 var a uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+260) 59212 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 59213 if pgsz == 0 { 59214 pgsz = 65536 59215 } 59216 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256))*pgsz < *(*int32)(unsafe.Pointer(bp + 260)); *(*int32)(unsafe.Pointer(bp + 256))++ { 59217 var nByte int32 = pgsz 59218 tvfsAllocPage(tls, pBuffer, *(*int32)(unsafe.Pointer(bp + 256)), pgsz) 59219 if *(*int32)(unsafe.Pointer(bp + 260))-*(*int32)(unsafe.Pointer(bp + 256))*pgsz < pgsz { 59220 nByte = *(*int32)(unsafe.Pointer(bp + 260)) 59221 } 59222 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), a+uintptr(*(*int32)(unsafe.Pointer(bp + 256))*pgsz), uint64(nByte)) 59223 } 59224 } 59225 59226 pObj = tcl.XTcl_NewObj(tls) 59227 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))++ { 59228 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 59229 if pgsz == 0 { 59230 pgsz = 65536 59231 } 59232 tcl.XTcl_AppendObjToObj(tls, pObj, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), pgsz)) 59233 } 59234 tcl.XTcl_SetObjResult(tls, interp, pObj) 59235 break 59236 59237 } 59238 59239 case uint32(2): 59240 { 59241 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 59242 *(*int32)(unsafe.Pointer(bp + 264)) = 0 59243 var mask int32 = 0 59244 if objc != 3 { 59245 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+32419) 59246 return TCL_ERROR 59247 } 59248 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+264, bp+272) != 0 { 59249 return TCL_ERROR 59250 } 59251 tcl.XTcl_ResetResult(tls, interp) 59252 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256)) < *(*int32)(unsafe.Pointer(bp + 264)); *(*int32)(unsafe.Pointer(bp + 256))++ { 59253 var iMethod int32 59254 var zElem uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 272)) + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8))) 59255 for iMethod = 0; iMethod < int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))); iMethod++ { 59256 if libc.Xstrcmp(tls, zElem, vfsmethod[iMethod].FzName) == 0 { 59257 mask = mask | vfsmethod[iMethod].Fmask 59258 break 59259 } 59260 } 59261 if iMethod == int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))) { 59262 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+38900, zElem, 0)) 59263 return TCL_ERROR 59264 } 59265 } 59266 (*Testvfs)(unsafe.Pointer(p)).Fmask = mask 59267 break 59268 59269 } 59270 59271 case uint32(4): 59272 { 59273 if objc == 3 { 59274 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59275 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59276 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 59277 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59278 tcl.XTclFreeObj(tls, _objPtr) 59279 } 59280 } 59281 (*Testvfs)(unsafe.Pointer(p)).FpScript = uintptr(0) 59282 } 59283 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+280) 59284 if *(*int32)(unsafe.Pointer(bp + 280)) > 0 { 59285 (*Testvfs)(unsafe.Pointer(p)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59286 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 59287 } 59288 } else if objc != 2 { 59289 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 59290 return TCL_ERROR 59291 } 59292 59293 tcl.XTcl_ResetResult(tls, interp) 59294 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59295 tcl.XTcl_SetObjResult(tls, interp, (*Testvfs)(unsafe.Pointer(p)).FpScript) 59296 } 59297 59298 break 59299 59300 } 59301 59302 case uint32(8): 59303 fallthrough 59304 case uint32(3): 59305 fallthrough 59306 case uint32(7): 59307 { 59308 var pTest uintptr = uintptr(0) 59309 var iRet int32 59310 59311 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 59312 case uint32(3): 59313 pTest = p + 60 59314 break 59315 case uint32(7): 59316 pTest = p + 72 59317 break 59318 case uint32(8): 59319 pTest = p + 84 59320 break 59321 default: 59322 } 59323 iRet = (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail 59324 (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail = 0 59325 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = 0 59326 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = 0 59327 59328 if objc == 4 { 59329 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+284) || 59330 TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+288) { 59331 return TCL_ERROR 59332 } 59333 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = func() int32 { 59334 if *(*int32)(unsafe.Pointer(bp + 288)) != 0 { 59335 return FAULT_INJECT_PERSISTENT 59336 } 59337 return FAULT_INJECT_TRANSIENT 59338 }() 59339 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = *(*int32)(unsafe.Pointer(bp + 284)) 59340 } else if objc != 2 { 59341 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38917) 59342 return TCL_ERROR 59343 } 59344 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iRet)) 59345 break 59346 59347 } 59348 59349 case uint32(1): 59350 { 59351 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 59352 break 59353 59354 } 59355 59356 case uint32(5): 59357 { 59358 *(*[16]DeviceFlag)(unsafe.Pointer(bp + 304)) = [16]DeviceFlag{ 59359 {FzName: ts + 38931, FiValue: -1}, 59360 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 59361 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 59362 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 59363 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 59364 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 59365 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 59366 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 59367 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 59368 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 59369 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 59370 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 59371 {FzName: ts + 38939, FiValue: SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN}, 59372 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 59373 {FzName: ts + 38961, FiValue: SQLITE_IOCAP_IMMUTABLE}, 59374 {}, 59375 } 59376 var pRet uintptr 59377 var iFlag int32 59378 59379 if objc > 3 { 59380 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38971) 59381 return TCL_ERROR 59382 } 59383 if objc == 3 { 59384 var j int32 59385 var iNew int32 = 0 59386 *(*uintptr)(unsafe.Pointer(bp + 296)) = uintptr(0) 59387 *(*int32)(unsafe.Pointer(bp + 292)) = 0 59388 59389 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+292, bp+296) != 0 { 59390 return TCL_ERROR 59391 } 59392 59393 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 292)); j++ { 59394 *(*int32)(unsafe.Pointer(bp + 560)) = 0 59395 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(j)*8)), bp+304, 59396 int32(unsafe.Sizeof(DeviceFlag{})), ts+17631, 0, bp+560) != 0 { 59397 return TCL_ERROR 59398 } 59399 if (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue < 0 && *(*int32)(unsafe.Pointer(bp + 292)) > 1 { 59400 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+38983, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 59401 return TCL_ERROR 59402 } 59403 iNew = iNew | (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue 59404 } 59405 59406 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = iNew | 0x10000000 59407 } 59408 59409 pRet = tcl.XTcl_NewObj(tls) 59410 for iFlag = 0; uint64(iFlag) < uint64(unsafe.Sizeof([16]DeviceFlag{}))/uint64(unsafe.Sizeof(DeviceFlag{})); iFlag++ { 59411 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar&(*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FiValue != 0 { 59412 tcl.XTcl_ListObjAppendElement(tls, 59413 interp, pRet, tcl.XTcl_NewStringObj(tls, (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FzName, -1)) 59414 } 59415 } 59416 tcl.XTcl_SetObjResult(tls, interp, pRet) 59417 59418 break 59419 59420 } 59421 59422 case uint32(6): 59423 { 59424 if objc > 3 { 59425 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38995) 59426 return TCL_ERROR 59427 } 59428 if objc == 3 { 59429 *(*int32)(unsafe.Pointer(bp + 564)) = 0 59430 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+564) != 0 { 59431 return TCL_ERROR 59432 } 59433 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = *(*int32)(unsafe.Pointer(bp + 564)) 59434 } 59435 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*Testvfs)(unsafe.Pointer(p)).FiSectorsize)) 59436 break 59437 59438 } 59439 } 59440 59441 return TCL_OK 59442 } 59443 59444 type TestvfsSubcmd = struct { 59445 FzName uintptr 59446 FeCmd uint32 59447 F__ccgo_pad1 [4]byte 59448 } 59449 59450 type VfsMethod = struct { 59451 FzName uintptr 59452 Fmask int32 59453 F__ccgo_pad1 [4]byte 59454 } 59455 59456 var vfsmethod = [18]VfsMethod{ 59457 {FzName: ts + 38730, Fmask: TESTVFS_SHMOPEN_MASK}, 59458 {FzName: ts + 35733, Fmask: TESTVFS_SHMLOCK_MASK}, 59459 {FzName: ts + 35742, Fmask: TESTVFS_SHMBARRIER_MASK}, 59460 {FzName: ts + 35723, Fmask: TESTVFS_SHMCLOSE_MASK}, 59461 {FzName: ts + 35754, Fmask: TESTVFS_SHMMAP_MASK}, 59462 {FzName: ts + 27843, Fmask: TESTVFS_SYNC_MASK}, 59463 {FzName: ts + 35661, Fmask: TESTVFS_DELETE_MASK}, 59464 {FzName: ts + 35569, Fmask: TESTVFS_WRITE_MASK}, 59465 {FzName: ts + 35563, Fmask: TESTVFS_READ_MASK}, 59466 {FzName: ts + 35576, Fmask: TESTVFS_TRUNCATE_MASK}, 59467 {FzName: ts + 27421, Fmask: TESTVFS_OPEN_MASK}, 59468 {FzName: ts + 35556, Fmask: TESTVFS_CLOSE_MASK}, 59469 {FzName: ts + 35669, Fmask: TESTVFS_ACCESS_MASK}, 59470 {FzName: ts + 35677, Fmask: TESTVFS_FULLPATHNAME_MASK}, 59471 {FzName: ts + 35602, Fmask: TESTVFS_UNLOCK_MASK}, 59472 {FzName: ts + 35596, Fmask: TESTVFS_LOCK_MASK}, 59473 {FzName: ts + 38596, Fmask: TESTVFS_CKLOCK_MASK}, 59474 {FzName: ts + 35624, Fmask: TESTVFS_FCNTL_MASK}, 59475 } 59476 59477 func testvfs_obj_del(tls *libc.TLS, cd ClientData) { 59478 var p uintptr = cd 59479 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59480 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59481 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 59482 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59483 tcl.XTclFreeObj(tls, _objPtr) 59484 } 59485 } 59486 } 59487 sqlite3.Xsqlite3_vfs_unregister(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 59488 libc.Xmemset(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs, 0, uint64(unsafe.Sizeof(sqlite3_vfs{}))) 59489 tcl.XTcl_Free(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 59490 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Testvfs{}))) 59491 tcl.XTcl_Free(tls, p) 59492 } 59493 59494 func testvfs_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59495 bp := tls.Alloc(28) 59496 defer tls.Free(28) 59497 59498 var p uintptr 59499 var pVfs uintptr 59500 var zVfs uintptr 59501 var nByte int32 59502 59503 var i int32 59504 59505 var zSwitch uintptr 59506 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59507 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59508 *(*int32)(unsafe.Pointer(bp + 8)) = 0 59509 *(*int32)(unsafe.Pointer(bp + 12)) = 0 59510 *(*int32)(unsafe.Pointer(bp + 16)) = -1 59511 *(*int32)(unsafe.Pointer(bp + 20)) = 3 59512 59513 if !(objc < 2 || 0 != objc%2) { 59514 goto __1 59515 } 59516 goto bad_args 59517 __1: 59518 ; 59519 i = 2 59520 __2: 59521 if !(i < objc) { 59522 goto __4 59523 } 59524 zSwitch = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp) 59525 59526 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39003, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59527 goto __5 59528 } 59529 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+4) != 0) { 59530 goto __7 59531 } 59532 return TCL_ERROR 59533 __7: 59534 ; 59535 if !(*(*int32)(unsafe.Pointer(bp + 4)) != 0) { 59536 goto __8 59537 } 59538 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59539 __8: 59540 ; 59541 goto __6 59542 __5: 59543 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+26779, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59544 goto __9 59545 } 59546 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+8) != 0) { 59547 goto __11 59548 } 59549 return TCL_ERROR 59550 __11: 59551 ; 59552 goto __10 59553 __9: 59554 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39010, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59555 goto __12 59556 } 59557 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+12) != 0) { 59558 goto __14 59559 } 59560 return TCL_ERROR 59561 __14: 59562 ; 59563 goto __13 59564 __12: 59565 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39020, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59566 goto __15 59567 } 59568 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+16) != 0) { 59569 goto __17 59570 } 59571 return TCL_ERROR 59572 __17: 59573 ; 59574 goto __16 59575 __15: 59576 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39032, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59577 goto __18 59578 } 59579 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+20) != 0) { 59580 goto __20 59581 } 59582 return TCL_ERROR 59583 __20: 59584 ; 59585 goto __19 59586 __18: 59587 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39042, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59588 goto __21 59589 } 59590 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+24) != 0) { 59591 goto __23 59592 } 59593 return TCL_ERROR 59594 __23: 59595 ; 59596 if !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { 59597 goto __24 59598 } 59599 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59600 __24: 59601 ; 59602 goto __22 59603 __21: 59604 goto bad_args 59605 __22: 59606 ; 59607 __19: 59608 ; 59609 __16: 59610 ; 59611 __13: 59612 ; 59613 __10: 59614 ; 59615 __6: 59616 ; 59617 goto __3 59618 __3: 59619 i = i + 2 59620 goto __2 59621 goto __4 59622 __4: 59623 ; 59624 if !(uint64(*(*int32)(unsafe.Pointer(bp + 12))) < uint64(unsafe.Sizeof(TestvfsFile{}))) { 59625 goto __25 59626 } 59627 *(*int32)(unsafe.Pointer(bp + 12)) = int32(unsafe.Sizeof(TestvfsFile{})) 59628 __25: 59629 ; 59630 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 59631 nByte = int32(uint64(unsafe.Sizeof(Testvfs{})) + uint64(int32(libc.Xstrlen(tls, zVfs))) + uint64(1)) 59632 p = tcl.XTcl_Alloc(tls, uint32(nByte)) 59633 libc.Xmemset(tls, p, 0, uint64(nByte)) 59634 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = -1 59635 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = -1 59636 59637 tcl.XTcl_CreateObjCommand(tls, interp, zVfs, *(*uintptr)(unsafe.Pointer(&struct { 59638 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59639 }{testvfs_obj_cmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{testvfs_obj_del}))) 59640 (*Testvfs)(unsafe.Pointer(p)).FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59641 (*Testvfs)(unsafe.Pointer(p)).Finterp = interp 59642 59643 (*Testvfs)(unsafe.Pointer(p)).FzName = p + 1*104 59644 libc.Xmemcpy(tls, (*Testvfs)(unsafe.Pointer(p)).FzName, zVfs, libc.Xstrlen(tls, zVfs)+uint64(1)) 59645 59646 pVfs = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(sqlite3_vfs{}))) 59647 libc.Xmemcpy(tls, pVfs, uintptr(unsafe.Pointer(&tvfs_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 59648 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData = p 59649 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion = *(*int32)(unsafe.Pointer(bp + 20)) 59650 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName = (*Testvfs)(unsafe.Pointer(p)).FzName 59651 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname 59652 if !(*(*int32)(unsafe.Pointer(bp + 16)) >= 0 && *(*int32)(unsafe.Pointer(bp + 16)) < (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname) { 59653 goto __26 59654 } 59655 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = *(*int32)(unsafe.Pointer(bp + 16)) 59656 __26: 59657 ; 59658 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile = *(*int32)(unsafe.Pointer(bp + 12)) 59659 (*Testvfs)(unsafe.Pointer(p)).FpVfs = pVfs 59660 (*Testvfs)(unsafe.Pointer(p)).FisNoshm = *(*int32)(unsafe.Pointer(bp + 4)) 59661 (*Testvfs)(unsafe.Pointer(p)).FisFullshm = *(*int32)(unsafe.Pointer(bp + 24)) 59662 (*Testvfs)(unsafe.Pointer(p)).Fmask = TESTVFS_ALL_MASK 59663 59664 sqlite3.Xsqlite3_vfs_register(tls, pVfs, *(*int32)(unsafe.Pointer(bp + 8))) 59665 59666 return TCL_OK 59667 59668 bad_args: 59669 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39051) 59670 return TCL_ERROR 59671 } 59672 59673 var tvfs_vfs = sqlite3_vfs{ 59674 FiVersion: 3, 59675 FxOpen: 0, 59676 FxDelete: 0, 59677 FxAccess: 0, 59678 FxFullPathname: 0, 59679 FxRandomness: 0, 59680 FxSleep: 0, 59681 FxCurrentTime: 0, 59682 } 59683 59684 func test_vfs_shmlock(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59685 bp := tls.Alloc(88) 59686 defer tls.Free(88) 59687 59688 *(*[3]uintptr)(unsafe.Pointer(bp + 8)) = [3]uintptr{ts + 39155, ts + 13978, uintptr(0)} 59689 *(*[3]uintptr)(unsafe.Pointer(bp + 40)) = [3]uintptr{ts + 39162, ts + 39167, uintptr(0)} 59690 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 59691 var rc int32 = SQLITE_OK 59692 var zDbname uintptr = uintptr(0) 59693 *(*int32)(unsafe.Pointer(bp + 32)) = 0 59694 *(*int32)(unsafe.Pointer(bp + 64)) = 0 59695 *(*int32)(unsafe.Pointer(bp + 68)) = 0 59696 *(*int32)(unsafe.Pointer(bp + 72)) = 0 59697 59698 if objc != 7 { 59699 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 59700 ts+39174) 59701 return TCL_ERROR 59702 } 59703 59704 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59705 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 59706 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+32) != 0 || 59707 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+64) != 0 || 59708 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+68) != 0 || 59709 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp+72) != 0 { 59710 return TCL_ERROR 59711 } 59712 59713 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+80) 59714 if *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 59715 return TCL_ERROR 59716 } 59717 rc = (*struct { 59718 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59719 })(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)), 59720 func() int32 { 59721 if *(*int32)(unsafe.Pointer(bp + 32)) == 0 { 59722 return SQLITE_SHM_SHARED 59723 } 59724 return SQLITE_SHM_EXCLUSIVE 59725 }()| 59726 func() int32 { 59727 if *(*int32)(unsafe.Pointer(bp + 64)) == 0 { 59728 return SQLITE_SHM_LOCK 59729 } 59730 return SQLITE_SHM_UNLOCK 59731 }()) 59732 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59733 return TCL_OK 59734 } 59735 59736 func test_vfs_set_readmark(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59737 bp := tls.Alloc(48) 59738 defer tls.Free(48) 59739 59740 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 59741 var rc int32 = SQLITE_OK 59742 var zDbname uintptr = uintptr(0) 59743 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59744 *(*int32)(unsafe.Pointer(bp + 28)) = -1 59745 59746 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 59747 var aShm uintptr 59748 var iOff int32 59749 59750 if objc != 4 && objc != 5 { 59751 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39230) 59752 return TCL_ERROR 59753 } 59754 59755 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59756 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 || 59757 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 || 59758 objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 59759 return TCL_ERROR 59760 } 59761 59762 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+32) 59763 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 59764 return TCL_ERROR 59765 } 59766 rc = (*struct { 59767 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 59768 })(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) 59769 if rc != SQLITE_OK { 59770 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59771 return TCL_ERROR 59772 } 59773 if *(*uintptr)(unsafe.Pointer(bp + 40)) == uintptr(0) { 59774 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+39253, 0)) 59775 return TCL_ERROR 59776 } 59777 aShm = *(*uintptr)(unsafe.Pointer(bp + 40)) 59778 iOff = 12*2 + 1 + *(*int32)(unsafe.Pointer(bp + 24)) 59779 59780 if objc == 5 { 59781 *(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 28))) 59782 } 59783 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(*(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4))))) 59784 59785 return TCL_OK 59786 } 59787 59788 func Sqlitetestvfs_Init(tls *libc.TLS, interp uintptr) int32 { 59789 tcl.XTcl_CreateObjCommand(tls, interp, ts+39277, *(*uintptr)(unsafe.Pointer(&struct { 59790 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59791 }{testvfs_cmd})), uintptr(0), uintptr(0)) 59792 tcl.XTcl_CreateObjCommand(tls, interp, ts+39285, *(*uintptr)(unsafe.Pointer(&struct { 59793 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59794 }{test_vfs_shmlock})), uintptr(0), uintptr(0)) 59795 tcl.XTcl_CreateObjCommand(tls, interp, ts+39297, *(*uintptr)(unsafe.Pointer(&struct { 59796 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59797 }{test_vfs_set_readmark})), uintptr(0), uintptr(0)) 59798 return TCL_OK 59799 } 59800 59801 type TestWindow1 = struct { 59802 FxStep uintptr 59803 FxFinal uintptr 59804 FxValue uintptr 59805 FxInverse uintptr 59806 Finterp uintptr 59807 } 59808 59809 type TestWindow = TestWindow1 59810 59811 type TestWindowCtx1 = struct{ FpVal uintptr } 59812 59813 type TestWindowCtx = TestWindowCtx1 59814 59815 func doTestWindowStep(tls *libc.TLS, bInverse int32, ctx uintptr, nArg int32, apArg uintptr) { 59816 var i int32 59817 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 59818 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 59819 if bInverse != 0 { 59820 return (*TestWindow)(unsafe.Pointer(p)).FxInverse 59821 } 59822 return (*TestWindow)(unsafe.Pointer(p)).FxStep 59823 }()) 59824 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 59825 59826 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59827 if pCtx != 0 { 59828 var zResult uintptr 59829 var rc int32 59830 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59831 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 59832 } else { 59833 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 59834 } 59835 for i = 0; i < nArg; i++ { 59836 var pArg uintptr 59837 pArg = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8))), -1) 59838 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, pArg) 59839 } 59840 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59841 if rc != TCL_OK { 59842 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 59843 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 59844 } else { 59845 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59846 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59847 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 59848 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59849 tcl.XTclFreeObj(tls, _objPtr) 59850 } 59851 } 59852 } 59853 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp)) 59854 (*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount++ 59855 } 59856 } 59857 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 59858 var _objPtr uintptr = pEval 59859 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59860 tcl.XTclFreeObj(tls, _objPtr) 59861 } 59862 } 59863 } 59864 59865 func doTestWindowFinalize(tls *libc.TLS, bValue int32, ctx uintptr) { 59866 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 59867 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 59868 if bValue != 0 { 59869 return (*TestWindow)(unsafe.Pointer(p)).FxValue 59870 } 59871 return (*TestWindow)(unsafe.Pointer(p)).FxFinal 59872 }()) 59873 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 59874 59875 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59876 if pCtx != 0 { 59877 var zResult uintptr 59878 var rc int32 59879 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59880 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 59881 } else { 59882 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 59883 } 59884 59885 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59886 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 59887 if rc != TCL_OK { 59888 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 59889 } else { 59890 sqlite3.Xsqlite3_result_text(tls, ctx, zResult, -1, libc.UintptrFromInt32(-1)) 59891 } 59892 59893 if bValue == 0 { 59894 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59895 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59896 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 59897 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59898 tcl.XTclFreeObj(tls, _objPtr) 59899 } 59900 } 59901 } 59902 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = uintptr(0) 59903 } 59904 } 59905 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 59906 var _objPtr uintptr = pEval 59907 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59908 tcl.XTclFreeObj(tls, _objPtr) 59909 } 59910 } 59911 } 59912 59913 func testWindowStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59914 doTestWindowStep(tls, 0, ctx, nArg, apArg) 59915 } 59916 59917 func testWindowInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59918 doTestWindowStep(tls, 1, ctx, nArg, apArg) 59919 } 59920 59921 func testWindowFinal(tls *libc.TLS, ctx uintptr) { 59922 doTestWindowFinalize(tls, 0, ctx) 59923 } 59924 59925 func testWindowValue(tls *libc.TLS, ctx uintptr) { 59926 doTestWindowFinalize(tls, 1, ctx) 59927 } 59928 59929 func testWindowDestroy(tls *libc.TLS, pCtx uintptr) { 59930 tcl.XTcl_Free(tls, pCtx) 59931 } 59932 59933 func test_create_window(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59934 bp := tls.Alloc(8) 59935 defer tls.Free(8) 59936 59937 var pNew uintptr 59938 59939 var zName uintptr 59940 var rc int32 59941 59942 if objc != 7 { 59943 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39314) 59944 return TCL_ERROR 59945 } 59946 59947 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 59948 return TCL_ERROR 59949 } 59950 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59951 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestWindow{}))) 59952 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(TestWindow{}))) 59953 (*TestWindow)(unsafe.Pointer(pNew)).FxStep = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 59954 (*TestWindow)(unsafe.Pointer(pNew)).FxFinal = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 59955 (*TestWindow)(unsafe.Pointer(pNew)).FxValue = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 59956 (*TestWindow)(unsafe.Pointer(pNew)).FxInverse = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8))) 59957 (*TestWindow)(unsafe.Pointer(pNew)).Finterp = interp 59958 59959 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxStep)).FrefCount++ 59960 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxFinal)).FrefCount++ 59961 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxValue)).FrefCount++ 59962 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxInverse)).FrefCount++ 59963 59964 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, -1, SQLITE_UTF8, pNew, 59965 *(*uintptr)(unsafe.Pointer(&struct { 59966 f func(*libc.TLS, uintptr, int32, uintptr) 59967 }{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 { 59968 f func(*libc.TLS, uintptr, int32, uintptr) 59969 }{testWindowInverse})), 59970 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowDestroy}))) 59971 if rc != SQLITE_OK { 59972 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59973 return TCL_ERROR 59974 } 59975 59976 return TCL_OK 59977 } 59978 59979 func test_create_window_misuse(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59980 bp := tls.Alloc(8) 59981 defer tls.Free(8) 59982 59983 var rc int32 59984 59985 if !(objc != 2) { 59986 goto __1 59987 } 59988 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 59989 return TCL_ERROR 59990 __1: 59991 ; 59992 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 59993 goto __2 59994 } 59995 return TCL_ERROR 59996 __2: 59997 ; 59998 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59999 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 { 60000 f func(*libc.TLS, uintptr, int32, uintptr) 60001 }{testWindowInverse})), 60002 uintptr(0)) 60003 if !(rc != SQLITE_MISUSE) { 60004 goto __3 60005 } 60006 goto error 60007 __3: 60008 ; 60009 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60010 *(*uintptr)(unsafe.Pointer(&struct { 60011 f func(*libc.TLS, uintptr, int32, uintptr) 60012 }{testWindowStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 60013 f func(*libc.TLS, uintptr, int32, uintptr) 60014 }{testWindowInverse})), 60015 uintptr(0)) 60016 if !(rc != SQLITE_MISUSE) { 60017 goto __4 60018 } 60019 goto error 60020 __4: 60021 ; 60022 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60023 *(*uintptr)(unsafe.Pointer(&struct { 60024 f func(*libc.TLS, uintptr, int32, uintptr) 60025 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 60026 f func(*libc.TLS, uintptr, int32, uintptr) 60027 }{testWindowInverse})), 60028 uintptr(0)) 60029 if !(rc != SQLITE_MISUSE) { 60030 goto __5 60031 } 60032 goto error 60033 __5: 60034 ; 60035 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60036 *(*uintptr)(unsafe.Pointer(&struct { 60037 f func(*libc.TLS, uintptr, int32, uintptr) 60038 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), uintptr(0), 60039 uintptr(0)) 60040 if !(rc != SQLITE_MISUSE) { 60041 goto __6 60042 } 60043 goto error 60044 __6: 60045 ; 60046 return TCL_OK 60047 60048 error: 60049 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, ts+39355, -1)) 60050 return TCL_ERROR 60051 } 60052 60053 func sumintStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60054 var pInt uintptr 60055 60056 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apArg))) != SQLITE_INTEGER { 60057 sqlite3.Xsqlite3_result_error(tls, ctx, ts+39373, -1) 60058 return 60059 } 60060 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 60061 if pInt != 0 { 60062 *(*sqlite3_int64)(unsafe.Pointer(pInt)) += sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 60063 } 60064 } 60065 60066 func sumintInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60067 var pInt uintptr 60068 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 60069 *(*sqlite3_int64)(unsafe.Pointer(pInt)) -= sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 60070 } 60071 60072 func sumintFinal(tls *libc.TLS, ctx uintptr) { 60073 var res sqlite3_int64 = int64(0) 60074 var pInt uintptr 60075 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 60076 if pInt != 0 { 60077 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 60078 } 60079 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 60080 } 60081 60082 func sumintValue(tls *libc.TLS, ctx uintptr) { 60083 var res sqlite3_int64 = int64(0) 60084 var pInt uintptr 60085 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 60086 if pInt != 0 { 60087 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 60088 } 60089 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 60090 } 60091 60092 func test_create_sumint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60093 bp := tls.Alloc(8) 60094 defer tls.Free(8) 60095 60096 var rc int32 60097 60098 if objc != 2 { 60099 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60100 return TCL_ERROR 60101 } 60102 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60103 return TCL_ERROR 60104 } 60105 60106 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39390, 1, SQLITE_UTF8, uintptr(0), 60107 *(*uintptr)(unsafe.Pointer(&struct { 60108 f func(*libc.TLS, uintptr, int32, uintptr) 60109 }{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 { 60110 f func(*libc.TLS, uintptr, int32, uintptr) 60111 }{sumintInverse})), 60112 uintptr(0)) 60113 60114 if rc != SQLITE_OK { 60115 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60116 return TCL_ERROR 60117 } 60118 return TCL_OK 60119 } 60120 60121 func test_override_sum(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60122 bp := tls.Alloc(8) 60123 defer tls.Free(8) 60124 60125 var rc int32 60126 60127 if objc != 2 { 60128 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60129 return TCL_ERROR 60130 } 60131 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60132 return TCL_ERROR 60133 } 60134 60135 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39397, -1, SQLITE_UTF8, uintptr(0), 60136 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 60137 f func(*libc.TLS, uintptr, int32, uintptr) 60138 }{sumintStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintFinal}))) 60139 60140 if rc != SQLITE_OK { 60141 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60142 return TCL_ERROR 60143 } 60144 return TCL_OK 60145 } 60146 60147 func Sqlitetest_window_Init(tls *libc.TLS, interp uintptr) int32 { 60148 var i int32 60149 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd14))/uint64(unsafe.Sizeof(struct { 60150 FzName uintptr 60151 FxProc uintptr 60152 FclientData int32 60153 F__ccgo_pad1 [4]byte 60154 }{})); i++ { 60155 var c ClientData = uintptr(intptr_t(aObjCmd14[i].FclientData)) 60156 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd14[i].FzName, aObjCmd14[i].FxProc, c, uintptr(0)) 60157 } 60158 return TCL_OK 60159 } 60160 60161 var aObjCmd14 = [4]struct { 60162 FzName uintptr 60163 FxProc uintptr 60164 FclientData int32 60165 F__ccgo_pad1 [4]byte 60166 }{ 60167 {FzName: ts + 39401, FxProc: 0}, 60168 {FzName: ts + 39432, FxProc: 0}, 60169 {FzName: ts + 39467, FxProc: 0}, 60170 {FzName: ts + 39486, FxProc: 0}, 60171 } 60172 60173 func init() { 60174 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 8)) = cfClose 60175 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 16)) = cfRead 60176 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 24)) = cfWrite 60177 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 32)) = cfTruncate 60178 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 40)) = cfSync 60179 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 48)) = cfFileSize 60180 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 56)) = cfLock 60181 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 64)) = cfUnlock 60182 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 72)) = cfCheckReservedLock 60183 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 80)) = cfFileControl 60184 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 88)) = cfSectorSize 60185 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 96)) = cfDeviceCharacteristics 60186 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 104)) = cfShmMap 60187 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 112)) = cfShmLock 60188 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 120)) = cfShmBarrier 60189 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 128)) = cfShmUnmap 60190 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 8)) = csvtabCreate 60191 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 16)) = csvtabConnect 60192 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 24)) = csvtabBestIndex 60193 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 32)) = csvtabDisconnect 60194 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 40)) = csvtabDisconnect 60195 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 48)) = csvtabOpen 60196 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 56)) = csvtabClose 60197 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 64)) = csvtabFilter 60198 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 72)) = csvtabNext 60199 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 80)) = csvtabEof 60200 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 88)) = csvtabColumn 60201 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 96)) = csvtabRowid 60202 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 8)) = csvtabCreate 60203 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 16)) = csvtabConnect 60204 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 24)) = csvtabBestIndex 60205 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 32)) = csvtabDisconnect 60206 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 40)) = csvtabDisconnect 60207 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 48)) = csvtabOpen 60208 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 56)) = csvtabClose 60209 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 64)) = csvtabFilter 60210 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 72)) = csvtabNext 60211 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 80)) = csvtabEof 60212 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 88)) = csvtabColumn 60213 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 96)) = csvtabRowid 60214 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 104)) = csvtabUpdate 60215 *(*func(*libc.TLS, ClientData, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 16)) = incrblobClose 60216 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 24)) = incrblobInput 60217 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 32)) = incrblobOutput 60218 *(*func(*libc.TLS, ClientData, int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 40)) = incrblobSeek 60219 *(*func(*libc.TLS, ClientData, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 64)) = incrblobWatch 60220 *(*func(*libc.TLS, ClientData, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 72)) = incrblobHandle 60221 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 8)) = f5tCreateTokenizer 60222 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 32)) = f5tTokenizerReturn 60223 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 56)) = f5tTokenize 60224 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 80)) = f5tCreateFunction 60225 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 104)) = f5tMayBeCorrupt 60226 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 128)) = f5tTokenHash 60227 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 152)) = f5tRegisterMatchinfo 60228 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 176)) = f5tRegisterTok 60229 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60230 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60231 }{db_enter})) 60232 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60233 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60234 }{db_leave})) 60235 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60236 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60237 }{sqlite3_mprintf_int})) 60238 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60239 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60240 }{sqlite3_mprintf_int64})) 60241 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60242 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60243 }{sqlite3_mprintf_long})) 60244 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60245 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60246 }{sqlite3_mprintf_str})) 60247 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60248 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60249 }{sqlite3_snprintf_str})) 60250 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60251 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60252 }{sqlite3_mprintf_stronly})) 60253 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60254 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60255 }{sqlite3_mprintf_double})) 60256 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60257 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60258 }{sqlite3_mprintf_scaled})) 60259 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60260 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60261 }{sqlite3_mprintf_hexdouble})) 60262 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60263 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60264 }{test_mprintf_z})) 60265 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60266 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60267 }{test_mprintf_n})) 60268 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60269 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60270 }{test_snprintf_int})) 60271 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60272 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60273 }{test_last_rowid})) 60274 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 60275 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60276 }{test_exec_printf})) 60277 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 60278 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60279 }{test_exec_hex})) 60280 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 60281 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60282 }{test_exec})) 60283 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 60284 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60285 }{test_exec_nr})) 60286 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 60287 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60288 }{test_get_table_printf})) 60289 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 60290 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60291 }{sqlite_test_close})) 60292 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 344)) = *(*uintptr)(unsafe.Pointer(&struct { 60293 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60294 }{sqlite_test_close_v2})) 60295 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 60296 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60297 }{test_create_function})) 60298 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 376)) = *(*uintptr)(unsafe.Pointer(&struct { 60299 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60300 }{test_create_aggregate})) 60301 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 60302 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60303 }{test_drop_modules})) 60304 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 408)) = *(*uintptr)(unsafe.Pointer(&struct { 60305 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60306 }{test_register_func})) 60307 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 60308 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60309 }{sqlite_abort})) 60310 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 440)) = *(*uintptr)(unsafe.Pointer(&struct { 60311 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60312 }{test_bind})) 60313 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 60314 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60315 }{test_breakpoint})) 60316 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 472)) = *(*uintptr)(unsafe.Pointer(&struct { 60317 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60318 }{test_key})) 60319 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 60320 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60321 }{test_rekey})) 60322 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 504)) = *(*uintptr)(unsafe.Pointer(&struct { 60323 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60324 }{test_interrupt})) 60325 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 60326 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60327 }{delete_function})) 60328 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 536)) = *(*uintptr)(unsafe.Pointer(&struct { 60329 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60330 }{delete_collation})) 60331 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 60332 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60333 }{get_autocommit})) 60334 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 568)) = *(*uintptr)(unsafe.Pointer(&struct { 60335 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60336 }{test_busy_timeout})) 60337 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 584)) = *(*uintptr)(unsafe.Pointer(&struct { 60338 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60339 }{test_printf})) 60340 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 600)) = *(*uintptr)(unsafe.Pointer(&struct { 60341 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60342 }{test_io_trace})) 60343 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 616)) = *(*uintptr)(unsafe.Pointer(&struct { 60344 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60345 }{clang_sanitize_address})) 60346 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60347 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60348 }{pager_open})) 60349 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60350 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60351 }{pager_close})) 60352 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60353 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60354 }{pager_commit})) 60355 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60356 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60357 }{pager_rollback})) 60358 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60359 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60360 }{pager_stmt_begin})) 60361 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60362 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60363 }{pager_stmt_commit})) 60364 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60365 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60366 }{pager_stmt_rollback})) 60367 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60368 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60369 }{pager_stats})) 60370 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60371 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60372 }{pager_pagecount})) 60373 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60374 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60375 }{page_get})) 60376 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60377 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60378 }{page_lookup})) 60379 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60380 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60381 }{page_unref})) 60382 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60383 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60384 }{page_read})) 60385 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60386 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60387 }{page_write})) 60388 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60389 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60390 }{page_number})) 60391 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 60392 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60393 }{pager_truncate})) 60394 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 60395 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60396 }{fake_big_file})) 60397 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 60398 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60399 }{testBitvecBuiltinTest})) 60400 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 60401 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60402 }{testPendingByte})) 60403 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 60404 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60405 }{faultInstallCmd})) 60406 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60407 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60408 }{btree_open})) 60409 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60410 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60411 }{btree_close})) 60412 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60413 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60414 }{btree_begin_transaction})) 60415 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60416 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60417 }{btree_pager_stats})) 60418 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60419 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60420 }{btree_cursor})) 60421 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60422 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60423 }{btree_close_cursor})) 60424 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60425 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60426 }{btree_next})) 60427 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60428 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60429 }{btree_eof})) 60430 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60431 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60432 }{btree_payload_size})) 60433 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60434 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60435 }{btree_first})) 60436 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60437 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60438 }{btree_varint_test})) 60439 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60440 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60441 }{btree_from_db})) 60442 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60443 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60444 }{btree_ismemdb})) 60445 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60446 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60447 }{btree_set_cache_size})) 60448 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60449 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60450 }{tcl_thread_create})) 60451 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60452 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60453 }{tcl_thread_wait})) 60454 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60455 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60456 }{tcl_thread_halt})) 60457 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60458 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60459 }{tcl_thread_argc})) 60460 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60461 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60462 }{tcl_thread_argv})) 60463 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60464 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60465 }{tcl_thread_colname})) 60466 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60467 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60468 }{tcl_thread_result})) 60469 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60470 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60471 }{tcl_thread_error})) 60472 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60473 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60474 }{tcl_thread_compile})) 60475 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60476 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60477 }{tcl_thread_step})) 60478 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60479 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60480 }{tcl_thread_finalize})) 60481 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60482 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60483 }{tcl_thread_swap})) 60484 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60485 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60486 }{tcl_thread_db_get})) 60487 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60488 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60489 }{tcl_thread_db_put})) 60490 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60491 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60492 }{tcl_thread_stmt_get})) 60493 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60494 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60495 }{binarize})) 60496 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60497 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60498 }{test_value_overhead})) 60499 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60500 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60501 }{test_translate})) 60502 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60503 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60504 }{test_translate_selftest})) 60505 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60506 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60507 }{tcl_client_create})) 60508 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60509 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60510 }{tcl_client_wait})) 60511 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60512 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60513 }{tcl_client_halt})) 60514 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60515 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60516 }{tcl_client_argc})) 60517 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60518 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60519 }{tcl_client_argv})) 60520 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60521 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60522 }{tcl_client_colname})) 60523 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60524 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60525 }{tcl_client_result})) 60526 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60527 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60528 }{tcl_client_error})) 60529 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60530 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60531 }{tcl_client_compile})) 60532 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60533 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60534 }{tcl_client_step})) 60535 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60536 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60537 }{tcl_client_reset})) 60538 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60539 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60540 }{tcl_client_finalize})) 60541 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60542 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60543 }{tcl_client_swap})) 60544 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 8)) = test_multiplex_initialize 60545 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 24)) = test_multiplex_shutdown 60546 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 40)) = test_multiplex_control 60547 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60548 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60549 }{test_shutdown})) 60550 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60551 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60552 }{test_initialize})) 60553 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60554 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60555 }{test_config})) 60556 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60557 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60558 }{test_enter_static_mutex})) 60559 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60560 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60561 }{test_leave_static_mutex})) 60562 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60563 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60564 }{test_enter_db_mutex})) 60565 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60566 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60567 }{test_leave_db_mutex})) 60568 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60569 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60570 }{test_alloc_mutex})) 60571 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60572 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60573 }{test_install_mutex_counters})) 60574 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60575 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60576 }{test_read_mutex_counters})) 60577 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60578 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60579 }{test_clear_mutex_counters})) 60580 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 8)) = test_quota_initialize 60581 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 24)) = test_quota_shutdown 60582 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 40)) = test_quota_set 60583 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 56)) = test_quota_file 60584 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 72)) = test_quota_dump 60585 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 88)) = test_quota_fopen 60586 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 104)) = test_quota_fread 60587 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 120)) = test_quota_fwrite 60588 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 136)) = test_quota_fclose 60589 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 152)) = test_quota_fflush 60590 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 168)) = test_quota_fseek 60591 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 184)) = test_quota_rewind 60592 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 200)) = test_quota_ftell 60593 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 216)) = test_quota_ftruncate 60594 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 232)) = test_quota_file_size 60595 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 248)) = test_quota_file_truesize 60596 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 264)) = test_quota_file_mtime 60597 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 280)) = test_quota_remove 60598 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 296)) = test_quota_glob 60599 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 312)) = test_quota_file_available 60600 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 328)) = test_quota_ferror 60601 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 8)) = sqlite3_amatch_init 60602 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 24)) = sqlite3_appendvfs_init 60603 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 40)) = sqlite3_carray_init 60604 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 56)) = sqlite3_closure_init 60605 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 72)) = sqlite3_csv_init 60606 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 88)) = sqlite3_decimal_init 60607 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 104)) = sqlite3_eval_init 60608 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 120)) = sqlite3_explain_init 60609 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 136)) = sqlite3_fileio_init 60610 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 152)) = sqlite3_fuzzer_init 60611 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 168)) = sqlite3_ieee_init 60612 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 184)) = sqlite3_nextchar_init 60613 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 200)) = sqlite3_percentile_init 60614 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 216)) = sqlite3_prefixes_init 60615 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 232)) = sqlite3_qpvtab_init 60616 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 248)) = sqlite3_regexp_init 60617 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 264)) = sqlite3_remember_init 60618 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 280)) = sqlite3_series_init 60619 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 296)) = sqlite3_spellfix_init 60620 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 312)) = sqlite3_totype_init 60621 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 328)) = sqlite3_unionvtab_init 60622 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 344)) = sqlite3_wholenumber_init 60623 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 16)) = decimalFunc 60624 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 40)) = decimalCmpFunc 60625 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 64)) = decimalAddFunc 60626 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 88)) = decimalSubFunc 60627 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 112)) = decimalMulFunc 60628 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 16)) = ieee754func 60629 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 40)) = ieee754func 60630 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 64)) = ieee754func 60631 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 88)) = ieee754func 60632 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 112)) = ieee754func_to_blob 60633 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 136)) = ieee754func_from_blob 60634 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 16)) = randStr 60635 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 40)) = test_destructor 60636 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 64)) = test_destructor16 60637 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 88)) = testHexToUtf16be 60638 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 112)) = testHexToUtf16le 60639 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 136)) = testHexToUtf8 60640 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 160)) = test_destructor_count 60641 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 184)) = test_auxdata 60642 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 208)) = test_error 60643 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 232)) = test_error 60644 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 256)) = test_eval 60645 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 280)) = test_isolation 60646 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 304)) = counterFunc 60647 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 328)) = real2hex 60648 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 352)) = test_decode 60649 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 376)) = test_extract 60650 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 400)) = test_zeroblob 60651 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 424)) = test_getsubtype 60652 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 448)) = test_setsubtype 60653 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 472)) = test_frombind 60654 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 8)) = test_sqlite3rbu 60655 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 24)) = test_sqlite3rbu_vacuum 60656 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 40)) = test_sqlite3rbu_create_vfs 60657 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 56)) = test_sqlite3rbu_destroy_vfs 60658 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 72)) = test_sqlite3rbu_internal_test 60659 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 8)) = test_sqlite3_db_config 60660 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 32)) = test_sqlite3_txn_state 60661 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 56)) = test_bad_behavior 60662 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 64)) = uintptr(unsafe.Pointer(&iZero)) 60663 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 80)) = test_register_dbstat_vtab 60664 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 104)) = get_sqlite_pointer 60665 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 128)) = test_intarray_addr 60666 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 152)) = test_int64array_addr 60667 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 176)) = test_doublearray_addr 60668 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 200)) = test_textarray_addr 60669 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 224)) = test_bind_int 60670 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 248)) = test_bind_zeroblob 60671 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 272)) = test_bind_zeroblob64 60672 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 296)) = test_bind_int64 60673 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 320)) = test_bind_double 60674 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 344)) = test_bind_null 60675 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 368)) = test_bind_text 60676 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 392)) = test_bind_text16 60677 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 416)) = test_bind_blob 60678 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 440)) = test_bind_value_from_select 60679 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 464)) = test_bind_value_from_preupdate 60680 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 488)) = test_carray_bind 60681 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 512)) = test_bind_parameter_count 60682 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 536)) = test_bind_parameter_name 60683 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 560)) = test_bind_parameter_index 60684 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 584)) = test_clear_bindings 60685 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 608)) = test_sleep 60686 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 632)) = test_errcode 60687 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 656)) = test_ex_errcode 60688 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 680)) = test_errmsg 60689 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 704)) = test_error_offset 60690 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 728)) = test_errmsg16 60691 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 752)) = test_open 60692 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 776)) = test_open16 60693 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 800)) = test_open_v2 60694 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 824)) = test_complete16 60695 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 848)) = test_normalize 60696 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 872)) = test_prepare 60697 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 896)) = test_prepare16 60698 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 920)) = test_prepare_v2 60699 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 944)) = test_prepare_v3 60700 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 968)) = test_prepare_tkt3134 60701 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 992)) = test_prepare16_v2 60702 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1016)) = test_finalize 60703 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1040)) = test_stmt_status 60704 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1064)) = test_reset 60705 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1088)) = test_expired 60706 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1112)) = test_transfer_bind 60707 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1136)) = test_changes 60708 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1160)) = test_step 60709 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1184)) = test_sql 60710 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1208)) = test_ex_sql 60711 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1232)) = test_next_stmt 60712 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1256)) = test_stmt_readonly 60713 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1280)) = test_stmt_isexplain 60714 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1304)) = test_stmt_busy 60715 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1328)) = uses_stmt_journal 60716 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1352)) = test_release_memory 60717 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1376)) = test_db_release_memory 60718 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1400)) = test_db_cacheflush 60719 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1424)) = test_system_errno 60720 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1448)) = test_db_filename 60721 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1472)) = test_db_readonly 60722 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1496)) = test_soft_heap_limit 60723 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1520)) = test_soft_heap_limit 60724 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1544)) = test_hard_heap_limit 60725 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1568)) = test_thread_cleanup 60726 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1592)) = test_pager_refcounts 60727 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1616)) = test_load_extension 60728 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1640)) = test_enable_load 60729 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1664)) = test_extended_result_codes 60730 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1688)) = test_limit 60731 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1712)) = test_dbconfig_maindbname_icecube 60732 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1736)) = save_prng_state 60733 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1760)) = restore_prng_state 60734 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1784)) = reset_prng_state 60735 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1808)) = prng_seed 60736 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1832)) = extra_schema_checks 60737 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1856)) = database_never_corrupt 60738 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1880)) = database_may_be_corrupt 60739 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1904)) = optimization_control 60740 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1928)) = runAsObjProc 60741 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1952)) = test_column_count 60742 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1976)) = test_data_count 60743 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2000)) = test_column_type 60744 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2024)) = test_column_blob 60745 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2048)) = test_column_double 60746 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2072)) = test_column_int64 60747 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2096)) = test_stmt_utf8 60748 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2104)) = *(*uintptr)(unsafe.Pointer(&struct { 60749 f func(*libc.TLS, uintptr, int32) uintptr 60750 }{sqlite3.Xsqlite3_column_text})) 60751 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2120)) = test_stmt_utf8 60752 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2128)) = *(*uintptr)(unsafe.Pointer(&struct { 60753 f func(*libc.TLS, uintptr, int32) uintptr 60754 }{sqlite3.Xsqlite3_column_name})) 60755 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2144)) = test_stmt_int 60756 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2152)) = *(*uintptr)(unsafe.Pointer(&struct { 60757 f func(*libc.TLS, uintptr, int32) int32 60758 }{sqlite3.Xsqlite3_column_int})) 60759 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2168)) = test_stmt_int 60760 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2176)) = *(*uintptr)(unsafe.Pointer(&struct { 60761 f func(*libc.TLS, uintptr, int32) int32 60762 }{sqlite3.Xsqlite3_column_bytes})) 60763 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2192)) = test_stmt_utf8 60764 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2200)) = *(*uintptr)(unsafe.Pointer(&struct { 60765 f func(*libc.TLS, uintptr, int32) uintptr 60766 }{sqlite3.Xsqlite3_column_decltype})) 60767 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2216)) = test_stmt_utf8 60768 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2224)) = *(*uintptr)(unsafe.Pointer(&struct { 60769 f func(*libc.TLS, uintptr, int32) uintptr 60770 }{sqlite3.Xsqlite3_column_database_name})) 60771 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2240)) = test_stmt_utf8 60772 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2248)) = *(*uintptr)(unsafe.Pointer(&struct { 60773 f func(*libc.TLS, uintptr, int32) uintptr 60774 }{sqlite3.Xsqlite3_column_table_name})) 60775 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2264)) = test_stmt_utf8 60776 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2272)) = *(*uintptr)(unsafe.Pointer(&struct { 60777 f func(*libc.TLS, uintptr, int32) uintptr 60778 }{sqlite3.Xsqlite3_column_origin_name})) 60779 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2288)) = test_stmt_int 60780 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2296)) = *(*uintptr)(unsafe.Pointer(&struct { 60781 f func(*libc.TLS, uintptr, int32) int32 60782 }{sqlite3.Xsqlite3_column_bytes16})) 60783 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2312)) = test_stmt_utf16 60784 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2320)) = *(*uintptr)(unsafe.Pointer(&struct { 60785 f func(*libc.TLS, uintptr, int32) uintptr 60786 }{sqlite3.Xsqlite3_column_text16})) 60787 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2336)) = test_stmt_utf16 60788 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2344)) = *(*uintptr)(unsafe.Pointer(&struct { 60789 f func(*libc.TLS, uintptr, int32) uintptr 60790 }{sqlite3.Xsqlite3_column_name16})) 60791 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2360)) = add_alignment_test_collations 60792 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2384)) = test_stmt_utf16 60793 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2392)) = *(*uintptr)(unsafe.Pointer(&struct { 60794 f func(*libc.TLS, uintptr, int32) uintptr 60795 }{sqlite3.Xsqlite3_column_decltype16})) 60796 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2408)) = test_stmt_utf16 60797 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2416)) = *(*uintptr)(unsafe.Pointer(&struct { 60798 f func(*libc.TLS, uintptr, int32) uintptr 60799 }{sqlite3.Xsqlite3_column_database_name16})) 60800 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2432)) = test_stmt_utf16 60801 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2440)) = *(*uintptr)(unsafe.Pointer(&struct { 60802 f func(*libc.TLS, uintptr, int32) uintptr 60803 }{sqlite3.Xsqlite3_column_table_name16})) 60804 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2456)) = test_stmt_utf16 60805 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2464)) = *(*uintptr)(unsafe.Pointer(&struct { 60806 f func(*libc.TLS, uintptr, int32) uintptr 60807 }{sqlite3.Xsqlite3_column_origin_name16})) 60808 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2480)) = test_create_collation_v2 60809 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2504)) = test_global_recover 60810 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2528)) = working_64bit_int 60811 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2552)) = vfs_unlink_test 60812 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2576)) = vfs_initfail_test 60813 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2600)) = vfs_unregister_all 60814 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2624)) = vfs_reregister_all 60815 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2648)) = file_control_test 60816 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2672)) = file_control_lasterrno_test 60817 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2696)) = file_control_lockproxy_test 60818 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2720)) = file_control_chunksize_test 60819 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2744)) = file_control_sizehint_test 60820 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2768)) = file_control_data_version 60821 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2792)) = file_control_persist_wal 60822 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2816)) = file_control_powersafe_overwrite 60823 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2840)) = file_control_vfsname 60824 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2864)) = file_control_reservebytes 60825 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2888)) = file_control_tempfilename 60826 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2912)) = file_control_external_reader 60827 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2936)) = vfs_list 60828 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2960)) = test_create_function_v2 60829 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2984)) = test_collate 60830 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3008)) = test_collate_needed 60831 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3032)) = test_function 60832 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3056)) = test_utf16bin_collate 60833 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3080)) = test_errstr 60834 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3104)) = tcl_variable_type 60835 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3128)) = test_enable_shared 60836 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3152)) = sqlite3BtreeSharedCacheReport 60837 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3176)) = test_libversion_number 60838 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3200)) = test_table_column_metadata 60839 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3224)) = test_blob_reopen 60840 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3248)) = test_pcache_stats 60841 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3272)) = test_unlock_notify 60842 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3296)) = test_wal_checkpoint 60843 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3320)) = test_wal_checkpoint_v2 60844 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3344)) = test_wal_autocheckpoint 60845 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3368)) = test_sqlite3_log 60846 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3392)) = test_print_eqp 60847 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3416)) = test_test_control 60848 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3440)) = test_getrusage 60849 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3464)) = tclLoadStaticExtensionCmd 60850 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3488)) = sorter_test_fakeheap 60851 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3512)) = sorter_test_sort4_helper 60852 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3536)) = vfsCurrentTimeInt64 60853 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3560)) = test_snapshot_get 60854 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3584)) = test_snapshot_open 60855 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3608)) = test_snapshot_free 60856 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3632)) = test_snapshot_cmp 60857 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3656)) = test_snapshot_recover 60858 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3680)) = test_snapshot_get_blob 60859 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3704)) = test_snapshot_open_blob 60860 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3728)) = test_snapshot_cmp_blob 60861 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3752)) = test_delete_database 60862 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3776)) = test_atomic_batch_write 60863 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3800)) = test_mmap_warm 60864 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3824)) = test_config_sorterref 60865 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3848)) = test_autovacuum_pages 60866 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3872)) = test_decode_hexdb 60867 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3896)) = test_write_db 60868 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3920)) = test_register_cksumvfs 60869 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3944)) = test_unregister_cksumvfs 60870 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 8)) = test_intarray_create 60871 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 32)) = test_intarray_bind 60872 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 8)) = test_malloc 60873 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 32)) = test_realloc 60874 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 56)) = test_free 60875 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 80)) = test_memset 60876 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 104)) = test_memget 60877 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 128)) = test_memory_used 60878 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 152)) = test_memory_highwater 60879 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 176)) = test_memdebug_backtrace 60880 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 200)) = test_memdebug_dump 60881 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 224)) = test_memdebug_fail 60882 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 248)) = test_memdebug_pending 60883 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 272)) = test_memdebug_settitle 60884 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 296)) = test_memdebug_malloc_count 60885 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 320)) = test_memdebug_log 60886 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 344)) = test_config_pagecache 60887 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 368)) = test_alt_pcache 60888 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 392)) = test_status 60889 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 416)) = test_db_status 60890 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 440)) = test_install_malloc_faultsim 60891 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 464)) = test_config_heap 60892 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 488)) = test_config_heap_size 60893 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 512)) = test_config_memstatus 60894 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 536)) = test_config_lookaside 60895 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 560)) = test_config_error 60896 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 584)) = test_config_uri 60897 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 608)) = test_config_cis 60898 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 632)) = test_config_pmasz 60899 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 656)) = test_db_config_lookaside 60900 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 680)) = test_dump_memsys3 60901 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 704)) = test_dump_memsys3 60902 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 728)) = test_install_memsys3 60903 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 752)) = test_vfs_oom_test 60904 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd12)) + 8)) = register_schema_module 60905 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd13)) + 8)) = register_tclvar_module 60906 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 8)) = test_create_window 60907 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 32)) = test_create_window_misuse 60908 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 56)) = test_create_sumint 60909 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 80)) = test_override_sum 60910 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 8)) = register_echo_module 60911 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 32)) = declare_vtab 60912 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 8)) = c_misuse_test 60913 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 32)) = c_realloc_test 60914 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 56)) = c_collation_test 60915 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd4)) + 8)) = register_tcl_module 60916 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 8)) = test_blob_open 60917 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 24)) = test_blob_close 60918 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 40)) = test_blob_bytes 60919 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 56)) = test_blob_read 60920 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 72)) = test_blob_write 60921 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd6)) + 8)) = register_fs_module 60922 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 8)) = autoinstall_test_funcs 60923 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 24)) = abuse_create_function 60924 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 40)) = install_fts3_rank_function 60925 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 8)) = hexio_read 60926 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 24)) = hexio_write 60927 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 40)) = hexio_get_int 60928 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 56)) = hexio_render_int16 60929 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 72)) = hexio_render_int32 60930 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 88)) = utf8_to_utf8 60931 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 104)) = read_fts3varint 60932 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 120)) = make_fts3record 60933 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 8)) = init_wrapper_install 60934 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 24)) = init_wrapper_query 60935 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 40)) = init_wrapper_uninstall 60936 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 56)) = init_wrapper_clear 60937 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60938 f func(*libc.TLS, uintptr, int32, int32) int32 60939 }{ts_open})) 60940 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{ts_close})) 60941 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60942 f func(*libc.TLS, uintptr, int32) int32 60943 }{ts_access})) 60944 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60945 f func(*libc.TLS, uintptr, size_t) uintptr 60946 }{ts_getcwd})) 60947 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60948 f func(*libc.TLS, uintptr, uintptr) int32 60949 }{ts_stat})) 60950 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60951 f func(*libc.TLS, int32, uintptr) int32 60952 }{ts_fstat})) 60953 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60954 f func(*libc.TLS, int32, off_t) int32 60955 }{ts_ftruncate})) 60956 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60957 f func(*libc.TLS, int32, int32, uintptr) int32 60958 }{ts_fcntl})) 60959 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 60960 f func(*libc.TLS, int32, uintptr, size_t) int32 60961 }{ts_read})) 60962 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 60963 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 60964 }{ts_pread})) 60965 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 60966 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 60967 }{ts_pread64})) 60968 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 60969 f func(*libc.TLS, int32, uintptr, size_t) int32 60970 }{ts_write})) 60971 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 60972 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 60973 }{ts_pwrite})) 60974 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 60975 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 60976 }{ts_pwrite64})) 60977 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 60978 f func(*libc.TLS, int32, mode_t) int32 60979 }{ts_fchmod})) 60980 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 60981 f func(*libc.TLS, int32, off_t, off_t) int32 60982 }{ts_fallocate})) 60983 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 60984 f func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr 60985 }{ts_mmap})) 60986 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 60987 f func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr 60988 }{ts_mremap})) 60989 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 8)) = amatchConnect 60990 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 16)) = amatchConnect 60991 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 24)) = amatchBestIndex 60992 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 32)) = amatchDisconnect 60993 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 40)) = amatchDisconnect 60994 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 48)) = amatchOpen 60995 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 56)) = amatchClose 60996 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 64)) = amatchFilter 60997 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 72)) = amatchNext 60998 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 80)) = amatchEof 60999 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 88)) = amatchColumn 61000 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 96)) = amatchRowid 61001 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 104)) = amatchUpdate 61002 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 8)) = apndClose 61003 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 16)) = apndRead 61004 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 24)) = apndWrite 61005 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 32)) = apndTruncate 61006 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 40)) = apndSync 61007 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 48)) = apndFileSize 61008 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 56)) = apndLock 61009 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 64)) = apndUnlock 61010 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 72)) = apndCheckReservedLock 61011 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 80)) = apndFileControl 61012 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 88)) = apndSectorSize 61013 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 96)) = apndDeviceCharacteristics 61014 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 104)) = apndShmMap 61015 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 112)) = apndShmLock 61016 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 120)) = apndShmBarrier 61017 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 128)) = apndShmUnmap 61018 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 136)) = apndFetch 61019 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 144)) = apndUnfetch 61020 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 40)) = apndOpen 61021 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 48)) = apndDelete 61022 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 56)) = apndAccess 61023 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 64)) = apndFullPathname 61024 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 72)) = apndDlOpen 61025 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 80)) = apndDlError 61026 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 88)) = apndDlSym 61027 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 96)) = apndDlClose 61028 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 104)) = apndRandomness 61029 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 112)) = apndSleep 61030 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 120)) = apndCurrentTime 61031 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 128)) = apndGetLastError 61032 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 136)) = apndCurrentTimeInt64 61033 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 144)) = apndSetSystemCall 61034 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 152)) = apndGetSystemCall 61035 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 160)) = apndNextSystemCall 61036 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 16)) = carrayConnect 61037 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 24)) = carrayBestIndex 61038 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 32)) = carrayDisconnect 61039 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 48)) = carrayOpen 61040 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 56)) = carrayClose 61041 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 64)) = carrayFilter 61042 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 72)) = carrayNext 61043 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 80)) = carrayEof 61044 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 88)) = carrayColumn 61045 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 96)) = carrayRowid 61046 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 8)) = cksmClose 61047 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 16)) = cksmRead 61048 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 24)) = cksmWrite 61049 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 32)) = cksmTruncate 61050 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 40)) = cksmSync 61051 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 48)) = cksmFileSize 61052 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 56)) = cksmLock 61053 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 64)) = cksmUnlock 61054 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 72)) = cksmCheckReservedLock 61055 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 80)) = cksmFileControl 61056 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 88)) = cksmSectorSize 61057 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 96)) = cksmDeviceCharacteristics 61058 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 104)) = cksmShmMap 61059 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 112)) = cksmShmLock 61060 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 120)) = cksmShmBarrier 61061 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 128)) = cksmShmUnmap 61062 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 136)) = cksmFetch 61063 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 144)) = cksmUnfetch 61064 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 40)) = cksmOpen 61065 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 48)) = cksmDelete 61066 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 56)) = cksmAccess 61067 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 64)) = cksmFullPathname 61068 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 72)) = cksmDlOpen 61069 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 80)) = cksmDlError 61070 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 88)) = cksmDlSym 61071 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 96)) = cksmDlClose 61072 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 104)) = cksmRandomness 61073 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 112)) = cksmSleep 61074 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 120)) = cksmCurrentTime 61075 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 128)) = cksmGetLastError 61076 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 136)) = cksmCurrentTimeInt64 61077 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 144)) = cksmSetSystemCall 61078 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 152)) = cksmGetSystemCall 61079 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 160)) = cksmNextSystemCall 61080 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 8)) = closureConnect 61081 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 16)) = closureConnect 61082 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 24)) = closureBestIndex 61083 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 32)) = closureDisconnect 61084 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 40)) = closureDisconnect 61085 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 48)) = closureOpen 61086 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 56)) = closureClose 61087 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 64)) = closureFilter 61088 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 72)) = closureNext 61089 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 80)) = closureEof 61090 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 88)) = closureColumn 61091 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 96)) = closureRowid 61092 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 40)) = cfOpen 61093 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 48)) = cfDelete 61094 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 56)) = cfAccess 61095 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 64)) = cfFullPathname 61096 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 72)) = cfDlOpen 61097 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 80)) = cfDlError 61098 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 88)) = cfDlSym 61099 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 96)) = cfDlClose 61100 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 104)) = cfRandomness 61101 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 112)) = cfSleep 61102 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 120)) = cfCurrentTime 61103 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 128)) = cfGetLastError 61104 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 8)) = devsymClose 61105 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 16)) = devsymRead 61106 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 24)) = devsymWrite 61107 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 32)) = devsymTruncate 61108 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 40)) = devsymSync 61109 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 48)) = devsymFileSize 61110 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 56)) = devsymLock 61111 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 64)) = devsymUnlock 61112 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 72)) = devsymCheckReservedLock 61113 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 80)) = devsymFileControl 61114 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 88)) = devsymSectorSize 61115 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 96)) = devsymDeviceCharacteristics 61116 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 104)) = devsymShmMap 61117 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 112)) = devsymShmLock 61118 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 120)) = devsymShmBarrier 61119 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 128)) = devsymShmUnmap 61120 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 40)) = devsymOpen 61121 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 48)) = devsymDelete 61122 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 56)) = devsymAccess 61123 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 64)) = devsymFullPathname 61124 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 104)) = devsymRandomness 61125 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 112)) = devsymSleep 61126 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 120)) = devsymCurrentTime 61127 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 8)) = echoCreate 61128 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 16)) = echoConnect 61129 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 24)) = echoBestIndex 61130 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 32)) = echoDisconnect 61131 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 40)) = echoDestroy 61132 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 48)) = echoOpen 61133 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 56)) = echoClose 61134 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 64)) = echoFilter 61135 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 72)) = echoNext 61136 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 80)) = echoEof 61137 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 88)) = echoColumn 61138 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 96)) = echoRowid 61139 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 104)) = echoUpdate 61140 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 112)) = echoBegin 61141 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 120)) = echoSync 61142 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 128)) = echoCommit 61143 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 136)) = echoRollback 61144 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 144)) = echoFindFunction 61145 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 152)) = echoRename 61146 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 8)) = echoCreate 61147 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 16)) = echoConnect 61148 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 24)) = echoBestIndex 61149 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 32)) = echoDisconnect 61150 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 40)) = echoDestroy 61151 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 48)) = echoOpen 61152 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 56)) = echoClose 61153 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 64)) = echoFilter 61154 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 72)) = echoNext 61155 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 80)) = echoEof 61156 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 88)) = echoColumn 61157 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 96)) = echoRowid 61158 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 104)) = echoUpdate 61159 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 112)) = echoBegin 61160 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 120)) = echoSync 61161 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 128)) = echoCommit 61162 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 136)) = echoRollback 61163 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 144)) = echoFindFunction 61164 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 152)) = echoRename 61165 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 160)) = echoSavepoint 61166 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 168)) = echoRelease 61167 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 176)) = echoRollbackTo 61168 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 8)) = expertConnect 61169 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 16)) = expertConnect 61170 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 24)) = expertBestIndex 61171 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 32)) = expertDisconnect 61172 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 40)) = expertDisconnect 61173 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 48)) = expertOpen 61174 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 56)) = expertClose 61175 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 64)) = expertFilter 61176 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 72)) = expertNext 61177 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 80)) = expertEof 61178 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 88)) = expertColumn 61179 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 96)) = expertRowid 61180 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 104)) = expertUpdate 61181 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 16)) = explainConnect 61182 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 24)) = explainBestIndex 61183 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 32)) = explainDisconnect 61184 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 48)) = explainOpen 61185 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 56)) = explainClose 61186 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 64)) = explainFilter 61187 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 72)) = explainNext 61188 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 80)) = explainEof 61189 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 88)) = explainColumn 61190 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 96)) = explainRowid 61191 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 8)) = fsConnect 61192 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 16)) = fsConnect 61193 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 24)) = fsBestIndex 61194 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 32)) = fsDisconnect 61195 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 40)) = fsDisconnect 61196 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 48)) = fsOpen 61197 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 56)) = fsClose 61198 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 64)) = fsFilter 61199 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 72)) = fsNext 61200 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 80)) = fsEof 61201 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 88)) = fsColumn 61202 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 96)) = fsRowid 61203 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 8)) = fsClose1 61204 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 16)) = fsRead 61205 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 24)) = fsWrite 61206 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 32)) = fsTruncate 61207 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 40)) = fsSync 61208 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 48)) = fsFileSize 61209 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 56)) = fsLock 61210 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 64)) = fsUnlock 61211 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 72)) = fsCheckReservedLock 61212 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 80)) = fsFileControl 61213 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 88)) = fsSectorSize 61214 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 96)) = fsDeviceCharacteristics 61215 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 40)) = fsOpen1 61216 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 48)) = fsDelete 61217 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 56)) = fsAccess 61218 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 64)) = fsFullPathname 61219 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 72)) = fsDlOpen 61220 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 80)) = fsDlError 61221 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 88)) = fsDlSym 61222 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 96)) = fsDlClose 61223 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 104)) = fsRandomness 61224 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 112)) = fsSleep 61225 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 120)) = fsCurrentTime 61226 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 8)) = fsdirConnect1 61227 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 16)) = fsdirConnect1 61228 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 24)) = fsdirBestIndex1 61229 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 32)) = fsdirDisconnect1 61230 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 40)) = fsdirDisconnect1 61231 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 48)) = fsdirOpen1 61232 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 56)) = fsdirClose1 61233 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 64)) = fsdirFilter1 61234 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 72)) = fsdirNext1 61235 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 80)) = fsdirEof1 61236 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 88)) = fsdirColumn1 61237 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 96)) = fsdirRowid1 61238 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 16)) = fsdirConnect 61239 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 24)) = fsdirBestIndex 61240 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 32)) = fsdirDisconnect 61241 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 48)) = fsdirOpen 61242 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 56)) = fsdirClose 61243 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 64)) = fsdirFilter 61244 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 72)) = fsdirNext 61245 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 80)) = fsdirEof 61246 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 88)) = fsdirColumn 61247 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 96)) = fsdirRowid 61248 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 8)) = fstreeConnect 61249 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 16)) = fstreeConnect 61250 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 24)) = fstreeBestIndex 61251 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 32)) = fstreeDisconnect 61252 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 40)) = fstreeDisconnect 61253 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 48)) = fstreeOpen 61254 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 56)) = fstreeClose 61255 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 64)) = fstreeFilter 61256 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 72)) = fstreeNext 61257 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 80)) = fstreeEof 61258 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 88)) = fstreeColumn 61259 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 96)) = fstreeRowid 61260 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 8)) = fts5tokConnectMethod 61261 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 16)) = fts5tokConnectMethod 61262 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 24)) = fts5tokBestIndexMethod 61263 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 32)) = fts5tokDisconnectMethod 61264 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 40)) = fts5tokDisconnectMethod 61265 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 48)) = fts5tokOpenMethod 61266 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 56)) = fts5tokCloseMethod 61267 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 64)) = fts5tokFilterMethod 61268 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 72)) = fts5tokNextMethod 61269 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 80)) = fts5tokEofMethod 61270 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 88)) = fts5tokColumnMethod 61271 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 96)) = fts5tokRowidMethod 61272 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 8)) = fuzzerConnect 61273 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 16)) = fuzzerConnect 61274 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 24)) = fuzzerBestIndex 61275 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 32)) = fuzzerDisconnect 61276 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 40)) = fuzzerDisconnect 61277 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 48)) = fuzzerOpen 61278 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 56)) = fuzzerClose 61279 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 64)) = fuzzerFilter 61280 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 72)) = fuzzerNext 61281 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 80)) = fuzzerEof 61282 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 88)) = fuzzerColumn 61283 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 96)) = fuzzerRowid 61284 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 8)) = intarrayCreate 61285 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 16)) = intarrayCreate 61286 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 24)) = intarrayBestIndex 61287 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 32)) = intarrayDestroy 61288 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 40)) = intarrayDestroy 61289 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 48)) = intarrayOpen 61290 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 56)) = intarrayClose 61291 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 64)) = intarrayFilter 61292 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 72)) = intarrayNext 61293 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 80)) = intarrayEof 61294 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 88)) = intarrayColumn 61295 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 96)) = intarrayRowid 61296 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 8)) = jtClose 61297 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 16)) = jtRead 61298 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 24)) = jtWrite 61299 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 32)) = jtTruncate 61300 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 40)) = jtSync 61301 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 48)) = jtFileSize 61302 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 56)) = jtLock 61303 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 64)) = jtUnlock 61304 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 72)) = jtCheckReservedLock 61305 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 80)) = jtFileControl 61306 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 88)) = jtSectorSize 61307 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 96)) = jtDeviceCharacteristics 61308 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 40)) = jtOpen 61309 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 48)) = jtDelete 61310 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 56)) = jtAccess 61311 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 64)) = jtFullPathname 61312 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 72)) = jtDlOpen 61313 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 80)) = jtDlError 61314 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 88)) = jtDlSym 61315 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 96)) = jtDlClose 61316 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 104)) = jtRandomness 61317 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 112)) = jtSleep 61318 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 120)) = jtCurrentTime 61319 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 128)) = jtGetLastError 61320 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 136)) = jtCurrentTimeInt64 61321 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 16)) = prefixesConnect 61322 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 24)) = prefixesBestIndex 61323 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 32)) = prefixesDisconnect 61324 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 48)) = prefixesOpen 61325 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 56)) = prefixesClose 61326 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 64)) = prefixesFilter 61327 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 72)) = prefixesNext 61328 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 80)) = prefixesEof 61329 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 88)) = prefixesColumn 61330 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 96)) = prefixesRowid 61331 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&pzNeededCollation)) + 0)) = uintptr(unsafe.Pointer(&zNeededCollation)) 61332 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 16)) = qpvtabConnect 61333 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 24)) = qpvtabBestIndex 61334 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 32)) = qpvtabDisconnect 61335 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 48)) = qpvtabOpen 61336 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 56)) = qpvtabClose 61337 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 64)) = qpvtabFilter 61338 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 72)) = qpvtabNext 61339 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 80)) = qpvtabEof 61340 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 88)) = qpvtabColumn 61341 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 96)) = qpvtabRowid 61342 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 8)) = schemaCreate 61343 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 16)) = schemaCreate 61344 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 24)) = schemaBestIndex 61345 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 32)) = schemaDestroy 61346 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 40)) = schemaDestroy 61347 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 48)) = schemaOpen 61348 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 56)) = schemaClose 61349 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 64)) = schemaFilter 61350 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 72)) = schemaNext 61351 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 80)) = schemaEof 61352 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 88)) = schemaColumn 61353 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 96)) = schemaRowid 61354 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 16)) = seriesConnect 61355 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 24)) = seriesBestIndex 61356 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 32)) = seriesDisconnect 61357 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 48)) = seriesOpen 61358 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 56)) = seriesClose 61359 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 64)) = seriesFilter 61360 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 72)) = seriesNext 61361 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 80)) = seriesEof 61362 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 88)) = seriesColumn 61363 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 96)) = seriesRowid 61364 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 8)) = spellfix1Create 61365 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 16)) = spellfix1Connect 61366 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 24)) = spellfix1BestIndex 61367 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 32)) = spellfix1Disconnect 61368 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 40)) = spellfix1Destroy 61369 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 48)) = spellfix1Open 61370 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 56)) = spellfix1Close 61371 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 64)) = spellfix1Filter 61372 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 72)) = spellfix1Next 61373 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 80)) = spellfix1Eof 61374 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 88)) = spellfix1Column 61375 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 96)) = spellfix1Rowid 61376 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 104)) = spellfix1Update 61377 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 152)) = spellfix1Rename 61378 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 8)) = tclConnect 61379 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 16)) = tclConnect 61380 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 24)) = tclBestIndex 61381 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 32)) = tclDisconnect 61382 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 40)) = tclDisconnect 61383 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 48)) = tclOpen 61384 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 56)) = tclClose 61385 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 64)) = tclFilter 61386 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 72)) = tclNext 61387 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 80)) = tclEof 61388 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 88)) = tclColumn 61389 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 96)) = tclRowid 61390 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 8)) = tclvarConnect 61391 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 16)) = tclvarConnect 61392 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 24)) = tclvarBestIndex 61393 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 32)) = tclvarDisconnect 61394 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 40)) = tclvarDisconnect 61395 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 48)) = tclvarOpen 61396 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 56)) = tclvarClose 61397 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 64)) = tclvarFilter 61398 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 72)) = tclvarNext 61399 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 80)) = tclvarEof 61400 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 88)) = tclvarColumn 61401 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 96)) = tclvarRowid 61402 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 104)) = tclvarUpdate 61403 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 8)) = uintptr(unsafe.Pointer(&testpcacheGlobal)) 61404 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 16)) = testpcacheInit 61405 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 24)) = testpcacheShutdown 61406 *(*func(*libc.TLS, int32, int32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 32)) = testpcacheCreate 61407 *(*func(*libc.TLS, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 40)) = testpcacheCachesize 61408 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 48)) = testpcachePagecount 61409 *(*func(*libc.TLS, uintptr, uint32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 56)) = testpcacheFetch 61410 *(*func(*libc.TLS, uintptr, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 64)) = testpcacheUnpin 61411 *(*func(*libc.TLS, uintptr, uintptr, uint32, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 72)) = testpcacheRekey 61412 *(*func(*libc.TLS, uintptr, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 80)) = testpcacheTruncate 61413 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 88)) = testpcacheDestroy 61414 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 8)) = tmpClose 61415 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 16)) = tmpRead 61416 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 24)) = tmpWrite 61417 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 32)) = tmpTruncate 61418 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 40)) = tmpSync 61419 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 48)) = tmpFileSize 61420 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 56)) = tmpLock 61421 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 64)) = tmpUnlock 61422 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 72)) = tmpCheckReservedLock 61423 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 80)) = tmpFileControl 61424 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 88)) = tmpSectorSize 61425 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 96)) = tmpDeviceCharacteristics 61426 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 8)) = tvfsClose 61427 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 16)) = tvfsRead 61428 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 24)) = tvfsWrite 61429 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 32)) = tvfsTruncate 61430 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 40)) = tvfsSync 61431 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 48)) = tvfsFileSize 61432 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 56)) = tvfsLock 61433 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 64)) = tvfsUnlock 61434 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 72)) = tvfsCheckReservedLock 61435 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 80)) = tvfsFileControl 61436 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 88)) = tvfsSectorSize 61437 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 96)) = tvfsDeviceCharacteristics 61438 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 104)) = tvfsShmMap 61439 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 112)) = tvfsShmLock 61440 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 120)) = tvfsShmBarrier 61441 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 128)) = tvfsShmUnmap 61442 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 136)) = tvfsFetch 61443 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 144)) = tvfsUnfetch 61444 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 40)) = tvfsOpen 61445 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 48)) = tvfsDelete 61446 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 56)) = tvfsAccess 61447 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 64)) = tvfsFullPathname 61448 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 104)) = tvfsRandomness 61449 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 112)) = tvfsSleep 61450 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 120)) = tvfsCurrentTime 61451 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 8)) = unionConnect 61452 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 16)) = unionConnect 61453 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 24)) = unionBestIndex 61454 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 32)) = unionDisconnect 61455 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 40)) = unionDisconnect 61456 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 48)) = unionOpen 61457 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 56)) = unionClose 61458 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 64)) = unionFilter 61459 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 72)) = unionNext 61460 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 80)) = unionEof 61461 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 88)) = unionColumn 61462 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 96)) = unionRowid 61463 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 8)) = vfslogClose 61464 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 16)) = vfslogRead 61465 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 24)) = vfslogWrite 61466 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 32)) = vfslogTruncate 61467 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 40)) = vfslogSync 61468 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 48)) = vfslogFileSize 61469 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 56)) = vfslogLock 61470 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 64)) = vfslogUnlock 61471 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 72)) = vfslogCheckReservedLock 61472 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 80)) = vfslogFileControl 61473 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 88)) = vfslogSectorSize 61474 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 96)) = vfslogDeviceCharacteristics 61475 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 104)) = vfslogShmMap 61476 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 112)) = vfslogShmLock 61477 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 120)) = vfslogShmBarrier 61478 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 128)) = vfslogShmUnmap 61479 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 8)) = vlogConnect 61480 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 16)) = vlogConnect 61481 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 24)) = vlogBestIndex 61482 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 32)) = vlogDisconnect 61483 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 40)) = vlogDisconnect 61484 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 48)) = vlogOpen 61485 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 56)) = vlogClose 61486 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 64)) = vlogFilter 61487 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 72)) = vlogNext 61488 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 80)) = vlogEof 61489 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 88)) = vlogColumn 61490 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 96)) = vlogRowid 61491 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 40)) = vfslogOpen 61492 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 48)) = vfslogDelete 61493 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 56)) = vfslogAccess 61494 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 64)) = vfslogFullPathname 61495 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 72)) = vfslogDlOpen 61496 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 80)) = vfslogDlError 61497 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 88)) = vfslogDlSym 61498 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 96)) = vfslogDlClose 61499 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 104)) = vfslogRandomness 61500 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 112)) = vfslogSleep 61501 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 120)) = vfslogCurrentTime 61502 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 128)) = vfslogGetLastError 61503 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 136)) = vfslogCurrentTimeInt64 61504 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 8)) = wholenumberConnect 61505 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 16)) = wholenumberConnect 61506 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 24)) = wholenumberBestIndex 61507 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 32)) = wholenumberDisconnect 61508 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 40)) = wholenumberDisconnect 61509 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 48)) = wholenumberOpen 61510 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 56)) = wholenumberClose 61511 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 64)) = wholenumberFilter 61512 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 72)) = wholenumberNext 61513 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 80)) = wholenumberEof 61514 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 88)) = wholenumberColumn 61515 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 96)) = wholenumberRowid 61516 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 8)) = devsymClose 61517 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 16)) = devsymRead 61518 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 24)) = writecrashWrite 61519 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 32)) = devsymTruncate 61520 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 40)) = devsymSync 61521 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 48)) = devsymFileSize 61522 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 56)) = devsymLock 61523 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 64)) = devsymUnlock 61524 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 72)) = devsymCheckReservedLock 61525 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 80)) = devsymFileControl 61526 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 88)) = writecrashSectorSize 61527 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 96)) = writecrashDeviceCharacteristics 61528 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 104)) = devsymShmMap 61529 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 112)) = devsymShmLock 61530 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 120)) = devsymShmBarrier 61531 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 128)) = devsymShmUnmap 61532 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 40)) = writecrashOpen 61533 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 48)) = devsymDelete 61534 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 56)) = devsymAccess 61535 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 64)) = devsymFullPathname 61536 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 104)) = devsymRandomness 61537 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 112)) = devsymSleep 61538 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 120)) = devsymCurrentTime 61539 } 61540 61541 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\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\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\x001\x00rowid32\x00casesensitivelike\x00configslower\x001.0\x00curdir\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\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" 61542 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data