gitlab.com/CoiaPrant/sqlite3@v1.19.1/internal/testfixture/testfixture_openbsd_arm64.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_openbsd_arm64.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 BIG_ENDIAN = 4321 28 BUFSIZ = 1024 29 BYTE_ORDER = 1234 30 EOF = -1 31 EXPERT_CONFIG_SAMPLE = 1 32 EXPERT_REPORT_CANDIDATES = 4 33 EXPERT_REPORT_INDEXES = 2 34 EXPERT_REPORT_PLAN = 3 35 EXPERT_REPORT_SQL = 1 36 FILENAME_MAX = 1024 37 FOPEN_MAX = 20 38 FTS5_TOKENIZE_AUX = 0x0008 39 FTS5_TOKENIZE_DOCUMENT = 0x0004 40 FTS5_TOKENIZE_PREFIX = 0x0002 41 FTS5_TOKENIZE_QUERY = 0x0001 42 FTS5_TOKEN_COLOCATED = 0x0001 43 FULLY_WITHIN = 2 44 HAVE_USLEEP = 1 45 IDX_HASH_SIZE = 1023 46 LITTLE_ENDIAN = 1234 47 L_ctermid = 1024 48 L_tmpnam = 1024 49 NDEBUG = 1 50 NOT_WITHIN = 0 51 PARTLY_WITHIN = 1 52 PDP_ENDIAN = 3412 53 P_tmpdir = "/tmp/" 54 SEEK_CUR = 1 55 SEEK_END = 2 56 SEEK_SET = 0 57 SQLITE3_H = 0 58 SQLITE3_TEXT = 3 59 SQLITEEXPERT_H = 1 60 SQLITE_ABORT = 4 61 SQLITE_ABORT_ROLLBACK = 516 62 SQLITE_ACCESS_EXISTS = 0 63 SQLITE_ACCESS_READ = 2 64 SQLITE_ACCESS_READWRITE = 1 65 SQLITE_ALTER_TABLE = 26 66 SQLITE_ANALYZE = 28 67 SQLITE_ANY = 5 68 SQLITE_API = 0 69 SQLITE_APICALL = 0 70 SQLITE_ATTACH = 24 71 SQLITE_AUTH = 23 72 SQLITE_AUTH_USER = 279 73 SQLITE_BLOB = 4 74 SQLITE_BUSY = 5 75 SQLITE_BUSY_RECOVERY = 261 76 SQLITE_BUSY_SNAPSHOT = 517 77 SQLITE_BUSY_TIMEOUT = 773 78 SQLITE_CALLBACK = 0 79 SQLITE_CANTOPEN = 14 80 SQLITE_CANTOPEN_CONVPATH = 1038 81 SQLITE_CANTOPEN_DIRTYWAL = 1294 82 SQLITE_CANTOPEN_FULLPATH = 782 83 SQLITE_CANTOPEN_ISDIR = 526 84 SQLITE_CANTOPEN_NOTEMPDIR = 270 85 SQLITE_CANTOPEN_SYMLINK = 1550 86 SQLITE_CDECL = 0 87 SQLITE_CHANGESETAPPLY_INVERT = 0x0002 88 SQLITE_CHANGESETAPPLY_NOSAVEPOINT = 0x0001 89 SQLITE_CHANGESETSTART_INVERT = 0x0002 90 SQLITE_CHANGESET_ABORT = 2 91 SQLITE_CHANGESET_CONFLICT = 3 92 SQLITE_CHANGESET_CONSTRAINT = 4 93 SQLITE_CHANGESET_DATA = 1 94 SQLITE_CHANGESET_FOREIGN_KEY = 5 95 SQLITE_CHANGESET_NOTFOUND = 2 96 SQLITE_CHANGESET_OMIT = 0 97 SQLITE_CHANGESET_REPLACE = 1 98 SQLITE_CHECKPOINT_FULL = 1 99 SQLITE_CHECKPOINT_PASSIVE = 0 100 SQLITE_CHECKPOINT_RESTART = 2 101 SQLITE_CHECKPOINT_TRUNCATE = 3 102 SQLITE_CKSUMVFS_STATIC = 1 103 SQLITE_CONFIG_COVERING_INDEX_SCAN = 20 104 SQLITE_CONFIG_GETMALLOC = 5 105 SQLITE_CONFIG_GETMUTEX = 11 106 SQLITE_CONFIG_GETPCACHE = 15 107 SQLITE_CONFIG_GETPCACHE2 = 19 108 SQLITE_CONFIG_HEAP = 8 109 SQLITE_CONFIG_LOG = 16 110 SQLITE_CONFIG_LOOKASIDE = 13 111 SQLITE_CONFIG_MALLOC = 4 112 SQLITE_CONFIG_MEMDB_MAXSIZE = 29 113 SQLITE_CONFIG_MEMSTATUS = 9 114 SQLITE_CONFIG_MMAP_SIZE = 22 115 SQLITE_CONFIG_MULTITHREAD = 2 116 SQLITE_CONFIG_MUTEX = 10 117 SQLITE_CONFIG_PAGECACHE = 7 118 SQLITE_CONFIG_PCACHE = 14 119 SQLITE_CONFIG_PCACHE2 = 18 120 SQLITE_CONFIG_PCACHE_HDRSZ = 24 121 SQLITE_CONFIG_PMASZ = 25 122 SQLITE_CONFIG_SCRATCH = 6 123 SQLITE_CONFIG_SERIALIZED = 3 124 SQLITE_CONFIG_SINGLETHREAD = 1 125 SQLITE_CONFIG_SMALL_MALLOC = 27 126 SQLITE_CONFIG_SORTERREF_SIZE = 28 127 SQLITE_CONFIG_SQLLOG = 21 128 SQLITE_CONFIG_STMTJRNL_SPILL = 26 129 SQLITE_CONFIG_URI = 17 130 SQLITE_CONFIG_WIN32_HEAPSIZE = 23 131 SQLITE_CONSTRAINT = 19 132 SQLITE_CONSTRAINT_CHECK = 275 133 SQLITE_CONSTRAINT_COMMITHOOK = 531 134 SQLITE_CONSTRAINT_DATATYPE = 3091 135 SQLITE_CONSTRAINT_FOREIGNKEY = 787 136 SQLITE_CONSTRAINT_FUNCTION = 1043 137 SQLITE_CONSTRAINT_NOTNULL = 1299 138 SQLITE_CONSTRAINT_PINNED = 2835 139 SQLITE_CONSTRAINT_PRIMARYKEY = 1555 140 SQLITE_CONSTRAINT_ROWID = 2579 141 SQLITE_CONSTRAINT_TRIGGER = 1811 142 SQLITE_CONSTRAINT_UNIQUE = 2067 143 SQLITE_CONSTRAINT_VTAB = 2323 144 SQLITE_COPY = 0 145 SQLITE_CORE = 1 146 SQLITE_CORRUPT = 11 147 SQLITE_CORRUPT_INDEX = 779 148 SQLITE_CORRUPT_SEQUENCE = 523 149 SQLITE_CORRUPT_VTAB = 267 150 SQLITE_CREATE_INDEX = 1 151 SQLITE_CREATE_TABLE = 2 152 SQLITE_CREATE_TEMP_INDEX = 3 153 SQLITE_CREATE_TEMP_TABLE = 4 154 SQLITE_CREATE_TEMP_TRIGGER = 5 155 SQLITE_CREATE_TEMP_VIEW = 6 156 SQLITE_CREATE_TRIGGER = 7 157 SQLITE_CREATE_VIEW = 8 158 SQLITE_CREATE_VTABLE = 29 159 SQLITE_DBCONFIG_DEFENSIVE = 1010 160 SQLITE_DBCONFIG_DQS_DDL = 1014 161 SQLITE_DBCONFIG_DQS_DML = 1013 162 SQLITE_DBCONFIG_ENABLE_FKEY = 1002 163 SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER = 1004 164 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION = 1005 165 SQLITE_DBCONFIG_ENABLE_QPSG = 1007 166 SQLITE_DBCONFIG_ENABLE_TRIGGER = 1003 167 SQLITE_DBCONFIG_ENABLE_VIEW = 1015 168 SQLITE_DBCONFIG_LEGACY_ALTER_TABLE = 1012 169 SQLITE_DBCONFIG_LEGACY_FILE_FORMAT = 1016 170 SQLITE_DBCONFIG_LOOKASIDE = 1001 171 SQLITE_DBCONFIG_MAINDBNAME = 1000 172 SQLITE_DBCONFIG_MAX = 1017 173 SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE = 1006 174 SQLITE_DBCONFIG_RESET_DATABASE = 1009 175 SQLITE_DBCONFIG_TRIGGER_EQP = 1008 176 SQLITE_DBCONFIG_TRUSTED_SCHEMA = 1017 177 SQLITE_DBCONFIG_WRITABLE_SCHEMA = 1011 178 SQLITE_DBSTATUS_CACHE_HIT = 7 179 SQLITE_DBSTATUS_CACHE_MISS = 8 180 SQLITE_DBSTATUS_CACHE_SPILL = 12 181 SQLITE_DBSTATUS_CACHE_USED = 1 182 SQLITE_DBSTATUS_CACHE_USED_SHARED = 11 183 SQLITE_DBSTATUS_CACHE_WRITE = 9 184 SQLITE_DBSTATUS_DEFERRED_FKS = 10 185 SQLITE_DBSTATUS_LOOKASIDE_HIT = 4 186 SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL = 6 187 SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE = 5 188 SQLITE_DBSTATUS_LOOKASIDE_USED = 0 189 SQLITE_DBSTATUS_MAX = 12 190 SQLITE_DBSTATUS_SCHEMA_USED = 2 191 SQLITE_DBSTATUS_STMT_USED = 3 192 SQLITE_DEFAULT_MEMSTATUS = 0 193 SQLITE_DEFAULT_PAGE_SIZE = 1024 194 SQLITE_DELETE = 9 195 SQLITE_DENY = 1 196 SQLITE_DEPRECATED = 0 197 SQLITE_DESERIALIZE_FREEONCLOSE = 1 198 SQLITE_DESERIALIZE_READONLY = 4 199 SQLITE_DESERIALIZE_RESIZEABLE = 2 200 SQLITE_DETACH = 25 201 SQLITE_DETERMINISTIC = 0x000000800 202 SQLITE_DIRECTONLY = 0x000080000 203 SQLITE_DONE = 101 204 SQLITE_DROP_INDEX = 10 205 SQLITE_DROP_TABLE = 11 206 SQLITE_DROP_TEMP_INDEX = 12 207 SQLITE_DROP_TEMP_TABLE = 13 208 SQLITE_DROP_TEMP_TRIGGER = 14 209 SQLITE_DROP_TEMP_VIEW = 15 210 SQLITE_DROP_TRIGGER = 16 211 SQLITE_DROP_VIEW = 17 212 SQLITE_DROP_VTABLE = 30 213 SQLITE_EMPTY = 16 214 SQLITE_ENABLE_BYTECODE_VTAB = 1 215 SQLITE_ENABLE_COLUMN_METADATA = 1 216 SQLITE_ENABLE_DBPAGE_VTAB = 1 217 SQLITE_ENABLE_DBSTAT_VTAB = 1 218 SQLITE_ENABLE_DESERIALIZE = 1 219 SQLITE_ENABLE_EXPLAIN_COMMENTS = 1 220 SQLITE_ENABLE_FTS5 = 1 221 SQLITE_ENABLE_GEOPOLY = 1 222 SQLITE_ENABLE_MATH_FUNCTIONS = 1 223 SQLITE_ENABLE_MEMORY_MANAGEMENT = 1 224 SQLITE_ENABLE_OFFSET_SQL_FUNC = 1 225 SQLITE_ENABLE_PREUPDATE_HOOK = 1 226 SQLITE_ENABLE_RBU = 1 227 SQLITE_ENABLE_RTREE = 1 228 SQLITE_ENABLE_SESSION = 1 229 SQLITE_ENABLE_SNAPSHOT = 1 230 SQLITE_ENABLE_STAT4 = 1 231 SQLITE_ENABLE_STMTVTAB = 1 232 SQLITE_ENABLE_UNLOCK_NOTIFY = 1 233 SQLITE_ERROR = 1 234 SQLITE_ERROR_MISSING_COLLSEQ = 257 235 SQLITE_ERROR_RETRY = 513 236 SQLITE_ERROR_SNAPSHOT = 769 237 SQLITE_EXPERIMENTAL = 0 238 SQLITE_FAIL = 3 239 SQLITE_FCNTL_BEGIN_ATOMIC_WRITE = 31 240 SQLITE_FCNTL_BUSYHANDLER = 15 241 SQLITE_FCNTL_CHUNK_SIZE = 6 242 SQLITE_FCNTL_CKPT_DONE = 37 243 SQLITE_FCNTL_CKPT_START = 39 244 SQLITE_FCNTL_CKSM_FILE = 41 245 SQLITE_FCNTL_COMMIT_ATOMIC_WRITE = 32 246 SQLITE_FCNTL_COMMIT_PHASETWO = 22 247 SQLITE_FCNTL_DATA_VERSION = 35 248 SQLITE_FCNTL_EXTERNAL_READER = 40 249 SQLITE_FCNTL_FILE_POINTER = 7 250 SQLITE_FCNTL_GET_LOCKPROXYFILE = 2 251 SQLITE_FCNTL_HAS_MOVED = 20 252 SQLITE_FCNTL_JOURNAL_POINTER = 28 253 SQLITE_FCNTL_LAST_ERRNO = 4 254 SQLITE_FCNTL_LOCKSTATE = 1 255 SQLITE_FCNTL_LOCK_TIMEOUT = 34 256 SQLITE_FCNTL_MMAP_SIZE = 18 257 SQLITE_FCNTL_OVERWRITE = 11 258 SQLITE_FCNTL_PDB = 30 259 SQLITE_FCNTL_PERSIST_WAL = 10 260 SQLITE_FCNTL_POWERSAFE_OVERWRITE = 13 261 SQLITE_FCNTL_PRAGMA = 14 262 SQLITE_FCNTL_RBU = 26 263 SQLITE_FCNTL_RESERVE_BYTES = 38 264 SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE = 33 265 SQLITE_FCNTL_SET_LOCKPROXYFILE = 3 266 SQLITE_FCNTL_SIZE_HINT = 5 267 SQLITE_FCNTL_SIZE_LIMIT = 36 268 SQLITE_FCNTL_SYNC = 21 269 SQLITE_FCNTL_SYNC_OMITTED = 8 270 SQLITE_FCNTL_TEMPFILENAME = 16 271 SQLITE_FCNTL_TRACE = 19 272 SQLITE_FCNTL_VFSNAME = 12 273 SQLITE_FCNTL_VFS_POINTER = 27 274 SQLITE_FCNTL_WAL_BLOCK = 24 275 SQLITE_FCNTL_WIN32_AV_RETRY = 9 276 SQLITE_FCNTL_WIN32_GET_HANDLE = 29 277 SQLITE_FCNTL_WIN32_SET_HANDLE = 23 278 SQLITE_FCNTL_ZIPVFS = 25 279 SQLITE_FLOAT = 2 280 SQLITE_FORMAT = 24 281 SQLITE_FULL = 13 282 SQLITE_FUNCTION = 31 283 SQLITE_GET_LOCKPROXYFILE = 2 284 SQLITE_IGNORE = 2 285 SQLITE_INDEX_CONSTRAINT_EQ = 2 286 SQLITE_INDEX_CONSTRAINT_FUNCTION = 150 287 SQLITE_INDEX_CONSTRAINT_GE = 32 288 SQLITE_INDEX_CONSTRAINT_GLOB = 66 289 SQLITE_INDEX_CONSTRAINT_GT = 4 290 SQLITE_INDEX_CONSTRAINT_IS = 72 291 SQLITE_INDEX_CONSTRAINT_ISNOT = 69 292 SQLITE_INDEX_CONSTRAINT_ISNOTNULL = 70 293 SQLITE_INDEX_CONSTRAINT_ISNULL = 71 294 SQLITE_INDEX_CONSTRAINT_LE = 8 295 SQLITE_INDEX_CONSTRAINT_LIKE = 65 296 SQLITE_INDEX_CONSTRAINT_LIMIT = 73 297 SQLITE_INDEX_CONSTRAINT_LT = 16 298 SQLITE_INDEX_CONSTRAINT_MATCH = 64 299 SQLITE_INDEX_CONSTRAINT_NE = 68 300 SQLITE_INDEX_CONSTRAINT_OFFSET = 74 301 SQLITE_INDEX_CONSTRAINT_REGEXP = 67 302 SQLITE_INDEX_SCAN_UNIQUE = 1 303 SQLITE_INNOCUOUS = 0x000200000 304 SQLITE_INSERT = 18 305 SQLITE_INTEGER = 1 306 SQLITE_INTERNAL = 2 307 SQLITE_INTERRUPT = 9 308 SQLITE_IOCAP_ATOMIC = 0x00000001 309 SQLITE_IOCAP_ATOMIC16K = 0x00000040 310 SQLITE_IOCAP_ATOMIC1K = 0x00000004 311 SQLITE_IOCAP_ATOMIC2K = 0x00000008 312 SQLITE_IOCAP_ATOMIC32K = 0x00000080 313 SQLITE_IOCAP_ATOMIC4K = 0x00000010 314 SQLITE_IOCAP_ATOMIC512 = 0x00000002 315 SQLITE_IOCAP_ATOMIC64K = 0x00000100 316 SQLITE_IOCAP_ATOMIC8K = 0x00000020 317 SQLITE_IOCAP_BATCH_ATOMIC = 0x00004000 318 SQLITE_IOCAP_IMMUTABLE = 0x00002000 319 SQLITE_IOCAP_POWERSAFE_OVERWRITE = 0x00001000 320 SQLITE_IOCAP_SAFE_APPEND = 0x00000200 321 SQLITE_IOCAP_SEQUENTIAL = 0x00000400 322 SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN = 0x00000800 323 SQLITE_IOERR = 10 324 SQLITE_IOERR_ACCESS = 3338 325 SQLITE_IOERR_AUTH = 7178 326 SQLITE_IOERR_BEGIN_ATOMIC = 7434 327 SQLITE_IOERR_BLOCKED = 2826 328 SQLITE_IOERR_CHECKRESERVEDLOCK = 3594 329 SQLITE_IOERR_CLOSE = 4106 330 SQLITE_IOERR_COMMIT_ATOMIC = 7690 331 SQLITE_IOERR_CONVPATH = 6666 332 SQLITE_IOERR_CORRUPTFS = 8458 333 SQLITE_IOERR_DATA = 8202 334 SQLITE_IOERR_DELETE = 2570 335 SQLITE_IOERR_DELETE_NOENT = 5898 336 SQLITE_IOERR_DIR_CLOSE = 4362 337 SQLITE_IOERR_DIR_FSYNC = 1290 338 SQLITE_IOERR_FSTAT = 1802 339 SQLITE_IOERR_FSYNC = 1034 340 SQLITE_IOERR_GETTEMPPATH = 6410 341 SQLITE_IOERR_LOCK = 3850 342 SQLITE_IOERR_MMAP = 6154 343 SQLITE_IOERR_NOMEM = 3082 344 SQLITE_IOERR_RDLOCK = 2314 345 SQLITE_IOERR_READ = 266 346 SQLITE_IOERR_ROLLBACK_ATOMIC = 7946 347 SQLITE_IOERR_SEEK = 5642 348 SQLITE_IOERR_SHMLOCK = 5130 349 SQLITE_IOERR_SHMMAP = 5386 350 SQLITE_IOERR_SHMOPEN = 4618 351 SQLITE_IOERR_SHMSIZE = 4874 352 SQLITE_IOERR_SHORT_READ = 522 353 SQLITE_IOERR_TRUNCATE = 1546 354 SQLITE_IOERR_UNLOCK = 2058 355 SQLITE_IOERR_VNODE = 6922 356 SQLITE_IOERR_WRITE = 778 357 SQLITE_LAST_ERRNO = 4 358 SQLITE_LIKE_DOESNT_MATCH_BLOBS = 1 359 SQLITE_LIMIT_ATTACHED = 7 360 SQLITE_LIMIT_COLUMN = 2 361 SQLITE_LIMIT_COMPOUND_SELECT = 4 362 SQLITE_LIMIT_EXPR_DEPTH = 3 363 SQLITE_LIMIT_FUNCTION_ARG = 6 364 SQLITE_LIMIT_LENGTH = 0 365 SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8 366 SQLITE_LIMIT_SQL_LENGTH = 1 367 SQLITE_LIMIT_TRIGGER_DEPTH = 10 368 SQLITE_LIMIT_VARIABLE_NUMBER = 9 369 SQLITE_LIMIT_VDBE_OP = 5 370 SQLITE_LIMIT_WORKER_THREADS = 11 371 SQLITE_LOCKED = 6 372 SQLITE_LOCKED_SHAREDCACHE = 262 373 SQLITE_LOCKED_VTAB = 518 374 SQLITE_LOCK_EXCLUSIVE = 4 375 SQLITE_LOCK_NONE = 0 376 SQLITE_LOCK_PENDING = 3 377 SQLITE_LOCK_RESERVED = 2 378 SQLITE_LOCK_SHARED = 1 379 SQLITE_MISMATCH = 20 380 SQLITE_MISUSE = 21 381 SQLITE_MUTEX_APPDEF = 1 382 SQLITE_MUTEX_FAST = 0 383 SQLITE_MUTEX_NOOP = 1 384 SQLITE_MUTEX_RECURSIVE = 1 385 SQLITE_MUTEX_STATIC_APP1 = 8 386 SQLITE_MUTEX_STATIC_APP2 = 9 387 SQLITE_MUTEX_STATIC_APP3 = 10 388 SQLITE_MUTEX_STATIC_LRU = 6 389 SQLITE_MUTEX_STATIC_LRU2 = 7 390 SQLITE_MUTEX_STATIC_MAIN = 2 391 SQLITE_MUTEX_STATIC_MASTER = 2 392 SQLITE_MUTEX_STATIC_MEM = 3 393 SQLITE_MUTEX_STATIC_MEM2 = 4 394 SQLITE_MUTEX_STATIC_OPEN = 4 395 SQLITE_MUTEX_STATIC_PMEM = 7 396 SQLITE_MUTEX_STATIC_PRNG = 5 397 SQLITE_MUTEX_STATIC_VFS1 = 11 398 SQLITE_MUTEX_STATIC_VFS2 = 12 399 SQLITE_MUTEX_STATIC_VFS3 = 13 400 SQLITE_NOLFS = 22 401 SQLITE_NOMEM = 7 402 SQLITE_NOTADB = 26 403 SQLITE_NOTFOUND = 12 404 SQLITE_NOTICE = 27 405 SQLITE_NOTICE_RECOVER_ROLLBACK = 539 406 SQLITE_NOTICE_RECOVER_WAL = 283 407 SQLITE_NULL = 5 408 SQLITE_OK = 0 409 SQLITE_OK_LOAD_PERMANENTLY = 256 410 SQLITE_OK_SYMLINK = 512 411 SQLITE_OMIT_LOAD_EXTENSION = 1 412 SQLITE_OPEN_AUTOPROXY = 0x00000020 413 SQLITE_OPEN_CREATE = 0x00000004 414 SQLITE_OPEN_DELETEONCLOSE = 0x00000008 415 SQLITE_OPEN_EXCLUSIVE = 0x00000010 416 SQLITE_OPEN_EXRESCODE = 0x02000000 417 SQLITE_OPEN_FULLMUTEX = 0x00010000 418 SQLITE_OPEN_MAIN_DB = 0x00000100 419 SQLITE_OPEN_MAIN_JOURNAL = 0x00000800 420 SQLITE_OPEN_MASTER_JOURNAL = 0x00004000 421 SQLITE_OPEN_MEMORY = 0x00000080 422 SQLITE_OPEN_NOFOLLOW = 0x01000000 423 SQLITE_OPEN_NOMUTEX = 0x00008000 424 SQLITE_OPEN_PRIVATECACHE = 0x00040000 425 SQLITE_OPEN_READONLY = 0x00000001 426 SQLITE_OPEN_READWRITE = 0x00000002 427 SQLITE_OPEN_SHAREDCACHE = 0x00020000 428 SQLITE_OPEN_SUBJOURNAL = 0x00002000 429 SQLITE_OPEN_SUPER_JOURNAL = 0x00004000 430 SQLITE_OPEN_TEMP_DB = 0x00000200 431 SQLITE_OPEN_TEMP_JOURNAL = 0x00001000 432 SQLITE_OPEN_TRANSIENT_DB = 0x00000400 433 SQLITE_OPEN_URI = 0x00000040 434 SQLITE_OPEN_WAL = 0x00080000 435 SQLITE_PERM = 3 436 SQLITE_PRAGMA = 19 437 SQLITE_PREPARE_NORMALIZE = 0x02 438 SQLITE_PREPARE_NO_VTAB = 0x04 439 SQLITE_PREPARE_PERSISTENT = 0x01 440 SQLITE_PROTOCOL = 15 441 SQLITE_RANGE = 25 442 SQLITE_READ = 20 443 SQLITE_READONLY = 8 444 SQLITE_READONLY_CANTINIT = 1288 445 SQLITE_READONLY_CANTLOCK = 520 446 SQLITE_READONLY_DBMOVED = 1032 447 SQLITE_READONLY_DIRECTORY = 1544 448 SQLITE_READONLY_RECOVERY = 264 449 SQLITE_READONLY_ROLLBACK = 776 450 SQLITE_RECURSIVE = 33 451 SQLITE_REINDEX = 27 452 SQLITE_REPLACE = 5 453 SQLITE_ROLLBACK = 1 454 SQLITE_ROW = 100 455 SQLITE_SAVEPOINT = 32 456 SQLITE_SCANSTAT_EST = 2 457 SQLITE_SCANSTAT_EXPLAIN = 4 458 SQLITE_SCANSTAT_NAME = 3 459 SQLITE_SCANSTAT_NLOOP = 0 460 SQLITE_SCANSTAT_NVISIT = 1 461 SQLITE_SCANSTAT_SELECTID = 5 462 SQLITE_SCHEMA = 17 463 SQLITE_SELECT = 21 464 SQLITE_SERIALIZE_NOCOPY = 0x001 465 SQLITE_SERIES_CONSTRAINT_VERIFY = 1 466 SQLITE_SERVER = 1 467 SQLITE_SESSION_CONFIG_STRMSIZE = 1 468 SQLITE_SESSION_OBJCONFIG_SIZE = 1 469 SQLITE_SET_LOCKPROXYFILE = 3 470 SQLITE_SHM_EXCLUSIVE = 8 471 SQLITE_SHM_LOCK = 2 472 SQLITE_SHM_NLOCK = 8 473 SQLITE_SHM_SHARED = 4 474 SQLITE_SHM_UNLOCK = 1 475 SQLITE_SOUNDEX = 1 476 SQLITE_SOURCE_ID = "2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8" 477 SQLITE_STATUS_MALLOC_COUNT = 9 478 SQLITE_STATUS_MALLOC_SIZE = 5 479 SQLITE_STATUS_MEMORY_USED = 0 480 SQLITE_STATUS_PAGECACHE_OVERFLOW = 2 481 SQLITE_STATUS_PAGECACHE_SIZE = 7 482 SQLITE_STATUS_PAGECACHE_USED = 1 483 SQLITE_STATUS_PARSER_STACK = 6 484 SQLITE_STATUS_SCRATCH_OVERFLOW = 4 485 SQLITE_STATUS_SCRATCH_SIZE = 8 486 SQLITE_STATUS_SCRATCH_USED = 3 487 SQLITE_STDCALL = 0 488 SQLITE_STMTSTATUS_AUTOINDEX = 3 489 SQLITE_STMTSTATUS_FILTER_HIT = 8 490 SQLITE_STMTSTATUS_FILTER_MISS = 7 491 SQLITE_STMTSTATUS_FULLSCAN_STEP = 1 492 SQLITE_STMTSTATUS_MEMUSED = 99 493 SQLITE_STMTSTATUS_REPREPARE = 5 494 SQLITE_STMTSTATUS_RUN = 6 495 SQLITE_STMTSTATUS_SORT = 2 496 SQLITE_STMTSTATUS_VM_STEP = 4 497 SQLITE_SUBTYPE = 0x000100000 498 SQLITE_SYNC_DATAONLY = 0x00010 499 SQLITE_SYNC_FULL = 0x00003 500 SQLITE_SYNC_NORMAL = 0x00002 501 SQLITE_SYSAPI = 0 502 SQLITE_TEMP_STORE = 1 503 SQLITE_TEST = 1 504 SQLITE_TESTCTRL_ALWAYS = 13 505 SQLITE_TESTCTRL_ASSERT = 12 506 SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS = 10 507 SQLITE_TESTCTRL_BITVEC_TEST = 8 508 SQLITE_TESTCTRL_BYTEORDER = 22 509 SQLITE_TESTCTRL_EXPLAIN_STMT = 19 510 SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS = 29 511 SQLITE_TESTCTRL_FAULT_INSTALL = 9 512 SQLITE_TESTCTRL_FIRST = 5 513 SQLITE_TESTCTRL_IMPOSTER = 25 514 SQLITE_TESTCTRL_INTERNAL_FUNCTIONS = 17 515 SQLITE_TESTCTRL_ISINIT = 23 516 SQLITE_TESTCTRL_ISKEYWORD = 16 517 SQLITE_TESTCTRL_LAST = 33 518 SQLITE_TESTCTRL_LOCALTIME_FAULT = 18 519 SQLITE_TESTCTRL_LOGEST = 33 520 SQLITE_TESTCTRL_NEVER_CORRUPT = 20 521 SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD = 19 522 SQLITE_TESTCTRL_OPTIMIZATIONS = 15 523 SQLITE_TESTCTRL_PARSER_COVERAGE = 26 524 SQLITE_TESTCTRL_PENDING_BYTE = 11 525 SQLITE_TESTCTRL_PRNG_RESET = 7 526 SQLITE_TESTCTRL_PRNG_RESTORE = 6 527 SQLITE_TESTCTRL_PRNG_SAVE = 5 528 SQLITE_TESTCTRL_PRNG_SEED = 28 529 SQLITE_TESTCTRL_RESERVE = 14 530 SQLITE_TESTCTRL_RESULT_INTREAL = 27 531 SQLITE_TESTCTRL_SCRATCHMALLOC = 17 532 SQLITE_TESTCTRL_SEEK_COUNT = 30 533 SQLITE_TESTCTRL_SORTER_MMAP = 24 534 SQLITE_TESTCTRL_TRACEFLAGS = 31 535 SQLITE_TESTCTRL_TUNE = 32 536 SQLITE_TESTCTRL_VDBE_COVERAGE = 21 537 SQLITE_TEXT = 3 538 SQLITE_THREADSAFE = 1 539 SQLITE_TOOBIG = 18 540 SQLITE_TRACE_CLOSE = 0x08 541 SQLITE_TRACE_PROFILE = 0x02 542 SQLITE_TRACE_ROW = 0x04 543 SQLITE_TRACE_STMT = 0x01 544 SQLITE_TRANSACTION = 22 545 SQLITE_TXN_NONE = 0 546 SQLITE_TXN_READ = 1 547 SQLITE_TXN_WRITE = 2 548 SQLITE_UPDATE = 23 549 SQLITE_UTF16 = 4 550 SQLITE_UTF16BE = 3 551 SQLITE_UTF16LE = 2 552 SQLITE_UTF16_ALIGNED = 8 553 SQLITE_UTF8 = 1 554 SQLITE_VERSION = "3.39.3" 555 SQLITE_VERSION_NUMBER = 3039003 556 SQLITE_VTAB_CONSTRAINT_SUPPORT = 1 557 SQLITE_VTAB_DIRECTONLY = 3 558 SQLITE_VTAB_INNOCUOUS = 2 559 SQLITE_WARNING = 28 560 SQLITE_WARNING_AUTOINDEX = 284 561 SQLITE_WIN32_DATA_DIRECTORY_TYPE = 1 562 SQLITE_WIN32_TEMP_DIRECTORY_TYPE = 2 563 TMP_MAX = 0x7fffffff 564 UNIQUE_TABLE_NAME = "t592690916721053953805701627921227776" 565 X_ASSERT_H_ = 0 566 X_BIG_ENDIAN = 4321 567 X_BYTE_ORDER = 1234 568 X_CLOCKID_T_DEFINED_ = 0 569 X_CLOCK_T_DEFINED_ = 0 570 X_FILE_OFFSET_BITS = 64 571 X_FSTDIO = 0 572 X_FTS5_H = 0 573 X_HAVE_SQLITE_CONFIG_H = 1 574 X_INT16_T_DEFINED_ = 0 575 X_INT32_T_DEFINED_ = 0 576 X_INT64_T_DEFINED_ = 0 577 X_INT8_T_DEFINED_ = 0 578 X_IOFBF = 0 579 X_IOLBF = 1 580 X_IONBF = 2 581 X_LITTLE_ENDIAN = 1234 582 X_LOCALE_T_DEFINED_ = 0 583 X_LP64 = 1 584 X_MACHINE_CDEFS_H_ = 0 585 X_MACHINE_ENDIAN_H_ = 0 586 X_MACHINE__TYPES_H_ = 0 587 X_MAX_PAGE_SHIFT = 12 588 X_OFF_T_DEFINED_ = 0 589 X_PDP_ENDIAN = 3412 590 X_PID_T_DEFINED_ = 0 591 X_QUAD_HIGHWORD = 1 592 X_QUAD_LOWWORD = 0 593 X_RET_PROTECTOR = 1 594 X_SIZE_T_DEFINED_ = 0 595 X_SQLITE3RTREE_H_ = 0 596 X_SSIZE_T_DEFINED_ = 0 597 X_STACKALIGNBYTES = 15 598 X_STDARG_H_ = 0 599 X_STDIO_H_ = 0 600 X_STRINGS_H_ = 0 601 X_STRING_H_ = 0 602 X_SYS_CDEFS_H_ = 0 603 X_SYS_ENDIAN_H_ = 0 604 X_SYS_TYPES_H_ = 0 605 X_SYS__ENDIAN_H_ = 0 606 X_SYS__TYPES_H_ = 0 607 X_TIMER_T_DEFINED_ = 0 608 X_TIME_T_DEFINED_ = 0 609 X_UINT16_T_DEFINED_ = 0 610 X_UINT32_T_DEFINED_ = 0 611 X_UINT64_T_DEFINED_ = 0 612 X_UINT8_T_DEFINED_ = 0 613 Unix = 1 614 CRTIMPORT = 0 615 DLLIMPORT = 0 616 INLINE = 0 617 MP_DIGIT_DECLARED = 0 618 MP_INT_DECLARED = 0 619 NUM_STATIC_TOKENS = 20 620 SQLITE_TCLAPI = 0 621 TCL_ALLOW_INLINE_COMPILATION = 0x20000 622 TCL_ALL_EVENTS = -3 623 TCL_ALPHA_RELEASE = 0 624 TCL_APPEND_VALUE = 4 625 TCL_ARGV_CONSTANT = 15 626 TCL_ARGV_END = 23 627 TCL_ARGV_FLOAT = 19 628 TCL_ARGV_FUNC = 20 629 TCL_ARGV_GENFUNC = 21 630 TCL_ARGV_HELP = 22 631 TCL_ARGV_INT = 16 632 TCL_ARGV_REST = 18 633 TCL_ARGV_STRING = 17 634 TCL_BETA_RELEASE = 1 635 TCL_BREAK = 3 636 TCL_CANCEL_UNWIND = 0x100000 637 TCL_CHANNEL_THREAD_INSERT = 0 638 TCL_CHANNEL_THREAD_REMOVE = 1 639 TCL_CLOSE_READ = 2 640 TCL_CLOSE_WRITE = 4 641 TCL_CONTINUE = 4 642 TCL_CONVERT_MULTIBYTE = -1 643 TCL_CONVERT_NOSPACE = -4 644 TCL_CONVERT_SYNTAX = -2 645 TCL_CONVERT_UNKNOWN = -3 646 TCL_CREATE_HARD_LINK = 0x02 647 TCL_CREATE_SYMBOLIC_LINK = 0x01 648 TCL_CUSTOM_PTR_KEYS = -1 649 TCL_CUSTOM_TYPE_KEYS = -2 650 TCL_DONT_QUOTE_HASH = 8 651 TCL_DONT_USE_BRACES = 1 652 TCL_DONT_WAIT = 2 653 TCL_DOUBLE_SPACE = 27 654 TCL_DSTRING_STATIC_SIZE = 200 655 TCL_ENCODING_CHAR_LIMIT = 0x10 656 TCL_ENCODING_END = 0x02 657 TCL_ENCODING_NO_TERMINATE = 0x08 658 TCL_ENCODING_START = 0x01 659 TCL_ENCODING_STOPONERROR = 0x04 660 TCL_ENFORCE_MODE = 16 661 TCL_ENSEMBLE_PREFIX = 0x02 662 TCL_ERROR = 1 663 TCL_EVAL_DIRECT = 0x040000 664 TCL_EVAL_GLOBAL = 0x020000 665 TCL_EVAL_INVOKE = 0x080000 666 TCL_EVAL_NOERR = 0x200000 667 TCL_EXACT = 1 668 TCL_EXCEPTION = 8 669 TCL_FILE_EVENTS = 8 670 TCL_FINAL_RELEASE = 2 671 TCL_GLOBAL_ONLY = 1 672 TCL_GLOB_PERM_HIDDEN = 2 673 TCL_GLOB_PERM_R = 4 674 TCL_GLOB_PERM_RONLY = 1 675 TCL_GLOB_PERM_W = 8 676 TCL_GLOB_PERM_X = 16 677 TCL_GLOB_TYPE_BLOCK = 1 678 TCL_GLOB_TYPE_CHAR = 2 679 TCL_GLOB_TYPE_DIR = 4 680 TCL_GLOB_TYPE_FILE = 16 681 TCL_GLOB_TYPE_LINK = 32 682 TCL_GLOB_TYPE_MOUNT = 128 683 TCL_GLOB_TYPE_PIPE = 8 684 TCL_GLOB_TYPE_SOCK = 64 685 TCL_HASH_KEY_RANDOMIZE_HASH = 0x1 686 TCL_HASH_KEY_STORE_HASH = 1 687 TCL_HASH_KEY_SYSTEM_HASH = 0x2 688 TCL_HASH_KEY_TYPE_VERSION = 1 689 TCL_IDLE_EVENTS = 32 690 TCL_INTEGER_SPACE = 24 691 TCL_INTERP_DESTROYED = 0x100 692 TCL_LEAVE_ERR_MSG = 0x200 693 TCL_LIMIT_COMMANDS = 0x01 694 TCL_LIMIT_TIME = 0x02 695 TCL_LINK_BOOLEAN = 3 696 TCL_LINK_CHAR = 6 697 TCL_LINK_DOUBLE = 2 698 TCL_LINK_FLOAT = 13 699 TCL_LINK_INT = 1 700 TCL_LINK_LONG = 11 701 TCL_LINK_READ_ONLY = 0x80 702 TCL_LINK_SHORT = 8 703 TCL_LINK_STRING = 4 704 TCL_LINK_UCHAR = 7 705 TCL_LINK_UINT = 10 706 TCL_LINK_ULONG = 12 707 TCL_LINK_USHORT = 9 708 TCL_LINK_WIDE_INT = 5 709 TCL_LINK_WIDE_UINT = 14 710 TCL_LIST_ELEMENT = 8 711 TCL_LL_MODIFIER = "ll" 712 TCL_LOAD_GLOBAL = 1 713 TCL_LOAD_LAZY = 2 714 TCL_MAJOR_VERSION = 8 715 TCL_MATCH_NOCASE = 1 716 TCL_MAX_PREC = 17 717 TCL_MINOR_VERSION = 6 718 TCL_MODE_BLOCKING = 0 719 TCL_MODE_NONBLOCKING = 1 720 TCL_NAMESPACE_ONLY = 2 721 TCL_NORETURN1 = 0 722 TCL_NO_EVAL = 0x010000 723 TCL_OK = 0 724 TCL_ONE_WORD_KEYS = 1 725 TCL_PARSE_BAD_NUMBER = 9 726 TCL_PARSE_BRACE_EXTRA = 2 727 TCL_PARSE_MISSING_BRACE = 3 728 TCL_PARSE_MISSING_BRACKET = 4 729 TCL_PARSE_MISSING_PAREN = 5 730 TCL_PARSE_MISSING_QUOTE = 6 731 TCL_PARSE_MISSING_VAR_BRACE = 7 732 TCL_PARSE_PART1 = 0x400 733 TCL_PARSE_QUOTE_EXTRA = 1 734 TCL_PARSE_SUCCESS = 0 735 TCL_PARSE_SYNTAX = 8 736 TCL_PATCH_LEVEL = "8.6.12" 737 TCL_READABLE = 2 738 TCL_REG_ADVANCED = 000003 739 TCL_REG_ADVF = 000002 740 TCL_REG_BASIC = 000000 741 TCL_REG_CANMATCH = 001000 742 TCL_REG_EXPANDED = 000040 743 TCL_REG_EXTENDED = 000001 744 TCL_REG_NEWLINE = 000300 745 TCL_REG_NLANCH = 000200 746 TCL_REG_NLSTOP = 000100 747 TCL_REG_NOCASE = 000010 748 TCL_REG_NOSUB = 000020 749 TCL_REG_NOTBOL = 0001 750 TCL_REG_NOTEOL = 0002 751 TCL_REG_QUOTE = 000004 752 TCL_RELEASE_LEVEL = 2 753 TCL_RELEASE_SERIAL = 12 754 TCL_RESULT_SIZE = 200 755 TCL_RETURN = 2 756 TCL_SERVICE_ALL = 1 757 TCL_SERVICE_NONE = 0 758 TCL_SMALL_HASH_TABLE = 4 759 TCL_STDERR = 8 760 TCL_STDIN = 2 761 TCL_STDOUT = 4 762 TCL_STORAGE_CLASS = 0 763 TCL_STRING_KEYS = 0 764 TCL_SUBST_ALL = 007 765 TCL_SUBST_BACKSLASHES = 004 766 TCL_SUBST_COMMANDS = 001 767 TCL_SUBST_VARIABLES = 002 768 TCL_THREAD_CREATE_RETURN = 0 769 TCL_THREAD_JOINABLE = 1 770 TCL_THREAD_NOFLAGS = 0 771 TCL_THREAD_STACK_DEFAULT = 0 772 TCL_TIMER_EVENTS = 16 773 TCL_TOKEN_BS = 8 774 TCL_TOKEN_COMMAND = 16 775 TCL_TOKEN_EXPAND_WORD = 256 776 TCL_TOKEN_OPERATOR = 128 777 TCL_TOKEN_SIMPLE_WORD = 2 778 TCL_TOKEN_SUB_EXPR = 64 779 TCL_TOKEN_TEXT = 4 780 TCL_TOKEN_VARIABLE = 32 781 TCL_TOKEN_WORD = 1 782 TCL_TRACE_ARRAY = 0x800 783 TCL_TRACE_DELETE = 0x4000 784 TCL_TRACE_DESTROYED = 0x80 785 TCL_TRACE_OLD_STYLE = 0x1000 786 TCL_TRACE_READS = 0x10 787 TCL_TRACE_RENAME = 0x2000 788 TCL_TRACE_RESULT_DYNAMIC = 0x8000 789 TCL_TRACE_RESULT_OBJECT = 0x10000 790 TCL_TRACE_UNSETS = 0x40 791 TCL_TRACE_WRITES = 0x20 792 TCL_UNLOAD_DETACH_FROM_INTERPRETER = 1 793 TCL_UNLOAD_DETACH_FROM_PROCESS = 2 794 TCL_UTF_MAX = 3 795 TCL_VERSION = "8.6" 796 TCL_WINDOW_EVENTS = 4 797 TCL_WRITABLE = 4 798 TCL_ZLIB_COMPRESS_BEST = 9 799 TCL_ZLIB_COMPRESS_DEFAULT = -1 800 TCL_ZLIB_COMPRESS_FAST = 1 801 TCL_ZLIB_COMPRESS_NONE = 0 802 TCL_ZLIB_FINALIZE = 4 803 TCL_ZLIB_FLUSH = 2 804 TCL_ZLIB_FORMAT_AUTO = 8 805 TCL_ZLIB_FORMAT_GZIP = 4 806 TCL_ZLIB_FORMAT_RAW = 1 807 TCL_ZLIB_FORMAT_ZLIB = 2 808 TCL_ZLIB_FULLFLUSH = 3 809 TCL_ZLIB_NO_FLUSH = 0 810 TCL_ZLIB_STREAM_DEFLATE = 16 811 TCL_ZLIB_STREAM_INFLATE = 32 812 X_CLIENTDATA = 0 813 X_TCL = 0 814 X_TCLDECLS = 0 815 X_TCLPLATDECLS = 0 816 X_FTSINT_H = 0 817 FTS3_TOK_SCHEMA = "CREATE TABLE x(input HIDDEN, token, start, end, position)" 818 APND_MARK_FOS_SZ = 8 819 APND_MARK_PREFIX = "Start-Of-SQLite3-" 820 APND_MARK_PREFIX_SZ = 17 821 APND_MARK_SIZE = 25 822 APND_MAX_SIZE = 1073741824 823 APND_ROUNDUP = 4096 824 SQLITE3EXT_H = 0 825 SQLITE_EXTENSION_INIT1 = 0 826 SQLITE_EXTENSION_INIT3 = 0 827 AMATCH_COL_COMMAND = 3 828 AMATCH_COL_DISTANCE = 1 829 AMATCH_COL_LANGUAGE = 2 830 AMATCH_COL_NWORD = 4 831 AMATCH_COL_WORD = 0 832 AMATCH_MX_COST = 1000 833 AMATCH_MX_LANGID = 2147483647 834 AMATCH_MX_LENGTH = 50 835 EXIT_FAILURE = 1 836 EXIT_SUCCESS = 0 837 RAND_MAX = 0x7fffffff 838 X_B = 0x80 839 X_C = 0x20 840 X_CTYPE_H_ = 0 841 X_L = 0x02 842 X_N = 0x04 843 X_P = 0x10 844 X_S = 0x08 845 X_STDLIB_H_ = 0 846 X_U = 0x01 847 X_WCHAR_T_DEFINED_ = 0 848 X_X = 0x40 849 CARRAY_COLUMN_COUNT = 2 850 CARRAY_COLUMN_CTYPE = 3 851 CARRAY_COLUMN_POINTER = 1 852 CARRAY_COLUMN_VALUE = 0 853 CARRAY_DOUBLE = 2 854 CARRAY_INT32 = 0 855 CARRAY_INT64 = 1 856 CARRAY_TEXT = 3 857 CLOSURE_COL_DEPTH = 1 858 CLOSURE_COL_ID = 0 859 CLOSURE_COL_IDCOLUMN = 4 860 CLOSURE_COL_PARENTCOLUMN = 5 861 CLOSURE_COL_ROOT = 2 862 CLOSURE_COL_TABLENAME = 3 863 CSVTEST_FIDX = 0x0001 864 CSV_INBUFSZ = 1024 865 CSV_MXERR = 200 866 EXPLN_COLUMN_ADDR = 0 867 EXPLN_COLUMN_COMMENT = 7 868 EXPLN_COLUMN_OPCODE = 1 869 EXPLN_COLUMN_P1 = 2 870 EXPLN_COLUMN_P2 = 3 871 EXPLN_COLUMN_P3 = 4 872 EXPLN_COLUMN_P4 = 5 873 EXPLN_COLUMN_P5 = 6 874 EXPLN_COLUMN_SQL = 8 875 ACCESSPERMS = 511 876 ALLPERMS = 4095 877 AT_EACCESS = 0x01 878 AT_FDCWD = -100 879 AT_REMOVEDIR = 0x08 880 AT_SYMLINK_FOLLOW = 0x04 881 AT_SYMLINK_NOFOLLOW = 0x02 882 CLK_TCK = 100 883 CLOCKS_PER_SEC = 100 884 CLOCK_BOOTTIME = 6 885 CLOCK_MONOTONIC = 3 886 CLOCK_PROCESS_CPUTIME_ID = 2 887 CLOCK_REALTIME = 0 888 CLOCK_THREAD_CPUTIME_ID = 4 889 CLOCK_UPTIME = 5 890 DEFFILEMODE = 438 891 DIRBLKSIZ = 1024 892 DST_AUST = 2 893 DST_CAN = 6 894 DST_EET = 5 895 DST_MET = 4 896 DST_NONE = 0 897 DST_USA = 1 898 DST_WET = 3 899 DT_BLK = 6 900 DT_CHR = 2 901 DT_DIR = 4 902 DT_FIFO = 1 903 DT_LNK = 10 904 DT_REG = 8 905 DT_SOCK = 12 906 DT_UNKNOWN = 0 907 E2BIG = 7 908 EACCES = 13 909 EADDRINUSE = 48 910 EADDRNOTAVAIL = 49 911 EAFNOSUPPORT = 47 912 EAGAIN = 35 913 EALREADY = 37 914 EAUTH = 80 915 EBADF = 9 916 EBADMSG = 92 917 EBADRPC = 72 918 EBUSY = 16 919 ECANCELED = 88 920 ECHILD = 10 921 ECONNABORTED = 53 922 ECONNREFUSED = 61 923 ECONNRESET = 54 924 EDEADLK = 11 925 EDESTADDRREQ = 39 926 EDOM = 33 927 EDQUOT = 69 928 EEXIST = 17 929 EFAULT = 14 930 EFBIG = 27 931 EFTYPE = 79 932 EHOSTDOWN = 64 933 EHOSTUNREACH = 65 934 EIDRM = 89 935 EILSEQ = 84 936 EINPROGRESS = 36 937 EINTR = 4 938 EINVAL = 22 939 EIO = 5 940 EIPSEC = 82 941 EISCONN = 56 942 EISDIR = 21 943 ELAST = 95 944 ELOOP = 62 945 EMEDIUMTYPE = 86 946 EMFILE = 24 947 EMLINK = 31 948 EMSGSIZE = 40 949 ENAMETOOLONG = 63 950 ENEEDAUTH = 81 951 ENETDOWN = 50 952 ENETRESET = 52 953 ENETUNREACH = 51 954 ENFILE = 23 955 ENOATTR = 83 956 ENOBUFS = 55 957 ENODEV = 19 958 ENOENT = 2 959 ENOEXEC = 8 960 ENOLCK = 77 961 ENOMEDIUM = 85 962 ENOMEM = 12 963 ENOMSG = 90 964 ENOPROTOOPT = 42 965 ENOSPC = 28 966 ENOSYS = 78 967 ENOTBLK = 15 968 ENOTCONN = 57 969 ENOTDIR = 20 970 ENOTEMPTY = 66 971 ENOTRECOVERABLE = 93 972 ENOTSOCK = 38 973 ENOTSUP = 91 974 ENOTTY = 25 975 ENXIO = 6 976 EOPNOTSUPP = 45 977 EOVERFLOW = 87 978 EOWNERDEAD = 94 979 EPERM = 1 980 EPFNOSUPPORT = 46 981 EPIPE = 32 982 EPROCLIM = 67 983 EPROCUNAVAIL = 76 984 EPROGMISMATCH = 75 985 EPROGUNAVAIL = 74 986 EPROTO = 95 987 EPROTONOSUPPORT = 43 988 EPROTOTYPE = 41 989 ERANGE = 34 990 EREMOTE = 71 991 EROFS = 30 992 ERPCMISMATCH = 73 993 ESHUTDOWN = 58 994 ESOCKTNOSUPPORT = 44 995 ESPIPE = 29 996 ESRCH = 3 997 ESTALE = 70 998 ETIMEDOUT = 60 999 ETOOMANYREFS = 59 1000 ETXTBSY = 26 1001 EUSERS = 68 1002 EWOULDBLOCK = 35 1003 EXDEV = 18 1004 FAPPEND = 8 1005 FASYNC = 64 1006 FD_CLOEXEC = 1 1007 FD_SETSIZE = 1024 1008 FFSYNC = 128 1009 FNDELAY = 4 1010 FNONBLOCK = 4 1011 FREAD = 0x0001 1012 FSDIR_COLUMN_DATA = 3 1013 FSDIR_COLUMN_DIR = 5 1014 FSDIR_COLUMN_MODE = 1 1015 FSDIR_COLUMN_MTIME = 2 1016 FSDIR_COLUMN_NAME = 0 1017 FSDIR_COLUMN_PATH = 4 1018 FSDIR_SCHEMA = "(name,mode,mtime,data,path HIDDEN,dir HIDDEN)" 1019 FWRITE = 0x0002 1020 F_DUPFD = 0 1021 F_DUPFD_CLOEXEC = 10 1022 F_GETFD = 1 1023 F_GETFL = 3 1024 F_GETLK = 7 1025 F_GETOWN = 5 1026 F_ISATTY = 11 1027 F_LOCK = 1 1028 F_OK = 0 1029 F_RDLCK = 1 1030 F_SETFD = 2 1031 F_SETFL = 4 1032 F_SETLK = 8 1033 F_SETLKW = 9 1034 F_SETOWN = 6 1035 F_TEST = 3 1036 F_TLOCK = 2 1037 F_ULOCK = 0 1038 F_UNLCK = 2 1039 F_WRLCK = 3 1040 ITIMER_PROF = 2 1041 ITIMER_REAL = 0 1042 ITIMER_VIRTUAL = 1 1043 KBIND_BLOCK_MAX = 2 1044 KBIND_DATA_MAX = 24 1045 LOCK_EX = 0x02 1046 LOCK_NB = 0x04 1047 LOCK_SH = 0x01 1048 LOCK_UN = 0x08 1049 L_INCR = 1 1050 L_SET = 0 1051 L_XTND = 2 1052 MAXNAMLEN = 255 1053 NBBY = 8 1054 O_ACCMODE = 0x0003 1055 O_APPEND = 0x0008 1056 O_ASYNC = 0x0040 1057 O_CLOEXEC = 0x10000 1058 O_CREAT = 0x0200 1059 O_DIRECTORY = 0x20000 1060 O_DSYNC = 128 1061 O_EXCL = 0x0800 1062 O_EXLOCK = 0x0020 1063 O_FSYNC = 0x0080 1064 O_NDELAY = 4 1065 O_NOCTTY = 0x8000 1066 O_NOFOLLOW = 0x0100 1067 O_NONBLOCK = 0x0004 1068 O_RDONLY = 0x0000 1069 O_RDWR = 0x0002 1070 O_RSYNC = 128 1071 O_SHLOCK = 0x0010 1072 O_SYNC = 0x0080 1073 O_TRUNC = 0x0400 1074 O_WRONLY = 0x0001 1075 R_OK = 0x04 1076 SF_APPEND = 0x00040000 1077 SF_ARCHIVED = 0x00010000 1078 SF_IMMUTABLE = 0x00020000 1079 SF_SETTABLE = 0xffff0000 1080 STDERR_FILENO = 2 1081 STDIN_FILENO = 0 1082 STDOUT_FILENO = 1 1083 S_BLKSIZE = 512 1084 S_IEXEC = 64 1085 S_IFBLK = 0060000 1086 S_IFCHR = 0020000 1087 S_IFDIR = 0040000 1088 S_IFIFO = 0010000 1089 S_IFLNK = 0120000 1090 S_IFMT = 0170000 1091 S_IFREG = 0100000 1092 S_IFSOCK = 0140000 1093 S_IREAD = 256 1094 S_IRGRP = 0000040 1095 S_IROTH = 0000004 1096 S_IRUSR = 0000400 1097 S_IRWXG = 0000070 1098 S_IRWXO = 0000007 1099 S_IRWXU = 0000700 1100 S_ISGID = 0002000 1101 S_ISTXT = 0001000 1102 S_ISUID = 0004000 1103 S_ISVTX = 0001000 1104 S_IWGRP = 0000020 1105 S_IWOTH = 0000002 1106 S_IWRITE = 128 1107 S_IWUSR = 0000200 1108 S_IXGRP = 0000010 1109 S_IXOTH = 0000001 1110 S_IXUSR = 0000100 1111 TIMER_ABSTIME = 0x1 1112 TIMER_RELTIME = 0x0 1113 TIME_UTC = 1 1114 UF_APPEND = 0x00000004 1115 UF_IMMUTABLE = 0x00000002 1116 UF_NODUMP = 0x00000001 1117 UF_OPAQUE = 0x00000008 1118 UF_SETTABLE = 0x0000ffff 1119 UTIME_NOW = -2 1120 UTIME_OMIT = -1 1121 W_OK = 0x02 1122 X_OK = 0x01 1123 X_CS_PATH = 1 1124 X_CS_POSIX_V6_ILP32_OFF32_CFLAGS = 2 1125 X_CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 3 1126 X_CS_POSIX_V6_ILP32_OFF32_LIBS = 4 1127 X_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 5 1128 X_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 6 1129 X_CS_POSIX_V6_ILP32_OFFBIG_LIBS = 7 1130 X_CS_POSIX_V6_LP64_OFF64_CFLAGS = 8 1131 X_CS_POSIX_V6_LP64_OFF64_LDFLAGS = 9 1132 X_CS_POSIX_V6_LP64_OFF64_LIBS = 10 1133 X_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 11 1134 X_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 12 1135 X_CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 13 1136 X_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = 14 1137 X_CS_POSIX_V7_ILP32_OFF32_CFLAGS = 16 1138 X_CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 17 1139 X_CS_POSIX_V7_ILP32_OFF32_LIBS = 18 1140 X_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 19 1141 X_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 20 1142 X_CS_POSIX_V7_ILP32_OFFBIG_LIBS = 21 1143 X_CS_POSIX_V7_LP64_OFF64_CFLAGS = 22 1144 X_CS_POSIX_V7_LP64_OFF64_LDFLAGS = 23 1145 X_CS_POSIX_V7_LP64_OFF64_LIBS = 24 1146 X_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 25 1147 X_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 26 1148 X_CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 27 1149 X_CS_POSIX_V7_THREADS_CFLAGS = 28 1150 X_CS_POSIX_V7_THREADS_LDFLAGS = 29 1151 X_CS_POSIX_V7_WIDTH_RESTRICTED_ENVS = 30 1152 X_CS_V6_ENV = 15 1153 X_CS_V7_ENV = 31 1154 X_DIRENT_H_ = 0 1155 X_ERRNO_H_ = 0 1156 X_GETOPT_DEFINED_ = 0 1157 X_INTPTR_T_DEFINED_ = 0 1158 X_PC_2_SYMLINKS = 10 1159 X_PC_ALLOC_SIZE_MIN = 11 1160 X_PC_ASYNC_IO = 12 1161 X_PC_CHOWN_RESTRICTED = 7 1162 X_PC_FILESIZEBITS = 13 1163 X_PC_LINK_MAX = 1 1164 X_PC_MAX_CANON = 2 1165 X_PC_MAX_INPUT = 3 1166 X_PC_NAME_MAX = 4 1167 X_PC_NO_TRUNC = 8 1168 X_PC_PATH_MAX = 5 1169 X_PC_PIPE_BUF = 6 1170 X_PC_PRIO_IO = 14 1171 X_PC_REC_INCR_XFER_SIZE = 15 1172 X_PC_REC_MAX_XFER_SIZE = 16 1173 X_PC_REC_MIN_XFER_SIZE = 17 1174 X_PC_REC_XFER_ALIGN = 18 1175 X_PC_SYMLINK_MAX = 19 1176 X_PC_SYNC_IO = 20 1177 X_PC_TIMESTAMP_RESOLUTION = 21 1178 X_PC_VDISABLE = 9 1179 X_POSIX2_CHAR_TERM = 1 1180 X_POSIX2_C_BIND = 200112 1181 X_POSIX2_C_DEV = -1 1182 X_POSIX2_FORT_DEV = -1 1183 X_POSIX2_FORT_RUN = -1 1184 X_POSIX2_LOCALEDEF = -1 1185 X_POSIX2_PBS = -1 1186 X_POSIX2_PBS_ACCOUNTING = -1 1187 X_POSIX2_PBS_CHECKPOINT = -1 1188 X_POSIX2_PBS_LOCATE = -1 1189 X_POSIX2_PBS_MESSAGE = -1 1190 X_POSIX2_PBS_TRACK = -1 1191 X_POSIX2_SW_DEV = 200112 1192 X_POSIX2_UPE = 200112 1193 X_POSIX2_VERSION = 200809 1194 X_POSIX_ADVISORY_INFO = -1 1195 X_POSIX_ASYNCHRONOUS_IO = -1 1196 X_POSIX_ASYNC_IO = -1 1197 X_POSIX_BARRIERS = 200112 1198 X_POSIX_CHOWN_RESTRICTED = 1 1199 X_POSIX_CLOCK_SELECTION = -1 1200 X_POSIX_CPUTIME = 200809 1201 X_POSIX_FSYNC = 200112 1202 X_POSIX_IPV6 = 0 1203 X_POSIX_JOB_CONTROL = 1 1204 X_POSIX_MAPPED_FILES = 200112 1205 X_POSIX_MEMLOCK = 200112 1206 X_POSIX_MEMLOCK_RANGE = 200112 1207 X_POSIX_MEMORY_PROTECTION = 200112 1208 X_POSIX_MESSAGE_PASSING = -1 1209 X_POSIX_MONOTONIC_CLOCK = 200112 1210 X_POSIX_NO_TRUNC = 1 1211 X_POSIX_PRIORITIZED_IO = -1 1212 X_POSIX_PRIORITY_SCHEDULING = -1 1213 X_POSIX_PRIO_IO = -1 1214 X_POSIX_RAW_SOCKETS = 200112 1215 X_POSIX_READER_WRITER_LOCKS = 200112 1216 X_POSIX_REALTIME_SIGNALS = -1 1217 X_POSIX_REGEXP = 1 1218 X_POSIX_SAVED_IDS = 1 1219 X_POSIX_SEMAPHORES = 200112 1220 X_POSIX_SHARED_MEMORY_OBJECTS = 200809 1221 X_POSIX_SHELL = 1 1222 X_POSIX_SPAWN = 200112 1223 X_POSIX_SPIN_LOCKS = 200112 1224 X_POSIX_SPORADIC_SERVER = -1 1225 X_POSIX_SYNCHRONIZED_IO = -1 1226 X_POSIX_SYNC_IO = -1 1227 X_POSIX_THREADS = 200112 1228 X_POSIX_THREAD_ATTR_STACKADDR = 200112 1229 X_POSIX_THREAD_ATTR_STACKSIZE = 200112 1230 X_POSIX_THREAD_CPUTIME = 200809 1231 X_POSIX_THREAD_PRIORITY_SCHEDULING = -1 1232 X_POSIX_THREAD_PRIO_INHERIT = -1 1233 X_POSIX_THREAD_PRIO_PROTECT = -1 1234 X_POSIX_THREAD_PROCESS_SHARED = -1 1235 X_POSIX_THREAD_ROBUST_PRIO_INHERIT = -1 1236 X_POSIX_THREAD_ROBUST_PRIO_PROTECT = -1 1237 X_POSIX_THREAD_SAFE_FUNCTIONS = 200112 1238 X_POSIX_THREAD_SPORADIC_SERVER = -1 1239 X_POSIX_TIMEOUTS = 200112 1240 X_POSIX_TIMERS = -1 1241 X_POSIX_TRACE = -1 1242 X_POSIX_TRACE_EVENT_FILTER = -1 1243 X_POSIX_TRACE_INHERIT = -1 1244 X_POSIX_TRACE_LOG = -1 1245 X_POSIX_TYPED_MEMORY_OBJECTS = -1 1246 X_POSIX_V6_ILP32_OFF32 = -1 1247 X_POSIX_V6_ILP32_OFFBIG = 0 1248 X_POSIX_V6_LP64_OFF64 = 0 1249 X_POSIX_V6_LPBIG_OFFBIG = 0 1250 X_POSIX_V7_ILP32_OFF32 = -1 1251 X_POSIX_V7_ILP32_OFFBIG = 0 1252 X_POSIX_V7_LP64_OFF64 = 0 1253 X_POSIX_V7_LPBIG_OFFBIG = 0 1254 X_POSIX_VDISABLE = 255 1255 X_POSIX_VERSION = 200809 1256 X_SC_2_CHAR_TERM = 20 1257 X_SC_2_C_BIND = 18 1258 X_SC_2_C_DEV = 19 1259 X_SC_2_FORT_DEV = 21 1260 X_SC_2_FORT_RUN = 22 1261 X_SC_2_LOCALEDEF = 23 1262 X_SC_2_PBS = 35 1263 X_SC_2_PBS_ACCOUNTING = 36 1264 X_SC_2_PBS_CHECKPOINT = 37 1265 X_SC_2_PBS_LOCATE = 38 1266 X_SC_2_PBS_MESSAGE = 39 1267 X_SC_2_PBS_TRACK = 40 1268 X_SC_2_SW_DEV = 24 1269 X_SC_2_UPE = 25 1270 X_SC_2_VERSION = 17 1271 X_SC_ADVISORY_INFO = 41 1272 X_SC_AIO_LISTIO_MAX = 42 1273 X_SC_AIO_MAX = 43 1274 X_SC_AIO_PRIO_DELTA_MAX = 44 1275 X_SC_ARG_MAX = 1 1276 X_SC_ASYNCHRONOUS_IO = 45 1277 X_SC_ATEXIT_MAX = 46 1278 X_SC_AVPHYS_PAGES = 501 1279 X_SC_BARRIERS = 47 1280 X_SC_BC_BASE_MAX = 9 1281 X_SC_BC_DIM_MAX = 10 1282 X_SC_BC_SCALE_MAX = 11 1283 X_SC_BC_STRING_MAX = 12 1284 X_SC_CHILD_MAX = 2 1285 X_SC_CLK_TCK = 3 1286 X_SC_CLOCK_SELECTION = 48 1287 X_SC_COLL_WEIGHTS_MAX = 13 1288 X_SC_CPUTIME = 49 1289 X_SC_DELAYTIMER_MAX = 50 1290 X_SC_EXPR_NEST_MAX = 14 1291 X_SC_FSYNC = 29 1292 X_SC_GETGR_R_SIZE_MAX = 100 1293 X_SC_GETPW_R_SIZE_MAX = 101 1294 X_SC_HOST_NAME_MAX = 33 1295 X_SC_IOV_MAX = 51 1296 X_SC_IPV6 = 52 1297 X_SC_JOB_CONTROL = 6 1298 X_SC_LINE_MAX = 15 1299 X_SC_LOGIN_NAME_MAX = 102 1300 X_SC_MAPPED_FILES = 53 1301 X_SC_MEMLOCK = 54 1302 X_SC_MEMLOCK_RANGE = 55 1303 X_SC_MEMORY_PROTECTION = 56 1304 X_SC_MESSAGE_PASSING = 57 1305 X_SC_MONOTONIC_CLOCK = 34 1306 X_SC_MQ_OPEN_MAX = 58 1307 X_SC_MQ_PRIO_MAX = 59 1308 X_SC_NGROUPS_MAX = 4 1309 X_SC_NPROCESSORS_CONF = 502 1310 X_SC_NPROCESSORS_ONLN = 503 1311 X_SC_OPEN_MAX = 5 1312 X_SC_PAGESIZE = 28 1313 X_SC_PAGE_SIZE = 28 1314 X_SC_PHYS_PAGES = 500 1315 X_SC_PRIORITIZED_IO = 60 1316 X_SC_PRIORITY_SCHEDULING = 61 1317 X_SC_RAW_SOCKETS = 62 1318 X_SC_READER_WRITER_LOCKS = 63 1319 X_SC_REALTIME_SIGNALS = 64 1320 X_SC_REGEXP = 65 1321 X_SC_RE_DUP_MAX = 16 1322 X_SC_RTSIG_MAX = 66 1323 X_SC_SAVED_IDS = 7 1324 X_SC_SEMAPHORES = 67 1325 X_SC_SEM_NSEMS_MAX = 31 1326 X_SC_SEM_VALUE_MAX = 32 1327 X_SC_SHARED_MEMORY_OBJECTS = 68 1328 X_SC_SHELL = 69 1329 X_SC_SIGQUEUE_MAX = 70 1330 X_SC_SPAWN = 71 1331 X_SC_SPIN_LOCKS = 72 1332 X_SC_SPORADIC_SERVER = 73 1333 X_SC_SS_REPL_MAX = 74 1334 X_SC_STREAM_MAX = 26 1335 X_SC_SYMLOOP_MAX = 76 1336 X_SC_SYNCHRONIZED_IO = 75 1337 X_SC_THREADS = 91 1338 X_SC_THREAD_ATTR_STACKADDR = 77 1339 X_SC_THREAD_ATTR_STACKSIZE = 78 1340 X_SC_THREAD_CPUTIME = 79 1341 X_SC_THREAD_DESTRUCTOR_ITERATIONS = 80 1342 X_SC_THREAD_KEYS_MAX = 81 1343 X_SC_THREAD_PRIORITY_SCHEDULING = 84 1344 X_SC_THREAD_PRIO_INHERIT = 82 1345 X_SC_THREAD_PRIO_PROTECT = 83 1346 X_SC_THREAD_PROCESS_SHARED = 85 1347 X_SC_THREAD_ROBUST_PRIO_INHERIT = 86 1348 X_SC_THREAD_ROBUST_PRIO_PROTECT = 87 1349 X_SC_THREAD_SAFE_FUNCTIONS = 103 1350 X_SC_THREAD_SPORADIC_SERVER = 88 1351 X_SC_THREAD_STACK_MIN = 89 1352 X_SC_THREAD_THREADS_MAX = 90 1353 X_SC_TIMEOUTS = 92 1354 X_SC_TIMERS = 94 1355 X_SC_TIMER_MAX = 93 1356 X_SC_TRACE = 95 1357 X_SC_TRACE_EVENT_FILTER = 96 1358 X_SC_TRACE_EVENT_NAME_MAX = 97 1359 X_SC_TRACE_INHERIT = 98 1360 X_SC_TRACE_LOG = 99 1361 X_SC_TRACE_NAME_MAX = 104 1362 X_SC_TRACE_SYS_MAX = 105 1363 X_SC_TRACE_USER_EVENT_MAX = 106 1364 X_SC_TTY_NAME_MAX = 107 1365 X_SC_TYPED_MEMORY_OBJECTS = 108 1366 X_SC_TZNAME_MAX = 27 1367 X_SC_V6_ILP32_OFF32 = 109 1368 X_SC_V6_ILP32_OFFBIG = 110 1369 X_SC_V6_LP64_OFF64 = 111 1370 X_SC_V6_LPBIG_OFFBIG = 112 1371 X_SC_V7_ILP32_OFF32 = 113 1372 X_SC_V7_ILP32_OFFBIG = 114 1373 X_SC_V7_LP64_OFF64 = 115 1374 X_SC_V7_LPBIG_OFFBIG = 116 1375 X_SC_VERSION = 8 1376 X_SC_XOPEN_CRYPT = 117 1377 X_SC_XOPEN_ENH_I18N = 118 1378 X_SC_XOPEN_LEGACY = 119 1379 X_SC_XOPEN_REALTIME = 120 1380 X_SC_XOPEN_REALTIME_THREADS = 121 1381 X_SC_XOPEN_SHM = 30 1382 X_SC_XOPEN_STREAMS = 122 1383 X_SC_XOPEN_UNIX = 123 1384 X_SC_XOPEN_UUCP = 124 1385 X_SC_XOPEN_VERSION = 125 1386 X_SELECT_DEFINED_ = 0 1387 X_SIGSET_T_DEFINED_ = 0 1388 X_SYS_DIRENT_H_ = 0 1389 X_SYS_FCNTL_H_ = 0 1390 X_SYS_SELECT_H_ = 0 1391 X_SYS_STAT_H_ = 0 1392 X_SYS_TIME_H_ = 0 1393 X_SYS_UNISTD_H_ = 0 1394 X_SYS__TIME_H_ = 0 1395 X_TIMESPEC_DECLARED = 0 1396 X_TIMEVAL_DECLARED = 0 1397 X_TIME_H_ = 0 1398 X_UNISTD_H_ = 0 1399 X_UTIME_H_ = 0 1400 X_XOPEN_CRYPT = 1 1401 X_XOPEN_ENH_I18N = -1 1402 X_XOPEN_LEGACY = -1 1403 X_XOPEN_REALTIME = -1 1404 X_XOPEN_REALTIME_THREADS = -1 1405 X_XOPEN_SHM = 1 1406 X_XOPEN_STREAMS = -1 1407 X_XOPEN_UNIX = -1 1408 X_XOPEN_UUCP = -1 1409 FUZZER_HASH = 4001 1410 FUZZER_MX_COST = 1000 1411 FUZZER_MX_LENGTH = 50 1412 FUZZER_MX_OUTPUT_LENGTH = 100 1413 FUZZER_MX_RULEID = 2147483647 1414 FUZZER_NQUEUE = 20 1415 CC_AND = 24 1416 CC_BANG = 15 1417 CC_COMMA = 23 1418 CC_DIGIT = 3 1419 CC_DOLLAR = 4 1420 CC_DOT = 26 1421 CC_EQ = 14 1422 CC_GT = 13 1423 CC_ID = 2 1424 CC_ILLEGAL = 27 1425 CC_KYWD = 1 1426 CC_LP = 17 1427 CC_LT = 12 1428 CC_MINUS = 11 1429 CC_PERCENT = 22 1430 CC_PIPE = 10 1431 CC_PLUS = 20 1432 CC_QUOTE = 8 1433 CC_QUOTE2 = 9 1434 CC_RP = 18 1435 CC_SEMI = 19 1436 CC_SLASH = 16 1437 CC_SPACE = 7 1438 CC_STAR = 21 1439 CC_TILDA = 25 1440 CC_VARALPHA = 5 1441 CC_VARNUM = 6 1442 CC_X = 0 1443 TK_BITAND = 3 1444 TK_BITNOT = 3 1445 TK_BITOR = 3 1446 TK_BLOB = 2 1447 TK_COMMA = 3 1448 TK_CONCAT = 3 1449 TK_DOT = 3 1450 TK_EQ = 3 1451 TK_ERROR = 4 1452 TK_FLOAT = 2 1453 TK_GE = 3 1454 TK_GT = 3 1455 TK_ID = 1 1456 TK_ILLEGAL = 4 1457 TK_INTEGER = 2 1458 TK_LE = 3 1459 TK_LITERAL = 2 1460 TK_LP = 3 1461 TK_LSHIFT = 3 1462 TK_LT = 3 1463 TK_MINUS = 3 1464 TK_NAME = 1 1465 TK_NE = 3 1466 TK_PLUS = 3 1467 TK_PUNCT = 3 1468 TK_REM = 3 1469 TK_RP = 3 1470 TK_RSHIFT = 3 1471 TK_SEMI = 3 1472 TK_SLASH = 3 1473 TK_SPACE = 0 1474 TK_STAR = 3 1475 TK_STRING = 2 1476 TK_VARIABLE = 2 1477 Deliberate_fall_through = 0 1478 QPVTAB_A = 6 1479 QPVTAB_B = 7 1480 QPVTAB_C = 8 1481 QPVTAB_CN = 2 1482 QPVTAB_D = 9 1483 QPVTAB_E = 10 1484 QPVTAB_FLAGS = 11 1485 QPVTAB_IX = 1 1486 QPVTAB_NONE = 12 1487 QPVTAB_OP = 3 1488 QPVTAB_RHS = 5 1489 QPVTAB_UX = 4 1490 QPVTAB_VN = 0 1491 RE_EOF = 0 1492 RE_OP_ACCEPT = 6 1493 RE_OP_ANY = 2 1494 RE_OP_ANYSTAR = 3 1495 RE_OP_BOUNDARY = 17 1496 RE_OP_CC_EXC = 8 1497 RE_OP_CC_INC = 7 1498 RE_OP_CC_RANGE = 10 1499 RE_OP_CC_VALUE = 9 1500 RE_OP_DIGIT = 13 1501 RE_OP_FORK = 4 1502 RE_OP_GOTO = 5 1503 RE_OP_MATCH = 1 1504 RE_OP_NOTDIGIT = 14 1505 RE_OP_NOTSPACE = 16 1506 RE_OP_NOTWORD = 12 1507 RE_OP_SPACE = 15 1508 RE_OP_WORD = 11 1509 SERIES_COLUMN_START = 1 1510 SERIES_COLUMN_STEP = 3 1511 SERIES_COLUMN_STOP = 2 1512 SERIES_COLUMN_VALUE = 0 1513 CCLASS_B = 2 1514 CCLASS_C = 3 1515 CCLASS_D = 4 1516 CCLASS_DIGIT = 10 1517 CCLASS_H = 5 1518 CCLASS_L = 6 1519 CCLASS_M = 8 1520 CCLASS_OTHER = 12 1521 CCLASS_R = 7 1522 CCLASS_SILENT = 0 1523 CCLASS_SPACE = 11 1524 CCLASS_VOWEL = 1 1525 CCLASS_Y = 9 1526 FINAL_INS_COST_DIV = 4 1527 SCRIPT_ARABIC = 0x0010 1528 SCRIPT_CYRILLIC = 0x0002 1529 SCRIPT_GREEK = 0x0004 1530 SCRIPT_HEBREW = 0x0008 1531 SCRIPT_LATIN = 0x0001 1532 SPELLFIX_COL_COMMAND = 11 1533 SPELLFIX_COL_DISTANCE = 2 1534 SPELLFIX_COL_LANGID = 3 1535 SPELLFIX_COL_MATCHLEN = 5 1536 SPELLFIX_COL_PHONEHASH = 6 1537 SPELLFIX_COL_RANK = 1 1538 SPELLFIX_COL_SCOPE = 8 1539 SPELLFIX_COL_SCORE = 4 1540 SPELLFIX_COL_SOUNDSLIKE = 10 1541 SPELLFIX_COL_SRCHCNT = 9 1542 SPELLFIX_COL_TOP = 7 1543 SPELLFIX_COL_WORD = 0 1544 SPELLFIX_IDXNUM_DIST = 48 1545 SPELLFIX_IDXNUM_DISTLE = 0x20 1546 SPELLFIX_IDXNUM_DISTLT = 0x10 1547 SPELLFIX_IDXNUM_LANGID = 0x02 1548 SPELLFIX_IDXNUM_MATCH = 0x01 1549 SPELLFIX_IDXNUM_ROWID = 0x40 1550 SPELLFIX_IDXNUM_SCOPE = 0x08 1551 SPELLFIX_IDXNUM_TOP = 0x04 1552 SPELLFIX_MX_HASH = 32 1553 SPELLFIX_MX_RUN = 1 1554 SQLITE_SPELLFIX_STACKALLOC_SZ = 1024 1555 SWARMVTAB_MAX_OPEN = 9 1556 SQLITE_RBU_STATE_CHECKPOINT = 3 1557 SQLITE_RBU_STATE_DONE = 4 1558 SQLITE_RBU_STATE_ERROR = 5 1559 SQLITE_RBU_STATE_MOVE = 2 1560 SQLITE_RBU_STATE_OAL = 1 1561 X_SQLITE3RBU_H = 0 1562 BTREE_APPEND = 0x08 1563 BTREE_APPLICATION_ID = 8 1564 BTREE_AUTOVACUUM_FULL = 1 1565 BTREE_AUTOVACUUM_INCR = 2 1566 BTREE_AUTOVACUUM_NONE = 0 1567 BTREE_AUXDELETE = 0x04 1568 BTREE_BLOBKEY = 2 1569 BTREE_BULKLOAD = 0x00000001 1570 BTREE_DATA_VERSION = 15 1571 BTREE_DEFAULT_CACHE_SIZE = 3 1572 BTREE_FILE_FORMAT = 2 1573 BTREE_FORDELETE = 0x00000008 1574 BTREE_FREE_PAGE_COUNT = 0 1575 BTREE_HINT_RANGE = 0 1576 BTREE_INCR_VACUUM = 7 1577 BTREE_INTKEY = 1 1578 BTREE_LARGEST_ROOT_PAGE = 4 1579 BTREE_MEMORY = 2 1580 BTREE_OMIT_JOURNAL = 1 1581 BTREE_PREFORMAT = 0x80 1582 BTREE_SAVEPOSITION = 0x02 1583 BTREE_SCHEMA_VERSION = 1 1584 BTREE_SEEK_EQ = 0x00000002 1585 BTREE_SINGLE = 4 1586 BTREE_TEXT_ENCODING = 5 1587 BTREE_UNORDERED = 8 1588 BTREE_USER_VERSION = 6 1589 BTREE_WRCSR = 0x00000004 1590 COLFLAG_BUSY = 0x0100 1591 COLFLAG_GENERATED = 0x0060 1592 COLFLAG_HASCOLL = 0x0200 1593 COLFLAG_HASTYPE = 0x0004 1594 COLFLAG_HIDDEN = 0x0002 1595 COLFLAG_NOEXPAND = 0x0400 1596 COLFLAG_NOINSERT = 0x0062 1597 COLFLAG_NOTAVAIL = 0x0080 1598 COLFLAG_PRIMKEY = 0x0001 1599 COLFLAG_SORTERREF = 0x0010 1600 COLFLAG_STORED = 0x0040 1601 COLFLAG_UNIQUE = 0x0008 1602 COLFLAG_VIRTUAL = 0x0020 1603 COLNAME_COLUMN = 4 1604 COLNAME_DATABASE = 2 1605 COLNAME_DECLTYPE = 1 1606 COLNAME_N = 5 1607 COLNAME_NAME = 0 1608 COLNAME_TABLE = 3 1609 COLTYPE_ANY = 1 1610 COLTYPE_BLOB = 2 1611 COLTYPE_CUSTOM = 0 1612 COLTYPE_INT = 3 1613 COLTYPE_INTEGER = 4 1614 COLTYPE_REAL = 5 1615 COLTYPE_TEXT = 6 1616 DBFLAG_EncodingFixed = 0x0040 1617 DBFLAG_InternalFunc = 0x0020 1618 DBFLAG_PreferBuiltin = 0x0002 1619 DBFLAG_SchemaChange = 0x0001 1620 DBFLAG_SchemaKnownOk = 0x0010 1621 DBFLAG_Vacuum = 0x0004 1622 DBFLAG_VacuumInto = 0x0008 1623 DB_ResetWanted = 0x0008 1624 DB_SchemaLoaded = 0x0001 1625 DB_UnresetViews = 0x0002 1626 ENAME_NAME = 0 1627 ENAME_SPAN = 1 1628 ENAME_TAB = 2 1629 EP_Agg = 0x000010 1630 EP_CanBeNull = 0x200000 1631 EP_Collate = 0x000200 1632 EP_Commuted = 0x000400 1633 EP_ConstFunc = 0x100000 1634 EP_DblQuoted = 0x000080 1635 EP_Distinct = 0x000004 1636 EP_FixedCol = 0x000020 1637 EP_FromDDL = 0x40000000 1638 EP_HasFunc = 0x000008 1639 EP_IfNullRow = 0x040000 1640 EP_Immutable = 0x02 1641 EP_InfixFunc = 0x000100 1642 EP_InnerON = 0x000002 1643 EP_IntValue = 0x000800 1644 EP_IsFalse = 0x20000000 1645 EP_IsTrue = 0x10000000 1646 EP_Leaf = 0x800000 1647 EP_MemToken = 0x020000 1648 EP_NoReduce = 0x01 1649 EP_OuterON = 0x000001 1650 EP_Propagate = 4194824 1651 EP_Quoted = 0x4000000 1652 EP_Reduced = 0x004000 1653 EP_Skip = 0x002000 1654 EP_Static = 0x8000000 1655 EP_Subquery = 0x400000 1656 EP_Subrtn = 0x2000000 1657 EP_TokenOnly = 0x010000 1658 EP_Unlikely = 0x080000 1659 EP_VarSelect = 0x000040 1660 EP_Win = 0x008000 1661 EP_WinFunc = 0x1000000 1662 EP_xIsSelect = 0x001000 1663 EU4_EXPR = 2 1664 EU4_IDX = 1 1665 EU4_NONE = 0 1666 EXCLUSIVE_LOCK = 4 1667 EXPRDUP_REDUCE = 0x0001 1668 GCC_VERSION = 4002001 1669 HAVE_DLFCN_H = 1 1670 HAVE_FCHOWN = 1 1671 HAVE_FDATASYNC = 1 1672 HAVE_GMTIME_R = 1 1673 HAVE_INT16_T = 1 1674 HAVE_INT32_T = 1 1675 HAVE_INT64_T = 1 1676 HAVE_INT8_T = 1 1677 HAVE_INTPTR_T = 1 1678 HAVE_INTTYPES_H = 1 1679 HAVE_ISNAN = 1 1680 HAVE_LOCALTIME_R = 1 1681 HAVE_LSTAT = 1 1682 HAVE_MEMORY_H = 1 1683 HAVE_PREAD = 1 1684 HAVE_PWRITE = 1 1685 HAVE_READLINK = 1 1686 HAVE_STDINT_H = 1 1687 HAVE_STDLIB_H = 1 1688 HAVE_STRINGS_H = 1 1689 HAVE_STRING_H = 1 1690 HAVE_SYS_STAT_H = 1 1691 HAVE_SYS_TYPES_H = 1 1692 HAVE_UINT16_T = 1 1693 HAVE_UINT32_T = 1 1694 HAVE_UINT64_T = 1 1695 HAVE_UINT8_T = 1 1696 HAVE_UINTPTR_T = 1 1697 HAVE_UNISTD_H = 1 1698 HAVE_UTIME = 1 1699 INITFLAG_AlterAdd = 0x0003 1700 INITFLAG_AlterDrop = 0x0002 1701 INITFLAG_AlterMask = 0x0003 1702 INITFLAG_AlterRename = 0x0001 1703 INLINEFUNC_affinity = 4 1704 INLINEFUNC_coalesce = 0 1705 INLINEFUNC_expr_compare = 3 1706 INLINEFUNC_expr_implies_expr = 2 1707 INLINEFUNC_iif = 5 1708 INLINEFUNC_implies_nonnull_row = 1 1709 INLINEFUNC_sqlite_offset = 6 1710 INLINEFUNC_unlikely = 99 1711 INT16_MAX = 0x7fff 1712 INT16_MIN = -32768 1713 INT32_MAX = 0x7fffffff 1714 INT32_MIN = -2147483648 1715 INT64_MAX = 0x7fffffffffffffff 1716 INT64_MIN = -9223372036854775808 1717 INT8_MAX = 0x7f 1718 INT8_MIN = -128 1719 INTMAX_MAX = 9223372036854775807 1720 INTMAX_MIN = -9223372036854775808 1721 INTPTR_MAX = 0x7fffffffffffffff 1722 INTPTR_MIN = -9223372036854775808 1723 INT_FAST16_MAX = 2147483647 1724 INT_FAST16_MIN = -2147483648 1725 INT_FAST32_MAX = 2147483647 1726 INT_FAST32_MIN = -2147483648 1727 INT_FAST64_MAX = 9223372036854775807 1728 INT_FAST64_MIN = -9223372036854775808 1729 INT_FAST8_MAX = 2147483647 1730 INT_FAST8_MIN = -2147483648 1731 INT_LEAST16_MAX = 32767 1732 INT_LEAST16_MIN = -32768 1733 INT_LEAST32_MAX = 2147483647 1734 INT_LEAST32_MIN = -2147483648 1735 INT_LEAST64_MAX = 9223372036854775807 1736 INT_LEAST64_MIN = -9223372036854775808 1737 INT_LEAST8_MAX = 127 1738 INT_LEAST8_MIN = -128 1739 IN_INDEX_EPH = 2 1740 IN_INDEX_INDEX_ASC = 3 1741 IN_INDEX_INDEX_DESC = 4 1742 IN_INDEX_LOOP = 0x0004 1743 IN_INDEX_MEMBERSHIP = 0x0002 1744 IN_INDEX_NOOP = 5 1745 IN_INDEX_NOOP_OK = 0x0001 1746 IN_INDEX_ROWID = 1 1747 JT_CROSS = 0x02 1748 JT_ERROR = 0x80 1749 JT_INNER = 0x01 1750 JT_LEFT = 0x08 1751 JT_LTORJ = 0x40 1752 JT_NATURAL = 0x04 1753 JT_OUTER = 0x20 1754 JT_RIGHT = 0x10 1755 KEYINFO_ORDER_BIGNULL = 0x02 1756 KEYINFO_ORDER_DESC = 0x01 1757 LEGACY_SCHEMA_TABLE = "sqlite_master" 1758 LEGACY_TEMP_SCHEMA_TABLE = "sqlite_temp_master" 1759 LOCATE_NOERR = 0x02 1760 LOCATE_VIEW = 0x01 1761 LOOKASIDE_SMALL = 128 1762 LT_OBJDIR = ".libs/" 1763 M10d_Any = 1 1764 M10d_No = 2 1765 M10d_Yes = 0 1766 MEMTYPE_HEAP = 0x01 1767 MEMTYPE_LOOKASIDE = 0x02 1768 MEMTYPE_PCACHE = 0x04 1769 MSVC_VERSION = 0 1770 NC_AllowAgg = 0x000001 1771 NC_AllowWin = 0x004000 1772 NC_Complex = 0x002000 1773 NC_FromDDL = 0x040000 1774 NC_GenCol = 0x000008 1775 NC_HasAgg = 0x000010 1776 NC_HasWin = 0x008000 1777 NC_IdxExpr = 0x000020 1778 NC_InAggFunc = 0x020000 1779 NC_IsCheck = 0x000004 1780 NC_IsDDL = 0x010000 1781 NC_MinMaxAgg = 0x001000 1782 NC_NoSelect = 0x080000 1783 NC_OrderAgg = 0x8000000 1784 NC_PartIdx = 0x000002 1785 NC_SelfRef = 0x00002e 1786 NC_UAggInfo = 0x000100 1787 NC_UBaseReg = 0x000400 1788 NC_UEList = 0x000080 1789 NC_UUpsert = 0x000200 1790 NC_VarSelect = 0x000040 1791 NO_LOCK = 0 1792 OE_Abort = 2 1793 OE_Cascade = 10 1794 OE_Default = 11 1795 OE_Fail = 3 1796 OE_Ignore = 4 1797 OE_None = 0 1798 OE_Replace = 5 1799 OE_Restrict = 7 1800 OE_Rollback = 1 1801 OE_SetDflt = 9 1802 OE_SetNull = 8 1803 OE_Update = 6 1804 OMIT_TEMPDB = 0 1805 ONEPASS_MULTI = 2 1806 ONEPASS_OFF = 0 1807 ONEPASS_SINGLE = 1 1808 OPFLAG_APPEND = 0x08 1809 OPFLAG_AUXDELETE = 0x04 1810 OPFLAG_BULKCSR = 0x01 1811 OPFLAG_EPHEM = 0x01 1812 OPFLAG_FORDELETE = 0x08 1813 OPFLAG_ISNOOP = 0x40 1814 OPFLAG_ISUPDATE = 0x04 1815 OPFLAG_LASTROWID = 0x20 1816 OPFLAG_LENGTHARG = 0x40 1817 OPFLAG_NCHANGE = 0x01 1818 OPFLAG_NOCHNG = 0x01 1819 OPFLAG_NOCHNG_MAGIC = 0x6d 1820 OPFLAG_P2ISREG = 0x10 1821 OPFLAG_PERMUTE = 0x01 1822 OPFLAG_PREFORMAT = 0x80 1823 OPFLAG_SAVEPOSITION = 0x02 1824 OPFLAG_SEEKEQ = 0x02 1825 OPFLAG_TYPEOFARG = 0x80 1826 OPFLAG_USESEEKRESULT = 0x10 1827 OPFLG_IN1 = 0x02 1828 OPFLG_IN2 = 0x04 1829 OPFLG_IN3 = 0x08 1830 OPFLG_JUMP = 0x01 1831 OPFLG_OUT2 = 0x10 1832 OPFLG_OUT3 = 0x20 1833 OP_Abortable = 186 1834 OP_Add = 106 1835 OP_AddImm = 86 1836 OP_Affinity = 96 1837 OP_AggFinal = 165 1838 OP_AggInverse = 161 1839 OP_AggStep = 162 1840 OP_AggStep1 = 163 1841 OP_AggValue = 164 1842 OP_And = 44 1843 OP_AutoCommit = 1 1844 OP_BeginSubrtn = 74 1845 OP_BitAnd = 102 1846 OP_BitNot = 114 1847 OP_BitOr = 103 1848 OP_Blob = 77 1849 OP_Cast = 88 1850 OP_Checkpoint = 3 1851 OP_Clear = 145 1852 OP_Close = 122 1853 OP_ClrSubtype = 179 1854 OP_CollSeq = 85 1855 OP_Column = 94 1856 OP_ColumnsUsed = 123 1857 OP_Compare = 90 1858 OP_Concat = 111 1859 OP_Copy = 80 1860 OP_Count = 98 1861 OP_CreateBtree = 147 1862 OP_CursorHint = 182 1863 OP_CursorLock = 167 1864 OP_CursorUnlock = 168 1865 OP_DecrJumpZero = 60 1866 OP_DeferredSeek = 141 1867 OP_Delete = 130 1868 OP_Destroy = 144 1869 OP_Divide = 109 1870 OP_DropIndex = 152 1871 OP_DropTable = 151 1872 OP_DropTrigger = 154 1873 OP_ElseEq = 58 1874 OP_EndCoroutine = 68 1875 OP_Eq = 53 1876 OP_Expire = 166 1877 OP_Explain = 185 1878 OP_Filter = 63 1879 OP_FilterAdd = 180 1880 OP_FinishSeek = 143 1881 OP_FkCheck = 83 1882 OP_FkCounter = 158 1883 OP_FkIfZero = 48 1884 OP_Found = 28 1885 OP_Function = 66 1886 OP_Ge = 57 1887 OP_Gosub = 9 1888 OP_Goto = 8 1889 OP_Gt = 54 1890 OP_Halt = 70 1891 OP_HaltIfNull = 69 1892 OP_IdxDelete = 140 1893 OP_IdxGE = 42 1894 OP_IdxGT = 40 1895 OP_IdxInsert = 138 1896 OP_IdxLE = 39 1897 OP_IdxLT = 41 1898 OP_IdxRowid = 142 1899 OP_If = 15 1900 OP_IfNoHope = 25 1901 OP_IfNot = 16 1902 OP_IfNotOpen = 24 1903 OP_IfNotZero = 59 1904 OP_IfNullRow = 18 1905 OP_IfPos = 49 1906 OP_IfSmaller = 32 1907 OP_IncrVacuum = 61 1908 OP_Init = 64 1909 OP_InitCoroutine = 10 1910 OP_Insert = 128 1911 OP_Int64 = 72 1912 OP_IntCopy = 82 1913 OP_Integer = 71 1914 OP_IntegrityCk = 155 1915 OP_IsNull = 50 1916 OP_IsNullOrType = 17 1917 OP_IsTrue = 91 1918 OP_JournalMode = 4 1919 OP_Jump = 13 1920 OP_Last = 31 1921 OP_Le = 55 1922 OP_LoadAnalysis = 150 1923 OP_Lt = 56 1924 OP_MakeRecord = 97 1925 OP_MaxPgcnt = 178 1926 OP_MemMax = 159 1927 OP_Move = 79 1928 OP_Multiply = 108 1929 OP_MustBeInt = 12 1930 OP_Ne = 52 1931 OP_NewRowid = 127 1932 OP_Next = 38 1933 OP_NoConflict = 26 1934 OP_Noop = 184 1935 OP_Not = 19 1936 OP_NotExists = 30 1937 OP_NotFound = 27 1938 OP_NotNull = 51 1939 OP_Null = 75 1940 OP_NullRow = 136 1941 OP_Offset = 93 1942 OP_OffsetLimit = 160 1943 OP_Once = 14 1944 OP_OpenAutoindex = 116 1945 OP_OpenDup = 115 1946 OP_OpenEphemeral = 118 1947 OP_OpenPseudo = 121 1948 OP_OpenRead = 112 1949 OP_OpenWrite = 113 1950 OP_Or = 43 1951 OP_Pagecount = 177 1952 OP_Param = 157 1953 OP_ParseSchema = 149 1954 OP_Permutation = 89 1955 OP_Prev = 37 1956 OP_Program = 47 1957 OP_PureFunc = 65 1958 OP_ReadCookie = 99 1959 OP_Real = 153 1960 OP_RealAffinity = 87 1961 OP_ReleaseReg = 183 1962 OP_Remainder = 110 1963 OP_ReopenIdx = 101 1964 OP_ResetCount = 131 1965 OP_ResetSorter = 146 1966 OP_ResultRow = 84 1967 OP_Return = 67 1968 OP_Rewind = 35 1969 OP_RowCell = 129 1970 OP_RowData = 134 1971 OP_RowSetAdd = 156 1972 OP_RowSetRead = 45 1973 OP_RowSetTest = 46 1974 OP_Rowid = 135 1975 OP_SCopy = 81 1976 OP_Savepoint = 0 1977 OP_SeekEnd = 137 1978 OP_SeekGE = 22 1979 OP_SeekGT = 23 1980 OP_SeekHit = 125 1981 OP_SeekLE = 21 1982 OP_SeekLT = 20 1983 OP_SeekRowid = 29 1984 OP_SeekScan = 124 1985 OP_Sequence = 126 1986 OP_SequenceTest = 120 1987 OP_SetCookie = 100 1988 OP_ShiftLeft = 104 1989 OP_ShiftRight = 105 1990 OP_SoftNull = 76 1991 OP_Sort = 34 1992 OP_SorterCompare = 132 1993 OP_SorterData = 133 1994 OP_SorterInsert = 139 1995 OP_SorterNext = 36 1996 OP_SorterOpen = 119 1997 OP_SorterSort = 33 1998 OP_SqlExec = 148 1999 OP_String = 73 2000 OP_String8 = 117 2001 OP_Subtract = 107 2002 OP_TableLock = 169 2003 OP_Trace = 181 2004 OP_Transaction = 2 2005 OP_TypeCheck = 95 2006 OP_VBegin = 170 2007 OP_VColumn = 175 2008 OP_VCreate = 171 2009 OP_VDestroy = 172 2010 OP_VFilter = 6 2011 OP_VInitIn = 174 2012 OP_VNext = 62 2013 OP_VOpen = 173 2014 OP_VRename = 176 2015 OP_VUpdate = 7 2016 OP_Vacuum = 5 2017 OP_Variable = 78 2018 OP_Yield = 11 2019 OP_ZeroOrNull = 92 2020 OS_VXWORKS = 0 2021 P4_COLLSEQ = -2 2022 P4_DYNAMIC = -6 2023 P4_EXPR = -9 2024 P4_FREE_IF_LE = -6 2025 P4_FUNCCTX = -15 2026 P4_FUNCDEF = -7 2027 P4_INT32 = -3 2028 P4_INT64 = -13 2029 P4_INTARRAY = -14 2030 P4_KEYINFO = -8 2031 P4_MEM = -10 2032 P4_NOTUSED = 0 2033 P4_REAL = -12 2034 P4_STATIC = -1 2035 P4_SUBPROGRAM = -4 2036 P4_TABLE = -5 2037 P4_TRANSIENT = 0 2038 P4_VTAB = -11 2039 P5_ConstraintCheck = 3 2040 P5_ConstraintFK = 4 2041 P5_ConstraintNotNull = 1 2042 P5_ConstraintUnique = 2 2043 PACKAGE_BUGREPORT = "" 2044 PACKAGE_NAME = "sqlite" 2045 PACKAGE_STRING = "sqlite 3.39.3" 2046 PACKAGE_TARNAME = "sqlite" 2047 PACKAGE_VERSION = "3.39.3" 2048 PAGER_CACHESPILL = 0x20 2049 PAGER_CKPT_FULLFSYNC = 0x10 2050 PAGER_FLAGS_MASK = 0x38 2051 PAGER_FULLFSYNC = 0x08 2052 PAGER_GET_NOCONTENT = 0x01 2053 PAGER_GET_READONLY = 0x02 2054 PAGER_JOURNALMODE_DELETE = 0 2055 PAGER_JOURNALMODE_MEMORY = 4 2056 PAGER_JOURNALMODE_OFF = 2 2057 PAGER_JOURNALMODE_PERSIST = 1 2058 PAGER_JOURNALMODE_QUERY = -1 2059 PAGER_JOURNALMODE_TRUNCATE = 3 2060 PAGER_JOURNALMODE_WAL = 5 2061 PAGER_LOCKINGMODE_EXCLUSIVE = 1 2062 PAGER_LOCKINGMODE_NORMAL = 0 2063 PAGER_LOCKINGMODE_QUERY = -1 2064 PAGER_MEMORY = 0x0002 2065 PAGER_OMIT_JOURNAL = 0x0001 2066 PAGER_SYNCHRONOUS_EXTRA = 0x04 2067 PAGER_SYNCHRONOUS_FULL = 0x03 2068 PAGER_SYNCHRONOUS_MASK = 0x07 2069 PAGER_SYNCHRONOUS_NORMAL = 0x02 2070 PAGER_SYNCHRONOUS_OFF = 0x01 2071 PARSE_MODE_DECLARE_VTAB = 1 2072 PARSE_MODE_NORMAL = 0 2073 PARSE_MODE_RENAME = 2 2074 PARSE_MODE_UNMAP = 3 2075 PENDING_LOCK = 3 2076 PGHDR_CLEAN = 0x001 2077 PGHDR_DIRTY = 0x002 2078 PGHDR_DONT_WRITE = 0x010 2079 PGHDR_MMAP = 0x020 2080 PGHDR_NEED_SYNC = 0x008 2081 PGHDR_WAL_APPEND = 0x040 2082 PGHDR_WRITEABLE = 0x004 2083 PREFERRED_SCHEMA_TABLE = "sqlite_schema" 2084 PREFERRED_TEMP_SCHEMA_TABLE = "sqlite_temp_schema" 2085 PRIX16 = "X" 2086 PRIX32 = "X" 2087 PRIX64 = "llX" 2088 PRIX8 = "X" 2089 PRIXFAST16 = "X" 2090 PRIXFAST32 = "X" 2091 PRIXFAST64 = "llX" 2092 PRIXFAST8 = "X" 2093 PRIXLEAST16 = "X" 2094 PRIXLEAST32 = "X" 2095 PRIXLEAST64 = "llX" 2096 PRIXLEAST8 = "X" 2097 PRIXMAX = "jX" 2098 PRIXPTR = "lX" 2099 PRId16 = "d" 2100 PRId32 = "d" 2101 PRId64 = "lld" 2102 PRId8 = "d" 2103 PRIdFAST16 = "d" 2104 PRIdFAST32 = "d" 2105 PRIdFAST64 = "lld" 2106 PRIdFAST8 = "d" 2107 PRIdLEAST16 = "d" 2108 PRIdLEAST32 = "d" 2109 PRIdLEAST64 = "lld" 2110 PRIdLEAST8 = "d" 2111 PRIdMAX = "jd" 2112 PRIdPTR = "ld" 2113 PRIi16 = "i" 2114 PRIi32 = "i" 2115 PRIi64 = "lli" 2116 PRIi8 = "i" 2117 PRIiFAST16 = "i" 2118 PRIiFAST32 = "i" 2119 PRIiFAST64 = "lli" 2120 PRIiFAST8 = "i" 2121 PRIiLEAST16 = "i" 2122 PRIiLEAST32 = "i" 2123 PRIiLEAST64 = "lli" 2124 PRIiLEAST8 = "i" 2125 PRIiMAX = "ji" 2126 PRIiPTR = "li" 2127 PRIo16 = "o" 2128 PRIo32 = "o" 2129 PRIo64 = "llo" 2130 PRIo8 = "o" 2131 PRIoFAST16 = "o" 2132 PRIoFAST32 = "o" 2133 PRIoFAST64 = "llo" 2134 PRIoFAST8 = "o" 2135 PRIoLEAST16 = "o" 2136 PRIoLEAST32 = "o" 2137 PRIoLEAST64 = "llo" 2138 PRIoLEAST8 = "o" 2139 PRIoMAX = "jo" 2140 PRIoPTR = "lo" 2141 PRIu16 = "u" 2142 PRIu32 = "u" 2143 PRIu64 = "llu" 2144 PRIu8 = "u" 2145 PRIuFAST16 = "u" 2146 PRIuFAST32 = "u" 2147 PRIuFAST64 = "llu" 2148 PRIuFAST8 = "u" 2149 PRIuLEAST16 = "u" 2150 PRIuLEAST32 = "u" 2151 PRIuLEAST64 = "llu" 2152 PRIuLEAST8 = "u" 2153 PRIuMAX = "ju" 2154 PRIuPTR = "lu" 2155 PRIx16 = "x" 2156 PRIx32 = "x" 2157 PRIx64 = "llx" 2158 PRIx8 = "x" 2159 PRIxFAST16 = "x" 2160 PRIxFAST32 = "x" 2161 PRIxFAST64 = "llx" 2162 PRIxFAST8 = "x" 2163 PRIxLEAST16 = "x" 2164 PRIxLEAST32 = "x" 2165 PRIxLEAST64 = "llx" 2166 PRIxLEAST8 = "x" 2167 PRIxMAX = "jx" 2168 PRIxPTR = "lx" 2169 PTRDIFF_MAX = 9223372036854775807 2170 PTRDIFF_MIN = -9223372036854775808 2171 RESERVED_LOCK = 2 2172 SAVEPOINT_BEGIN = 0 2173 SAVEPOINT_RELEASE = 1 2174 SAVEPOINT_ROLLBACK = 2 2175 SCHEMA_ROOT = 1 2176 SCNd16 = "hd" 2177 SCNd32 = "d" 2178 SCNd64 = "lld" 2179 SCNd8 = "hhd" 2180 SCNdFAST16 = "d" 2181 SCNdFAST32 = "d" 2182 SCNdFAST64 = "lld" 2183 SCNdFAST8 = "d" 2184 SCNdLEAST16 = "hd" 2185 SCNdLEAST32 = "d" 2186 SCNdLEAST64 = "lld" 2187 SCNdLEAST8 = "hhd" 2188 SCNdMAX = "jd" 2189 SCNdPTR = "ld" 2190 SCNi16 = "hi" 2191 SCNi32 = "i" 2192 SCNi64 = "lli" 2193 SCNi8 = "hhi" 2194 SCNiFAST16 = "i" 2195 SCNiFAST32 = "i" 2196 SCNiFAST64 = "lli" 2197 SCNiFAST8 = "i" 2198 SCNiLEAST16 = "hi" 2199 SCNiLEAST32 = "i" 2200 SCNiLEAST64 = "lli" 2201 SCNiLEAST8 = "hhi" 2202 SCNiMAX = "ji" 2203 SCNiPTR = "li" 2204 SCNo16 = "ho" 2205 SCNo32 = "o" 2206 SCNo64 = "llo" 2207 SCNo8 = "hho" 2208 SCNoFAST16 = "o" 2209 SCNoFAST32 = "o" 2210 SCNoFAST64 = "llo" 2211 SCNoFAST8 = "o" 2212 SCNoLEAST16 = "ho" 2213 SCNoLEAST32 = "o" 2214 SCNoLEAST64 = "llo" 2215 SCNoLEAST8 = "hho" 2216 SCNoMAX = "jo" 2217 SCNoPTR = "lo" 2218 SCNu16 = "hu" 2219 SCNu32 = "u" 2220 SCNu64 = "llu" 2221 SCNu8 = "hhu" 2222 SCNuFAST16 = "u" 2223 SCNuFAST32 = "u" 2224 SCNuFAST64 = "llu" 2225 SCNuFAST8 = "u" 2226 SCNuLEAST16 = "hu" 2227 SCNuLEAST32 = "u" 2228 SCNuLEAST64 = "llu" 2229 SCNuLEAST8 = "hhu" 2230 SCNuMAX = "ju" 2231 SCNuPTR = "lu" 2232 SCNx16 = "hx" 2233 SCNx32 = "x" 2234 SCNx64 = "llx" 2235 SCNx8 = "hhx" 2236 SCNxFAST16 = "x" 2237 SCNxFAST32 = "x" 2238 SCNxFAST64 = "llx" 2239 SCNxFAST8 = "x" 2240 SCNxLEAST16 = "hx" 2241 SCNxLEAST32 = "x" 2242 SCNxLEAST64 = "llx" 2243 SCNxLEAST8 = "hhx" 2244 SCNxMAX = "jx" 2245 SCNxPTR = "lx" 2246 SF_Aggregate = 0x0000008 2247 SF_All = 0x0000002 2248 SF_ComplexResult = 0x0040000 2249 SF_Compound = 0x0000100 2250 SF_Converted = 0x0010000 2251 SF_CopyCte = 0x4000000 2252 SF_Distinct = 0x0000001 2253 SF_Expanded = 0x0000040 2254 SF_FixedLimit = 0x0004000 2255 SF_HasAgg = 0x0000010 2256 SF_HasTypeInfo = 0x0000080 2257 SF_IncludeHidden = 0x0020000 2258 SF_MaybeConvert = 0x0008000 2259 SF_MinMaxAgg = 0x0001000 2260 SF_MultiPart = 0x2000000 2261 SF_MultiValue = 0x0000400 2262 SF_NestedFrom = 0x0000800 2263 SF_NoopOrderBy = 0x0400000 2264 SF_OrderByReqd = 0x8000000 2265 SF_PushDown = 0x1000000 2266 SF_Recursive = 0x0002000 2267 SF_Resolved = 0x0000004 2268 SF_UFSrcCheck = 0x0800000 2269 SF_UsesEphemeral = 0x0000020 2270 SF_Values = 0x0000200 2271 SF_View = 0x0200000 2272 SF_WhereBegin = 0x0080000 2273 SF_WinRewrite = 0x0100000 2274 SHARED_LOCK = 1 2275 SHARED_SIZE = 510 2276 SIG_ATOMIC_MAX = 2147483647 2277 SIG_ATOMIC_MIN = -2147483648 2278 SIZE_MAX = 18446744073709551615 2279 SQLITECONFIG_H = 1 2280 SQLITEINT_H = 0 2281 SQLITE_AFF_BLOB = 0x41 2282 SQLITE_AFF_INTEGER = 0x44 2283 SQLITE_AFF_MASK = 0x47 2284 SQLITE_AFF_NONE = 0x40 2285 SQLITE_AFF_NUMERIC = 0x43 2286 SQLITE_AFF_REAL = 0x45 2287 SQLITE_AFF_TEXT = 0x42 2288 SQLITE_ASCII = 1 2289 SQLITE_ATOMIC_INTRINSICS = 0 2290 SQLITE_AllOpts = 0xffffffff 2291 SQLITE_AutoIndex = 0x00008000 2292 SQLITE_BIGENDIAN = 0 2293 SQLITE_BTREE_H = 0 2294 SQLITE_BYTEORDER = 1234 2295 SQLITE_BalancedMerge = 0x00200000 2296 SQLITE_BloomFilter = 0x00080000 2297 SQLITE_BloomPulldown = 0x00100000 2298 SQLITE_CacheSpill = 0x00000020 2299 SQLITE_CellSizeCk = 0x00200000 2300 SQLITE_CkptFullFSync = 0x00000010 2301 SQLITE_CountOfView = 0x00000200 2302 SQLITE_CoverIdxScan = 0x00000020 2303 SQLITE_CursorHints = 0x00000400 2304 SQLITE_DEFAULT_AUTOVACUUM = 0 2305 SQLITE_DEFAULT_CACHE_SIZE = -2000 2306 SQLITE_DEFAULT_FILE_FORMAT = 4 2307 SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT = -1 2308 SQLITE_DEFAULT_MMAP_SIZE = 0 2309 SQLITE_DEFAULT_PCACHE_INITSZ = 20 2310 SQLITE_DEFAULT_RECURSIVE_TRIGGERS = 0 2311 SQLITE_DEFAULT_SECTOR_SIZE = 4096 2312 SQLITE_DEFAULT_SORTERREF_SIZE = 0x7fffffff 2313 SQLITE_DEFAULT_SYNCHRONOUS = 2 2314 SQLITE_DEFAULT_WAL_AUTOCHECKPOINT = 1000 2315 SQLITE_DEFAULT_WAL_SYNCHRONOUS = 2 2316 SQLITE_DEFAULT_WORKER_THREADS = 0 2317 SQLITE_Defensive = 0x10000000 2318 SQLITE_DeferFKs = 0x00080000 2319 SQLITE_DistinctOpt = 0x00000010 2320 SQLITE_DqsDDL = 0x20000000 2321 SQLITE_DqsDML = 0x40000000 2322 SQLITE_ECEL_DUP = 0x01 2323 SQLITE_ECEL_FACTOR = 0x02 2324 SQLITE_ECEL_OMITREF = 0x08 2325 SQLITE_ECEL_REF = 0x04 2326 SQLITE_EnableQPSG = 0x00800000 2327 SQLITE_EnableTrigger = 0x00040000 2328 SQLITE_EnableView = 0x80000000 2329 SQLITE_FAULTINJECTOR_COUNT = 1 2330 SQLITE_FAULTINJECTOR_MALLOC = 0 2331 SQLITE_FCNTL_DB_UNCHANGED = 0xca093fa0 2332 SQLITE_FUNC_ANYORDER = 0x08000000 2333 SQLITE_FUNC_BUILTIN = 0x00800000 2334 SQLITE_FUNC_CASE = 0x0008 2335 SQLITE_FUNC_CONSTANT = 0x0800 2336 SQLITE_FUNC_COUNT = 0x0100 2337 SQLITE_FUNC_DIRECT = 0x00080000 2338 SQLITE_FUNC_ENCMASK = 0x0003 2339 SQLITE_FUNC_EPHEM = 0x0010 2340 SQLITE_FUNC_HASH_SZ = 23 2341 SQLITE_FUNC_INLINE = 0x00400000 2342 SQLITE_FUNC_INTERNAL = 0x00040000 2343 SQLITE_FUNC_LENGTH = 0x0040 2344 SQLITE_FUNC_LIKE = 0x0004 2345 SQLITE_FUNC_MINMAX = 0x1000 2346 SQLITE_FUNC_NEEDCOLL = 0x0020 2347 SQLITE_FUNC_SLOCHNG = 0x2000 2348 SQLITE_FUNC_SUBTYPE = 0x00100000 2349 SQLITE_FUNC_TEST = 0x4000 2350 SQLITE_FUNC_TYPEOF = 0x0080 2351 SQLITE_FUNC_UNLIKELY = 0x0400 2352 SQLITE_FUNC_UNSAFE = 0x00200000 2353 SQLITE_FUNC_WINDOW = 0x00010000 2354 SQLITE_FactorOutConst = 0x00000008 2355 SQLITE_FlttnUnionAll = 0x00800000 2356 SQLITE_ForeignKeys = 0x00004000 2357 SQLITE_Fts3Tokenizer = 0x00400000 2358 SQLITE_FullColNames = 0x00000004 2359 SQLITE_FullFSync = 0x00000008 2360 SQLITE_GroupByOrder = 0x00000004 2361 SQLITE_HASH_H = 0 2362 SQLITE_HAVE_C99_MATH_FUNCS = 1 2363 SQLITE_HAVE_OS_TRACE = 0 2364 SQLITE_IDXTYPE_APPDEF = 0 2365 SQLITE_IDXTYPE_IPK = 3 2366 SQLITE_IDXTYPE_PRIMARYKEY = 2 2367 SQLITE_IDXTYPE_UNIQUE = 1 2368 SQLITE_IOERR_NOMEM_BKPT = 3082 2369 SQLITE_IgnoreChecks = 0x00000200 2370 SQLITE_JUMPIFNULL = 0x10 2371 SQLITE_LITTLEENDIAN = 1 2372 SQLITE_LegacyAlter = 0x04000000 2373 SQLITE_LegacyFileFmt = 0x00000002 2374 SQLITE_LoadExtFunc = 0x00020000 2375 SQLITE_LoadExtension = 0x00010000 2376 SQLITE_MALLOC_SOFT_LIMIT = 1024 2377 SQLITE_MAX_ATTACHED = 10 2378 SQLITE_MAX_COLUMN = 2000 2379 SQLITE_MAX_COMPOUND_SELECT = 500 2380 SQLITE_MAX_DB = 12 2381 SQLITE_MAX_DEFAULT_PAGE_SIZE = 8192 2382 SQLITE_MAX_EXPR_DEPTH = 1000 2383 SQLITE_MAX_FILE_FORMAT = 4 2384 SQLITE_MAX_FUNCTION_ARG = 127 2385 SQLITE_MAX_LENGTH = 1000000000 2386 SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000 2387 SQLITE_MAX_MMAP_SIZE = 0 2388 SQLITE_MAX_PAGE_COUNT = 1073741823 2389 SQLITE_MAX_PAGE_SIZE = 65536 2390 SQLITE_MAX_PATHLEN = 1024 2391 SQLITE_MAX_SQL_LENGTH = 1000000000 2392 SQLITE_MAX_SYMLINK = 200 2393 SQLITE_MAX_TRIGGER_DEPTH = 1000 2394 SQLITE_MAX_VARIABLE_NUMBER = 32766 2395 SQLITE_MAX_VDBE_OP = 250000000 2396 SQLITE_MAX_WORKER_THREADS = 8 2397 SQLITE_MSVC_H = 0 2398 SQLITE_MUTEX_STATIC_TEMPDIR = 11 2399 SQLITE_MX_JUMP_OPCODE = 64 2400 SQLITE_MinMaxOpt = 0x00010000 2401 SQLITE_NEED_ERR_NAME = 0 2402 SQLITE_NOMEM_BKPT = 7 2403 SQLITE_NOTNULL = 0x90 2404 SQLITE_NTUNE = 6 2405 SQLITE_NULLEQ = 0x80 2406 SQLITE_N_BTREE_META = 16 2407 SQLITE_N_LIMIT = 12 2408 SQLITE_N_STDTYPE = 6 2409 SQLITE_NoCkptOnClose = 0x00000800 2410 SQLITE_NoSchemaError = 0x08000000 2411 SQLITE_NullCallback = 0x00000100 2412 SQLITE_OS_OTHER = 0 2413 SQLITE_OS_SETUP_H = 0 2414 SQLITE_OS_UNIX = 1 2415 SQLITE_OS_WIN = 0 2416 SQLITE_OmitNoopJoin = 0x00000100 2417 SQLITE_OmitOrderBy = 0x00040000 2418 SQLITE_OrderByIdxJoin = 0x00000040 2419 SQLITE_PAGER_H = 0 2420 SQLITE_POWERSAFE_OVERWRITE = 1 2421 SQLITE_PREPARE_MASK = 0x0f 2422 SQLITE_PREPARE_SAVESQL = 0x80 2423 SQLITE_PRINTF_INTERNAL = 0x01 2424 SQLITE_PRINTF_MALLOCED = 0x04 2425 SQLITE_PRINTF_SQLFUNC = 0x02 2426 SQLITE_PTRSIZE = 8 2427 SQLITE_PropagateConst = 0x00008000 2428 SQLITE_PushDown = 0x00001000 2429 SQLITE_QueryFlattener = 0x00000001 2430 SQLITE_QueryOnly = 0x00100000 2431 SQLITE_ReadUncommit = 0x00000400 2432 SQLITE_RecTriggers = 0x00002000 2433 SQLITE_ReleaseReg = 0x00400000 2434 SQLITE_ResetDatabase = 0x02000000 2435 SQLITE_ReverseOrder = 0x00001000 2436 SQLITE_SO_ASC = 0 2437 SQLITE_SO_DESC = 1 2438 SQLITE_SO_UNDEFINED = -1 2439 SQLITE_STATE_BUSY = 0x6d 2440 SQLITE_STATE_CLOSED = 0xce 2441 SQLITE_STATE_ERROR = 0xd5 2442 SQLITE_STATE_OPEN = 0x76 2443 SQLITE_STATE_SICK = 0xba 2444 SQLITE_STATE_ZOMBIE = 0xa7 2445 SQLITE_SYSTEM_MALLOC = 1 2446 SQLITE_SeekScan = 0x00020000 2447 SQLITE_ShortColNames = 0x00000040 2448 SQLITE_SimplifyJoin = 0x00002000 2449 SQLITE_SkipScan = 0x00004000 2450 SQLITE_Stat4 = 0x00000800 2451 SQLITE_TEMP_FILE_PREFIX = "etilqs_" 2452 SQLITE_TOKEN_KEYWORD = 0x2 2453 SQLITE_TOKEN_QUOTED = 0x1 2454 SQLITE_TRACE_LEGACY = 0x40 2455 SQLITE_TRACE_NONLEGACY_MASK = 0x0f 2456 SQLITE_TRACE_XPROFILE = 0x80 2457 SQLITE_Transitive = 0x00000080 2458 SQLITE_TriggerEQP = 0x01000000 2459 SQLITE_TrustedSchema = 0x00000080 2460 SQLITE_UTF16NATIVE = 2 2461 SQLITE_VDBE_H = 0 2462 SQLITE_VTABRISK_High = 2 2463 SQLITE_VTABRISK_Low = 0 2464 SQLITE_VTABRISK_Normal = 1 2465 SQLITE_WSD = 0 2466 SQLITE_WindowFunc = 0x00000002 2467 SQLITE_WriteSchema = 0x00000001 2468 SRT_Coroutine = 13 2469 SRT_Discard = 4 2470 SRT_DistFifo = 5 2471 SRT_DistQueue = 6 2472 SRT_EphemTab = 12 2473 SRT_Except = 2 2474 SRT_Exists = 3 2475 SRT_Fifo = 8 2476 SRT_Mem = 10 2477 SRT_Output = 9 2478 SRT_Queue = 7 2479 SRT_Set = 11 2480 SRT_Table = 14 2481 SRT_Union = 1 2482 SRT_Upfrom = 15 2483 STDC_HEADERS = 1 2484 TABTYP_NORM = 0 2485 TABTYP_VIEW = 2 2486 TABTYP_VTAB = 1 2487 TF_Autoincrement = 0x00000008 2488 TF_Ephemeral = 0x00004000 2489 TF_Eponymous = 0x00008000 2490 TF_HasGenerated = 0x00000060 2491 TF_HasHidden = 0x00000002 2492 TF_HasNotNull = 0x00000800 2493 TF_HasPrimaryKey = 0x00000004 2494 TF_HasStat1 = 0x00000010 2495 TF_HasStat4 = 0x00002000 2496 TF_HasStored = 0x00000040 2497 TF_HasVirtual = 0x00000020 2498 TF_NoVisibleRowid = 0x00000200 2499 TF_OOOHidden = 0x00000400 2500 TF_Readonly = 0x00000001 2501 TF_Shadow = 0x00001000 2502 TF_StatsUsed = 0x00000100 2503 TF_Strict = 0x00010000 2504 TF_WithoutRowid = 0x00000080 2505 TK_ABORT = 27 2506 TK_ACTION = 28 2507 TK_ADD = 163 2508 TK_AFTER = 29 2509 TK_AGG_COLUMN = 169 2510 TK_AGG_FUNCTION = 168 2511 TK_ALL = 135 2512 TK_ALTER = 162 2513 TK_ALWAYS = 96 2514 TK_ANALYZE = 30 2515 TK_AND = 44 2516 TK_ANY = 101 2517 TK_AS = 24 2518 TK_ASC = 31 2519 TK_ASTERISK = 180 2520 TK_ATTACH = 32 2521 TK_AUTOINCR = 126 2522 TK_BEFORE = 33 2523 TK_BEGIN = 5 2524 TK_BETWEEN = 48 2525 TK_BY = 34 2526 TK_CASCADE = 35 2527 TK_CASE = 157 2528 TK_CAST = 36 2529 TK_CHECK = 124 2530 TK_COLLATE = 113 2531 TK_COLUMN = 167 2532 TK_COLUMNKW = 60 2533 TK_COMMIT = 10 2534 TK_CONFLICT = 37 2535 TK_CONSTRAINT = 119 2536 TK_CREATE = 17 2537 TK_CTIME_KW = 100 2538 TK_CURRENT = 85 2539 TK_DATABASE = 38 2540 TK_DEFAULT = 120 2541 TK_DEFERRABLE = 131 2542 TK_DEFERRED = 7 2543 TK_DELETE = 128 2544 TK_DESC = 39 2545 TK_DETACH = 40 2546 TK_DISTINCT = 140 2547 TK_DO = 61 2548 TK_DROP = 133 2549 TK_EACH = 41 2550 TK_ELSE = 160 2551 TK_END = 11 2552 TK_ESCAPE = 58 2553 TK_EXCEPT = 136 2554 TK_EXCLUDE = 91 2555 TK_EXCLUSIVE = 9 2556 TK_EXISTS = 20 2557 TK_EXPLAIN = 2 2558 TK_FAIL = 42 2559 TK_FILTER = 166 2560 TK_FIRST = 83 2561 TK_FOLLOWING = 86 2562 TK_FOR = 62 2563 TK_FOREIGN = 132 2564 TK_FROM = 142 2565 TK_FUNCTION = 172 2566 TK_GENERATED = 95 2567 TK_GROUP = 146 2568 TK_GROUPS = 92 2569 TK_HAVING = 147 2570 TK_IF = 18 2571 TK_IF_NULL_ROW = 179 2572 TK_IGNORE = 63 2573 TK_IMMEDIATE = 8 2574 TK_IN = 49 2575 TK_INDEX = 161 2576 TK_INDEXED = 116 2577 TK_INITIALLY = 64 2578 TK_INSERT = 127 2579 TK_INSTEAD = 65 2580 TK_INTERSECT = 137 2581 TK_INTO = 151 2582 TK_IS = 45 2583 TK_ISNOT = 171 2584 TK_ISNULL = 50 2585 TK_JOIN = 143 2586 TK_JOIN_KW = 118 2587 TK_KEY = 67 2588 TK_LAST = 84 2589 TK_LIKE_KW = 47 2590 TK_LIMIT = 148 2591 TK_MATCH = 46 2592 TK_MATERIALIZED = 97 2593 TK_NO = 66 2594 TK_NOT = 19 2595 TK_NOTHING = 152 2596 TK_NOTNULL = 51 2597 TK_NULL = 121 2598 TK_NULLS = 82 2599 TK_OF = 68 2600 TK_OFFSET = 69 2601 TK_ON = 115 2602 TK_OR = 43 2603 TK_ORDER = 145 2604 TK_OTHERS = 93 2605 TK_OVER = 165 2606 TK_PARTITION = 87 2607 TK_PLAN = 4 2608 TK_PRAGMA = 70 2609 TK_PRECEDING = 88 2610 TK_PRIMARY = 122 2611 TK_PTR = 112 2612 TK_QUERY = 3 2613 TK_RAISE = 71 2614 TK_RANGE = 89 2615 TK_RECURSIVE = 72 2616 TK_REFERENCES = 125 2617 TK_REGISTER = 176 2618 TK_REINDEX = 98 2619 TK_RELEASE = 14 2620 TK_RENAME = 99 2621 TK_REPLACE = 73 2622 TK_RESTRICT = 74 2623 TK_RETURNING = 150 2624 TK_ROLLBACK = 12 2625 TK_ROW = 75 2626 TK_ROWS = 76 2627 TK_SAVEPOINT = 13 2628 TK_SELECT = 138 2629 TK_SELECT_COLUMN = 178 2630 TK_SET = 130 2631 TK_SPAN = 181 2632 TK_TABLE = 16 2633 TK_TEMP = 21 2634 TK_THEN = 159 2635 TK_TIES = 94 2636 TK_TO = 15 2637 TK_TRANSACTION = 6 2638 TK_TRIGGER = 77 2639 TK_TRUEFALSE = 170 2640 TK_TRUTH = 175 2641 TK_UMINUS = 173 2642 TK_UNBOUNDED = 90 2643 TK_UNION = 134 2644 TK_UNIQUE = 123 2645 TK_UPDATE = 129 2646 TK_UPLUS = 174 2647 TK_USING = 144 2648 TK_VACUUM = 78 2649 TK_VALUES = 139 2650 TK_VECTOR = 177 2651 TK_VIEW = 79 2652 TK_VIRTUAL = 80 2653 TK_WHEN = 158 2654 TK_WHERE = 149 2655 TK_WINDOW = 164 2656 TK_WITH = 81 2657 TK_WITHOUT = 26 2658 TREETRACE_ENABLED = 0 2659 TRIGGER_AFTER = 2 2660 TRIGGER_BEFORE = 1 2661 UINT16_MAX = 0xffff 2662 UINT32_MAX = 0xffffffff 2663 UINT64_MAX = 0xffffffffffffffff 2664 UINT8_MAX = 0xff 2665 UINTMAX_MAX = 18446744073709551615 2666 UINTPTR_MAX = 0xffffffffffffffff 2667 UINT_FAST16_MAX = 4294967295 2668 UINT_FAST32_MAX = 4294967295 2669 UINT_FAST64_MAX = 18446744073709551615 2670 UINT_FAST8_MAX = 4294967295 2671 UINT_LEAST16_MAX = 65535 2672 UINT_LEAST32_MAX = 4294967295 2673 UINT_LEAST64_MAX = 18446744073709551615 2674 UINT_LEAST8_MAX = 255 2675 WCHAR_MAX = 2147483647 2676 WCHAR_MIN = -2147483648 2677 WHERE_AGG_DISTINCT = 0x0400 2678 WHERE_DISTINCTBY = 0x0080 2679 WHERE_DISTINCT_NOOP = 0 2680 WHERE_DISTINCT_ORDERED = 2 2681 WHERE_DISTINCT_UNIQUE = 1 2682 WHERE_DISTINCT_UNORDERED = 3 2683 WHERE_DUPLICATES_OK = 0x0010 2684 WHERE_GROUPBY = 0x0040 2685 WHERE_ONEPASS_DESIRED = 0x0004 2686 WHERE_ONEPASS_MULTIROW = 0x0008 2687 WHERE_ORDERBY_LIMIT = 0x0800 2688 WHERE_ORDERBY_MAX = 0x0002 2689 WHERE_ORDERBY_MIN = 0x0001 2690 WHERE_ORDERBY_NORMAL = 0x0000 2691 WHERE_OR_SUBCLAUSE = 0x0020 2692 WHERE_RIGHT_JOIN = 0x1000 2693 WHERE_SORTBYGROUP = 0x0200 2694 WHERE_USE_LIMIT = 0x4000 2695 WHERE_WANT_DISTINCT = 0x0100 2696 WINT_MAX = 2147483647 2697 WINT_MIN = -2147483648 2698 WRC_Abort = 2 2699 WRC_Continue = 0 2700 WRC_Prune = 1 2701 XN_EXPR = -2 2702 XN_ROWID = -1 2703 X_BSD_SOURCE = 0 2704 X_GNU_SOURCE = 0 2705 X_INTTYPES_H_ = 0 2706 X_LARGEFILE_SOURCE = 1 2707 X_LARGE_FILE = 1 2708 X_MBSTATE_T_DEFINED_ = 0 2709 X_PTRDIFF_T_DEFINED_ = 0 2710 X_SQLITE_OS_H_ = 0 2711 X_STDDEF_H_ = 0 2712 X_SYS_STDINT_H_ = 0 2713 X_WINT_T_DEFINED_ = 0 2714 X_XOPEN_SOURCE = 600 2715 SESSION_STREAM_TCL_VAR = "sqlite3session_streams" 2716 BUS_ADRALN = 1 2717 BUS_ADRERR = 2 2718 BUS_OBJERR = 3 2719 CLD_CONTINUED = 6 2720 CLD_DUMPED = 3 2721 CLD_EXITED = 1 2722 CLD_KILLED = 2 2723 CLD_STOPPED = 5 2724 CLD_TRAPPED = 4 2725 EMT_TAGOVF = 1 2726 FPE_FLTDIV = 3 2727 FPE_FLTINV = 7 2728 FPE_FLTOVF = 4 2729 FPE_FLTRES = 6 2730 FPE_FLTSUB = 8 2731 FPE_FLTUND = 5 2732 FPE_INTDIV = 1 2733 FPE_INTOVF = 2 2734 ILL_BADSTK = 8 2735 ILL_COPROC = 7 2736 ILL_ILLADR = 3 2737 ILL_ILLOPC = 1 2738 ILL_ILLOPN = 2 2739 ILL_ILLTRP = 4 2740 ILL_PRVOPC = 5 2741 ILL_PRVREG = 6 2742 MAX_PREPARED_STMTS = 100 2743 MINSIGSTKSZ = 12288 2744 NSIG = 33 2745 NSIGBUS = 3 2746 NSIGCLD = 6 2747 NSIGEMT = 1 2748 NSIGFPE = 8 2749 NSIGILL = 8 2750 NSIGSEGV = 2 2751 NSIGTRAP = 2 2752 NUM_PREPARED_STMTS = 10 2753 SA_NOCLDSTOP = 0x0008 2754 SA_NOCLDWAIT = 0x0020 2755 SA_NODEFER = 0x0010 2756 SA_ONSTACK = 0x0001 2757 SA_RESETHAND = 0x0004 2758 SA_RESTART = 0x0002 2759 SA_SIGINFO = 0x0040 2760 SEGV_ACCERR = 2 2761 SEGV_MAPERR = 1 2762 SIGABRT = 6 2763 SIGALRM = 14 2764 SIGBUS = 10 2765 SIGCHLD = 20 2766 SIGCONT = 19 2767 SIGEMT = 7 2768 SIGFPE = 8 2769 SIGHUP = 1 2770 SIGILL = 4 2771 SIGINFO = 29 2772 SIGINT = 2 2773 SIGIO = 23 2774 SIGIOT = 6 2775 SIGKILL = 9 2776 SIGPIPE = 13 2777 SIGPROF = 27 2778 SIGQUIT = 3 2779 SIGSEGV = 11 2780 SIGSTKSZ = 28672 2781 SIGSTOP = 17 2782 SIGSYS = 12 2783 SIGTERM = 15 2784 SIGTHR = 32 2785 SIGTRAP = 5 2786 SIGTSTP = 18 2787 SIGTTIN = 21 2788 SIGTTOU = 22 2789 SIGURG = 16 2790 SIGUSR1 = 30 2791 SIGUSR2 = 31 2792 SIGVTALRM = 26 2793 SIGWINCH = 28 2794 SIGXCPU = 24 2795 SIGXFSZ = 25 2796 SIG_BLOCK = 1 2797 SIG_SETMASK = 3 2798 SIG_UNBLOCK = 2 2799 SI_LWP = -1 2800 SI_MAXSZ = 128 2801 SI_NOINFO = 32767 2802 SI_QUEUE = -2 2803 SI_TIMER = -3 2804 SI_USER = 0 2805 SQLITE_EVAL_WITHOUTNULLS = 0x00001 2806 SQLITE_TCL_NRE = 1 2807 SS_DISABLE = 0x0004 2808 SS_ONSTACK = 0x0001 2809 SV_INTERRUPT = 2 2810 SV_ONSTACK = 1 2811 SV_RESETHAND = 4 2812 TCLSH = 1 2813 TRAP_BRKPT = 1 2814 TRAP_TRACE = 2 2815 X_MACHINE_SIGNAL_H_ = 0 2816 X_NSIG = 33 2817 X_SYS_SIGINFO_H = 0 2818 X_SYS_SIGNAL_H_ = 0 2819 X_USER_SIGNAL_H = 0 2820 CACHE_STALE = 0 2821 CURTYPE_BTREE = 0 2822 CURTYPE_PSEUDO = 3 2823 CURTYPE_SORTER = 1 2824 CURTYPE_VTAB = 2 2825 MEM_AffMask = 0x003f 2826 MEM_Agg = 0x8000 2827 MEM_Blob = 0x0010 2828 MEM_Cleared = 0x0100 2829 MEM_Dyn = 0x1000 2830 MEM_Ephem = 0x4000 2831 MEM_FromBind = 0x0040 2832 MEM_Int = 0x0004 2833 MEM_IntReal = 0x0020 2834 MEM_Null = 0x0001 2835 MEM_Real = 0x0008 2836 MEM_Static = 0x2000 2837 MEM_Str = 0x0002 2838 MEM_Subtype = 0x0800 2839 MEM_Term = 0x0200 2840 MEM_TypeMask = 0x0dbf 2841 MEM_Undefined = 0x0000 2842 MEM_Zero = 0x0400 2843 PRIO_MAX = 20 2844 PRIO_MIN = -20 2845 PRIO_PGRP = 1 2846 PRIO_PROCESS = 0 2847 PRIO_USER = 2 2848 RLIMIT_CORE = 4 2849 RLIMIT_CPU = 0 2850 RLIMIT_DATA = 2 2851 RLIMIT_FSIZE = 1 2852 RLIMIT_MEMLOCK = 6 2853 RLIMIT_NOFILE = 8 2854 RLIMIT_NPROC = 7 2855 RLIMIT_RSS = 5 2856 RLIMIT_STACK = 3 2857 RLIM_NLIMITS = 9 2858 RUSAGE_CHILDREN = -1 2859 RUSAGE_SELF = 0 2860 RUSAGE_THREAD = 1 2861 SQLITE_ENABLE_LOCKING_STYLE = 0 2862 SQLITE_FRAME_MAGIC = 0x879fb71e 2863 SQLITE_MAX_SCHEMA_RETRY = 50 2864 SQLITE_VDBEINT_H = 0 2865 VDBE_DISPLAY_P4 = 1 2866 VDBE_HALT_STATE = 3 2867 VDBE_INIT_STATE = 0 2868 VDBE_READY_STATE = 1 2869 VDBE_RUN_STATE = 2 2870 X_SYS_RESOURCE_H_ = 0 2871 BTCF_AtLast = 0x08 2872 BTCF_Incrblob = 0x10 2873 BTCF_Multiple = 0x20 2874 BTCF_Pinned = 0x40 2875 BTCF_ValidNKey = 0x02 2876 BTCF_ValidOvfl = 0x04 2877 BTCF_WriteFlag = 0x01 2878 BTCURSOR_MAX_DEPTH = 20 2879 BTS_EXCLUSIVE = 0x0040 2880 BTS_FAST_SECURE = 0x000c 2881 BTS_INITIALLY_EMPTY = 0x0010 2882 BTS_NO_WAL = 0x0020 2883 BTS_OVERWRITE = 0x0008 2884 BTS_PAGESIZE_FIXED = 0x0002 2885 BTS_PENDING = 0x0080 2886 BTS_READ_ONLY = 0x0001 2887 BTS_SECURE_DELETE = 0x0004 2888 CURSOR_FAULT = 4 2889 CURSOR_INVALID = 1 2890 CURSOR_REQUIRESEEK = 3 2891 CURSOR_SKIPNEXT = 2 2892 CURSOR_VALID = 0 2893 PTF_INTKEY = 0x01 2894 PTF_LEAF = 0x08 2895 PTF_LEAFDATA = 0x04 2896 PTF_ZERODATA = 0x02 2897 PTRMAP_BTREE = 5 2898 PTRMAP_FREEPAGE = 2 2899 PTRMAP_OVERFLOW1 = 3 2900 PTRMAP_OVERFLOW2 = 4 2901 PTRMAP_ROOTPAGE = 1 2902 READ_LOCK = 1 2903 SQLITE_FILE_HEADER = "SQLite format 3" 2904 TRANS_NONE = 0 2905 TRANS_READ = 1 2906 TRANS_WRITE = 2 2907 WRITE_LOCK = 2 2908 ARG_MAX = 524288 2909 BC_BASE_MAX = 2147483647 2910 BC_DIM_MAX = 65535 2911 BC_SCALE_MAX = 2147483647 2912 BC_STRING_MAX = 2147483647 2913 CHAR_BIT = 8 2914 CHAR_MAX = 0xff 2915 CHAR_MIN = 0 2916 CHILD_MAX = 80 2917 COLL_WEIGHTS_MAX = 2 2918 EXPR_NEST_MAX = 32 2919 GID_MAX = 4294967295 2920 HOST_NAME_MAX = 255 2921 INT_MAX = 0x7fffffff 2922 INT_MIN = -2147483648 2923 IOV_MAX = 1024 2924 LINE_MAX = 2048 2925 LINK_MAX = 32767 2926 LLONG_MAX = 0x7fffffffffffffff 2927 LLONG_MIN = -9223372036854775808 2928 LOGIN_NAME_MAX = 32 2929 LONG_BIT = 64 2930 LONG_MAX = 0x7fffffffffffffff 2931 LONG_MIN = -9223372036854775808 2932 MAX_CANON = 255 2933 MAX_INPUT = 255 2934 MB_LEN_MAX = 4 2935 NAME_MAX = 255 2936 NGROUPS_MAX = 16 2937 NL_ARGMAX = 9 2938 NL_LANGMAX = 14 2939 NL_MSGMAX = 32767 2940 NL_SETMAX = 255 2941 NL_TEXTMAX = 255 2942 NZERO = 20 2943 N_THREAD = 26 2944 OPEN_MAX = 64 2945 PATH_MAX = 1024 2946 PIPE_BUF = 512 2947 PTHREAD_BARRIER_SERIAL_THREAD = -1 2948 PTHREAD_CANCEL_ASYNCHRONOUS = 2 2949 PTHREAD_CANCEL_DEFERRED = 0 2950 PTHREAD_CANCEL_DISABLE = 1 2951 PTHREAD_CANCEL_ENABLE = 0 2952 PTHREAD_CREATE_DETACHED = 1 2953 PTHREAD_CREATE_JOINABLE = 0 2954 PTHREAD_DESTRUCTOR_ITERATIONS = 4 2955 PTHREAD_DETACHED = 0x1 2956 PTHREAD_DONE_INIT = 1 2957 PTHREAD_EXPLICIT_SCHED = 0 2958 PTHREAD_INHERIT_SCHED = 0x4 2959 PTHREAD_KEYS_MAX = 256 2960 PTHREAD_NEEDS_INIT = 0 2961 PTHREAD_NOFLOAT = 0x8 2962 PTHREAD_PRIO_INHERIT = 1 2963 PTHREAD_PRIO_NONE = 0 2964 PTHREAD_PRIO_PROTECT = 2 2965 PTHREAD_PROCESS_PRIVATE = 0 2966 PTHREAD_PROCESS_SHARED = 1 2967 PTHREAD_SCOPE_PROCESS = 0 2968 PTHREAD_SCOPE_SYSTEM = 0x2 2969 PTHREAD_STACK_MIN = 4096 2970 PTHREAD_THREADS_MAX = 18446744073709551615 2971 QUAD_MAX = 0x7fffffffffffffff 2972 QUAD_MIN = -9223372036854775808 2973 RE_DUP_MAX = 255 2974 SCHAR_MAX = 0x7f 2975 SCHAR_MIN = -128 2976 SCHED_FIFO = 1 2977 SCHED_OTHER = 2 2978 SCHED_RR = 3 2979 SEM_VALUE_MAX = 4294967295 2980 SHRT_MAX = 0x7fff 2981 SHRT_MIN = -32768 2982 SIZE_T_MAX = 18446744073709551615 2983 SSIZE_MAX = 9223372036854775807 2984 SYMLINK_MAX = 1024 2985 SYMLOOP_MAX = 32 2986 TTY_NAME_MAX = 260 2987 UCHAR_MAX = 0xff 2988 UID_MAX = 4294967295 2989 UINT_MAX = 0xffffffff 2990 ULLONG_MAX = 0xffffffffffffffff 2991 ULONG_MAX = 0xffffffffffffffff 2992 UQUAD_MAX = 0xffffffffffffffff 2993 USHRT_MAX = 0xffff 2994 WORD_BIT = 32 2995 X_LIMITS_H_ = 0 2996 X_MACHINE_LIMITS_H_ = 0 2997 X_MAXCOMLEN = 24 2998 X_POSIX2_BC_BASE_MAX = 99 2999 X_POSIX2_BC_DIM_MAX = 2048 3000 X_POSIX2_BC_SCALE_MAX = 99 3001 X_POSIX2_BC_STRING_MAX = 1000 3002 X_POSIX2_CHARCLASS_NAME_MAX = 14 3003 X_POSIX2_COLL_WEIGHTS_MAX = 2 3004 X_POSIX2_EXPR_NEST_MAX = 32 3005 X_POSIX2_LINE_MAX = 2048 3006 X_POSIX2_RE_DUP_MAX = 255 3007 X_POSIX_ARG_MAX = 4096 3008 X_POSIX_CHILD_MAX = 25 3009 X_POSIX_CLOCKRES_MIN = 20000000 3010 X_POSIX_HOST_NAME_MAX = 255 3011 X_POSIX_LINK_MAX = 8 3012 X_POSIX_LOGIN_NAME_MAX = 9 3013 X_POSIX_MAX_CANON = 255 3014 X_POSIX_MAX_INPUT = 255 3015 X_POSIX_NAME_MAX = 14 3016 X_POSIX_NGROUPS_MAX = 8 3017 X_POSIX_OPEN_MAX = 20 3018 X_POSIX_PATH_MAX = 256 3019 X_POSIX_PIPE_BUF = 512 3020 X_POSIX_RE_DUP_MAX = 255 3021 X_POSIX_SEM_NSEMS_MAX = 256 3022 X_POSIX_SEM_VALUE_MAX = 32767 3023 X_POSIX_SSIZE_MAX = 32767 3024 X_POSIX_STREAM_MAX = 8 3025 X_POSIX_SYMLINK_MAX = 255 3026 X_POSIX_SYMLOOP_MAX = 8 3027 X_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 3028 X_POSIX_THREAD_KEYS_MAX = 128 3029 X_POSIX_THREAD_THREADS_MAX = 4 3030 X_POSIX_TTY_NAME_MAX = 9 3031 X_POSIX_TZNAME_MAX = 6 3032 X_PTHREAD_H_ = 0 3033 X_SCHED_H_ = 0 3034 X_SYS_LIMITS_H_ = 0 3035 X_XOPEN_IOV_MAX = 16 3036 X_XOPEN_NAME_MAX = 255 3037 X_XOPEN_PATH_MAX = 1024 3038 TCL_THREADS = 0 3039 MX_CHUNK_NUMBER = 299 3040 SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET = 400 3041 SQLITE_MULTIPLEX_WAL_8_3_OFFSET = 700 3042 DEVSYM_MAX_PATHNAME = 512 3043 DEVSYM_VFS_NAME = "devsym" 3044 WRITECRASH_NAME = "writecrash" 3045 SQLITE_INTARRAY_H = 0 3046 JT_MAX_PATHNAME = 512 3047 JT_VFS_NAME = "jt" 3048 MALLOC_LOG_FRAMES = 10 3049 DEFAULT_SECTOR_SIZE = 0x1000 3050 MAX_PAGE_SIZE = 0x10000 3051 MULTIPLEX_CTRL_ENABLE = 214014 3052 MULTIPLEX_CTRL_SET_CHUNK_SIZE = 214015 3053 MULTIPLEX_CTRL_SET_MAX_CHUNKS = 214016 3054 SQLITE_MULTIPLEX_CHUNK_SIZE = 2147418112 3055 SQLITE_MULTIPLEX_MAX_CHUNKS = 12 3056 SQLITE_MULTIPLEX_VFS_NAME = "multiplex" 3057 SQLITE_TEST_MULTIPLEX_H = 0 3058 MAX_MUTEXES = 14 3059 STATIC_MUTEXES = 12 3060 BLOBSIZE = 10485760 3061 BLOCKSIZE = 512 3062 DATABASE_FILE = 1 3063 FS_VFS_NAME = "fs" 3064 JOURNAL_FILE = 2 3065 INST_MAX_PATHNAME = 512 3066 OS_ACCESS = 1 3067 OS_ANNOTATE = 28 3068 OS_CHECKRESERVEDLOCK = 2 3069 OS_CLOSE = 3 3070 OS_CURRENTTIME = 4 3071 OS_DELETE = 5 3072 OS_DEVCHAR = 6 3073 OS_FILECONTROL = 7 3074 OS_FILESIZE = 8 3075 OS_FULLPATHNAME = 9 3076 OS_LOCK = 11 3077 OS_NUMEVENTS = 29 3078 OS_OPEN = 12 3079 OS_RANDOMNESS = 13 3080 OS_READ = 14 3081 OS_SECTORSIZE = 15 3082 OS_SHMBARRIER = 26 3083 OS_SHMLOCK = 25 3084 OS_SHMMAP = 23 3085 OS_SHMUNMAP = 22 3086 OS_SLEEP = 16 3087 OS_SYNC = 17 3088 OS_TRUNCATE = 18 3089 OS_UNLOCK = 19 3090 OS_WRITE = 20 3091 VFSLOG_BUFFERSIZE = 8192 3092 TESTPCACHE_CLEAR = 0xd42670d4 3093 TESTPCACHE_NPAGE = 217 3094 TESTPCACHE_RESERVE = 17 3095 TESTPCACHE_VALID = 0x364585fd 3096 MSG_Close = 6 3097 MSG_Done = 7 3098 MSG_Finalize = 5 3099 MSG_Open = 1 3100 MSG_Prepare = 2 3101 MSG_Reset = 4 3102 MSG_Step = 3 3103 MADV_DONTNEED = 4 3104 MADV_FREE = 6 3105 MADV_NORMAL = 0 3106 MADV_RANDOM = 1 3107 MADV_SEQUENTIAL = 2 3108 MADV_SPACEAVAIL = 5 3109 MADV_WILLNEED = 3 3110 MAP_ANON = 0x1000 3111 MAP_ANONYMOUS = 4096 3112 MAP_CONCEAL = 0x8000 3113 MAP_COPY = 2 3114 MAP_FILE = 0 3115 MAP_FIXED = 0x0010 3116 MAP_FLAGMASK = 0xfff7 3117 MAP_HASSEMAPHORE = 0 3118 MAP_INHERIT = 0 3119 MAP_INHERIT_COPY = 1 3120 MAP_INHERIT_NONE = 2 3121 MAP_INHERIT_SHARE = 0 3122 MAP_INHERIT_ZERO = 3 3123 MAP_NOEXTEND = 0 3124 MAP_NORESERVE = 0 3125 MAP_PRIVATE = 0x0002 3126 MAP_RENAME = 0 3127 MAP_SHARED = 0x0001 3128 MAP_STACK = 0x4000 3129 MAP_TRYFIXED = 0 3130 MCL_CURRENT = 0x01 3131 MCL_FUTURE = 0x02 3132 MS_ASYNC = 0x01 3133 MS_INVALIDATE = 0x04 3134 MS_SYNC = 0x02 3135 POSIX_MADV_DONTNEED = 4 3136 POSIX_MADV_NORMAL = 0 3137 POSIX_MADV_RANDOM = 1 3138 POSIX_MADV_SEQUENTIAL = 2 3139 POSIX_MADV_WILLNEED = 3 3140 PROT_EXEC = 0x04 3141 PROT_NONE = 0x00 3142 PROT_READ = 0x01 3143 PROT_WRITE = 0x02 3144 TCLVAR_NAME_EQ = 101 3145 TCLVAR_NAME_MATCH = 109 3146 TCLVAR_VALUE_GLOB = 103 3147 TCLVAR_VALUE_LIKE = 108 3148 TCLVAR_VALUE_REGEXP = 114 3149 FAULT_INJECT_NONE = 0 3150 FAULT_INJECT_PERSISTENT = 2 3151 FAULT_INJECT_TRANSIENT = 1 3152 TESTVFS_ACCESS_MASK = 0x00004000 3153 TESTVFS_ALL_MASK = 0x001FFFFF 3154 TESTVFS_CKLOCK_MASK = 0x00080000 3155 TESTVFS_CLOSE_MASK = 0x00000800 3156 TESTVFS_DELETE_MASK = 0x00000400 3157 TESTVFS_FCNTL_MASK = 0x00100000 3158 TESTVFS_FULLPATHNAME_MASK = 0x00008000 3159 TESTVFS_LOCK_MASK = 0x00040000 3160 TESTVFS_MAX_ARGS = 12 3161 TESTVFS_MAX_PAGES = 1024 3162 TESTVFS_OPEN_MASK = 0x00000100 3163 TESTVFS_READ_MASK = 0x00010000 3164 TESTVFS_SHMBARRIER_MASK = 0x00000040 3165 TESTVFS_SHMCLOSE_MASK = 0x00000080 3166 TESTVFS_SHMLOCK_MASK = 0x00000010 3167 TESTVFS_SHMMAP_MASK = 0x00000020 3168 TESTVFS_SHMOPEN_MASK = 0x00000001 3169 TESTVFS_SYNC_MASK = 0x00000200 3170 TESTVFS_TRUNCATE_MASK = 0x00002000 3171 TESTVFS_UNLOCK_MASK = 0x00020000 3172 TESTVFS_WRITE_MASK = 0x00001000 3173 ) 3174 3175 const ( 3176 PTHREAD_MUTEX_ERRORCHECK = 1 3177 PTHREAD_MUTEX_RECURSIVE = 2 3178 PTHREAD_MUTEX_NORMAL = 3 3179 PTHREAD_MUTEX_STRICT_NP = 4 3180 PTHREAD_MUTEX_TYPE_MAX = 5 3181 ) 3182 3183 const ( 3184 TCL_QUEUE_TAIL = 0 3185 TCL_QUEUE_HEAD = 1 3186 TCL_QUEUE_MARK = 2 3187 ) 3188 3189 const ( 3190 TCL_PATH_ABSOLUTE = 0 3191 TCL_PATH_RELATIVE = 1 3192 TCL_PATH_VOLUME_RELATIVE = 2 3193 ) 3194 3195 const ( 3196 TCL_INT = 0 3197 TCL_DOUBLE = 1 3198 TCL_EITHER = 2 3199 TCL_WIDE_INT = 3 3200 ) 3201 3202 type ptrdiff_t = int64 3203 3204 type size_t = uint64 3205 3206 type wchar_t = int32 3207 3208 type va_list = uintptr 3209 3210 type sqlite32 = struct { 3211 FpVfs uintptr 3212 FpVdbe uintptr 3213 FpDfltColl uintptr 3214 Fmutex uintptr 3215 FaDb uintptr 3216 FnDb int32 3217 FmDbFlags u32 3218 Fflags u64 3219 FlastRowid i64 3220 FszMmap i64 3221 FnSchemaLock u32 3222 FopenFlags uint32 3223 FerrCode int32 3224 FerrByteOffset int32 3225 FerrMask int32 3226 FiSysErrno int32 3227 FdbOptFlags u32 3228 Fenc u8 3229 FautoCommit u8 3230 Ftemp_store u8 3231 FmallocFailed u8 3232 FbBenignMalloc u8 3233 FdfltLockMode u8 3234 FnextAutovac int8 3235 FsuppressErr u8 3236 FvtabOnConflict u8 3237 FisTransactionSavepoint u8 3238 FmTrace u8 3239 FnoSharedCache u8 3240 FnSqlExec u8 3241 FeOpenState u8 3242 F__ccgo_pad1 [2]byte 3243 FnextPagesize int32 3244 FnChange i64 3245 FnTotalChange i64 3246 FaLimit [12]int32 3247 FnMaxSorterMmap int32 3248 F__ccgo_pad2 [4]byte 3249 Finit struct { 3250 FnewTnum Pgno 3251 FiDb u8 3252 Fbusy u8 3253 F__ccgo_pad1 [2]byte 3254 ForphanTrigger uint8 3255 F__ccgo_pad2 [7]byte 3256 FazInit uintptr 3257 } 3258 FnVdbeActive int32 3259 FnVdbeRead int32 3260 FnVdbeWrite int32 3261 FnVdbeExec int32 3262 FnVDestroy int32 3263 FnExtension int32 3264 FaExtension uintptr 3265 Ftrace struct{ FxLegacy uintptr } 3266 FpTraceArg uintptr 3267 FxProfile uintptr 3268 FpProfileArg uintptr 3269 FpCommitArg uintptr 3270 FxCommitCallback uintptr 3271 FpRollbackArg uintptr 3272 FxRollbackCallback uintptr 3273 FpUpdateArg uintptr 3274 FxUpdateCallback uintptr 3275 FpAutovacPagesArg uintptr 3276 FxAutovacDestr uintptr 3277 FxAutovacPages uintptr 3278 FpParse uintptr 3279 FpPreUpdateArg uintptr 3280 FxPreUpdateCallback uintptr 3281 FpPreUpdate uintptr 3282 FxWalCallback uintptr 3283 FpWalArg uintptr 3284 FxCollNeeded uintptr 3285 FxCollNeeded16 uintptr 3286 FpCollNeededArg uintptr 3287 FpErr uintptr 3288 Fu1 struct { 3289 F__ccgo_pad1 [0]uint64 3290 FisInterrupted int32 3291 F__ccgo_pad2 [4]byte 3292 } 3293 Flookaside Lookaside 3294 FxAuth sqlite3_xauth 3295 FpAuthArg uintptr 3296 FxProgress uintptr 3297 FpProgressArg uintptr 3298 FnProgressOps uint32 3299 FnVTrans int32 3300 FaModule Hash 3301 FpVtabCtx uintptr 3302 FaVTrans uintptr 3303 FpDisconnect uintptr 3304 FaFunc Hash 3305 FaCollSeq Hash 3306 FbusyHandler BusyHandler 3307 FaDbStatic [2]Db 3308 FpSavepoint uintptr 3309 FnAnalysisLimit int32 3310 FbusyTimeout int32 3311 FnSavepoint int32 3312 FnStatement int32 3313 FnDeferredCons i64 3314 FnDeferredImmCons i64 3315 FpnBytesFreed uintptr 3316 FpBlockingConnection uintptr 3317 FpUnlockConnection uintptr 3318 FpUnlockArg uintptr 3319 FxUnlockNotify uintptr 3320 FpNextBlocked uintptr 3321 } 3322 3323 type sqlite_int64 = int64 3324 type sqlite_uint64 = uint64 3325 type sqlite3_int64 = sqlite_int64 3326 type sqlite3_uint64 = sqlite_uint64 3327 3328 type sqlite3_callback = uintptr 3329 3330 type sqlite3_file1 = struct{ FpMethods uintptr } 3331 3332 type sqlite3_file = sqlite3_file1 3333 type sqlite3_io_methods1 = struct { 3334 FiVersion int32 3335 F__ccgo_pad1 [4]byte 3336 FxClose uintptr 3337 FxRead uintptr 3338 FxWrite uintptr 3339 FxTruncate uintptr 3340 FxSync uintptr 3341 FxFileSize uintptr 3342 FxLock uintptr 3343 FxUnlock uintptr 3344 FxCheckReservedLock uintptr 3345 FxFileControl uintptr 3346 FxSectorSize uintptr 3347 FxDeviceCharacteristics uintptr 3348 FxShmMap uintptr 3349 FxShmLock uintptr 3350 FxShmBarrier uintptr 3351 FxShmUnmap uintptr 3352 FxFetch uintptr 3353 FxUnfetch uintptr 3354 } 3355 3356 type sqlite3_io_methods = sqlite3_io_methods1 3357 3358 type sqlite3_mutex1 = struct { 3359 FpReal uintptr 3360 FeType int32 3361 F__ccgo_pad1 [4]byte 3362 } 3363 3364 type sqlite3_api_routines1 = struct { 3365 Faggregate_context uintptr 3366 Faggregate_count uintptr 3367 Fbind_blob uintptr 3368 Fbind_double uintptr 3369 Fbind_int uintptr 3370 Fbind_int64 uintptr 3371 Fbind_null uintptr 3372 Fbind_parameter_count uintptr 3373 Fbind_parameter_index uintptr 3374 Fbind_parameter_name uintptr 3375 Fbind_text uintptr 3376 Fbind_text16 uintptr 3377 Fbind_value uintptr 3378 Fbusy_handler uintptr 3379 Fbusy_timeout uintptr 3380 Fchanges uintptr 3381 Fclose uintptr 3382 Fcollation_needed uintptr 3383 Fcollation_needed16 uintptr 3384 Fcolumn_blob uintptr 3385 Fcolumn_bytes uintptr 3386 Fcolumn_bytes16 uintptr 3387 Fcolumn_count uintptr 3388 Fcolumn_database_name uintptr 3389 Fcolumn_database_name16 uintptr 3390 Fcolumn_decltype uintptr 3391 Fcolumn_decltype16 uintptr 3392 Fcolumn_double uintptr 3393 Fcolumn_int uintptr 3394 Fcolumn_int64 uintptr 3395 Fcolumn_name uintptr 3396 Fcolumn_name16 uintptr 3397 Fcolumn_origin_name uintptr 3398 Fcolumn_origin_name16 uintptr 3399 Fcolumn_table_name uintptr 3400 Fcolumn_table_name16 uintptr 3401 Fcolumn_text uintptr 3402 Fcolumn_text16 uintptr 3403 Fcolumn_type uintptr 3404 Fcolumn_value uintptr 3405 Fcommit_hook uintptr 3406 Fcomplete uintptr 3407 Fcomplete16 uintptr 3408 Fcreate_collation uintptr 3409 Fcreate_collation16 uintptr 3410 Fcreate_function uintptr 3411 Fcreate_function16 uintptr 3412 Fcreate_module uintptr 3413 Fdata_count uintptr 3414 Fdb_handle uintptr 3415 Fdeclare_vtab uintptr 3416 Fenable_shared_cache uintptr 3417 Ferrcode uintptr 3418 Ferrmsg uintptr 3419 Ferrmsg16 uintptr 3420 Fexec uintptr 3421 Fexpired uintptr 3422 Ffinalize uintptr 3423 Ffree uintptr 3424 Ffree_table uintptr 3425 Fget_autocommit uintptr 3426 Fget_auxdata uintptr 3427 Fget_table uintptr 3428 Fglobal_recover uintptr 3429 Finterruptx uintptr 3430 Flast_insert_rowid uintptr 3431 Flibversion uintptr 3432 Flibversion_number uintptr 3433 Fmalloc uintptr 3434 Fmprintf uintptr 3435 Fopen uintptr 3436 Fopen16 uintptr 3437 Fprepare uintptr 3438 Fprepare16 uintptr 3439 Fprofile uintptr 3440 Fprogress_handler uintptr 3441 Frealloc uintptr 3442 Freset uintptr 3443 Fresult_blob uintptr 3444 Fresult_double uintptr 3445 Fresult_error uintptr 3446 Fresult_error16 uintptr 3447 Fresult_int uintptr 3448 Fresult_int64 uintptr 3449 Fresult_null uintptr 3450 Fresult_text uintptr 3451 Fresult_text16 uintptr 3452 Fresult_text16be uintptr 3453 Fresult_text16le uintptr 3454 Fresult_value uintptr 3455 Frollback_hook uintptr 3456 Fset_authorizer uintptr 3457 Fset_auxdata uintptr 3458 Fxsnprintf uintptr 3459 Fstep uintptr 3460 Ftable_column_metadata uintptr 3461 Fthread_cleanup uintptr 3462 Ftotal_changes uintptr 3463 Ftrace uintptr 3464 Ftransfer_bindings uintptr 3465 Fupdate_hook uintptr 3466 Fuser_data uintptr 3467 Fvalue_blob uintptr 3468 Fvalue_bytes uintptr 3469 Fvalue_bytes16 uintptr 3470 Fvalue_double uintptr 3471 Fvalue_int uintptr 3472 Fvalue_int64 uintptr 3473 Fvalue_numeric_type uintptr 3474 Fvalue_text uintptr 3475 Fvalue_text16 uintptr 3476 Fvalue_text16be uintptr 3477 Fvalue_text16le uintptr 3478 Fvalue_type uintptr 3479 Fvmprintf uintptr 3480 Foverload_function uintptr 3481 Fprepare_v2 uintptr 3482 Fprepare16_v2 uintptr 3483 Fclear_bindings uintptr 3484 Fcreate_module_v2 uintptr 3485 Fbind_zeroblob uintptr 3486 Fblob_bytes uintptr 3487 Fblob_close uintptr 3488 Fblob_open uintptr 3489 Fblob_read uintptr 3490 Fblob_write uintptr 3491 Fcreate_collation_v2 uintptr 3492 Ffile_control uintptr 3493 Fmemory_highwater uintptr 3494 Fmemory_used uintptr 3495 Fmutex_alloc uintptr 3496 Fmutex_enter uintptr 3497 Fmutex_free uintptr 3498 Fmutex_leave uintptr 3499 Fmutex_try uintptr 3500 Fopen_v2 uintptr 3501 Frelease_memory uintptr 3502 Fresult_error_nomem uintptr 3503 Fresult_error_toobig uintptr 3504 Fsleep uintptr 3505 Fsoft_heap_limit uintptr 3506 Fvfs_find uintptr 3507 Fvfs_register uintptr 3508 Fvfs_unregister uintptr 3509 Fxthreadsafe uintptr 3510 Fresult_zeroblob uintptr 3511 Fresult_error_code uintptr 3512 Ftest_control uintptr 3513 Frandomness uintptr 3514 Fcontext_db_handle uintptr 3515 Fextended_result_codes uintptr 3516 Flimit uintptr 3517 Fnext_stmt uintptr 3518 Fsql uintptr 3519 Fstatus uintptr 3520 Fbackup_finish uintptr 3521 Fbackup_init uintptr 3522 Fbackup_pagecount uintptr 3523 Fbackup_remaining uintptr 3524 Fbackup_step uintptr 3525 Fcompileoption_get uintptr 3526 Fcompileoption_used uintptr 3527 Fcreate_function_v2 uintptr 3528 Fdb_config uintptr 3529 Fdb_mutex uintptr 3530 Fdb_status uintptr 3531 Fextended_errcode uintptr 3532 Flog uintptr 3533 Fsoft_heap_limit64 uintptr 3534 Fsourceid uintptr 3535 Fstmt_status uintptr 3536 Fstrnicmp uintptr 3537 Funlock_notify uintptr 3538 Fwal_autocheckpoint uintptr 3539 Fwal_checkpoint uintptr 3540 Fwal_hook uintptr 3541 Fblob_reopen uintptr 3542 Fvtab_config uintptr 3543 Fvtab_on_conflict uintptr 3544 Fclose_v2 uintptr 3545 Fdb_filename uintptr 3546 Fdb_readonly uintptr 3547 Fdb_release_memory uintptr 3548 Ferrstr uintptr 3549 Fstmt_busy uintptr 3550 Fstmt_readonly uintptr 3551 Fstricmp uintptr 3552 Furi_boolean uintptr 3553 Furi_int64 uintptr 3554 Furi_parameter uintptr 3555 Fxvsnprintf uintptr 3556 Fwal_checkpoint_v2 uintptr 3557 Fauto_extension uintptr 3558 Fbind_blob64 uintptr 3559 Fbind_text64 uintptr 3560 Fcancel_auto_extension uintptr 3561 Fload_extension uintptr 3562 Fmalloc64 uintptr 3563 Fmsize uintptr 3564 Frealloc64 uintptr 3565 Freset_auto_extension uintptr 3566 Fresult_blob64 uintptr 3567 Fresult_text64 uintptr 3568 Fstrglob uintptr 3569 Fvalue_dup uintptr 3570 Fvalue_free uintptr 3571 Fresult_zeroblob64 uintptr 3572 Fbind_zeroblob64 uintptr 3573 Fvalue_subtype uintptr 3574 Fresult_subtype uintptr 3575 Fstatus64 uintptr 3576 Fstrlike uintptr 3577 Fdb_cacheflush uintptr 3578 Fsystem_errno uintptr 3579 Ftrace_v2 uintptr 3580 Fexpanded_sql uintptr 3581 Fset_last_insert_rowid uintptr 3582 Fprepare_v3 uintptr 3583 Fprepare16_v3 uintptr 3584 Fbind_pointer uintptr 3585 Fresult_pointer uintptr 3586 Fvalue_pointer uintptr 3587 Fvtab_nochange uintptr 3588 Fvalue_nochange uintptr 3589 Fvtab_collation uintptr 3590 Fkeyword_count uintptr 3591 Fkeyword_name uintptr 3592 Fkeyword_check uintptr 3593 Fstr_new uintptr 3594 Fstr_finish uintptr 3595 Fstr_appendf uintptr 3596 Fstr_vappendf uintptr 3597 Fstr_append uintptr 3598 Fstr_appendall uintptr 3599 Fstr_appendchar uintptr 3600 Fstr_reset uintptr 3601 Fstr_errcode uintptr 3602 Fstr_length uintptr 3603 Fstr_value uintptr 3604 Fcreate_window_function uintptr 3605 Fnormalized_sql uintptr 3606 Fstmt_isexplain uintptr 3607 Fvalue_frombind uintptr 3608 Fdrop_modules uintptr 3609 Fhard_heap_limit64 uintptr 3610 Furi_key uintptr 3611 Ffilename_database uintptr 3612 Ffilename_journal uintptr 3613 Ffilename_wal uintptr 3614 Fcreate_filename uintptr 3615 Ffree_filename uintptr 3616 Fdatabase_file_object uintptr 3617 Ftxn_state uintptr 3618 Fchanges64 uintptr 3619 Ftotal_changes64 uintptr 3620 Fautovacuum_pages uintptr 3621 Ferror_offset uintptr 3622 Fvtab_rhs_value uintptr 3623 Fvtab_distinct uintptr 3624 Fvtab_in uintptr 3625 Fvtab_in_first uintptr 3626 Fvtab_in_next uintptr 3627 Fdeserialize uintptr 3628 Fserialize uintptr 3629 Fdb_name uintptr 3630 } 3631 3632 type sqlite3_vfs1 = struct { 3633 FiVersion int32 3634 FszOsFile int32 3635 FmxPathname int32 3636 F__ccgo_pad1 [4]byte 3637 FpNext uintptr 3638 FzName uintptr 3639 FpAppData uintptr 3640 FxOpen uintptr 3641 FxDelete uintptr 3642 FxAccess uintptr 3643 FxFullPathname uintptr 3644 FxDlOpen uintptr 3645 FxDlError uintptr 3646 FxDlSym uintptr 3647 FxDlClose uintptr 3648 FxRandomness uintptr 3649 FxSleep uintptr 3650 FxCurrentTime uintptr 3651 FxGetLastError uintptr 3652 FxCurrentTimeInt64 uintptr 3653 FxSetSystemCall uintptr 3654 FxGetSystemCall uintptr 3655 FxNextSystemCall uintptr 3656 } 3657 3658 type sqlite3_vfs = sqlite3_vfs1 3659 type sqlite3_syscall_ptr = uintptr 3660 3661 type sqlite3_mem_methods1 = struct { 3662 FxMalloc uintptr 3663 FxFree uintptr 3664 FxRealloc uintptr 3665 FxSize uintptr 3666 FxRoundup uintptr 3667 FxInit uintptr 3668 FxShutdown uintptr 3669 FpAppData uintptr 3670 } 3671 3672 type sqlite3_mem_methods = sqlite3_mem_methods1 3673 3674 type sqlite3_value1 = struct { 3675 Fu struct{ Fr float64 } 3676 Fz uintptr 3677 Fn int32 3678 Fflags u16 3679 Fenc u8 3680 FeSubtype u8 3681 Fdb uintptr 3682 FszMalloc int32 3683 FuTemp u32 3684 FzMalloc uintptr 3685 FxDel uintptr 3686 } 3687 3688 type sqlite3_context1 = struct { 3689 FpOut uintptr 3690 FpFunc uintptr 3691 FpMem uintptr 3692 FpVdbe uintptr 3693 FiOp int32 3694 FisError int32 3695 Fenc u8 3696 FskipFlag u8 3697 Fargc u8 3698 F__ccgo_pad1 [5]byte 3699 Fargv [1]uintptr 3700 } 3701 3702 type sqlite3_destructor_type = uintptr 3703 3704 type sqlite3_vtab1 = struct { 3705 FpModule uintptr 3706 FnRef int32 3707 F__ccgo_pad1 [4]byte 3708 FzErrMsg uintptr 3709 } 3710 3711 type sqlite3_vtab = sqlite3_vtab1 3712 type sqlite3_index_info1 = struct { 3713 FnConstraint int32 3714 F__ccgo_pad1 [4]byte 3715 FaConstraint uintptr 3716 FnOrderBy int32 3717 F__ccgo_pad2 [4]byte 3718 FaOrderBy uintptr 3719 FaConstraintUsage uintptr 3720 FidxNum int32 3721 F__ccgo_pad3 [4]byte 3722 FidxStr uintptr 3723 FneedToFreeIdxStr int32 3724 ForderByConsumed int32 3725 FestimatedCost float64 3726 FestimatedRows sqlite3_int64 3727 FidxFlags int32 3728 F__ccgo_pad4 [4]byte 3729 FcolUsed sqlite3_uint64 3730 } 3731 3732 type sqlite3_index_info = sqlite3_index_info1 3733 type sqlite3_vtab_cursor1 = struct{ FpVtab uintptr } 3734 3735 type sqlite3_vtab_cursor = sqlite3_vtab_cursor1 3736 type sqlite3_module1 = struct { 3737 FiVersion int32 3738 F__ccgo_pad1 [4]byte 3739 FxCreate uintptr 3740 FxConnect uintptr 3741 FxBestIndex uintptr 3742 FxDisconnect uintptr 3743 FxDestroy uintptr 3744 FxOpen uintptr 3745 FxClose uintptr 3746 FxFilter uintptr 3747 FxNext uintptr 3748 FxEof uintptr 3749 FxColumn uintptr 3750 FxRowid uintptr 3751 FxUpdate uintptr 3752 FxBegin uintptr 3753 FxSync uintptr 3754 FxCommit uintptr 3755 FxRollback uintptr 3756 FxFindFunction uintptr 3757 FxRename uintptr 3758 FxSavepoint uintptr 3759 FxRelease uintptr 3760 FxRollbackTo uintptr 3761 FxShadowName uintptr 3762 } 3763 3764 type sqlite3_module = sqlite3_module1 3765 3766 type sqlite3_index_constraint = struct { 3767 FiColumn int32 3768 Fop uint8 3769 Fusable uint8 3770 F__ccgo_pad1 [2]byte 3771 FiTermOffset int32 3772 } 3773 3774 type sqlite3_index_orderby = struct { 3775 FiColumn int32 3776 Fdesc uint8 3777 F__ccgo_pad1 [3]byte 3778 } 3779 3780 type sqlite3_index_constraint_usage = struct { 3781 FargvIndex int32 3782 Fomit uint8 3783 F__ccgo_pad1 [3]byte 3784 } 3785 3786 type sqlite3_mutex_methods1 = struct { 3787 FxMutexInit uintptr 3788 FxMutexEnd uintptr 3789 FxMutexAlloc uintptr 3790 FxMutexFree uintptr 3791 FxMutexEnter uintptr 3792 FxMutexTry uintptr 3793 FxMutexLeave uintptr 3794 FxMutexHeld uintptr 3795 FxMutexNotheld uintptr 3796 } 3797 3798 type sqlite3_mutex_methods = sqlite3_mutex_methods1 3799 3800 type sqlite3_str1 = struct { 3801 Fdb uintptr 3802 FzText uintptr 3803 FnAlloc u32 3804 FmxAlloc u32 3805 FnChar u32 3806 FaccError u8 3807 FprintfFlags u8 3808 F__ccgo_pad1 [2]byte 3809 } 3810 3811 type sqlite3_pcache_page1 = struct { 3812 FpBuf uintptr 3813 FpExtra uintptr 3814 } 3815 3816 type sqlite3_pcache_page = sqlite3_pcache_page1 3817 3818 type sqlite3_pcache_methods21 = struct { 3819 FiVersion int32 3820 F__ccgo_pad1 [4]byte 3821 FpArg uintptr 3822 FxInit uintptr 3823 FxShutdown uintptr 3824 FxCreate uintptr 3825 FxCachesize uintptr 3826 FxPagecount uintptr 3827 FxFetch uintptr 3828 FxUnpin uintptr 3829 FxRekey uintptr 3830 FxTruncate uintptr 3831 FxDestroy uintptr 3832 FxShrink uintptr 3833 } 3834 3835 type sqlite3_pcache_methods2 = sqlite3_pcache_methods21 3836 3837 type sqlite3_pcache_methods1 = struct { 3838 FpArg uintptr 3839 FxInit uintptr 3840 FxShutdown uintptr 3841 FxCreate uintptr 3842 FxCachesize uintptr 3843 FxPagecount uintptr 3844 FxFetch uintptr 3845 FxUnpin uintptr 3846 FxRekey uintptr 3847 FxTruncate uintptr 3848 FxDestroy uintptr 3849 } 3850 3851 type sqlite3_pcache_methods = sqlite3_pcache_methods1 3852 3853 type sqlite3_snapshot1 = struct{ Fhidden [48]uint8 } 3854 3855 type sqlite3_snapshot = sqlite3_snapshot1 3856 3857 type sqlite3_rtree_geometry1 = struct { 3858 FpContext uintptr 3859 FnParam int32 3860 F__ccgo_pad1 [4]byte 3861 FaParam uintptr 3862 FpUser uintptr 3863 FxDelUser uintptr 3864 } 3865 3866 type sqlite3_rtree_geometry = sqlite3_rtree_geometry1 3867 type sqlite3_rtree_query_info1 = struct { 3868 FpContext uintptr 3869 FnParam int32 3870 F__ccgo_pad1 [4]byte 3871 FaParam uintptr 3872 FpUser uintptr 3873 FxDelUser uintptr 3874 FaCoord uintptr 3875 FanQueue uintptr 3876 FnCoord int32 3877 FiLevel int32 3878 FmxLevel int32 3879 F__ccgo_pad2 [4]byte 3880 FiRowid sqlite3_int64 3881 FrParentScore sqlite3_rtree_dbl 3882 FeParentWithin int32 3883 FeWithin int32 3884 FrScore sqlite3_rtree_dbl 3885 FapSqlParam uintptr 3886 } 3887 3888 type sqlite3_rtree_query_info = sqlite3_rtree_query_info1 3889 3890 type sqlite3_rtree_dbl = float64 3891 3892 type Fts5ExtensionApi1 = struct { 3893 FiVersion int32 3894 F__ccgo_pad1 [4]byte 3895 FxUserData uintptr 3896 FxColumnCount uintptr 3897 FxRowCount uintptr 3898 FxColumnTotalSize uintptr 3899 FxTokenize uintptr 3900 FxPhraseCount uintptr 3901 FxPhraseSize uintptr 3902 FxInstCount uintptr 3903 FxInst uintptr 3904 FxRowid uintptr 3905 FxColumnText uintptr 3906 FxColumnSize uintptr 3907 FxQueryPhrase uintptr 3908 FxSetAuxdata uintptr 3909 FxGetAuxdata uintptr 3910 FxPhraseFirst uintptr 3911 FxPhraseNext uintptr 3912 FxPhraseFirstColumn uintptr 3913 FxPhraseNextColumn uintptr 3914 } 3915 3916 type Fts5ExtensionApi = Fts5ExtensionApi1 3917 type Fts5PhraseIter1 = struct { 3918 Fa uintptr 3919 Fb uintptr 3920 } 3921 3922 type Fts5PhraseIter = Fts5PhraseIter1 3923 3924 type fts5_extension_function = uintptr 3925 type fts5_tokenizer1 = struct { 3926 FxCreate uintptr 3927 FxDelete uintptr 3928 FxTokenize uintptr 3929 } 3930 3931 type fts5_tokenizer = fts5_tokenizer1 3932 3933 type fts5_api1 = struct { 3934 FiVersion int32 3935 F__ccgo_pad1 [4]byte 3936 FxCreateTokenizer uintptr 3937 FxFindTokenizer uintptr 3938 FxCreateFunction uintptr 3939 } 3940 3941 type fts5_api = fts5_api1 3942 3943 type sqlite3expert1 = struct { 3944 FiSample int32 3945 F__ccgo_pad1 [4]byte 3946 Fdb uintptr 3947 Fdbm uintptr 3948 Fdbv uintptr 3949 FpTable uintptr 3950 FpScan uintptr 3951 FpWrite uintptr 3952 FpStatement uintptr 3953 FbRun int32 3954 F__ccgo_pad2 [4]byte 3955 FpzErrmsg uintptr 3956 Frc int32 3957 F__ccgo_pad3 [4]byte 3958 FhIdx IdxHash 3959 FzCandidates uintptr 3960 } 3961 3962 type sqlite3expert = sqlite3expert1 3963 3964 type locale_t = uintptr 3965 3966 type u_char = uint8 3967 type u_short = uint16 3968 type u_int = uint32 3969 type u_long = uint64 3970 3971 type unchar = uint8 3972 type ushort = uint16 3973 type uint = uint32 3974 type ulong = uint64 3975 3976 type cpuid_t = uint64 3977 type register_t = int64 3978 3979 type int8_t = int8 3980 3981 type uint8_t = uint8 3982 3983 type int16_t = int16 3984 3985 type uint16_t = uint16 3986 3987 type int32_t = int32 3988 3989 type uint32_t = uint32 3990 3991 type int64_t = int64 3992 3993 type uint64_t = uint64 3994 3995 type u_int8_t = uint8 3996 type u_int16_t = uint16 3997 type u_int32_t = uint32 3998 type u_int64_t = uint64 3999 4000 type quad_t = int64 4001 type u_quad_t = uint64 4002 4003 type vaddr_t = uint64 4004 type paddr_t = uint64 4005 type vsize_t = uint64 4006 type psize_t = uint64 4007 4008 type blkcnt_t = int64 4009 type blksize_t = int32 4010 type caddr_t = uintptr 4011 type daddr32_t = int32 4012 type daddr_t = int64 4013 type dev_t = int32 4014 type fixpt_t = uint32 4015 type gid_t = uint32 4016 type id_t = uint32 4017 type ino_t = uint64 4018 type key_t = int64 4019 type mode_t = uint32 4020 type nlink_t = uint32 4021 type rlim_t = uint64 4022 type segsz_t = int32 4023 type uid_t = uint32 4024 type useconds_t = uint32 4025 type suseconds_t = int64 4026 type fsblkcnt_t = uint64 4027 type fsfilcnt_t = uint64 4028 4029 type clock_t = int64 4030 4031 type clockid_t = int32 4032 4033 type pid_t = int32 4034 4035 type ssize_t = int64 4036 4037 type time_t = int64 4038 4039 type timer_t = int32 4040 4041 type off_t = int64 4042 4043 type fpos_t = off_t 4044 4045 type __sbuf = struct { 4046 F_base uintptr 4047 F_size int32 4048 F__ccgo_pad1 [4]byte 4049 } 4050 4051 type __sFILE = struct { 4052 F_p uintptr 4053 F_r int32 4054 F_w int32 4055 F_flags int16 4056 F_file int16 4057 F__ccgo_pad1 [4]byte 4058 F_bf struct { 4059 F_base uintptr 4060 F_size int32 4061 F__ccgo_pad1 [4]byte 4062 } 4063 F_lbfsize int32 4064 F__ccgo_pad2 [4]byte 4065 F_cookie uintptr 4066 F_close uintptr 4067 F_read uintptr 4068 F_seek uintptr 4069 F_write uintptr 4070 F_ext struct { 4071 F_base uintptr 4072 F_size int32 4073 F__ccgo_pad1 [4]byte 4074 } 4075 F_up uintptr 4076 F_ur int32 4077 F_ubuf [3]uint8 4078 F_nbuf [1]uint8 4079 F_lb struct { 4080 F_base uintptr 4081 F_size int32 4082 F__ccgo_pad1 [4]byte 4083 } 4084 F_blksize int32 4085 F__ccgo_pad3 [4]byte 4086 F_offset fpos_t 4087 } 4088 4089 type FILE = __sFILE 4090 4091 type i64 = sqlite3_int64 4092 type u64 = sqlite3_uint64 4093 4094 type IdxColumn1 = struct { 4095 FzName uintptr 4096 FzColl uintptr 4097 FiPk int32 4098 F__ccgo_pad1 [4]byte 4099 } 4100 4101 type IdxColumn = IdxColumn1 4102 type IdxConstraint1 = struct { 4103 FzColl uintptr 4104 FbRange int32 4105 FiCol int32 4106 FbFlag int32 4107 FbDesc int32 4108 FpNext uintptr 4109 FpLink uintptr 4110 } 4111 4112 type IdxConstraint = IdxConstraint1 4113 type IdxScan1 = struct { 4114 FpTab uintptr 4115 FiDb int32 4116 F__ccgo_pad1 [4]byte 4117 Fcovering i64 4118 FpOrder uintptr 4119 FpEq uintptr 4120 FpRange uintptr 4121 FpNextScan uintptr 4122 } 4123 4124 type IdxScan = IdxScan1 4125 type IdxStatement1 = struct { 4126 FiId int32 4127 F__ccgo_pad1 [4]byte 4128 FzSql uintptr 4129 FzIdx uintptr 4130 FzEQP uintptr 4131 FpNext uintptr 4132 } 4133 4134 type IdxStatement = IdxStatement1 4135 type IdxTable1 = struct { 4136 FnCol int32 4137 F__ccgo_pad1 [4]byte 4138 FzName uintptr 4139 FaCol uintptr 4140 FpNext uintptr 4141 } 4142 4143 type IdxTable = IdxTable1 4144 type IdxWrite1 = struct { 4145 FpTab uintptr 4146 FeOp int32 4147 F__ccgo_pad1 [4]byte 4148 FpNext uintptr 4149 } 4150 4151 type IdxWrite = IdxWrite1 4152 4153 type IdxHashEntry1 = struct { 4154 FzKey uintptr 4155 FzVal uintptr 4156 FzVal2 uintptr 4157 FpHashNext uintptr 4158 FpNext uintptr 4159 } 4160 4161 type IdxHashEntry = IdxHashEntry1 4162 type IdxHash1 = struct { 4163 FpFirst uintptr 4164 FaHash [1023]uintptr 4165 } 4166 4167 type IdxHash = IdxHash1 4168 4169 func idxMalloc(tls *libc.TLS, pRc uintptr, nByte int32) uintptr { 4170 var pRet uintptr 4171 4172 pRet = sqlite3.Xsqlite3_malloc(tls, nByte) 4173 if pRet != 0 { 4174 libc.Xmemset(tls, pRet, 0, uint64(nByte)) 4175 } else { 4176 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4177 } 4178 return pRet 4179 } 4180 4181 func idxHashInit(tls *libc.TLS, pHash uintptr) { 4182 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 4183 } 4184 4185 func idxHashClear(tls *libc.TLS, pHash uintptr) { 4186 var i int32 4187 for i = 0; i < IDX_HASH_SIZE; i++ { 4188 var pEntry uintptr 4189 var pNext uintptr 4190 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(i)*8)); pEntry != 0; pEntry = pNext { 4191 pNext = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext 4192 sqlite3.Xsqlite3_free(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2) 4193 sqlite3.Xsqlite3_free(tls, pEntry) 4194 } 4195 } 4196 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 4197 } 4198 4199 func idxHashString(tls *libc.TLS, z uintptr, n int32) int32 { 4200 var ret uint32 = uint32(0) 4201 var i int32 4202 for i = 0; i < n; i++ { 4203 ret = ret + (ret<<3 + uint32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))))) 4204 } 4205 return int32(ret % uint32(IDX_HASH_SIZE)) 4206 } 4207 4208 func idxHashAdd(tls *libc.TLS, pRc uintptr, pHash uintptr, zKey uintptr, zVal uintptr) int32 { 4209 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 4210 var iHash int32 = idxHashString(tls, zKey, nKey) 4211 var nVal int32 = func() int32 { 4212 if zVal != 0 { 4213 return int32(libc.Xstrlen(tls, zVal)) 4214 } 4215 return 0 4216 }() 4217 var pEntry uintptr 4218 4219 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4220 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 4221 return 1 4222 } 4223 } 4224 pEntry = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxHashEntry{}))+uint64(nKey)+uint64(1)+uint64(nVal)+uint64(1))) 4225 if pEntry != 0 { 4226 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey = pEntry + 1*40 4227 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) 4228 if zVal != 0 { 4229 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey + uintptr(nKey+1) 4230 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, zVal, uint64(nVal)) 4231 } 4232 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) 4233 *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) = pEntry 4234 4235 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext = (*IdxHash)(unsafe.Pointer(pHash)).FpFirst 4236 (*IdxHash)(unsafe.Pointer(pHash)).FpFirst = pEntry 4237 } 4238 return 0 4239 } 4240 4241 func idxHashFind(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4242 var iHash int32 4243 var pEntry uintptr 4244 if nKey < 0 { 4245 nKey = int32(libc.Xstrlen(tls, zKey)) 4246 } 4247 iHash = idxHashString(tls, zKey, nKey) 4248 4249 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4250 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 4251 return pEntry 4252 } 4253 } 4254 return uintptr(0) 4255 } 4256 4257 func idxHashSearch(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4258 var pEntry uintptr = idxHashFind(tls, pHash, zKey, nKey) 4259 if pEntry != 0 { 4260 return (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal 4261 } 4262 return uintptr(0) 4263 } 4264 4265 func idxNewConstraint(tls *libc.TLS, pRc uintptr, zColl uintptr) uintptr { 4266 var pNew uintptr 4267 var nColl int32 = int32(libc.Xstrlen(tls, zColl)) 4268 4269 pNew = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxConstraint{}))*uint64(nColl)+uint64(1))) 4270 if pNew != 0 { 4271 (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl = pNew + 1*40 4272 libc.Xmemcpy(tls, (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl, zColl, uint64(nColl+1)) 4273 } 4274 return pNew 4275 } 4276 4277 func idxDatabaseError(tls *libc.TLS, db uintptr, pzErrmsg uintptr) { 4278 bp := tls.Alloc(8) 4279 defer tls.Free(8) 4280 4281 *(*uintptr)(unsafe.Pointer(pzErrmsg)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 4282 } 4283 4284 func idxPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zSql uintptr) int32 { 4285 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, ppStmt, uintptr(0)) 4286 if rc != SQLITE_OK { 4287 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 4288 idxDatabaseError(tls, db, pzErrmsg) 4289 } 4290 return rc 4291 } 4292 4293 func idxPrintfPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zFmt uintptr, va uintptr) int32 { 4294 var ap va_list 4295 _ = ap 4296 var rc int32 4297 var zSql uintptr 4298 ap = va 4299 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 4300 if zSql == uintptr(0) { 4301 rc = SQLITE_NOMEM 4302 } else { 4303 rc = idxPrepareStmt(tls, db, ppStmt, pzErrmsg, zSql) 4304 sqlite3.Xsqlite3_free(tls, zSql) 4305 } 4306 _ = ap 4307 return rc 4308 } 4309 4310 type ExpertVtab1 = struct { 4311 Fbase sqlite3_vtab 4312 FpTab uintptr 4313 FpExpert uintptr 4314 } 4315 4316 type ExpertVtab = ExpertVtab1 4317 4318 type ExpertCsr1 = struct { 4319 Fbase sqlite3_vtab_cursor 4320 FpData uintptr 4321 } 4322 4323 type ExpertCsr = ExpertCsr1 4324 4325 func expertDequote(tls *libc.TLS, zIn uintptr) uintptr { 4326 var n int32 = int32(libc.Xstrlen(tls, zIn)) 4327 var zRet uintptr = sqlite3.Xsqlite3_malloc(tls, n) 4328 4329 if zRet != 0 { 4330 var iOut int32 = 0 4331 var iIn int32 = 0 4332 for iIn = 1; iIn < n-1; iIn++ { 4333 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == '\'' { 4334 iIn++ 4335 } 4336 *(*int8)(unsafe.Pointer(zRet + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 4337 } 4338 *(*int8)(unsafe.Pointer(zRet + uintptr(iOut))) = int8(0) 4339 } 4340 4341 return zRet 4342 } 4343 4344 func expertConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 4345 bp := tls.Alloc(4) 4346 defer tls.Free(4) 4347 4348 var pExpert uintptr = pAux 4349 var p uintptr = uintptr(0) 4350 4351 if argc != 4 { 4352 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3, 0) 4353 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 4354 } else { 4355 var zCreateTable uintptr = expertDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 4356 if zCreateTable != 0 { 4357 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 4358 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4359 p = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertVtab{}))) 4360 } 4361 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4362 (*ExpertVtab)(unsafe.Pointer(p)).FpExpert = pExpert 4363 (*ExpertVtab)(unsafe.Pointer(p)).FpTab = (*sqlite3expert)(unsafe.Pointer(pExpert)).FpTable 4364 4365 } 4366 sqlite3.Xsqlite3_free(tls, zCreateTable) 4367 } else { 4368 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 4369 } 4370 } 4371 4372 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 4373 return *(*int32)(unsafe.Pointer(bp)) 4374 } 4375 4376 func expertDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 4377 var p uintptr = pVtab 4378 sqlite3.Xsqlite3_free(tls, p) 4379 return SQLITE_OK 4380 } 4381 4382 func expertBestIndex(tls *libc.TLS, pVtab uintptr, pIdxInfo uintptr) int32 { 4383 bp := tls.Alloc(4) 4384 defer tls.Free(4) 4385 4386 var p uintptr = pVtab 4387 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4388 var n int32 = 0 4389 var pScan uintptr 4390 var opmask int32 = SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | SQLITE_INDEX_CONSTRAINT_LE 4391 4392 pScan = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxScan{}))) 4393 if pScan != 0 { 4394 var i int32 4395 4396 (*IdxScan)(unsafe.Pointer(pScan)).FpTab = (*ExpertVtab)(unsafe.Pointer(p)).FpTab 4397 (*IdxScan)(unsafe.Pointer(pScan)).FpNextScan = (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan 4398 (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan = pScan 4399 4400 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 4401 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 4402 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 4403 (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn >= 0 && 4404 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)*24)).FiPk == 0 && 4405 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop)&opmask != 0 { 4406 var pNew uintptr 4407 var zColl uintptr = sqlite3.Xsqlite3_vtab_collation(tls, pIdxInfo, i) 4408 pNew = idxNewConstraint(tls, bp, zColl) 4409 if pNew != 0 { 4410 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn 4411 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 4412 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpEq 4413 (*IdxScan)(unsafe.Pointer(pScan)).FpEq = pNew 4414 } else { 4415 (*IdxConstraint)(unsafe.Pointer(pNew)).FbRange = 1 4416 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpRange 4417 (*IdxScan)(unsafe.Pointer(pScan)).FpRange = pNew 4418 } 4419 } 4420 n++ 4421 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = n 4422 } 4423 } 4424 4425 for i = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy - 1; i >= 0; i-- { 4426 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 4427 if iCol >= 0 { 4428 var pNew uintptr = idxNewConstraint(tls, bp, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr(iCol)*24)).FzColl) 4429 if pNew != 0 { 4430 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = iCol 4431 (*IdxConstraint)(unsafe.Pointer(pNew)).FbDesc = int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).Fdesc) 4432 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4433 (*IdxConstraint)(unsafe.Pointer(pNew)).FpLink = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4434 (*IdxScan)(unsafe.Pointer(pScan)).FpOrder = pNew 4435 n++ 4436 } 4437 } 4438 } 4439 } 4440 4441 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000.0 / float64(n+1) 4442 return *(*int32)(unsafe.Pointer(bp)) 4443 } 4444 4445 func expertUpdate(tls *libc.TLS, pVtab uintptr, nData int32, azData uintptr, pRowid uintptr) int32 { 4446 _ = pVtab 4447 _ = nData 4448 _ = azData 4449 _ = pRowid 4450 return SQLITE_OK 4451 } 4452 4453 func expertOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 4454 bp := tls.Alloc(4) 4455 defer tls.Free(4) 4456 4457 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4458 var pCsr uintptr 4459 _ = pVTab 4460 pCsr = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertCsr{}))) 4461 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 4462 return *(*int32)(unsafe.Pointer(bp)) 4463 } 4464 4465 func expertClose(tls *libc.TLS, cur uintptr) int32 { 4466 var pCsr uintptr = cur 4467 sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4468 sqlite3.Xsqlite3_free(tls, pCsr) 4469 return SQLITE_OK 4470 } 4471 4472 func expertEof(tls *libc.TLS, cur uintptr) int32 { 4473 var pCsr uintptr = cur 4474 return libc.Bool32((*ExpertCsr)(unsafe.Pointer(pCsr)).FpData == uintptr(0)) 4475 } 4476 4477 func expertNext(tls *libc.TLS, cur uintptr) int32 { 4478 var pCsr uintptr = cur 4479 var rc int32 = SQLITE_OK 4480 4481 rc = sqlite3.Xsqlite3_step(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4482 if rc != SQLITE_ROW { 4483 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4484 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4485 } else { 4486 rc = SQLITE_OK 4487 } 4488 4489 return rc 4490 } 4491 4492 func expertRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 4493 _ = cur 4494 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 4495 return SQLITE_OK 4496 } 4497 4498 func expertColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 4499 var pCsr uintptr = cur 4500 var pVal uintptr 4501 pVal = sqlite3.Xsqlite3_column_value(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData, i) 4502 if pVal != 0 { 4503 sqlite3.Xsqlite3_result_value(tls, ctx, pVal) 4504 } 4505 return SQLITE_OK 4506 } 4507 4508 func expertFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 4509 bp := tls.Alloc(8) 4510 defer tls.Free(8) 4511 4512 var pCsr uintptr = cur 4513 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 4514 var pExpert uintptr = (*ExpertVtab)(unsafe.Pointer(pVtab)).FpExpert 4515 var rc int32 4516 4517 _ = idxNum 4518 _ = idxStr 4519 _ = argc 4520 _ = argv 4521 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4522 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4523 if rc == SQLITE_OK { 4524 rc = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pExpert)).Fdb, pCsr+8, pVtab+16, 4525 ts+19, libc.VaList(bp, (*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(pVtab)).FpTab)).FzName)) 4526 } 4527 4528 if rc == SQLITE_OK { 4529 rc = expertNext(tls, cur) 4530 } 4531 return rc 4532 } 4533 4534 func idxRegisterVtab(tls *libc.TLS, p uintptr) int32 { 4535 return sqlite3.Xsqlite3_create_module(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+56, uintptr(unsafe.Pointer(&expertModule)), p) 4536 } 4537 4538 var expertModule = sqlite3_module{ 4539 FiVersion: 2, 4540 FxCreate: 0, 4541 FxConnect: 0, 4542 FxBestIndex: 0, 4543 FxDisconnect: 0, 4544 FxDestroy: 0, 4545 FxOpen: 0, 4546 FxClose: 0, 4547 FxFilter: 0, 4548 FxNext: 0, 4549 FxEof: 0, 4550 FxColumn: 0, 4551 FxRowid: 0, 4552 FxUpdate: 0, 4553 } 4554 4555 func idxFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr) { 4556 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 4557 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 4558 *(*int32)(unsafe.Pointer(pRc)) = rc 4559 } 4560 } 4561 4562 func idxGetTableInfo(tls *libc.TLS, db uintptr, zTab uintptr, ppOut uintptr, pzErrmsg uintptr) int32 { 4563 bp := tls.Alloc(40) 4564 defer tls.Free(40) 4565 4566 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 4567 var nCol int32 = 0 4568 var nTab int32 4569 var nByte int32 4570 var pNew uintptr = uintptr(0) 4571 4572 var rc2 int32 4573 var pCsr uintptr = uintptr(0) 4574 var nPk int32 = 0 4575 4576 *(*uintptr)(unsafe.Pointer(ppOut)) = uintptr(0) 4577 if zTab == uintptr(0) { 4578 return SQLITE_ERROR 4579 } 4580 nTab = int32(libc.Xstrlen(tls, zTab)) 4581 nByte = int32(uint64(unsafe.Sizeof(IdxTable{})) + uint64(nTab) + uint64(1)) 4582 *(*int32)(unsafe.Pointer(bp + 24)) = idxPrintfPrepareStmt(tls, db, bp+8, pzErrmsg, ts+63, libc.VaList(bp, zTab)) 4583 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 4584 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 4585 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 4586 if zCol == uintptr(0) { 4587 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ERROR 4588 break 4589 } 4590 nByte = nByte + (1 + int32(libc.Xstrlen(tls, zCol))) 4591 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 4592 db, ts+85, zTab, zCol, uintptr(0), bp+16, uintptr(0), uintptr(0), uintptr(0)) 4593 if *(*uintptr)(unsafe.Pointer(bp + 16)) == uintptr(0) { 4594 *(*uintptr)(unsafe.Pointer(bp + 16)) = ts + 90 4595 } 4596 nByte = nByte + (1 + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 16))))) 4597 nCol++ 4598 nPk = nPk + libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) > 0) 4599 } 4600 rc2 = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 4601 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4602 *(*int32)(unsafe.Pointer(bp + 24)) = rc2 4603 } 4604 4605 nByte = int32(uint64(nByte) + uint64(unsafe.Sizeof(IdxColumn{}))*uint64(nCol)) 4606 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4607 pNew = idxMalloc(tls, bp+24, nByte) 4608 } 4609 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4610 (*IdxTable)(unsafe.Pointer(pNew)).FaCol = pNew + 1*32 4611 (*IdxTable)(unsafe.Pointer(pNew)).FnCol = nCol 4612 pCsr = (*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24 4613 } 4614 4615 nCol = 0 4616 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 4617 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 4618 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 4619 var nCopy int32 4620 if zCol == uintptr(0) { 4621 continue 4622 } 4623 nCopy = int32(libc.Xstrlen(tls, zCol)) + 1 4624 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzName = pCsr 4625 (*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) 4626 libc.Xmemcpy(tls, pCsr, zCol, uint64(nCopy)) 4627 pCsr += uintptr(nCopy) 4628 4629 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 4630 db, ts+85, zTab, zCol, uintptr(0), bp+32, uintptr(0), uintptr(0), uintptr(0)) 4631 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4632 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 4633 *(*uintptr)(unsafe.Pointer(bp + 32)) = ts + 90 4634 } 4635 nCopy = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 32)))) + 1 4636 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzColl = pCsr 4637 libc.Xmemcpy(tls, pCsr, *(*uintptr)(unsafe.Pointer(bp + 32)), uint64(nCopy)) 4638 pCsr += uintptr(nCopy) 4639 } 4640 4641 nCol++ 4642 } 4643 idxFinalize(tls, bp+24, *(*uintptr)(unsafe.Pointer(bp + 8))) 4644 4645 if *(*int32)(unsafe.Pointer(bp + 24)) != SQLITE_OK { 4646 sqlite3.Xsqlite3_free(tls, pNew) 4647 pNew = uintptr(0) 4648 } else if pNew != uintptr(0) { 4649 (*IdxTable)(unsafe.Pointer(pNew)).FzName = pCsr 4650 if (*IdxTable)(unsafe.Pointer(pNew)).FzName != uintptr(0) { 4651 libc.Xmemcpy(tls, (*IdxTable)(unsafe.Pointer(pNew)).FzName, zTab, uint64(nTab+1)) 4652 } 4653 } 4654 4655 *(*uintptr)(unsafe.Pointer(ppOut)) = pNew 4656 return *(*int32)(unsafe.Pointer(bp + 24)) 4657 } 4658 4659 func idxAppendText(tls *libc.TLS, pRc uintptr, zIn uintptr, zFmt uintptr, va uintptr) uintptr { 4660 var ap va_list 4661 _ = ap 4662 var zAppend uintptr = uintptr(0) 4663 var zRet uintptr = uintptr(0) 4664 var nIn int32 4665 if zIn != 0 { 4666 nIn = int32(libc.Xstrlen(tls, zIn)) 4667 } else { 4668 nIn = 0 4669 } 4670 var nAppend int32 = 0 4671 ap = va 4672 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 4673 zAppend = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 4674 if zAppend != 0 { 4675 nAppend = int32(libc.Xstrlen(tls, zAppend)) 4676 zRet = sqlite3.Xsqlite3_malloc(tls, nIn+nAppend+1) 4677 } 4678 if zAppend != 0 && zRet != 0 { 4679 if nIn != 0 { 4680 libc.Xmemcpy(tls, zRet, zIn, uint64(nIn)) 4681 } 4682 libc.Xmemcpy(tls, zRet+uintptr(nIn), zAppend, uint64(nAppend+1)) 4683 } else { 4684 sqlite3.Xsqlite3_free(tls, zRet) 4685 zRet = uintptr(0) 4686 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4687 } 4688 sqlite3.Xsqlite3_free(tls, zAppend) 4689 sqlite3.Xsqlite3_free(tls, zIn) 4690 } 4691 _ = ap 4692 return zRet 4693 } 4694 4695 func idxIdentifierRequiresQuotes(tls *libc.TLS, zId uintptr) int32 { 4696 var i int32 4697 for i = 0; *(*int8)(unsafe.Pointer(zId + uintptr(i))) != 0; i++ { 4698 if !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) == '_') && 4699 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= '0' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= '9') && 4700 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'a' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'z') && 4701 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'A' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'Z') { 4702 return 1 4703 } 4704 } 4705 return 0 4706 } 4707 4708 func idxAppendColDefn(tls *libc.TLS, pRc uintptr, zIn uintptr, pTab uintptr, pCons uintptr) uintptr { 4709 bp := tls.Alloc(32) 4710 defer tls.Free(32) 4711 4712 var zRet uintptr = zIn 4713 var p uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FaCol + uintptr((*IdxConstraint)(unsafe.Pointer(pCons)).FiCol)*24 4714 if zRet != 0 { 4715 zRet = idxAppendText(tls, pRc, zRet, ts+97, 0) 4716 } 4717 4718 if idxIdentifierRequiresQuotes(tls, (*IdxColumn)(unsafe.Pointer(p)).FzName) != 0 { 4719 zRet = idxAppendText(tls, pRc, zRet, ts+100, libc.VaList(bp, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 4720 } else { 4721 zRet = idxAppendText(tls, pRc, zRet, ts, libc.VaList(bp+8, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 4722 } 4723 4724 if sqlite3.Xsqlite3_stricmp(tls, (*IdxColumn)(unsafe.Pointer(p)).FzColl, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 4725 if idxIdentifierRequiresQuotes(tls, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 4726 zRet = idxAppendText(tls, pRc, zRet, ts+103, libc.VaList(bp+16, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 4727 } else { 4728 zRet = idxAppendText(tls, pRc, zRet, ts+115, libc.VaList(bp+24, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 4729 } 4730 } 4731 4732 if (*IdxConstraint)(unsafe.Pointer(pCons)).FbDesc != 0 { 4733 zRet = idxAppendText(tls, pRc, zRet, ts+127, 0) 4734 } 4735 return zRet 4736 } 4737 4738 func idxFindCompatible(tls *libc.TLS, pRc uintptr, dbm uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 4739 bp := tls.Alloc(36) 4740 defer tls.Free(36) 4741 4742 var zTbl uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 4743 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 4744 var pIter uintptr 4745 var nEq int32 = 0 4746 4747 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4748 nEq++ 4749 } 4750 4751 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+16, uintptr(0), ts+133, libc.VaList(bp, zTbl)) 4752 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW { 4753 var bMatch int32 = 1 4754 var pT uintptr = pTail 4755 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 4756 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 4757 if zIdx == uintptr(0) { 4758 continue 4759 } 4760 4761 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4762 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 0 4763 } 4764 4765 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+24, uintptr(0), ts+154, libc.VaList(bp+8, zIdx)) 4766 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW { 4767 var iIdx int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 4768 var iCol int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 4769 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 4) 4770 4771 if iIdx < nEq { 4772 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4773 if (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag != 0 { 4774 continue 4775 } 4776 if (*IdxConstraint)(unsafe.Pointer(pIter)).FiCol != iCol { 4777 continue 4778 } 4779 if sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pIter)).FzColl, zColl) != 0 { 4780 continue 4781 } 4782 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 1 4783 break 4784 } 4785 if pIter == uintptr(0) { 4786 bMatch = 0 4787 break 4788 } 4789 } else { 4790 if pT != 0 { 4791 if (*IdxConstraint)(unsafe.Pointer(pT)).FiCol != iCol || sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pT)).FzColl, zColl) != 0 { 4792 bMatch = 0 4793 break 4794 } 4795 pT = (*IdxConstraint)(unsafe.Pointer(pT)).FpLink 4796 } 4797 } 4798 } 4799 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 24))) 4800 4801 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && bMatch != 0 { 4802 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 4803 return 1 4804 } 4805 } 4806 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 16))) 4807 4808 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 32)) 4809 return 0 4810 } 4811 4812 func countNonzeros(tls *libc.TLS, pCount uintptr, nc int32, azResults uintptr, azColumns uintptr) int32 { 4813 _ = azColumns 4814 if nc > 0 && (int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults))))) != '0' || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults)) + 1))) != 0) { 4815 *(*int32)(unsafe.Pointer(pCount)) += 1 4816 } 4817 return 0 4818 } 4819 4820 func idxCreateFromCons(tls *libc.TLS, p uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 4821 bp := tls.Alloc(56) 4822 defer tls.Free(56) 4823 4824 var dbm uintptr = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 4825 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_OK 4826 if (pEq != 0 || pTail != 0) && 0 == idxFindCompatible(tls, bp+48, dbm, pScan, pEq, pTail) { 4827 var pTab uintptr = (*IdxScan)(unsafe.Pointer(pScan)).FpTab 4828 var zCols uintptr = uintptr(0) 4829 var zIdx uintptr = uintptr(0) 4830 var pCons uintptr 4831 var h uint32 = uint32(0) 4832 var zFmt uintptr 4833 4834 for pCons = pEq; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 4835 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 4836 } 4837 for pCons = pTail; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 4838 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 4839 } 4840 4841 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 4842 var zTable uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 4843 var quoteTable int32 = idxIdentifierRequiresQuotes(tls, zTable) 4844 var zName uintptr = uintptr(0) 4845 var collisions int32 = 0 4846 for __ccgo := true; __ccgo; __ccgo = collisions < 50 && zName != uintptr(0) { 4847 var zFind uintptr 4848 for *(*int32)(unsafe.Pointer(bp + 52)) = 0; *(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))) != 0; *(*int32)(unsafe.Pointer(bp + 52))++ { 4849 h = h + (h<<3 + uint32(*(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))))) 4850 } 4851 sqlite3.Xsqlite3_free(tls, zName) 4852 zName = sqlite3.Xsqlite3_mprintf(tls, ts+176, libc.VaList(bp, zTable, h)) 4853 if zName == uintptr(0) { 4854 break 4855 } 4856 4857 zFmt = ts + 188 4858 zFind = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+16, zName)) 4859 *(*int32)(unsafe.Pointer(bp + 52)) = 0 4860 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zFind, *(*uintptr)(unsafe.Pointer(&struct { 4861 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 4862 }{countNonzeros})), bp+52, uintptr(0)) 4863 4864 sqlite3.Xsqlite3_free(tls, zFind) 4865 if *(*int32)(unsafe.Pointer(bp + 52)) == 0 { 4866 collisions = 0 4867 break 4868 } 4869 collisions++ 4870 } 4871 if collisions != 0 { 4872 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 4873 } else if zName == uintptr(0) { 4874 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 4875 } else { 4876 if quoteTable != 0 { 4877 zFmt = ts + 274 4878 } else { 4879 zFmt = ts + 304 4880 } 4881 zIdx = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+24, zName, zTable, zCols)) 4882 if !(zIdx != 0) { 4883 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 4884 } else { 4885 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zIdx, uintptr(0), uintptr(0), (*sqlite3expert)(unsafe.Pointer(p)).FpzErrmsg) 4886 if *(*int32)(unsafe.Pointer(bp + 48)) != SQLITE_OK { 4887 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 4888 } else { 4889 idxHashAdd(tls, bp+48, p+88, zName, zIdx) 4890 } 4891 } 4892 sqlite3.Xsqlite3_free(tls, zName) 4893 sqlite3.Xsqlite3_free(tls, zIdx) 4894 } 4895 } 4896 4897 sqlite3.Xsqlite3_free(tls, zCols) 4898 } 4899 return *(*int32)(unsafe.Pointer(bp + 48)) 4900 } 4901 4902 func idxFindConstraint(tls *libc.TLS, pList uintptr, p uintptr) int32 { 4903 var pCmp uintptr 4904 for pCmp = pList; pCmp != 0; pCmp = (*IdxConstraint)(unsafe.Pointer(pCmp)).FpLink { 4905 if (*IdxConstraint)(unsafe.Pointer(p)).FiCol == (*IdxConstraint)(unsafe.Pointer(pCmp)).FiCol { 4906 return 1 4907 } 4908 } 4909 return 0 4910 } 4911 4912 func idxCreateFromWhere(tls *libc.TLS, p uintptr, pScan uintptr, pTail uintptr) int32 { 4913 var p1 uintptr = uintptr(0) 4914 var pCon uintptr 4915 var rc int32 4916 4917 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpEq; pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 4918 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 4919 (*IdxConstraint)(unsafe.Pointer(pCon)).FpLink = p1 4920 p1 = pCon 4921 } 4922 } 4923 4924 rc = idxCreateFromCons(tls, p, pScan, p1, pTail) 4925 4926 if pTail == uintptr(0) { 4927 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpRange; rc == SQLITE_OK && pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 4928 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 4929 rc = idxCreateFromCons(tls, p, pScan, p1, pCon) 4930 } 4931 } 4932 } 4933 4934 return rc 4935 } 4936 4937 func idxCreateCandidates(tls *libc.TLS, p uintptr) int32 { 4938 var rc int32 = SQLITE_OK 4939 var pIter uintptr 4940 4941 for pIter = (*sqlite3expert)(unsafe.Pointer(p)).FpScan; pIter != 0 && rc == SQLITE_OK; pIter = (*IdxScan)(unsafe.Pointer(pIter)).FpNextScan { 4942 rc = idxCreateFromWhere(tls, p, pIter, uintptr(0)) 4943 if rc == SQLITE_OK && (*IdxScan)(unsafe.Pointer(pIter)).FpOrder != 0 { 4944 rc = idxCreateFromWhere(tls, p, pIter, (*IdxScan)(unsafe.Pointer(pIter)).FpOrder) 4945 } 4946 } 4947 4948 return rc 4949 } 4950 4951 func idxConstraintFree(tls *libc.TLS, pConstraint uintptr) { 4952 var pNext uintptr 4953 var p uintptr 4954 4955 for p = pConstraint; p != 0; p = pNext { 4956 pNext = (*IdxConstraint)(unsafe.Pointer(p)).FpNext 4957 sqlite3.Xsqlite3_free(tls, p) 4958 } 4959 } 4960 4961 func idxScanFree(tls *libc.TLS, pScan uintptr, pLast uintptr) { 4962 var p uintptr 4963 var pNext uintptr 4964 for p = pScan; p != pLast; p = pNext { 4965 pNext = (*IdxScan)(unsafe.Pointer(p)).FpNextScan 4966 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpOrder) 4967 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpEq) 4968 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpRange) 4969 sqlite3.Xsqlite3_free(tls, p) 4970 } 4971 } 4972 4973 func idxStatementFree(tls *libc.TLS, pStatement uintptr, pLast uintptr) { 4974 var p uintptr 4975 var pNext uintptr 4976 for p = pStatement; p != pLast; p = pNext { 4977 pNext = (*IdxStatement)(unsafe.Pointer(p)).FpNext 4978 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzEQP) 4979 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzIdx) 4980 sqlite3.Xsqlite3_free(tls, p) 4981 } 4982 } 4983 4984 func idxTableFree(tls *libc.TLS, pTab uintptr) { 4985 var pIter uintptr 4986 var pNext uintptr 4987 for pIter = pTab; pIter != 0; pIter = pNext { 4988 pNext = (*IdxTable)(unsafe.Pointer(pIter)).FpNext 4989 sqlite3.Xsqlite3_free(tls, pIter) 4990 } 4991 } 4992 4993 func idxWriteFree(tls *libc.TLS, pTab uintptr) { 4994 var pIter uintptr 4995 var pNext uintptr 4996 for pIter = pTab; pIter != 0; pIter = pNext { 4997 pNext = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext 4998 sqlite3.Xsqlite3_free(tls, pIter) 4999 } 5000 } 5001 5002 func idxFindIndexes(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5003 bp := tls.Alloc(8228) 5004 defer tls.Free(8228) 5005 5006 var pStmt uintptr 5007 var dbm uintptr 5008 5009 var zSql uintptr 5010 var nIdx int32 5011 var zIdx uintptr 5012 5013 var zDetail uintptr 5014 var nDetail int32 5015 var i int32 5016 var pEntry uintptr 5017 5018 dbm = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5019 *(*int32)(unsafe.Pointer(bp + 8224)) = SQLITE_OK 5020 idxHashInit(tls, bp+24) 5021 5022 pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5023 __1: 5024 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && pStmt != 0) { 5025 goto __3 5026 } 5027 *(*uintptr)(unsafe.Pointer(bp + 8216)) = uintptr(0) 5028 idxHashClear(tls, bp+24) 5029 *(*int32)(unsafe.Pointer(bp + 8224)) = idxPrintfPrepareStmt(tls, dbm, bp+8216, pzErr, 5030 ts+330, libc.VaList(bp, (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql)) 5031 __4: 5032 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8216))) == SQLITE_ROW) { 5033 goto __5 5034 } 5035 5036 zDetail = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8216)), 3) 5037 5038 if !!(zDetail != 0) { 5039 goto __6 5040 } 5041 goto __4 5042 __6: 5043 ; 5044 nDetail = int32(libc.Xstrlen(tls, zDetail)) 5045 5046 i = 0 5047 __7: 5048 if !(i < nDetail) { 5049 goto __9 5050 } 5051 zIdx = uintptr(0) 5052 if !(i+13 < nDetail && libc.Xmemcmp(tls, zDetail+uintptr(i), ts+352, uint64(13)) == 0) { 5053 goto __10 5054 } 5055 zIdx = zDetail + uintptr(i+13) 5056 goto __11 5057 __10: 5058 if !(i+22 < nDetail && 5059 libc.Xmemcmp(tls, zDetail+uintptr(i), ts+366, uint64(22)) == 0) { 5060 goto __12 5061 } 5062 zIdx = zDetail + uintptr(i+22) 5063 __12: 5064 ; 5065 __11: 5066 ; 5067 if !(zIdx != 0) { 5068 goto __13 5069 } 5070 nIdx = 0 5071 __14: 5072 if !(int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != 0 && (int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != ' ' || int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx+1)))) != '(')) { 5073 goto __15 5074 } 5075 nIdx++ 5076 goto __14 5077 __15: 5078 ; 5079 zSql = idxHashSearch(tls, p+88, zIdx, nIdx) 5080 if !(zSql != 0) { 5081 goto __16 5082 } 5083 idxHashAdd(tls, bp+8224, bp+24, zSql, uintptr(0)) 5084 if !(*(*int32)(unsafe.Pointer(bp + 8224)) != 0) { 5085 goto __17 5086 } 5087 goto find_indexes_out 5088 __17: 5089 ; 5090 __16: 5091 ; 5092 goto __9 5093 __13: 5094 ; 5095 goto __8 5096 __8: 5097 i++ 5098 goto __7 5099 goto __9 5100 __9: 5101 ; 5102 if !(int32(*(*int8)(unsafe.Pointer(zDetail))) != '-') { 5103 goto __18 5104 } 5105 (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP = idxAppendText(tls, bp+8224, (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP, ts+389, libc.VaList(bp+8, zDetail)) 5106 __18: 5107 ; 5108 goto __4 5109 __5: 5110 ; 5111 pEntry = (*IdxHash)(unsafe.Pointer(bp + 24)).FpFirst 5112 __19: 5113 if !(pEntry != 0) { 5114 goto __21 5115 } 5116 (*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)) 5117 goto __20 5118 __20: 5119 pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext 5120 goto __19 5121 goto __21 5122 __21: 5123 ; 5124 idxFinalize(tls, bp+8224, *(*uintptr)(unsafe.Pointer(bp + 8216))) 5125 goto __2 5126 __2: 5127 pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext 5128 goto __1 5129 goto __3 5130 __3: 5131 ; 5132 find_indexes_out: 5133 idxHashClear(tls, bp+24) 5134 return *(*int32)(unsafe.Pointer(bp + 8224)) 5135 } 5136 5137 func idxAuthCallback(tls *libc.TLS, pCtx uintptr, eOp int32, z3 uintptr, z4 uintptr, zDb uintptr, zTrigger uintptr) int32 { 5138 bp := tls.Alloc(4) 5139 defer tls.Free(4) 5140 5141 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5142 _ = z4 5143 _ = zTrigger 5144 if eOp == SQLITE_INSERT || eOp == SQLITE_UPDATE || eOp == SQLITE_DELETE { 5145 if sqlite3.Xsqlite3_stricmp(tls, zDb, ts+85) == 0 { 5146 var p uintptr = pCtx 5147 var pTab uintptr 5148 for pTab = (*sqlite3expert)(unsafe.Pointer(p)).FpTable; pTab != 0; pTab = (*IdxTable)(unsafe.Pointer(pTab)).FpNext { 5149 if 0 == sqlite3.Xsqlite3_stricmp(tls, z3, (*IdxTable)(unsafe.Pointer(pTab)).FzName) { 5150 break 5151 } 5152 } 5153 if pTab != 0 { 5154 var pWrite uintptr 5155 for pWrite = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite; pWrite != 0; pWrite = (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext { 5156 if (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab == pTab && (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp == eOp { 5157 break 5158 } 5159 } 5160 if pWrite == uintptr(0) { 5161 pWrite = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxWrite{}))) 5162 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5163 (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab = pTab 5164 (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp = eOp 5165 (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5166 (*sqlite3expert)(unsafe.Pointer(p)).FpWrite = pWrite 5167 } 5168 } 5169 } 5170 } 5171 } 5172 return *(*int32)(unsafe.Pointer(bp)) 5173 } 5174 5175 func idxProcessOneTrigger(tls *libc.TLS, p uintptr, pWrite uintptr, pzErr uintptr) int32 { 5176 bp := tls.Alloc(104) 5177 defer tls.Free(104) 5178 5179 var pTab uintptr = (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab 5180 var zTab uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FzName 5181 var zSql uintptr = ts + 398 5182 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 5183 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_OK 5184 var zWrite uintptr = uintptr(0) 5185 5186 *(*int32)(unsafe.Pointer(bp + 88)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+80, pzErr, zSql, libc.VaList(bp, zTab, zTab)) 5187 for *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) { 5188 var zCreate uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 5189 if zCreate == uintptr(0) { 5190 continue 5191 } 5192 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zCreate, uintptr(0), uintptr(0), pzErr) 5193 } 5194 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 80))) 5195 5196 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5197 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+524, libc.VaList(bp+16, zTab, zInt)) 5198 if z == uintptr(0) { 5199 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 5200 } else { 5201 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, z, uintptr(0), uintptr(0), pzErr) 5202 sqlite3.Xsqlite3_free(tls, z) 5203 } 5204 } 5205 5206 switch (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp { 5207 case SQLITE_INSERT: 5208 { 5209 var i int32 5210 zWrite = idxAppendText(tls, bp+88, zWrite, ts+557, libc.VaList(bp+32, zInt)) 5211 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5212 zWrite = idxAppendText(tls, bp+88, zWrite, ts+580, libc.VaList(bp+40, func() uintptr { 5213 if i == 0 { 5214 return ts + 584 5215 } 5216 return ts + 97 5217 }())) 5218 } 5219 zWrite = idxAppendText(tls, bp+88, zWrite, ts+585, 0) 5220 break 5221 5222 } 5223 case SQLITE_UPDATE: 5224 { 5225 var i int32 5226 zWrite = idxAppendText(tls, bp+88, zWrite, ts+587, libc.VaList(bp+48, zInt)) 5227 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5228 zWrite = idxAppendText(tls, bp+88, zWrite, ts+602, libc.VaList(bp+56, func() uintptr { 5229 if i == 0 { 5230 return ts + 584 5231 } 5232 return ts + 97 5233 }(), 5234 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pTab)).FaCol+uintptr(i)*24)).FzName)) 5235 } 5236 break 5237 5238 } 5239 default: 5240 { 5241 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5242 zWrite = sqlite3.Xsqlite3_mprintf(tls, ts+609, libc.VaList(bp+72, zInt)) 5243 if zWrite == uintptr(0) { 5244 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 5245 } 5246 } 5247 5248 } 5249 } 5250 5251 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5252 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 5253 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zWrite, -1, bp+96, uintptr(0)) 5254 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 96))) 5255 if *(*int32)(unsafe.Pointer(bp + 88)) != SQLITE_OK { 5256 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 5257 } 5258 } 5259 sqlite3.Xsqlite3_free(tls, zWrite) 5260 5261 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5262 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zDrop, uintptr(0), uintptr(0), pzErr) 5263 } 5264 5265 return *(*int32)(unsafe.Pointer(bp + 88)) 5266 } 5267 5268 var zInt uintptr = ts + 624 5269 var zDrop uintptr = ts + 662 5270 5271 func idxProcessTriggers(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5272 var rc int32 = SQLITE_OK 5273 var pEnd uintptr = uintptr(0) 5274 var pFirst uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5275 5276 for rc == SQLITE_OK && pFirst != pEnd { 5277 var pIter uintptr 5278 for pIter = pFirst; rc == SQLITE_OK && pIter != pEnd; pIter = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext { 5279 rc = idxProcessOneTrigger(tls, p, pIter, pzErr) 5280 } 5281 pEnd = pFirst 5282 pFirst = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5283 } 5284 5285 return rc 5286 } 5287 5288 func idxCreateVtabSchema(tls *libc.TLS, p uintptr, pzErrmsg uintptr) int32 { 5289 bp := tls.Alloc(60) 5290 defer tls.Free(60) 5291 5292 *(*int32)(unsafe.Pointer(bp + 56)) = idxRegisterVtab(tls, p) 5293 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 5294 5295 *(*int32)(unsafe.Pointer(bp + 56)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+40, pzErrmsg, 5296 ts+711) 5297 for *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 5298 var zType uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 5299 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 5300 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 5301 5302 if zType == uintptr(0) || zName == uintptr(0) { 5303 continue 5304 } 5305 if int32(*(*int8)(unsafe.Pointer(zType))) == 'v' || int32(*(*int8)(unsafe.Pointer(zType + 1))) == 'r' { 5306 if zSql != 0 { 5307 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), pzErrmsg) 5308 } 5309 } else { 5310 *(*int32)(unsafe.Pointer(bp + 56)) = idxGetTableInfo(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, zName, bp+48, pzErrmsg) 5311 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 5312 var i int32 5313 var zInner uintptr = uintptr(0) 5314 var zOuter uintptr = uintptr(0) 5315 (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpTable 5316 (*sqlite3expert)(unsafe.Pointer(p)).FpTable = *(*uintptr)(unsafe.Pointer(bp + 48)) 5317 5318 zInner = idxAppendText(tls, bp+56, uintptr(0), ts+979, 0) 5319 for i = 0; i < (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FnCol; i++ { 5320 zInner = idxAppendText(tls, bp+56, zInner, ts+995, 5321 libc.VaList(bp, func() uintptr { 5322 if i == 0 { 5323 return ts + 584 5324 } 5325 return ts + 97 5326 }(), (*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)) 5327 } 5328 zInner = idxAppendText(tls, bp+56, zInner, ts+585, 0) 5329 5330 zOuter = idxAppendText(tls, bp+56, uintptr(0), 5331 ts+1011, libc.VaList(bp+24, zName, zInner)) 5332 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 5333 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zOuter, uintptr(0), uintptr(0), pzErrmsg) 5334 } 5335 sqlite3.Xsqlite3_free(tls, zInner) 5336 sqlite3.Xsqlite3_free(tls, zOuter) 5337 } 5338 } 5339 } 5340 idxFinalize(tls, bp+56, *(*uintptr)(unsafe.Pointer(bp + 40))) 5341 return *(*int32)(unsafe.Pointer(bp + 56)) 5342 } 5343 5344 type IdxSampleCtx = struct { 5345 FiTarget int32 5346 F__ccgo_pad1 [4]byte 5347 Ftarget float64 5348 FnRow float64 5349 FnRet float64 5350 } 5351 5352 func idxSampleFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5353 bp := tls.Alloc(2) 5354 defer tls.Free(2) 5355 5356 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5357 var bRet int32 5358 5359 _ = argv 5360 5361 if (*IdxSampleCtx)(unsafe.Pointer(p)).FnRow == 0.0 { 5362 bRet = 1 5363 } else { 5364 bRet = libc.Bool32((*IdxSampleCtx)(unsafe.Pointer(p)).FnRet/(*IdxSampleCtx)(unsafe.Pointer(p)).FnRow <= (*IdxSampleCtx)(unsafe.Pointer(p)).Ftarget) 5365 if bRet == 0 { 5366 sqlite3.Xsqlite3_randomness(tls, 2, bp) 5367 bRet = libc.Bool32(int32(*(*uint16)(unsafe.Pointer(bp)))%100 <= (*IdxSampleCtx)(unsafe.Pointer(p)).FiTarget) 5368 } 5369 } 5370 5371 sqlite3.Xsqlite3_result_int(tls, pCtx, bRet) 5372 *(*float64)(unsafe.Pointer(p + 16)) += 1.0 5373 *(*float64)(unsafe.Pointer(p + 24)) += float64(bRet) 5374 } 5375 5376 type IdxRemCtx = struct { 5377 FnSlot int32 5378 F__ccgo_pad1 [4]byte 5379 FaSlot [1]struct { 5380 FeType int32 5381 F__ccgo_pad1 [4]byte 5382 FiVal i64 5383 FrVal float64 5384 FnByte int32 5385 Fn int32 5386 Fz uintptr 5387 } 5388 } 5389 5390 type IdxRemSlot = struct { 5391 FeType int32 5392 F__ccgo_pad1 [4]byte 5393 FiVal i64 5394 FrVal float64 5395 FnByte int32 5396 Fn int32 5397 Fz uintptr 5398 } 5399 5400 func idxRemFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5401 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5402 var pSlot uintptr 5403 var iSlot int32 5404 5405 iSlot = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 5406 5407 pSlot = p + 8 + uintptr(iSlot)*40 5408 5409 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5410 case SQLITE_NULL: 5411 break 5412 5413 case SQLITE_INTEGER: 5414 sqlite3.Xsqlite3_result_int64(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal) 5415 break 5416 5417 case SQLITE_FLOAT: 5418 sqlite3.Xsqlite3_result_double(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal) 5419 break 5420 5421 case SQLITE_BLOB: 5422 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5423 break 5424 5425 case SQLITE_TEXT: 5426 sqlite3.Xsqlite3_result_text(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5427 break 5428 } 5429 5430 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5431 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5432 case SQLITE_NULL: 5433 break 5434 5435 case SQLITE_INTEGER: 5436 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5437 break 5438 5439 case SQLITE_FLOAT: 5440 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5441 break 5442 5443 case SQLITE_BLOB: 5444 fallthrough 5445 case SQLITE_TEXT: 5446 { 5447 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5448 var pData uintptr = uintptr(0) 5449 if nByte > (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte { 5450 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, nByte*2) 5451 if zNew == uintptr(0) { 5452 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 5453 return 5454 } 5455 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte = nByte * 2 5456 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz = zNew 5457 } 5458 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn = nByte 5459 if (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType == SQLITE_BLOB { 5460 pData = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5461 if pData != 0 { 5462 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 5463 } 5464 } else { 5465 pData = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5466 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 5467 } 5468 break 5469 5470 } 5471 } 5472 } 5473 5474 func idxLargestIndex(tls *libc.TLS, db uintptr, pnMax uintptr, pzErr uintptr) int32 { 5475 bp := tls.Alloc(12) 5476 defer tls.Free(12) 5477 5478 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OK 5479 var zMax uintptr = ts + 1052 5480 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 5481 5482 *(*int32)(unsafe.Pointer(pnMax)) = 0 5483 *(*int32)(unsafe.Pointer(bp + 8)) = idxPrepareStmt(tls, db, bp, pzErr, zMax) 5484 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 5485 *(*int32)(unsafe.Pointer(pnMax)) = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) + 1 5486 } 5487 idxFinalize(tls, bp+8, *(*uintptr)(unsafe.Pointer(bp))) 5488 5489 return *(*int32)(unsafe.Pointer(bp + 8)) 5490 } 5491 5492 func idxPopulateOneStat1(tls *libc.TLS, p uintptr, pIndexXInfo uintptr, pWriteStat uintptr, zTab uintptr, zIdx uintptr, pzErr uintptr) int32 { 5493 bp := tls.Alloc(128) 5494 defer tls.Free(128) 5495 5496 var zCols uintptr = uintptr(0) 5497 var zOrder uintptr = uintptr(0) 5498 var zQuery uintptr = uintptr(0) 5499 var nCol int32 = 0 5500 var i int32 5501 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 5502 var aStat uintptr = uintptr(0) 5503 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_OK 5504 5505 sqlite3.Xsqlite3_bind_text(tls, pIndexXInfo, 1, zIdx, -1, uintptr(0)) 5506 for SQLITE_OK == *(*int32)(unsafe.Pointer(bp + 112)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pIndexXInfo) { 5507 var zComma uintptr 5508 if zCols == uintptr(0) { 5509 zComma = ts + 584 5510 } else { 5511 zComma = ts + 97 5512 } 5513 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 0) 5514 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 1) 5515 zCols = idxAppendText(tls, bp+112, zCols, 5516 ts+1189, libc.VaList(bp, zComma, zName, nCol, zName, zColl)) 5517 zOrder = idxAppendText(tls, bp+112, zOrder, ts+1224, libc.VaList(bp+40, zComma, libc.PreIncInt32(&nCol, 1))) 5518 } 5519 sqlite3.Xsqlite3_reset(tls, pIndexXInfo) 5520 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5521 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5522 zQuery = sqlite3.Xsqlite3_mprintf(tls, 5523 ts+1229, libc.VaList(bp+56, zCols, zTab, zOrder)) 5524 } else { 5525 zQuery = sqlite3.Xsqlite3_mprintf(tls, 5526 ts+1261, libc.VaList(bp+80, zCols, zOrder)) 5527 } 5528 } 5529 sqlite3.Xsqlite3_free(tls, zCols) 5530 sqlite3.Xsqlite3_free(tls, zOrder) 5531 5532 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5533 var dbrem uintptr = func() uintptr { 5534 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5535 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 5536 } 5537 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 5538 }() 5539 *(*int32)(unsafe.Pointer(bp + 112)) = idxPrepareStmt(tls, dbrem, bp+120, pzErr, zQuery) 5540 } 5541 sqlite3.Xsqlite3_free(tls, zQuery) 5542 5543 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5544 aStat = idxMalloc(tls, bp+112, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nCol+1))) 5545 } 5546 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 5547 var pEntry uintptr 5548 var zStat uintptr = uintptr(0) 5549 for i = 0; i <= nCol; i++ { 5550 *(*int32)(unsafe.Pointer(aStat + uintptr(i)*4)) = 1 5551 } 5552 for *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 5553 *(*int32)(unsafe.Pointer(aStat))++ 5554 for i = 0; i < nCol; i++ { 5555 if sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 120)), i) == 0 { 5556 break 5557 } 5558 } 5559 for ; i < nCol; i++ { 5560 *(*int32)(unsafe.Pointer(aStat + uintptr(i+1)*4))++ 5561 } 5562 } 5563 5564 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5565 var s0 int32 = *(*int32)(unsafe.Pointer(aStat)) 5566 zStat = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+96, s0)) 5567 if zStat == uintptr(0) { 5568 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_NOMEM 5569 } 5570 for i = 1; *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && i <= nCol; i++ { 5571 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)))) 5572 } 5573 } 5574 5575 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5576 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 1, zTab, -1, uintptr(0)) 5577 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 2, zIdx, -1, uintptr(0)) 5578 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 3, zStat, -1, uintptr(0)) 5579 sqlite3.Xsqlite3_step(tls, pWriteStat) 5580 *(*int32)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_reset(tls, pWriteStat) 5581 } 5582 5583 pEntry = idxHashFind(tls, p+88, zIdx, int32(libc.Xstrlen(tls, zIdx))) 5584 if pEntry != 0 { 5585 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 = zStat 5586 } else { 5587 sqlite3.Xsqlite3_free(tls, zStat) 5588 } 5589 } 5590 sqlite3.Xsqlite3_free(tls, aStat) 5591 idxFinalize(tls, bp+112, *(*uintptr)(unsafe.Pointer(bp + 120))) 5592 5593 return *(*int32)(unsafe.Pointer(bp + 112)) 5594 } 5595 5596 func idxBuildSampleTable(tls *libc.TLS, p uintptr, zTab uintptr) int32 { 5597 bp := tls.Alloc(8) 5598 defer tls.Free(8) 5599 5600 var rc int32 5601 var zSql uintptr 5602 5603 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5604 if rc != SQLITE_OK { 5605 return rc 5606 } 5607 5608 zSql = sqlite3.Xsqlite3_mprintf(tls, 5609 ts+1404, libc.VaList(bp, zTab)) 5610 if zSql == uintptr(0) { 5611 return SQLITE_NOMEM 5612 } 5613 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), uintptr(0)) 5614 sqlite3.Xsqlite3_free(tls, zSql) 5615 5616 return rc 5617 } 5618 5619 func idxPopulateStat1(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5620 bp := tls.Alloc(64) 5621 defer tls.Free(64) 5622 5623 *(*int32)(unsafe.Pointer(bp + 4)) = SQLITE_OK 5624 *(*int32)(unsafe.Pointer(bp)) = 0 5625 var pCtx uintptr = uintptr(0) 5626 5627 var i int32 5628 var iPrev i64 = int64(-100000) 5629 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 5630 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 5631 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 5632 5633 var zAllIndex uintptr = ts + 1480 5634 var zIndexXInfo uintptr = ts + 1594 5635 var zWrite uintptr = ts + 1649 5636 5637 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 0 { 5638 return SQLITE_OK 5639 } 5640 5641 *(*int32)(unsafe.Pointer(bp + 4)) = idxLargestIndex(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp, pzErr) 5642 if *(*int32)(unsafe.Pointer(bp)) <= 0 || *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 5643 return *(*int32)(unsafe.Pointer(bp + 4)) 5644 } 5645 5646 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1690, uintptr(0), uintptr(0), uintptr(0)) 5647 5648 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5649 var nByte int32 = int32(uint64(unsafe.Sizeof(IdxRemCtx{})) + uint64(unsafe.Sizeof(IdxRemSlot{}))*uint64(*(*int32)(unsafe.Pointer(bp)))) 5650 pCtx = idxMalloc(tls, bp+4, nByte) 5651 } 5652 5653 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5654 var dbrem uintptr = func() uintptr { 5655 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5656 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 5657 } 5658 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 5659 }() 5660 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 5661 dbrem, ts+1724, 2, SQLITE_UTF8, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 5662 f func(*libc.TLS, uintptr, int32, uintptr) 5663 }{idxRemFunc})), uintptr(0), uintptr(0)) 5664 } 5665 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5666 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 5667 (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1728, 0, SQLITE_UTF8, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 5668 f func(*libc.TLS, uintptr, int32, uintptr) 5669 }{idxSampleFunc})), uintptr(0), uintptr(0)) 5670 } 5671 5672 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5673 (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot = *(*int32)(unsafe.Pointer(bp)) + 1 5674 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+40, pzErr, zAllIndex) 5675 } 5676 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5677 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+48, pzErr, zIndexXInfo) 5678 } 5679 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5680 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+56, pzErr, zWrite) 5681 } 5682 5683 for *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 5684 var iRowid i64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 5685 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 5686 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 5687 if zTab == uintptr(0) || zIdx == uintptr(0) { 5688 continue 5689 } 5690 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 && iPrev != iRowid { 5691 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).Ftarget = float64((*sqlite3expert)(unsafe.Pointer(p)).FiSample) / 100.0 5692 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FiTarget = (*sqlite3expert)(unsafe.Pointer(p)).FiSample 5693 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRow = 0.0 5694 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRet = 0.0 5695 *(*int32)(unsafe.Pointer(bp + 4)) = idxBuildSampleTable(tls, p, zTab) 5696 if *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 5697 break 5698 } 5699 } 5700 *(*int32)(unsafe.Pointer(bp + 4)) = idxPopulateOneStat1(tls, p, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56)), zTab, zIdx, pzErr) 5701 iPrev = iRowid 5702 } 5703 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 { 5704 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, 5705 ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5706 } 5707 5708 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 40))) 5709 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 48))) 5710 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 56))) 5711 5712 if pCtx != 0 { 5713 for i = 0; i < (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot; i++ { 5714 sqlite3.Xsqlite3_free(tls, (*IdxRemSlot)(unsafe.Pointer(pCtx+8+uintptr(i)*40)).Fz) 5715 } 5716 sqlite3.Xsqlite3_free(tls, pCtx) 5717 } 5718 5719 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5720 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1735, uintptr(0), uintptr(0), uintptr(0)) 5721 } 5722 5723 sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5724 return *(*int32)(unsafe.Pointer(bp + 4)) 5725 } 5726 5727 func sqlite3_expert_new(tls *libc.TLS, db uintptr, pzErrmsg uintptr) uintptr { 5728 bp := tls.Alloc(32) 5729 defer tls.Free(32) 5730 5731 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 5732 var pNew uintptr 5733 5734 pNew = idxMalloc(tls, bp+16, int32(unsafe.Sizeof(sqlite3expert{}))) 5735 5736 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5737 (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb = db 5738 (*sqlite3expert)(unsafe.Pointer(pNew)).FiSample = 100 5739 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+24) 5740 } 5741 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5742 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+16) 5743 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5744 sqlite3.Xsqlite3_db_config(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, SQLITE_DBCONFIG_TRIGGER_EQP, libc.VaList(bp, 1, uintptr(0))) 5745 } 5746 } 5747 5748 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5749 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 5750 *(*int32)(unsafe.Pointer(bp + 16)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb, bp+24, pzErrmsg, 5751 ts+1766, 0) 5752 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) { 5753 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 5754 if zSql != 0 { 5755 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, zSql, uintptr(0), uintptr(0), pzErrmsg) 5756 } 5757 } 5758 idxFinalize(tls, bp+16, *(*uintptr)(unsafe.Pointer(bp + 24))) 5759 } 5760 5761 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5762 *(*int32)(unsafe.Pointer(bp + 16)) = idxCreateVtabSchema(tls, pNew, pzErrmsg) 5763 } 5764 5765 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5766 sqlite3.Xsqlite3_set_authorizer(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbv, *(*uintptr)(unsafe.Pointer(&struct { 5767 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 5768 }{idxAuthCallback})), pNew) 5769 } 5770 5771 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 5772 sqlite3_expert_destroy(tls, pNew) 5773 pNew = uintptr(0) 5774 } 5775 return pNew 5776 } 5777 5778 func sqlite3_expert_config(tls *libc.TLS, p uintptr, op int32, va uintptr) int32 { 5779 var rc int32 = SQLITE_OK 5780 var ap va_list 5781 _ = ap 5782 ap = va 5783 switch op { 5784 case EXPERT_CONFIG_SAMPLE: 5785 { 5786 var iVal int32 = libc.VaInt32(&ap) 5787 if iVal < 0 { 5788 iVal = 0 5789 } 5790 if iVal > 100 { 5791 iVal = 100 5792 } 5793 (*sqlite3expert)(unsafe.Pointer(p)).FiSample = iVal 5794 break 5795 5796 } 5797 default: 5798 rc = SQLITE_NOTFOUND 5799 break 5800 } 5801 5802 _ = ap 5803 return rc 5804 } 5805 5806 func sqlite3_expert_sql(tls *libc.TLS, p uintptr, zSql uintptr, pzErr uintptr) int32 { 5807 bp := tls.Alloc(20) 5808 defer tls.Free(20) 5809 5810 var pScanOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpScan 5811 var pStmtOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5812 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 5813 *(*uintptr)(unsafe.Pointer(bp + 8)) = zSql 5814 5815 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun != 0 { 5816 return SQLITE_MISUSE 5817 } 5818 5819 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 { 5820 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 5821 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, *(*uintptr)(unsafe.Pointer(bp + 8)), -1, bp, bp+8) 5822 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5823 if *(*uintptr)(unsafe.Pointer(bp)) != 0 { 5824 var pNew uintptr 5825 var z uintptr = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 5826 var n int32 = int32(libc.Xstrlen(tls, z)) 5827 pNew = idxMalloc(tls, bp+16, int32(uint64(unsafe.Sizeof(IdxStatement{}))+uint64(n)+uint64(1))) 5828 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5829 (*IdxStatement)(unsafe.Pointer(pNew)).FzSql = pNew + 1*40 5830 libc.Xmemcpy(tls, (*IdxStatement)(unsafe.Pointer(pNew)).FzSql, z, uint64(n+1)) 5831 (*IdxStatement)(unsafe.Pointer(pNew)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5832 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 5833 (*IdxStatement)(unsafe.Pointer(pNew)).FiId = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 5834 } 5835 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pNew 5836 } 5837 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 5838 } 5839 } else { 5840 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 5841 } 5842 } 5843 5844 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 5845 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, pScanOrig) 5846 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, pStmtOrig) 5847 (*sqlite3expert)(unsafe.Pointer(p)).FpScan = pScanOrig 5848 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pStmtOrig 5849 } 5850 5851 return *(*int32)(unsafe.Pointer(bp + 16)) 5852 } 5853 5854 func sqlite3_expert_analyze(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5855 bp := tls.Alloc(28) 5856 defer tls.Free(28) 5857 5858 var pEntry uintptr 5859 5860 *(*int32)(unsafe.Pointer(bp + 24)) = idxProcessTriggers(tls, p, pzErr) 5861 5862 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5863 *(*int32)(unsafe.Pointer(bp + 24)) = idxCreateCandidates(tls, p) 5864 } else if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_BUSY|int32(3)<<8 { 5865 if pzErr != 0 { 5866 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+1865, 0) 5867 } 5868 return *(*int32)(unsafe.Pointer(bp + 24)) 5869 } 5870 5871 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5872 *(*int32)(unsafe.Pointer(bp + 24)) = idxPopulateStat1(tls, p, pzErr) 5873 } 5874 5875 for pEntry = (*sqlite3expert)(unsafe.Pointer(p)).FhIdx.FpFirst; pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext { 5876 (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates = idxAppendText(tls, bp+24, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates, 5877 ts+1909, libc.VaList(bp, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, 5878 func() uintptr { 5879 if (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 != 0 { 5880 return ts + 1918 5881 } 5882 return ts + 584 5883 }(), (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2)) 5884 } 5885 5886 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5887 *(*int32)(unsafe.Pointer(bp + 24)) = idxFindIndexes(tls, p, pzErr) 5888 } 5889 5890 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5891 (*sqlite3expert)(unsafe.Pointer(p)).FbRun = 1 5892 } 5893 return *(*int32)(unsafe.Pointer(bp + 24)) 5894 } 5895 5896 func sqlite3_expert_count(tls *libc.TLS, p uintptr) int32 { 5897 var nRet int32 = 0 5898 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 5899 nRet = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 5900 } 5901 return nRet 5902 } 5903 5904 func sqlite3_expert_report(tls *libc.TLS, p uintptr, iStmt int32, eReport int32) uintptr { 5905 var zRet uintptr = uintptr(0) 5906 var pStmt uintptr 5907 5908 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun == 0 { 5909 return uintptr(0) 5910 } 5911 for pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement; pStmt != 0 && (*IdxStatement)(unsafe.Pointer(pStmt)).FiId != iStmt; pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext { 5912 } 5913 switch eReport { 5914 case EXPERT_REPORT_SQL: 5915 if pStmt != 0 { 5916 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql 5917 } 5918 break 5919 case EXPERT_REPORT_INDEXES: 5920 if pStmt != 0 { 5921 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx 5922 } 5923 break 5924 case EXPERT_REPORT_PLAN: 5925 if pStmt != 0 { 5926 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP 5927 } 5928 break 5929 case EXPERT_REPORT_CANDIDATES: 5930 zRet = (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates 5931 break 5932 } 5933 return zRet 5934 } 5935 5936 func sqlite3_expert_destroy(tls *libc.TLS, p uintptr) { 5937 if p != 0 { 5938 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm) 5939 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv) 5940 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, uintptr(0)) 5941 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, uintptr(0)) 5942 idxTableFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpTable) 5943 idxWriteFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpWrite) 5944 idxHashClear(tls, p+88) 5945 sqlite3.Xsqlite3_free(tls, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates) 5946 sqlite3.Xsqlite3_free(tls, p) 5947 } 5948 } 5949 5950 type ClientData = uintptr 5951 5952 type Tcl_WideInt = int64 5953 type Tcl_WideUInt = uint64 5954 5955 type stat = struct { 5956 Fst_mode mode_t 5957 Fst_dev dev_t 5958 Fst_ino ino_t 5959 Fst_nlink nlink_t 5960 Fst_uid uid_t 5961 Fst_gid gid_t 5962 Fst_rdev dev_t 5963 Fst_atim struct { 5964 Ftv_sec time_t 5965 Ftv_nsec int64 5966 } 5967 Fst_mtim struct { 5968 Ftv_sec time_t 5969 Ftv_nsec int64 5970 } 5971 Fst_ctim struct { 5972 Ftv_sec time_t 5973 Ftv_nsec int64 5974 } 5975 Fst_size off_t 5976 Fst_blocks blkcnt_t 5977 Fst_blksize blksize_t 5978 Fst_flags u_int32_t 5979 Fst_gen u_int32_t 5980 F__ccgo_pad1 [4]byte 5981 F__st_birthtim struct { 5982 Ftv_sec time_t 5983 Ftv_nsec int64 5984 } 5985 } 5986 5987 type Tcl_Interp1 = struct { 5988 FresultDontUse uintptr 5989 FfreeProcDontUse uintptr 5990 FerrorLineDontUse int32 5991 F__ccgo_pad1 [4]byte 5992 } 5993 5994 type Tcl_Interp = Tcl_Interp1 5995 5996 type Tcl_AsyncHandler = uintptr 5997 type Tcl_Channel = uintptr 5998 type Tcl_ChannelTypeVersion = uintptr 5999 type Tcl_Command = uintptr 6000 type Tcl_Condition = uintptr 6001 type Tcl_Dict = uintptr 6002 type Tcl_EncodingState = uintptr 6003 type Tcl_Encoding = uintptr 6004 type Tcl_Event1 = struct { 6005 Fproc uintptr 6006 FnextPtr uintptr 6007 } 6008 6009 type Tcl_Event = Tcl_Event1 6010 type Tcl_InterpState = uintptr 6011 type Tcl_LoadHandle = uintptr 6012 type Tcl_Mutex = uintptr 6013 type Tcl_Pid = uintptr 6014 type Tcl_RegExp = uintptr 6015 type Tcl_ThreadDataKey = uintptr 6016 type Tcl_ThreadId = uintptr 6017 type Tcl_TimerToken = uintptr 6018 type Tcl_Trace = uintptr 6019 type Tcl_Var = uintptr 6020 type Tcl_ZlibStream = uintptr 6021 6022 type Tcl_RegExpIndices1 = struct { 6023 Fstart int64 6024 Fend int64 6025 } 6026 6027 type Tcl_RegExpIndices = Tcl_RegExpIndices1 6028 6029 type Tcl_RegExpInfo1 = struct { 6030 Fnsubs int32 6031 F__ccgo_pad1 [4]byte 6032 Fmatches uintptr 6033 FextendStart int64 6034 Freserved int64 6035 } 6036 6037 type Tcl_RegExpInfo = Tcl_RegExpInfo1 6038 6039 type Tcl_Stat_ = uintptr 6040 type Tcl_OldStat_ = uintptr 6041 6042 type Tcl_ValueType = uint32 6043 6044 type Tcl_Value1 = struct { 6045 Ftype Tcl_ValueType 6046 F__ccgo_pad1 [4]byte 6047 FintValue int64 6048 FdoubleValue float64 6049 FwideValue Tcl_WideInt 6050 } 6051 6052 type Tcl_Value = Tcl_Value1 6053 6054 type Tcl_Obj1 = struct { 6055 FrefCount int32 6056 F__ccgo_pad1 [4]byte 6057 Fbytes uintptr 6058 Flength int32 6059 F__ccgo_pad2 [4]byte 6060 FtypePtr uintptr 6061 FinternalRep struct { 6062 FlongValue int64 6063 F__ccgo_pad1 [8]byte 6064 } 6065 } 6066 6067 type Tcl_ObjType1 = struct { 6068 Fname uintptr 6069 FfreeIntRepProc uintptr 6070 FdupIntRepProc uintptr 6071 FupdateStringProc uintptr 6072 FsetFromAnyProc uintptr 6073 } 6074 6075 type Tcl_ObjType = Tcl_ObjType1 6076 6077 type Tcl_Obj = Tcl_Obj1 6078 6079 type Tcl_SavedResult1 = struct { 6080 Fresult uintptr 6081 FfreeProc uintptr 6082 FobjResultPtr uintptr 6083 FappendResult uintptr 6084 FappendAvl int32 6085 FappendUsed int32 6086 FresultSpace [201]int8 6087 F__ccgo_pad1 [7]byte 6088 } 6089 6090 type Tcl_SavedResult = Tcl_SavedResult1 6091 6092 type Tcl_Namespace1 = struct { 6093 Fname uintptr 6094 FfullName uintptr 6095 FclientData ClientData 6096 FdeleteProc uintptr 6097 FparentPtr uintptr 6098 } 6099 6100 type Tcl_Namespace = Tcl_Namespace1 6101 6102 type Tcl_CallFrame1 = struct { 6103 FnsPtr uintptr 6104 Fdummy1 int32 6105 Fdummy2 int32 6106 Fdummy3 uintptr 6107 Fdummy4 uintptr 6108 Fdummy5 uintptr 6109 Fdummy6 int32 6110 F__ccgo_pad1 [4]byte 6111 Fdummy7 uintptr 6112 Fdummy8 uintptr 6113 Fdummy9 int32 6114 F__ccgo_pad2 [4]byte 6115 Fdummy10 uintptr 6116 Fdummy11 uintptr 6117 Fdummy12 uintptr 6118 Fdummy13 uintptr 6119 } 6120 6121 type Tcl_CallFrame = Tcl_CallFrame1 6122 6123 type Tcl_CmdInfo1 = struct { 6124 FisNativeObjectProc int32 6125 F__ccgo_pad1 [4]byte 6126 FobjProc uintptr 6127 FobjClientData ClientData 6128 Fproc uintptr 6129 FclientData ClientData 6130 FdeleteProc uintptr 6131 FdeleteData ClientData 6132 FnamespacePtr uintptr 6133 } 6134 6135 type Tcl_CmdInfo = Tcl_CmdInfo1 6136 6137 type Tcl_DString1 = struct { 6138 Fstring uintptr 6139 Flength int32 6140 FspaceAvl int32 6141 FstaticSpace [200]int8 6142 } 6143 6144 type Tcl_DString = Tcl_DString1 6145 6146 type Tcl_HashKeyType1 = struct { 6147 Fversion int32 6148 Fflags int32 6149 FhashKeyProc uintptr 6150 FcompareKeysProc uintptr 6151 FallocEntryProc uintptr 6152 FfreeEntryProc uintptr 6153 } 6154 6155 type Tcl_HashKeyType = Tcl_HashKeyType1 6156 type Tcl_HashTable1 = struct { 6157 Fbuckets uintptr 6158 FstaticBuckets [4]uintptr 6159 FnumBuckets int32 6160 FnumEntries int32 6161 FrebuildSize int32 6162 FdownShift int32 6163 Fmask int32 6164 FkeyType int32 6165 FfindProc uintptr 6166 FcreateProc uintptr 6167 FtypePtr uintptr 6168 } 6169 6170 type Tcl_HashTable = Tcl_HashTable1 6171 type Tcl_HashEntry1 = struct { 6172 FnextPtr uintptr 6173 FtablePtr uintptr 6174 Fhash uintptr 6175 FclientData ClientData 6176 Fkey struct{ FoneWordValue uintptr } 6177 } 6178 6179 type Tcl_HashEntry = Tcl_HashEntry1 6180 6181 type Tcl_HashSearch1 = struct { 6182 FtablePtr uintptr 6183 FnextIndex int32 6184 F__ccgo_pad1 [4]byte 6185 FnextEntryPtr uintptr 6186 } 6187 6188 type Tcl_HashSearch = Tcl_HashSearch1 6189 6190 type Tcl_DictSearch = struct { 6191 Fnext uintptr 6192 Fepoch int32 6193 F__ccgo_pad1 [4]byte 6194 FdictionaryPtr Tcl_Dict 6195 } 6196 6197 type Tcl_QueuePosition = uint32 6198 6199 type Tcl_Time1 = struct { 6200 Fsec int64 6201 Fusec int64 6202 } 6203 6204 type Tcl_Time = Tcl_Time1 6205 6206 type Tcl_ChannelType1 = struct { 6207 FtypeName uintptr 6208 Fversion Tcl_ChannelTypeVersion 6209 FcloseProc uintptr 6210 FinputProc uintptr 6211 FoutputProc uintptr 6212 FseekProc uintptr 6213 FsetOptionProc uintptr 6214 FgetOptionProc uintptr 6215 FwatchProc uintptr 6216 FgetHandleProc uintptr 6217 Fclose2Proc uintptr 6218 FblockModeProc uintptr 6219 FflushProc uintptr 6220 FhandlerProc uintptr 6221 FwideSeekProc uintptr 6222 FthreadActionProc uintptr 6223 FtruncateProc uintptr 6224 } 6225 6226 type Tcl_ChannelType = Tcl_ChannelType1 6227 6228 type Tcl_PathType = uint32 6229 6230 type Tcl_GlobTypeData1 = struct { 6231 Ftype int32 6232 Fperm int32 6233 FmacType uintptr 6234 FmacCreator uintptr 6235 } 6236 6237 type Tcl_GlobTypeData = Tcl_GlobTypeData1 6238 6239 type utimbuf = struct { 6240 Factime time_t 6241 Fmodtime time_t 6242 } 6243 6244 type Tcl_FSVersion = uintptr 6245 6246 type Tcl_Filesystem1 = struct { 6247 FtypeName uintptr 6248 FstructureLength int32 6249 F__ccgo_pad1 [4]byte 6250 Fversion Tcl_FSVersion 6251 FpathInFilesystemProc uintptr 6252 FdupInternalRepProc uintptr 6253 FfreeInternalRepProc uintptr 6254 FinternalToNormalizedProc uintptr 6255 FcreateInternalRepProc uintptr 6256 FnormalizePathProc uintptr 6257 FfilesystemPathTypeProc uintptr 6258 FfilesystemSeparatorProc uintptr 6259 FstatProc uintptr 6260 FaccessProc uintptr 6261 FopenFileChannelProc uintptr 6262 FmatchInDirectoryProc uintptr 6263 FutimeProc uintptr 6264 FlinkProc uintptr 6265 FlistVolumesProc uintptr 6266 FfileAttrStringsProc uintptr 6267 FfileAttrsGetProc uintptr 6268 FfileAttrsSetProc uintptr 6269 FcreateDirectoryProc uintptr 6270 FremoveDirectoryProc uintptr 6271 FdeleteFileProc uintptr 6272 FcopyFileProc uintptr 6273 FrenameFileProc uintptr 6274 FcopyDirectoryProc uintptr 6275 FlstatProc uintptr 6276 FloadFileProc uintptr 6277 FgetCwdProc uintptr 6278 FchdirProc uintptr 6279 } 6280 6281 type Tcl_Filesystem = Tcl_Filesystem1 6282 6283 type Tcl_NotifierProcs1 = struct { 6284 FsetTimerProc uintptr 6285 FwaitForEventProc uintptr 6286 FcreateFileHandlerProc uintptr 6287 FdeleteFileHandlerProc uintptr 6288 FinitNotifierProc uintptr 6289 FfinalizeNotifierProc uintptr 6290 FalertNotifierProc uintptr 6291 FserviceModeHookProc uintptr 6292 } 6293 6294 type Tcl_NotifierProcs = Tcl_NotifierProcs1 6295 6296 type Tcl_Token1 = struct { 6297 Ftype int32 6298 F__ccgo_pad1 [4]byte 6299 Fstart uintptr 6300 Fsize int32 6301 FnumComponents int32 6302 } 6303 6304 type Tcl_Token = Tcl_Token1 6305 6306 type Tcl_Parse1 = struct { 6307 FcommentStart uintptr 6308 FcommentSize int32 6309 F__ccgo_pad1 [4]byte 6310 FcommandStart uintptr 6311 FcommandSize int32 6312 FnumWords int32 6313 FtokenPtr uintptr 6314 FnumTokens int32 6315 FtokensAvailable int32 6316 FerrorType int32 6317 F__ccgo_pad2 [4]byte 6318 Fstring uintptr 6319 Fend uintptr 6320 Finterp uintptr 6321 Fterm uintptr 6322 Fincomplete int32 6323 F__ccgo_pad3 [4]byte 6324 FstaticTokens [20]Tcl_Token 6325 } 6326 6327 type Tcl_Parse = Tcl_Parse1 6328 6329 type Tcl_EncodingType1 = struct { 6330 FencodingName uintptr 6331 FtoUtfProc uintptr 6332 FfromUtfProc uintptr 6333 FfreeProc uintptr 6334 FclientData ClientData 6335 FnullSize int32 6336 F__ccgo_pad1 [4]byte 6337 } 6338 6339 type Tcl_EncodingType = Tcl_EncodingType1 6340 6341 type Tcl_UniChar = uint16 6342 6343 type Tcl_Config1 = struct { 6344 Fkey uintptr 6345 Fvalue uintptr 6346 } 6347 6348 type Tcl_Config = Tcl_Config1 6349 type mp_digit = uint32 6350 6351 type Tcl_ArgvInfo = struct { 6352 Ftype int32 6353 F__ccgo_pad1 [4]byte 6354 FkeyStr uintptr 6355 FsrcPtr uintptr 6356 FdstPtr uintptr 6357 FhelpStr uintptr 6358 FclientData ClientData 6359 } 6360 6361 type TclPlatStubs1 = struct { 6362 Fmagic int32 6363 F__ccgo_pad1 [4]byte 6364 Fhooks uintptr 6365 } 6366 6367 type TclStubHooks = struct { 6368 FtclPlatStubs uintptr 6369 FtclIntStubs uintptr 6370 FtclIntPlatStubs uintptr 6371 } 6372 6373 type TclStubs1 = struct { 6374 Fmagic int32 6375 F__ccgo_pad1 [4]byte 6376 Fhooks uintptr 6377 Ftcl_PkgProvideEx uintptr 6378 Ftcl_PkgRequireEx uintptr 6379 Ftcl_Panic uintptr 6380 Ftcl_Alloc uintptr 6381 Ftcl_Free uintptr 6382 Ftcl_Realloc uintptr 6383 Ftcl_DbCkalloc uintptr 6384 Ftcl_DbCkfree uintptr 6385 Ftcl_DbCkrealloc uintptr 6386 Ftcl_CreateFileHandler uintptr 6387 Ftcl_DeleteFileHandler uintptr 6388 Ftcl_SetTimer uintptr 6389 Ftcl_Sleep uintptr 6390 Ftcl_WaitForEvent uintptr 6391 Ftcl_AppendAllObjTypes uintptr 6392 Ftcl_AppendStringsToObj uintptr 6393 Ftcl_AppendToObj uintptr 6394 Ftcl_ConcatObj uintptr 6395 Ftcl_ConvertToType uintptr 6396 Ftcl_DbDecrRefCount uintptr 6397 Ftcl_DbIncrRefCount uintptr 6398 Ftcl_DbIsShared uintptr 6399 Ftcl_DbNewBooleanObj uintptr 6400 Ftcl_DbNewByteArrayObj uintptr 6401 Ftcl_DbNewDoubleObj uintptr 6402 Ftcl_DbNewListObj uintptr 6403 Ftcl_DbNewLongObj uintptr 6404 Ftcl_DbNewObj uintptr 6405 Ftcl_DbNewStringObj uintptr 6406 Ftcl_DuplicateObj uintptr 6407 FtclFreeObj uintptr 6408 Ftcl_GetBoolean uintptr 6409 Ftcl_GetBooleanFromObj uintptr 6410 Ftcl_GetByteArrayFromObj uintptr 6411 Ftcl_GetDouble uintptr 6412 Ftcl_GetDoubleFromObj uintptr 6413 Ftcl_GetIndexFromObj uintptr 6414 Ftcl_GetInt uintptr 6415 Ftcl_GetIntFromObj uintptr 6416 Ftcl_GetLongFromObj uintptr 6417 Ftcl_GetObjType uintptr 6418 Ftcl_GetStringFromObj uintptr 6419 Ftcl_InvalidateStringRep uintptr 6420 Ftcl_ListObjAppendList uintptr 6421 Ftcl_ListObjAppendElement uintptr 6422 Ftcl_ListObjGetElements uintptr 6423 Ftcl_ListObjIndex uintptr 6424 Ftcl_ListObjLength uintptr 6425 Ftcl_ListObjReplace uintptr 6426 Ftcl_NewBooleanObj uintptr 6427 Ftcl_NewByteArrayObj uintptr 6428 Ftcl_NewDoubleObj uintptr 6429 Ftcl_NewIntObj uintptr 6430 Ftcl_NewListObj uintptr 6431 Ftcl_NewLongObj uintptr 6432 Ftcl_NewObj uintptr 6433 Ftcl_NewStringObj uintptr 6434 Ftcl_SetBooleanObj uintptr 6435 Ftcl_SetByteArrayLength uintptr 6436 Ftcl_SetByteArrayObj uintptr 6437 Ftcl_SetDoubleObj uintptr 6438 Ftcl_SetIntObj uintptr 6439 Ftcl_SetListObj uintptr 6440 Ftcl_SetLongObj uintptr 6441 Ftcl_SetObjLength uintptr 6442 Ftcl_SetStringObj uintptr 6443 Ftcl_AddErrorInfo uintptr 6444 Ftcl_AddObjErrorInfo uintptr 6445 Ftcl_AllowExceptions uintptr 6446 Ftcl_AppendElement uintptr 6447 Ftcl_AppendResult uintptr 6448 Ftcl_AsyncCreate uintptr 6449 Ftcl_AsyncDelete uintptr 6450 Ftcl_AsyncInvoke uintptr 6451 Ftcl_AsyncMark uintptr 6452 Ftcl_AsyncReady uintptr 6453 Ftcl_BackgroundError uintptr 6454 Ftcl_Backslash uintptr 6455 Ftcl_BadChannelOption uintptr 6456 Ftcl_CallWhenDeleted uintptr 6457 Ftcl_CancelIdleCall uintptr 6458 Ftcl_Close uintptr 6459 Ftcl_CommandComplete uintptr 6460 Ftcl_Concat uintptr 6461 Ftcl_ConvertElement uintptr 6462 Ftcl_ConvertCountedElement uintptr 6463 Ftcl_CreateAlias uintptr 6464 Ftcl_CreateAliasObj uintptr 6465 Ftcl_CreateChannel uintptr 6466 Ftcl_CreateChannelHandler uintptr 6467 Ftcl_CreateCloseHandler uintptr 6468 Ftcl_CreateCommand uintptr 6469 Ftcl_CreateEventSource uintptr 6470 Ftcl_CreateExitHandler uintptr 6471 Ftcl_CreateInterp uintptr 6472 Ftcl_CreateMathFunc uintptr 6473 Ftcl_CreateObjCommand uintptr 6474 Ftcl_CreateSlave uintptr 6475 Ftcl_CreateTimerHandler uintptr 6476 Ftcl_CreateTrace uintptr 6477 Ftcl_DeleteAssocData uintptr 6478 Ftcl_DeleteChannelHandler uintptr 6479 Ftcl_DeleteCloseHandler uintptr 6480 Ftcl_DeleteCommand uintptr 6481 Ftcl_DeleteCommandFromToken uintptr 6482 Ftcl_DeleteEvents uintptr 6483 Ftcl_DeleteEventSource uintptr 6484 Ftcl_DeleteExitHandler uintptr 6485 Ftcl_DeleteHashEntry uintptr 6486 Ftcl_DeleteHashTable uintptr 6487 Ftcl_DeleteInterp uintptr 6488 Ftcl_DetachPids uintptr 6489 Ftcl_DeleteTimerHandler uintptr 6490 Ftcl_DeleteTrace uintptr 6491 Ftcl_DontCallWhenDeleted uintptr 6492 Ftcl_DoOneEvent uintptr 6493 Ftcl_DoWhenIdle uintptr 6494 Ftcl_DStringAppend uintptr 6495 Ftcl_DStringAppendElement uintptr 6496 Ftcl_DStringEndSublist uintptr 6497 Ftcl_DStringFree uintptr 6498 Ftcl_DStringGetResult uintptr 6499 Ftcl_DStringInit uintptr 6500 Ftcl_DStringResult uintptr 6501 Ftcl_DStringSetLength uintptr 6502 Ftcl_DStringStartSublist uintptr 6503 Ftcl_Eof uintptr 6504 Ftcl_ErrnoId uintptr 6505 Ftcl_ErrnoMsg uintptr 6506 Ftcl_Eval uintptr 6507 Ftcl_EvalFile uintptr 6508 Ftcl_EvalObj uintptr 6509 Ftcl_EventuallyFree uintptr 6510 Ftcl_Exit uintptr 6511 Ftcl_ExposeCommand uintptr 6512 Ftcl_ExprBoolean uintptr 6513 Ftcl_ExprBooleanObj uintptr 6514 Ftcl_ExprDouble uintptr 6515 Ftcl_ExprDoubleObj uintptr 6516 Ftcl_ExprLong uintptr 6517 Ftcl_ExprLongObj uintptr 6518 Ftcl_ExprObj uintptr 6519 Ftcl_ExprString uintptr 6520 Ftcl_Finalize uintptr 6521 Ftcl_FindExecutable uintptr 6522 Ftcl_FirstHashEntry uintptr 6523 Ftcl_Flush uintptr 6524 Ftcl_FreeResult uintptr 6525 Ftcl_GetAlias uintptr 6526 Ftcl_GetAliasObj uintptr 6527 Ftcl_GetAssocData uintptr 6528 Ftcl_GetChannel uintptr 6529 Ftcl_GetChannelBufferSize uintptr 6530 Ftcl_GetChannelHandle uintptr 6531 Ftcl_GetChannelInstanceData uintptr 6532 Ftcl_GetChannelMode uintptr 6533 Ftcl_GetChannelName uintptr 6534 Ftcl_GetChannelOption uintptr 6535 Ftcl_GetChannelType uintptr 6536 Ftcl_GetCommandInfo uintptr 6537 Ftcl_GetCommandName uintptr 6538 Ftcl_GetErrno uintptr 6539 Ftcl_GetHostName uintptr 6540 Ftcl_GetInterpPath uintptr 6541 Ftcl_GetMaster uintptr 6542 Ftcl_GetNameOfExecutable uintptr 6543 Ftcl_GetObjResult uintptr 6544 Ftcl_GetOpenFile uintptr 6545 Ftcl_GetPathType uintptr 6546 Ftcl_Gets uintptr 6547 Ftcl_GetsObj uintptr 6548 Ftcl_GetServiceMode uintptr 6549 Ftcl_GetSlave uintptr 6550 Ftcl_GetStdChannel uintptr 6551 Ftcl_GetStringResult uintptr 6552 Ftcl_GetVar uintptr 6553 Ftcl_GetVar2 uintptr 6554 Ftcl_GlobalEval uintptr 6555 Ftcl_GlobalEvalObj uintptr 6556 Ftcl_HideCommand uintptr 6557 Ftcl_Init uintptr 6558 Ftcl_InitHashTable uintptr 6559 Ftcl_InputBlocked uintptr 6560 Ftcl_InputBuffered uintptr 6561 Ftcl_InterpDeleted uintptr 6562 Ftcl_IsSafe uintptr 6563 Ftcl_JoinPath uintptr 6564 Ftcl_LinkVar uintptr 6565 Freserved188 uintptr 6566 Ftcl_MakeFileChannel uintptr 6567 Ftcl_MakeSafe uintptr 6568 Ftcl_MakeTcpClientChannel uintptr 6569 Ftcl_Merge uintptr 6570 Ftcl_NextHashEntry uintptr 6571 Ftcl_NotifyChannel uintptr 6572 Ftcl_ObjGetVar2 uintptr 6573 Ftcl_ObjSetVar2 uintptr 6574 Ftcl_OpenCommandChannel uintptr 6575 Ftcl_OpenFileChannel uintptr 6576 Ftcl_OpenTcpClient uintptr 6577 Ftcl_OpenTcpServer uintptr 6578 Ftcl_Preserve uintptr 6579 Ftcl_PrintDouble uintptr 6580 Ftcl_PutEnv uintptr 6581 Ftcl_PosixError uintptr 6582 Ftcl_QueueEvent uintptr 6583 Ftcl_Read uintptr 6584 Ftcl_ReapDetachedProcs uintptr 6585 Ftcl_RecordAndEval uintptr 6586 Ftcl_RecordAndEvalObj uintptr 6587 Ftcl_RegisterChannel uintptr 6588 Ftcl_RegisterObjType uintptr 6589 Ftcl_RegExpCompile uintptr 6590 Ftcl_RegExpExec uintptr 6591 Ftcl_RegExpMatch uintptr 6592 Ftcl_RegExpRange uintptr 6593 Ftcl_Release uintptr 6594 Ftcl_ResetResult uintptr 6595 Ftcl_ScanElement uintptr 6596 Ftcl_ScanCountedElement uintptr 6597 Ftcl_SeekOld uintptr 6598 Ftcl_ServiceAll uintptr 6599 Ftcl_ServiceEvent uintptr 6600 Ftcl_SetAssocData uintptr 6601 Ftcl_SetChannelBufferSize uintptr 6602 Ftcl_SetChannelOption uintptr 6603 Ftcl_SetCommandInfo uintptr 6604 Ftcl_SetErrno uintptr 6605 Ftcl_SetErrorCode uintptr 6606 Ftcl_SetMaxBlockTime uintptr 6607 Ftcl_SetPanicProc uintptr 6608 Ftcl_SetRecursionLimit uintptr 6609 Ftcl_SetResult uintptr 6610 Ftcl_SetServiceMode uintptr 6611 Ftcl_SetObjErrorCode uintptr 6612 Ftcl_SetObjResult uintptr 6613 Ftcl_SetStdChannel uintptr 6614 Ftcl_SetVar uintptr 6615 Ftcl_SetVar2 uintptr 6616 Ftcl_SignalId uintptr 6617 Ftcl_SignalMsg uintptr 6618 Ftcl_SourceRCFile uintptr 6619 Ftcl_SplitList uintptr 6620 Ftcl_SplitPath uintptr 6621 Ftcl_StaticPackage uintptr 6622 Ftcl_StringMatch uintptr 6623 Ftcl_TellOld uintptr 6624 Ftcl_TraceVar uintptr 6625 Ftcl_TraceVar2 uintptr 6626 Ftcl_TranslateFileName uintptr 6627 Ftcl_Ungets uintptr 6628 Ftcl_UnlinkVar uintptr 6629 Ftcl_UnregisterChannel uintptr 6630 Ftcl_UnsetVar uintptr 6631 Ftcl_UnsetVar2 uintptr 6632 Ftcl_UntraceVar uintptr 6633 Ftcl_UntraceVar2 uintptr 6634 Ftcl_UpdateLinkedVar uintptr 6635 Ftcl_UpVar uintptr 6636 Ftcl_UpVar2 uintptr 6637 Ftcl_VarEval uintptr 6638 Ftcl_VarTraceInfo uintptr 6639 Ftcl_VarTraceInfo2 uintptr 6640 Ftcl_Write uintptr 6641 Ftcl_WrongNumArgs uintptr 6642 Ftcl_DumpActiveMemory uintptr 6643 Ftcl_ValidateAllMemory uintptr 6644 Ftcl_AppendResultVA uintptr 6645 Ftcl_AppendStringsToObjVA uintptr 6646 Ftcl_HashStats uintptr 6647 Ftcl_ParseVar uintptr 6648 Ftcl_PkgPresent uintptr 6649 Ftcl_PkgPresentEx uintptr 6650 Ftcl_PkgProvide uintptr 6651 Ftcl_PkgRequire uintptr 6652 Ftcl_SetErrorCodeVA uintptr 6653 Ftcl_VarEvalVA uintptr 6654 Ftcl_WaitPid uintptr 6655 Ftcl_PanicVA uintptr 6656 Ftcl_GetVersion uintptr 6657 Ftcl_InitMemory uintptr 6658 Ftcl_StackChannel uintptr 6659 Ftcl_UnstackChannel uintptr 6660 Ftcl_GetStackedChannel uintptr 6661 Ftcl_SetMainLoop uintptr 6662 Freserved285 uintptr 6663 Ftcl_AppendObjToObj uintptr 6664 Ftcl_CreateEncoding uintptr 6665 Ftcl_CreateThreadExitHandler uintptr 6666 Ftcl_DeleteThreadExitHandler uintptr 6667 Ftcl_DiscardResult uintptr 6668 Ftcl_EvalEx uintptr 6669 Ftcl_EvalObjv uintptr 6670 Ftcl_EvalObjEx uintptr 6671 Ftcl_ExitThread uintptr 6672 Ftcl_ExternalToUtf uintptr 6673 Ftcl_ExternalToUtfDString uintptr 6674 Ftcl_FinalizeThread uintptr 6675 Ftcl_FinalizeNotifier uintptr 6676 Ftcl_FreeEncoding uintptr 6677 Ftcl_GetCurrentThread uintptr 6678 Ftcl_GetEncoding uintptr 6679 Ftcl_GetEncodingName uintptr 6680 Ftcl_GetEncodingNames uintptr 6681 Ftcl_GetIndexFromObjStruct uintptr 6682 Ftcl_GetThreadData uintptr 6683 Ftcl_GetVar2Ex uintptr 6684 Ftcl_InitNotifier uintptr 6685 Ftcl_MutexLock uintptr 6686 Ftcl_MutexUnlock uintptr 6687 Ftcl_ConditionNotify uintptr 6688 Ftcl_ConditionWait uintptr 6689 Ftcl_NumUtfChars uintptr 6690 Ftcl_ReadChars uintptr 6691 Ftcl_RestoreResult uintptr 6692 Ftcl_SaveResult uintptr 6693 Ftcl_SetSystemEncoding uintptr 6694 Ftcl_SetVar2Ex uintptr 6695 Ftcl_ThreadAlert uintptr 6696 Ftcl_ThreadQueueEvent uintptr 6697 Ftcl_UniCharAtIndex uintptr 6698 Ftcl_UniCharToLower uintptr 6699 Ftcl_UniCharToTitle uintptr 6700 Ftcl_UniCharToUpper uintptr 6701 Ftcl_UniCharToUtf uintptr 6702 Ftcl_UtfAtIndex uintptr 6703 Ftcl_UtfCharComplete uintptr 6704 Ftcl_UtfBackslash uintptr 6705 Ftcl_UtfFindFirst uintptr 6706 Ftcl_UtfFindLast uintptr 6707 Ftcl_UtfNext uintptr 6708 Ftcl_UtfPrev uintptr 6709 Ftcl_UtfToExternal uintptr 6710 Ftcl_UtfToExternalDString uintptr 6711 Ftcl_UtfToLower uintptr 6712 Ftcl_UtfToTitle uintptr 6713 Ftcl_UtfToUniChar uintptr 6714 Ftcl_UtfToUpper uintptr 6715 Ftcl_WriteChars uintptr 6716 Ftcl_WriteObj uintptr 6717 Ftcl_GetString uintptr 6718 Ftcl_GetDefaultEncodingDir uintptr 6719 Ftcl_SetDefaultEncodingDir uintptr 6720 Ftcl_AlertNotifier uintptr 6721 Ftcl_ServiceModeHook uintptr 6722 Ftcl_UniCharIsAlnum uintptr 6723 Ftcl_UniCharIsAlpha uintptr 6724 Ftcl_UniCharIsDigit uintptr 6725 Ftcl_UniCharIsLower uintptr 6726 Ftcl_UniCharIsSpace uintptr 6727 Ftcl_UniCharIsUpper uintptr 6728 Ftcl_UniCharIsWordChar uintptr 6729 Ftcl_UniCharLen uintptr 6730 Ftcl_UniCharNcmp uintptr 6731 Ftcl_UniCharToUtfDString uintptr 6732 Ftcl_UtfToUniCharDString uintptr 6733 Ftcl_GetRegExpFromObj uintptr 6734 Ftcl_EvalTokens uintptr 6735 Ftcl_FreeParse uintptr 6736 Ftcl_LogCommandInfo uintptr 6737 Ftcl_ParseBraces uintptr 6738 Ftcl_ParseCommand uintptr 6739 Ftcl_ParseExpr uintptr 6740 Ftcl_ParseQuotedString uintptr 6741 Ftcl_ParseVarName uintptr 6742 Ftcl_GetCwd uintptr 6743 Ftcl_Chdir uintptr 6744 Ftcl_Access uintptr 6745 Ftcl_Stat uintptr 6746 Ftcl_UtfNcmp uintptr 6747 Ftcl_UtfNcasecmp uintptr 6748 Ftcl_StringCaseMatch uintptr 6749 Ftcl_UniCharIsControl uintptr 6750 Ftcl_UniCharIsGraph uintptr 6751 Ftcl_UniCharIsPrint uintptr 6752 Ftcl_UniCharIsPunct uintptr 6753 Ftcl_RegExpExecObj uintptr 6754 Ftcl_RegExpGetInfo uintptr 6755 Ftcl_NewUnicodeObj uintptr 6756 Ftcl_SetUnicodeObj uintptr 6757 Ftcl_GetCharLength uintptr 6758 Ftcl_GetUniChar uintptr 6759 Ftcl_GetUnicode uintptr 6760 Ftcl_GetRange uintptr 6761 Ftcl_AppendUnicodeToObj uintptr 6762 Ftcl_RegExpMatchObj uintptr 6763 Ftcl_SetNotifier uintptr 6764 Ftcl_GetAllocMutex uintptr 6765 Ftcl_GetChannelNames uintptr 6766 Ftcl_GetChannelNamesEx uintptr 6767 Ftcl_ProcObjCmd uintptr 6768 Ftcl_ConditionFinalize uintptr 6769 Ftcl_MutexFinalize uintptr 6770 Ftcl_CreateThread uintptr 6771 Ftcl_ReadRaw uintptr 6772 Ftcl_WriteRaw uintptr 6773 Ftcl_GetTopChannel uintptr 6774 Ftcl_ChannelBuffered uintptr 6775 Ftcl_ChannelName uintptr 6776 Ftcl_ChannelVersion uintptr 6777 Ftcl_ChannelBlockModeProc uintptr 6778 Ftcl_ChannelCloseProc uintptr 6779 Ftcl_ChannelClose2Proc uintptr 6780 Ftcl_ChannelInputProc uintptr 6781 Ftcl_ChannelOutputProc uintptr 6782 Ftcl_ChannelSeekProc uintptr 6783 Ftcl_ChannelSetOptionProc uintptr 6784 Ftcl_ChannelGetOptionProc uintptr 6785 Ftcl_ChannelWatchProc uintptr 6786 Ftcl_ChannelGetHandleProc uintptr 6787 Ftcl_ChannelFlushProc uintptr 6788 Ftcl_ChannelHandlerProc uintptr 6789 Ftcl_JoinThread uintptr 6790 Ftcl_IsChannelShared uintptr 6791 Ftcl_IsChannelRegistered uintptr 6792 Ftcl_CutChannel uintptr 6793 Ftcl_SpliceChannel uintptr 6794 Ftcl_ClearChannelHandlers uintptr 6795 Ftcl_IsChannelExisting uintptr 6796 Ftcl_UniCharNcasecmp uintptr 6797 Ftcl_UniCharCaseMatch uintptr 6798 Ftcl_FindHashEntry uintptr 6799 Ftcl_CreateHashEntry uintptr 6800 Ftcl_InitCustomHashTable uintptr 6801 Ftcl_InitObjHashTable uintptr 6802 Ftcl_CommandTraceInfo uintptr 6803 Ftcl_TraceCommand uintptr 6804 Ftcl_UntraceCommand uintptr 6805 Ftcl_AttemptAlloc uintptr 6806 Ftcl_AttemptDbCkalloc uintptr 6807 Ftcl_AttemptRealloc uintptr 6808 Ftcl_AttemptDbCkrealloc uintptr 6809 Ftcl_AttemptSetObjLength uintptr 6810 Ftcl_GetChannelThread uintptr 6811 Ftcl_GetUnicodeFromObj uintptr 6812 Ftcl_GetMathFuncInfo uintptr 6813 Ftcl_ListMathFuncs uintptr 6814 Ftcl_SubstObj uintptr 6815 Ftcl_DetachChannel uintptr 6816 Ftcl_IsStandardChannel uintptr 6817 Ftcl_FSCopyFile uintptr 6818 Ftcl_FSCopyDirectory uintptr 6819 Ftcl_FSCreateDirectory uintptr 6820 Ftcl_FSDeleteFile uintptr 6821 Ftcl_FSLoadFile uintptr 6822 Ftcl_FSMatchInDirectory uintptr 6823 Ftcl_FSLink uintptr 6824 Ftcl_FSRemoveDirectory uintptr 6825 Ftcl_FSRenameFile uintptr 6826 Ftcl_FSLstat uintptr 6827 Ftcl_FSUtime uintptr 6828 Ftcl_FSFileAttrsGet uintptr 6829 Ftcl_FSFileAttrsSet uintptr 6830 Ftcl_FSFileAttrStrings uintptr 6831 Ftcl_FSStat uintptr 6832 Ftcl_FSAccess uintptr 6833 Ftcl_FSOpenFileChannel uintptr 6834 Ftcl_FSGetCwd uintptr 6835 Ftcl_FSChdir uintptr 6836 Ftcl_FSConvertToPathType uintptr 6837 Ftcl_FSJoinPath uintptr 6838 Ftcl_FSSplitPath uintptr 6839 Ftcl_FSEqualPaths uintptr 6840 Ftcl_FSGetNormalizedPath uintptr 6841 Ftcl_FSJoinToPath uintptr 6842 Ftcl_FSGetInternalRep uintptr 6843 Ftcl_FSGetTranslatedPath uintptr 6844 Ftcl_FSEvalFile uintptr 6845 Ftcl_FSNewNativePath uintptr 6846 Ftcl_FSGetNativePath uintptr 6847 Ftcl_FSFileSystemInfo uintptr 6848 Ftcl_FSPathSeparator uintptr 6849 Ftcl_FSListVolumes uintptr 6850 Ftcl_FSRegister uintptr 6851 Ftcl_FSUnregister uintptr 6852 Ftcl_FSData uintptr 6853 Ftcl_FSGetTranslatedStringPath uintptr 6854 Ftcl_FSGetFileSystemForPath uintptr 6855 Ftcl_FSGetPathType uintptr 6856 Ftcl_OutputBuffered uintptr 6857 Ftcl_FSMountsChanged uintptr 6858 Ftcl_EvalTokensStandard uintptr 6859 Ftcl_GetTime uintptr 6860 Ftcl_CreateObjTrace uintptr 6861 Ftcl_GetCommandInfoFromToken uintptr 6862 Ftcl_SetCommandInfoFromToken uintptr 6863 Ftcl_DbNewWideIntObj uintptr 6864 Ftcl_GetWideIntFromObj uintptr 6865 Ftcl_NewWideIntObj uintptr 6866 Ftcl_SetWideIntObj uintptr 6867 Ftcl_AllocStatBuf uintptr 6868 Ftcl_Seek uintptr 6869 Ftcl_Tell uintptr 6870 Ftcl_ChannelWideSeekProc uintptr 6871 Ftcl_DictObjPut uintptr 6872 Ftcl_DictObjGet uintptr 6873 Ftcl_DictObjRemove uintptr 6874 Ftcl_DictObjSize uintptr 6875 Ftcl_DictObjFirst uintptr 6876 Ftcl_DictObjNext uintptr 6877 Ftcl_DictObjDone uintptr 6878 Ftcl_DictObjPutKeyList uintptr 6879 Ftcl_DictObjRemoveKeyList uintptr 6880 Ftcl_NewDictObj uintptr 6881 Ftcl_DbNewDictObj uintptr 6882 Ftcl_RegisterConfig uintptr 6883 Ftcl_CreateNamespace uintptr 6884 Ftcl_DeleteNamespace uintptr 6885 Ftcl_AppendExportList uintptr 6886 Ftcl_Export uintptr 6887 Ftcl_Import uintptr 6888 Ftcl_ForgetImport uintptr 6889 Ftcl_GetCurrentNamespace uintptr 6890 Ftcl_GetGlobalNamespace uintptr 6891 Ftcl_FindNamespace uintptr 6892 Ftcl_FindCommand uintptr 6893 Ftcl_GetCommandFromObj uintptr 6894 Ftcl_GetCommandFullName uintptr 6895 Ftcl_FSEvalFileEx uintptr 6896 Ftcl_SetExitProc uintptr 6897 Ftcl_LimitAddHandler uintptr 6898 Ftcl_LimitRemoveHandler uintptr 6899 Ftcl_LimitReady uintptr 6900 Ftcl_LimitCheck uintptr 6901 Ftcl_LimitExceeded uintptr 6902 Ftcl_LimitSetCommands uintptr 6903 Ftcl_LimitSetTime uintptr 6904 Ftcl_LimitSetGranularity uintptr 6905 Ftcl_LimitTypeEnabled uintptr 6906 Ftcl_LimitTypeExceeded uintptr 6907 Ftcl_LimitTypeSet uintptr 6908 Ftcl_LimitTypeReset uintptr 6909 Ftcl_LimitGetCommands uintptr 6910 Ftcl_LimitGetTime uintptr 6911 Ftcl_LimitGetGranularity uintptr 6912 Ftcl_SaveInterpState uintptr 6913 Ftcl_RestoreInterpState uintptr 6914 Ftcl_DiscardInterpState uintptr 6915 Ftcl_SetReturnOptions uintptr 6916 Ftcl_GetReturnOptions uintptr 6917 Ftcl_IsEnsemble uintptr 6918 Ftcl_CreateEnsemble uintptr 6919 Ftcl_FindEnsemble uintptr 6920 Ftcl_SetEnsembleSubcommandList uintptr 6921 Ftcl_SetEnsembleMappingDict uintptr 6922 Ftcl_SetEnsembleUnknownHandler uintptr 6923 Ftcl_SetEnsembleFlags uintptr 6924 Ftcl_GetEnsembleSubcommandList uintptr 6925 Ftcl_GetEnsembleMappingDict uintptr 6926 Ftcl_GetEnsembleUnknownHandler uintptr 6927 Ftcl_GetEnsembleFlags uintptr 6928 Ftcl_GetEnsembleNamespace uintptr 6929 Ftcl_SetTimeProc uintptr 6930 Ftcl_QueryTimeProc uintptr 6931 Ftcl_ChannelThreadActionProc uintptr 6932 Ftcl_NewBignumObj uintptr 6933 Ftcl_DbNewBignumObj uintptr 6934 Ftcl_SetBignumObj uintptr 6935 Ftcl_GetBignumFromObj uintptr 6936 Ftcl_TakeBignumFromObj uintptr 6937 Ftcl_TruncateChannel uintptr 6938 Ftcl_ChannelTruncateProc uintptr 6939 Ftcl_SetChannelErrorInterp uintptr 6940 Ftcl_GetChannelErrorInterp uintptr 6941 Ftcl_SetChannelError uintptr 6942 Ftcl_GetChannelError uintptr 6943 Ftcl_InitBignumFromDouble uintptr 6944 Ftcl_GetNamespaceUnknownHandler uintptr 6945 Ftcl_SetNamespaceUnknownHandler uintptr 6946 Ftcl_GetEncodingFromObj uintptr 6947 Ftcl_GetEncodingSearchPath uintptr 6948 Ftcl_SetEncodingSearchPath uintptr 6949 Ftcl_GetEncodingNameFromEnvironment uintptr 6950 Ftcl_PkgRequireProc uintptr 6951 Ftcl_AppendObjToErrorInfo uintptr 6952 Ftcl_AppendLimitedToObj uintptr 6953 Ftcl_Format uintptr 6954 Ftcl_AppendFormatToObj uintptr 6955 Ftcl_ObjPrintf uintptr 6956 Ftcl_AppendPrintfToObj uintptr 6957 Ftcl_CancelEval uintptr 6958 Ftcl_Canceled uintptr 6959 Ftcl_CreatePipe uintptr 6960 Ftcl_NRCreateCommand uintptr 6961 Ftcl_NREvalObj uintptr 6962 Ftcl_NREvalObjv uintptr 6963 Ftcl_NRCmdSwap uintptr 6964 Ftcl_NRAddCallback uintptr 6965 Ftcl_NRCallObjProc uintptr 6966 Ftcl_GetFSDeviceFromStat uintptr 6967 Ftcl_GetFSInodeFromStat uintptr 6968 Ftcl_GetModeFromStat uintptr 6969 Ftcl_GetLinkCountFromStat uintptr 6970 Ftcl_GetUserIdFromStat uintptr 6971 Ftcl_GetGroupIdFromStat uintptr 6972 Ftcl_GetDeviceTypeFromStat uintptr 6973 Ftcl_GetAccessTimeFromStat uintptr 6974 Ftcl_GetModificationTimeFromStat uintptr 6975 Ftcl_GetChangeTimeFromStat uintptr 6976 Ftcl_GetSizeFromStat uintptr 6977 Ftcl_GetBlocksFromStat uintptr 6978 Ftcl_GetBlockSizeFromStat uintptr 6979 Ftcl_SetEnsembleParameterList uintptr 6980 Ftcl_GetEnsembleParameterList uintptr 6981 Ftcl_ParseArgsObjv uintptr 6982 Ftcl_GetErrorLine uintptr 6983 Ftcl_SetErrorLine uintptr 6984 Ftcl_TransferResult uintptr 6985 Ftcl_InterpActive uintptr 6986 Ftcl_BackgroundException uintptr 6987 Ftcl_ZlibDeflate uintptr 6988 Ftcl_ZlibInflate uintptr 6989 Ftcl_ZlibCRC32 uintptr 6990 Ftcl_ZlibAdler32 uintptr 6991 Ftcl_ZlibStreamInit uintptr 6992 Ftcl_ZlibStreamGetCommandName uintptr 6993 Ftcl_ZlibStreamEof uintptr 6994 Ftcl_ZlibStreamChecksum uintptr 6995 Ftcl_ZlibStreamPut uintptr 6996 Ftcl_ZlibStreamGet uintptr 6997 Ftcl_ZlibStreamClose uintptr 6998 Ftcl_ZlibStreamReset uintptr 6999 Ftcl_SetStartupScript uintptr 7000 Ftcl_GetStartupScript uintptr 7001 Ftcl_CloseEx uintptr 7002 Ftcl_NRExprObj uintptr 7003 Ftcl_NRSubstObj uintptr 7004 Ftcl_LoadFile uintptr 7005 Ftcl_FindSymbol uintptr 7006 Ftcl_FSUnloadFile uintptr 7007 Ftcl_ZlibStreamSetCompressionDictionary uintptr 7008 Freserved631 uintptr 7009 Freserved632 uintptr 7010 Freserved633 uintptr 7011 Freserved634 uintptr 7012 Freserved635 uintptr 7013 Freserved636 uintptr 7014 Freserved637 uintptr 7015 Freserved638 uintptr 7016 Freserved639 uintptr 7017 Freserved640 uintptr 7018 Freserved641 uintptr 7019 Freserved642 uintptr 7020 Freserved643 uintptr 7021 Freserved644 uintptr 7022 Freserved645 uintptr 7023 Freserved646 uintptr 7024 Freserved647 uintptr 7025 Freserved648 uintptr 7026 Freserved649 uintptr 7027 Freserved650 uintptr 7028 Freserved651 uintptr 7029 Freserved652 uintptr 7030 Freserved653 uintptr 7031 Freserved654 uintptr 7032 Freserved655 uintptr 7033 Freserved656 uintptr 7034 Freserved657 uintptr 7035 Freserved658 uintptr 7036 Freserved659 uintptr 7037 FtclUnusedStubEntry uintptr 7038 } 7039 7040 type TclStubs = TclStubs1 7041 7042 type TclPlatStubs = TclPlatStubs1 7043 7044 func dbHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 7045 bp := tls.Alloc(88) 7046 defer tls.Free(88) 7047 7048 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 7049 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 7050 return TCL_ERROR 7051 } 7052 7053 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 7054 return TCL_OK 7055 } 7056 7057 func testExpertCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7058 bp := tls.Alloc(212) 7059 defer tls.Free(212) 7060 7061 var pExpert uintptr = clientData 7062 *(*[6]Subcmd)(unsafe.Pointer(bp)) = [6]Subcmd{ 7063 {FzSub: ts + 1947, FnArg: 1, FzMsg: ts + 1951}, 7064 {FzSub: ts + 1957, FzMsg: ts + 584}, 7065 {FzSub: ts + 1965, FzMsg: ts + 584}, 7066 {FzSub: ts + 1971, FnArg: 2, FzMsg: ts + 1978}, 7067 {FzSub: ts + 1991, FzMsg: ts + 584}, 7068 {}, 7069 } 7070 7071 var rc int32 = TCL_OK 7072 *(*uintptr)(unsafe.Pointer(bp + 152)) = uintptr(0) 7073 7074 if objc < 2 { 7075 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 7076 return TCL_ERROR 7077 } 7078 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 7079 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(Subcmd{})), ts+2014, 0, bp+144) 7080 if rc != TCL_OK { 7081 return rc 7082 } 7083 if objc != 2+(*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FnArg { 7084 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FzMsg) 7085 return TCL_ERROR 7086 } 7087 7088 switch *(*int32)(unsafe.Pointer(bp + 144)) { 7089 case 0: 7090 { 7091 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7092 rc = sqlite3_expert_sql(tls, pExpert, zArg, bp+152) 7093 break 7094 7095 } 7096 7097 case 1: 7098 { 7099 rc = sqlite3_expert_analyze(tls, pExpert, bp+152) 7100 break 7101 7102 } 7103 7104 case 2: 7105 { 7106 var n int32 = sqlite3_expert_count(tls, pExpert) 7107 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, n)) 7108 break 7109 7110 } 7111 7112 case 3: 7113 { 7114 *(*[5]uintptr)(unsafe.Pointer(bp + 168)) = [5]uintptr{ 7115 ts + 1947, ts + 2026, ts + 2034, ts + 2039, uintptr(0), 7116 } 7117 7118 var zReport uintptr 7119 7120 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+160) != 0 || 7121 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168, int32(unsafe.Sizeof(uintptr(0))), ts+1971, 0, bp+208) != 0 { 7122 return TCL_ERROR 7123 } 7124 7125 zReport = sqlite3_expert_report(tls, pExpert, *(*int32)(unsafe.Pointer(bp + 160)), 1+*(*int32)(unsafe.Pointer(bp + 208))) 7126 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zReport, -1)) 7127 break 7128 7129 } 7130 7131 default: 7132 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 7133 break 7134 } 7135 7136 if rc != TCL_OK { 7137 if *(*uintptr)(unsafe.Pointer(bp + 152)) != 0 { 7138 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 152)), -1)) 7139 } else { 7140 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 7141 } 7142 } 7143 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 152))) 7144 return rc 7145 } 7146 7147 type Subcmd = struct { 7148 FzSub uintptr 7149 FnArg int32 7150 F__ccgo_pad1 [4]byte 7151 FzMsg uintptr 7152 } 7153 7154 func testExpertDel(tls *libc.TLS, clientData uintptr) { 7155 var pExpert uintptr = clientData 7156 sqlite3_expert_destroy(tls, pExpert) 7157 } 7158 7159 func test_sqlite3_expert_new(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7160 bp := tls.Alloc(56) 7161 defer tls.Free(56) 7162 7163 var zCmd uintptr = uintptr(0) 7164 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7165 var pExpert uintptr 7166 var rc int32 = TCL_OK 7167 7168 if objc != 2 { 7169 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 7170 return TCL_ERROR 7171 } 7172 if dbHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) != 0 { 7173 return TCL_ERROR 7174 } 7175 7176 zCmd = sqlite3.Xsqlite3_mprintf(tls, ts+2053, libc.VaList(bp, libc.PreIncInt32(&iCmd, 1))) 7177 if zCmd == uintptr(0) { 7178 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, ts+2069, uintptr(0))) 7179 return TCL_ERROR 7180 } 7181 7182 pExpert = sqlite3_expert_new(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48) 7183 if pExpert == uintptr(0) { 7184 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 48)), uintptr(0))) 7185 rc = TCL_ERROR 7186 } else { 7187 var p uintptr = pExpert 7188 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 7189 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7190 }{testExpertCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testExpertDel}))) 7191 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zCmd, -1)) 7192 } 7193 7194 sqlite3.Xsqlite3_free(tls, zCmd) 7195 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 7196 return rc 7197 } 7198 7199 var iCmd int32 = 0 7200 7201 func TestExpert_Init(tls *libc.TLS, interp uintptr) int32 { 7202 bp := tls.Alloc(16) 7203 defer tls.Free(16) 7204 7205 *(*[1]struct { 7206 FzCmd uintptr 7207 FxProc uintptr 7208 })(unsafe.Pointer(bp)) = [1]struct { 7209 FzCmd uintptr 7210 FxProc uintptr 7211 }{ 7212 {FzCmd: ts + 2083, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 7213 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7214 }{test_sqlite3_expert_new}))}, 7215 } 7216 var i int32 7217 7218 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]struct { 7219 FzCmd uintptr 7220 FxProc uintptr 7221 }{}))/uint64(unsafe.Sizeof(struct { 7222 FzCmd uintptr 7223 FxProc uintptr 7224 }{})); i++ { 7225 var p uintptr = bp + uintptr(i)*16 7226 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 7227 FzCmd uintptr 7228 FxProc uintptr 7229 })(unsafe.Pointer(p)).FzCmd, (*struct { 7230 FzCmd uintptr 7231 FxProc uintptr 7232 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 7233 } 7234 return TCL_OK 7235 } 7236 7237 func f5tDbPointer(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr) int32 { 7238 bp := tls.Alloc(64) 7239 defer tls.Free(64) 7240 7241 var p uintptr 7242 7243 var z uintptr = tcl.XTcl_GetString(tls, pObj) 7244 if tcl.XTcl_GetCommandInfo(tls, interp, z, bp) != 0 { 7245 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 7246 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 7247 return TCL_OK 7248 } 7249 return TCL_ERROR 7250 } 7251 7252 func f5tResultToErrorCode(tls *libc.TLS, zRes uintptr) int32 { 7253 bp := tls.Alloc(64) 7254 defer tls.Free(64) 7255 7256 *(*[4]ErrorCode)(unsafe.Pointer(bp)) = [4]ErrorCode{ 7257 {Frc: SQLITE_DONE, FzError: ts + 2102}, 7258 {Frc: SQLITE_ERROR, FzError: ts + 2114}, 7259 {FzError: ts + 2127}, 7260 {FzError: ts + 584}, 7261 } 7262 var i int32 7263 7264 for i = 0; uint64(i) < uint64(unsafe.Sizeof([4]ErrorCode{}))/uint64(unsafe.Sizeof(ErrorCode{})); i++ { 7265 if 0 == sqlite3.Xsqlite3_stricmp(tls, zRes, (*ErrorCode)(unsafe.Pointer(bp+uintptr(i)*16)).FzError) { 7266 return (*ErrorCode)(unsafe.Pointer(bp + uintptr(i)*16)).Frc 7267 } 7268 } 7269 7270 return SQLITE_ERROR 7271 } 7272 7273 type ErrorCode = struct { 7274 Frc int32 7275 F__ccgo_pad1 [4]byte 7276 FzError uintptr 7277 } 7278 7279 func f5tDbAndApi(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr, ppApi uintptr) int32 { 7280 bp := tls.Alloc(72) 7281 defer tls.Free(72) 7282 7283 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7284 var rc int32 = f5tDbPointer(tls, interp, pObj, bp+48) 7285 if rc != TCL_OK { 7286 return TCL_ERROR 7287 } else { 7288 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 7289 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 7290 7291 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+2137, -1, bp+56, uintptr(0)) 7292 if rc != SQLITE_OK { 7293 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7294 return TCL_ERROR 7295 } 7296 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), 1, bp+64, ts+2161, uintptr(0)) 7297 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 7298 7299 if sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != SQLITE_OK { 7300 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7301 return TCL_ERROR 7302 } 7303 7304 *(*uintptr)(unsafe.Pointer(ppDb)) = *(*uintptr)(unsafe.Pointer(bp + 48)) 7305 *(*uintptr)(unsafe.Pointer(ppApi)) = *(*uintptr)(unsafe.Pointer(bp + 64)) 7306 } 7307 7308 return TCL_OK 7309 } 7310 7311 type F5tFunction1 = struct { 7312 Finterp uintptr 7313 FpScript uintptr 7314 } 7315 7316 type F5tFunction = F5tFunction1 7317 7318 type F5tApi1 = struct { 7319 FpApi uintptr 7320 FpFts uintptr 7321 } 7322 7323 type F5tApi = F5tApi1 7324 7325 type F5tAuxData1 = struct{ FpObj uintptr } 7326 7327 type F5tAuxData = F5tAuxData1 7328 7329 func xTokenizeCb(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 7330 var p uintptr = pCtx 7331 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7332 var rc int32 7333 7334 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7335 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7336 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iStart)) 7337 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iEnd)) 7338 7339 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7340 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7341 var _objPtr uintptr = pEval 7342 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7343 tcl.XTclFreeObj(tls, _objPtr) 7344 } 7345 } 7346 if rc == TCL_OK { 7347 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7348 } 7349 7350 return rc 7351 } 7352 7353 func xQueryPhraseCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr) int32 { 7354 bp := tls.Alloc(88) 7355 defer tls.Free(88) 7356 7357 var p uintptr = pCtx 7358 var pEval uintptr 7359 var rc int32 7360 7361 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 7362 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 7363 libc.Xsprintf(tls, bp+8, ts+2174, libc.VaList(bp, libc.PostIncInt64(&iCmd1, 1))) 7364 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 7365 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7366 }{xF5tApi})), bp+72, uintptr(0)) 7367 7368 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7369 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7370 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 7371 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7372 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7373 var _objPtr uintptr = pEval 7374 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7375 tcl.XTclFreeObj(tls, _objPtr) 7376 } 7377 } 7378 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 7379 7380 if rc == TCL_OK { 7381 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7382 } 7383 7384 return rc 7385 } 7386 7387 var iCmd1 sqlite3_int64 = int64(0) 7388 7389 func xSetAuxdataDestructor(tls *libc.TLS, p uintptr) { 7390 var pData uintptr = p 7391 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7392 var _objPtr uintptr = (*F5tAuxData)(unsafe.Pointer(pData)).FpObj 7393 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7394 tcl.XTclFreeObj(tls, _objPtr) 7395 } 7396 } 7397 sqlite3.Xsqlite3_free(tls, pData) 7398 } 7399 7400 func xF5tApi(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7401 bp := tls.Alloc(684) 7402 defer tls.Free(684) 7403 7404 *(*[19]Sub)(unsafe.Pointer(bp + 32)) = [19]Sub{ 7405 {FzName: ts + 2185, FzMsg: ts + 584}, 7406 {FzName: ts + 2198, FzMsg: ts + 584}, 7407 {FzName: ts + 2208, FnArg: 1, FzMsg: ts + 2225}, 7408 {FzName: ts + 2229, FnArg: 2, FzMsg: ts + 2239}, 7409 {FzName: ts + 2251, FzMsg: ts + 584}, 7410 {FzName: ts + 2264, FnArg: 1, FzMsg: ts + 2276}, 7411 {FzName: ts + 2283, FzMsg: ts + 584}, 7412 {FzName: ts + 2294, FnArg: 1, FzMsg: ts + 2300}, 7413 {FzName: ts + 2304, FzMsg: ts + 584}, 7414 {FzName: ts + 2311, FnArg: 1, FzMsg: ts + 2225}, 7415 {FzName: ts + 2323, FnArg: 1, FzMsg: ts + 2225}, 7416 {FzName: ts + 2335, FnArg: 2, FzMsg: ts + 2348}, 7417 {FzName: ts + 2362, FnArg: 1, FzMsg: ts + 2374}, 7418 {FzName: ts + 2380, FnArg: 1, FzMsg: ts + 2392}, 7419 {FzName: ts + 2398, FnArg: 1, FzMsg: ts + 2413}, 7420 {FzName: ts + 2421, FnArg: 1, FzMsg: ts + 2392}, 7421 {FzName: ts + 2436, FnArg: 4, FzMsg: ts + 2451}, 7422 {FzName: ts + 2480, FnArg: 3, FzMsg: ts + 2501}, 7423 {}, 7424 } 7425 var rc int32 7426 *(*int32)(unsafe.Pointer(bp + 488)) = 0 7427 var p uintptr = clientData 7428 7429 if objc < 2 { 7430 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 7431 return TCL_ERROR 7432 } 7433 7434 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 7435 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32, int32(unsafe.Sizeof(Sub{})), ts+2523, 0, bp+488) 7436 if rc != TCL_OK { 7437 return rc 7438 } 7439 if (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FnArg != objc-2 { 7440 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FzMsg) 7441 return TCL_ERROR 7442 } 7443 7444 switch *(*int32)(unsafe.Pointer(bp + 488)) { 7445 case 0: 7446 { 7447 var nCol int32 7448 nCol = (*struct { 7449 f func(*libc.TLS, uintptr) int32 7450 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7451 if rc == SQLITE_OK { 7452 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol)) 7453 } 7454 break 7455 7456 } 7457 case 1: 7458 { 7459 rc = (*struct { 7460 f func(*libc.TLS, uintptr, uintptr) int32 7461 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+496) 7462 if rc == SQLITE_OK { 7463 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 496)))) 7464 } 7465 break 7466 7467 } 7468 case 2: 7469 { 7470 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+504) != 0 { 7471 return TCL_ERROR 7472 } 7473 rc = (*struct { 7474 f func(*libc.TLS, uintptr, int32, uintptr) int32 7475 })(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) 7476 if rc == SQLITE_OK { 7477 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 512)))) 7478 } 7479 break 7480 7481 } 7482 case 3: 7483 { 7484 var zText uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+520) 7485 7486 (*F5tFunction)(unsafe.Pointer(bp + 528)).Finterp = interp 7487 (*F5tFunction)(unsafe.Pointer(bp + 528)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7488 rc = (*struct { 7489 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr) int32 7490 })(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 { 7491 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 7492 }{xTokenizeCb}))) 7493 if rc == SQLITE_OK { 7494 tcl.XTcl_ResetResult(tls, interp) 7495 } 7496 return rc 7497 7498 } 7499 case 4: 7500 { 7501 var nPhrase int32 7502 nPhrase = (*struct { 7503 f func(*libc.TLS, uintptr) int32 7504 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7505 if rc == SQLITE_OK { 7506 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPhrase)) 7507 } 7508 break 7509 7510 } 7511 case 5: 7512 { 7513 var sz int32 7514 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+544) != 0 { 7515 return TCL_ERROR 7516 } 7517 sz = (*struct { 7518 f func(*libc.TLS, uintptr, int32) int32 7519 })(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))) 7520 if rc == SQLITE_OK { 7521 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sz)) 7522 } 7523 break 7524 7525 } 7526 case 6: 7527 { 7528 rc = (*struct { 7529 f func(*libc.TLS, uintptr, uintptr) int32 7530 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInstCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+548) 7531 if rc == SQLITE_OK { 7532 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 548)))) 7533 } 7534 break 7535 7536 } 7537 case 7: 7538 { 7539 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+552) != 0 { 7540 return TCL_ERROR 7541 } 7542 rc = (*struct { 7543 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 7544 })(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) 7545 if rc == SQLITE_OK { 7546 var pList uintptr = tcl.XTcl_NewObj(tls) 7547 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 556)))) 7548 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 560)))) 7549 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 564)))) 7550 tcl.XTcl_SetObjResult(tls, interp, pList) 7551 } 7552 break 7553 7554 } 7555 case 8: 7556 { 7557 var iRowid sqlite3_int64 = (*struct { 7558 f func(*libc.TLS, uintptr) sqlite3_int64 7559 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowid})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7560 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iRowid)) 7561 break 7562 7563 } 7564 case 9: 7565 { 7566 *(*uintptr)(unsafe.Pointer(bp + 576)) = uintptr(0) 7567 *(*int32)(unsafe.Pointer(bp + 584)) = 0 7568 7569 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+568) != 0 { 7570 return TCL_ERROR 7571 } 7572 rc = (*struct { 7573 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7574 })(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) 7575 if rc == SQLITE_OK { 7576 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 576)), *(*int32)(unsafe.Pointer(bp + 584)))) 7577 } 7578 break 7579 7580 } 7581 case 10: 7582 { 7583 *(*int32)(unsafe.Pointer(bp + 592)) = 0 7584 7585 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+588) != 0 { 7586 return TCL_ERROR 7587 } 7588 rc = (*struct { 7589 f func(*libc.TLS, uintptr, int32, uintptr) int32 7590 })(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) 7591 if rc == SQLITE_OK { 7592 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 592)))) 7593 } 7594 break 7595 7596 } 7597 case 11: 7598 { 7599 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+596) != 0 { 7600 return TCL_ERROR 7601 } 7602 (*F5tFunction)(unsafe.Pointer(bp + 600)).Finterp = interp 7603 (*F5tFunction)(unsafe.Pointer(bp + 600)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7604 rc = (*struct { 7605 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7606 })(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 { 7607 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7608 }{xQueryPhraseCb}))) 7609 if rc == SQLITE_OK { 7610 tcl.XTcl_ResetResult(tls, interp) 7611 } 7612 break 7613 7614 } 7615 case 12: 7616 { 7617 var pData uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(F5tAuxData{}))) 7618 if pData == uintptr(0) { 7619 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, 0)) 7620 return TCL_ERROR 7621 } 7622 (*F5tAuxData)(unsafe.Pointer(pData)).FpObj = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 7623 (*Tcl_Obj)(unsafe.Pointer((*F5tAuxData)(unsafe.Pointer(pData)).FpObj)).FrefCount++ 7624 rc = (*struct { 7625 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7626 })(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}))) 7627 break 7628 7629 } 7630 case 13: 7631 { 7632 var pData uintptr 7633 7634 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+616) != 0 { 7635 return TCL_ERROR 7636 } 7637 pData = (*struct { 7638 f func(*libc.TLS, uintptr, int32) uintptr 7639 })(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))) 7640 if pData == uintptr(0) { 7641 tcl.XTcl_ResetResult(tls, interp) 7642 } else { 7643 tcl.XTcl_SetObjResult(tls, interp, (*F5tAuxData)(unsafe.Pointer(pData)).FpObj) 7644 if *(*int32)(unsafe.Pointer(bp + 616)) != 0 { 7645 xSetAuxdataDestructor(tls, pData) 7646 } 7647 } 7648 break 7649 7650 } 7651 7652 case 14: 7653 { 7654 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+620) != 0 { 7655 return TCL_ERROR 7656 } 7657 rc = (*struct { 7658 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7659 })(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)) 7660 break 7661 7662 } 7663 case 15: 7664 { 7665 var iVal int32 7666 7667 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+624) != 0 { 7668 return TCL_ERROR 7669 } 7670 iVal = int32((int64((*struct { 7671 f func(*libc.TLS, uintptr, int32) uintptr 7672 })(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) 7673 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iVal)) 7674 break 7675 7676 } 7677 7678 case 16: 7679 { 7680 var zColvar uintptr 7681 var zOffvar uintptr 7682 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 5*8)) 7683 7684 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+628) != 0 { 7685 return TCL_ERROR 7686 } 7687 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 7688 zOffvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 7689 7690 rc = (*struct { 7691 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 7692 })(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) 7693 if rc != SQLITE_OK { 7694 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 7695 return TCL_ERROR 7696 } 7697 for ; *(*int32)(unsafe.Pointer(bp + 648)) >= 0; (*struct { 7698 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 7699 })(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) { 7700 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 648))), 0) 7701 tcl.XTcl_SetVar2Ex(tls, interp, zOffvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 652))), 0) 7702 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 7703 if rc == TCL_CONTINUE { 7704 rc = TCL_OK 7705 } 7706 if rc != TCL_OK { 7707 if rc == TCL_BREAK { 7708 rc = TCL_OK 7709 } 7710 break 7711 } 7712 } 7713 7714 break 7715 7716 } 7717 7718 case 17: 7719 { 7720 var zColvar uintptr 7721 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 7722 7723 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+656) != 0 { 7724 return TCL_ERROR 7725 } 7726 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 7727 7728 rc = (*struct { 7729 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7730 })(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) 7731 if rc != SQLITE_OK { 7732 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 7733 return TCL_ERROR 7734 } 7735 for ; *(*int32)(unsafe.Pointer(bp + 680)) >= 0; (*struct { 7736 f func(*libc.TLS, uintptr, uintptr, uintptr) 7737 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNextColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+664, bp+680) { 7738 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 680))), 0) 7739 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 7740 if rc == TCL_CONTINUE { 7741 rc = TCL_OK 7742 } 7743 if rc != TCL_OK { 7744 if rc == TCL_BREAK { 7745 rc = TCL_OK 7746 } 7747 break 7748 } 7749 } 7750 7751 break 7752 7753 } 7754 7755 default: 7756 break 7757 } 7758 7759 if rc != SQLITE_OK { 7760 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 7761 return TCL_ERROR 7762 } 7763 7764 return TCL_OK 7765 } 7766 7767 type Sub = struct { 7768 FzName uintptr 7769 FnArg int32 7770 F__ccgo_pad1 [4]byte 7771 FzMsg uintptr 7772 } 7773 7774 func xF5tFunction(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 7775 bp := tls.Alloc(112) 7776 defer tls.Free(112) 7777 7778 var p uintptr = (*struct { 7779 f func(*libc.TLS, uintptr) uintptr 7780 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxUserData})).f(tls, pFts) 7781 var pEval uintptr 7782 var i int32 7783 var rc int32 7784 7785 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 7786 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 7787 7788 libc.Xsprintf(tls, bp+8, ts+2535, libc.VaList(bp, libc.PostIncInt64(&iCmd2, 1))) 7789 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 7790 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7791 }{xF5tApi})), bp+72, uintptr(0)) 7792 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7793 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7794 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 7795 7796 for i = 0; i < nVal; i++ { 7797 var pObj uintptr = uintptr(0) 7798 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))) { 7799 case SQLITE_TEXT: 7800 pObj = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), -1) 7801 break 7802 case SQLITE_BLOB: 7803 pObj = tcl.XTcl_NewByteArrayObj(tls, 7804 sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7805 break 7806 case SQLITE_INTEGER: 7807 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7808 break 7809 case SQLITE_FLOAT: 7810 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7811 break 7812 default: 7813 pObj = tcl.XTcl_NewObj(tls) 7814 break 7815 } 7816 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, pObj) 7817 } 7818 7819 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, TCL_GLOBAL_ONLY) 7820 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7821 var _objPtr uintptr = pEval 7822 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7823 tcl.XTclFreeObj(tls, _objPtr) 7824 } 7825 } 7826 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 7827 7828 if rc != TCL_OK { 7829 sqlite3.Xsqlite3_result_error(tls, pCtx, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp), -1) 7830 } else { 7831 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp) 7832 7833 var zType uintptr = func() uintptr { 7834 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 7835 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 7836 } 7837 return ts + 584 7838 }() 7839 var c int8 = *(*int8)(unsafe.Pointer(zType)) 7840 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 7841 var data uintptr = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+88) 7842 sqlite3.Xsqlite3_result_blob(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 7843 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 7844 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pVar, bp+88) 7845 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(bp + 88))) 7846 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 7847 tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+96) 7848 sqlite3.Xsqlite3_result_double(tls, pCtx, *(*float64)(unsafe.Pointer(bp + 96))) 7849 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 7850 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+104) 7851 sqlite3.Xsqlite3_result_int64(tls, pCtx, *(*Tcl_WideInt)(unsafe.Pointer(bp + 104))) 7852 } else { 7853 var data uintptr = tcl.XTcl_GetStringFromObj(tls, pVar, bp+88) 7854 sqlite3.Xsqlite3_result_text(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 7855 } 7856 } 7857 } 7858 7859 var iCmd2 sqlite3_int64 = int64(0) 7860 7861 func xF5tDestroy(tls *libc.TLS, pCtx uintptr) { 7862 var p uintptr = pCtx 7863 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7864 var _objPtr uintptr = (*F5tFunction)(unsafe.Pointer(p)).FpScript 7865 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7866 tcl.XTclFreeObj(tls, _objPtr) 7867 } 7868 } 7869 tcl.XTcl_Free(tls, p) 7870 } 7871 7872 func f5tCreateFunction(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7873 bp := tls.Alloc(40) 7874 defer tls.Free(40) 7875 7876 var zName uintptr 7877 var pScript uintptr 7878 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 7879 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 7880 var pCtx uintptr = uintptr(0) 7881 var rc int32 7882 7883 if objc != 4 { 7884 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 7885 return TCL_ERROR 7886 } 7887 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, bp+32) != 0 { 7888 return TCL_ERROR 7889 } 7890 7891 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7892 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7893 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tFunction{}))) 7894 (*F5tFunction)(unsafe.Pointer(pCtx)).Finterp = interp 7895 (*F5tFunction)(unsafe.Pointer(pCtx)).FpScript = pScript 7896 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 7897 7898 rc = (*struct { 7899 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 7900 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FxCreateFunction})).f(tls, 7901 *(*uintptr)(unsafe.Pointer(bp + 32)), zName, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 7902 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 7903 }{xF5tFunction})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{xF5tDestroy}))) 7904 if rc != SQLITE_OK { 7905 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 24))), 0)) 7906 return TCL_ERROR 7907 } 7908 7909 return TCL_OK 7910 } 7911 7912 type F5tTokenizeCtx1 = struct { 7913 FpRet uintptr 7914 FbSubst int32 7915 F__ccgo_pad1 [4]byte 7916 FzInput uintptr 7917 } 7918 7919 type F5tTokenizeCtx = F5tTokenizeCtx1 7920 7921 func xTokenizeCb2(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 7922 var p uintptr = pCtx 7923 if (*F5tTokenizeCtx)(unsafe.Pointer(p)).FbSubst != 0 { 7924 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7925 tcl.XTcl_ListObjAppendElement(tls, 7926 uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, (*F5tTokenizeCtx)(unsafe.Pointer(p)).FzInput+uintptr(iStart), iEnd-iStart)) 7927 } else { 7928 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7929 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iStart)) 7930 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iEnd)) 7931 } 7932 return SQLITE_OK 7933 } 7934 7935 func f5tTokenize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7936 bp := tls.Alloc(200) 7937 defer tls.Free(200) 7938 7939 var zText uintptr 7940 7941 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 7942 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 7943 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 7944 7945 var pRet uintptr = uintptr(0) 7946 7947 var rc int32 7948 7949 if objc != 4 && objc != 5 { 7950 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2596) 7951 return TCL_ERROR 7952 } 7953 if objc == 5 { 7954 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 7955 if libc.Xstrcmp(tls, ts+2618, zOpt) != 0 { 7956 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2625, zOpt, 0)) 7957 return TCL_ERROR 7958 } 7959 } 7960 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+96, bp+104) != 0 { 7961 return TCL_ERROR 7962 } 7963 if tcl.XTcl_SplitList(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))), bp+112, bp+120) != 0 { 7964 return TCL_ERROR 7965 } 7966 if *(*int32)(unsafe.Pointer(bp + 112)) == 0 { 7967 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2647, 0)) 7968 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 7969 return TCL_ERROR 7970 } 7971 zText = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+128) 7972 7973 rc = (*struct { 7974 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 7975 })(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) 7976 if rc != SQLITE_OK { 7977 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2647, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 120)))), 0)) 7978 return TCL_ERROR 7979 } 7980 7981 rc = (*struct { 7982 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7983 })(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) 7984 if rc != SQLITE_OK { 7985 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+2667, 0)) 7986 return TCL_ERROR 7987 } 7988 7989 pRet = tcl.XTcl_NewObj(tls) 7990 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 7991 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FbSubst = libc.Bool32(objc == 5) 7992 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FpRet = pRet 7993 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FzInput = zText 7994 rc = (*struct { 7995 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 7996 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxTokenize})).f(tls, 7997 *(*uintptr)(unsafe.Pointer(bp + 168)), bp+176, FTS5_TOKENIZE_DOCUMENT, zText, *(*int32)(unsafe.Pointer(bp + 128)), *(*uintptr)(unsafe.Pointer(&struct { 7998 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 7999 }{xTokenizeCb2}))) 8000 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxDelete})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 8001 if rc != SQLITE_OK { 8002 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+80, ts+2696, 0)) 8003 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8004 var _objPtr uintptr = pRet 8005 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8006 tcl.XTclFreeObj(tls, _objPtr) 8007 } 8008 } 8009 return TCL_ERROR 8010 } 8011 8012 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8013 tcl.XTcl_SetObjResult(tls, interp, pRet) 8014 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 8015 var _objPtr uintptr = pRet 8016 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8017 tcl.XTclFreeObj(tls, _objPtr) 8018 } 8019 } 8020 return TCL_OK 8021 } 8022 8023 type F5tTokenizerContext1 = struct { 8024 FpCtx uintptr 8025 FxToken uintptr 8026 } 8027 8028 type F5tTokenizerContext = F5tTokenizerContext1 8029 type F5tTokenizerModule1 = struct { 8030 Finterp uintptr 8031 FpScript uintptr 8032 FpContext uintptr 8033 } 8034 8035 type F5tTokenizerModule = F5tTokenizerModule1 8036 type F5tTokenizerInstance1 = struct { 8037 Finterp uintptr 8038 FpScript uintptr 8039 FpContext uintptr 8040 } 8041 8042 type F5tTokenizerInstance = F5tTokenizerInstance1 8043 8044 func f5tTokenizerCreate(tls *libc.TLS, pCtx uintptr, azArg uintptr, nArg int32, ppOut uintptr) int32 { 8045 var pMod uintptr = pCtx 8046 var pEval uintptr 8047 var rc int32 = TCL_OK 8048 var i int32 8049 8050 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript) 8051 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8052 for i = 0; rc == TCL_OK && i < nArg; i++ { 8053 var pObj uintptr = tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)), -1) 8054 rc = tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, pObj) 8055 } 8056 8057 if rc == TCL_OK { 8058 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, TCL_GLOBAL_ONLY) 8059 } 8060 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8061 var _objPtr uintptr = pEval 8062 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8063 tcl.XTclFreeObj(tls, _objPtr) 8064 } 8065 } 8066 8067 if rc == TCL_OK { 8068 var pInst uintptr 8069 pInst = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerInstance{}))) 8070 libc.Xmemset(tls, pInst, 0, uint64(unsafe.Sizeof(F5tTokenizerInstance{}))) 8071 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp 8072 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript = tcl.XTcl_GetObjResult(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp) 8073 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext 8074 (*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript)).FrefCount++ 8075 *(*uintptr)(unsafe.Pointer(ppOut)) = pInst 8076 } 8077 8078 return rc 8079 } 8080 8081 func f5tTokenizerDelete(tls *libc.TLS, p uintptr) { 8082 var pInst uintptr = p 8083 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8084 var _objPtr uintptr = (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript 8085 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8086 tcl.XTclFreeObj(tls, _objPtr) 8087 } 8088 } 8089 tcl.XTcl_Free(tls, pInst) 8090 } 8091 8092 func f5tTokenizerTokenize(tls *libc.TLS, p uintptr, pCtx uintptr, flags int32, pText uintptr, nText int32, xToken uintptr) int32 { 8093 var pInst uintptr = p 8094 var pOldCtx uintptr 8095 var xOldToken uintptr 8096 var pEval uintptr 8097 var rc int32 8098 var zFlags uintptr 8099 8100 pOldCtx = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx 8101 xOldToken = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken 8102 8103 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pCtx 8104 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xToken 8105 8106 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript) 8107 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8108 switch flags { 8109 case FTS5_TOKENIZE_DOCUMENT: 8110 zFlags = ts + 2727 8111 break 8112 case FTS5_TOKENIZE_AUX: 8113 zFlags = ts + 2736 8114 break 8115 case FTS5_TOKENIZE_QUERY: 8116 zFlags = ts + 2740 8117 break 8118 case FTS5_TOKENIZE_PREFIX | FTS5_TOKENIZE_QUERY: 8119 zFlags = ts + 2746 8120 break 8121 default: 8122 zFlags = ts + 2758 8123 break 8124 } 8125 8126 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zFlags, -1)) 8127 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, pText, nText)) 8128 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, TCL_GLOBAL_ONLY) 8129 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8130 var _objPtr uintptr = pEval 8131 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8132 tcl.XTclFreeObj(tls, _objPtr) 8133 } 8134 } 8135 8136 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pOldCtx 8137 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xOldToken 8138 return rc 8139 } 8140 8141 func f5tTokenizerReturn(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8142 bp := tls.Alloc(32) 8143 defer tls.Free(32) 8144 8145 var p uintptr 8146 8147 var tflags int32 8148 var zToken uintptr 8149 var rc int32 8150 8151 var zArg uintptr 8152 p = clientData 8153 tflags = 0 8154 8155 if !(objc == 5) { 8156 goto __1 8157 } 8158 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 8159 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) { 8160 goto __3 8161 } 8162 tflags = tflags | FTS5_TOKEN_COLOCATED 8163 goto __4 8164 __3: 8165 goto usage 8166 __4: 8167 ; 8168 goto __2 8169 __1: 8170 if !(objc != 4) { 8171 goto __5 8172 } 8173 goto usage 8174 __5: 8175 ; 8176 __2: 8177 ; 8178 zToken = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+20) 8179 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+24) != 0 || 8180 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+28) != 0) { 8181 goto __6 8182 } 8183 return TCL_ERROR 8184 __6: 8185 ; 8186 if !((*F5tTokenizerContext)(unsafe.Pointer(p)).FxToken == uintptr(0)) { 8187 goto __7 8188 } 8189 tcl.XTcl_AppendResult(tls, interp, 8190 libc.VaList(bp, ts+2777, 0)) 8191 return TCL_ERROR 8192 __7: 8193 ; 8194 rc = (*struct { 8195 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8196 })(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))) 8197 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8198 if rc == SQLITE_OK { 8199 return TCL_OK 8200 } 8201 return TCL_ERROR 8202 8203 usage: 8204 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2835) 8205 return TCL_ERROR 8206 } 8207 8208 func f5tDelTokenizer(tls *libc.TLS, pCtx uintptr) { 8209 var pMod uintptr = pCtx 8210 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8211 var _objPtr uintptr = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript 8212 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8213 tcl.XTclFreeObj(tls, _objPtr) 8214 } 8215 } 8216 tcl.XTcl_Free(tls, pMod) 8217 } 8218 8219 func f5tCreateTokenizer(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 8220 bp := tls.Alloc(56) 8221 defer tls.Free(56) 8222 8223 var pContext uintptr = clientData 8224 8225 var zName uintptr 8226 var pScript uintptr 8227 8228 var pMod uintptr 8229 var rc int32 8230 8231 if objc != 4 { 8232 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8233 return TCL_ERROR 8234 } 8235 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, bp+24) != 0 { 8236 return TCL_ERROR 8237 } 8238 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 8239 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8240 8241 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxCreate = *(*uintptr)(unsafe.Pointer(&struct { 8242 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8243 }{f5tTokenizerCreate})) 8244 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxTokenize = *(*uintptr)(unsafe.Pointer(&struct { 8245 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8246 }{f5tTokenizerTokenize})) 8247 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxDelete = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tTokenizerDelete})) 8248 8249 pMod = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerModule{}))) 8250 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp = interp 8251 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript = pScript 8252 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext = pContext 8253 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8254 rc = (*struct { 8255 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr, uintptr) int32 8256 })(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}))) 8257 if rc != SQLITE_OK { 8258 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2863, 0)) 8259 return TCL_ERROR 8260 } 8261 8262 return TCL_OK 8263 } 8264 8265 func xF5tFree(tls *libc.TLS, clientData ClientData) { 8266 tcl.XTcl_Free(tls, clientData) 8267 } 8268 8269 func f5tMayBeCorrupt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8270 return TCL_OK 8271 } 8272 8273 func f5t_fts5HashKey(tls *libc.TLS, nSlot int32, p uintptr, n int32) uint32 { 8274 var i int32 8275 var h uint32 = uint32(13) 8276 for i = n - 1; i >= 0; i-- { 8277 h = h<<3 ^ h ^ uint32(*(*int8)(unsafe.Pointer(p + uintptr(i)))) 8278 } 8279 return h % uint32(nSlot) 8280 } 8281 8282 func f5tTokenHash(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8283 bp := tls.Alloc(8) 8284 defer tls.Free(8) 8285 8286 var z uintptr 8287 8288 var iVal uint32 8289 8290 if objc != 3 { 8291 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2900) 8292 return TCL_ERROR 8293 } 8294 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 8295 return TCL_ERROR 8296 } 8297 z = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 8298 8299 iVal = f5t_fts5HashKey(tls, *(*int32)(unsafe.Pointer(bp)), z, *(*int32)(unsafe.Pointer(bp + 4))) 8300 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(iVal))) 8301 return TCL_OK 8302 } 8303 8304 func f5tRegisterMatchinfo(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8305 bp := tls.Alloc(8) 8306 defer tls.Free(8) 8307 8308 var rc int32 8309 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8310 8311 if objc != 2 { 8312 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8313 return TCL_ERROR 8314 } 8315 if f5tDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 8316 return TCL_ERROR 8317 } 8318 8319 rc = sqlite3Fts5TestRegisterMatchinfo(tls, *(*uintptr)(unsafe.Pointer(bp))) 8320 if rc != SQLITE_OK { 8321 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8322 return TCL_ERROR 8323 } 8324 return TCL_OK 8325 } 8326 8327 func f5tRegisterTok(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8328 bp := tls.Alloc(16) 8329 defer tls.Free(16) 8330 8331 var rc int32 8332 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8333 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 8334 8335 if objc != 2 { 8336 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8337 return TCL_ERROR 8338 } 8339 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 8340 return TCL_ERROR 8341 } 8342 8343 rc = sqlite3Fts5TestRegisterTok(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 8344 if rc != SQLITE_OK { 8345 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8346 return TCL_ERROR 8347 } 8348 return TCL_OK 8349 } 8350 8351 func Fts5tcl_Init(tls *libc.TLS, interp uintptr) int32 { 8352 var i int32 8353 var pContext uintptr 8354 8355 pContext = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerContext{}))) 8356 libc.Xmemset(tls, pContext, 0, uint64(unsafe.Sizeof(F5tTokenizerContext{}))) 8357 8358 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd))/uint64(unsafe.Sizeof(struct { 8359 FzName uintptr 8360 FxProc uintptr 8361 FbTokenizeCtx int32 8362 F__ccgo_pad1 [4]byte 8363 }{})); i++ { 8364 var p uintptr = uintptr(unsafe.Pointer(&aCmd)) + uintptr(i)*24 8365 var pCtx uintptr = uintptr(0) 8366 if (*struct { 8367 FzName uintptr 8368 FxProc uintptr 8369 FbTokenizeCtx int32 8370 F__ccgo_pad1 [4]byte 8371 })(unsafe.Pointer(p)).FbTokenizeCtx != 0 { 8372 pCtx = pContext 8373 } 8374 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 8375 FzName uintptr 8376 FxProc uintptr 8377 FbTokenizeCtx int32 8378 F__ccgo_pad1 [4]byte 8379 })(unsafe.Pointer(p)).FzName, (*struct { 8380 FzName uintptr 8381 FxProc uintptr 8382 FbTokenizeCtx int32 8383 F__ccgo_pad1 [4]byte 8384 })(unsafe.Pointer(p)).FxProc, pCtx, func() uintptr { 8385 if i != 0 { 8386 return uintptr(0) 8387 } 8388 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{xF5tFree})) 8389 }()) 8390 } 8391 8392 return TCL_OK 8393 } 8394 8395 var aCmd = [8]struct { 8396 FzName uintptr 8397 FxProc uintptr 8398 FbTokenizeCtx int32 8399 F__ccgo_pad1 [4]byte 8400 }{ 8401 {FzName: ts + 2912, FxProc: 0, FbTokenizeCtx: 1}, 8402 {FzName: ts + 2942, FxProc: 0, FbTokenizeCtx: 1}, 8403 {FzName: ts + 2961, FxProc: 0}, 8404 {FzName: ts + 2983, FxProc: 0}, 8405 {FzName: ts + 3012, FxProc: 0}, 8406 {FzName: ts + 3040, FxProc: 0}, 8407 {FzName: ts + 3064, FxProc: 0}, 8408 {FzName: ts + 3096, FxProc: 0}, 8409 } 8410 8411 type Fts5MatchinfoCtx1 = struct { 8412 FnCol int32 8413 FnPhrase int32 8414 FzArg uintptr 8415 FnRet int32 8416 F__ccgo_pad1 [4]byte 8417 FaRet uintptr 8418 } 8419 8420 type Fts5MatchinfoCtx = Fts5MatchinfoCtx1 8421 8422 type u32 = uint32 8423 8424 func fts5_api_from_db(tls *libc.TLS, db uintptr, ppApi uintptr) int32 { 8425 bp := tls.Alloc(8) 8426 defer tls.Free(8) 8427 8428 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8429 var rc int32 8430 8431 *(*uintptr)(unsafe.Pointer(ppApi)) = uintptr(0) 8432 rc = sqlite3.Xsqlite3_prepare(tls, db, ts+2137, -1, bp, uintptr(0)) 8433 if rc == SQLITE_OK { 8434 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, ppApi, ts+2161, uintptr(0)) 8435 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) 8436 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 8437 } 8438 8439 return rc 8440 } 8441 8442 func fts5MatchinfoFlagsize(tls *libc.TLS, nCol int32, nPhrase int32, f int8) int32 { 8443 var ret int32 = -1 8444 switch int32(f) { 8445 case 'p': 8446 ret = 1 8447 break 8448 case 'c': 8449 ret = 1 8450 break 8451 case 'x': 8452 ret = 3 * nCol * nPhrase 8453 break 8454 case 'y': 8455 ret = nCol * nPhrase 8456 break 8457 case 'b': 8458 ret = (nCol + 31) / 32 * nPhrase 8459 break 8460 case 'n': 8461 ret = 1 8462 break 8463 case 'a': 8464 ret = nCol 8465 break 8466 case 'l': 8467 ret = nCol 8468 break 8469 case 's': 8470 ret = nCol 8471 break 8472 } 8473 return ret 8474 } 8475 8476 func fts5MatchinfoIter(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, x uintptr) int32 { 8477 var i int32 8478 var n int32 = 0 8479 var rc int32 = SQLITE_OK 8480 var f int8 8481 for i = 0; libc.AssignInt8(&f, *(*int8)(unsafe.Pointer((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg + uintptr(i)))) != 0; i++ { 8482 rc = (*struct { 8483 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8484 })(unsafe.Pointer(&struct{ uintptr }{x})).f(tls, pApi, pFts, p, f, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet+uintptr(n)*4) 8485 if rc != SQLITE_OK { 8486 break 8487 } 8488 n = n + fts5MatchinfoFlagsize(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase, f) 8489 } 8490 return rc 8491 } 8492 8493 func fts5MatchinfoXCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pUserData uintptr) int32 { 8494 bp := tls.Alloc(24) 8495 defer tls.Free(24) 8496 8497 var aOut uintptr = pUserData 8498 var iPrev int32 = -1 8499 8500 for (*struct { 8501 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8502 })(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 { 8503 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8504 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp, bp+16, bp+20) { 8505 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+1)*4))++ 8506 if *(*int32)(unsafe.Pointer(bp + 16)) != iPrev { 8507 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+2)*4))++ 8508 } 8509 iPrev = *(*int32)(unsafe.Pointer(bp + 16)) 8510 } 8511 8512 return SQLITE_OK 8513 } 8514 8515 func fts5MatchinfoGlobalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 8516 bp := tls.Alloc(24) 8517 defer tls.Free(24) 8518 8519 var rc int32 = SQLITE_OK 8520 switch int32(f) { 8521 case 'p': 8522 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase) 8523 break 8524 8525 case 'c': 8526 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol) 8527 break 8528 8529 case 'x': 8530 { 8531 var i int32 8532 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase && rc == SQLITE_OK; i++ { 8533 var pPtr uintptr = aOut + uintptr(i*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*3)*4 8534 rc = (*struct { 8535 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8536 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxQueryPhrase})).f(tls, pFts, i, pPtr, *(*uintptr)(unsafe.Pointer(&struct { 8537 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8538 }{fts5MatchinfoXCb}))) 8539 } 8540 break 8541 8542 } 8543 8544 case 'n': 8545 { 8546 rc = (*struct { 8547 f func(*libc.TLS, uintptr, uintptr) int32 8548 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp) 8549 *(*u32)(unsafe.Pointer(aOut)) = u32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 8550 break 8551 8552 } 8553 8554 case 'a': 8555 { 8556 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = int64(0) 8557 rc = (*struct { 8558 f func(*libc.TLS, uintptr, uintptr) int32 8559 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp+8) 8560 if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 8561 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 8562 } else { 8563 var i int32 8564 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 8565 rc = (*struct { 8566 f func(*libc.TLS, uintptr, int32, uintptr) int32 8567 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnTotalSize})).f(tls, pFts, i, bp+16) 8568 if rc == SQLITE_OK { 8569 *(*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)))) 8570 } 8571 } 8572 } 8573 break 8574 8575 } 8576 8577 } 8578 return rc 8579 } 8580 8581 func fts5MatchinfoLocalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 8582 bp := tls.Alloc(80) 8583 defer tls.Free(80) 8584 8585 var i int32 8586 var rc int32 = SQLITE_OK 8587 8588 switch int32(f) { 8589 case 'b': 8590 { 8591 var iPhrase int32 8592 var nInt int32 = ((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol + 31) / 32 * (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase 8593 for i = 0; i < nInt; i++ { 8594 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(0) 8595 } 8596 8597 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 8598 for (*struct { 8599 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8600 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirstColumn})).f(tls, pFts, iPhrase, bp, bp+16); *(*int32)(unsafe.Pointer(bp + 16)) >= 0; (*struct { 8601 f func(*libc.TLS, uintptr, uintptr, uintptr) 8602 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNextColumn})).f(tls, pFts, bp, bp+16) { 8603 *(*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) 8604 } 8605 } 8606 8607 break 8608 8609 } 8610 8611 case 'x': 8612 fallthrough 8613 case 'y': 8614 { 8615 var nMul int32 = func() int32 { 8616 if int32(f) == 'x' { 8617 return 3 8618 } 8619 return 1 8620 }() 8621 var iPhrase int32 8622 8623 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; i++ { 8624 *(*u32)(unsafe.Pointer(aOut + uintptr(i*nMul)*4)) = u32(0) 8625 } 8626 8627 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 8628 for (*struct { 8629 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8630 })(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 { 8631 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8632 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp+24, bp+40, bp+44) { 8633 *(*u32)(unsafe.Pointer(aOut + uintptr(nMul*(*(*int32)(unsafe.Pointer(bp + 40))+iPhrase*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol))*4))++ 8634 } 8635 } 8636 8637 break 8638 8639 } 8640 8641 case 'l': 8642 { 8643 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 8644 rc = (*struct { 8645 f func(*libc.TLS, uintptr, int32, uintptr) int32 8646 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnSize})).f(tls, pFts, i, bp+48) 8647 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 48))) 8648 } 8649 break 8650 8651 } 8652 8653 case 's': 8654 { 8655 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 8656 8657 rc = (*struct { 8658 f func(*libc.TLS, uintptr, uintptr) int32 8659 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInstCount})).f(tls, pFts, bp+52) 8660 for i = 0; rc == SQLITE_OK && i < *(*int32)(unsafe.Pointer(bp + 52)); i++ { 8661 *(*int32)(unsafe.Pointer(bp + 60)) = 0 8662 var iNextPhrase int32 8663 var iNextOff int32 8664 var nSeq u32 = u32(1) 8665 var j int32 8666 8667 rc = (*struct { 8668 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8669 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, i, bp+56, bp+60, bp+64) 8670 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 56)) + 1 8671 iNextOff = *(*int32)(unsafe.Pointer(bp + 64)) + (*struct { 8672 f func(*libc.TLS, uintptr, int32) int32 8673 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, 0) 8674 for j = i + 1; rc == SQLITE_OK && j < *(*int32)(unsafe.Pointer(bp + 52)); j++ { 8675 rc = (*struct { 8676 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8677 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, j, bp+68, bp+72, bp+76) 8678 if *(*int32)(unsafe.Pointer(bp + 72)) != *(*int32)(unsafe.Pointer(bp + 60)) || *(*int32)(unsafe.Pointer(bp + 76)) > iNextOff { 8679 break 8680 } 8681 if *(*int32)(unsafe.Pointer(bp + 68)) == iNextPhrase && *(*int32)(unsafe.Pointer(bp + 76)) == iNextOff { 8682 nSeq++ 8683 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 68)) + 1 8684 iNextOff = *(*int32)(unsafe.Pointer(bp + 76)) + (*struct { 8685 f func(*libc.TLS, uintptr, int32) int32 8686 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, *(*int32)(unsafe.Pointer(bp + 68))) 8687 } 8688 } 8689 8690 if nSeq > *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) { 8691 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) = nSeq 8692 } 8693 } 8694 8695 break 8696 8697 } 8698 } 8699 return rc 8700 } 8701 8702 func fts5MatchinfoNew(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, zArg uintptr) uintptr { 8703 bp := tls.Alloc(8) 8704 defer tls.Free(8) 8705 8706 var p uintptr 8707 var nCol int32 8708 var nPhrase int32 8709 var i int32 8710 var nInt int32 8711 var nByte sqlite3_int64 8712 var rc int32 8713 8714 nCol = (*struct { 8715 f func(*libc.TLS, uintptr) int32 8716 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnCount})).f(tls, pFts) 8717 nPhrase = (*struct { 8718 f func(*libc.TLS, uintptr) int32 8719 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseCount})).f(tls, pFts) 8720 8721 nInt = 0 8722 for i = 0; *(*int8)(unsafe.Pointer(zArg + uintptr(i))) != 0; i++ { 8723 var n int32 = fts5MatchinfoFlagsize(tls, nCol, nPhrase, *(*int8)(unsafe.Pointer(zArg + uintptr(i)))) 8724 if n < 0 { 8725 var zErr uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+3131, libc.VaList(bp, int32(*(*int8)(unsafe.Pointer(zArg + uintptr(i)))))) 8726 sqlite3.Xsqlite3_result_error(tls, pCtx, zErr, -1) 8727 sqlite3.Xsqlite3_free(tls, zErr) 8728 return uintptr(0) 8729 } 8730 nInt = nInt + n 8731 } 8732 8733 nByte = sqlite3_int64(uint64(unsafe.Sizeof(Fts5MatchinfoCtx{})) + 8734 uint64(unsafe.Sizeof(u32(0)))*uint64(nInt) + 8735 uint64(i+1)) 8736 p = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 8737 if p == uintptr(0) { 8738 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 8739 return uintptr(0) 8740 } 8741 libc.Xmemset(tls, p, 0, uint64(nByte)) 8742 8743 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol = nCol 8744 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase = nPhrase 8745 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet = p + 1*32 8746 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet = nInt 8747 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg = (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet + uintptr(nInt)*4 8748 libc.Xmemcpy(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg, zArg, uint64(i)) 8749 8750 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 8751 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8752 }{fts5MatchinfoGlobalCb}))) 8753 if rc != SQLITE_OK { 8754 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 8755 sqlite3.Xsqlite3_free(tls, p) 8756 p = uintptr(0) 8757 } 8758 8759 return p 8760 } 8761 8762 func fts5MatchinfoFunc(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 8763 var zArg uintptr 8764 var p uintptr 8765 var rc int32 = SQLITE_OK 8766 8767 if nVal > 0 { 8768 zArg = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 8769 } else { 8770 zArg = ts + 3163 8771 } 8772 8773 p = (*struct { 8774 f func(*libc.TLS, uintptr, int32) uintptr 8775 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxGetAuxdata})).f(tls, pFts, 0) 8776 if p == uintptr(0) || sqlite3.Xsqlite3_stricmp(tls, zArg, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg) != 0 { 8777 p = fts5MatchinfoNew(tls, pApi, pFts, pCtx, zArg) 8778 if p == uintptr(0) { 8779 rc = SQLITE_NOMEM 8780 } else { 8781 rc = (*struct { 8782 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8783 })(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}))) 8784 } 8785 } 8786 8787 if rc == SQLITE_OK { 8788 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 8789 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8790 }{fts5MatchinfoLocalCb}))) 8791 } 8792 if rc != SQLITE_OK { 8793 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 8794 } else { 8795 var nByte int32 = int32(uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet) * uint64(unsafe.Sizeof(u32(0)))) 8796 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet, nByte, libc.UintptrFromInt32(-1)) 8797 } 8798 } 8799 8800 func sqlite3Fts5TestRegisterMatchinfo(tls *libc.TLS, db uintptr) int32 { 8801 bp := tls.Alloc(8) 8802 defer tls.Free(8) 8803 8804 var rc int32 8805 8806 rc = fts5_api_from_db(tls, db, bp) 8807 if rc != SQLITE_OK { 8808 return rc 8809 } 8810 8811 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) || (*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FiVersion < 2 { 8812 return SQLITE_ERROR 8813 } 8814 8815 rc = (*struct { 8816 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 8817 })(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 { 8818 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 8819 }{fts5MatchinfoFunc})), uintptr(0)) 8820 8821 return rc 8822 } 8823 8824 type Fts5tokTable1 = struct { 8825 Fbase sqlite3_vtab 8826 Ftok fts5_tokenizer 8827 FpTok uintptr 8828 } 8829 8830 type Fts5tokTable = Fts5tokTable1 8831 type Fts5tokCursor1 = struct { 8832 Fbase sqlite3_vtab_cursor 8833 FiRowid int32 8834 F__ccgo_pad1 [4]byte 8835 FzInput uintptr 8836 FnRow int32 8837 F__ccgo_pad2 [4]byte 8838 FaRow uintptr 8839 } 8840 8841 type Fts5tokCursor = Fts5tokCursor1 8842 type Fts5tokRow1 = struct { 8843 FzToken uintptr 8844 FiStart int32 8845 FiEnd int32 8846 FiPos int32 8847 F__ccgo_pad1 [4]byte 8848 } 8849 8850 type Fts5tokRow = Fts5tokRow1 8851 8852 func fts5tokDequote(tls *libc.TLS, z uintptr) { 8853 var q int8 = *(*int8)(unsafe.Pointer(z)) 8854 8855 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 8856 var iIn int32 = 1 8857 var iOut int32 = 0 8858 if int32(q) == '[' { 8859 q = int8(']') 8860 } 8861 8862 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 8863 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 8864 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 8865 iIn++ 8866 break 8867 } else { 8868 iIn = iIn + 2 8869 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 8870 } 8871 } else { 8872 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 8873 } 8874 } 8875 8876 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 8877 } 8878 } 8879 8880 func fts5tokDequoteArray(tls *libc.TLS, argc int32, argv uintptr, pazDequote uintptr) int32 { 8881 var rc int32 = SQLITE_OK 8882 if argc == 0 { 8883 *(*uintptr)(unsafe.Pointer(pazDequote)) = uintptr(0) 8884 } else { 8885 var i int32 8886 var nByte int32 = 0 8887 var azDequote uintptr 8888 8889 for i = 0; i < argc; i++ { 8890 nByte = nByte + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))+uint64(1)) 8891 } 8892 8893 *(*uintptr)(unsafe.Pointer(pazDequote)) = libc.AssignUintptr(&azDequote, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(argc)+uint64(nByte))) 8894 if azDequote == uintptr(0) { 8895 rc = SQLITE_NOMEM 8896 } else { 8897 var pSpace uintptr = azDequote + uintptr(argc)*8 8898 for i = 0; i < argc; i++ { 8899 var n int32 = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 8900 *(*uintptr)(unsafe.Pointer(azDequote + uintptr(i)*8)) = pSpace 8901 libc.Xmemcpy(tls, pSpace, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), uint64(n+1)) 8902 fts5tokDequote(tls, pSpace) 8903 pSpace += uintptr(n + 1) 8904 } 8905 } 8906 } 8907 8908 return rc 8909 } 8910 8911 func fts5tokConnectMethod(tls *libc.TLS, db uintptr, pCtx uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 8912 bp := tls.Alloc(16) 8913 defer tls.Free(16) 8914 8915 var pApi uintptr = pCtx 8916 var pTab uintptr = uintptr(0) 8917 var rc int32 8918 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8919 var nDequote int32 = 0 8920 8921 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 8922 ts+3177) 8923 8924 if rc == SQLITE_OK { 8925 nDequote = argc - 3 8926 rc = fts5tokDequoteArray(tls, nDequote, argv+3*8, bp) 8927 } 8928 8929 if rc == SQLITE_OK { 8930 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokTable{}))) 8931 if pTab == uintptr(0) { 8932 rc = SQLITE_NOMEM 8933 } else { 8934 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(Fts5tokTable{}))) 8935 } 8936 } 8937 8938 if rc == SQLITE_OK { 8939 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 8940 var zModule uintptr = uintptr(0) 8941 if nDequote > 0 { 8942 zModule = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) 8943 } 8944 8945 rc = (*struct { 8946 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 8947 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(pApi)).FxFindTokenizer})).f(tls, pApi, zModule, bp+8, pTab+24) 8948 if rc == SQLITE_OK { 8949 var azArg uintptr = func() uintptr { 8950 if nDequote > 1 { 8951 return *(*uintptr)(unsafe.Pointer(bp)) + 1*8 8952 } 8953 return uintptr(0) 8954 }() 8955 var nArg int32 8956 if nDequote > 0 { 8957 nArg = nDequote - 1 8958 } else { 8959 nArg = 0 8960 } 8961 rc = (*struct { 8962 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8963 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), azArg, nArg, pTab+48) 8964 } 8965 } 8966 8967 if rc != SQLITE_OK { 8968 sqlite3.Xsqlite3_free(tls, pTab) 8969 pTab = uintptr(0) 8970 } 8971 8972 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 8973 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 8974 return rc 8975 } 8976 8977 func fts5tokDisconnectMethod(tls *libc.TLS, pVtab uintptr) int32 { 8978 var pTab uintptr = pVtab 8979 if (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok != 0 { 8980 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxDelete})).f(tls, (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok) 8981 } 8982 sqlite3.Xsqlite3_free(tls, pTab) 8983 return SQLITE_OK 8984 } 8985 8986 func fts5tokBestIndexMethod(tls *libc.TLS, pVTab uintptr, pInfo uintptr) int32 { 8987 var i int32 8988 8989 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FnConstraint; i++ { 8990 if (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 && 8991 (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).FiColumn == 0 && 8992 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 8993 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 1 8994 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 8995 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 8996 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FestimatedCost = float64(1) 8997 return SQLITE_OK 8998 } 8999 } 9000 9001 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 0 9002 9003 return SQLITE_OK 9004 } 9005 9006 func fts5tokOpenMethod(tls *libc.TLS, pVTab uintptr, ppCsr uintptr) int32 { 9007 var pCsr uintptr 9008 9009 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokCursor{}))) 9010 if pCsr == uintptr(0) { 9011 return SQLITE_NOMEM 9012 } 9013 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(Fts5tokCursor{}))) 9014 9015 *(*uintptr)(unsafe.Pointer(ppCsr)) = pCsr 9016 return SQLITE_OK 9017 } 9018 9019 func fts5tokResetCursor(tls *libc.TLS, pCsr uintptr) { 9020 var i int32 9021 for i = 0; i < (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow; i++ { 9022 sqlite3.Xsqlite3_free(tls, (*Fts5tokRow)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow+uintptr(i)*24)).FzToken) 9023 } 9024 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput) 9025 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow) 9026 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = uintptr(0) 9027 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = uintptr(0) 9028 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow = 0 9029 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid = 0 9030 } 9031 9032 func fts5tokCloseMethod(tls *libc.TLS, pCursor uintptr) int32 { 9033 var pCsr uintptr = pCursor 9034 fts5tokResetCursor(tls, pCsr) 9035 sqlite3.Xsqlite3_free(tls, pCsr) 9036 return SQLITE_OK 9037 } 9038 9039 func fts5tokNextMethod(tls *libc.TLS, pCursor uintptr) int32 { 9040 var pCsr uintptr = pCursor 9041 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid++ 9042 return SQLITE_OK 9043 } 9044 9045 func fts5tokCb(tls *libc.TLS, pCtx uintptr, tflags int32, pToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 9046 var pCsr uintptr = pCtx 9047 var pRow uintptr 9048 9049 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow&((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow-1) == 0 { 9050 var nNew int32 9051 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9052 nNew = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow * 2 9053 } else { 9054 nNew = 32 9055 } 9056 var aNew uintptr 9057 aNew = sqlite3.Xsqlite3_realloc64(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow, uint64(nNew)*uint64(unsafe.Sizeof(Fts5tokRow{}))) 9058 if aNew == uintptr(0) { 9059 return SQLITE_NOMEM 9060 } 9061 libc.Xmemset(tls, aNew+uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24, 0, uint64(unsafe.Sizeof(Fts5tokRow{}))*uint64(nNew-(*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)) 9062 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = aNew 9063 } 9064 9065 pRow = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24 9066 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart = iStart 9067 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd = iEnd 9068 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9069 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos = (*Fts5tokRow)(unsafe.Pointer(pRow+libc.UintptrFromInt32(-1)*24)).FiPos + func() int32 { 9070 if tflags&FTS5_TOKEN_COLOCATED != 0 { 9071 return 0 9072 } 9073 return 1 9074 }() 9075 } 9076 (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken = sqlite3.Xsqlite3_malloc(tls, nToken+1) 9077 if (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken == uintptr(0) { 9078 return SQLITE_NOMEM 9079 } 9080 libc.Xmemcpy(tls, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, pToken, uint64(nToken)) 9081 *(*int8)(unsafe.Pointer((*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken + uintptr(nToken))) = int8(0) 9082 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow++ 9083 9084 return SQLITE_OK 9085 } 9086 9087 func fts5tokFilterMethod(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, nVal int32, apVal uintptr) int32 { 9088 var rc int32 = SQLITE_ERROR 9089 var pCsr uintptr = pCursor 9090 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 9091 9092 fts5tokResetCursor(tls, pCsr) 9093 if idxNum == 1 { 9094 var zByte uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9095 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9096 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = sqlite3.Xsqlite3_malloc(tls, nByte+1) 9097 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput == uintptr(0) { 9098 rc = SQLITE_NOMEM 9099 } else { 9100 if nByte > 0 { 9101 libc.Xmemcpy(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, zByte, uint64(nByte)) 9102 } 9103 *(*int8)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput + uintptr(nByte))) = int8(0) 9104 rc = (*struct { 9105 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 9106 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxTokenize})).f(tls, 9107 (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok, pCsr, 0, zByte, nByte, *(*uintptr)(unsafe.Pointer(&struct { 9108 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 9109 }{fts5tokCb}))) 9110 } 9111 } 9112 9113 if rc != SQLITE_OK { 9114 return rc 9115 } 9116 return fts5tokNextMethod(tls, pCursor) 9117 } 9118 9119 func fts5tokEofMethod(tls *libc.TLS, pCursor uintptr) int32 { 9120 var pCsr uintptr = pCursor 9121 return libc.Bool32((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid > (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow) 9122 } 9123 9124 func fts5tokColumnMethod(tls *libc.TLS, pCursor uintptr, pCtx uintptr, iCol int32) int32 { 9125 var pCsr uintptr = pCursor 9126 var pRow uintptr = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid-1)*24 9127 9128 switch iCol { 9129 case 0: 9130 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, -1, libc.UintptrFromInt32(-1)) 9131 break 9132 case 1: 9133 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, -1, libc.UintptrFromInt32(-1)) 9134 break 9135 case 2: 9136 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart) 9137 break 9138 case 3: 9139 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd) 9140 break 9141 default: 9142 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos) 9143 break 9144 } 9145 return SQLITE_OK 9146 } 9147 9148 func fts5tokRowidMethod(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 9149 var pCsr uintptr = pCursor 9150 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3_int64((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid) 9151 return SQLITE_OK 9152 } 9153 9154 func sqlite3Fts5TestRegisterTok(tls *libc.TLS, db uintptr, pApi uintptr) int32 { 9155 var rc int32 9156 9157 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3235, uintptr(unsafe.Pointer(&fts5tok_module)), pApi) 9158 return rc 9159 } 9160 9161 var fts5tok_module = sqlite3_module{ 9162 FxCreate: 0, 9163 FxConnect: 0, 9164 FxBestIndex: 0, 9165 FxDisconnect: 0, 9166 FxDestroy: 0, 9167 FxOpen: 0, 9168 FxClose: 0, 9169 FxFilter: 0, 9170 FxNext: 0, 9171 FxEof: 0, 9172 FxColumn: 0, 9173 FxRowid: 0, 9174 } 9175 9176 type sqlite3_api_routines = sqlite3_api_routines1 9177 9178 type sqlite3_loadext_entry = uintptr 9179 9180 type ApndVfs = sqlite3_vfs1 9181 type ApndFile1 = struct { 9182 Fbase sqlite3_file 9183 FiPgOne sqlite3_int64 9184 FiMark sqlite3_int64 9185 } 9186 9187 type ApndFile = ApndFile1 9188 9189 var apnd_vfs = sqlite3_vfs{ 9190 FiVersion: 3, 9191 FmxPathname: 1024, 9192 FzName: ts + 3248, 9193 FxOpen: 0, 9194 FxDelete: 0, 9195 FxAccess: 0, 9196 FxFullPathname: 0, 9197 FxDlOpen: 0, 9198 FxDlError: 0, 9199 FxDlSym: 0, 9200 FxDlClose: 0, 9201 FxRandomness: 0, 9202 FxSleep: 0, 9203 FxCurrentTime: 0, 9204 FxGetLastError: 0, 9205 FxCurrentTimeInt64: 0, 9206 FxSetSystemCall: 0, 9207 FxGetSystemCall: 0, 9208 FxNextSystemCall: 0, 9209 } 9210 9211 var apnd_io_methods = sqlite3_io_methods{ 9212 FiVersion: 3, 9213 FxClose: 0, 9214 FxRead: 0, 9215 FxWrite: 0, 9216 FxTruncate: 0, 9217 FxSync: 0, 9218 FxFileSize: 0, 9219 FxLock: 0, 9220 FxUnlock: 0, 9221 FxCheckReservedLock: 0, 9222 FxFileControl: 0, 9223 FxSectorSize: 0, 9224 FxDeviceCharacteristics: 0, 9225 FxShmMap: 0, 9226 FxShmLock: 0, 9227 FxShmBarrier: 0, 9228 FxShmUnmap: 0, 9229 FxFetch: 0, 9230 FxUnfetch: 0, 9231 } 9232 9233 func apndClose(tls *libc.TLS, pFile uintptr) int32 { 9234 pFile = pFile + uintptr(1)*24 9235 return (*struct { 9236 f func(*libc.TLS, uintptr) int32 9237 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 9238 } 9239 9240 func apndRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9241 var paf uintptr = pFile 9242 pFile = pFile + uintptr(1)*24 9243 return (*struct { 9244 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9245 })(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) 9246 } 9247 9248 func apndWriteMark(tls *libc.TLS, paf uintptr, pFile uintptr, iWriteEnd sqlite_int64) int32 { 9249 bp := tls.Alloc(25) 9250 defer tls.Free(25) 9251 9252 var iPgOne sqlite_int64 = (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9253 9254 var i int32 = APND_MARK_FOS_SZ 9255 var rc int32 9256 9257 libc.Xmemcpy(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) 9258 for libc.PreDecInt32(&i, 1) >= 0 { 9259 *(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))) = uint8(iPgOne & int64(0xff)) 9260 iPgOne >>= 8 9261 } 9262 iWriteEnd = iWriteEnd + (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9263 if SQLITE_OK == libc.AssignInt32(&rc, (*struct { 9264 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9265 })(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)) { 9266 (*ApndFile)(unsafe.Pointer(paf)).FiMark = iWriteEnd 9267 } 9268 return rc 9269 } 9270 9271 func apndWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9272 var paf uintptr = pFile 9273 var iWriteEnd sqlite_int64 = iOfst + sqlite_int64(iAmt) 9274 if iWriteEnd >= int64(0x40000000) { 9275 return SQLITE_FULL 9276 } 9277 pFile = pFile + uintptr(1)*24 9278 9279 if (*ApndFile)(unsafe.Pointer(paf)).FiMark < int64(0) || (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iWriteEnd > (*ApndFile)(unsafe.Pointer(paf)).FiMark { 9280 var rc int32 = apndWriteMark(tls, paf, pFile, iWriteEnd) 9281 if SQLITE_OK != rc { 9282 return rc 9283 } 9284 } 9285 return (*struct { 9286 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9287 })(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) 9288 } 9289 9290 func apndTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 9291 var paf uintptr = pFile 9292 pFile = pFile + uintptr(1)*24 9293 9294 if SQLITE_OK != apndWriteMark(tls, paf, pFile, size) { 9295 return SQLITE_IOERR 9296 } 9297 9298 return (*struct { 9299 f func(*libc.TLS, uintptr, sqlite3_int64) int32 9300 })(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)) 9301 } 9302 9303 func apndSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 9304 pFile = pFile + uintptr(1)*24 9305 return (*struct { 9306 f func(*libc.TLS, uintptr, int32) int32 9307 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 9308 } 9309 9310 func apndFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 9311 var paf uintptr = pFile 9312 *(*sqlite_int64)(unsafe.Pointer(pSize)) = func() int64 { 9313 if (*ApndFile)(unsafe.Pointer(paf)).FiMark >= int64(0) { 9314 return (*ApndFile)(unsafe.Pointer(paf)).FiMark - (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9315 } 9316 return int64(0) 9317 }() 9318 return SQLITE_OK 9319 } 9320 9321 func apndLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9322 pFile = pFile + uintptr(1)*24 9323 return (*struct { 9324 f func(*libc.TLS, uintptr, int32) int32 9325 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 9326 } 9327 9328 func apndUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9329 pFile = pFile + uintptr(1)*24 9330 return (*struct { 9331 f func(*libc.TLS, uintptr, int32) int32 9332 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 9333 } 9334 9335 func apndCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 9336 pFile = pFile + uintptr(1)*24 9337 return (*struct { 9338 f func(*libc.TLS, uintptr, uintptr) int32 9339 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 9340 } 9341 9342 func apndFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 9343 bp := tls.Alloc(16) 9344 defer tls.Free(16) 9345 9346 var paf uintptr = pFile 9347 var rc int32 9348 pFile = pFile + uintptr(1)*24 9349 if op == SQLITE_FCNTL_SIZE_HINT { 9350 *(*sqlite3_int64)(unsafe.Pointer(pArg)) += (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9351 } 9352 rc = (*struct { 9353 f func(*libc.TLS, uintptr, int32, uintptr) int32 9354 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 9355 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 9356 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+3274, libc.VaList(bp, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne, *(*uintptr)(unsafe.Pointer(pArg)))) 9357 } 9358 return rc 9359 } 9360 9361 func apndSectorSize(tls *libc.TLS, pFile uintptr) int32 { 9362 pFile = pFile + uintptr(1)*24 9363 return (*struct { 9364 f func(*libc.TLS, uintptr) int32 9365 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 9366 } 9367 9368 func apndDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 9369 pFile = pFile + uintptr(1)*24 9370 return (*struct { 9371 f func(*libc.TLS, uintptr) int32 9372 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 9373 } 9374 9375 func apndShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 9376 pFile = pFile + uintptr(1)*24 9377 return (*struct { 9378 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 9379 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 9380 } 9381 9382 func apndShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 9383 pFile = pFile + uintptr(1)*24 9384 return (*struct { 9385 f func(*libc.TLS, uintptr, int32, int32, int32) int32 9386 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 9387 } 9388 9389 func apndShmBarrier(tls *libc.TLS, pFile uintptr) { 9390 pFile = pFile + uintptr(1)*24 9391 (*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) 9392 } 9393 9394 func apndShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 9395 pFile = pFile + uintptr(1)*24 9396 return (*struct { 9397 f func(*libc.TLS, uintptr, int32) int32 9398 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 9399 } 9400 9401 func apndFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 9402 var p uintptr = pFile 9403 if (*ApndFile)(unsafe.Pointer(p)).FiMark < int64(0) || iOfst+sqlite3_int64(iAmt) > (*ApndFile)(unsafe.Pointer(p)).FiMark { 9404 return SQLITE_IOERR 9405 } 9406 pFile = pFile + uintptr(1)*24 9407 return (*struct { 9408 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 9409 })(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) 9410 } 9411 9412 func apndUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 9413 var p uintptr = pFile 9414 pFile = pFile + uintptr(1)*24 9415 return (*struct { 9416 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 9417 })(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) 9418 } 9419 9420 func apndReadMark(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) sqlite3_int64 { 9421 bp := tls.Alloc(25) 9422 defer tls.Free(25) 9423 9424 var rc int32 9425 var i int32 9426 var iMark sqlite3_int64 9427 var msbs int32 = 8 * (APND_MARK_FOS_SZ - 1) 9428 9429 if int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) != sz&int64(0x1ff) { 9430 return int64(-1) 9431 } 9432 rc = (*struct { 9433 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9434 })(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)) 9435 if rc != 0 { 9436 return int64(-1) 9437 } 9438 if libc.Xmemcmp(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) != 0 { 9439 return int64(-1) 9440 } 9441 iMark = sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(bp + 17)))&0x7f) << msbs 9442 for i = 1; i < 8; i++ { 9443 msbs = msbs - 8 9444 iMark = iMark | sqlite3_int64(*(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))))<<msbs 9445 } 9446 if iMark > sz-int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)-int64(512) { 9447 return int64(-1) 9448 } 9449 if iMark&int64(0x1ff) != 0 { 9450 return int64(-1) 9451 } 9452 return iMark 9453 } 9454 9455 var apvfsSqliteHdr = *(*[16]int8)(unsafe.Pointer(ts + 3288)) 9456 9457 func apndIsAppendvfsDatabase(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9458 bp := tls.Alloc(16) 9459 defer tls.Free(16) 9460 9461 var rc int32 9462 9463 var iMark sqlite3_int64 = apndReadMark(tls, sz, pFile) 9464 if iMark >= int64(0) { 9465 rc = (*struct { 9466 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9467 })(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) 9468 if SQLITE_OK == rc && 9469 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]int8{}))) == 0 && 9470 sz&int64(0x1ff) == int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) && 9471 sz >= int64(512+(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) { 9472 return 1 9473 } 9474 } 9475 return 0 9476 } 9477 9478 func apndIsOrdinaryDatabaseFile(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9479 bp := tls.Alloc(16) 9480 defer tls.Free(16) 9481 9482 if apndIsAppendvfsDatabase(tls, sz, pFile) != 0 || 9483 sz&int64(0x1ff) != int64(0) || 9484 SQLITE_OK != (*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, int32(unsafe.Sizeof([16]int8{})), int64(0)) || 9487 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]int8{}))) != 0 { 9488 return 0 9489 } else { 9490 return 1 9491 } 9492 return int32(0) 9493 } 9494 9495 func apndOpen(tls *libc.TLS, pApndVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 9496 bp := tls.Alloc(8) 9497 defer tls.Free(8) 9498 9499 var pApndFile uintptr = pFile 9500 var pBaseFile uintptr = pFile + uintptr(1)*24 9501 var pBaseVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pApndVfs)).FpAppData 9502 var rc int32 9503 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 9504 if flags&SQLITE_OPEN_MAIN_DB == 0 { 9505 return (*struct { 9506 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9507 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pFile, flags, pOutFlags) 9508 } 9509 libc.Xmemset(tls, pApndFile, 0, uint64(unsafe.Sizeof(ApndFile{}))) 9510 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&apnd_io_methods)) 9511 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = int64(-1) 9512 9513 rc = (*struct { 9514 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9515 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pBaseFile, flags, pOutFlags) 9516 if rc == SQLITE_OK { 9517 rc = (*struct { 9518 f func(*libc.TLS, uintptr, uintptr) int32 9519 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxFileSize})).f(tls, pBaseFile, bp) 9520 if rc != 0 { 9521 (*struct { 9522 f func(*libc.TLS, uintptr) int32 9523 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9524 } 9525 } 9526 if rc != 0 { 9527 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9528 return rc 9529 } 9530 if apndIsOrdinaryDatabaseFile(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pBaseFile) != 0 { 9531 libc.Xmemmove(tls, pApndFile, pBaseFile, uint64((*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FszOsFile)) 9532 return SQLITE_OK 9533 } 9534 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = apndReadMark(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pFile) 9535 if (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne >= int64(0) { 9536 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = *(*sqlite3_int64)(unsafe.Pointer(bp)) - int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) 9537 return SQLITE_OK 9538 } 9539 if flags&SQLITE_OPEN_CREATE == 0 { 9540 (*struct { 9541 f func(*libc.TLS, uintptr) int32 9542 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9543 rc = SQLITE_CANTOPEN 9544 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9545 } else { 9546 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = (*(*sqlite3_int64)(unsafe.Pointer(bp)) + int64(APND_ROUNDUP-1)) & libc.CplInt64(int64(APND_ROUNDUP-1)) 9547 } 9548 return rc 9549 } 9550 9551 func apndDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 9552 return (*struct { 9553 f func(*libc.TLS, uintptr, uintptr, int32) int32 9554 })(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) 9555 } 9556 9557 func apndAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 9558 return (*struct { 9559 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9560 })(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) 9561 } 9562 9563 func apndFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 9564 return (*struct { 9565 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9566 })(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) 9567 } 9568 9569 func apndDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 9570 return (*struct { 9571 f func(*libc.TLS, uintptr, uintptr) uintptr 9572 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 9573 } 9574 9575 func apndDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 9576 (*struct { 9577 f func(*libc.TLS, uintptr, int32, uintptr) 9578 })(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) 9579 } 9580 9581 func apndDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 9582 return (*struct { 9583 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 9584 })(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) 9585 } 9586 9587 func apndDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 9588 (*struct { 9589 f func(*libc.TLS, uintptr, uintptr) 9590 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 9591 } 9592 9593 func apndRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 9594 return (*struct { 9595 f func(*libc.TLS, uintptr, int32, uintptr) int32 9596 })(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) 9597 } 9598 9599 func apndSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 9600 return (*struct { 9601 f func(*libc.TLS, uintptr, int32) int32 9602 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 9603 } 9604 9605 func apndCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 9606 return (*struct { 9607 f func(*libc.TLS, uintptr, uintptr) int32 9608 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 9609 } 9610 9611 func apndGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 9612 return (*struct { 9613 f func(*libc.TLS, uintptr, int32, uintptr) int32 9614 })(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) 9615 } 9616 9617 func apndCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 9618 return (*struct { 9619 f func(*libc.TLS, uintptr, uintptr) int32 9620 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTimeInt64})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p) 9621 } 9622 9623 func apndSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 9624 return (*struct { 9625 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 9626 })(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) 9627 } 9628 9629 func apndGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 9630 return (*struct { 9631 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 9632 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 9633 } 9634 9635 func apndNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 9636 return (*struct { 9637 f func(*libc.TLS, uintptr, uintptr) uintptr 9638 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 9639 } 9640 9641 func sqlite3_appendvfs_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 9642 var rc int32 = SQLITE_OK 9643 var pOrig uintptr 9644 _ = pApi 9645 9646 _ = pzErrMsg 9647 _ = db 9648 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 9649 if pOrig == uintptr(0) { 9650 return SQLITE_ERROR 9651 } 9652 apnd_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 9653 apnd_vfs.FpAppData = pOrig 9654 apnd_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(ApndFile{}))) 9655 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&apnd_vfs)), 0) 9656 if rc == SQLITE_OK { 9657 rc = SQLITE_OK | int32(1)<<8 9658 } 9659 return rc 9660 } 9661 9662 type div_t = struct { 9663 Fquot int32 9664 Frem int32 9665 } 9666 9667 type ldiv_t = struct { 9668 Fquot int64 9669 Frem int64 9670 } 9671 9672 type lldiv_t = struct { 9673 Fquot int64 9674 Frem int64 9675 } 9676 9677 type qdiv_t = struct { 9678 Fquot quad_t 9679 Frem quad_t 9680 } 9681 9682 type amatch_vtab1 = struct { 9683 Fbase sqlite3_vtab 9684 FzClassName uintptr 9685 FzDb uintptr 9686 FzSelf uintptr 9687 FzCostTab uintptr 9688 FzVocabTab uintptr 9689 FzVocabWord uintptr 9690 FzVocabLang uintptr 9691 FpRule uintptr 9692 FrIns amatch_cost 9693 FrDel amatch_cost 9694 FrSub amatch_cost 9695 F__ccgo_pad1 [4]byte 9696 Fdb uintptr 9697 FpVCheck uintptr 9698 FnCursor int32 9699 F__ccgo_pad2 [4]byte 9700 } 9701 9702 type amatch_vtab = amatch_vtab1 9703 type amatch_cursor1 = struct { 9704 Fbase sqlite3_vtab_cursor 9705 FiRowid sqlite3_int64 9706 FiLang amatch_langid 9707 FrLimit amatch_cost 9708 FnBuf int32 9709 FoomErr int32 9710 FnWord int32 9711 F__ccgo_pad1 [4]byte 9712 FzBuf uintptr 9713 FzInput uintptr 9714 FpVtab uintptr 9715 FpAllWords uintptr 9716 FpCurrent uintptr 9717 FpCost uintptr 9718 FpWord uintptr 9719 } 9720 9721 type amatch_cursor = amatch_cursor1 9722 type amatch_rule1 = struct { 9723 FpNext uintptr 9724 FzFrom uintptr 9725 FrCost amatch_cost 9726 FiLang amatch_langid 9727 FnFrom amatch_len 9728 FnTo amatch_len 9729 FzTo [4]int8 9730 F__ccgo_pad1 [2]byte 9731 } 9732 9733 type amatch_rule = amatch_rule1 9734 type amatch_word1 = struct { 9735 FpNext uintptr 9736 FsCost amatch_avl 9737 FsWord amatch_avl 9738 FrCost amatch_cost 9739 FiSeq int32 9740 FzCost [10]int8 9741 FnMatch int16 9742 FzWord [4]int8 9743 } 9744 9745 type amatch_word = amatch_word1 9746 type amatch_avl1 = struct { 9747 FpWord uintptr 9748 FzKey uintptr 9749 FpBefore uintptr 9750 FpAfter uintptr 9751 FpUp uintptr 9752 Fheight int16 9753 Fimbalance int16 9754 F__ccgo_pad1 [4]byte 9755 } 9756 9757 type amatch_avl = amatch_avl1 9758 9759 func amatchAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 9760 var hBefore int16 9761 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 9762 hBefore = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 9763 } else { 9764 hBefore = int16(0) 9765 } 9766 var hAfter int16 9767 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 9768 hAfter = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 9769 } else { 9770 hAfter = int16(0) 9771 } 9772 (*amatch_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 9773 (*amatch_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 9774 if int32(hBefore) > int32(hAfter) { 9775 return int32(hBefore) 9776 } 9777 return int32(hAfter) 9778 }() + 1) 9779 } 9780 9781 func amatchAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 9782 var pB uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpBefore 9783 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pB)).FpAfter 9784 (*amatch_avl)(unsafe.Pointer(pB)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 9785 (*amatch_avl)(unsafe.Pointer(pB)).FpAfter = pP 9786 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pB 9787 (*amatch_avl)(unsafe.Pointer(pP)).FpBefore = pY 9788 if pY != 0 { 9789 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 9790 } 9791 amatchAvlRecomputeHeight(tls, pP) 9792 amatchAvlRecomputeHeight(tls, pB) 9793 return pB 9794 } 9795 9796 func amatchAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 9797 var pA uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpAfter 9798 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pA)).FpBefore 9799 (*amatch_avl)(unsafe.Pointer(pA)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 9800 (*amatch_avl)(unsafe.Pointer(pA)).FpBefore = pP 9801 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pA 9802 (*amatch_avl)(unsafe.Pointer(pP)).FpAfter = pY 9803 if pY != 0 { 9804 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 9805 } 9806 amatchAvlRecomputeHeight(tls, pP) 9807 amatchAvlRecomputeHeight(tls, pA) 9808 return pA 9809 } 9810 9811 func amatchAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 9812 var pUp uintptr = (*amatch_avl)(unsafe.Pointer(p)).FpUp 9813 if pUp == uintptr(0) { 9814 return pp 9815 } 9816 if (*amatch_avl)(unsafe.Pointer(pUp)).FpAfter == p { 9817 return pUp + 24 9818 } 9819 return pUp + 16 9820 } 9821 9822 func amatchAvlBalance(tls *libc.TLS, p uintptr) uintptr { 9823 bp := tls.Alloc(8) 9824 defer tls.Free(8) 9825 *(*uintptr)(unsafe.Pointer(bp)) = p 9826 9827 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 9828 var pp uintptr 9829 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 9830 amatchAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 9831 if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 9832 var pB uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 9833 if int32((*amatch_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 9834 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = amatchAvlRotateAfter(tls, pB) 9835 } 9836 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 9837 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 9838 } else if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 9839 var pA uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 9840 if int32((*amatch_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 9841 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = amatchAvlRotateBefore(tls, pA) 9842 } 9843 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 9844 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 9845 } 9846 pTop = *(*uintptr)(unsafe.Pointer(bp)) 9847 *(*uintptr)(unsafe.Pointer(bp)) = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 9848 } 9849 return pTop 9850 } 9851 9852 func amatchAvlSearch(tls *libc.TLS, p uintptr, zKey uintptr) uintptr { 9853 var c int32 9854 for p != 0 && libc.AssignInt32(&c, libc.Xstrcmp(tls, zKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey)) != 0 { 9855 if c < 0 { 9856 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 9857 } else { 9858 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 9859 } 9860 } 9861 return p 9862 } 9863 9864 func amatchAvlFirst(tls *libc.TLS, p uintptr) uintptr { 9865 if p != 0 { 9866 for (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 9867 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 9868 } 9869 } 9870 return p 9871 } 9872 9873 func amatchAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 9874 var c int32 9875 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 9876 if p == uintptr(0) { 9877 p = pNew 9878 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 9879 } else { 9880 for p != 0 { 9881 c = libc.Xstrcmp(tls, (*amatch_avl)(unsafe.Pointer(pNew)).FzKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey) 9882 if c < 0 { 9883 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 9884 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 9885 } else { 9886 (*amatch_avl)(unsafe.Pointer(p)).FpBefore = pNew 9887 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 9888 break 9889 } 9890 } else if c > 0 { 9891 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 9892 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 9893 } else { 9894 (*amatch_avl)(unsafe.Pointer(p)).FpAfter = pNew 9895 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 9896 break 9897 } 9898 } else { 9899 return p 9900 } 9901 } 9902 } 9903 (*amatch_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 9904 (*amatch_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 9905 (*amatch_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 9906 (*amatch_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 9907 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, p) 9908 9909 return uintptr(0) 9910 } 9911 9912 func amatchAvlRemove(tls *libc.TLS, ppHead uintptr, pOld uintptr) { 9913 var ppParent uintptr 9914 var pBalance uintptr = uintptr(0) 9915 9916 ppParent = amatchAvlFromPtr(tls, pOld, ppHead) 9917 if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 9918 *(*uintptr)(unsafe.Pointer(ppParent)) = uintptr(0) 9919 pBalance = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 9920 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore != 0 && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter != 0 { 9921 var pX uintptr 9922 var pY uintptr 9923 pX = amatchAvlFirst(tls, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 9924 *(*uintptr)(unsafe.Pointer(amatchAvlFromPtr(tls, pX, uintptr(0)))) = (*amatch_avl)(unsafe.Pointer(pX)).FpAfter 9925 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 9926 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 9927 } 9928 pBalance = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 9929 (*amatch_avl)(unsafe.Pointer(pX)).FpAfter = (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter 9930 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 9931 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = pX 9932 } else { 9933 pBalance = pX 9934 } 9935 (*amatch_avl)(unsafe.Pointer(pX)).FpBefore = libc.AssignUintptr(&pY, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 9936 if pY != 0 { 9937 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pX 9938 } 9939 (*amatch_avl)(unsafe.Pointer(pX)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 9940 *(*uintptr)(unsafe.Pointer(ppParent)) = pX 9941 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) { 9942 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 9943 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 9944 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 9945 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 9946 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 9947 } 9948 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, pBalance) 9949 (*amatch_avl)(unsafe.Pointer(pOld)).FpUp = uintptr(0) 9950 (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore = uintptr(0) 9951 (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter = uintptr(0) 9952 9953 } 9954 9955 type amatch_cost = int32 9956 type amatch_len = int8 9957 type amatch_langid = int32 9958 9959 func amatchMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 9960 bp := tls.Alloc(32) 9961 defer tls.Free(32) 9962 9963 var pTail uintptr 9964 9965 pTail = bp 9966 for pA != 0 && pB != 0 { 9967 if (*amatch_rule)(unsafe.Pointer(pA)).FrCost <= (*amatch_rule)(unsafe.Pointer(pB)).FrCost { 9968 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 9969 pTail = pA 9970 pA = (*amatch_rule)(unsafe.Pointer(pA)).FpNext 9971 } else { 9972 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 9973 pTail = pB 9974 pB = (*amatch_rule)(unsafe.Pointer(pB)).FpNext 9975 } 9976 } 9977 if pA == uintptr(0) { 9978 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 9979 } else { 9980 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 9981 } 9982 return (*amatch_rule)(unsafe.Pointer(bp)).FpNext 9983 } 9984 9985 func amatchLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 9986 bp := tls.Alloc(48) 9987 defer tls.Free(48) 9988 9989 var iLang sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 9990 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 9991 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 9992 var rCost amatch_cost = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 9993 9994 var rc int32 = SQLITE_OK 9995 var nFrom int32 9996 var nTo int32 9997 var pRule uintptr = uintptr(0) 9998 9999 if zFrom == uintptr(0) { 10000 zFrom = ts + 584 10001 } 10002 if zTo == uintptr(0) { 10003 zTo = ts + 584 10004 } 10005 nFrom = int32(libc.Xstrlen(tls, zFrom)) 10006 nTo = int32(libc.Xstrlen(tls, zTo)) 10007 10008 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 10009 if int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zFrom + 1))) == 0 { 10010 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrSub > rCost { 10011 (*amatch_vtab)(unsafe.Pointer(p)).FrSub = rCost 10012 } 10013 } 10014 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 10015 return SQLITE_OK 10016 } 10017 10018 if rCost <= 0 || rCost > AMATCH_MX_COST { 10019 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 10020 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_COST)) 10021 rc = SQLITE_ERROR 10022 } else if nFrom > AMATCH_MX_LENGTH || nTo > AMATCH_MX_LENGTH { 10023 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 10024 libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LENGTH)) 10025 rc = SQLITE_ERROR 10026 } else if iLang < int64(0) || iLang > int64(AMATCH_MX_LANGID) { 10027 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3370, 10028 libc.VaList(bp+32, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LANGID)) 10029 rc = SQLITE_ERROR 10030 } else if libc.Xstrcmp(tls, zFrom, ts+584) == 0 && libc.Xstrcmp(tls, zTo, ts+3405) == 0 { 10031 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrIns > rCost { 10032 (*amatch_vtab)(unsafe.Pointer(p)).FrIns = rCost 10033 } 10034 } else if libc.Xstrcmp(tls, zFrom, ts+3405) == 0 && libc.Xstrcmp(tls, zTo, ts+584) == 0 { 10035 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrDel > rCost { 10036 (*amatch_vtab)(unsafe.Pointer(p)).FrDel = rCost 10037 } 10038 } else { 10039 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_rule{}))+uint64(nFrom)+uint64(nTo)) 10040 if pRule == uintptr(0) { 10041 rc = SQLITE_NOMEM 10042 } else { 10043 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(amatch_rule{}))) 10044 (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 26 + uintptr(nTo+1) 10045 (*amatch_rule)(unsafe.Pointer(pRule)).FnFrom = amatch_len(nFrom) 10046 libc.Xmemcpy(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 10047 libc.Xmemcpy(tls, pRule+26, zTo, uint64(nTo+1)) 10048 (*amatch_rule)(unsafe.Pointer(pRule)).FnTo = amatch_len(nTo) 10049 (*amatch_rule)(unsafe.Pointer(pRule)).FrCost = rCost 10050 (*amatch_rule)(unsafe.Pointer(pRule)).FiLang = int32(iLang) 10051 } 10052 } 10053 10054 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 10055 return rc 10056 } 10057 10058 func amatchFreeRules(tls *libc.TLS, p uintptr) { 10059 for (*amatch_vtab)(unsafe.Pointer(p)).FpRule != 0 { 10060 var pRule uintptr = (*amatch_vtab)(unsafe.Pointer(p)).FpRule 10061 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext 10062 sqlite3.Xsqlite3_free(tls, pRule) 10063 } 10064 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = uintptr(0) 10065 } 10066 10067 func amatchLoadRules(tls *libc.TLS, db uintptr, p uintptr, pzErr uintptr) int32 { 10068 bp := tls.Alloc(192) 10069 defer tls.Free(192) 10070 10071 var rc int32 = SQLITE_OK 10072 var zSql uintptr 10073 var pHead uintptr = uintptr(0) 10074 10075 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzDb, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab)) 10076 if zSql == uintptr(0) { 10077 rc = SQLITE_NOMEM 10078 } else { 10079 var rc2 int32 10080 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 10081 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 10082 if rc != SQLITE_OK { 10083 *(*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))) 10084 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 10085 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 10086 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))))) 10087 rc = SQLITE_ERROR 10088 } else { 10089 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 10090 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 10091 rc = amatchLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 10092 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 10093 (*amatch_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 10094 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 10095 } 10096 } 10097 } 10098 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 10099 if rc == SQLITE_OK { 10100 rc = rc2 10101 } 10102 } 10103 sqlite3.Xsqlite3_free(tls, zSql) 10104 10105 if rc == SQLITE_OK { 10106 var i uint32 10107 var pX uintptr 10108 10109 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 10110 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 10111 } 10112 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 10113 pHead = (*amatch_rule)(unsafe.Pointer(pX)).FpNext 10114 (*amatch_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 10115 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++ { 10116 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10117 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 10118 } 10119 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10120 } 10121 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 10122 i = uint32(1) 10123 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 10124 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10125 } 10126 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = amatchMergeRules(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpRule, pX) 10127 } else { 10128 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = pHead 10129 } 10130 10131 return rc 10132 } 10133 10134 func amatchDequote(tls *libc.TLS, zIn uintptr) uintptr { 10135 var nIn sqlite3_int64 10136 var zOut uintptr 10137 10138 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 10139 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 10140 if zOut != 0 { 10141 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 10142 10143 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 10144 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 10145 } else { 10146 var iOut int32 = 0 10147 var iIn int32 10148 10149 if int32(q) == '[' { 10150 q = int8(']') 10151 } 10152 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 10153 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 10154 iIn++ 10155 } 10156 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 10157 } 10158 } 10159 10160 } 10161 return zOut 10162 } 10163 10164 func amatchVCheckClear(tls *libc.TLS, p uintptr) { 10165 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck != 0 { 10166 sqlite3.Xsqlite3_finalize(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10167 (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck = uintptr(0) 10168 } 10169 } 10170 10171 func amatchFree(tls *libc.TLS, p uintptr) { 10172 if p != 0 { 10173 amatchFreeRules(tls, p) 10174 amatchVCheckClear(tls, p) 10175 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName) 10176 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzDb) 10177 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab) 10178 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab) 10179 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord) 10180 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang) 10181 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf) 10182 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 10183 sqlite3.Xsqlite3_free(tls, p) 10184 } 10185 } 10186 10187 func amatchDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 10188 var p uintptr = pVtab 10189 10190 amatchFree(tls, p) 10191 return SQLITE_OK 10192 } 10193 10194 func amatchValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 10195 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 10196 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 10197 var i int32 10198 if nStr < nKey+1 { 10199 return uintptr(0) 10200 } 10201 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 10202 return uintptr(0) 10203 } 10204 for i = nKey; libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0; i++ { 10205 } 10206 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 10207 return uintptr(0) 10208 } 10209 i++ 10210 for libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0 { 10211 i++ 10212 } 10213 return zStr + uintptr(i) 10214 } 10215 10216 func amatchConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 10217 bp := tls.Alloc(32) 10218 defer tls.Free(32) 10219 10220 var rc int32 10221 var pNew uintptr 10222 var zModule uintptr 10223 var zDb uintptr 10224 var zVal uintptr 10225 var i int32 10226 rc = SQLITE_OK 10227 pNew = uintptr(0) 10228 zModule = *(*uintptr)(unsafe.Pointer(argv)) 10229 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 10230 10231 _ = pAux 10232 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10233 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_vtab{}))) 10234 if !(pNew == uintptr(0)) { 10235 goto __1 10236 } 10237 return SQLITE_NOMEM 10238 __1: 10239 ; 10240 rc = SQLITE_NOMEM 10241 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 10242 (*amatch_vtab)(unsafe.Pointer(pNew)).Fdb = db 10243 (*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zModule)) 10244 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName == uintptr(0)) { 10245 goto __2 10246 } 10247 goto amatchConnectError 10248 __2: 10249 ; 10250 (*amatch_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zDb)) 10251 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 10252 goto __3 10253 } 10254 goto amatchConnectError 10255 __3: 10256 ; 10257 (*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 10258 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 10259 goto __4 10260 } 10261 goto amatchConnectError 10262 __4: 10263 ; 10264 i = 3 10265 __5: 10266 if !(i < argc) { 10267 goto __7 10268 } 10269 zVal = amatchValueOfKey(tls, ts+3468, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10270 if !(zVal != 0) { 10271 goto __8 10272 } 10273 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab) 10274 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab = amatchDequote(tls, zVal) 10275 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab == uintptr(0)) { 10276 goto __9 10277 } 10278 goto amatchConnectError 10279 __9: 10280 ; 10281 goto __6 10282 __8: 10283 ; 10284 zVal = amatchValueOfKey(tls, ts+3485, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10285 if !(zVal != 0) { 10286 goto __10 10287 } 10288 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord) 10289 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord = amatchDequote(tls, zVal) 10290 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord == uintptr(0)) { 10291 goto __11 10292 } 10293 goto amatchConnectError 10294 __11: 10295 ; 10296 goto __6 10297 __10: 10298 ; 10299 zVal = amatchValueOfKey(tls, ts+3501, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10300 if !(zVal != 0) { 10301 goto __12 10302 } 10303 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang) 10304 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang = amatchDequote(tls, zVal) 10305 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang == uintptr(0)) { 10306 goto __13 10307 } 10308 goto amatchConnectError 10309 __13: 10310 ; 10311 goto __6 10312 __12: 10313 ; 10314 zVal = amatchValueOfKey(tls, ts+3521, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10315 if !(zVal != 0) { 10316 goto __14 10317 } 10318 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab) 10319 (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab = amatchDequote(tls, zVal) 10320 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10321 goto __15 10322 } 10323 goto amatchConnectError 10324 __15: 10325 ; 10326 goto __6 10327 __14: 10328 ; 10329 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 10330 amatchFree(tls, pNew) 10331 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10332 return SQLITE_ERROR 10333 goto __6 10334 __6: 10335 i++ 10336 goto __5 10337 goto __7 10338 __7: 10339 ; 10340 rc = SQLITE_OK 10341 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10342 goto __16 10343 } 10344 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3565, 0) 10345 rc = SQLITE_ERROR 10346 goto __17 10347 __16: 10348 rc = amatchLoadRules(tls, db, pNew, pzErr) 10349 __17: 10350 ; 10351 if !(rc == SQLITE_OK) { 10352 goto __18 10353 } 10354 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 10355 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 10356 ts+3599) 10357 __18: 10358 ; 10359 if !(rc != SQLITE_OK) { 10360 goto __19 10361 } 10362 amatchFree(tls, pNew) 10363 __19: 10364 ; 10365 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 10366 return rc 10367 10368 amatchConnectError: 10369 amatchFree(tls, pNew) 10370 return rc 10371 } 10372 10373 func amatchOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 10374 var p uintptr = pVTab 10375 var pCur uintptr 10376 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_cursor{}))) 10377 if pCur == uintptr(0) { 10378 return SQLITE_NOMEM 10379 } 10380 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(amatch_cursor{}))) 10381 (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab = p 10382 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 10383 (*amatch_vtab)(unsafe.Pointer(p)).FnCursor++ 10384 return SQLITE_OK 10385 } 10386 10387 func amatchClearCursor(tls *libc.TLS, pCur uintptr) { 10388 var pWord uintptr 10389 var pNextWord uintptr 10390 for pWord = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords; pWord != 0; pWord = pNextWord { 10391 pNextWord = (*amatch_word)(unsafe.Pointer(pWord)).FpNext 10392 sqlite3.Xsqlite3_free(tls, pWord) 10393 } 10394 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = uintptr(0) 10395 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput) 10396 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = uintptr(0) 10397 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10398 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = uintptr(0) 10399 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 10400 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost = uintptr(0) 10401 (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord = uintptr(0) 10402 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 10403 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = 1000000 10404 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = 0 10405 (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord = 0 10406 } 10407 10408 func amatchClose(tls *libc.TLS, cur uintptr) int32 { 10409 var pCur uintptr = cur 10410 amatchClearCursor(tls, pCur) 10411 (*amatch_vtab)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 10412 sqlite3.Xsqlite3_free(tls, pCur) 10413 return SQLITE_OK 10414 } 10415 10416 func amatchEncodeInt(tls *libc.TLS, x int32, z uintptr) { 10417 *(*int8)(unsafe.Pointer(z)) = a[x>>18&0x3f] 10418 *(*int8)(unsafe.Pointer(z + 1)) = a[x>>12&0x3f] 10419 *(*int8)(unsafe.Pointer(z + 2)) = a[x>>6&0x3f] 10420 *(*int8)(unsafe.Pointer(z + 3)) = a[x&0x3f] 10421 } 10422 10423 var a = *(*[65]int8)(unsafe.Pointer(ts + 3666)) 10424 10425 func amatchWriteCost(tls *libc.TLS, pWord uintptr) { 10426 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, pWord+112) 10427 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FiSeq, pWord+112+uintptr(4)) 10428 *(*int8)(unsafe.Pointer(pWord + 112 + 8)) = int8(0) 10429 } 10430 10431 func amatchStrcpy(tls *libc.TLS, dest uintptr, src uintptr) { 10432 for int32(libc.AssignPtrInt8(libc.PostIncUintptr(&dest, 1), *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&src, 1))))) != 0 { 10433 } 10434 } 10435 10436 func amatchStrcat(tls *libc.TLS, dest uintptr, src uintptr) { 10437 for *(*int8)(unsafe.Pointer(dest)) != 0 { 10438 dest++ 10439 } 10440 amatchStrcpy(tls, dest, src) 10441 } 10442 10443 func amatchAddWord(tls *libc.TLS, pCur uintptr, rCost amatch_cost, nMatch int32, zWordBase uintptr, zWordTail uintptr) { 10444 bp := tls.Alloc(4) 10445 defer tls.Free(4) 10446 10447 var pWord uintptr 10448 var pNode uintptr 10449 var pOther uintptr 10450 _ = pOther 10451 var nBase int32 10452 var nTail int32 10453 10454 if rCost > (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit { 10455 return 10456 } 10457 nBase = int32(libc.Xstrlen(tls, zWordBase)) 10458 nTail = int32(libc.Xstrlen(tls, zWordTail)) 10459 if nBase+nTail+3 > (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf { 10460 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = nBase + nTail + 100 10461 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = sqlite3.Xsqlite3_realloc(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf) 10462 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf == uintptr(0) { 10463 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 10464 return 10465 } 10466 } 10467 amatchEncodeInt(tls, nMatch, bp) 10468 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, bp+uintptr(2), uint64(2)) 10469 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2), zWordBase, uint64(nBase)) 10470 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2)+uintptr(nBase), zWordTail, uint64(nTail+1)) 10471 pNode = amatchAvlSearch(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10472 if pNode != 0 { 10473 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 10474 if (*amatch_word)(unsafe.Pointer(pWord)).FrCost > rCost { 10475 amatchAvlRemove(tls, pCur+80, pWord+8) 10476 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 10477 amatchWriteCost(tls, pWord) 10478 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 10479 _ = pOther 10480 } 10481 return 10482 } 10483 pWord = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_word{}))+uint64(nBase)+uint64(nTail)-uint64(1)) 10484 if pWord == uintptr(0) { 10485 return 10486 } 10487 libc.Xmemset(tls, pWord, 0, uint64(unsafe.Sizeof(amatch_word{}))) 10488 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 10489 (*amatch_word)(unsafe.Pointer(pWord)).FiSeq = libc.PostIncInt32(&(*amatch_cursor)(unsafe.Pointer(pCur)).FnWord, 1) 10490 amatchWriteCost(tls, pWord) 10491 (*amatch_word)(unsafe.Pointer(pWord)).FnMatch = int16(nMatch) 10492 (*amatch_word)(unsafe.Pointer(pWord)).FpNext = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords 10493 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = pWord 10494 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FzKey = pWord + 112 10495 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FpWord = pWord 10496 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 10497 _ = pOther 10498 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FzKey = pWord + 124 10499 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FpWord = pWord 10500 amatchStrcpy(tls, pWord+124, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10501 pOther = amatchAvlInsert(tls, pCur+88, pWord+56) 10502 _ = pOther 10503 } 10504 10505 func amatchNext(tls *libc.TLS, cur uintptr) int32 { 10506 bp := tls.Alloc(80) 10507 defer tls.Free(80) 10508 10509 var pCur uintptr = cur 10510 var pWord uintptr = uintptr(0) 10511 var pNode uintptr 10512 var isMatch int32 = 0 10513 var p uintptr = (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab 10514 var nWord int32 10515 var rc int32 10516 var i int32 10517 var zW uintptr 10518 var pRule uintptr 10519 var zBuf uintptr = uintptr(0) 10520 var nBuf int8 = int8(0) 10521 10522 var nNextIn int32 10523 10524 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck == uintptr(0) { 10525 var zSql uintptr 10526 if (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang != 0 && *(*int8)(unsafe.Pointer((*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) != 0 { 10527 zSql = sqlite3.Xsqlite3_mprintf(tls, 10528 ts+3731, 10529 libc.VaList(bp, ts+3753, 10530 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 10531 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) 10532 } else { 10533 zSql = sqlite3.Xsqlite3_mprintf(tls, 10534 ts+3792, 10535 libc.VaList(bp+40, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 10536 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord)) 10537 } 10538 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*amatch_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, p+112, uintptr(0)) 10539 sqlite3.Xsqlite3_free(tls, zSql) 10540 if rc != 0 { 10541 return rc 10542 } 10543 } 10544 sqlite3.Xsqlite3_bind_int(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 2, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 10545 10546 for __ccgo := true; __ccgo; __ccgo = !(isMatch != 0) { 10547 pNode = amatchAvlFirst(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost) 10548 if pNode == uintptr(0) { 10549 pWord = uintptr(0) 10550 break 10551 } 10552 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 10553 amatchAvlRemove(tls, pCur+80, pWord+8) 10554 10555 nWord = int32(libc.Xstrlen(tls, pWord+124+uintptr(2))) 10556 if nWord+20 > int32(nBuf) { 10557 nBuf = int8(nWord + 100) 10558 zBuf = sqlite3.Xsqlite3_realloc(tls, zBuf, int32(nBuf)) 10559 if zBuf == uintptr(0) { 10560 return SQLITE_NOMEM 10561 } 10562 } 10563 amatchStrcpy(tls, zBuf, pWord+124+uintptr(2)) 10564 *(*int8)(unsafe.Pointer(bp + 64)) = int8(0) 10565 *(*int8)(unsafe.Pointer(bp + 72)) = *(*int8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch))) 10566 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 { 10567 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++ { 10568 *(*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))) 10569 } 10570 *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i))) = int8(0) 10571 nNextIn = i 10572 } else { 10573 nNextIn = 0 10574 } 10575 10576 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 && int32(*(*int8)(unsafe.Pointer(bp + 72))) != '*' { 10577 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10578 amatchStrcat(tls, zBuf, bp+72) 10579 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, nWord+nNextIn, uintptr(0)) 10580 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10581 if rc == SQLITE_ROW { 10582 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 10583 if libc.Xstrncmp(tls, zBuf, zW, uint64(nWord+nNextIn)) == 0 { 10584 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, zBuf, ts+584) 10585 } 10586 } 10587 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10588 } 10589 10590 for 1 != 0 { 10591 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 10592 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10593 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, -1, libc.UintptrFromInt32(-1)) 10594 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10595 if rc != SQLITE_ROW { 10596 break 10597 } 10598 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 10599 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 10600 if libc.Xstrncmp(tls, zW, zBuf, uint64(nWord)) != 0 { 10601 break 10602 } 10603 if int32(*(*int8)(unsafe.Pointer(bp + 72))) == '*' && int32(*(*int8)(unsafe.Pointer(bp + 72 + 1))) == 0 || 10604 int32(*(*int8)(unsafe.Pointer(bp + 72))) == 0 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord)))) == 0 { 10605 isMatch = 1 10606 *(*int8)(unsafe.Pointer(bp + 72)) = int8(0) 10607 nNextIn = 0 10608 break 10609 } 10610 *(*int8)(unsafe.Pointer(bp + 64)) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord))) 10611 for i = 1; i <= 4 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))))&0xc0 == 0x80; i++ { 10612 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))) 10613 } 10614 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = int8(0) 10615 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10616 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns > 0 { 10617 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrIns, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), 10618 zBuf, bp+64) 10619 } 10620 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub > 0 { 10621 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrSub, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 10622 zBuf, bp+64) 10623 } 10624 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns < 0 && (*amatch_vtab)(unsafe.Pointer(p)).FrSub < 0 { 10625 break 10626 } 10627 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i-1)))++ 10628 } 10629 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10630 10631 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel > 0 { 10632 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10633 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrDel, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 10634 zBuf, ts+584) 10635 } 10636 10637 for pRule = (*amatch_vtab)(unsafe.Pointer(p)).FpRule; pRule != 0; pRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext { 10638 if (*amatch_rule)(unsafe.Pointer(pRule)).FiLang != (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang { 10639 continue 10640 } 10641 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 { 10642 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_rule)(unsafe.Pointer(pRule)).FrCost, 10643 int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+int32((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom), pWord+124+uintptr(2), pRule+26) 10644 } 10645 } 10646 } 10647 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = pWord 10648 sqlite3.Xsqlite3_free(tls, zBuf) 10649 return SQLITE_OK 10650 } 10651 10652 func amatchFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 10653 bp := tls.Alloc(8) 10654 defer tls.Free(8) 10655 10656 var pCur uintptr = pVtabCursor 10657 var zWord uintptr = ts + 3840 10658 var idx int32 10659 10660 amatchClearCursor(tls, pCur) 10661 idx = 0 10662 if idxNum&1 != 0 { 10663 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 10664 idx++ 10665 } 10666 if idxNum&2 != 0 { 10667 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 10668 idx++ 10669 } 10670 if idxNum&4 != 0 { 10671 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 10672 idx++ 10673 } 10674 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zWord)) 10675 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput == uintptr(0) { 10676 return SQLITE_NOMEM 10677 } 10678 amatchAddWord(tls, pCur, 0, 0, ts+584, ts+584) 10679 amatchNext(tls, pVtabCursor) 10680 10681 return SQLITE_OK 10682 } 10683 10684 func amatchColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 10685 var pCur uintptr = cur 10686 switch i { 10687 case AMATCH_COL_WORD: 10688 { 10689 sqlite3.Xsqlite3_result_text(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent+124+uintptr(2), -1, uintptr(0)) 10690 break 10691 10692 } 10693 case AMATCH_COL_DISTANCE: 10694 { 10695 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_word)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FrCost) 10696 break 10697 10698 } 10699 case AMATCH_COL_LANGUAGE: 10700 { 10701 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 10702 break 10703 10704 } 10705 case AMATCH_COL_NWORD: 10706 { 10707 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord) 10708 break 10709 10710 } 10711 default: 10712 { 10713 sqlite3.Xsqlite3_result_null(tls, ctx) 10714 break 10715 10716 } 10717 } 10718 return SQLITE_OK 10719 } 10720 10721 func amatchRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 10722 var pCur uintptr = cur 10723 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*amatch_cursor)(unsafe.Pointer(pCur)).FiRowid 10724 return SQLITE_OK 10725 } 10726 10727 func amatchEof(tls *libc.TLS, cur uintptr) int32 { 10728 var pCur uintptr = cur 10729 return libc.Bool32((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 10730 } 10731 10732 func amatchBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 10733 var iPlan int32 = 0 10734 var iDistTerm int32 = -1 10735 var iLangTerm int32 = -1 10736 var i int32 10737 var pConstraint uintptr 10738 10739 _ = tab 10740 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 10741 i = 0 10742 __1: 10743 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 10744 goto __3 10745 } 10746 { 10747 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 10748 goto __2 10749 } 10750 if iPlan&1 == 0 && 10751 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 10752 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 10753 iPlan = iPlan | 1 10754 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 10755 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 10756 } 10757 if iPlan&2 == 0 && 10758 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 10759 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 10760 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 10761 iPlan = iPlan | 2 10762 iDistTerm = i 10763 } 10764 if iPlan&4 == 0 && 10765 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 10766 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 10767 iPlan = iPlan | 4 10768 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 10769 iLangTerm = i 10770 } 10771 10772 } 10773 goto __2 10774 __2: 10775 i++ 10776 pConstraint += 12 10777 goto __1 10778 goto __3 10779 __3: 10780 ; 10781 if iPlan&2 != 0 { 10782 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 10783 } 10784 if iPlan&4 != 0 { 10785 var idx int32 = 1 10786 if iPlan&1 != 0 { 10787 idx++ 10788 } 10789 if iPlan&2 != 0 { 10790 idx++ 10791 } 10792 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = idx 10793 } 10794 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 10795 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 10796 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 10797 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 10798 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 10799 } 10800 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10000) 10801 10802 return SQLITE_OK 10803 } 10804 10805 func amatchUpdate(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 10806 bp := tls.Alloc(24) 10807 defer tls.Free(24) 10808 10809 var p uintptr = pVTab 10810 var zCmd uintptr 10811 _ = pRowid 10812 if argc == 1 { 10813 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3842, 10814 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 10815 return SQLITE_ERROR 10816 } 10817 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_NULL { 10818 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3872, 10819 libc.VaList(bp+8, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 10820 return SQLITE_ERROR 10821 } 10822 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) != SQLITE_NULL || 10823 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) != SQLITE_NULL || 10824 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) != SQLITE_NULL { 10825 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 10826 ts+3900, libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 10827 return SQLITE_ERROR 10828 } 10829 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 10830 if zCmd == uintptr(0) { 10831 return SQLITE_OK 10832 } 10833 10834 return SQLITE_OK 10835 } 10836 10837 var amatchModule = sqlite3_module{ 10838 FxCreate: 0, 10839 FxConnect: 0, 10840 FxBestIndex: 0, 10841 FxDisconnect: 0, 10842 FxDestroy: 0, 10843 FxOpen: 0, 10844 FxClose: 0, 10845 FxFilter: 0, 10846 FxNext: 0, 10847 FxEof: 0, 10848 FxColumn: 0, 10849 FxRowid: 0, 10850 FxUpdate: 0, 10851 } 10852 10853 func sqlite3_amatch_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 10854 var rc int32 = SQLITE_OK 10855 _ = pApi 10856 10857 _ = pzErrMsg 10858 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3949, uintptr(unsafe.Pointer(&amatchModule)), uintptr(0)) 10859 return rc 10860 } 10861 10862 var azType = [4]uintptr{ts + 3967, ts + 3973, ts + 2562, ts + 3979} 10863 10864 type carray_bind1 = struct { 10865 FaData uintptr 10866 FnData int32 10867 FmFlags int32 10868 FxDel uintptr 10869 } 10870 10871 type carray_bind = carray_bind1 10872 10873 type carray_cursor1 = struct { 10874 Fbase sqlite3_vtab_cursor 10875 FiRowid sqlite3_int64 10876 FpPtr uintptr 10877 FiCnt sqlite3_int64 10878 FeType uint8 10879 F__ccgo_pad1 [7]byte 10880 } 10881 10882 type carray_cursor = carray_cursor1 10883 10884 func carrayConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 10885 var pNew uintptr 10886 var rc int32 10887 10888 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 10889 ts+3985) 10890 if rc == SQLITE_OK { 10891 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 10892 if pNew == uintptr(0) { 10893 return SQLITE_NOMEM 10894 } 10895 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 10896 } 10897 return rc 10898 } 10899 10900 func carrayDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 10901 sqlite3.Xsqlite3_free(tls, pVtab) 10902 return SQLITE_OK 10903 } 10904 10905 func carrayOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 10906 var pCur uintptr 10907 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(carray_cursor{}))) 10908 if pCur == uintptr(0) { 10909 return SQLITE_NOMEM 10910 } 10911 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(carray_cursor{}))) 10912 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 10913 return SQLITE_OK 10914 } 10915 10916 func carrayClose(tls *libc.TLS, cur uintptr) int32 { 10917 sqlite3.Xsqlite3_free(tls, cur) 10918 return SQLITE_OK 10919 } 10920 10921 func carrayNext(tls *libc.TLS, cur uintptr) int32 { 10922 var pCur uintptr = cur 10923 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid++ 10924 return SQLITE_OK 10925 } 10926 10927 func carrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 10928 var pCur uintptr = cur 10929 var x sqlite3_int64 = int64(0) 10930 switch i { 10931 case CARRAY_COLUMN_POINTER: 10932 return SQLITE_OK 10933 case CARRAY_COLUMN_COUNT: 10934 x = (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt 10935 break 10936 case CARRAY_COLUMN_CTYPE: 10937 { 10938 sqlite3.Xsqlite3_result_text(tls, ctx, azType[(*carray_cursor)(unsafe.Pointer(pCur)).FeType], -1, uintptr(0)) 10939 return SQLITE_OK 10940 10941 } 10942 default: 10943 { 10944 switch int32((*carray_cursor)(unsafe.Pointer(pCur)).FeType) { 10945 case CARRAY_INT32: 10946 { 10947 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 10948 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*4))) 10949 return SQLITE_OK 10950 10951 } 10952 case CARRAY_INT64: 10953 { 10954 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 10955 sqlite3.Xsqlite3_result_int64(tls, ctx, *(*sqlite3_int64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 10956 return SQLITE_OK 10957 10958 } 10959 case CARRAY_DOUBLE: 10960 { 10961 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 10962 sqlite3.Xsqlite3_result_double(tls, ctx, *(*float64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 10963 return SQLITE_OK 10964 10965 } 10966 case CARRAY_TEXT: 10967 { 10968 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 10969 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8)), -1, libc.UintptrFromInt32(-1)) 10970 return SQLITE_OK 10971 10972 } 10973 } 10974 10975 } 10976 } 10977 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 10978 return SQLITE_OK 10979 } 10980 10981 func carrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 10982 var pCur uintptr = cur 10983 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid 10984 return SQLITE_OK 10985 } 10986 10987 func carrayEof(tls *libc.TLS, cur uintptr) int32 { 10988 var pCur uintptr = cur 10989 return libc.Bool32((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid > (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt) 10990 } 10991 10992 func carrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 10993 bp := tls.Alloc(8) 10994 defer tls.Free(8) 10995 10996 var pCur uintptr = pVtabCursor 10997 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = uintptr(0) 10998 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = int64(0) 10999 switch idxNum { 11000 case 1: 11001 { 11002 var pBind uintptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4048) 11003 if pBind == uintptr(0) { 11004 break 11005 } 11006 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = (*carray_bind)(unsafe.Pointer(pBind)).FaData 11007 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = sqlite3_int64((*carray_bind)(unsafe.Pointer(pBind)).FnData) 11008 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8((*carray_bind)(unsafe.Pointer(pBind)).FmFlags & 0x03) 11009 break 11010 11011 } 11012 case 2: 11013 fallthrough 11014 case 3: 11015 { 11016 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4060) 11017 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = func() int64 { 11018 if (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr != 0 { 11019 return sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 11020 } 11021 return int64(0) 11022 }() 11023 if idxNum < 3 { 11024 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8(CARRAY_INT32) 11025 } else { 11026 var i uint8 11027 var zType uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 11028 for i = uint8(0); uint64(i) < uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 11029 if sqlite3.Xsqlite3_stricmp(tls, zType, azType[i]) == 0 { 11030 break 11031 } 11032 } 11033 if uint64(i) >= uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))) { 11034 (*sqlite3_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11035 ts+4067, libc.VaList(bp, zType)) 11036 return SQLITE_ERROR 11037 } else { 11038 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = i 11039 } 11040 } 11041 break 11042 11043 } 11044 } 11045 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 11046 return SQLITE_OK 11047 } 11048 11049 func carrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 11050 var i int32 11051 var ptrIdx int32 = -1 11052 var cntIdx int32 = -1 11053 var ctypeIdx int32 = -1 11054 11055 var pConstraint uintptr 11056 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 11057 i = 0 11058 __1: 11059 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 11060 goto __3 11061 } 11062 { 11063 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 11064 goto __2 11065 } 11066 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 11067 goto __2 11068 } 11069 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 11070 case CARRAY_COLUMN_POINTER: 11071 ptrIdx = i 11072 break 11073 case CARRAY_COLUMN_COUNT: 11074 cntIdx = i 11075 break 11076 case CARRAY_COLUMN_CTYPE: 11077 ctypeIdx = i 11078 break 11079 } 11080 11081 } 11082 goto __2 11083 __2: 11084 i++ 11085 pConstraint += 12 11086 goto __1 11087 goto __3 11088 __3: 11089 ; 11090 if ptrIdx >= 0 { 11091 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).FargvIndex = 1 11092 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).Fomit = uint8(1) 11093 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 11094 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(100) 11095 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 11096 if cntIdx >= 0 { 11097 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).FargvIndex = 2 11098 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).Fomit = uint8(1) 11099 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 11100 if ctypeIdx >= 0 { 11101 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).FargvIndex = 3 11102 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).Fomit = uint8(1) 11103 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 3 11104 } 11105 } 11106 } else { 11107 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2147483647) 11108 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 11109 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 11110 } 11111 return SQLITE_OK 11112 } 11113 11114 var carrayModule = sqlite3_module{ 11115 FxConnect: 0, 11116 FxBestIndex: 0, 11117 FxDisconnect: 0, 11118 FxOpen: 0, 11119 FxClose: 0, 11120 FxFilter: 0, 11121 FxNext: 0, 11122 FxEof: 0, 11123 FxColumn: 0, 11124 FxRowid: 0, 11125 } 11126 11127 func carrayBindDel(tls *libc.TLS, pPtr uintptr) { 11128 var p uintptr = pPtr 11129 if (*carray_bind)(unsafe.Pointer(p)).FxDel != uintptr(0) { 11130 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*carray_bind)(unsafe.Pointer(p)).FxDel})).f(tls, (*carray_bind)(unsafe.Pointer(p)).FaData) 11131 } 11132 sqlite3.Xsqlite3_free(tls, p) 11133 } 11134 11135 func sqlite3_carray_bind(tls *libc.TLS, pStmt uintptr, idx int32, aData uintptr, nData int32, mFlags int32, xDestroy uintptr) int32 { 11136 var pNew uintptr 11137 var i int32 11138 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(carray_bind{}))) 11139 if pNew == uintptr(0) { 11140 if xDestroy != uintptr(0) && xDestroy != libc.UintptrFromInt32(-1) { 11141 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, aData) 11142 } 11143 return SQLITE_NOMEM 11144 } 11145 (*carray_bind)(unsafe.Pointer(pNew)).FnData = nData 11146 (*carray_bind)(unsafe.Pointer(pNew)).FmFlags = mFlags 11147 if xDestroy == libc.UintptrFromInt32(-1) { 11148 var sz sqlite3_int64 = sqlite3_int64(nData) 11149 switch mFlags & 0x03 { 11150 case CARRAY_INT32: 11151 sz = sz * int64(4) 11152 break 11153 fallthrough 11154 case CARRAY_INT64: 11155 sz = sz * int64(8) 11156 break 11157 fallthrough 11158 case CARRAY_DOUBLE: 11159 sz = sz * int64(8) 11160 break 11161 fallthrough 11162 case CARRAY_TEXT: 11163 sz = int64(uint64(sz) * uint64(unsafe.Sizeof(uintptr(0)))) 11164 break 11165 } 11166 if mFlags&0x03 == CARRAY_TEXT { 11167 for i = 0; i < nData; i++ { 11168 var z uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 11169 if z != 0 { 11170 sz = sqlite3_int64(uint64(sz) + (libc.Xstrlen(tls, z) + uint64(1))) 11171 } 11172 } 11173 } 11174 (*carray_bind)(unsafe.Pointer(pNew)).FaData = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 11175 if (*carray_bind)(unsafe.Pointer(pNew)).FaData == uintptr(0) { 11176 sqlite3.Xsqlite3_free(tls, pNew) 11177 return SQLITE_NOMEM 11178 } 11179 if mFlags&0x03 == CARRAY_TEXT { 11180 var az uintptr = (*carray_bind)(unsafe.Pointer(pNew)).FaData 11181 var z uintptr = az + uintptr(nData)*8 11182 for i = 0; i < nData; i++ { 11183 var zData uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 11184 var n sqlite3_int64 11185 if zData == uintptr(0) { 11186 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = uintptr(0) 11187 continue 11188 } 11189 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = z 11190 n = sqlite3_int64(libc.Xstrlen(tls, zData)) 11191 libc.Xmemcpy(tls, z, zData, uint64(n+int64(1))) 11192 z += uintptr(n + int64(1)) 11193 } 11194 } else { 11195 libc.Xmemcpy(tls, (*carray_bind)(unsafe.Pointer(pNew)).FaData, aData, uint64(sz)) 11196 } 11197 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 11198 } else { 11199 (*carray_bind)(unsafe.Pointer(pNew)).FaData = aData 11200 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = xDestroy 11201 } 11202 return sqlite3.Xsqlite3_bind_pointer(tls, pStmt, idx, pNew, ts+4048, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{carrayBindDel}))) 11203 } 11204 11205 func inttoptrFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11206 bp := tls.Alloc(20) 11207 defer tls.Free(20) 11208 11209 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 11210 if uint64(unsafe.Sizeof(sqlite3_int64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 11211 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 11212 } else { 11213 *(*int32)(unsafe.Pointer(bp + 16)) = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)) & int64(0xffffffff)) 11214 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 11215 } 11216 sqlite3.Xsqlite3_result_pointer(tls, context, *(*uintptr)(unsafe.Pointer(bp)), ts+4060, uintptr(0)) 11217 } 11218 11219 func sqlite3_carray_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11220 var rc int32 = SQLITE_OK 11221 _ = pApi 11222 11223 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4060, uintptr(unsafe.Pointer(&carrayModule)), uintptr(0)) 11224 if rc == SQLITE_OK { 11225 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4088, 1, SQLITE_UTF8, uintptr(0), 11226 *(*uintptr)(unsafe.Pointer(&struct { 11227 f func(*libc.TLS, uintptr, int32, uintptr) 11228 }{inttoptrFunc})), uintptr(0), uintptr(0)) 11229 } 11230 return rc 11231 } 11232 11233 type CksmVfs = sqlite3_vfs1 11234 type CksmFile1 = struct { 11235 Fbase sqlite3_file 11236 FzFName uintptr 11237 FcomputeCksm int8 11238 FverifyCksm int8 11239 FisWal int8 11240 FinCkpt int8 11241 F__ccgo_pad1 [4]byte 11242 FpPartner uintptr 11243 } 11244 11245 type CksmFile = CksmFile1 11246 11247 type u8 = uint8 11248 11249 var cksm_vfs = sqlite3_vfs{ 11250 FiVersion: 3, 11251 FmxPathname: 1024, 11252 FzName: ts + 4097, 11253 FxOpen: 0, 11254 FxDelete: 0, 11255 FxAccess: 0, 11256 FxFullPathname: 0, 11257 FxDlOpen: 0, 11258 FxDlError: 0, 11259 FxDlSym: 0, 11260 FxDlClose: 0, 11261 FxRandomness: 0, 11262 FxSleep: 0, 11263 FxCurrentTime: 0, 11264 FxGetLastError: 0, 11265 FxCurrentTimeInt64: 0, 11266 FxSetSystemCall: 0, 11267 FxGetSystemCall: 0, 11268 FxNextSystemCall: 0, 11269 } 11270 11271 var cksm_io_methods = sqlite3_io_methods{ 11272 FiVersion: 3, 11273 FxClose: 0, 11274 FxRead: 0, 11275 FxWrite: 0, 11276 FxTruncate: 0, 11277 FxSync: 0, 11278 FxFileSize: 0, 11279 FxLock: 0, 11280 FxUnlock: 0, 11281 FxCheckReservedLock: 0, 11282 FxFileControl: 0, 11283 FxSectorSize: 0, 11284 FxDeviceCharacteristics: 0, 11285 FxShmMap: 0, 11286 FxShmLock: 0, 11287 FxShmBarrier: 0, 11288 FxShmUnmap: 0, 11289 FxFetch: 0, 11290 FxUnfetch: 0, 11291 } 11292 11293 func cksmCompute(tls *libc.TLS, a uintptr, nByte int32, aOut uintptr) { 11294 bp := tls.Alloc(12) 11295 defer tls.Free(12) 11296 11297 *(*u32)(unsafe.Pointer(bp + 4)) = u32(0) 11298 *(*u32)(unsafe.Pointer(bp + 8)) = u32(0) 11299 var aData uintptr = a 11300 var aEnd uintptr = a + uintptr(nByte) 11301 *(*u32)(unsafe.Pointer(bp)) = u32(1) 11302 11303 if 1 == int32(*(*u8)(unsafe.Pointer(bp))) { 11304 for __ccgo := true; __ccgo; __ccgo = aData < aEnd { 11305 *(*u32)(unsafe.Pointer(bp + 4)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 8)) 11306 *(*u32)(unsafe.Pointer(bp + 8)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 4)) 11307 } 11308 } else { 11309 for __ccgo1 := true; __ccgo1; __ccgo1 = aData < aEnd { 11310 *(*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)) 11311 *(*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)) 11312 aData += 4 * uintptr(2) 11313 } 11314 *(*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 11315 *(*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 11316 } 11317 libc.Xmemcpy(tls, aOut, bp+4, uint64(4)) 11318 libc.Xmemcpy(tls, aOut+uintptr(4), bp+8, uint64(4)) 11319 } 11320 11321 func cksmVerifyFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11322 bp := tls.Alloc(8) 11323 defer tls.Free(8) 11324 11325 var nByte int32 11326 var data uintptr 11327 11328 data = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 11329 if data == uintptr(0) { 11330 return 11331 } 11332 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_BLOB { 11333 return 11334 } 11335 nByte = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 11336 if nByte < 512 || nByte > 65536 || nByte&(nByte-1) != 0 { 11337 return 11338 } 11339 cksmCompute(tls, data, nByte-8, bp) 11340 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(libc.Xmemcmp(tls, data+uintptr(nByte)-uintptr(8), bp, uint64(8)) == 0)) 11341 } 11342 11343 func cksmClose(tls *libc.TLS, pFile uintptr) int32 { 11344 var p uintptr = pFile 11345 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11346 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = uintptr(0) 11347 (*CksmFile)(unsafe.Pointer(p)).FpPartner = uintptr(0) 11348 } 11349 pFile = pFile + uintptr(1)*32 11350 return (*struct { 11351 f func(*libc.TLS, uintptr) int32 11352 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 11353 } 11354 11355 func cksmSetFlags(tls *libc.TLS, p uintptr, hasCorrectReserveSize int32) { 11356 if hasCorrectReserveSize != int32((*CksmFile)(unsafe.Pointer(p)).FcomputeCksm) { 11357 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = libc.AssignPtrInt8(p+17, int8(hasCorrectReserveSize)) 11358 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11359 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = int8(hasCorrectReserveSize) 11360 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm = int8(hasCorrectReserveSize) 11361 } 11362 } 11363 } 11364 11365 func cksmRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 11366 bp := tls.Alloc(24) 11367 defer tls.Free(24) 11368 11369 var rc int32 11370 var p uintptr = pFile 11371 pFile = pFile + uintptr(1)*32 11372 rc = (*struct { 11373 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 11374 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, zBuf, iAmt, iOfst) 11375 if rc == SQLITE_OK { 11376 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 11377 var d uintptr = zBuf 11378 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 11379 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 11380 } 11381 11382 if iAmt >= 512 && 11383 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm != 0 && 11384 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 11385 cksmCompute(tls, zBuf, iAmt-8, bp+16) 11386 if libc.Xmemcmp(tls, zBuf+uintptr(iAmt)-uintptr(8), bp+16, uint64(8)) != 0 { 11387 sqlite3.Xsqlite3_log(tls, SQLITE_IOERR|int32(32)<<8, 11388 ts+4109, 11389 libc.VaList(bp, iOfst, (*CksmFile)(unsafe.Pointer(p)).FzFName)) 11390 rc = SQLITE_IOERR | int32(32)<<8 11391 } 11392 } 11393 } 11394 return rc 11395 } 11396 11397 func cksmWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 11398 var p uintptr = pFile 11399 pFile = pFile + uintptr(1)*32 11400 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 11401 var d uintptr = zBuf 11402 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 11403 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 11404 } 11405 11406 if iAmt >= 512 && 11407 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && 11408 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 11409 cksmCompute(tls, zBuf, iAmt-8, zBuf+uintptr(iAmt)-uintptr(8)) 11410 } 11411 return (*struct { 11412 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 11413 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, zBuf, iAmt, iOfst) 11414 } 11415 11416 func cksmTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 11417 pFile = pFile + uintptr(1)*32 11418 return (*struct { 11419 f func(*libc.TLS, uintptr, sqlite3_int64) int32 11420 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxTruncate})).f(tls, pFile, size) 11421 } 11422 11423 func cksmSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 11424 pFile = pFile + uintptr(1)*32 11425 return (*struct { 11426 f func(*libc.TLS, uintptr, int32) int32 11427 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 11428 } 11429 11430 func cksmFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 11431 var p uintptr = pFile 11432 pFile = p + uintptr(1)*32 11433 return (*struct { 11434 f func(*libc.TLS, uintptr, uintptr) int32 11435 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileSize})).f(tls, pFile, pSize) 11436 } 11437 11438 func cksmLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 11439 pFile = pFile + uintptr(1)*32 11440 return (*struct { 11441 f func(*libc.TLS, uintptr, int32) int32 11442 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 11443 } 11444 11445 func cksmUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 11446 pFile = pFile + uintptr(1)*32 11447 return (*struct { 11448 f func(*libc.TLS, uintptr, int32) int32 11449 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 11450 } 11451 11452 func cksmCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 11453 pFile = pFile + uintptr(1)*32 11454 return (*struct { 11455 f func(*libc.TLS, uintptr, uintptr) int32 11456 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 11457 } 11458 11459 func cksmFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 11460 bp := tls.Alloc(16) 11461 defer tls.Free(16) 11462 11463 var rc int32 11464 var p uintptr = pFile 11465 pFile = pFile + uintptr(1)*32 11466 if op == SQLITE_FCNTL_PRAGMA { 11467 var azArg uintptr = pArg 11468 11469 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4144) == 0 { 11470 var zArg uintptr = *(*uintptr)(unsafe.Pointer(azArg + 2*8)) 11471 if zArg != uintptr(0) { 11472 if int32(*(*int8)(unsafe.Pointer(zArg))) >= '1' && int32(*(*int8)(unsafe.Pointer(zArg))) <= '9' || 11473 sqlite3.Xsqlite3_strlike(tls, ts+4166, zArg, uint32(0)) == 0 || 11474 sqlite3.Xsqlite3_stricmp(tls, ts+4174, zArg) == 0 || 11475 sqlite3.Xsqlite3_stricmp(tls, ts+4178, zArg) == 0 { 11476 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm 11477 } else { 11478 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = int8(0) 11479 } 11480 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11481 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FverifyCksm 11482 } 11483 } 11484 *(*uintptr)(unsafe.Pointer(azArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, int32((*CksmFile)(unsafe.Pointer(p)).FverifyCksm))) 11485 return SQLITE_OK 11486 } else if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && *(*uintptr)(unsafe.Pointer(azArg + 2*8)) != uintptr(0) && 11487 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4181) == 0 { 11488 return SQLITE_OK 11489 } 11490 } else if op == SQLITE_FCNTL_CKPT_START || op == SQLITE_FCNTL_CKPT_DONE { 11491 (*CksmFile)(unsafe.Pointer(p)).FinCkpt = int8(libc.Bool32(op == SQLITE_FCNTL_CKPT_START)) 11492 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11493 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FinCkpt = (*CksmFile)(unsafe.Pointer(p)).FinCkpt 11494 } 11495 } else if op == SQLITE_FCNTL_CKSM_FILE { 11496 var ppFile uintptr = pArg 11497 *(*uintptr)(unsafe.Pointer(ppFile)) = p 11498 return SQLITE_OK 11499 } 11500 rc = (*struct { 11501 f func(*libc.TLS, uintptr, int32, uintptr) int32 11502 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 11503 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 11504 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+4191, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(pArg)))) 11505 } 11506 return rc 11507 } 11508 11509 func cksmSectorSize(tls *libc.TLS, pFile uintptr) int32 { 11510 pFile = pFile + uintptr(1)*32 11511 return (*struct { 11512 f func(*libc.TLS, uintptr) int32 11513 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 11514 } 11515 11516 func cksmDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 11517 pFile = pFile + uintptr(1)*32 11518 return (*struct { 11519 f func(*libc.TLS, uintptr) int32 11520 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 11521 } 11522 11523 func cksmShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 11524 pFile = pFile + uintptr(1)*32 11525 return (*struct { 11526 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 11527 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 11528 } 11529 11530 func cksmShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 11531 pFile = pFile + uintptr(1)*32 11532 return (*struct { 11533 f func(*libc.TLS, uintptr, int32, int32, int32) int32 11534 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 11535 } 11536 11537 func cksmShmBarrier(tls *libc.TLS, pFile uintptr) { 11538 pFile = pFile + uintptr(1)*32 11539 (*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) 11540 } 11541 11542 func cksmShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 11543 pFile = pFile + uintptr(1)*32 11544 return (*struct { 11545 f func(*libc.TLS, uintptr, int32) int32 11546 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 11547 } 11548 11549 func cksmFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 11550 var p uintptr = pFile 11551 if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 { 11552 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 11553 return SQLITE_OK 11554 } 11555 pFile = pFile + uintptr(1)*32 11556 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 { 11557 return (*struct { 11558 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 11559 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch})).f(tls, pFile, iOfst, iAmt, pp) 11560 } 11561 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 11562 return SQLITE_OK 11563 } 11564 11565 func cksmUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 11566 pFile = pFile + uintptr(1)*32 11567 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 { 11568 return (*struct { 11569 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 11570 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch})).f(tls, pFile, iOfst, pPage) 11571 } 11572 return SQLITE_OK 11573 } 11574 11575 func cksmOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 11576 bp := tls.Alloc(8) 11577 defer tls.Free(8) 11578 11579 var p uintptr 11580 var pSubFile uintptr 11581 var pSubVfs uintptr 11582 var rc int32 11583 11584 pSubVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 11585 if !(flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0) { 11586 goto __1 11587 } 11588 return (*struct { 11589 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 11590 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pFile, flags, pOutFlags) 11591 __1: 11592 ; 11593 p = pFile 11594 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CksmFile{}))) 11595 pSubFile = pFile + uintptr(1)*32 11596 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&cksm_io_methods)) 11597 rc = (*struct { 11598 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 11599 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pSubFile, flags, pOutFlags) 11600 if !(rc != 0) { 11601 goto __2 11602 } 11603 goto cksm_open_done 11604 __2: 11605 ; 11606 if !(flags&SQLITE_OPEN_WAL != 0) { 11607 goto __3 11608 } 11609 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_database_file_object(tls, zName) 11610 rc = (*struct { 11611 f func(*libc.TLS, uintptr, int32, uintptr) int32 11612 })(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) 11613 11614 (*CksmFile)(unsafe.Pointer(p)).FpPartner = *(*uintptr)(unsafe.Pointer(bp)) 11615 11616 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = p 11617 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(1) 11618 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm 11619 goto __4 11620 __3: 11621 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(0) 11622 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = int8(0) 11623 __4: 11624 ; 11625 (*CksmFile)(unsafe.Pointer(p)).FzFName = zName 11626 cksm_open_done: 11627 if !(rc != 0) { 11628 goto __5 11629 } 11630 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 11631 __5: 11632 ; 11633 return rc 11634 } 11635 11636 func cksmDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 11637 return (*struct { 11638 f func(*libc.TLS, uintptr, uintptr, int32) int32 11639 })(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) 11640 } 11641 11642 func cksmAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 11643 return (*struct { 11644 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 11645 })(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) 11646 } 11647 11648 func cksmFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 11649 return (*struct { 11650 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 11651 })(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) 11652 } 11653 11654 func cksmDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 11655 return (*struct { 11656 f func(*libc.TLS, uintptr, uintptr) uintptr 11657 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 11658 } 11659 11660 func cksmDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 11661 (*struct { 11662 f func(*libc.TLS, uintptr, int32, uintptr) 11663 })(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) 11664 } 11665 11666 func cksmDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 11667 return (*struct { 11668 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 11669 })(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) 11670 } 11671 11672 func cksmDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 11673 (*struct { 11674 f func(*libc.TLS, uintptr, uintptr) 11675 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 11676 } 11677 11678 func cksmRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 11679 return (*struct { 11680 f func(*libc.TLS, uintptr, int32, uintptr) int32 11681 })(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) 11682 } 11683 11684 func cksmSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 11685 return (*struct { 11686 f func(*libc.TLS, uintptr, int32) int32 11687 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 11688 } 11689 11690 func cksmCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 11691 return (*struct { 11692 f func(*libc.TLS, uintptr, uintptr) int32 11693 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 11694 } 11695 11696 func cksmGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 11697 return (*struct { 11698 f func(*libc.TLS, uintptr, int32, uintptr) int32 11699 })(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) 11700 } 11701 11702 func cksmCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 11703 bp := tls.Alloc(8) 11704 defer tls.Free(8) 11705 11706 var pOrig uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 11707 var rc int32 11708 11709 if (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64 != 0 { 11710 rc = (*struct { 11711 f func(*libc.TLS, uintptr, uintptr) int32 11712 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64})).f(tls, pOrig, p) 11713 } else { 11714 rc = (*struct { 11715 f func(*libc.TLS, uintptr, uintptr) int32 11716 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTime})).f(tls, pOrig, bp) 11717 *(*sqlite3_int64)(unsafe.Pointer(p)) = libc.Int64FromFloat64(*(*float64)(unsafe.Pointer(bp)) * 86400000.0) 11718 } 11719 return rc 11720 } 11721 11722 func cksmSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 11723 return (*struct { 11724 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 11725 })(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) 11726 } 11727 11728 func cksmGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 11729 return (*struct { 11730 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 11731 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 11732 } 11733 11734 func cksmNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 11735 return (*struct { 11736 f func(*libc.TLS, uintptr, uintptr) uintptr 11737 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 11738 } 11739 11740 func cksmRegisterFunc(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11741 var rc int32 11742 if db == uintptr(0) { 11743 return SQLITE_OK 11744 } 11745 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4199, 1, 11746 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 11747 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 11748 f func(*libc.TLS, uintptr, int32, uintptr) 11749 }{cksmVerifyFunc})), uintptr(0), uintptr(0)) 11750 return rc 11751 } 11752 11753 func cksmRegisterVfs(tls *libc.TLS) int32 { 11754 var rc int32 = SQLITE_OK 11755 var pOrig uintptr 11756 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != uintptr(0) { 11757 return SQLITE_OK 11758 } 11759 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 11760 if pOrig == uintptr(0) { 11761 return SQLITE_ERROR 11762 } 11763 cksm_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 11764 cksm_vfs.FpAppData = pOrig 11765 cksm_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(CksmFile{}))) 11766 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&cksm_vfs)), 1) 11767 if rc == SQLITE_OK { 11768 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 11769 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 11770 }{cksmRegisterFunc}))) 11771 } 11772 return rc 11773 } 11774 11775 func sqlite3_register_cksumvfs(tls *libc.TLS, NotUsed uintptr) int32 { 11776 _ = NotUsed 11777 return cksmRegisterVfs(tls) 11778 } 11779 11780 func sqlite3_unregister_cksumvfs(tls *libc.TLS) int32 { 11781 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != 0 { 11782 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&cksm_vfs))) 11783 sqlite3.Xsqlite3_cancel_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 11784 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 11785 }{cksmRegisterFunc}))) 11786 } 11787 return SQLITE_OK 11788 } 11789 11790 type closure_vtab1 = struct { 11791 Fbase sqlite3_vtab 11792 FzDb uintptr 11793 FzSelf uintptr 11794 FzTableName uintptr 11795 FzIdColumn uintptr 11796 FzParentColumn uintptr 11797 Fdb uintptr 11798 FnCursor int32 11799 F__ccgo_pad1 [4]byte 11800 } 11801 11802 type closure_vtab = closure_vtab1 11803 type closure_cursor1 = struct { 11804 Fbase sqlite3_vtab_cursor 11805 FpVtab uintptr 11806 FzTableName uintptr 11807 FzIdColumn uintptr 11808 FzParentColumn uintptr 11809 FpCurrent uintptr 11810 FpClosure uintptr 11811 } 11812 11813 type closure_cursor = closure_cursor1 11814 type closure_queue1 = struct { 11815 FpFirst uintptr 11816 FpLast uintptr 11817 } 11818 11819 type closure_queue = closure_queue1 11820 type closure_avl1 = struct { 11821 Fid sqlite3_int64 11822 FiGeneration int32 11823 F__ccgo_pad1 [4]byte 11824 FpList uintptr 11825 FpBefore uintptr 11826 FpAfter uintptr 11827 FpUp uintptr 11828 Fheight int16 11829 Fimbalance int16 11830 F__ccgo_pad2 [4]byte 11831 } 11832 11833 type closure_avl = closure_avl1 11834 11835 func closureAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 11836 var hBefore int16 11837 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 11838 hBefore = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 11839 } else { 11840 hBefore = int16(0) 11841 } 11842 var hAfter int16 11843 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 11844 hAfter = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 11845 } else { 11846 hAfter = int16(0) 11847 } 11848 (*closure_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 11849 (*closure_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 11850 if int32(hBefore) > int32(hAfter) { 11851 return int32(hBefore) 11852 } 11853 return int32(hAfter) 11854 }() + 1) 11855 } 11856 11857 func closureAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 11858 var pB uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpBefore 11859 var pY uintptr = (*closure_avl)(unsafe.Pointer(pB)).FpAfter 11860 (*closure_avl)(unsafe.Pointer(pB)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 11861 (*closure_avl)(unsafe.Pointer(pB)).FpAfter = pP 11862 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pB 11863 (*closure_avl)(unsafe.Pointer(pP)).FpBefore = pY 11864 if pY != 0 { 11865 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 11866 } 11867 closureAvlRecomputeHeight(tls, pP) 11868 closureAvlRecomputeHeight(tls, pB) 11869 return pB 11870 } 11871 11872 func closureAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 11873 var pA uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpAfter 11874 var pY uintptr = (*closure_avl)(unsafe.Pointer(pA)).FpBefore 11875 (*closure_avl)(unsafe.Pointer(pA)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 11876 (*closure_avl)(unsafe.Pointer(pA)).FpBefore = pP 11877 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pA 11878 (*closure_avl)(unsafe.Pointer(pP)).FpAfter = pY 11879 if pY != 0 { 11880 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 11881 } 11882 closureAvlRecomputeHeight(tls, pP) 11883 closureAvlRecomputeHeight(tls, pA) 11884 return pA 11885 } 11886 11887 func closureAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 11888 var pUp uintptr = (*closure_avl)(unsafe.Pointer(p)).FpUp 11889 if pUp == uintptr(0) { 11890 return pp 11891 } 11892 if (*closure_avl)(unsafe.Pointer(pUp)).FpAfter == p { 11893 return pUp + 32 11894 } 11895 return pUp + 24 11896 } 11897 11898 func closureAvlBalance(tls *libc.TLS, p uintptr) uintptr { 11899 bp := tls.Alloc(8) 11900 defer tls.Free(8) 11901 *(*uintptr)(unsafe.Pointer(bp)) = p 11902 11903 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 11904 var pp uintptr 11905 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 11906 closureAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 11907 if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 11908 var pB uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 11909 if int32((*closure_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 11910 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = closureAvlRotateAfter(tls, pB) 11911 } 11912 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 11913 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 11914 } else if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 11915 var pA uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 11916 if int32((*closure_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 11917 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = closureAvlRotateBefore(tls, pA) 11918 } 11919 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 11920 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 11921 } 11922 pTop = *(*uintptr)(unsafe.Pointer(bp)) 11923 *(*uintptr)(unsafe.Pointer(bp)) = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 11924 } 11925 return pTop 11926 } 11927 11928 func closureAvlSearch(tls *libc.TLS, p uintptr, id sqlite3_int64) uintptr { 11929 for p != 0 && id != (*closure_avl)(unsafe.Pointer(p)).Fid { 11930 if id < (*closure_avl)(unsafe.Pointer(p)).Fid { 11931 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 11932 } else { 11933 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 11934 } 11935 } 11936 return p 11937 } 11938 11939 func closureAvlFirst(tls *libc.TLS, p uintptr) uintptr { 11940 if p != 0 { 11941 for (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 11942 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 11943 } 11944 } 11945 return p 11946 } 11947 11948 func closureAvlNext(tls *libc.TLS, p uintptr) uintptr { 11949 var pPrev uintptr = uintptr(0) 11950 for p != 0 && (*closure_avl)(unsafe.Pointer(p)).FpAfter == pPrev { 11951 pPrev = p 11952 p = (*closure_avl)(unsafe.Pointer(p)).FpUp 11953 } 11954 if p != 0 && pPrev == uintptr(0) { 11955 p = closureAvlFirst(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter) 11956 } 11957 return p 11958 } 11959 11960 func closureAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 11961 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 11962 if p == uintptr(0) { 11963 p = pNew 11964 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 11965 } else { 11966 for p != 0 { 11967 if (*closure_avl)(unsafe.Pointer(pNew)).Fid < (*closure_avl)(unsafe.Pointer(p)).Fid { 11968 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 11969 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 11970 } else { 11971 (*closure_avl)(unsafe.Pointer(p)).FpBefore = pNew 11972 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 11973 break 11974 } 11975 } else if (*closure_avl)(unsafe.Pointer(pNew)).Fid > (*closure_avl)(unsafe.Pointer(p)).Fid { 11976 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 11977 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 11978 } else { 11979 (*closure_avl)(unsafe.Pointer(p)).FpAfter = pNew 11980 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 11981 break 11982 } 11983 } else { 11984 return p 11985 } 11986 } 11987 } 11988 (*closure_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 11989 (*closure_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 11990 (*closure_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 11991 (*closure_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 11992 *(*uintptr)(unsafe.Pointer(ppHead)) = closureAvlBalance(tls, p) 11993 return uintptr(0) 11994 } 11995 11996 func closureAvlDestroy(tls *libc.TLS, p uintptr, xDestroy uintptr) { 11997 if p != 0 { 11998 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpBefore, xDestroy) 11999 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter, xDestroy) 12000 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, p) 12001 } 12002 } 12003 12004 func queuePush(tls *libc.TLS, pQueue uintptr, pNode uintptr) { 12005 (*closure_avl)(unsafe.Pointer(pNode)).FpList = uintptr(0) 12006 if (*closure_queue)(unsafe.Pointer(pQueue)).FpLast != 0 { 12007 (*closure_avl)(unsafe.Pointer((*closure_queue)(unsafe.Pointer(pQueue)).FpLast)).FpList = pNode 12008 } else { 12009 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = pNode 12010 } 12011 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = pNode 12012 } 12013 12014 func queuePull(tls *libc.TLS, pQueue uintptr) uintptr { 12015 var p uintptr = (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst 12016 if p != 0 { 12017 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = (*closure_avl)(unsafe.Pointer(p)).FpList 12018 if (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst == uintptr(0) { 12019 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = uintptr(0) 12020 } 12021 } 12022 return p 12023 } 12024 12025 func closureDequote(tls *libc.TLS, zIn uintptr) uintptr { 12026 var nIn sqlite3_int64 12027 var zOut uintptr 12028 12029 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 12030 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 12031 if zOut != 0 { 12032 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 12033 12034 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 12035 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 12036 } else { 12037 var iOut int32 = 0 12038 var iIn int32 12039 12040 if int32(q) == '[' { 12041 q = int8(']') 12042 } 12043 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 12044 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 12045 iIn++ 12046 } 12047 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 12048 } 12049 } 12050 12051 } 12052 return zOut 12053 } 12054 12055 func closureFree(tls *libc.TLS, p uintptr) { 12056 if p != 0 { 12057 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzDb) 12058 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzSelf) 12059 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzTableName) 12060 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzIdColumn) 12061 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzParentColumn) 12062 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 12063 sqlite3.Xsqlite3_free(tls, p) 12064 } 12065 } 12066 12067 func closureDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 12068 var p uintptr = pVtab 12069 12070 closureFree(tls, p) 12071 return SQLITE_OK 12072 } 12073 12074 func closureValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 12075 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 12076 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 12077 var i int32 12078 if nStr < nKey+1 { 12079 return uintptr(0) 12080 } 12081 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 12082 return uintptr(0) 12083 } 12084 for i = nKey; libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0; i++ { 12085 } 12086 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 12087 return uintptr(0) 12088 } 12089 i++ 12090 for libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0 { 12091 i++ 12092 } 12093 return zStr + uintptr(i) 12094 } 12095 12096 func closureConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 12097 bp := tls.Alloc(24) 12098 defer tls.Free(24) 12099 12100 var rc int32 12101 var pNew uintptr 12102 var zDb uintptr 12103 var zVal uintptr 12104 var i int32 12105 rc = SQLITE_OK 12106 pNew = uintptr(0) 12107 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 12108 12109 _ = pAux 12110 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12111 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_vtab{}))) 12112 if !(pNew == uintptr(0)) { 12113 goto __1 12114 } 12115 return SQLITE_NOMEM 12116 __1: 12117 ; 12118 rc = SQLITE_NOMEM 12119 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 12120 (*closure_vtab)(unsafe.Pointer(pNew)).Fdb = db 12121 (*closure_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zDb)) 12122 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 12123 goto __2 12124 } 12125 goto closureConnectError 12126 __2: 12127 ; 12128 (*closure_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 12129 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 12130 goto __3 12131 } 12132 goto closureConnectError 12133 __3: 12134 ; 12135 i = 3 12136 __4: 12137 if !(i < argc) { 12138 goto __6 12139 } 12140 zVal = closureValueOfKey(tls, ts+4215, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12141 if !(zVal != 0) { 12142 goto __7 12143 } 12144 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName) 12145 (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName = closureDequote(tls, zVal) 12146 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0)) { 12147 goto __8 12148 } 12149 goto closureConnectError 12150 __8: 12151 ; 12152 goto __5 12153 __7: 12154 ; 12155 zVal = closureValueOfKey(tls, ts+4225, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12156 if !(zVal != 0) { 12157 goto __9 12158 } 12159 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn) 12160 (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn = closureDequote(tls, zVal) 12161 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn == uintptr(0)) { 12162 goto __10 12163 } 12164 goto closureConnectError 12165 __10: 12166 ; 12167 goto __5 12168 __9: 12169 ; 12170 zVal = closureValueOfKey(tls, ts+4234, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12171 if !(zVal != 0) { 12172 goto __11 12173 } 12174 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn) 12175 (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn = closureDequote(tls, zVal) 12176 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn == uintptr(0)) { 12177 goto __12 12178 } 12179 goto closureConnectError 12180 __12: 12181 ; 12182 goto __5 12183 __11: 12184 ; 12185 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 12186 closureFree(tls, pNew) 12187 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12188 return SQLITE_ERROR 12189 goto __5 12190 __5: 12191 i++ 12192 goto __4 12193 goto __6 12194 __6: 12195 ; 12196 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 12197 ts+4247) 12198 if !(rc != SQLITE_OK) { 12199 goto __13 12200 } 12201 closureFree(tls, pNew) 12202 __13: 12203 ; 12204 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 12205 return rc 12206 12207 closureConnectError: 12208 closureFree(tls, pNew) 12209 return rc 12210 } 12211 12212 func closureOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 12213 var p uintptr = pVTab 12214 var pCur uintptr 12215 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_cursor{}))) 12216 if pCur == uintptr(0) { 12217 return SQLITE_NOMEM 12218 } 12219 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(closure_cursor{}))) 12220 (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab = p 12221 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 12222 (*closure_vtab)(unsafe.Pointer(p)).FnCursor++ 12223 return SQLITE_OK 12224 } 12225 12226 func closureClearCursor(tls *libc.TLS, pCur uintptr) { 12227 closureAvlDestroy(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 12228 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName) 12229 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn) 12230 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn) 12231 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = uintptr(0) 12232 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = uintptr(0) 12233 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = uintptr(0) 12234 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 12235 (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure = uintptr(0) 12236 } 12237 12238 func closureClose(tls *libc.TLS, cur uintptr) int32 { 12239 var pCur uintptr = cur 12240 closureClearCursor(tls, pCur) 12241 (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 12242 sqlite3.Xsqlite3_free(tls, pCur) 12243 return SQLITE_OK 12244 } 12245 12246 func closureNext(tls *libc.TLS, cur uintptr) int32 { 12247 var pCur uintptr = cur 12248 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlNext(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent) 12249 return SQLITE_OK 12250 } 12251 12252 func closureInsertNode(tls *libc.TLS, pQueue uintptr, pCur uintptr, id sqlite3_int64, iGeneration int32) int32 { 12253 var pNew uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_avl{}))) 12254 if pNew == uintptr(0) { 12255 return SQLITE_NOMEM 12256 } 12257 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_avl{}))) 12258 (*closure_avl)(unsafe.Pointer(pNew)).Fid = id 12259 (*closure_avl)(unsafe.Pointer(pNew)).FiGeneration = iGeneration 12260 closureAvlInsert(tls, pCur+48, pNew) 12261 queuePush(tls, pQueue, pNew) 12262 return SQLITE_OK 12263 } 12264 12265 func closureFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 12266 bp := tls.Alloc(96) 12267 defer tls.Free(96) 12268 12269 var pCur uintptr = pVtabCursor 12270 var pVtab uintptr = (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab 12271 var iRoot sqlite3_int64 12272 var mxGen int32 = 999999999 12273 var zSql uintptr 12274 12275 var pAvl uintptr 12276 var rc int32 = SQLITE_OK 12277 var zTableName uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName 12278 var zIdColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn 12279 var zParentColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn 12280 12281 _ = idxStr 12282 _ = argc 12283 closureClearCursor(tls, pCur) 12284 libc.Xmemset(tls, bp+72, 0, uint64(unsafe.Sizeof(closure_queue{}))) 12285 if idxNum&1 == 0 { 12286 return SQLITE_OK 12287 } 12288 iRoot = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 12289 if idxNum&0x000f0 != 0 { 12290 mxGen = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>4&0x0f)*8))) 12291 if idxNum&0x00002 != 0 { 12292 mxGen-- 12293 } 12294 } 12295 if idxNum&0x00f00 != 0 { 12296 zTableName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>8&0x0f)*8))) 12297 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 12298 } 12299 if idxNum&0x0f000 != 0 { 12300 zIdColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>12&0x0f)*8))) 12301 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zIdColumn)) 12302 } 12303 if idxNum&0x0f0000 != 0 { 12304 zParentColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>16&0x0f)*8))) 12305 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zParentColumn)) 12306 } 12307 12308 zSql = sqlite3.Xsqlite3_mprintf(tls, 12309 ts+4337, 12310 libc.VaList(bp+24, zTableName, zIdColumn, zTableName, zTableName, zParentColumn)) 12311 if zSql == uintptr(0) { 12312 return SQLITE_NOMEM 12313 } else { 12314 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, bp+88, uintptr(0)) 12315 sqlite3.Xsqlite3_free(tls, zSql) 12316 if rc != 0 { 12317 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fbase.FzErrMsg) 12318 (*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))) 12319 return rc 12320 } 12321 } 12322 if rc == SQLITE_OK { 12323 rc = closureInsertNode(tls, bp+72, pCur, iRoot, 0) 12324 } 12325 for libc.AssignUintptr(&pAvl, queuePull(tls, bp+72)) != uintptr(0) { 12326 if (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration >= mxGen { 12327 continue 12328 } 12329 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 1, (*closure_avl)(unsafe.Pointer(pAvl)).Fid) 12330 for rc == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) == SQLITE_ROW { 12331 if sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) == SQLITE_INTEGER { 12332 var iNew sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) 12333 if closureAvlSearch(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, iNew) == uintptr(0) { 12334 rc = closureInsertNode(tls, bp+72, pCur, iNew, (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration+1) 12335 } 12336 } 12337 } 12338 sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 12339 } 12340 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 12341 if rc == SQLITE_OK { 12342 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlFirst(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure) 12343 } 12344 12345 return rc 12346 } 12347 12348 func closureColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 12349 var pCur uintptr = cur 12350 switch i { 12351 case CLOSURE_COL_ID: 12352 { 12353 sqlite3.Xsqlite3_result_int64(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid) 12354 break 12355 12356 } 12357 case CLOSURE_COL_DEPTH: 12358 { 12359 sqlite3.Xsqlite3_result_int(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FiGeneration) 12360 break 12361 12362 } 12363 case CLOSURE_COL_ROOT: 12364 { 12365 sqlite3.Xsqlite3_result_null(tls, ctx) 12366 break 12367 12368 } 12369 case CLOSURE_COL_TABLENAME: 12370 { 12371 sqlite3.Xsqlite3_result_text(tls, ctx, 12372 func() uintptr { 12373 if (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName != 0 { 12374 return (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName 12375 } 12376 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzTableName 12377 }(), 12378 -1, libc.UintptrFromInt32(-1)) 12379 break 12380 12381 } 12382 case CLOSURE_COL_IDCOLUMN: 12383 { 12384 sqlite3.Xsqlite3_result_text(tls, ctx, 12385 func() uintptr { 12386 if (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn != 0 { 12387 return (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn 12388 } 12389 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzIdColumn 12390 }(), 12391 -1, libc.UintptrFromInt32(-1)) 12392 break 12393 12394 } 12395 case CLOSURE_COL_PARENTCOLUMN: 12396 { 12397 sqlite3.Xsqlite3_result_text(tls, ctx, 12398 func() uintptr { 12399 if (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn != 0 { 12400 return (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn 12401 } 12402 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzParentColumn 12403 }(), 12404 -1, libc.UintptrFromInt32(-1)) 12405 break 12406 12407 } 12408 } 12409 return SQLITE_OK 12410 } 12411 12412 func closureRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 12413 var pCur uintptr = cur 12414 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid 12415 return SQLITE_OK 12416 } 12417 12418 func closureEof(tls *libc.TLS, cur uintptr) int32 { 12419 var pCur uintptr = cur 12420 return libc.Bool32((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 12421 } 12422 12423 func closureBestIndex(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) int32 { 12424 var iPlan int32 = 0 12425 var i int32 12426 var idx int32 = 1 12427 var pConstraint uintptr 12428 var pVtab uintptr = pTab 12429 var rCost float64 = 10000000.0 12430 12431 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 12432 i = 0 12433 __1: 12434 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 12435 goto __3 12436 } 12437 { 12438 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 12439 goto __2 12440 } 12441 if iPlan&1 == 0 && 12442 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_ROOT && 12443 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12444 iPlan = iPlan | 1 12445 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 12446 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12447 rCost = rCost / 100.0 12448 } 12449 if iPlan&0x0000f0 == 0 && 12450 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_DEPTH && 12451 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 12452 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE || 12453 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 12454 iPlan = iPlan | idx<<4 12455 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12456 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 12457 iPlan = iPlan | 0x000002 12458 } 12459 rCost = rCost / 5.0 12460 } 12461 if iPlan&0x000f00 == 0 && 12462 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_TABLENAME && 12463 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12464 iPlan = iPlan | idx<<8 12465 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12466 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12467 rCost = rCost / 5.0 12468 } 12469 if iPlan&0x00f000 == 0 && 12470 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_IDCOLUMN && 12471 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12472 iPlan = iPlan | idx<<12 12473 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12474 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12475 } 12476 if iPlan&0x0f0000 == 0 && 12477 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_PARENTCOLUMN && 12478 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12479 iPlan = iPlan | idx<<16 12480 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12481 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12482 } 12483 12484 } 12485 goto __2 12486 __2: 12487 i++ 12488 pConstraint += 12 12489 goto __1 12490 goto __3 12491 __3: 12492 ; 12493 if (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName == uintptr(0) && iPlan&0x000f00 == 0 || 12494 (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn == uintptr(0) && iPlan&0x00f000 == 0 || 12495 (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn == uintptr(0) && iPlan&0x0f0000 == 0 { 12496 iPlan = 0 12497 } 12498 if iPlan&1 == 0 { 12499 rCost = rCost * 1e30 12500 i = 0 12501 __4: 12502 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 12503 goto __6 12504 } 12505 { 12506 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 0 12507 12508 } 12509 goto __5 12510 __5: 12511 i++ 12512 pConstraint += 12 12513 goto __4 12514 goto __6 12515 __6: 12516 ; 12517 iPlan = 0 12518 } 12519 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 12520 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 12521 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == CLOSURE_COL_ID && 12522 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 12523 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 12524 } 12525 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 12526 12527 return SQLITE_OK 12528 } 12529 12530 var closureModule = sqlite3_module{ 12531 FxCreate: 0, 12532 FxConnect: 0, 12533 FxBestIndex: 0, 12534 FxDisconnect: 0, 12535 FxDestroy: 0, 12536 FxOpen: 0, 12537 FxClose: 0, 12538 FxFilter: 0, 12539 FxNext: 0, 12540 FxEof: 0, 12541 FxColumn: 0, 12542 FxRowid: 0, 12543 } 12544 12545 func sqlite3_closure_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 12546 var rc int32 = SQLITE_OK 12547 _ = pApi 12548 12549 _ = pzErrMsg 12550 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4383, uintptr(unsafe.Pointer(&closureModule)), uintptr(0)) 12551 return rc 12552 } 12553 12554 type CsvReader1 = struct { 12555 Fin uintptr 12556 Fz uintptr 12557 Fn int32 12558 FnAlloc int32 12559 FnLine int32 12560 FbNotFirst int32 12561 FcTerm int32 12562 F__ccgo_pad1 [4]byte 12563 FiIn size_t 12564 FnIn size_t 12565 FzIn uintptr 12566 FzErr [200]int8 12567 } 12568 12569 type CsvReader = CsvReader1 12570 12571 func csv_reader_init(tls *libc.TLS, p uintptr) { 12572 (*CsvReader)(unsafe.Pointer(p)).Fin = uintptr(0) 12573 (*CsvReader)(unsafe.Pointer(p)).Fz = uintptr(0) 12574 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12575 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = 0 12576 (*CsvReader)(unsafe.Pointer(p)).FnLine = 0 12577 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 0 12578 (*CsvReader)(unsafe.Pointer(p)).FnIn = uint64(0) 12579 (*CsvReader)(unsafe.Pointer(p)).FzIn = uintptr(0) 12580 *(*int8)(unsafe.Pointer(p + 64)) = int8(0) 12581 } 12582 12583 func csv_reader_reset(tls *libc.TLS, p uintptr) { 12584 if (*CsvReader)(unsafe.Pointer(p)).Fin != 0 { 12585 libc.Xfclose(tls, (*CsvReader)(unsafe.Pointer(p)).Fin) 12586 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 12587 } 12588 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).Fz) 12589 csv_reader_init(tls, p) 12590 } 12591 12592 func csv_errmsg(tls *libc.TLS, p uintptr, zFormat uintptr, va uintptr) { 12593 var ap va_list 12594 _ = ap 12595 ap = va 12596 sqlite3.Xsqlite3_vsnprintf(tls, CSV_MXERR, p+64, zFormat, ap) 12597 _ = ap 12598 } 12599 12600 func csv_reader_open(tls *libc.TLS, p uintptr, zFilename uintptr, zData uintptr) int32 { 12601 bp := tls.Alloc(8) 12602 defer tls.Free(8) 12603 12604 if zFilename != 0 { 12605 (*CsvReader)(unsafe.Pointer(p)).FzIn = sqlite3.Xsqlite3_malloc(tls, CSV_INBUFSZ) 12606 if (*CsvReader)(unsafe.Pointer(p)).FzIn == uintptr(0) { 12607 csv_errmsg(tls, p, ts+2069, 0) 12608 return 1 12609 } 12610 (*CsvReader)(unsafe.Pointer(p)).Fin = libc.Xfopen(tls, zFilename, ts+4402) 12611 if (*CsvReader)(unsafe.Pointer(p)).Fin == uintptr(0) { 12612 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 12613 csv_reader_reset(tls, p) 12614 csv_errmsg(tls, p, ts+4405, libc.VaList(bp, zFilename)) 12615 return 1 12616 } 12617 } else { 12618 (*CsvReader)(unsafe.Pointer(p)).FzIn = zData 12619 (*CsvReader)(unsafe.Pointer(p)).FnIn = libc.Xstrlen(tls, zData) 12620 } 12621 return 0 12622 } 12623 12624 func csv_getc_refill(tls *libc.TLS, p uintptr) int32 { 12625 var got size_t 12626 12627 got = libc.Xfread(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn, uint64(1), uint64(CSV_INBUFSZ), (*CsvReader)(unsafe.Pointer(p)).Fin) 12628 if got == uint64(0) { 12629 return -1 12630 } 12631 (*CsvReader)(unsafe.Pointer(p)).FnIn = got 12632 (*CsvReader)(unsafe.Pointer(p)).FiIn = uint64(1) 12633 return int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn))) 12634 } 12635 12636 func csv_getc(tls *libc.TLS, p uintptr) int32 { 12637 if (*CsvReader)(unsafe.Pointer(p)).FiIn >= (*CsvReader)(unsafe.Pointer(p)).FnIn { 12638 if (*CsvReader)(unsafe.Pointer(p)).Fin != uintptr(0) { 12639 return csv_getc_refill(tls, p) 12640 } 12641 return -1 12642 } 12643 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn + uintptr(libc.PostIncUint64(&(*CsvReader)(unsafe.Pointer(p)).FiIn, 1))))) 12644 } 12645 12646 func csv_resize_and_append(tls *libc.TLS, p uintptr, c int8) int32 { 12647 var zNew uintptr 12648 var nNew int32 = (*CsvReader)(unsafe.Pointer(p)).FnAlloc*2 + 100 12649 zNew = sqlite3.Xsqlite3_realloc64(tls, (*CsvReader)(unsafe.Pointer(p)).Fz, uint64(nNew)) 12650 if zNew != 0 { 12651 (*CsvReader)(unsafe.Pointer(p)).Fz = zNew 12652 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = nNew 12653 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 12654 return 0 12655 } else { 12656 csv_errmsg(tls, p, ts+2069, 0) 12657 return 1 12658 } 12659 return int32(0) 12660 } 12661 12662 func csv_append(tls *libc.TLS, p uintptr, c int8) int32 { 12663 if (*CsvReader)(unsafe.Pointer(p)).Fn >= (*CsvReader)(unsafe.Pointer(p)).FnAlloc-1 { 12664 return csv_resize_and_append(tls, p, c) 12665 } 12666 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 12667 return 0 12668 } 12669 12670 func csv_read_one_field(tls *libc.TLS, p uintptr) uintptr { 12671 bp := tls.Alloc(32) 12672 defer tls.Free(32) 12673 12674 var c int32 12675 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12676 c = csv_getc(tls, p) 12677 if c == -1 { 12678 (*CsvReader)(unsafe.Pointer(p)).FcTerm = -1 12679 return uintptr(0) 12680 } 12681 if c == '"' { 12682 var pc int32 12683 var ppc int32 12684 var startLine int32 = (*CsvReader)(unsafe.Pointer(p)).FnLine 12685 pc = libc.AssignInt32(&ppc, 0) 12686 for 1 != 0 { 12687 c = csv_getc(tls, p) 12688 if c <= '"' || pc == '"' { 12689 if c == '\n' { 12690 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 12691 } 12692 if c == '"' { 12693 if pc == '"' { 12694 pc = 0 12695 continue 12696 } 12697 } 12698 if c == ',' && pc == '"' || 12699 c == '\n' && pc == '"' || 12700 c == '\n' && pc == '\r' && ppc == '"' || 12701 c == -1 && pc == '"' { 12702 for __ccgo := true; __ccgo; __ccgo = int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn)))) != '"' { 12703 (*CsvReader)(unsafe.Pointer(p)).Fn-- 12704 } 12705 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12706 break 12707 } 12708 if pc == '"' && c != '\r' { 12709 csv_errmsg(tls, p, ts+4434, libc.VaList(bp, (*CsvReader)(unsafe.Pointer(p)).FnLine, '"')) 12710 break 12711 } 12712 if c == -1 { 12713 csv_errmsg(tls, p, ts+4466, 12714 libc.VaList(bp+16, startLine, '"')) 12715 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12716 break 12717 } 12718 } 12719 if csv_append(tls, p, int8(c)) != 0 { 12720 return uintptr(0) 12721 } 12722 ppc = pc 12723 pc = c 12724 } 12725 } else { 12726 if c&0xff == 0xef && (*CsvReader)(unsafe.Pointer(p)).FbNotFirst == 0 { 12727 csv_append(tls, p, int8(c)) 12728 c = csv_getc(tls, p) 12729 if c&0xff == 0xbb { 12730 csv_append(tls, p, int8(c)) 12731 c = csv_getc(tls, p) 12732 if c&0xff == 0xbf { 12733 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 12734 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12735 return csv_read_one_field(tls, p) 12736 } 12737 } 12738 } 12739 for c > ',' || c != -1 && c != ',' && c != '\n' { 12740 if csv_append(tls, p, int8(c)) != 0 { 12741 return uintptr(0) 12742 } 12743 c = csv_getc(tls, p) 12744 } 12745 if c == '\n' { 12746 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 12747 if (*CsvReader)(unsafe.Pointer(p)).Fn > 0 && int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn-1)))) == '\r' { 12748 (*CsvReader)(unsafe.Pointer(p)).Fn-- 12749 } 12750 } 12751 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12752 } 12753 if (*CsvReader)(unsafe.Pointer(p)).Fz != 0 { 12754 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn))) = int8(0) 12755 } 12756 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 12757 return (*CsvReader)(unsafe.Pointer(p)).Fz 12758 } 12759 12760 type CsvTable1 = struct { 12761 Fbase sqlite3_vtab 12762 FzFilename uintptr 12763 FzData uintptr 12764 FiStart int64 12765 FnCol int32 12766 FtstFlags uint32 12767 } 12768 12769 type CsvTable = CsvTable1 12770 12771 type CsvCursor1 = struct { 12772 Fbase sqlite3_vtab_cursor 12773 Frdr CsvReader 12774 FazVal uintptr 12775 FaLen uintptr 12776 FiRowid sqlite3_int64 12777 } 12778 12779 type CsvCursor = CsvCursor1 12780 12781 func csv_xfer_error(tls *libc.TLS, pTab uintptr, pRdr uintptr) { 12782 bp := tls.Alloc(8) 12783 defer tls.Free(8) 12784 12785 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg) 12786 (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, pRdr+64)) 12787 } 12788 12789 func csvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 12790 var p uintptr = pVtab 12791 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzFilename) 12792 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzData) 12793 sqlite3.Xsqlite3_free(tls, p) 12794 return SQLITE_OK 12795 } 12796 12797 func csv_skip_whitespace(tls *libc.TLS, z uintptr) uintptr { 12798 for libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(z))))) != 0 { 12799 z++ 12800 } 12801 return z 12802 } 12803 12804 func csv_trim_whitespace(tls *libc.TLS, z uintptr) { 12805 var n size_t = libc.Xstrlen(tls, z) 12806 for n > uint64(0) && libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(n)))))) != 0 { 12807 n-- 12808 } 12809 *(*int8)(unsafe.Pointer(z + uintptr(n))) = int8(0) 12810 } 12811 12812 func csv_dequote(tls *libc.TLS, z uintptr) { 12813 var j int32 12814 var cQuote int8 = *(*int8)(unsafe.Pointer(z)) 12815 var i size_t 12816 var n size_t 12817 12818 if int32(cQuote) != '\'' && int32(cQuote) != '"' { 12819 return 12820 } 12821 n = libc.Xstrlen(tls, z) 12822 if n < uint64(2) || int32(*(*int8)(unsafe.Pointer(z + uintptr(n-uint64(1))))) != int32(*(*int8)(unsafe.Pointer(z))) { 12823 return 12824 } 12825 i = uint64(1) 12826 j = 0 12827 for ; i < n-uint64(1); i++ { 12828 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == int32(cQuote) && int32(*(*int8)(unsafe.Pointer(z + uintptr(i+uint64(1))))) == int32(cQuote) { 12829 i++ 12830 } 12831 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 12832 } 12833 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 12834 } 12835 12836 func csv_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr) uintptr { 12837 z = csv_skip_whitespace(tls, z) 12838 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 12839 return uintptr(0) 12840 } 12841 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 12842 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 12843 return uintptr(0) 12844 } 12845 return csv_skip_whitespace(tls, z+uintptr(1)) 12846 } 12847 12848 func csv_string_parameter(tls *libc.TLS, p uintptr, zParam uintptr, zArg uintptr, pzVal uintptr) int32 { 12849 bp := tls.Alloc(16) 12850 defer tls.Free(16) 12851 12852 var zValue uintptr 12853 zValue = csv_parameter(tls, zParam, int32(libc.Xstrlen(tls, zParam)), zArg) 12854 if zValue == uintptr(0) { 12855 return 0 12856 } 12857 *(*int8)(unsafe.Pointer(p + 64)) = int8(0) 12858 if *(*uintptr)(unsafe.Pointer(pzVal)) != 0 { 12859 csv_errmsg(tls, p, ts+4505, libc.VaList(bp, zParam)) 12860 return 1 12861 } 12862 *(*uintptr)(unsafe.Pointer(pzVal)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zValue)) 12863 if *(*uintptr)(unsafe.Pointer(pzVal)) == uintptr(0) { 12864 csv_errmsg(tls, p, ts+2069, 0) 12865 return 1 12866 } 12867 csv_trim_whitespace(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 12868 csv_dequote(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 12869 return 1 12870 } 12871 12872 func csv_boolean(tls *libc.TLS, z uintptr) int32 { 12873 if sqlite3.Xsqlite3_stricmp(tls, ts+4174, z) == 0 || 12874 sqlite3.Xsqlite3_stricmp(tls, ts+4178, z) == 0 || 12875 sqlite3.Xsqlite3_stricmp(tls, ts+4534, z) == 0 || 12876 int32(*(*int8)(unsafe.Pointer(z))) == '1' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 12877 return 1 12878 } 12879 if sqlite3.Xsqlite3_stricmp(tls, ts+4539, z) == 0 || 12880 sqlite3.Xsqlite3_stricmp(tls, ts+4542, z) == 0 || 12881 sqlite3.Xsqlite3_stricmp(tls, ts+4546, z) == 0 || 12882 int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 12883 return 0 12884 } 12885 return -1 12886 } 12887 12888 func csv_boolean_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr, pValue uintptr) int32 { 12889 var b int32 12890 z = csv_skip_whitespace(tls, z) 12891 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 12892 return 0 12893 } 12894 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 12895 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 12896 *(*int32)(unsafe.Pointer(pValue)) = 1 12897 return 1 12898 } 12899 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 12900 return 0 12901 } 12902 z = csv_skip_whitespace(tls, z+uintptr(1)) 12903 b = csv_boolean(tls, z) 12904 if b >= 0 { 12905 *(*int32)(unsafe.Pointer(pValue)) = b 12906 return 1 12907 } 12908 return 0 12909 } 12910 12911 func csvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 12912 bp := tls.Alloc(372) 12913 defer tls.Free(372) 12914 12915 var pNew uintptr 12916 var bHeader int32 12917 var rc int32 12918 var i int32 12919 var j int32 12920 var tstFlags int32 12921 12922 var nCol int32 12923 12924 var z uintptr 12925 var zValue uintptr 12926 var z1 uintptr 12927 var pStr uintptr 12928 var zSep uintptr 12929 var iCol int32 12930 pNew = uintptr(0) 12931 bHeader = -1 12932 rc = SQLITE_OK 12933 tstFlags = 0 12934 nCol = -99 12935 12936 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(CsvReader{}))) 12937 libc.Xmemset(tls, bp+344, 0, uint64(unsafe.Sizeof([3]uintptr{}))) 12938 i = 3 12939 __1: 12940 if !(i < argc) { 12941 goto __3 12942 } 12943 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 12944 j = 0 12945 __4: 12946 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 12947 goto __6 12948 } 12949 if !(csv_string_parameter(tls, bp+80, azParam[j], z, bp+344+uintptr(j)*8) != 0) { 12950 goto __7 12951 } 12952 goto __6 12953 __7: 12954 ; 12955 goto __5 12956 __5: 12957 j++ 12958 goto __4 12959 goto __6 12960 __6: 12961 ; 12962 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 12963 goto __8 12964 } 12965 if !(*(*int8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 12966 goto __10 12967 } 12968 goto csvtab_connect_error 12969 __10: 12970 ; 12971 goto __9 12972 __8: 12973 if !(csv_boolean_parameter(tls, ts+4552, 6, z, bp+368) != 0) { 12974 goto __11 12975 } 12976 if !(bHeader >= 0) { 12977 goto __13 12978 } 12979 csv_errmsg(tls, bp+80, ts+4559, 0) 12980 goto csvtab_connect_error 12981 __13: 12982 ; 12983 bHeader = *(*int32)(unsafe.Pointer(bp + 368)) 12984 goto __12 12985 __11: 12986 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4592, 9, z)) != uintptr(0)) { 12987 goto __14 12988 } 12989 tstFlags = int32(uint32(libc.Xatoi(tls, zValue))) 12990 goto __15 12991 __14: 12992 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4602, 7, z)) != uintptr(0)) { 12993 goto __16 12994 } 12995 if !(nCol > 0) { 12996 goto __18 12997 } 12998 csv_errmsg(tls, bp+80, ts+4610, 0) 12999 goto csvtab_connect_error 13000 __18: 13001 ; 13002 nCol = libc.Xatoi(tls, zValue) 13003 if !(nCol <= 0) { 13004 goto __19 13005 } 13006 csv_errmsg(tls, bp+80, ts+4644, 0) 13007 goto csvtab_connect_error 13008 __19: 13009 ; 13010 goto __17 13011 __16: 13012 csv_errmsg(tls, bp+80, ts+4675, libc.VaList(bp, z)) 13013 goto csvtab_connect_error 13014 __17: 13015 ; 13016 __15: 13017 ; 13018 __12: 13019 ; 13020 __9: 13021 ; 13022 goto __2 13023 __2: 13024 i++ 13025 goto __1 13026 goto __3 13027 __3: 13028 ; 13029 if !(libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344)) == uintptr(0)) == libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) == uintptr(0))) { 13030 goto __20 13031 } 13032 csv_errmsg(tls, bp+80, ts+4695, 0) 13033 goto csvtab_connect_error 13034 __20: 13035 ; 13036 if !((nCol <= 0 || bHeader == 1) && 13037 csv_reader_open(tls, bp+80, *(*uintptr)(unsafe.Pointer(bp + 344)), *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8))) != 0) { 13038 goto __21 13039 } 13040 goto csvtab_connect_error 13041 __21: 13042 ; 13043 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CsvTable{}))) 13044 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 13045 if !(pNew == uintptr(0)) { 13046 goto __22 13047 } 13048 goto csvtab_connect_oom 13049 __22: 13050 ; 13051 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(CsvTable{}))) 13052 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 13053 goto __23 13054 } 13055 pStr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 13056 zSep = ts + 584 13057 iCol = 0 13058 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+979, 0) 13059 if !(nCol < 0 && bHeader < 1) { 13060 goto __25 13061 } 13062 nCol = 0 13063 __26: 13064 csv_read_one_field(tls, bp+80) 13065 nCol++ 13066 goto __27 13067 __27: 13068 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13069 goto __26 13070 } 13071 goto __28 13072 __28: 13073 ; 13074 __25: 13075 ; 13076 if !(nCol > 0 && bHeader < 1) { 13077 goto __29 13078 } 13079 iCol = 0 13080 __31: 13081 if !(iCol < nCol) { 13082 goto __33 13083 } 13084 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+8, zSep, iCol)) 13085 zSep = ts + 4758 13086 goto __32 13087 __32: 13088 iCol++ 13089 goto __31 13090 goto __33 13091 __33: 13092 ; 13093 goto __30 13094 __29: 13095 __34: 13096 z1 = csv_read_one_field(tls, bp+80) 13097 if !(nCol > 0 && iCol < nCol || nCol < 0 && bHeader != 0) { 13098 goto __37 13099 } 13100 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4760, libc.VaList(bp+24, zSep, z1)) 13101 zSep = ts + 4758 13102 iCol++ 13103 __37: 13104 ; 13105 goto __35 13106 __35: 13107 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13108 goto __34 13109 } 13110 goto __36 13111 __36: 13112 ; 13113 if !(nCol < 0) { 13114 goto __38 13115 } 13116 nCol = iCol 13117 goto __39 13118 __38: 13119 __40: 13120 if !(iCol < nCol) { 13121 goto __41 13122 } 13123 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+40, zSep, libc.PreIncInt32(&iCol, 1))) 13124 zSep = ts + 4758 13125 goto __40 13126 __41: 13127 ; 13128 __39: 13129 ; 13130 __30: 13131 ; 13132 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13133 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+585, 0) 13134 *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) = sqlite3.Xsqlite3_str_finish(tls, pStr) 13135 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 13136 goto __42 13137 } 13138 goto csvtab_connect_oom 13139 __42: 13140 ; 13141 goto __24 13142 __23: 13143 if !(nCol < 0) { 13144 goto __43 13145 } 13146 __45: 13147 csv_read_one_field(tls, bp+80) 13148 (*CsvTable)(unsafe.Pointer(pNew)).FnCol++ 13149 goto __46 13150 __46: 13151 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13152 goto __45 13153 } 13154 goto __47 13155 __47: 13156 ; 13157 goto __44 13158 __43: 13159 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13160 __44: 13161 ; 13162 __24: 13163 ; 13164 (*CsvTable)(unsafe.Pointer(pNew)).FzFilename = *(*uintptr)(unsafe.Pointer(bp + 344)) 13165 *(*uintptr)(unsafe.Pointer(bp + 344)) = uintptr(0) 13166 (*CsvTable)(unsafe.Pointer(pNew)).FzData = *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) 13167 *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) = uintptr(0) 13168 (*CsvTable)(unsafe.Pointer(pNew)).FtstFlags = uint32(tstFlags) 13169 if !(bHeader != 1) { 13170 goto __48 13171 } 13172 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(0) 13173 goto __49 13174 __48: 13175 if !((*CsvTable)(unsafe.Pointer(pNew)).FzData != 0) { 13176 goto __50 13177 } 13178 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(int32((*CsvReader)(unsafe.Pointer(bp + 80)).FiIn)) 13179 goto __51 13180 __50: 13181 (*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)) 13182 __51: 13183 ; 13184 __49: 13185 ; 13186 csv_reader_reset(tls, bp+80) 13187 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8))) 13188 if !(rc != 0) { 13189 goto __52 13190 } 13191 csv_errmsg(tls, bp+80, ts+4772, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)), sqlite3.Xsqlite3_errmsg(tls, db))) 13192 goto csvtab_connect_error 13193 __52: 13194 ; 13195 i = 0 13196 __53: 13197 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 13198 goto __55 13199 } 13200 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 13201 goto __54 13202 __54: 13203 i++ 13204 goto __53 13205 goto __55 13206 __55: 13207 ; 13208 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 13209 return SQLITE_OK 13210 13211 csvtab_connect_oom: 13212 rc = SQLITE_NOMEM 13213 csv_errmsg(tls, bp+80, ts+2069, 0) 13214 13215 csvtab_connect_error: 13216 if !(pNew != 0) { 13217 goto __56 13218 } 13219 csvtabDisconnect(tls, pNew) 13220 __56: 13221 ; 13222 i = 0 13223 __57: 13224 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 13225 goto __59 13226 } 13227 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 13228 goto __58 13229 __58: 13230 i++ 13231 goto __57 13232 goto __59 13233 __59: 13234 ; 13235 if !(*(*int8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 13236 goto __60 13237 } 13238 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(pzErr))) 13239 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, bp+80+64)) 13240 __60: 13241 ; 13242 csv_reader_reset(tls, bp+80) 13243 if !(rc == SQLITE_OK) { 13244 goto __61 13245 } 13246 rc = SQLITE_ERROR 13247 __61: 13248 ; 13249 return rc 13250 } 13251 13252 var azParam = [3]uintptr{ 13253 ts + 4794, ts + 4803, ts + 4808, 13254 } 13255 13256 func csvtabCursorRowReset(tls *libc.TLS, pCur uintptr) { 13257 var pTab uintptr = (*CsvCursor)(unsafe.Pointer(pCur)).Fbase.FpVtab 13258 var i int32 13259 for i = 0; i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol; i++ { 13260 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 13261 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 13262 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13263 } 13264 } 13265 13266 func csvtabCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13267 return csvtabConnect(tls, db, pAux, argc, argv, ppVtab, pzErr) 13268 } 13269 13270 func csvtabClose(tls *libc.TLS, cur uintptr) int32 { 13271 var pCur uintptr = cur 13272 csvtabCursorRowReset(tls, pCur) 13273 csv_reader_reset(tls, pCur+8) 13274 sqlite3.Xsqlite3_free(tls, cur) 13275 return SQLITE_OK 13276 } 13277 13278 func csvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 13279 var pTab uintptr = p 13280 var pCur uintptr 13281 var nByte size_t 13282 nByte = uint64(unsafe.Sizeof(CsvCursor{})) + (uint64(unsafe.Sizeof(uintptr(0)))+uint64(unsafe.Sizeof(int32(0))))*uint64((*CsvTable)(unsafe.Pointer(pTab)).FnCol) 13283 pCur = sqlite3.Xsqlite3_malloc64(tls, nByte) 13284 if pCur == uintptr(0) { 13285 return SQLITE_NOMEM 13286 } 13287 libc.Xmemset(tls, pCur, 0, nByte) 13288 (*CsvCursor)(unsafe.Pointer(pCur)).FazVal = pCur + 1*296 13289 (*CsvCursor)(unsafe.Pointer(pCur)).FaLen = (*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr((*CsvTable)(unsafe.Pointer(pTab)).FnCol)*8 13290 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 13291 if csv_reader_open(tls, pCur+8, (*CsvTable)(unsafe.Pointer(pTab)).FzFilename, (*CsvTable)(unsafe.Pointer(pTab)).FzData) != 0 { 13292 csv_xfer_error(tls, pTab, pCur+8) 13293 return SQLITE_ERROR 13294 } 13295 return SQLITE_OK 13296 } 13297 13298 func csvtabNext(tls *libc.TLS, cur uintptr) int32 { 13299 var pCur uintptr = cur 13300 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13301 var i int32 = 0 13302 var z uintptr 13303 for __ccgo := true; __ccgo; __ccgo = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == ',' { 13304 z = csv_read_one_field(tls, pCur+8) 13305 if z == uintptr(0) { 13306 break 13307 } 13308 if i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13309 if *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) < (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1 { 13310 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)) 13311 if zNew == uintptr(0) { 13312 csv_errmsg(tls, pCur+8, ts+2069, 0) 13313 csv_xfer_error(tls, pTab, pCur+8) 13314 break 13315 } 13316 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = zNew 13317 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn + 1 13318 } 13319 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), z, uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 13320 i++ 13321 } 13322 } 13323 if z == uintptr(0) || (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == -1 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13324 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(-1) 13325 } else { 13326 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid++ 13327 for i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13328 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 13329 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 13330 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13331 i++ 13332 } 13333 } 13334 return SQLITE_OK 13335 } 13336 13337 func csvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 13338 var pCur uintptr = cur 13339 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13340 if i >= 0 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol && *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) != uintptr(0) { 13341 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), -1, libc.UintptrFromInt32(-1)) 13342 } 13343 return SQLITE_OK 13344 } 13345 13346 func csvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13347 var pCur uintptr = cur 13348 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid 13349 return SQLITE_OK 13350 } 13351 13352 func csvtabEof(tls *libc.TLS, cur uintptr) int32 { 13353 var pCur uintptr = cur 13354 return libc.Bool32((*CsvCursor)(unsafe.Pointer(pCur)).FiRowid < int64(0)) 13355 } 13356 13357 func csvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 13358 var pCur uintptr = pVtabCursor 13359 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 13360 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 13361 if (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin == uintptr(0) { 13362 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = size_t((*CsvTable)(unsafe.Pointer(pTab)).FiStart) 13363 } else { 13364 libc.Xfseek(tls, (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin, (*CsvTable)(unsafe.Pointer(pTab)).FiStart, SEEK_SET) 13365 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = uint64(0) 13366 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FnIn = uint64(0) 13367 } 13368 return csvtabNext(tls, pVtabCursor) 13369 } 13370 13371 func csvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 13372 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000) 13373 if (*CsvTable)(unsafe.Pointer(tab)).FtstFlags&uint32(CSVTEST_FIDX) != uint32(0) { 13374 var i int32 13375 var nConst int32 = 0 13376 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 13377 var op uint8 13378 if int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable) == 0 { 13379 continue 13380 } 13381 op = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop 13382 if int32(op) == SQLITE_INDEX_CONSTRAINT_EQ || 13383 int32(op) == SQLITE_INDEX_CONSTRAINT_LIKE || 13384 int32(op) == SQLITE_INDEX_CONSTRAINT_GLOB { 13385 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 13386 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(nConst)*8)).FargvIndex = nConst + 1 13387 nConst++ 13388 } 13389 } 13390 } 13391 return SQLITE_OK 13392 } 13393 13394 var CsvModule = sqlite3_module{ 13395 FxCreate: 0, 13396 FxConnect: 0, 13397 FxBestIndex: 0, 13398 FxDisconnect: 0, 13399 FxDestroy: 0, 13400 FxOpen: 0, 13401 FxClose: 0, 13402 FxFilter: 0, 13403 FxNext: 0, 13404 FxEof: 0, 13405 FxColumn: 0, 13406 FxRowid: 0, 13407 } 13408 13409 func csvtabUpdate(tls *libc.TLS, p uintptr, n int32, v uintptr, x uintptr) int32 { 13410 return SQLITE_READONLY 13411 } 13412 13413 var CsvModuleFauxWrite = sqlite3_module{ 13414 FxCreate: 0, 13415 FxConnect: 0, 13416 FxBestIndex: 0, 13417 FxDisconnect: 0, 13418 FxDestroy: 0, 13419 FxOpen: 0, 13420 FxClose: 0, 13421 FxFilter: 0, 13422 FxNext: 0, 13423 FxEof: 0, 13424 FxColumn: 0, 13425 FxRowid: 0, 13426 FxUpdate: 0, 13427 } 13428 13429 func sqlite3_csv_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 13430 var rc int32 13431 _ = pApi 13432 13433 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4815, uintptr(unsafe.Pointer(&CsvModule)), uintptr(0)) 13434 if rc == SQLITE_OK { 13435 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4819, uintptr(unsafe.Pointer(&CsvModuleFauxWrite)), uintptr(0)) 13436 } 13437 return rc 13438 } 13439 13440 type Decimal1 = struct { 13441 Fsign int8 13442 Foom int8 13443 FisNull int8 13444 FisInit int8 13445 FnDigit int32 13446 FnFrac int32 13447 F__ccgo_pad1 [4]byte 13448 Fa uintptr 13449 } 13450 13451 type Decimal = Decimal1 13452 13453 func decimal_clear(tls *libc.TLS, p uintptr) { 13454 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(p)).Fa) 13455 } 13456 13457 func decimal_free(tls *libc.TLS, p uintptr) { 13458 if p != 0 { 13459 decimal_clear(tls, p) 13460 sqlite3.Xsqlite3_free(tls, p) 13461 } 13462 } 13463 13464 func decimal_new(tls *libc.TLS, pCtx uintptr, pIn uintptr, nAlt int32, zAlt uintptr) uintptr { 13465 var p uintptr 13466 var n int32 13467 var i int32 13468 var zIn uintptr 13469 var iExp int32 13470 var j int32 13471 var neg int32 13472 var c int8 13473 var nExtra int32 13474 iExp = 0 13475 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Decimal{}))) 13476 if !(p == uintptr(0)) { 13477 goto __1 13478 } 13479 goto new_no_mem 13480 __1: 13481 ; 13482 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 13483 (*Decimal)(unsafe.Pointer(p)).Foom = int8(0) 13484 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 13485 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(0) 13486 (*Decimal)(unsafe.Pointer(p)).FnDigit = 0 13487 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 13488 if !(zAlt != 0) { 13489 goto __2 13490 } 13491 n = nAlt 13492 zIn = zAlt 13493 goto __3 13494 __2: 13495 if !(sqlite3.Xsqlite3_value_type(tls, pIn) == SQLITE_NULL) { 13496 goto __4 13497 } 13498 (*Decimal)(unsafe.Pointer(p)).Fa = uintptr(0) 13499 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(1) 13500 return p 13501 __4: 13502 ; 13503 n = sqlite3.Xsqlite3_value_bytes(tls, pIn) 13504 zIn = sqlite3.Xsqlite3_value_text(tls, pIn) 13505 __3: 13506 ; 13507 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc64(tls, uint64(n+1)) 13508 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13509 goto __5 13510 } 13511 goto new_no_mem 13512 __5: 13513 ; 13514 i = 0 13515 __6: 13516 if !(libc.Xisspace(tls, int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i))))) != 0) { 13517 goto __8 13518 } 13519 goto __7 13520 __7: 13521 i++ 13522 goto __6 13523 goto __8 13524 __8: 13525 ; 13526 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '-') { 13527 goto __9 13528 } 13529 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(1) 13530 i++ 13531 goto __10 13532 __9: 13533 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '+') { 13534 goto __11 13535 } 13536 i++ 13537 __11: 13538 ; 13539 __10: 13540 ; 13541 __12: 13542 if !(i < n && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '0') { 13543 goto __13 13544 } 13545 i++ 13546 goto __12 13547 __13: 13548 ; 13549 __14: 13550 if !(i < n) { 13551 goto __15 13552 } 13553 c = int8(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) 13554 if !(int32(c) >= '0' && int32(c) <= '9') { 13555 goto __16 13556 } 13557 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncInt32(&(*Decimal)(unsafe.Pointer(p)).FnDigit, 1)))) = int8(int32(c) - '0') 13558 goto __17 13559 __16: 13560 if !(int32(c) == '.') { 13561 goto __18 13562 } 13563 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit + 1 13564 goto __19 13565 __18: 13566 if !(int32(c) == 'e' || int32(c) == 'E') { 13567 goto __20 13568 } 13569 j = i + 1 13570 neg = 0 13571 if !(j >= n) { 13572 goto __21 13573 } 13574 goto __15 13575 __21: 13576 ; 13577 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '-') { 13578 goto __22 13579 } 13580 neg = 1 13581 j++ 13582 goto __23 13583 __22: 13584 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '+') { 13585 goto __24 13586 } 13587 j++ 13588 __24: 13589 ; 13590 __23: 13591 ; 13592 __25: 13593 if !(j < n && iExp < 1000000) { 13594 goto __26 13595 } 13596 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) <= '9') { 13597 goto __27 13598 } 13599 iExp = iExp*10 + int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) - '0' 13600 __27: 13601 ; 13602 j++ 13603 goto __25 13604 __26: 13605 ; 13606 if !(neg != 0) { 13607 goto __28 13608 } 13609 iExp = -iExp 13610 __28: 13611 ; 13612 goto __15 13613 __20: 13614 ; 13615 __19: 13616 ; 13617 __17: 13618 ; 13619 i++ 13620 goto __14 13621 __15: 13622 ; 13623 if !((*Decimal)(unsafe.Pointer(p)).FnFrac != 0) { 13624 goto __29 13625 } 13626 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - ((*Decimal)(unsafe.Pointer(p)).FnFrac - 1) 13627 __29: 13628 ; 13629 if !(iExp > 0) { 13630 goto __30 13631 } 13632 if !((*Decimal)(unsafe.Pointer(p)).FnFrac > 0) { 13633 goto __32 13634 } 13635 if !(iExp <= (*Decimal)(unsafe.Pointer(p)).FnFrac) { 13636 goto __33 13637 } 13638 *(*int32)(unsafe.Pointer(p + 8)) -= iExp 13639 iExp = 0 13640 goto __34 13641 __33: 13642 iExp = iExp - (*Decimal)(unsafe.Pointer(p)).FnFrac 13643 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 13644 __34: 13645 ; 13646 __32: 13647 ; 13648 if !(iExp > 0) { 13649 goto __35 13650 } 13651 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 13652 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13653 goto __36 13654 } 13655 goto new_no_mem 13656 __36: 13657 ; 13658 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(iExp)) 13659 *(*int32)(unsafe.Pointer(p + 4)) += iExp 13660 __35: 13661 ; 13662 goto __31 13663 __30: 13664 if !(iExp < 0) { 13665 goto __37 13666 } 13667 iExp = -iExp 13668 nExtra = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac - 1 13669 if !(nExtra != 0) { 13670 goto __38 13671 } 13672 if !(nExtra >= iExp) { 13673 goto __39 13674 } 13675 *(*int32)(unsafe.Pointer(p + 8)) += iExp 13676 iExp = 0 13677 goto __40 13678 __39: 13679 iExp = iExp - nExtra 13680 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - 1 13681 __40: 13682 ; 13683 __38: 13684 ; 13685 if !(iExp > 0) { 13686 goto __41 13687 } 13688 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 13689 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13690 goto __42 13691 } 13692 goto new_no_mem 13693 __42: 13694 ; 13695 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(iExp), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 13696 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(iExp)) 13697 *(*int32)(unsafe.Pointer(p + 4)) += iExp 13698 *(*int32)(unsafe.Pointer(p + 8)) += iExp 13699 __41: 13700 ; 13701 __37: 13702 ; 13703 __31: 13704 ; 13705 return p 13706 13707 new_no_mem: 13708 if !(pCtx != 0) { 13709 goto __43 13710 } 13711 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13712 __43: 13713 ; 13714 sqlite3.Xsqlite3_free(tls, p) 13715 return uintptr(0) 13716 } 13717 13718 func decimal_result(tls *libc.TLS, pCtx uintptr, p uintptr) { 13719 var z uintptr 13720 var i int32 13721 var j int32 13722 var n int32 13723 if p == uintptr(0) || (*Decimal)(unsafe.Pointer(p)).Foom != 0 { 13724 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13725 return 13726 } 13727 if (*Decimal)(unsafe.Pointer(p)).FisNull != 0 { 13728 sqlite3.Xsqlite3_result_null(tls, pCtx) 13729 return 13730 } 13731 z = sqlite3.Xsqlite3_malloc(tls, (*Decimal)(unsafe.Pointer(p)).FnDigit+4) 13732 if z == uintptr(0) { 13733 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13734 return 13735 } 13736 i = 0 13737 if (*Decimal)(unsafe.Pointer(p)).FnDigit == 0 || (*Decimal)(unsafe.Pointer(p)).FnDigit == 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa))) == 0 { 13738 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 13739 } 13740 if (*Decimal)(unsafe.Pointer(p)).Fsign != 0 { 13741 *(*int8)(unsafe.Pointer(z)) = int8('-') 13742 i = 1 13743 } 13744 n = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac 13745 if n <= 0 { 13746 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('0') 13747 } 13748 j = 0 13749 for n > 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) == 0 { 13750 j++ 13751 n-- 13752 } 13753 for n > 0 { 13754 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 13755 j++ 13756 n-- 13757 } 13758 if (*Decimal)(unsafe.Pointer(p)).FnFrac != 0 { 13759 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('.') 13760 for __ccgo := true; __ccgo; __ccgo = j < (*Decimal)(unsafe.Pointer(p)).FnDigit { 13761 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 13762 j++ 13763 } 13764 } 13765 *(*int8)(unsafe.Pointer(z + uintptr(i))) = int8(0) 13766 sqlite3.Xsqlite3_result_text(tls, pCtx, z, i, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 13767 } 13768 13769 func decimalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13770 var p uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13771 _ = argc 13772 decimal_result(tls, context, p) 13773 decimal_free(tls, p) 13774 } 13775 13776 func decimal_cmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 13777 var nASig int32 13778 var nBSig int32 13779 var rc int32 13780 var n int32 13781 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) != int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 13782 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 13783 return -1 13784 } 13785 return +1 13786 } 13787 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 13788 var pTemp uintptr = pA 13789 pA = pB 13790 pB = pTemp 13791 } 13792 nASig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 13793 nBSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 13794 if nASig != nBSig { 13795 return nASig - nBSig 13796 } 13797 n = (*Decimal)(unsafe.Pointer(pA)).FnDigit 13798 if n > (*Decimal)(unsafe.Pointer(pB)).FnDigit { 13799 n = (*Decimal)(unsafe.Pointer(pB)).FnDigit 13800 } 13801 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(n)) 13802 if rc == 0 { 13803 rc = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnDigit 13804 } 13805 return rc 13806 } 13807 13808 func decimalCmpFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13809 var pA uintptr 13810 var pB uintptr 13811 var rc int32 13812 pA = uintptr(0) 13813 pB = uintptr(0) 13814 13815 _ = argc 13816 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13817 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0) { 13818 goto __1 13819 } 13820 goto cmp_done 13821 __1: 13822 ; 13823 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 13824 if !(pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 13825 goto __2 13826 } 13827 goto cmp_done 13828 __2: 13829 ; 13830 rc = decimal_cmp(tls, pA, pB) 13831 if !(rc < 0) { 13832 goto __3 13833 } 13834 rc = -1 13835 goto __4 13836 __3: 13837 if !(rc > 0) { 13838 goto __5 13839 } 13840 rc = +1 13841 __5: 13842 ; 13843 __4: 13844 ; 13845 sqlite3.Xsqlite3_result_int(tls, context, rc) 13846 cmp_done: 13847 decimal_free(tls, pA) 13848 decimal_free(tls, pB) 13849 } 13850 13851 func decimal_expand(tls *libc.TLS, p uintptr, nDigit int32, nFrac int32) { 13852 var nAddSig int32 13853 var nAddFrac int32 13854 if p == uintptr(0) { 13855 return 13856 } 13857 nAddFrac = nFrac - (*Decimal)(unsafe.Pointer(p)).FnFrac 13858 nAddSig = nDigit - (*Decimal)(unsafe.Pointer(p)).FnDigit - nAddFrac 13859 if nAddFrac == 0 && nAddSig == 0 { 13860 return 13861 } 13862 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64(nDigit+1)) 13863 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 13864 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 13865 return 13866 } 13867 if nAddSig != 0 { 13868 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(nAddSig), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 13869 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(nAddSig)) 13870 *(*int32)(unsafe.Pointer(p + 4)) += nAddSig 13871 } 13872 if nAddFrac != 0 { 13873 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(nAddFrac)) 13874 *(*int32)(unsafe.Pointer(p + 4)) += nAddFrac 13875 *(*int32)(unsafe.Pointer(p + 8)) += nAddFrac 13876 } 13877 } 13878 13879 func decimal_add(tls *libc.TLS, pA uintptr, pB uintptr) { 13880 var nSig int32 13881 var nFrac int32 13882 var nDigit int32 13883 var i int32 13884 var rc int32 13885 if pA == uintptr(0) { 13886 return 13887 } 13888 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 13889 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 13890 return 13891 } 13892 if (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0 { 13893 (*Decimal)(unsafe.Pointer(pA)).FisNull = int8(1) 13894 return 13895 } 13896 nSig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 13897 if nSig != 0 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa))) == 0 { 13898 nSig-- 13899 } 13900 if nSig < (*Decimal)(unsafe.Pointer(pB)).FnDigit-(*Decimal)(unsafe.Pointer(pB)).FnFrac { 13901 nSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 13902 } 13903 nFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 13904 if nFrac < (*Decimal)(unsafe.Pointer(pB)).FnFrac { 13905 nFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 13906 } 13907 nDigit = nSig + nFrac + 1 13908 decimal_expand(tls, pA, nDigit, nFrac) 13909 decimal_expand(tls, pB, nDigit, nFrac) 13910 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 13911 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 13912 } else { 13913 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) == int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 13914 var carry int32 = 0 13915 for i = nDigit - 1; i >= 0; i-- { 13916 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 13917 if x >= 10 { 13918 carry = 1 13919 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x - 10) 13920 } else { 13921 carry = 0 13922 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 13923 } 13924 } 13925 } else { 13926 var aA uintptr 13927 var aB uintptr 13928 var borrow int32 = 0 13929 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(nDigit)) 13930 if rc < 0 { 13931 aA = (*Decimal)(unsafe.Pointer(pB)).Fa 13932 aB = (*Decimal)(unsafe.Pointer(pA)).Fa 13933 (*Decimal)(unsafe.Pointer(pA)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pA)).Fsign != 0)) 13934 } else { 13935 aA = (*Decimal)(unsafe.Pointer(pA)).Fa 13936 aB = (*Decimal)(unsafe.Pointer(pB)).Fa 13937 } 13938 for i = nDigit - 1; i >= 0; i-- { 13939 var x int32 = int32(*(*int8)(unsafe.Pointer(aA + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(aB + uintptr(i)))) - borrow 13940 if x < 0 { 13941 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x + 10) 13942 borrow = 1 13943 } else { 13944 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 13945 borrow = 0 13946 } 13947 } 13948 } 13949 } 13950 } 13951 13952 func decimalCollFunc(tls *libc.TLS, notUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 13953 var zA uintptr = pKey1 13954 var zB uintptr = pKey2 13955 var pA uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey1, zA) 13956 var pB uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey2, zB) 13957 var rc int32 13958 _ = notUsed 13959 if pA == uintptr(0) || pB == uintptr(0) { 13960 rc = 0 13961 } else { 13962 rc = decimal_cmp(tls, pA, pB) 13963 } 13964 decimal_free(tls, pA) 13965 decimal_free(tls, pB) 13966 return rc 13967 } 13968 13969 func decimalAddFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13970 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13971 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 13972 _ = argc 13973 decimal_add(tls, pA, pB) 13974 decimal_result(tls, context, pA) 13975 decimal_free(tls, pA) 13976 decimal_free(tls, pB) 13977 } 13978 13979 func decimalSubFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13980 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13981 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 13982 _ = argc 13983 if pB != 0 { 13984 (*Decimal)(unsafe.Pointer(pB)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pB)).Fsign != 0)) 13985 decimal_add(tls, pA, pB) 13986 decimal_result(tls, context, pA) 13987 } 13988 decimal_free(tls, pA) 13989 decimal_free(tls, pB) 13990 } 13991 13992 func decimalSumStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13993 var p uintptr 13994 var pArg uintptr 13995 _ = argc 13996 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 13997 if p == uintptr(0) { 13998 return 13999 } 14000 if !(int32((*Decimal)(unsafe.Pointer(p)).FisInit) != 0) { 14001 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 14002 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc(tls, 2) 14003 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14004 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 14005 } else { 14006 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa)) = int8(0) 14007 } 14008 (*Decimal)(unsafe.Pointer(p)).FnDigit = 1 14009 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14010 } 14011 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14012 return 14013 } 14014 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14015 decimal_add(tls, p, pArg) 14016 decimal_free(tls, pArg) 14017 } 14018 14019 func decimalSumInverse(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14020 var p uintptr 14021 var pArg uintptr 14022 _ = argc 14023 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14024 if p == uintptr(0) { 14025 return 14026 } 14027 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14028 return 14029 } 14030 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14031 if pArg != 0 { 14032 (*Decimal)(unsafe.Pointer(pArg)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pArg)).Fsign != 0)) 14033 } 14034 decimal_add(tls, p, pArg) 14035 decimal_free(tls, pArg) 14036 } 14037 14038 func decimalSumValue(tls *libc.TLS, context uintptr) { 14039 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14040 if p == uintptr(0) { 14041 return 14042 } 14043 decimal_result(tls, context, p) 14044 } 14045 14046 func decimalSumFinalize(tls *libc.TLS, context uintptr) { 14047 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14048 if p == uintptr(0) { 14049 return 14050 } 14051 decimal_result(tls, context, p) 14052 decimal_clear(tls, p) 14053 } 14054 14055 func decimalMulFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14056 var pA uintptr 14057 var pB uintptr 14058 var acc uintptr 14059 var i int32 14060 var j int32 14061 var k int32 14062 var minFrac int32 14063 var f int8 14064 var carry int32 14065 var x int32 14066 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14067 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14068 acc = uintptr(0) 14069 _ = argc 14070 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || 14071 pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14072 goto __1 14073 } 14074 goto mul_end 14075 __1: 14076 ; 14077 acc = sqlite3.Xsqlite3_malloc64(tls, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14078 if !(acc == uintptr(0)) { 14079 goto __2 14080 } 14081 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14082 goto mul_end 14083 __2: 14084 ; 14085 libc.Xmemset(tls, acc, 0, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14086 minFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14087 if !((*Decimal)(unsafe.Pointer(pB)).FnFrac < minFrac) { 14088 goto __3 14089 } 14090 minFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14091 __3: 14092 ; 14093 i = (*Decimal)(unsafe.Pointer(pA)).FnDigit - 1 14094 __4: 14095 if !(i >= 0) { 14096 goto __6 14097 } 14098 f = *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) 14099 carry = 0 14100 j = (*Decimal)(unsafe.Pointer(pB)).FnDigit - 1 14101 k = i + j + 3 14102 __7: 14103 if !(j >= 0) { 14104 goto __9 14105 } 14106 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + int32(f)*int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pB)).Fa + uintptr(j)))) + carry 14107 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14108 carry = x / 10 14109 goto __8 14110 __8: 14111 j-- 14112 k-- 14113 goto __7 14114 goto __9 14115 __9: 14116 ; 14117 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + carry 14118 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14119 *(*int8)(unsafe.Pointer(acc + uintptr(k-1))) += int8(x / 10) 14120 goto __5 14121 __5: 14122 i-- 14123 goto __4 14124 goto __6 14125 __6: 14126 ; 14127 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(pA)).Fa) 14128 (*Decimal)(unsafe.Pointer(pA)).Fa = acc 14129 acc = uintptr(0) 14130 *(*int32)(unsafe.Pointer(pA + 4)) += (*Decimal)(unsafe.Pointer(pB)).FnDigit + 2 14131 *(*int32)(unsafe.Pointer(pA + 8)) += (*Decimal)(unsafe.Pointer(pB)).FnFrac 14132 *(*int8)(unsafe.Pointer(pA)) ^= int8(int32((*Decimal)(unsafe.Pointer(pB)).Fsign)) 14133 __10: 14134 if !((*Decimal)(unsafe.Pointer(pA)).FnFrac > minFrac && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr((*Decimal)(unsafe.Pointer(pA)).FnDigit-1)))) == 0) { 14135 goto __11 14136 } 14137 (*Decimal)(unsafe.Pointer(pA)).FnFrac-- 14138 (*Decimal)(unsafe.Pointer(pA)).FnDigit-- 14139 goto __10 14140 __11: 14141 ; 14142 decimal_result(tls, context, pA) 14143 14144 mul_end: 14145 sqlite3.Xsqlite3_free(tls, acc) 14146 decimal_free(tls, pA) 14147 decimal_free(tls, pB) 14148 } 14149 14150 func sqlite3_decimal_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14151 var rc int32 = SQLITE_OK 14152 var i uint32 14153 _ = pzErrMsg 14154 14155 _ = pApi 14156 14157 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc))/uint64(unsafe.Sizeof(struct { 14158 FzFuncName uintptr 14159 FnArg int32 14160 F__ccgo_pad1 [4]byte 14161 FxFunc uintptr 14162 }{})) && rc == SQLITE_OK; i++ { 14163 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc[i].FzFuncName, aFunc[i].FnArg, 14164 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 14165 uintptr(0), aFunc[i].FxFunc, uintptr(0), uintptr(0)) 14166 } 14167 if rc == SQLITE_OK { 14168 rc = sqlite3.Xsqlite3_create_window_function(tls, db, ts+4826, 1, 14169 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, uintptr(0), 14170 *(*uintptr)(unsafe.Pointer(&struct { 14171 f func(*libc.TLS, uintptr, int32, uintptr) 14172 }{decimalSumStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumFinalize})), 14173 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumValue})), *(*uintptr)(unsafe.Pointer(&struct { 14174 f func(*libc.TLS, uintptr, int32, uintptr) 14175 }{decimalSumInverse})), uintptr(0)) 14176 } 14177 if rc == SQLITE_OK { 14178 rc = sqlite3.Xsqlite3_create_collation(tls, db, ts+4838, SQLITE_UTF8, 14179 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 14180 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 14181 }{decimalCollFunc}))) 14182 } 14183 return rc 14184 } 14185 14186 var aFunc = [5]struct { 14187 FzFuncName uintptr 14188 FnArg int32 14189 F__ccgo_pad1 [4]byte 14190 FxFunc uintptr 14191 }{ 14192 {FzFuncName: ts + 4838, FnArg: 1, FxFunc: 0}, 14193 {FzFuncName: ts + 4846, FnArg: 2, FxFunc: 0}, 14194 {FzFuncName: ts + 4858, FnArg: 2, FxFunc: 0}, 14195 {FzFuncName: ts + 4870, FnArg: 2, FxFunc: 0}, 14196 {FzFuncName: ts + 4882, FnArg: 2, FxFunc: 0}, 14197 } 14198 14199 type EvalResult = struct { 14200 Fz uintptr 14201 FzSep uintptr 14202 FszSep int32 14203 F__ccgo_pad1 [4]byte 14204 FnAlloc sqlite3_int64 14205 FnUsed sqlite3_int64 14206 } 14207 14208 func callback(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr, colnames uintptr) int32 { 14209 var p uintptr = pCtx 14210 var i int32 14211 if argv == uintptr(0) { 14212 return 0 14213 } 14214 for i = 0; i < argc; i++ { 14215 var z uintptr 14216 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 14217 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 14218 } else { 14219 z = ts + 584 14220 } 14221 var sz size_t = libc.Xstrlen(tls, z) 14222 if sqlite3_int64(sz)+(*EvalResult)(unsafe.Pointer(p)).FnUsed+sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep)+int64(1) > (*EvalResult)(unsafe.Pointer(p)).FnAlloc { 14223 var zNew uintptr 14224 (*EvalResult)(unsafe.Pointer(p)).FnAlloc = sqlite3_int64(uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc*int64(2)) + sz + uint64((*EvalResult)(unsafe.Pointer(p)).FszSep) + uint64(1)) 14225 14226 if (*EvalResult)(unsafe.Pointer(p)).FnAlloc <= int64(0x7fffffff) { 14227 zNew = sqlite3.Xsqlite3_realloc64(tls, (*EvalResult)(unsafe.Pointer(p)).Fz, uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc)) 14228 } else { 14229 zNew = uintptr(0) 14230 } 14231 if zNew == uintptr(0) { 14232 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(p)).Fz) 14233 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EvalResult{}))) 14234 return 1 14235 } 14236 (*EvalResult)(unsafe.Pointer(p)).Fz = zNew 14237 } 14238 if (*EvalResult)(unsafe.Pointer(p)).FnUsed > int64(0) { 14239 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)) 14240 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep) 14241 } 14242 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), z, sz) 14243 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64(sz) 14244 } 14245 return 0 14246 } 14247 14248 func sqlEvalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14249 bp := tls.Alloc(48) 14250 defer tls.Free(48) 14251 14252 var zSql uintptr 14253 var db uintptr 14254 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 14255 var rc int32 14256 14257 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(EvalResult{}))) 14258 (*EvalResult)(unsafe.Pointer(bp)).FzSep = ts + 4894 14259 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14260 if zSql == uintptr(0) { 14261 return 14262 } 14263 if argc > 1 { 14264 (*EvalResult)(unsafe.Pointer(bp)).FzSep = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 14265 if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14266 return 14267 } 14268 } 14269 (*EvalResult)(unsafe.Pointer(bp)).FszSep = int32(libc.Xstrlen(tls, (*EvalResult)(unsafe.Pointer(bp)).FzSep)) 14270 db = sqlite3.Xsqlite3_context_db_handle(tls, context) 14271 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, *(*uintptr)(unsafe.Pointer(&struct { 14272 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 14273 }{callback})), bp, bp+40) 14274 if rc != SQLITE_OK { 14275 sqlite3.Xsqlite3_result_error(tls, context, *(*uintptr)(unsafe.Pointer(bp + 40)), -1) 14276 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 14277 } else if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14278 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14279 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(bp)).Fz) 14280 } else { 14281 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}))) 14282 } 14283 } 14284 14285 func sqlite3_eval_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14286 var rc int32 = SQLITE_OK 14287 _ = pApi 14288 14289 _ = pzErrMsg 14290 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 1, 14291 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14292 *(*uintptr)(unsafe.Pointer(&struct { 14293 f func(*libc.TLS, uintptr, int32, uintptr) 14294 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14295 if rc == SQLITE_OK { 14296 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 2, 14297 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14298 *(*uintptr)(unsafe.Pointer(&struct { 14299 f func(*libc.TLS, uintptr, int32, uintptr) 14300 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14301 } 14302 return rc 14303 } 14304 14305 type explain_vtab1 = struct { 14306 Fbase sqlite3_vtab 14307 Fdb uintptr 14308 } 14309 14310 type explain_vtab = explain_vtab1 14311 14312 type explain_cursor1 = struct { 14313 Fbase sqlite3_vtab_cursor 14314 Fdb uintptr 14315 FzSql uintptr 14316 FpExplain uintptr 14317 Frc int32 14318 F__ccgo_pad1 [4]byte 14319 } 14320 14321 type explain_cursor = explain_cursor1 14322 14323 func explainConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 14324 var pNew uintptr 14325 var rc int32 14326 14327 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 14328 ts+4901) 14329 if rc == SQLITE_OK { 14330 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_vtab{}))) 14331 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 14332 if pNew == uintptr(0) { 14333 return SQLITE_NOMEM 14334 } 14335 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(explain_vtab{}))) 14336 (*explain_vtab)(unsafe.Pointer(pNew)).Fdb = db 14337 } 14338 return rc 14339 } 14340 14341 func explainDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 14342 sqlite3.Xsqlite3_free(tls, pVtab) 14343 return SQLITE_OK 14344 } 14345 14346 func explainOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 14347 var pCur uintptr 14348 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_cursor{}))) 14349 if pCur == uintptr(0) { 14350 return SQLITE_NOMEM 14351 } 14352 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(explain_cursor{}))) 14353 (*explain_cursor)(unsafe.Pointer(pCur)).Fdb = (*explain_vtab)(unsafe.Pointer(p)).Fdb 14354 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 14355 return SQLITE_OK 14356 } 14357 14358 func explainClose(tls *libc.TLS, cur uintptr) int32 { 14359 var pCur uintptr = cur 14360 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14361 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14362 sqlite3.Xsqlite3_free(tls, pCur) 14363 return SQLITE_OK 14364 } 14365 14366 func explainNext(tls *libc.TLS, cur uintptr) int32 { 14367 var pCur uintptr = cur 14368 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14369 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_DONE && (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW { 14370 return (*explain_cursor)(unsafe.Pointer(pCur)).Frc 14371 } 14372 return SQLITE_OK 14373 } 14374 14375 func explainColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 14376 var pCur uintptr = cur 14377 if i == EXPLN_COLUMN_SQL { 14378 sqlite3.Xsqlite3_result_text(tls, ctx, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql, -1, libc.UintptrFromInt32(-1)) 14379 } else { 14380 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, i)) 14381 } 14382 return SQLITE_OK 14383 } 14384 14385 func explainRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 14386 var pCur uintptr = cur 14387 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, 0) 14388 return SQLITE_OK 14389 } 14390 14391 func explainEof(tls *libc.TLS, cur uintptr) int32 { 14392 var pCur uintptr = cur 14393 return libc.Bool32((*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW) 14394 } 14395 14396 func explainFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 14397 bp := tls.Alloc(16) 14398 defer tls.Free(16) 14399 14400 var pCur uintptr = pVtabCursor 14401 var zSql uintptr = uintptr(0) 14402 var rc int32 14403 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14404 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 14405 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_TEXT { 14406 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = SQLITE_DONE 14407 return SQLITE_OK 14408 } 14409 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14410 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 14411 if (*explain_cursor)(unsafe.Pointer(pCur)).FzSql != 0 { 14412 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+4963, libc.VaList(bp+8, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql)) 14413 } 14414 if zSql == uintptr(0) { 14415 rc = SQLITE_NOMEM 14416 } else { 14417 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*explain_cursor)(unsafe.Pointer(pCur)).Fdb, zSql, -1, pCur+24, uintptr(0)) 14418 sqlite3.Xsqlite3_free(tls, zSql) 14419 } 14420 if rc != 0 { 14421 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14422 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 14423 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14424 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = uintptr(0) 14425 } else { 14426 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14427 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_DONE || (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_ROW { 14428 rc = SQLITE_OK 14429 } else { 14430 rc = (*explain_cursor)(unsafe.Pointer(pCur)).Frc 14431 } 14432 } 14433 return rc 14434 } 14435 14436 func explainBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 14437 var i int32 14438 var idx int32 = -1 14439 var unusable int32 = 0 14440 14441 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(500) 14442 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 14443 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 14444 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != EXPLN_COLUMN_SQL { 14445 continue 14446 } 14447 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 14448 unusable = 1 14449 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 14450 idx = i 14451 } 14452 } 14453 if idx >= 0 { 14454 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 14455 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 14456 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).FargvIndex = 1 14457 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).Fomit = uint8(1) 14458 } else if unusable != 0 { 14459 return SQLITE_CONSTRAINT 14460 } 14461 return SQLITE_OK 14462 } 14463 14464 var explainModule = sqlite3_module{ 14465 FxConnect: 0, 14466 FxBestIndex: 0, 14467 FxDisconnect: 0, 14468 FxOpen: 0, 14469 FxClose: 0, 14470 FxFilter: 0, 14471 FxNext: 0, 14472 FxEof: 0, 14473 FxColumn: 0, 14474 FxRowid: 0, 14475 } 14476 14477 func sqlite3ExplainVtabInit(tls *libc.TLS, db uintptr) int32 { 14478 var rc int32 = SQLITE_OK 14479 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4974, uintptr(unsafe.Pointer(&explainModule)), uintptr(0)) 14480 return rc 14481 } 14482 14483 func sqlite3_explain_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14484 var rc int32 = SQLITE_OK 14485 _ = pApi 14486 14487 rc = sqlite3ExplainVtabInit(tls, db) 14488 return rc 14489 } 14490 14491 type timeval = struct { 14492 Ftv_sec time_t 14493 Ftv_usec suseconds_t 14494 } 14495 14496 type timespec = struct { 14497 Ftv_sec time_t 14498 Ftv_nsec int64 14499 } 14500 14501 type fd_set1 = struct{ Ffds_bits [32]uint32 } 14502 14503 type fd_set = fd_set1 14504 14505 type sigset_t = uint32 14506 14507 type timezone = struct { 14508 Ftz_minuteswest int32 14509 Ftz_dsttime int32 14510 } 14511 14512 type itimerval = struct { 14513 Fit_interval struct { 14514 Ftv_sec time_t 14515 Ftv_usec suseconds_t 14516 } 14517 Fit_value struct { 14518 Ftv_sec time_t 14519 Ftv_usec suseconds_t 14520 } 14521 } 14522 14523 type clockinfo = struct { 14524 Fhz int32 14525 Ftick int32 14526 Fstathz int32 14527 Fprofhz int32 14528 } 14529 14530 type itimerspec = struct { 14531 Fit_interval struct { 14532 Ftv_sec time_t 14533 Ftv_nsec int64 14534 } 14535 Fit_value struct { 14536 Ftv_sec time_t 14537 Ftv_nsec int64 14538 } 14539 } 14540 14541 type tm = struct { 14542 Ftm_sec int32 14543 Ftm_min int32 14544 Ftm_hour int32 14545 Ftm_mday int32 14546 Ftm_mon int32 14547 Ftm_year int32 14548 Ftm_wday int32 14549 Ftm_yday int32 14550 Ftm_isdst int32 14551 F__ccgo_pad1 [4]byte 14552 Ftm_gmtoff int64 14553 Ftm_zone uintptr 14554 } 14555 14556 type flock = struct { 14557 Fl_start off_t 14558 Fl_len off_t 14559 Fl_pid pid_t 14560 Fl_type int16 14561 Fl_whence int16 14562 } 14563 14564 type __tfork = struct { 14565 Ftf_tcb uintptr 14566 Ftf_tid uintptr 14567 Ftf_stack uintptr 14568 } 14569 14570 type __kbind = struct { 14571 Fkb_addr uintptr 14572 Fkb_size size_t 14573 } 14574 14575 type intptr_t = int64 14576 14577 type dirent = struct { 14578 Fd_fileno uint64 14579 Fd_off int64 14580 Fd_reclen uint16 14581 Fd_type uint8 14582 Fd_namlen uint8 14583 F__d_padding [4]uint8 14584 Fd_name [256]int8 14585 } 14586 14587 func readFileContents(tls *libc.TLS, ctx uintptr, zName uintptr) { 14588 var in uintptr 14589 var nIn sqlite3_int64 14590 var pBuf uintptr 14591 var db uintptr 14592 var mxBlob int32 14593 14594 in = libc.Xfopen(tls, zName, ts+4402) 14595 if in == uintptr(0) { 14596 return 14597 } 14598 libc.Xfseek(tls, in, int64(0), SEEK_END) 14599 nIn = libc.Xftell(tls, in) 14600 libc.Xrewind(tls, in) 14601 db = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 14602 mxBlob = sqlite3.Xsqlite3_limit(tls, db, SQLITE_LIMIT_LENGTH, -1) 14603 if nIn > sqlite3_int64(mxBlob) { 14604 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_TOOBIG) 14605 libc.Xfclose(tls, in) 14606 return 14607 } 14608 pBuf = sqlite3.Xsqlite3_malloc64(tls, func() uint64 { 14609 if nIn != 0 { 14610 return uint64(nIn) 14611 } 14612 return uint64(1) 14613 }()) 14614 if pBuf == uintptr(0) { 14615 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 14616 libc.Xfclose(tls, in) 14617 return 14618 } 14619 if nIn == sqlite3_int64(libc.Xfread(tls, pBuf, uint64(1), size_t(nIn), in)) { 14620 sqlite3.Xsqlite3_result_blob64(tls, ctx, pBuf, uint64(nIn), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 14621 } else { 14622 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_IOERR) 14623 sqlite3.Xsqlite3_free(tls, pBuf) 14624 } 14625 libc.Xfclose(tls, in) 14626 } 14627 14628 func readfileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14629 var zName uintptr 14630 _ = argc 14631 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14632 if zName == uintptr(0) { 14633 return 14634 } 14635 readFileContents(tls, context, zName) 14636 } 14637 14638 func ctxErrorMsg(tls *libc.TLS, ctx uintptr, zFmt uintptr, va uintptr) { 14639 var zMsg uintptr = uintptr(0) 14640 var ap va_list 14641 _ = ap 14642 ap = va 14643 zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 14644 sqlite3.Xsqlite3_result_error(tls, ctx, zMsg, -1) 14645 sqlite3.Xsqlite3_free(tls, zMsg) 14646 _ = ap 14647 } 14648 14649 func fileStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 14650 return libc.Xstat(tls, zPath, pStatBuf) 14651 } 14652 14653 func fileLinkStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 14654 return libc.Xlstat(tls, zPath, pStatBuf) 14655 } 14656 14657 func makeDirectory(tls *libc.TLS, zFile uintptr) int32 { 14658 bp := tls.Alloc(136) 14659 defer tls.Free(136) 14660 14661 var zCopy uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zFile)) 14662 var rc int32 = SQLITE_OK 14663 14664 if zCopy == uintptr(0) { 14665 rc = SQLITE_NOMEM 14666 } else { 14667 var nCopy int32 = int32(libc.Xstrlen(tls, zCopy)) 14668 var i int32 = 1 14669 14670 for rc == SQLITE_OK { 14671 var rc2 int32 14672 14673 for ; int32(*(*int8)(unsafe.Pointer(zCopy + uintptr(i)))) != '/' && i < nCopy; i++ { 14674 } 14675 if i == nCopy { 14676 break 14677 } 14678 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8(0) 14679 14680 rc2 = fileStat(tls, zCopy, bp+8) 14681 if rc2 != 0 { 14682 if libc.Xmkdir(tls, zCopy, uint32(0777)) != 0 { 14683 rc = SQLITE_ERROR 14684 } 14685 } else { 14686 if !((*stat)(unsafe.Pointer(bp+8)).Fst_mode&mode_t(0170000) == mode_t(0040000)) { 14687 rc = SQLITE_ERROR 14688 } 14689 } 14690 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8('/') 14691 i++ 14692 } 14693 14694 sqlite3.Xsqlite3_free(tls, zCopy) 14695 } 14696 14697 return rc 14698 } 14699 14700 func writeFile(tls *libc.TLS, pCtx uintptr, zFile uintptr, pData uintptr, mode mode_t, mtime sqlite3_int64) int32 { 14701 bp := tls.Alloc(160) 14702 defer tls.Free(160) 14703 14704 if zFile == uintptr(0) { 14705 return 1 14706 } 14707 if mode&mode_t(0170000) == mode_t(0120000) { 14708 var zTo uintptr = sqlite3.Xsqlite3_value_text(tls, pData) 14709 if zTo == uintptr(0) || libc.Xsymlink(tls, zTo, zFile) < 0 { 14710 return 1 14711 } 14712 } else { 14713 if mode&mode_t(0170000) == mode_t(0040000) { 14714 if libc.Xmkdir(tls, zFile, mode) != 0 { 14715 if *(*int32)(unsafe.Pointer(libc.X__errno(tls))) != EEXIST || 14716 0 != fileStat(tls, zFile, bp) || 14717 !((*stat)(unsafe.Pointer(bp)).Fst_mode&mode_t(0170000) == mode_t(0040000)) || 14718 (*stat)(unsafe.Pointer(bp)).Fst_mode&mode_t(0777) != mode&mode_t(0777) && 0 != libc.Xchmod(tls, zFile, mode&mode_t(0777)) { 14719 return 1 14720 } 14721 } 14722 } else { 14723 var nWrite sqlite3_int64 = int64(0) 14724 var z uintptr 14725 var rc int32 = 0 14726 var out uintptr = libc.Xfopen(tls, zFile, ts+4982) 14727 if out == uintptr(0) { 14728 return 1 14729 } 14730 z = sqlite3.Xsqlite3_value_blob(tls, pData) 14731 if z != 0 { 14732 var n sqlite3_int64 = sqlite3_int64(libc.Xfwrite(tls, z, uint64(1), uint64(sqlite3.Xsqlite3_value_bytes(tls, pData)), out)) 14733 nWrite = sqlite3_int64(sqlite3.Xsqlite3_value_bytes(tls, pData)) 14734 if nWrite != n { 14735 rc = 1 14736 } 14737 } 14738 libc.Xfclose(tls, out) 14739 if rc == 0 && mode != 0 && libc.Xchmod(tls, zFile, mode&mode_t(0777)) != 0 { 14740 rc = 1 14741 } 14742 if rc != 0 { 14743 return 2 14744 } 14745 sqlite3.Xsqlite3_result_int64(tls, pCtx, nWrite) 14746 } 14747 } 14748 14749 if mtime >= int64(0) { 14750 (*timeval)(unsafe.Pointer(bp + 128)).Ftv_usec = libc.AssignPtrInt64(bp+128+1*16+8, int64(0)) 14751 (*timeval)(unsafe.Pointer(bp + 128)).Ftv_sec = libc.Xtime(tls, uintptr(0)) 14752 (*timeval)(unsafe.Pointer(bp + 128 + 1*16)).Ftv_sec = mtime 14753 if libc.Xutimes(tls, zFile, bp+128) != 0 { 14754 return 1 14755 } 14756 } 14757 14758 return 0 14759 } 14760 14761 func writefileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14762 bp := tls.Alloc(24) 14763 defer tls.Free(24) 14764 14765 var zFile uintptr 14766 var mode mode_t = mode_t(0) 14767 var res int32 14768 var mtime sqlite3_int64 = int64(-1) 14769 14770 if argc < 2 || argc > 4 { 14771 sqlite3.Xsqlite3_result_error(tls, context, 14772 ts+4985, -1) 14773 return 14774 } 14775 14776 zFile = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14777 if zFile == uintptr(0) { 14778 return 14779 } 14780 if argc >= 3 { 14781 mode = mode_t(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 14782 } 14783 if argc == 4 { 14784 mtime = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 14785 } 14786 14787 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 14788 if res == 1 && *(*int32)(unsafe.Pointer(libc.X__errno(tls))) == ENOENT { 14789 if makeDirectory(tls, zFile) == SQLITE_OK { 14790 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 14791 } 14792 } 14793 14794 if argc > 2 && res != 0 { 14795 if mode&mode_t(0170000) == mode_t(0120000) { 14796 ctxErrorMsg(tls, context, ts+5035, libc.VaList(bp, zFile)) 14797 } else if mode&mode_t(0170000) == mode_t(0040000) { 14798 ctxErrorMsg(tls, context, ts+5064, libc.VaList(bp+8, zFile)) 14799 } else { 14800 ctxErrorMsg(tls, context, ts+5095, libc.VaList(bp+16, zFile)) 14801 } 14802 } 14803 } 14804 14805 func lsModeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14806 bp := tls.Alloc(16) 14807 defer tls.Free(16) 14808 14809 var i int32 14810 var iMode int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 14811 14812 _ = argc 14813 if iMode&0170000 == 0120000 { 14814 *(*int8)(unsafe.Pointer(bp)) = int8('l') 14815 } else if iMode&0170000 == 0100000 { 14816 *(*int8)(unsafe.Pointer(bp)) = int8('-') 14817 } else if iMode&0170000 == 0040000 { 14818 *(*int8)(unsafe.Pointer(bp)) = int8('d') 14819 } else { 14820 *(*int8)(unsafe.Pointer(bp)) = int8('?') 14821 } 14822 for i = 0; i < 3; i++ { 14823 var m int32 = iMode >> ((2 - i) * 3) 14824 var a uintptr = bp + uintptr(1+i*3) 14825 *(*int8)(unsafe.Pointer(a)) = func() int8 { 14826 if m&0x4 != 0 { 14827 return int8('r') 14828 } 14829 return int8('-') 14830 }() 14831 *(*int8)(unsafe.Pointer(a + 1)) = func() int8 { 14832 if m&0x2 != 0 { 14833 return int8('w') 14834 } 14835 return int8('-') 14836 }() 14837 *(*int8)(unsafe.Pointer(a + 2)) = func() int8 { 14838 if m&0x1 != 0 { 14839 return int8('x') 14840 } 14841 return int8('-') 14842 }() 14843 } 14844 *(*int8)(unsafe.Pointer(bp + 10)) = int8(0) 14845 sqlite3.Xsqlite3_result_text(tls, context, bp, -1, libc.UintptrFromInt32(-1)) 14846 } 14847 14848 type fsdir_cursor1 = struct { 14849 Fbase sqlite3_vtab_cursor 14850 FnLvl int32 14851 FiLvl int32 14852 FaLvl uintptr 14853 FzBase uintptr 14854 FnBase int32 14855 F__ccgo_pad1 [4]byte 14856 FsStat struct { 14857 Fst_mode mode_t 14858 Fst_dev dev_t 14859 Fst_ino ino_t 14860 Fst_nlink nlink_t 14861 Fst_uid uid_t 14862 Fst_gid gid_t 14863 Fst_rdev dev_t 14864 Fst_atim struct { 14865 Ftv_sec time_t 14866 Ftv_nsec int64 14867 } 14868 Fst_mtim struct { 14869 Ftv_sec time_t 14870 Ftv_nsec int64 14871 } 14872 Fst_ctim struct { 14873 Ftv_sec time_t 14874 Ftv_nsec int64 14875 } 14876 Fst_size off_t 14877 Fst_blocks blkcnt_t 14878 Fst_blksize blksize_t 14879 Fst_flags u_int32_t 14880 Fst_gen u_int32_t 14881 F__ccgo_pad1 [4]byte 14882 F__st_birthtim struct { 14883 Ftv_sec time_t 14884 Ftv_nsec int64 14885 } 14886 } 14887 FzPath uintptr 14888 FiRowid sqlite3_int64 14889 } 14890 14891 type fsdir_cursor = fsdir_cursor1 14892 type FsdirLevel1 = struct { 14893 FpDir uintptr 14894 FzDir uintptr 14895 } 14896 14897 type FsdirLevel = FsdirLevel1 14898 14899 type fsdir_tab1 = struct{ Fbase sqlite3_vtab } 14900 14901 type fsdir_tab = fsdir_tab1 14902 14903 func fsdirConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 14904 var pNew uintptr = uintptr(0) 14905 var rc int32 14906 _ = pAux 14907 _ = argc 14908 _ = argv 14909 _ = pzErr 14910 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5120) 14911 if rc == SQLITE_OK { 14912 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_tab{}))) 14913 if pNew == uintptr(0) { 14914 return SQLITE_NOMEM 14915 } 14916 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fsdir_tab{}))) 14917 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 14918 } 14919 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 14920 return rc 14921 } 14922 14923 func fsdirDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 14924 sqlite3.Xsqlite3_free(tls, pVtab) 14925 return SQLITE_OK 14926 } 14927 14928 func fsdirOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 14929 var pCur uintptr 14930 _ = p 14931 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_cursor{}))) 14932 if pCur == uintptr(0) { 14933 return SQLITE_NOMEM 14934 } 14935 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fsdir_cursor{}))) 14936 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 14937 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 14938 return SQLITE_OK 14939 } 14940 14941 func fsdirResetCursor(tls *libc.TLS, pCur uintptr) { 14942 var i int32 14943 for i = 0; i <= (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl; i++ { 14944 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(i)*16 14945 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir != 0 { 14946 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 14947 } 14948 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 14949 } 14950 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 14951 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl) 14952 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = uintptr(0) 14953 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 14954 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = uintptr(0) 14955 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = 0 14956 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = 0 14957 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 14958 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 14959 } 14960 14961 func fsdirClose(tls *libc.TLS, cur uintptr) int32 { 14962 var pCur uintptr = cur 14963 14964 fsdirResetCursor(tls, pCur) 14965 sqlite3.Xsqlite3_free(tls, pCur) 14966 return SQLITE_OK 14967 } 14968 14969 func fsdirSetErrmsg(tls *libc.TLS, pCur uintptr, zFmt uintptr, va uintptr) { 14970 var ap va_list 14971 _ = ap 14972 ap = va 14973 (*sqlite3_vtab)(unsafe.Pointer((*fsdir_cursor)(unsafe.Pointer(pCur)).Fbase.FpVtab)).FzErrMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 14974 _ = ap 14975 } 14976 14977 func fsdirNext(tls *libc.TLS, cur uintptr) int32 { 14978 bp := tls.Alloc(32) 14979 defer tls.Free(32) 14980 14981 var pCur uintptr = cur 14982 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 14983 14984 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid++ 14985 if m&mode_t(0170000) == mode_t(0040000) { 14986 var iNew int32 = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl + 1 14987 var pLvl uintptr 14988 if iNew >= (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl { 14989 var nNew int32 = iNew + 1 14990 var nByte sqlite3_int64 = sqlite3_int64(uint64(nNew) * uint64(unsafe.Sizeof(FsdirLevel{}))) 14991 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl, uint64(nByte)) 14992 if aNew == uintptr(0) { 14993 return SQLITE_NOMEM 14994 } 14995 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)) 14996 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = aNew 14997 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = nNew 14998 } 14999 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = iNew 15000 pLvl = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(iNew)*16 15001 15002 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath 15003 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15004 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = libc.Xopendir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15005 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir == uintptr(0) { 15006 fsdirSetErrmsg(tls, pCur, ts+5180, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15007 return SQLITE_ERROR 15008 } 15009 } 15010 15011 for (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl >= 0 { 15012 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl)*16 15013 var pEntry uintptr = libc.Xreaddir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15014 if pEntry != 0 { 15015 if int32(*(*int8)(unsafe.Pointer(pEntry + 24))) == '.' { 15016 if int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 1))) == '.' && int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 2))) == 0 { 15017 continue 15018 } 15019 if int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 1))) == 0 { 15020 continue 15021 } 15022 } 15023 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15024 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp+8, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir, pEntry+24)) 15025 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15026 return SQLITE_NOMEM 15027 } 15028 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 15029 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15030 return SQLITE_ERROR 15031 } 15032 return SQLITE_OK 15033 } 15034 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15035 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15036 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = uintptr(0) 15037 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = uintptr(0) 15038 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl-- 15039 } 15040 15041 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15042 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15043 return SQLITE_OK 15044 } 15045 15046 func fsdirColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15047 bp := tls.Alloc(64) 15048 defer tls.Free(64) 15049 15050 var pCur uintptr = cur 15051 switch i { 15052 case FSDIR_COLUMN_NAME: 15053 { 15054 sqlite3.Xsqlite3_result_text(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase), -1, libc.UintptrFromInt32(-1)) 15055 break 15056 15057 } 15058 15059 case FSDIR_COLUMN_MODE: 15060 sqlite3.Xsqlite3_result_int64(tls, ctx, int64((*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode)) 15061 break 15062 15063 case FSDIR_COLUMN_MTIME: 15064 sqlite3.Xsqlite3_result_int64(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mtim.Ftv_sec) 15065 break 15066 15067 case FSDIR_COLUMN_DATA: 15068 { 15069 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15070 if m&mode_t(0170000) == mode_t(0040000) { 15071 sqlite3.Xsqlite3_result_null(tls, ctx) 15072 } else if m&mode_t(0170000) == mode_t(0120000) { 15073 var aBuf uintptr = bp 15074 var nBuf sqlite3_int64 = int64(64) 15075 var n int32 15076 15077 for 1 != 0 { 15078 n = int32(libc.Xreadlink(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, aBuf, uint64(nBuf))) 15079 if sqlite3_int64(n) < nBuf { 15080 break 15081 } 15082 if aBuf != bp { 15083 sqlite3.Xsqlite3_free(tls, aBuf) 15084 } 15085 nBuf = nBuf * int64(2) 15086 aBuf = sqlite3.Xsqlite3_malloc64(tls, uint64(nBuf)) 15087 if aBuf == uintptr(0) { 15088 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15089 return SQLITE_NOMEM 15090 } 15091 } 15092 15093 sqlite3.Xsqlite3_result_text(tls, ctx, aBuf, n, libc.UintptrFromInt32(-1)) 15094 if aBuf != bp { 15095 sqlite3.Xsqlite3_free(tls, aBuf) 15096 } 15097 } else { 15098 readFileContents(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15099 } 15100 15101 } 15102 fallthrough 15103 case FSDIR_COLUMN_PATH: 15104 fallthrough 15105 default: 15106 { 15107 break 15108 15109 } 15110 } 15111 return SQLITE_OK 15112 } 15113 15114 func fsdirRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15115 var pCur uintptr = cur 15116 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid 15117 return SQLITE_OK 15118 } 15119 15120 func fsdirEof(tls *libc.TLS, cur uintptr) int32 { 15121 var pCur uintptr = cur 15122 return libc.Bool32((*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0)) 15123 } 15124 15125 func fsdirFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15126 bp := tls.Alloc(32) 15127 defer tls.Free(32) 15128 15129 var zDir uintptr = uintptr(0) 15130 var pCur uintptr = cur 15131 _ = idxStr 15132 fsdirResetCursor(tls, pCur) 15133 15134 if idxNum == 0 { 15135 fsdirSetErrmsg(tls, pCur, ts+5233, 0) 15136 return SQLITE_ERROR 15137 } 15138 15139 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15140 if zDir == uintptr(0) { 15141 fsdirSetErrmsg(tls, pCur, ts+5275, 0) 15142 return SQLITE_ERROR 15143 } 15144 if argc == 2 { 15145 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 15146 } 15147 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase != 0 { 15148 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = int32(libc.Xstrlen(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase)) + 1 15149 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase, zDir)) 15150 } else { 15151 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zDir)) 15152 } 15153 15154 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15155 return SQLITE_NOMEM 15156 } 15157 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 15158 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15159 return SQLITE_ERROR 15160 } 15161 15162 return SQLITE_OK 15163 } 15164 15165 func fsdirBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15166 var i int32 15167 var idxPath int32 = -1 15168 var idxDir int32 = -1 15169 var seenPath int32 = 0 15170 var seenDir int32 = 0 15171 var pConstraint uintptr 15172 15173 _ = tab 15174 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 15175 i = 0 15176 __1: 15177 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15178 goto __3 15179 } 15180 { 15181 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 15182 goto __2 15183 } 15184 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 15185 case FSDIR_COLUMN_PATH: 15186 { 15187 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15188 idxPath = i 15189 seenPath = 0 15190 } else if idxPath < 0 { 15191 seenPath = 1 15192 } 15193 break 15194 15195 } 15196 case FSDIR_COLUMN_DIR: 15197 { 15198 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15199 idxDir = i 15200 seenDir = 0 15201 } else if idxDir < 0 { 15202 seenDir = 1 15203 } 15204 break 15205 15206 } 15207 } 15208 15209 } 15210 goto __2 15211 __2: 15212 i++ 15213 pConstraint += 12 15214 goto __1 15215 goto __3 15216 __3: 15217 ; 15218 if seenPath != 0 || seenDir != 0 { 15219 return SQLITE_CONSTRAINT 15220 } 15221 15222 if idxPath < 0 { 15223 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 15224 15225 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(0x7fffffff) 15226 } else { 15227 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).Fomit = uint8(1) 15228 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).FargvIndex = 1 15229 if idxDir >= 0 { 15230 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).Fomit = uint8(1) 15231 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).FargvIndex = 2 15232 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 15233 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 15234 } else { 15235 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 15236 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100.0 15237 } 15238 } 15239 15240 return SQLITE_OK 15241 } 15242 15243 func fsdirRegister(tls *libc.TLS, db uintptr) int32 { 15244 var rc int32 = sqlite3.Xsqlite3_create_module(tls, db, ts+5325, uintptr(unsafe.Pointer(&fsdirModule1)), uintptr(0)) 15245 return rc 15246 } 15247 15248 var fsdirModule1 = sqlite3_module{ 15249 FxConnect: 0, 15250 FxBestIndex: 0, 15251 FxDisconnect: 0, 15252 FxOpen: 0, 15253 FxClose: 0, 15254 FxFilter: 0, 15255 FxNext: 0, 15256 FxEof: 0, 15257 FxColumn: 0, 15258 FxRowid: 0, 15259 } 15260 15261 func sqlite3_fileio_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15262 var rc int32 = SQLITE_OK 15263 _ = pApi 15264 15265 _ = pzErrMsg 15266 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5331, 1, 15267 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15268 *(*uintptr)(unsafe.Pointer(&struct { 15269 f func(*libc.TLS, uintptr, int32, uintptr) 15270 }{readfileFunc})), uintptr(0), uintptr(0)) 15271 if rc == SQLITE_OK { 15272 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5340, -1, 15273 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15274 *(*uintptr)(unsafe.Pointer(&struct { 15275 f func(*libc.TLS, uintptr, int32, uintptr) 15276 }{writefileFunc})), uintptr(0), uintptr(0)) 15277 } 15278 if rc == SQLITE_OK { 15279 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5350, 1, SQLITE_UTF8, uintptr(0), 15280 *(*uintptr)(unsafe.Pointer(&struct { 15281 f func(*libc.TLS, uintptr, int32, uintptr) 15282 }{lsModeFunc})), uintptr(0), uintptr(0)) 15283 } 15284 if rc == SQLITE_OK { 15285 rc = fsdirRegister(tls, db) 15286 } 15287 return rc 15288 } 15289 15290 type fuzzer_vtab1 = struct { 15291 Fbase sqlite3_vtab 15292 FzClassName uintptr 15293 FpRule uintptr 15294 FnCursor int32 15295 F__ccgo_pad1 [4]byte 15296 } 15297 15298 type fuzzer_vtab = fuzzer_vtab1 15299 type fuzzer_cursor1 = struct { 15300 Fbase sqlite3_vtab_cursor 15301 FiRowid sqlite3_int64 15302 FpVtab uintptr 15303 FrLimit fuzzer_cost 15304 F__ccgo_pad1 [4]byte 15305 FpStem uintptr 15306 FpDone uintptr 15307 FaQueue [20]uintptr 15308 FmxQueue int32 15309 F__ccgo_pad2 [4]byte 15310 FzBuf uintptr 15311 FnBuf int32 15312 FnStem int32 15313 FiRuleset int32 15314 F__ccgo_pad3 [4]byte 15315 FnullRule fuzzer_rule 15316 FapHash [4001]uintptr 15317 } 15318 15319 type fuzzer_cursor = fuzzer_cursor1 15320 type fuzzer_rule1 = struct { 15321 FpNext uintptr 15322 FzFrom uintptr 15323 FrCost fuzzer_cost 15324 FnFrom fuzzer_len 15325 FnTo fuzzer_len 15326 F__ccgo_pad1 [2]byte 15327 FiRuleset fuzzer_ruleid 15328 FzTo [4]int8 15329 } 15330 15331 type fuzzer_rule = fuzzer_rule1 15332 type fuzzer_stem1 = struct { 15333 FzBasis uintptr 15334 FpRule uintptr 15335 FpNext uintptr 15336 FpHash uintptr 15337 FrBaseCost fuzzer_cost 15338 FrCostX fuzzer_cost 15339 FnBasis fuzzer_len 15340 Fn fuzzer_len 15341 F__ccgo_pad1 [6]byte 15342 } 15343 15344 type fuzzer_stem = fuzzer_stem1 15345 15346 type fuzzer_cost = int32 15347 type fuzzer_len = int8 15348 type fuzzer_ruleid = int32 15349 15350 func fuzzerMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 15351 bp := tls.Alloc(32) 15352 defer tls.Free(32) 15353 15354 var pTail uintptr 15355 15356 pTail = bp 15357 for pA != 0 && pB != 0 { 15358 if (*fuzzer_rule)(unsafe.Pointer(pA)).FrCost <= (*fuzzer_rule)(unsafe.Pointer(pB)).FrCost { 15359 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15360 pTail = pA 15361 pA = (*fuzzer_rule)(unsafe.Pointer(pA)).FpNext 15362 } else { 15363 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15364 pTail = pB 15365 pB = (*fuzzer_rule)(unsafe.Pointer(pB)).FpNext 15366 } 15367 } 15368 if pA == uintptr(0) { 15369 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15370 } else { 15371 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15372 } 15373 return (*fuzzer_rule)(unsafe.Pointer(bp)).FpNext 15374 } 15375 15376 func fuzzerLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 15377 bp := tls.Alloc(48) 15378 defer tls.Free(48) 15379 15380 var iRuleset sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 15381 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 15382 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 15383 var nCost int32 = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 15384 15385 var rc int32 = SQLITE_OK 15386 var nFrom int32 15387 var nTo int32 15388 var pRule uintptr = uintptr(0) 15389 15390 if zFrom == uintptr(0) { 15391 zFrom = ts + 584 15392 } 15393 if zTo == uintptr(0) { 15394 zTo = ts + 584 15395 } 15396 nFrom = int32(libc.Xstrlen(tls, zFrom)) 15397 nTo = int32(libc.Xstrlen(tls, zTo)) 15398 15399 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 15400 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 15401 return SQLITE_OK 15402 } 15403 15404 if nCost <= 0 || nCost > FUZZER_MX_COST { 15405 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 15406 libc.VaList(bp, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_COST)) 15407 rc = SQLITE_ERROR 15408 } else if nFrom > FUZZER_MX_LENGTH || nTo > FUZZER_MX_LENGTH { 15409 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 15410 libc.VaList(bp+16, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_LENGTH)) 15411 rc = SQLITE_ERROR 15412 } else if iRuleset < int64(0) || iRuleset > int64(FUZZER_MX_RULEID) { 15413 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+5357, 15414 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_RULEID)) 15415 rc = SQLITE_ERROR 15416 } else { 15417 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_rule{}))+uint64(nFrom)+uint64(nTo)) 15418 if pRule == uintptr(0) { 15419 rc = SQLITE_NOMEM 15420 } else { 15421 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(fuzzer_rule{}))) 15422 (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 28 15423 *(*uintptr)(unsafe.Pointer(pRule + 8)) += uintptr(nTo + 1) 15424 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom = fuzzer_len(nFrom) 15425 libc.Xmemcpy(tls, (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 15426 libc.Xmemcpy(tls, pRule+28, zTo, uint64(nTo+1)) 15427 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo = fuzzer_len(nTo) 15428 (*fuzzer_rule)(unsafe.Pointer(pRule)).FrCost = nCost 15429 (*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset = int32(iRuleset) 15430 } 15431 } 15432 15433 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 15434 return rc 15435 } 15436 15437 func fuzzerLoadRules(tls *libc.TLS, db uintptr, p uintptr, zDb uintptr, zData uintptr, pzErr uintptr) int32 { 15438 bp := tls.Alloc(192) 15439 defer tls.Free(192) 15440 15441 var rc int32 = SQLITE_OK 15442 var zSql uintptr 15443 var pHead uintptr = uintptr(0) 15444 15445 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, zDb, zData)) 15446 if zSql == uintptr(0) { 15447 rc = SQLITE_NOMEM 15448 } else { 15449 var rc2 int32 15450 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 15451 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 15452 if rc != SQLITE_OK { 15453 *(*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))) 15454 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 15455 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 15456 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, zData, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 15457 rc = SQLITE_ERROR 15458 } else { 15459 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 15460 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 15461 rc = fuzzerLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 15462 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 15463 (*fuzzer_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 15464 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 15465 } 15466 } 15467 } 15468 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 15469 if rc == SQLITE_OK { 15470 rc = rc2 15471 } 15472 } 15473 sqlite3.Xsqlite3_free(tls, zSql) 15474 15475 if rc == SQLITE_OK { 15476 var i uint32 15477 var pX uintptr 15478 15479 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 15480 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 15481 } 15482 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 15483 pHead = (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext 15484 (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 15485 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++ { 15486 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15487 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 15488 } 15489 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15490 } 15491 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 15492 i = uint32(1) 15493 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 15494 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15495 } 15496 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = fuzzerMergeRules(tls, (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule, pX) 15497 } else { 15498 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = pHead 15499 } 15500 15501 return rc 15502 } 15503 15504 func fuzzerDequote(tls *libc.TLS, zIn uintptr) uintptr { 15505 var nIn sqlite3_int64 15506 var zOut uintptr 15507 15508 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 15509 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 15510 if zOut != 0 { 15511 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 15512 15513 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 15514 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 15515 } else { 15516 var iOut int32 = 0 15517 var iIn int32 15518 15519 if int32(q) == '[' { 15520 q = int8(']') 15521 } 15522 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 15523 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 15524 iIn++ 15525 } 15526 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 15527 } 15528 } 15529 15530 } 15531 return zOut 15532 } 15533 15534 func fuzzerDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15535 var p uintptr = pVtab 15536 15537 for (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule != 0 { 15538 var pRule uintptr = (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule 15539 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 15540 sqlite3.Xsqlite3_free(tls, pRule) 15541 } 15542 sqlite3.Xsqlite3_free(tls, p) 15543 return SQLITE_OK 15544 } 15545 15546 func fuzzerConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15547 bp := tls.Alloc(8) 15548 defer tls.Free(8) 15549 15550 var rc int32 = SQLITE_OK 15551 var pNew uintptr = uintptr(0) 15552 var zModule uintptr = *(*uintptr)(unsafe.Pointer(argv)) 15553 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 15554 15555 if argc != 4 { 15556 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 15557 ts+5394, libc.VaList(bp, zModule)) 15558 rc = SQLITE_ERROR 15559 } else { 15560 var nModule sqlite3_int64 15561 15562 nModule = sqlite3_int64(libc.Xstrlen(tls, zModule)) 15563 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_vtab{}))+uint64(nModule)+uint64(1)) 15564 if pNew == uintptr(0) { 15565 rc = SQLITE_NOMEM 15566 } else { 15567 var zTab uintptr 15568 15569 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_vtab{}))) 15570 (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName = pNew + 1*48 15571 libc.Xmemcpy(tls, (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName, zModule, size_t(nModule+int64(1))) 15572 15573 zTab = fuzzerDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 15574 if zTab == uintptr(0) { 15575 rc = SQLITE_NOMEM 15576 } else { 15577 rc = fuzzerLoadRules(tls, db, pNew, zDb, zTab, pzErr) 15578 sqlite3.Xsqlite3_free(tls, zTab) 15579 } 15580 15581 if rc == SQLITE_OK { 15582 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5445) 15583 } 15584 if rc != SQLITE_OK { 15585 fuzzerDisconnect(tls, pNew) 15586 pNew = uintptr(0) 15587 } else { 15588 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 15589 } 15590 } 15591 } 15592 15593 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 15594 return rc 15595 } 15596 15597 func fuzzerOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 15598 var p uintptr = pVTab 15599 var pCur uintptr 15600 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fuzzer_cursor{}))) 15601 if pCur == uintptr(0) { 15602 return SQLITE_NOMEM 15603 } 15604 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fuzzer_cursor{}))) 15605 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab = p 15606 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15607 (*fuzzer_vtab)(unsafe.Pointer(p)).FnCursor++ 15608 return SQLITE_OK 15609 } 15610 15611 func fuzzerClearStemList(tls *libc.TLS, pStem uintptr) { 15612 for pStem != 0 { 15613 var pNext uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext 15614 sqlite3.Xsqlite3_free(tls, pStem) 15615 pStem = pNext 15616 } 15617 } 15618 15619 func fuzzerClearCursor(tls *libc.TLS, pCur uintptr, clearHash int32) { 15620 var i int32 15621 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 15622 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone) 15623 for i = 0; i < FUZZER_NQUEUE; i++ { 15624 fuzzerClearStemList(tls, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 15625 } 15626 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 15627 if clearHash != 0 && (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem != 0 { 15628 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = 0 15629 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 15630 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = uintptr(0) 15631 libc.Xmemset(tls, pCur+48, 0, uint64(unsafe.Sizeof([20]uintptr{}))) 15632 libc.Xmemset(tls, pCur+272, 0, uint64(unsafe.Sizeof([4001]uintptr{}))) 15633 } 15634 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem = 0 15635 } 15636 15637 func fuzzerClose(tls *libc.TLS, cur uintptr) int32 { 15638 var pCur uintptr = cur 15639 fuzzerClearCursor(tls, pCur, 0) 15640 sqlite3.Xsqlite3_free(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 15641 (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 15642 sqlite3.Xsqlite3_free(tls, pCur) 15643 return SQLITE_OK 15644 } 15645 15646 func fuzzerRender(tls *libc.TLS, pStem uintptr, pzBuf uintptr, pnBuf uintptr) int32 { 15647 var pRule uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule 15648 var n int32 15649 var z uintptr 15650 15651 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis) + int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo) - int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) 15652 if *(*int32)(unsafe.Pointer(pnBuf)) < n+1 { 15653 *(*uintptr)(unsafe.Pointer(pzBuf)) = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(pzBuf)), n+100) 15654 if *(*uintptr)(unsafe.Pointer(pzBuf)) == uintptr(0) { 15655 return SQLITE_NOMEM 15656 } 15657 *(*int32)(unsafe.Pointer(pnBuf)) = n + 100 15658 } 15659 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) 15660 z = *(*uintptr)(unsafe.Pointer(pzBuf)) 15661 if n < 0 { 15662 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)+1)) 15663 } else { 15664 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(n)) 15665 libc.Xmemcpy(tls, z+uintptr(n), pRule+28, uint64((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)) 15666 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)), 15667 uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-n-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)+1)) 15668 } 15669 15670 return SQLITE_OK 15671 } 15672 15673 func fuzzerHash(tls *libc.TLS, z uintptr) uint32 { 15674 var h uint32 = uint32(0) 15675 for *(*int8)(unsafe.Pointer(z)) != 0 { 15676 h = h<<3 ^ h>>29 ^ uint32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 15677 } 15678 return h % uint32(FUZZER_HASH) 15679 } 15680 15681 func fuzzerCost(tls *libc.TLS, pStem uintptr) fuzzer_cost { 15682 return libc.AssignPtrInt32(pStem+36, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrBaseCost+(*fuzzer_rule)(unsafe.Pointer((*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule)).FrCost) 15683 } 15684 15685 func fuzzerSeen(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 15686 var h uint32 15687 var pLookup uintptr 15688 15689 if fuzzerRender(tls, pStem, pCur+216, pCur+224) == SQLITE_NOMEM { 15690 return -1 15691 } 15692 h = fuzzerHash(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 15693 pLookup = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 15694 for pLookup != 0 && libc.Xstrcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pLookup)).FzBasis, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) != 0 { 15695 pLookup = (*fuzzer_stem)(unsafe.Pointer(pLookup)).FpHash 15696 } 15697 return libc.Bool32(pLookup != uintptr(0)) 15698 } 15699 15700 func fuzzerSkipRule(tls *libc.TLS, pRule uintptr, pStem uintptr, iRuleset int32) int32 { 15701 return libc.Bool32(pRule != 0 && ((*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset != iRuleset || 15702 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)) 15703 } 15704 15705 func fuzzerAdvance(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 15706 var pRule uintptr 15707 for libc.AssignUintptr(&pRule, (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule) != uintptr(0) { 15708 for int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) < int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) { 15709 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn++ 15710 if int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) == 0 || 15711 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 { 15712 var rc int32 = fuzzerSeen(tls, pCur, pStem) 15713 if rc < 0 { 15714 return -1 15715 } 15716 if rc == 0 { 15717 fuzzerCost(tls, pStem) 15718 return 1 15719 } 15720 } 15721 } 15722 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = int8(-1) 15723 for __ccgo := true; __ccgo; __ccgo = fuzzerSkipRule(tls, pRule, pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 15724 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 15725 } 15726 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pRule 15727 if pRule != 0 && fuzzerCost(tls, pStem) > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit { 15728 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = uintptr(0) 15729 } 15730 } 15731 return 0 15732 } 15733 15734 func fuzzerMergeStems(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 15735 bp := tls.Alloc(48) 15736 defer tls.Free(48) 15737 15738 var pTail uintptr 15739 15740 pTail = bp 15741 for pA != 0 && pB != 0 { 15742 if (*fuzzer_stem)(unsafe.Pointer(pA)).FrCostX <= (*fuzzer_stem)(unsafe.Pointer(pB)).FrCostX { 15743 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 15744 pTail = pA 15745 pA = (*fuzzer_stem)(unsafe.Pointer(pA)).FpNext 15746 } else { 15747 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 15748 pTail = pB 15749 pB = (*fuzzer_stem)(unsafe.Pointer(pB)).FpNext 15750 } 15751 } 15752 if pA == uintptr(0) { 15753 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 15754 } else { 15755 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 15756 } 15757 return (*fuzzer_stem)(unsafe.Pointer(bp)).FpNext 15758 } 15759 15760 func fuzzerLowestCostStem(tls *libc.TLS, pCur uintptr) uintptr { 15761 var pBest uintptr 15762 var pX uintptr 15763 var iBest int32 15764 var i int32 15765 15766 if (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem == uintptr(0) { 15767 iBest = -1 15768 pBest = uintptr(0) 15769 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 15770 pX = *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) 15771 if pX == uintptr(0) { 15772 continue 15773 } 15774 if pBest == uintptr(0) || (*fuzzer_stem)(unsafe.Pointer(pBest)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX { 15775 pBest = pX 15776 iBest = i 15777 } 15778 } 15779 if pBest != 0 { 15780 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(iBest)*8)) = (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext 15781 (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext = uintptr(0) 15782 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pBest 15783 } 15784 } 15785 return (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 15786 } 15787 15788 func fuzzerInsert(tls *libc.TLS, pCur uintptr, pNew uintptr) uintptr { 15789 var pX uintptr 15790 var i int32 15791 15792 if libc.AssignUintptr(&pX, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) && (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pNew)).FrCostX { 15793 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 15794 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pNew 15795 pNew = pX 15796 } 15797 15798 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 15799 pX = pNew 15800 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 15801 if *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) != 0 { 15802 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 15803 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = uintptr(0) 15804 } else { 15805 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 15806 break 15807 } 15808 } 15809 if i > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue { 15810 if i < FUZZER_NQUEUE { 15811 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = i 15812 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 15813 } else { 15814 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8))) 15815 *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8)) = pX 15816 } 15817 } 15818 15819 return fuzzerLowestCostStem(tls, pCur) 15820 } 15821 15822 func fuzzerNewStem(tls *libc.TLS, pCur uintptr, zWord uintptr, rBaseCost fuzzer_cost) uintptr { 15823 var pNew uintptr 15824 var pRule uintptr 15825 var h uint32 15826 15827 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_stem{}))+libc.Xstrlen(tls, zWord)+uint64(1)) 15828 if pNew == uintptr(0) { 15829 return uintptr(0) 15830 } 15831 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_stem{}))) 15832 (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis = pNew + 1*48 15833 (*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis = fuzzer_len(libc.Xstrlen(tls, zWord)) 15834 libc.Xmemcpy(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis, zWord, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis)+1)) 15835 pRule = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 15836 for fuzzerSkipRule(tls, pRule, pNew, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 15837 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 15838 } 15839 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpRule = pRule 15840 (*fuzzer_stem)(unsafe.Pointer(pNew)).Fn = int8(-1) 15841 (*fuzzer_stem)(unsafe.Pointer(pNew)).FrBaseCost = libc.AssignPtrInt32(pNew+36, rBaseCost) 15842 h = fuzzerHash(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis) 15843 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpHash = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 15844 *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) = pNew 15845 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem++ 15846 return pNew 15847 } 15848 15849 func fuzzerNext(tls *libc.TLS, cur uintptr) int32 { 15850 var pCur uintptr = cur 15851 var rc int32 15852 var pStem uintptr 15853 var pNew uintptr 15854 15855 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid++ 15856 15857 pStem = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 15858 if (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX > 0 { 15859 rc = fuzzerRender(tls, pStem, pCur+216, pCur+224) 15860 if rc == SQLITE_NOMEM { 15861 return SQLITE_NOMEM 15862 } 15863 pNew = fuzzerNewStem(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX) 15864 if pNew != 0 { 15865 if fuzzerAdvance(tls, pCur, pNew) == 0 { 15866 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 15867 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pNew 15868 } else { 15869 if fuzzerInsert(tls, pCur, pNew) == pNew { 15870 return SQLITE_OK 15871 } 15872 } 15873 } else { 15874 return SQLITE_NOMEM 15875 } 15876 } 15877 15878 for libc.AssignUintptr(&pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) { 15879 var res int32 = fuzzerAdvance(tls, pCur, pStem) 15880 if res < 0 { 15881 return SQLITE_NOMEM 15882 } else if res > 0 { 15883 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 15884 pStem = fuzzerInsert(tls, pCur, pStem) 15885 if libc.AssignInt32(&rc, fuzzerSeen(tls, pCur, pStem)) != 0 { 15886 if rc < 0 { 15887 return SQLITE_NOMEM 15888 } 15889 continue 15890 } 15891 return SQLITE_OK 15892 } 15893 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 15894 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 15895 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pStem 15896 if fuzzerLowestCostStem(tls, pCur) != 0 { 15897 rc = fuzzerSeen(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 15898 if rc < 0 { 15899 return SQLITE_NOMEM 15900 } 15901 if rc == 0 { 15902 return SQLITE_OK 15903 } 15904 } 15905 } 15906 15907 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 15908 return SQLITE_OK 15909 } 15910 15911 func fuzzerFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15912 var pCur uintptr = pVtabCursor 15913 var zWord uintptr = ts + 584 15914 var pStem uintptr 15915 var idx int32 15916 15917 fuzzerClearCursor(tls, pCur, 1) 15918 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 2147483647 15919 idx = 0 15920 if idxNum&1 != 0 { 15921 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15922 idx++ 15923 } 15924 if idxNum&2 != 0 { 15925 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 15926 idx++ 15927 } 15928 if idxNum&4 != 0 { 15929 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 15930 idx++ 15931 } 15932 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FpNext = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 15933 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FrCost = 0 15934 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnFrom = int8(0) 15935 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnTo = int8(0) 15936 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FzFrom = ts + 584 15937 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 15938 15939 if int32(libc.Xstrlen(tls, zWord)) < FUZZER_MX_OUTPUT_LENGTH { 15940 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = libc.AssignUintptr(&pStem, fuzzerNewStem(tls, pCur, zWord, 0)) 15941 if pStem == uintptr(0) { 15942 return SQLITE_NOMEM 15943 } 15944 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pCur + 240 15945 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = (*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis 15946 } else { 15947 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 15948 } 15949 15950 return SQLITE_OK 15951 } 15952 15953 func fuzzerColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15954 var pCur uintptr = cur 15955 if i == 0 { 15956 if fuzzerRender(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem, pCur+216, pCur+224) == SQLITE_NOMEM { 15957 return SQLITE_NOMEM 15958 } 15959 sqlite3.Xsqlite3_result_text(tls, ctx, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 15960 } else if i == 1 { 15961 sqlite3.Xsqlite3_result_int(tls, ctx, (*fuzzer_stem)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem)).FrCostX) 15962 } else { 15963 sqlite3.Xsqlite3_result_null(tls, ctx) 15964 } 15965 return SQLITE_OK 15966 } 15967 15968 func fuzzerRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15969 var pCur uintptr = cur 15970 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid 15971 return SQLITE_OK 15972 } 15973 15974 func fuzzerEof(tls *libc.TLS, cur uintptr) int32 { 15975 var pCur uintptr = cur 15976 return libc.Bool32((*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit <= 0) 15977 } 15978 15979 func fuzzerBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15980 var iPlan int32 = 0 15981 var iDistTerm int32 = -1 15982 var iRulesetTerm int32 = -1 15983 var i int32 15984 var seenMatch int32 = 0 15985 var pConstraint uintptr 15986 var rCost float64 = 1e12 15987 15988 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 15989 i = 0 15990 __1: 15991 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15992 goto __3 15993 } 15994 { 15995 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 15996 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 15997 seenMatch = 1 15998 } 15999 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 16000 goto __2 16001 } 16002 if iPlan&1 == 0 && 16003 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16004 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16005 iPlan = iPlan | 1 16006 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 16007 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16008 rCost = rCost / 1e6 16009 } 16010 if iPlan&2 == 0 && 16011 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 16012 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 16013 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 16014 iPlan = iPlan | 2 16015 iDistTerm = i 16016 rCost = rCost / 10.0 16017 } 16018 if iPlan&4 == 0 && 16019 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 16020 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 16021 iPlan = iPlan | 4 16022 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16023 iRulesetTerm = i 16024 rCost = rCost / 10.0 16025 } 16026 16027 } 16028 goto __2 16029 __2: 16030 i++ 16031 pConstraint += 12 16032 goto __1 16033 goto __3 16034 __3: 16035 ; 16036 if iPlan&2 != 0 { 16037 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 16038 } 16039 if iPlan&4 != 0 { 16040 var idx int32 = 1 16041 if iPlan&1 != 0 { 16042 idx++ 16043 } 16044 if iPlan&2 != 0 { 16045 idx++ 16046 } 16047 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRulesetTerm)*8)).FargvIndex = idx 16048 } 16049 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 16050 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 16051 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 16052 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 16053 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 16054 } 16055 if seenMatch != 0 && iPlan&1 == 0 { 16056 rCost = 1e99 16057 } 16058 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 16059 16060 return SQLITE_OK 16061 } 16062 16063 var fuzzerModule = sqlite3_module{ 16064 FxCreate: 0, 16065 FxConnect: 0, 16066 FxBestIndex: 0, 16067 FxDisconnect: 0, 16068 FxDestroy: 0, 16069 FxOpen: 0, 16070 FxClose: 0, 16071 FxFilter: 0, 16072 FxNext: 0, 16073 FxEof: 0, 16074 FxColumn: 0, 16075 FxRowid: 0, 16076 } 16077 16078 func sqlite3_fuzzer_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16079 var rc int32 = SQLITE_OK 16080 _ = pApi 16081 16082 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+5483, uintptr(unsafe.Pointer(&fuzzerModule)), uintptr(0)) 16083 return rc 16084 } 16085 16086 func ieee754func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16087 bp := tls.Alloc(160) 16088 defer tls.Free(160) 16089 16090 if argc == 1 { 16091 var m sqlite3_int64 16092 16093 var e int32 16094 var isNeg int32 16095 16096 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16097 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 16098 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16099 var i uint32 16100 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = uint64(0) 16101 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 16102 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 24))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16103 } 16104 libc.Xmemcpy(tls, bp+16, bp+24, uint64(unsafe.Sizeof(float64(0)))) 16105 } else { 16106 *(*float64)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16107 } 16108 if *(*float64)(unsafe.Pointer(bp + 16)) < 0.0 { 16109 isNeg = 1 16110 *(*float64)(unsafe.Pointer(bp + 16)) = -*(*float64)(unsafe.Pointer(bp + 16)) 16111 } else { 16112 isNeg = 0 16113 } 16114 libc.Xmemcpy(tls, bp+32, bp+16, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 16115 if *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) == int64(0) { 16116 e = 0 16117 m = int64(0) 16118 } else { 16119 e = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 32)) >> 52) 16120 m = *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) & (int64(1)<<52 - int64(1)) 16121 if e == 0 { 16122 m <<= 1 16123 } else { 16124 m = m | int64(1)<<52 16125 } 16126 for e < 1075 && m > int64(0) && m&int64(1) == int64(0) { 16127 m >>= 1 16128 e++ 16129 } 16130 if isNeg != 0 { 16131 m = -m 16132 } 16133 } 16134 switch *(*int32)(unsafe.Pointer(sqlite3.Xsqlite3_user_data(tls, context))) { 16135 case 0: 16136 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+5490, 16137 libc.VaList(bp, m, e-1075)) 16138 sqlite3.Xsqlite3_result_text(tls, context, bp+40, -1, libc.UintptrFromInt32(-1)) 16139 break 16140 fallthrough 16141 case 1: 16142 sqlite3.Xsqlite3_result_int64(tls, context, m) 16143 break 16144 fallthrough 16145 case 2: 16146 sqlite3.Xsqlite3_result_int(tls, context, e-1075) 16147 break 16148 } 16149 } else { 16150 var m sqlite3_int64 16151 var e sqlite3_int64 16152 16153 var isNeg int32 = 0 16154 m = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 16155 e = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 16156 16157 if e > int64(10000) { 16158 e = int64(10000) 16159 } else if e < int64(-10000) { 16160 e = int64(-10000) 16161 } 16162 16163 if m < int64(0) { 16164 isNeg = 1 16165 m = -m 16166 if m < int64(0) { 16167 return 16168 } 16169 } else if m == int64(0) && e > int64(-1000) && e < int64(1000) { 16170 sqlite3.Xsqlite3_result_double(tls, context, 0.0) 16171 return 16172 } 16173 for m>>32&int64(0xffe00000) != 0 { 16174 m >>= 1 16175 e++ 16176 } 16177 for m != int64(0) && m>>32&int64(0xfff00000) == int64(0) { 16178 m <<= 1 16179 e-- 16180 } 16181 e = e + int64(1075) 16182 if e <= int64(0) { 16183 if int64(1)-e >= int64(64) { 16184 m = int64(0) 16185 } else { 16186 m >>= int64(1) - e 16187 } 16188 e = int64(0) 16189 } else if e > int64(0x7ff) { 16190 e = int64(0x7ff) 16191 } 16192 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) = m & (int64(1)<<52 - int64(1)) 16193 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= e << 52 16194 if isNeg != 0 { 16195 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= libc.Int64FromUint64(uint64(1) << 63) 16196 } 16197 libc.Xmemcpy(tls, bp+144, bp+152, uint64(unsafe.Sizeof(float64(0)))) 16198 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 144))) 16199 } 16200 } 16201 16202 func ieee754func_from_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16203 bp := tls.Alloc(16) 16204 defer tls.Free(16) 16205 16206 _ = argc 16207 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16208 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 16209 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16210 var i uint32 16211 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = uint64(0) 16212 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 16213 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 8))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16214 } 16215 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 16216 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp))) 16217 } 16218 } 16219 16220 func ieee754func_to_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16221 bp := tls.Alloc(24) 16222 defer tls.Free(24) 16223 16224 _ = argc 16225 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_FLOAT || 16226 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_INTEGER { 16227 *(*float64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16228 16229 var i uint32 16230 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 16231 for i = uint32(1); uint64(i) <= uint64(unsafe.Sizeof(float64(0))); i++ { 16232 *(*uint8)(unsafe.Pointer(bp + 16 + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(i)))) = uint8(*(*sqlite3_uint64)(unsafe.Pointer(bp)) & uint64(0xff)) 16233 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 8 16234 } 16235 sqlite3.Xsqlite3_result_blob(tls, context, bp+16, int32(unsafe.Sizeof(float64(0))), libc.UintptrFromInt32(-1)) 16236 } 16237 } 16238 16239 func sqlite3_ieee_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16240 var i uint32 16241 var rc int32 = SQLITE_OK 16242 _ = pApi 16243 16244 _ = pzErrMsg 16245 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc1))/uint64(unsafe.Sizeof(struct { 16246 FzFName uintptr 16247 FnArg int32 16248 FiAux int32 16249 FxFunc uintptr 16250 }{})) && rc == SQLITE_OK; i++ { 16251 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc1[i].FzFName, aFunc1[i].FnArg, 16252 SQLITE_UTF8|SQLITE_INNOCUOUS, 16253 uintptr(unsafe.Pointer(&aFunc1))+uintptr(i)*24+12, 16254 aFunc1[i].FxFunc, uintptr(0), uintptr(0)) 16255 } 16256 return rc 16257 } 16258 16259 var aFunc1 = [6]struct { 16260 FzFName uintptr 16261 FnArg int32 16262 FiAux int32 16263 FxFunc uintptr 16264 }{ 16265 {FzFName: ts + 5507, FnArg: 1, FxFunc: 0}, 16266 {FzFName: ts + 5507, FnArg: 2, FxFunc: 0}, 16267 {FzFName: ts + 5515, FnArg: 1, FiAux: 1, FxFunc: 0}, 16268 {FzFName: ts + 5532, FnArg: 1, FiAux: 2, FxFunc: 0}, 16269 {FzFName: ts + 5549, FnArg: 1, FxFunc: 0}, 16270 {FzFName: ts + 5565, FnArg: 1, FxFunc: 0}, 16271 } 16272 16273 func sqlite3_mmap_warm(tls *libc.TLS, db uintptr, zDb uintptr) int32 { 16274 bp := tls.Alloc(88) 16275 defer tls.Free(88) 16276 16277 var rc int32 = SQLITE_OK 16278 var zSql uintptr = uintptr(0) 16279 var pgsz int32 = 0 16280 var nTotal int32 = 0 16281 16282 if 0 == sqlite3.Xsqlite3_get_autocommit(tls, db) { 16283 return SQLITE_MISUSE 16284 } 16285 16286 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5583, 16287 libc.VaList(bp, func() uintptr { 16288 if zDb != 0 { 16289 return ts + 5624 16290 } 16291 return ts + 584 16292 }(), func() uintptr { 16293 if zDb != 0 { 16294 return zDb 16295 } 16296 return ts + 584 16297 }(), func() uintptr { 16298 if zDb != 0 { 16299 return ts + 5626 16300 } 16301 return ts + 584 16302 }())) 16303 if zSql == uintptr(0) { 16304 return SQLITE_NOMEM 16305 } 16306 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 16307 sqlite3.Xsqlite3_free(tls, zSql) 16308 16309 if rc == SQLITE_OK { 16310 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5629, 16311 libc.VaList(bp+24, func() uintptr { 16312 if zDb != 0 { 16313 return ts + 5624 16314 } 16315 return ts + 584 16316 }(), func() uintptr { 16317 if zDb != 0 { 16318 return zDb 16319 } 16320 return ts + 584 16321 }(), func() uintptr { 16322 if zDb != 0 { 16323 return ts + 5626 16324 } 16325 return ts + 584 16326 }())) 16327 if zSql == uintptr(0) { 16328 rc = SQLITE_NOMEM 16329 } else { 16330 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 16331 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 16332 sqlite3.Xsqlite3_free(tls, zSql) 16333 if rc == SQLITE_OK { 16334 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 16335 pgsz = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 16336 } 16337 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 16338 } 16339 if rc == SQLITE_OK && pgsz == 0 { 16340 rc = SQLITE_ERROR 16341 } 16342 } 16343 } 16344 16345 if rc == SQLITE_OK { 16346 var rc2 int32 16347 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 16348 rc = sqlite3.Xsqlite3_file_control(tls, db, zDb, SQLITE_FCNTL_FILE_POINTER, bp+72) 16349 if rc == SQLITE_OK && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods)).FiVersion >= 3 { 16350 var iPg sqlite3_int64 = int64(1) 16351 var p uintptr = (*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods 16352 for 1 != 0 { 16353 rc = (*struct { 16354 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 16355 })(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) 16356 if rc != SQLITE_OK || *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 16357 break 16358 } 16359 16360 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80))))) 16361 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(pgsz-1)))) 16362 16363 rc = (*struct { 16364 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 16365 })(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))) 16366 if rc != SQLITE_OK { 16367 break 16368 } 16369 iPg++ 16370 } 16371 sqlite3.Xsqlite3_log(tls, SQLITE_OK, 16372 ts+5652, libc.VaList(bp+48, func() int64 { 16373 if iPg == int64(1) { 16374 return int64(0) 16375 } 16376 return iPg 16377 }(), 16378 sqlite3.Xsqlite3_db_filename(tls, db, zDb))) 16379 } 16380 16381 rc2 = sqlite3.Xsqlite3_exec(tls, db, ts+5702, uintptr(0), uintptr(0), uintptr(0)) 16382 if rc == SQLITE_OK { 16383 rc = rc2 16384 } 16385 } 16386 16387 return rc 16388 } 16389 16390 type nextCharContext1 = struct { 16391 Fdb uintptr 16392 FpStmt uintptr 16393 FzPrefix uintptr 16394 FnPrefix int32 16395 FnAlloc int32 16396 FnUsed int32 16397 F__ccgo_pad1 [4]byte 16398 FaResult uintptr 16399 FmallocFailed int32 16400 FotherError int32 16401 } 16402 16403 type nextCharContext = nextCharContext1 16404 16405 func nextCharAppend(tls *libc.TLS, p uintptr, c uint32) { 16406 var i int32 16407 for i = 0; i < (*nextCharContext)(unsafe.Pointer(p)).FnUsed; i++ { 16408 if *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(i)*4)) == c { 16409 return 16410 } 16411 } 16412 if (*nextCharContext)(unsafe.Pointer(p)).FnUsed+1 > (*nextCharContext)(unsafe.Pointer(p)).FnAlloc { 16413 var aNew uintptr 16414 var n int32 = (*nextCharContext)(unsafe.Pointer(p)).FnAlloc*2 + 30 16415 aNew = sqlite3.Xsqlite3_realloc64(tls, (*nextCharContext)(unsafe.Pointer(p)).FaResult, uint64(n)*uint64(unsafe.Sizeof(uint32(0)))) 16416 if aNew == uintptr(0) { 16417 (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed = 1 16418 return 16419 } else { 16420 (*nextCharContext)(unsafe.Pointer(p)).FaResult = aNew 16421 (*nextCharContext)(unsafe.Pointer(p)).FnAlloc = n 16422 } 16423 } 16424 *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(libc.PostIncInt32(&(*nextCharContext)(unsafe.Pointer(p)).FnUsed, 1))*4)) = c 16425 } 16426 16427 func writeUtf8(tls *libc.TLS, z uintptr, c uint32) int32 { 16428 if c < uint32(0x00080) { 16429 *(*uint8)(unsafe.Pointer(z)) = uint8(c & uint32(0xff)) 16430 return 1 16431 } 16432 if c < uint32(0x00800) { 16433 *(*uint8)(unsafe.Pointer(z)) = uint8(0xC0 + int32(uint8(c>>6&uint32(0x1F)))) 16434 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16435 return 2 16436 } 16437 if c < uint32(0x10000) { 16438 *(*uint8)(unsafe.Pointer(z)) = uint8(0xE0 + int32(uint8(c>>12&uint32(0x0F)))) 16439 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 16440 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16441 return 3 16442 } 16443 *(*uint8)(unsafe.Pointer(z)) = uint8(0xF0 + int32(uint8(c>>18&uint32(0x07)))) 16444 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>12&uint32(0x3F)))) 16445 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 16446 *(*uint8)(unsafe.Pointer(z + 3)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16447 return 4 16448 } 16449 16450 func readUtf8(tls *libc.TLS, z uintptr, pOut uintptr) int32 { 16451 var c uint32 = uint32(*(*uint8)(unsafe.Pointer(z))) 16452 if c < uint32(0xc0) { 16453 *(*uint32)(unsafe.Pointer(pOut)) = c 16454 return 1 16455 } else { 16456 var n int32 = 1 16457 c = uint32(validBits[c-uint32(0xc0)]) 16458 for int32(*(*uint8)(unsafe.Pointer(z + uintptr(n))))&0xc0 == 0x80 { 16459 c = c<<6 + uint32(0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&n, 1)))))) 16460 } 16461 if c < uint32(0x80) || c&0xFFFFF800 == uint32(0xD800) || c&0xFFFFFFFE == uint32(0xFFFE) { 16462 c = uint32(0xFFFD) 16463 } 16464 *(*uint32)(unsafe.Pointer(pOut)) = c 16465 return n 16466 } 16467 return int32(0) 16468 } 16469 16470 var validBits = [64]uint8{ 16471 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16472 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 16473 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 16474 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 16475 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16476 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 16477 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16478 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 16479 } 16480 16481 func findNextChars(tls *libc.TLS, p uintptr) { 16482 bp := tls.Alloc(12) 16483 defer tls.Free(12) 16484 16485 var cPrev uint32 = uint32(0) 16486 16487 var n int32 16488 var rc int32 16489 16490 for { 16491 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 1, (*nextCharContext)(unsafe.Pointer(p)).FzPrefix, (*nextCharContext)(unsafe.Pointer(p)).FnPrefix, 16492 uintptr(0)) 16493 n = writeUtf8(tls, bp, cPrev+uint32(1)) 16494 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 2, bp, n, uintptr(0)) 16495 rc = sqlite3.Xsqlite3_step(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16496 if rc == SQLITE_DONE { 16497 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16498 return 16499 } else if rc != SQLITE_ROW { 16500 (*nextCharContext)(unsafe.Pointer(p)).FotherError = rc 16501 return 16502 } else { 16503 var zOut uintptr = sqlite3.Xsqlite3_column_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 0) 16504 16505 n = readUtf8(tls, zOut+uintptr((*nextCharContext)(unsafe.Pointer(p)).FnPrefix), bp+8) 16506 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16507 nextCharAppend(tls, p, *(*uint32)(unsafe.Pointer(bp + 8))) 16508 cPrev = *(*uint32)(unsafe.Pointer(bp + 8)) 16509 if (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed != 0 { 16510 return 16511 } 16512 } 16513 } 16514 } 16515 16516 func nextCharFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16517 bp := tls.Alloc(136) 16518 defer tls.Free(136) 16519 16520 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 16521 var zField uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 16522 var zWhere uintptr 16523 var zCollName uintptr 16524 var zWhereClause uintptr = uintptr(0) 16525 var zColl uintptr = uintptr(0) 16526 var zSql uintptr 16527 var rc int32 16528 16529 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(nextCharContext{}))) 16530 (*nextCharContext)(unsafe.Pointer(bp + 80)).Fdb = sqlite3.Xsqlite3_context_db_handle(tls, context) 16531 (*nextCharContext)(unsafe.Pointer(bp + 80)).FzPrefix = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 16532 (*nextCharContext)(unsafe.Pointer(bp + 80)).FnPrefix = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 16533 if zTable == uintptr(0) || zField == uintptr(0) || (*nextCharContext)(unsafe.Pointer(bp+80)).FzPrefix == uintptr(0) { 16534 return 16535 } 16536 if argc >= 4 && 16537 libc.AssignUintptr(&zWhere, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) != uintptr(0) && 16538 int32(*(*uint8)(unsafe.Pointer(zWhere))) != 0 { 16539 zWhereClause = sqlite3.Xsqlite3_mprintf(tls, ts+5706, libc.VaList(bp, zWhere)) 16540 if zWhereClause == uintptr(0) { 16541 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16542 return 16543 } 16544 } else { 16545 zWhereClause = ts + 584 16546 } 16547 if argc >= 5 && 16548 libc.AssignUintptr(&zCollName, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) != uintptr(0) && 16549 int32(*(*uint8)(unsafe.Pointer(zCollName))) != 0 { 16550 zColl = sqlite3.Xsqlite3_mprintf(tls, ts+5715, libc.VaList(bp+8, zCollName)) 16551 if zColl == uintptr(0) { 16552 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16553 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 16554 sqlite3.Xsqlite3_free(tls, zWhereClause) 16555 } 16556 return 16557 } 16558 } else { 16559 zColl = ts + 584 16560 } 16561 zSql = sqlite3.Xsqlite3_mprintf(tls, 16562 ts+5728, 16563 libc.VaList(bp+16, zField, zTable, zField, zColl, zField, zColl, zWhereClause, zColl)) 16564 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 16565 sqlite3.Xsqlite3_free(tls, zWhereClause) 16566 } 16567 if *(*int8)(unsafe.Pointer(zColl)) != 0 { 16568 sqlite3.Xsqlite3_free(tls, zColl) 16569 } 16570 if zSql == uintptr(0) { 16571 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16572 return 16573 } 16574 16575 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb, zSql, -1, bp+80+8, uintptr(0)) 16576 sqlite3.Xsqlite3_free(tls, zSql) 16577 if rc != 0 { 16578 sqlite3.Xsqlite3_result_error(tls, context, sqlite3.Xsqlite3_errmsg(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb), -1) 16579 return 16580 } 16581 findNextChars(tls, bp+80) 16582 if (*nextCharContext)(unsafe.Pointer(bp+80)).FmallocFailed != 0 { 16583 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16584 } else { 16585 var pRes uintptr 16586 pRes = sqlite3.Xsqlite3_malloc64(tls, uint64((*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed*4+1)) 16587 if pRes == uintptr(0) { 16588 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16589 } else { 16590 var i int32 16591 var n int32 = 0 16592 for i = 0; i < (*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed; i++ { 16593 n = n + writeUtf8(tls, pRes+uintptr(n), *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(bp+80)).FaResult + uintptr(i)*4))) 16594 } 16595 *(*uint8)(unsafe.Pointer(pRes + uintptr(n))) = uint8(0) 16596 sqlite3.Xsqlite3_result_text(tls, context, pRes, n, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 16597 } 16598 } 16599 sqlite3.Xsqlite3_finalize(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FpStmt) 16600 sqlite3.Xsqlite3_free(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FaResult) 16601 } 16602 16603 func sqlite3_nextchar_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16604 var rc int32 = SQLITE_OK 16605 _ = pApi 16606 16607 _ = pzErrMsg 16608 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 3, 16609 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 16610 *(*uintptr)(unsafe.Pointer(&struct { 16611 f func(*libc.TLS, uintptr, int32, uintptr) 16612 }{nextCharFunc})), uintptr(0), uintptr(0)) 16613 if rc == SQLITE_OK { 16614 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 4, 16615 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 16616 *(*uintptr)(unsafe.Pointer(&struct { 16617 f func(*libc.TLS, uintptr, int32, uintptr) 16618 }{nextCharFunc})), uintptr(0), uintptr(0)) 16619 } 16620 if rc == SQLITE_OK { 16621 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 5, 16622 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 16623 *(*uintptr)(unsafe.Pointer(&struct { 16624 f func(*libc.TLS, uintptr, int32, uintptr) 16625 }{nextCharFunc})), uintptr(0), uintptr(0)) 16626 } 16627 return rc 16628 } 16629 16630 var aiClass = [256]uint8{ 16631 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), 16632 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), 16633 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), 16634 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), 16635 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), 16636 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), 16637 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), 16638 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), 16639 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), 16640 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), 16641 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), 16642 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), 16643 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), 16644 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), 16645 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), 16646 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), 16647 } 16648 16649 var sqlite3UpperToLower = [256]uint8{ 16650 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), 16651 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), 16652 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), 16653 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), 16654 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), 16655 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), 16656 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), 16657 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), 16658 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), 16659 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), 16660 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), 16661 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), 16662 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), 16663 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), 16664 uint8(252), uint8(253), uint8(254), uint8(255), 16665 } 16666 16667 var sqlite3CtypeMap = [256]uint8{ 16668 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16669 uint8(0x00), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x00), uint8(0x00), 16670 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16671 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16672 uint8(0x01), uint8(0x00), uint8(0x80), uint8(0x00), uint8(0x40), uint8(0x00), uint8(0x00), uint8(0x80), 16673 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16674 uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), 16675 uint8(0x0c), uint8(0x0c), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16676 uint8(0x00), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x02), 16677 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 16678 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 16679 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x80), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x40), 16680 uint8(0x80), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x22), 16681 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 16682 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 16683 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16684 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16685 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16686 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16687 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16688 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16689 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16690 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16691 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16692 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16693 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16694 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16695 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16696 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16697 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16698 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16699 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16700 } 16701 16702 func sqlite3GetToken(tls *libc.TLS, z uintptr, tokenType uintptr) int32 { 16703 var i int32 16704 var c int32 16705 switch int32(aiClass[*(*uint8)(unsafe.Pointer(z))]) { 16706 case CC_SPACE: 16707 { 16708 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x01 != 0; i++ { 16709 } 16710 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 16711 return i 16712 16713 } 16714 case CC_MINUS: 16715 { 16716 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '-' { 16717 for i = 2; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && c != '\n'; i++ { 16718 } 16719 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 16720 return i 16721 } 16722 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16723 return 1 16724 16725 } 16726 case CC_LP: 16727 { 16728 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16729 return 1 16730 16731 } 16732 case CC_RP: 16733 { 16734 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16735 return 1 16736 16737 } 16738 case CC_SEMI: 16739 { 16740 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16741 return 1 16742 16743 } 16744 case CC_PLUS: 16745 { 16746 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16747 return 1 16748 16749 } 16750 case CC_STAR: 16751 { 16752 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16753 return 1 16754 16755 } 16756 case CC_SLASH: 16757 { 16758 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '*' || int32(*(*uint8)(unsafe.Pointer(z + 2))) == 0 { 16759 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16760 return 1 16761 } 16762 i = 3 16763 c = int32(*(*uint8)(unsafe.Pointer(z + 2))) 16764 for ; (c != '*' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/') && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 16765 } 16766 if c != 0 { 16767 i++ 16768 } 16769 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 16770 return i 16771 16772 } 16773 case CC_PERCENT: 16774 { 16775 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16776 return 1 16777 16778 } 16779 case CC_EQ: 16780 { 16781 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16782 return 1 + libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z + 1))) == '=') 16783 16784 } 16785 case CC_LT: 16786 { 16787 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 16788 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16789 return 2 16790 } else if c == '>' { 16791 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16792 return 2 16793 } else if c == '<' { 16794 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16795 return 2 16796 } else { 16797 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16798 return 1 16799 } 16800 16801 } 16802 fallthrough 16803 case CC_GT: 16804 { 16805 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 16806 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16807 return 2 16808 } else if c == '>' { 16809 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16810 return 2 16811 } else { 16812 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16813 return 1 16814 } 16815 16816 } 16817 fallthrough 16818 case CC_BANG: 16819 { 16820 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '=' { 16821 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16822 return 1 16823 } else { 16824 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16825 return 2 16826 } 16827 16828 } 16829 fallthrough 16830 case CC_PIPE: 16831 { 16832 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '|' { 16833 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16834 return 1 16835 } else { 16836 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16837 return 2 16838 } 16839 16840 } 16841 fallthrough 16842 case CC_COMMA: 16843 { 16844 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16845 return 1 16846 16847 } 16848 case CC_AND: 16849 { 16850 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16851 return 1 16852 16853 } 16854 case CC_TILDA: 16855 { 16856 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16857 return 1 16858 16859 } 16860 case CC_QUOTE: 16861 { 16862 var delim int32 = int32(*(*uint8)(unsafe.Pointer(z))) 16863 16864 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 16865 if c == delim { 16866 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == delim { 16867 i++ 16868 } else { 16869 break 16870 } 16871 } 16872 } 16873 if c == '\'' { 16874 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16875 return i + 1 16876 } else if c != 0 { 16877 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 16878 return i + 1 16879 } else { 16880 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16881 return i 16882 } 16883 16884 } 16885 fallthrough 16886 case CC_DOT: 16887 { 16888 if !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + 1))])&0x04 != 0) { 16889 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16890 return 1 16891 } 16892 16893 } 16894 fallthrough 16895 case CC_DIGIT: 16896 { 16897 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16898 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 { 16899 for i = 3; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 16900 } 16901 return i 16902 } 16903 for i = 0; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 16904 } 16905 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' { 16906 i++ 16907 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 16908 i++ 16909 } 16910 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16911 } 16912 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 || 16913 (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) { 16914 i = i + 2 16915 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 16916 i++ 16917 } 16918 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16919 } 16920 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 16921 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16922 i++ 16923 } 16924 return i 16925 16926 } 16927 case CC_QUOTE2: 16928 { 16929 i = 1 16930 c = int32(*(*uint8)(unsafe.Pointer(z))) 16931 for ; c != ']' && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 16932 } 16933 *(*int32)(unsafe.Pointer(tokenType)) = func() int32 { 16934 if c == ']' { 16935 return TK_NAME 16936 } 16937 return TK_ERROR 16938 }() 16939 return i 16940 16941 } 16942 case CC_VARNUM: 16943 { 16944 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16945 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 16946 } 16947 return i 16948 16949 } 16950 case CC_DOLLAR: 16951 fallthrough 16952 case CC_VARALPHA: 16953 { 16954 var n int32 = 0 16955 16956 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16957 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 16958 if int32(sqlite3CtypeMap[uint8(c)])&0x46 != 0 { 16959 n++ 16960 } else if c == '(' && n > 0 { 16961 for __ccgo := true; __ccgo; __ccgo = libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && !(int32(sqlite3CtypeMap[uint8(c)])&0x01 != 0) && c != ')' { 16962 i++ 16963 } 16964 if c == ')' { 16965 i++ 16966 } else { 16967 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16968 } 16969 break 16970 } else if c == ':' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == ':' { 16971 i++ 16972 } else { 16973 break 16974 } 16975 } 16976 if n == 0 { 16977 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16978 } 16979 return i 16980 16981 } 16982 case CC_KYWD: 16983 { 16984 for i = 1; int32(aiClass[*(*uint8)(unsafe.Pointer(z + uintptr(i)))]) <= CC_KYWD; i++ { 16985 } 16986 if int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 16987 i++ 16988 break 16989 } 16990 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 16991 return i 16992 16993 } 16994 case CC_X: 16995 { 16996 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '\'' { 16997 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16998 for i = 2; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 16999 } 17000 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' || i%2 != 0 { 17001 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17002 for *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' { 17003 i++ 17004 } 17005 } 17006 if *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 { 17007 i++ 17008 } 17009 return i 17010 } 17011 17012 } 17013 fallthrough 17014 case CC_ID: 17015 { 17016 i = 1 17017 break 17018 17019 } 17020 default: 17021 { 17022 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17023 return 1 17024 17025 } 17026 } 17027 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17028 i++ 17029 } 17030 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17031 return i 17032 } 17033 17034 func sqlite3_normalize(tls *libc.TLS, zSql uintptr) uintptr { 17035 bp := tls.Alloc(4) 17036 defer tls.Free(4) 17037 17038 var z uintptr 17039 var nZ sqlite3_int64 17040 var nSql sqlite3_int64 17041 var i int32 17042 var j int32 17043 17044 var n int32 17045 var k int32 17046 17047 nSql = sqlite3_int64(libc.Xstrlen(tls, zSql)) 17048 nZ = nSql 17049 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nZ+int64(2))) 17050 if z == uintptr(0) { 17051 return uintptr(0) 17052 } 17053 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; i = i + n { 17054 n = sqlite3GetToken(tls, zSql+uintptr(i), bp) 17055 switch *(*int32)(unsafe.Pointer(bp)) { 17056 case TK_SPACE: 17057 { 17058 break 17059 17060 } 17061 case TK_ERROR: 17062 { 17063 sqlite3.Xsqlite3_free(tls, z) 17064 return uintptr(0) 17065 17066 } 17067 case TK_LITERAL: 17068 { 17069 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 17070 break 17071 17072 } 17073 case TK_PUNCT: 17074 fallthrough 17075 case TK_NAME: 17076 { 17077 if n == 4 && sqlite3.Xsqlite3_strnicmp(tls, zSql+uintptr(i), ts+5846, 4) == 0 { 17078 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) || 17079 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) { 17080 } else { 17081 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 17082 break 17083 } 17084 } 17085 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 { 17086 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(' ') 17087 } 17088 for k = 0; k < n; k++ { 17089 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(sqlite3UpperToLower[uint8(*(*int8)(unsafe.Pointer(zSql + uintptr(i+k))))]) 17090 } 17091 break 17092 17093 } 17094 } 17095 } 17096 for j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) == ' ' { 17097 j-- 17098 } 17099 if j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) != ';' { 17100 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(';') 17101 } 17102 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 17103 17104 for i = 0; i < j; i = n { 17105 var zIn uintptr = libc.Xstrstr(tls, z+uintptr(i), ts+5858) 17106 var nParen int32 17107 if zIn == uintptr(0) { 17108 break 17109 } 17110 n = int32((int64(zIn)-int64(z))/1) + 3 17111 if n != 0 && int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + libc.UintptrFromInt32(-1))))])&0x46 != 0 { 17112 continue 17113 } 17114 if libc.Xstrncmp(tls, zIn, ts+5862, uint64(9)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 9)))])&0x46 != 0) { 17115 continue 17116 } 17117 if libc.Xstrncmp(tls, zIn, ts+5872, uint64(7)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 7)))])&0x46 != 0) { 17118 continue 17119 } 17120 nParen = 1 17121 k = 0 17122 for ; *(*int8)(unsafe.Pointer(z + uintptr(n+k))) != 0; k++ { 17123 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == '(' { 17124 nParen++ 17125 } 17126 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == ')' { 17127 nParen-- 17128 if nParen == 0 { 17129 break 17130 } 17131 } 17132 } 17133 17134 if k < 5 { 17135 z = sqlite3.Xsqlite3_realloc64(tls, z, uint64(j+(5-k)+1)) 17136 if z == uintptr(0) { 17137 return uintptr(0) 17138 } 17139 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 17140 } else if k > 5 { 17141 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 17142 } 17143 j = j - k + 5 17144 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 17145 libc.Xmemcpy(tls, z+uintptr(n), ts+5880, uint64(5)) 17146 } 17147 return z 17148 } 17149 17150 type Percentile1 = struct { 17151 FnAlloc uint32 17152 FnUsed uint32 17153 FrPct float64 17154 Fa uintptr 17155 } 17156 17157 type Percentile = Percentile1 17158 17159 func isInfinity(tls *libc.TLS, r float64) int32 { 17160 bp := tls.Alloc(16) 17161 defer tls.Free(16) 17162 *(*float64)(unsafe.Pointer(bp + 8)) = r 17163 17164 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 17165 return libc.Bool32(*(*sqlite3_uint64)(unsafe.Pointer(bp))>>52&uint64(0x7ff) == uint64(0x7ff)) 17166 } 17167 17168 func sameValue(tls *libc.TLS, a float64, b float64) int32 { 17169 a = a - b 17170 return libc.Bool32(a >= -0.001 && a <= 0.001) 17171 } 17172 17173 func percentStep(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 17174 var p uintptr 17175 var rPct float64 17176 var eType int32 17177 var y float64 17178 17179 eType = sqlite3.Xsqlite3_value_numeric_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17180 rPct = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17181 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT || 17182 rPct < 0.0 || rPct > 100.0 { 17183 sqlite3.Xsqlite3_result_error(tls, pCtx, 17184 ts+5886, -1) 17185 return 17186 } 17187 17188 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, int32(unsafe.Sizeof(Percentile{}))) 17189 if p == uintptr(0) { 17190 return 17191 } 17192 17193 if (*Percentile)(unsafe.Pointer(p)).FrPct == 0.0 { 17194 (*Percentile)(unsafe.Pointer(p)).FrPct = rPct + 1.0 17195 } else if !(sameValue(tls, (*Percentile)(unsafe.Pointer(p)).FrPct, rPct+1.0) != 0) { 17196 sqlite3.Xsqlite3_result_error(tls, pCtx, 17197 ts+5953, -1) 17198 return 17199 } 17200 17201 eType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) 17202 if eType == SQLITE_NULL { 17203 return 17204 } 17205 17206 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT { 17207 sqlite3.Xsqlite3_result_error(tls, pCtx, 17208 ts+6017, -1) 17209 return 17210 } 17211 17212 y = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 17213 if isInfinity(tls, y) != 0 { 17214 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+6061, -1) 17215 return 17216 } 17217 17218 if (*Percentile)(unsafe.Pointer(p)).FnUsed >= (*Percentile)(unsafe.Pointer(p)).FnAlloc { 17219 var n uint32 = (*Percentile)(unsafe.Pointer(p)).FnAlloc*uint32(2) + uint32(250) 17220 var a uintptr = sqlite3.Xsqlite3_realloc64(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64(unsafe.Sizeof(float64(0)))*uint64(n)) 17221 if a == uintptr(0) { 17222 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17223 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 17224 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 17225 return 17226 } 17227 (*Percentile)(unsafe.Pointer(p)).FnAlloc = n 17228 (*Percentile)(unsafe.Pointer(p)).Fa = a 17229 } 17230 *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncUint32(&(*Percentile)(unsafe.Pointer(p)).FnUsed, 1))*8)) = y 17231 } 17232 17233 func doubleCmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 17234 var a float64 = *(*float64)(unsafe.Pointer(pA)) 17235 var b float64 = *(*float64)(unsafe.Pointer(pB)) 17236 if a == b { 17237 return 0 17238 } 17239 if a < b { 17240 return -1 17241 } 17242 return +1 17243 } 17244 17245 func percentFinal(tls *libc.TLS, pCtx uintptr) { 17246 var p uintptr 17247 var i1 uint32 17248 var i2 uint32 17249 var v1 float64 17250 var v2 float64 17251 var ix float64 17252 var vx float64 17253 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, 0) 17254 if p == uintptr(0) { 17255 return 17256 } 17257 if (*Percentile)(unsafe.Pointer(p)).Fa == uintptr(0) { 17258 return 17259 } 17260 if (*Percentile)(unsafe.Pointer(p)).FnUsed != 0 { 17261 libc.Xqsort(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64((*Percentile)(unsafe.Pointer(p)).FnUsed), uint64(unsafe.Sizeof(float64(0))), *(*uintptr)(unsafe.Pointer(&struct { 17262 f func(*libc.TLS, uintptr, uintptr) int32 17263 }{doubleCmp}))) 17264 ix = ((*Percentile)(unsafe.Pointer(p)).FrPct - 1.0) * float64((*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1)) * 0.01 17265 i1 = uint32(ix) 17266 if ix == float64(i1) || i1 == (*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1) { 17267 i2 = i1 17268 } else { 17269 i2 = i1 + uint32(1) 17270 } 17271 v1 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i1)*8)) 17272 v2 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i2)*8)) 17273 vx = v1 + (v2-v1)*(ix-float64(i1)) 17274 sqlite3.Xsqlite3_result_double(tls, pCtx, vx) 17275 } 17276 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17277 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 17278 } 17279 17280 func sqlite3_percentile_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17281 var rc int32 = SQLITE_OK 17282 _ = pApi 17283 17284 _ = pzErrMsg 17285 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6087, 2, 17286 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17287 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17288 f func(*libc.TLS, uintptr, int32, uintptr) 17289 }{percentStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{percentFinal}))) 17290 return rc 17291 } 17292 17293 type prefixes_vtab1 = struct{ Fbase sqlite3_vtab } 17294 17295 type prefixes_vtab = prefixes_vtab1 17296 17297 type prefixes_cursor1 = struct { 17298 Fbase sqlite3_vtab_cursor 17299 FiRowid sqlite3_int64 17300 FzStr uintptr 17301 FnStr int32 17302 F__ccgo_pad1 [4]byte 17303 } 17304 17305 type prefixes_cursor = prefixes_cursor1 17306 17307 func prefixesConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17308 var pNew uintptr 17309 var rc int32 17310 17311 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17312 ts+6098) 17313 if rc == SQLITE_OK { 17314 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_vtab{}))) 17315 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17316 if pNew == uintptr(0) { 17317 return SQLITE_NOMEM 17318 } 17319 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(prefixes_vtab{}))) 17320 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 17321 } 17322 return rc 17323 } 17324 17325 func prefixesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17326 var p uintptr = pVtab 17327 sqlite3.Xsqlite3_free(tls, p) 17328 return SQLITE_OK 17329 } 17330 17331 func prefixesOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17332 var pCur uintptr 17333 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_cursor{}))) 17334 if pCur == uintptr(0) { 17335 return SQLITE_NOMEM 17336 } 17337 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(prefixes_cursor{}))) 17338 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17339 return SQLITE_OK 17340 } 17341 17342 func prefixesClose(tls *libc.TLS, cur uintptr) int32 { 17343 var pCur uintptr = cur 17344 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17345 sqlite3.Xsqlite3_free(tls, pCur) 17346 return SQLITE_OK 17347 } 17348 17349 func prefixesNext(tls *libc.TLS, cur uintptr) int32 { 17350 var pCur uintptr = cur 17351 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid++ 17352 return SQLITE_OK 17353 } 17354 17355 func prefixesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 17356 var pCur uintptr = cur 17357 switch i { 17358 case 0: 17359 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), 17360 uintptr(0)) 17361 break 17362 default: 17363 sqlite3.Xsqlite3_result_text(tls, ctx, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr, (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr, uintptr(0)) 17364 break 17365 } 17366 return SQLITE_OK 17367 } 17368 17369 func prefixesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 17370 var pCur uintptr = cur 17371 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid 17372 return SQLITE_OK 17373 } 17374 17375 func prefixesEof(tls *libc.TLS, cur uintptr) int32 { 17376 var pCur uintptr = cur 17377 return libc.Bool32((*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid > sqlite3_int64((*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr)) 17378 } 17379 17380 func prefixesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 17381 bp := tls.Alloc(8) 17382 defer tls.Free(8) 17383 17384 var pCur uintptr = pVtabCursor 17385 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17386 if argc > 0 { 17387 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 17388 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = func() int32 { 17389 if (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr != 0 { 17390 return int32(libc.Xstrlen(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr)) 17391 } 17392 return 0 17393 }() 17394 } else { 17395 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = uintptr(0) 17396 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = 0 17397 } 17398 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 17399 return SQLITE_OK 17400 } 17401 17402 func prefixesBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 17403 var i int32 17404 var p uintptr 17405 17406 i = 0 17407 p = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 17408 __1: 17409 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 17410 goto __3 17411 } 17412 { 17413 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != 1 { 17414 goto __2 17415 } 17416 if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 17417 goto __2 17418 } 17419 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 17420 goto __2 17421 } 17422 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 17423 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 17424 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 17425 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 17426 return SQLITE_OK 17427 17428 } 17429 goto __2 17430 __2: 17431 i++ 17432 p += 12 17433 goto __1 17434 goto __3 17435 __3: 17436 ; 17437 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000000) 17438 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000000000) 17439 return SQLITE_OK 17440 } 17441 17442 var prefixesModule = sqlite3_module{ 17443 FxConnect: 0, 17444 FxBestIndex: 0, 17445 FxDisconnect: 0, 17446 FxOpen: 0, 17447 FxClose: 0, 17448 FxFilter: 0, 17449 FxNext: 0, 17450 FxEof: 0, 17451 FxColumn: 0, 17452 FxRowid: 0, 17453 } 17454 17455 func prefixLengthFunc(tls *libc.TLS, ctx uintptr, nVal int32, apVal uintptr) { 17456 var nByte int32 17457 var nRet int32 = 0 17458 var zL uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 17459 var zR uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 17460 var nL int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 17461 var nR int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 17462 var i int32 17463 17464 nByte = func() int32 { 17465 if nL > nR { 17466 return nL 17467 } 17468 return nR 17469 }() 17470 for i = 0; i < nByte; i++ { 17471 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i)))) != int32(*(*uint8)(unsafe.Pointer(zR + uintptr(i)))) { 17472 break 17473 } 17474 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 != 0x80 { 17475 nRet++ 17476 } 17477 } 17478 17479 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 == 0x80 { 17480 nRet-- 17481 } 17482 sqlite3.Xsqlite3_result_int(tls, ctx, nRet) 17483 } 17484 17485 func sqlite3_prefixes_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17486 var rc int32 = SQLITE_OK 17487 _ = pApi 17488 17489 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6162, uintptr(unsafe.Pointer(&prefixesModule)), uintptr(0)) 17490 if rc == SQLITE_OK { 17491 rc = sqlite3.Xsqlite3_create_function(tls, 17492 db, ts+6171, 2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17493 f func(*libc.TLS, uintptr, int32, uintptr) 17494 }{prefixLengthFunc})), uintptr(0), uintptr(0)) 17495 } 17496 return rc 17497 } 17498 17499 type qpvtab_vtab1 = struct{ Fbase sqlite3_vtab } 17500 17501 type qpvtab_vtab = qpvtab_vtab1 17502 17503 type qpvtab_cursor1 = struct { 17504 Fbase sqlite3_vtab_cursor 17505 FiRowid sqlite3_int64 17506 FzData uintptr 17507 FnData int32 17508 Fflags int32 17509 } 17510 17511 type qpvtab_cursor = qpvtab_cursor1 17512 17513 var azColname = [13]uintptr{ 17514 ts + 6185, 17515 ts + 6188, 17516 ts + 6191, 17517 ts + 6194, 17518 ts + 6197, 17519 ts + 6200, 17520 ts + 6204, ts + 6206, ts + 6208, ts + 6210, ts + 6212, 17521 ts + 6214, 17522 ts + 584, 17523 } 17524 17525 func qpvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17526 var pNew uintptr 17527 var rc int32 17528 17529 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17530 ts+6220) 17531 if rc == SQLITE_OK { 17532 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_vtab{}))) 17533 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17534 if pNew == uintptr(0) { 17535 return SQLITE_NOMEM 17536 } 17537 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(qpvtab_vtab{}))) 17538 } 17539 return rc 17540 } 17541 17542 func qpvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17543 var p uintptr = pVtab 17544 sqlite3.Xsqlite3_free(tls, p) 17545 return SQLITE_OK 17546 } 17547 17548 func qpvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17549 var pCur uintptr 17550 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_cursor{}))) 17551 if pCur == uintptr(0) { 17552 return SQLITE_NOMEM 17553 } 17554 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(qpvtab_cursor{}))) 17555 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17556 return SQLITE_OK 17557 } 17558 17559 func qpvtabClose(tls *libc.TLS, cur uintptr) int32 { 17560 var pCur uintptr = cur 17561 sqlite3.Xsqlite3_free(tls, pCur) 17562 return SQLITE_OK 17563 } 17564 17565 func qpvtabNext(tls *libc.TLS, cur uintptr) int32 { 17566 var pCur uintptr = cur 17567 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 17568 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 17569 var zEnd uintptr = libc.Xstrchr(tls, z, '\n') 17570 if zEnd != 0 { 17571 zEnd++ 17572 } 17573 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = sqlite3_int64(int32((int64(zEnd) - int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData)) / 1)) 17574 } 17575 return SQLITE_OK 17576 } 17577 17578 func qpvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 17579 bp := tls.Alloc(1) 17580 defer tls.Free(1) 17581 17582 var pCur uintptr = cur 17583 if i >= QPVTAB_VN && i <= QPVTAB_RHS && (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 17584 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 17585 var zEnd uintptr 17586 var j int32 17587 j = QPVTAB_VN 17588 for 1 != 0 { 17589 zEnd = libc.Xstrchr(tls, z, func() int32 { 17590 if j == QPVTAB_RHS { 17591 return '\n' 17592 } 17593 return ',' 17594 }()) 17595 if j == i || zEnd == uintptr(0) { 17596 break 17597 } 17598 z = zEnd + uintptr(1) 17599 j++ 17600 } 17601 if zEnd == z { 17602 sqlite3.Xsqlite3_result_null(tls, ctx) 17603 } else if i == QPVTAB_IX || i == QPVTAB_OP || i == QPVTAB_UX { 17604 sqlite3.Xsqlite3_result_int(tls, ctx, libc.Xatoi(tls, z)) 17605 } else { 17606 sqlite3.Xsqlite3_result_text64(tls, ctx, z, uint64((int64(zEnd)-int64(z))/1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 17607 } 17608 } else if i >= QPVTAB_A && i <= QPVTAB_E { 17609 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags&0x001 != 0 { 17610 sqlite3.Xsqlite3_result_int(tls, ctx, i-QPVTAB_A+1) 17611 } else { 17612 *(*int8)(unsafe.Pointer(bp)) = int8('a' + i - QPVTAB_A) 17613 sqlite3.Xsqlite3_result_text64(tls, ctx, bp, uint64(1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 17614 } 17615 } else if i == QPVTAB_FLAGS { 17616 sqlite3.Xsqlite3_result_int(tls, ctx, (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags) 17617 } 17618 return SQLITE_OK 17619 } 17620 17621 func qpvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 17622 var pCur uintptr = cur 17623 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid 17624 return SQLITE_OK 17625 } 17626 17627 func qpvtabEof(tls *libc.TLS, cur uintptr) int32 { 17628 var pCur uintptr = cur 17629 return libc.Bool32((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid >= sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData)) 17630 } 17631 17632 func qpvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 17633 var pCur uintptr = pVtabCursor 17634 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 17635 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData = idxStr 17636 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData = int32(libc.Xstrlen(tls, idxStr)) 17637 (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags = idxNum 17638 return SQLITE_OK 17639 } 17640 17641 func qpvtabStrAppendValue(tls *libc.TLS, pStr uintptr, pVal uintptr) { 17642 bp := tls.Alloc(25) 17643 defer tls.Free(25) 17644 17645 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 17646 case SQLITE_NULL: 17647 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+5846, 0) 17648 break 17649 case SQLITE_INTEGER: 17650 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6325, libc.VaList(bp, sqlite3.Xsqlite3_value_int64(tls, pVal))) 17651 break 17652 case SQLITE_FLOAT: 17653 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6330, libc.VaList(bp+8, sqlite3.Xsqlite3_value_double(tls, pVal))) 17654 break 17655 case SQLITE_TEXT: 17656 { 17657 var i int32 17658 var a uintptr = sqlite3.Xsqlite3_value_text(tls, pVal) 17659 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 17660 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 17661 for i = 0; i < n; i++ { 17662 *(*int8)(unsafe.Pointer(bp + 24)) = *(*int8)(unsafe.Pointer(a + uintptr(i))) 17663 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\n' { 17664 *(*int8)(unsafe.Pointer(bp + 24)) = int8(' ') 17665 } 17666 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 17667 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\'' { 17668 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 17669 } 17670 } 17671 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 17672 break 17673 17674 } 17675 case SQLITE_BLOB: 17676 { 17677 var i int32 17678 var a uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 17679 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 17680 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6334, 2) 17681 for i = 0; i < n; i++ { 17682 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6337, libc.VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a + uintptr(i)))))) 17683 } 17684 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 17685 break 17686 17687 } 17688 } 17689 } 17690 17691 func qpvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 17692 bp := tls.Alloc(120) 17693 defer tls.Free(120) 17694 17695 var pStr uintptr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 17696 var i int32 17697 var k int32 = 0 17698 var rc int32 17699 _ = rc 17700 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6342, libc.VaList(bp, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint)) 17701 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 17702 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 17703 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 17704 if iCol == QPVTAB_FLAGS && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 17705 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 17706 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 17707 17708 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 17709 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 17710 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x002 != 0 { 17711 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 17712 } 17713 } 17714 } 17715 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 17716 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 17717 iCol = QPVTAB_NONE 17718 } 17719 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6362, 17720 libc.VaList(bp+8, i, 17721 azColname[iCol], 17722 op, 17723 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable))) 17724 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 17725 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 17726 17727 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 17728 qpvtabStrAppendValue(tls, pStr, *(*uintptr)(unsafe.Pointer(bp + 112))) 17729 } 17730 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6387, 1) 17731 } 17732 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 17733 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 17734 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 17735 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 17736 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 17737 iCol = QPVTAB_NONE 17738 } 17739 if iCol >= QPVTAB_A && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 17740 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&k, 1) 17741 if iCol <= QPVTAB_FLAGS || (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x004 != 0 { 17742 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 17743 } 17744 } 17745 } 17746 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6389, libc.VaList(bp+40, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy)) 17747 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; i++ { 17748 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 17749 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6406, libc.VaList(bp+48, i, 17750 func() uintptr { 17751 if iCol >= 0 { 17752 return azColname[iCol] 17753 } 17754 return ts + 6427 17755 }(), 17756 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy+uintptr(i)*8)).Fdesc))) 17757 } 17758 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6433, 17759 libc.VaList(bp+72, sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo))) 17760 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6463, libc.VaList(bp+80, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags)) 17761 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6480, libc.VaList(bp+88, int32((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 17762 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 17763 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 17764 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6496, libc.VaList(bp+96, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum)) 17765 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6511, 17766 libc.VaList(bp+104, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed)) 17767 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_str_finish(tls, pStr) 17768 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 17769 return SQLITE_OK 17770 } 17771 17772 var qpvtabModule = sqlite3_module{ 17773 FxConnect: 0, 17774 FxBestIndex: 0, 17775 FxDisconnect: 0, 17776 FxOpen: 0, 17777 FxClose: 0, 17778 FxFilter: 0, 17779 FxNext: 0, 17780 FxEof: 0, 17781 FxColumn: 0, 17782 FxRowid: 0, 17783 } 17784 17785 func sqlite3_qpvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17786 var rc int32 = SQLITE_OK 17787 _ = pApi 17788 17789 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6535, uintptr(unsafe.Pointer(&qpvtabModule)), uintptr(0)) 17790 return rc 17791 } 17792 17793 type ReStateNumber = uint16 17794 17795 type ReStateSet1 = struct { 17796 FnState uint32 17797 F__ccgo_pad1 [4]byte 17798 FaState uintptr 17799 } 17800 17801 type ReStateSet = ReStateSet1 17802 17803 type ReInput1 = struct { 17804 Fz uintptr 17805 Fi int32 17806 Fmx int32 17807 } 17808 17809 type ReInput = ReInput1 17810 17811 type ReCompiled1 = struct { 17812 FsIn ReInput 17813 FzErr uintptr 17814 FaOp uintptr 17815 FaArg uintptr 17816 FxNextChar uintptr 17817 FzInit [12]uint8 17818 FnInit int32 17819 FnState uint32 17820 FnAlloc uint32 17821 } 17822 17823 type ReCompiled = ReCompiled1 17824 17825 func re_add_state(tls *libc.TLS, pSet uintptr, newState int32) { 17826 var i uint32 17827 for i = uint32(0); i < (*ReStateSet)(unsafe.Pointer(pSet)).FnState; i++ { 17828 if int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(i)*2))) == newState { 17829 return 17830 } 17831 } 17832 *(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(libc.PostIncUint32(&(*ReStateSet)(unsafe.Pointer(pSet)).FnState, 1))*2)) = ReStateNumber(newState) 17833 } 17834 17835 func re_next_char(tls *libc.TLS, p uintptr) uint32 { 17836 var c uint32 17837 if (*ReInput)(unsafe.Pointer(p)).Fi >= (*ReInput)(unsafe.Pointer(p)).Fmx { 17838 return uint32(0) 17839 } 17840 c = uint32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*ReInput)(unsafe.Pointer(p)).Fi, 1))))) 17841 if c >= uint32(0x80) { 17842 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 { 17843 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) 17844 if c < uint32(0x80) { 17845 c = uint32(0xfffd) 17846 } 17847 } 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 && 17848 int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0xc0 == 0x80 { 17849 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) 17850 *(*int32)(unsafe.Pointer(p + 8)) += 2 17851 if c <= uint32(0x7ff) || c >= uint32(0xd800) && c <= uint32(0xdfff) { 17852 c = uint32(0xfffd) 17853 } 17854 } 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 && 17855 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 { 17856 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) | 17857 uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+2))))&0x3f) 17858 *(*int32)(unsafe.Pointer(p + 8)) += 3 17859 if c <= uint32(0xffff) || c > uint32(0x10ffff) { 17860 c = uint32(0xfffd) 17861 } 17862 } else { 17863 c = uint32(0xfffd) 17864 } 17865 } 17866 return c 17867 } 17868 17869 func re_next_char_nocase(tls *libc.TLS, p uintptr) uint32 { 17870 var c uint32 = re_next_char(tls, p) 17871 if c >= uint32('A') && c <= uint32('Z') { 17872 c = c + uint32('a'-'A') 17873 } 17874 return c 17875 } 17876 17877 func re_word_char(tls *libc.TLS, c int32) int32 { 17878 return libc.Bool32(c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || 17879 c >= 'A' && c <= 'Z' || c == '_') 17880 } 17881 17882 func re_digit_char(tls *libc.TLS, c int32) int32 { 17883 return libc.Bool32(c >= '0' && c <= '9') 17884 } 17885 17886 func re_space_char(tls *libc.TLS, c int32) int32 { 17887 return libc.Bool32(c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\v' || c == '\f') 17888 } 17889 17890 func sqlite3re_match(tls *libc.TLS, pRe uintptr, zIn uintptr, nIn int32) int32 { 17891 bp := tls.Alloc(248) 17892 defer tls.Free(248) 17893 17894 var pThis uintptr 17895 var pNext uintptr 17896 17897 var pToFree uintptr 17898 var i uint32 17899 var iSwap uint32 17900 var c int32 17901 var cPrev int32 17902 var rc int32 17903 17904 var x uint8 17905 var j int32 17906 var n int32 17907 var hit int32 17908 var x1 int32 17909 i = uint32(0) 17910 iSwap = uint32(0) 17911 c = RE_EOF + 1 17912 cPrev = 0 17913 rc = 0 17914 17915 (*ReInput)(unsafe.Pointer(bp + 232)).Fz = zIn 17916 (*ReInput)(unsafe.Pointer(bp + 232)).Fi = 0 17917 (*ReInput)(unsafe.Pointer(bp + 232)).Fmx = func() int32 { 17918 if nIn >= 0 { 17919 return nIn 17920 } 17921 return int32(libc.Xstrlen(tls, zIn)) 17922 }() 17923 17924 if !((*ReCompiled)(unsafe.Pointer(pRe)).FnInit != 0) { 17925 goto __1 17926 } 17927 x = *(*uint8)(unsafe.Pointer(pRe + 48)) 17928 __2: 17929 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit <= (*ReInput)(unsafe.Pointer(bp+232)).Fmx && 17930 (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)) { 17931 goto __3 17932 } 17933 (*ReInput)(unsafe.Pointer(bp+232)).Fi++ 17934 goto __2 17935 __3: 17936 ; 17937 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit > (*ReInput)(unsafe.Pointer(bp+232)).Fmx) { 17938 goto __4 17939 } 17940 return 0 17941 __4: 17942 ; 17943 __1: 17944 ; 17945 if !(uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState) <= uint64(unsafe.Sizeof([100]ReStateNumber{}))/(uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2))) { 17946 goto __5 17947 } 17948 pToFree = uintptr(0) 17949 (*ReStateSet)(unsafe.Pointer(bp)).FaState = bp + 32 17950 goto __6 17951 __5: 17952 pToFree = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2)*uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState)) 17953 if !(pToFree == uintptr(0)) { 17954 goto __7 17955 } 17956 return -1 17957 __7: 17958 ; 17959 (*ReStateSet)(unsafe.Pointer(bp)).FaState = pToFree 17960 __6: 17961 ; 17962 (*ReStateSet)(unsafe.Pointer(bp + 1*16)).FaState = (*ReStateSet)(unsafe.Pointer(bp)).FaState + uintptr((*ReCompiled)(unsafe.Pointer(pRe)).FnState)*2 17963 pNext = bp + 1*16 17964 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 17965 re_add_state(tls, pNext, 0) 17966 __8: 17967 if !(c != RE_EOF && (*ReStateSet)(unsafe.Pointer(pNext)).FnState > uint32(0)) { 17968 goto __9 17969 } 17970 cPrev = c 17971 c = int32((*struct { 17972 f func(*libc.TLS, uintptr) uint32 17973 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar})).f(tls, bp+232)) 17974 pThis = pNext 17975 pNext = bp + uintptr(iSwap)*16 17976 iSwap = uint32(1) - iSwap 17977 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 17978 i = uint32(0) 17979 __10: 17980 if !(i < (*ReStateSet)(unsafe.Pointer(pThis)).FnState) { 17981 goto __12 17982 } 17983 x1 = int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pThis)).FaState + uintptr(i)*2))) 17984 switch int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) { 17985 case RE_OP_MATCH: 17986 goto __14 17987 case RE_OP_ANY: 17988 goto __15 17989 case RE_OP_WORD: 17990 goto __16 17991 case RE_OP_NOTWORD: 17992 goto __17 17993 case RE_OP_DIGIT: 17994 goto __18 17995 case RE_OP_NOTDIGIT: 17996 goto __19 17997 case RE_OP_SPACE: 17998 goto __20 17999 case RE_OP_NOTSPACE: 18000 goto __21 18001 case RE_OP_BOUNDARY: 18002 goto __22 18003 case RE_OP_ANYSTAR: 18004 goto __23 18005 case RE_OP_FORK: 18006 goto __24 18007 case RE_OP_GOTO: 18008 goto __25 18009 case RE_OP_ACCEPT: 18010 goto __26 18011 case RE_OP_CC_EXC: 18012 goto __27 18013 case RE_OP_CC_INC: 18014 goto __28 18015 } 18016 goto __13 18017 __14: 18018 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) == c) { 18019 goto __29 18020 } 18021 re_add_state(tls, pNext, x1+1) 18022 __29: 18023 ; 18024 goto __13 18025 18026 __15: 18027 if !(c != 0) { 18028 goto __30 18029 } 18030 re_add_state(tls, pNext, x1+1) 18031 __30: 18032 ; 18033 goto __13 18034 18035 __16: 18036 if !(re_word_char(tls, c) != 0) { 18037 goto __31 18038 } 18039 re_add_state(tls, pNext, x1+1) 18040 __31: 18041 ; 18042 goto __13 18043 18044 __17: 18045 if !(!(re_word_char(tls, c) != 0) && c != 0) { 18046 goto __32 18047 } 18048 re_add_state(tls, pNext, x1+1) 18049 __32: 18050 ; 18051 goto __13 18052 18053 __18: 18054 if !(re_digit_char(tls, c) != 0) { 18055 goto __33 18056 } 18057 re_add_state(tls, pNext, x1+1) 18058 __33: 18059 ; 18060 goto __13 18061 18062 __19: 18063 if !(!(re_digit_char(tls, c) != 0) && c != 0) { 18064 goto __34 18065 } 18066 re_add_state(tls, pNext, x1+1) 18067 __34: 18068 ; 18069 goto __13 18070 18071 __20: 18072 if !(re_space_char(tls, c) != 0) { 18073 goto __35 18074 } 18075 re_add_state(tls, pNext, x1+1) 18076 __35: 18077 ; 18078 goto __13 18079 18080 __21: 18081 if !(!(re_space_char(tls, c) != 0) && c != 0) { 18082 goto __36 18083 } 18084 re_add_state(tls, pNext, x1+1) 18085 __36: 18086 ; 18087 goto __13 18088 18089 __22: 18090 if !(re_word_char(tls, c) != re_word_char(tls, cPrev)) { 18091 goto __37 18092 } 18093 re_add_state(tls, pThis, x1+1) 18094 __37: 18095 ; 18096 goto __13 18097 18098 __23: 18099 re_add_state(tls, pNext, x1) 18100 re_add_state(tls, pThis, x1+1) 18101 goto __13 18102 18103 __24: 18104 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18105 re_add_state(tls, pThis, x1+1) 18106 goto __13 18107 18108 __25: 18109 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18110 goto __13 18111 18112 __26: 18113 rc = 1 18114 goto re_match_end 18115 18116 __27: 18117 if !(c == 0) { 18118 goto __38 18119 } 18120 goto __13 18121 __38: 18122 ; 18123 goto re_op_cc_inc 18124 18125 __28: 18126 re_op_cc_inc: 18127 j = 1 18128 n = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) 18129 hit = 0 18130 j = 1 18131 __39: 18132 if !(j > 0 && j < n) { 18133 goto __41 18134 } 18135 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1+j)))) == RE_OP_CC_VALUE) { 18136 goto __42 18137 } 18138 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j)*4)) == c) { 18139 goto __44 18140 } 18141 hit = 1 18142 j = -1 18143 __44: 18144 ; 18145 goto __43 18146 __42: 18147 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) { 18148 goto __45 18149 } 18150 hit = 1 18151 j = -1 18152 goto __46 18153 __45: 18154 j++ 18155 __46: 18156 ; 18157 __43: 18158 ; 18159 goto __40 18160 __40: 18161 j++ 18162 goto __39 18163 goto __41 18164 __41: 18165 ; 18166 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) == RE_OP_CC_EXC) { 18167 goto __47 18168 } 18169 hit = libc.BoolInt32(!(hit != 0)) 18170 __47: 18171 ; 18172 if !(hit != 0) { 18173 goto __48 18174 } 18175 re_add_state(tls, pNext, x1+n) 18176 __48: 18177 ; 18178 goto __13 18179 18180 __13: 18181 ; 18182 goto __11 18183 __11: 18184 i++ 18185 goto __10 18186 goto __12 18187 __12: 18188 ; 18189 goto __8 18190 __9: 18191 ; 18192 i = uint32(0) 18193 __49: 18194 if !(i < (*ReStateSet)(unsafe.Pointer(pNext)).FnState) { 18195 goto __51 18196 } 18197 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) { 18198 goto __52 18199 } 18200 rc = 1 18201 goto __51 18202 __52: 18203 ; 18204 goto __50 18205 __50: 18206 i++ 18207 goto __49 18208 goto __51 18209 __51: 18210 ; 18211 re_match_end: 18212 sqlite3.Xsqlite3_free(tls, pToFree) 18213 return rc 18214 } 18215 18216 func re_resize(tls *libc.TLS, p uintptr, N int32) int32 { 18217 var aOp uintptr 18218 var aArg uintptr 18219 aOp = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp, uint64(N)*uint64(unsafe.Sizeof(int8(0)))) 18220 if aOp == uintptr(0) { 18221 return 1 18222 } 18223 (*ReCompiled)(unsafe.Pointer(p)).FaOp = aOp 18224 aArg = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg, uint64(N)*uint64(unsafe.Sizeof(int32(0)))) 18225 if aArg == uintptr(0) { 18226 return 1 18227 } 18228 (*ReCompiled)(unsafe.Pointer(p)).FaArg = aArg 18229 (*ReCompiled)(unsafe.Pointer(p)).FnAlloc = uint32(N) 18230 return 0 18231 } 18232 18233 func re_insert(tls *libc.TLS, p uintptr, iBefore int32, op int32, arg int32) int32 { 18234 var i int32 18235 if (*ReCompiled)(unsafe.Pointer(p)).FnAlloc <= (*ReCompiled)(unsafe.Pointer(p)).FnState && re_resize(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnAlloc*uint32(2))) != 0 { 18236 return 0 18237 } 18238 for i = int32((*ReCompiled)(unsafe.Pointer(p)).FnState); i > iBefore; i-- { 18239 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i))) = *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i-1))) 18240 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i-1)*4)) 18241 } 18242 (*ReCompiled)(unsafe.Pointer(p)).FnState++ 18243 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(iBefore))) = int8(op) 18244 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iBefore)*4)) = arg 18245 return iBefore 18246 } 18247 18248 func re_append(tls *libc.TLS, p uintptr, op int32, arg int32) int32 { 18249 return re_insert(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnState), op, arg) 18250 } 18251 18252 func re_copy(tls *libc.TLS, p uintptr, iStart int32, N int32) { 18253 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 { 18254 return 18255 } 18256 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)))) 18257 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)))) 18258 *(*uint32)(unsafe.Pointer(p + 64)) += uint32(N) 18259 } 18260 18261 func re_hex(tls *libc.TLS, c int32, pV uintptr) int32 { 18262 if c >= '0' && c <= '9' { 18263 c = c - '0' 18264 } else if c >= 'a' && c <= 'f' { 18265 c = c - ('a' - 10) 18266 } else if c >= 'A' && c <= 'F' { 18267 c = c - ('A' - 10) 18268 } else { 18269 return 0 18270 } 18271 *(*int32)(unsafe.Pointer(pV)) = *(*int32)(unsafe.Pointer(pV))*16 + c&0xff 18272 return 1 18273 } 18274 18275 func re_esc_char(tls *libc.TLS, p uintptr) uint32 { 18276 bp := tls.Alloc(4) 18277 defer tls.Free(4) 18278 18279 var i int32 18280 *(*int32)(unsafe.Pointer(bp)) = 0 18281 var c int8 18282 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18283 return uint32(0) 18284 } 18285 c = int8(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi)))) 18286 if int32(c) == 'u' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+4 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18287 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18288 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18289 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 && 18290 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 3))), bp) != 0 && 18291 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 4))), bp) != 0 { 18292 *(*int32)(unsafe.Pointer(p + 8)) += 5 18293 return uint32(*(*int32)(unsafe.Pointer(bp))) 18294 } 18295 } 18296 if int32(c) == 'x' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+2 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18297 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18298 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18299 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 { 18300 *(*int32)(unsafe.Pointer(p + 8)) += 3 18301 return uint32(*(*int32)(unsafe.Pointer(bp))) 18302 } 18303 } 18304 for i = 0; zEsc[i] != 0 && int32(zEsc[i]) != int32(c); i++ { 18305 } 18306 if zEsc[i] != 0 { 18307 if i < 6 { 18308 c = zTrans[i] 18309 } 18310 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18311 } else { 18312 (*ReCompiled)(unsafe.Pointer(p)).FzErr = ts + 6542 18313 } 18314 return uint32(c) 18315 } 18316 18317 var zEsc = *(*[21]int8)(unsafe.Pointer(ts + 6559)) 18318 var zTrans = *(*[7]int8)(unsafe.Pointer(ts + 6580)) 18319 18320 func rePeek(tls *libc.TLS, p uintptr) uint8 { 18321 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18322 return *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 18323 } 18324 return uint8(0) 18325 } 18326 18327 func re_subcompile_re(tls *libc.TLS, p uintptr) uintptr { 18328 var zErr uintptr 18329 var iStart int32 18330 var iEnd int32 18331 var iGoto int32 18332 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18333 zErr = re_subcompile_string(tls, p) 18334 if zErr != 0 { 18335 return zErr 18336 } 18337 for int32(rePeek(tls, p)) == '|' { 18338 iEnd = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18339 re_insert(tls, p, iStart, RE_OP_FORK, iEnd+2-iStart) 18340 iGoto = re_append(tls, p, RE_OP_GOTO, 0) 18341 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18342 zErr = re_subcompile_string(tls, p) 18343 if zErr != 0 { 18344 return zErr 18345 } 18346 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iGoto)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iGoto)) 18347 } 18348 return uintptr(0) 18349 } 18350 18351 func re_subcompile_string(tls *libc.TLS, p uintptr) uintptr { 18352 var iPrev int32 = -1 18353 var iStart int32 18354 var c uint32 18355 var zErr uintptr 18356 for libc.AssignUint32(&c, (*struct { 18357 f func(*libc.TLS, uintptr) uint32 18358 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 18359 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18360 switch c { 18361 case uint32('|'): 18362 fallthrough 18363 case uint32('$'): 18364 fallthrough 18365 case uint32(')'): 18366 { 18367 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi-- 18368 return uintptr(0) 18369 18370 } 18371 case uint32('('): 18372 { 18373 zErr = re_subcompile_re(tls, p) 18374 if zErr != 0 { 18375 return zErr 18376 } 18377 if int32(rePeek(tls, p)) != ')' { 18378 return ts + 6587 18379 } 18380 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18381 break 18382 18383 } 18384 case uint32('.'): 18385 { 18386 if int32(rePeek(tls, p)) == '*' { 18387 re_append(tls, p, RE_OP_ANYSTAR, 0) 18388 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18389 } else { 18390 re_append(tls, p, RE_OP_ANY, 0) 18391 } 18392 break 18393 18394 } 18395 case uint32('*'): 18396 { 18397 if iPrev < 0 { 18398 return ts + 6601 18399 } 18400 re_insert(tls, p, iPrev, RE_OP_GOTO, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 18401 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState+uint32(1))) 18402 break 18403 18404 } 18405 case uint32('+'): 18406 { 18407 if iPrev < 0 { 18408 return ts + 6621 18409 } 18410 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState)) 18411 break 18412 18413 } 18414 case uint32('?'): 18415 { 18416 if iPrev < 0 { 18417 return ts + 6641 18418 } 18419 re_insert(tls, p, iPrev, RE_OP_FORK, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 18420 break 18421 18422 } 18423 case uint32('{'): 18424 { 18425 var m int32 = 0 18426 var n int32 = 0 18427 var sz int32 18428 var j int32 18429 if iPrev < 0 { 18430 return ts + 6661 18431 } 18432 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 18433 m = int32(uint32(m*10) + c - uint32('0')) 18434 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18435 } 18436 n = m 18437 if c == uint32(',') { 18438 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18439 n = 0 18440 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 18441 n = int32(uint32(n*10) + c - uint32('0')) 18442 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18443 } 18444 } 18445 if c != uint32('}') { 18446 return ts + 6685 18447 } 18448 if n > 0 && n < m { 18449 return ts + 6699 18450 } 18451 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18452 sz = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iPrev)) 18453 if m == 0 { 18454 if n == 0 { 18455 return ts + 6724 18456 } 18457 re_insert(tls, p, iPrev, RE_OP_FORK, sz+1) 18458 n-- 18459 } else { 18460 for j = 1; j < m; j++ { 18461 re_copy(tls, p, iPrev, sz) 18462 } 18463 } 18464 for j = m; j < n; j++ { 18465 re_append(tls, p, RE_OP_FORK, sz+1) 18466 re_copy(tls, p, iPrev, sz) 18467 } 18468 if n == 0 && m > 0 { 18469 re_append(tls, p, RE_OP_FORK, -sz) 18470 } 18471 break 18472 18473 } 18474 case uint32('['): 18475 { 18476 var iFirst int32 = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18477 if int32(rePeek(tls, p)) == '^' { 18478 re_append(tls, p, RE_OP_CC_EXC, 0) 18479 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18480 } else { 18481 re_append(tls, p, RE_OP_CC_INC, 0) 18482 } 18483 for libc.AssignUint32(&c, (*struct { 18484 f func(*libc.TLS, uintptr) uint32 18485 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 18486 if c == uint32('[') && int32(rePeek(tls, p)) == ':' { 18487 return ts + 6757 18488 } 18489 if c == uint32('\\') { 18490 c = re_esc_char(tls, p) 18491 } 18492 if int32(rePeek(tls, p)) == '-' { 18493 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 18494 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18495 c = (*struct { 18496 f func(*libc.TLS, uintptr) uint32 18497 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p) 18498 if c == uint32('\\') { 18499 c = re_esc_char(tls, p) 18500 } 18501 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 18502 } else { 18503 re_append(tls, p, RE_OP_CC_VALUE, int32(c)) 18504 } 18505 if int32(rePeek(tls, p)) == ']' { 18506 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18507 break 18508 } 18509 } 18510 if c == uint32(0) { 18511 return ts + 6795 18512 } 18513 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iFirst)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iFirst)) 18514 break 18515 18516 } 18517 case uint32('\\'): 18518 { 18519 var specialOp int32 = 0 18520 switch int32(rePeek(tls, p)) { 18521 case 'b': 18522 specialOp = RE_OP_BOUNDARY 18523 break 18524 case 'd': 18525 specialOp = RE_OP_DIGIT 18526 break 18527 case 'D': 18528 specialOp = RE_OP_NOTDIGIT 18529 break 18530 case 's': 18531 specialOp = RE_OP_SPACE 18532 break 18533 case 'S': 18534 specialOp = RE_OP_NOTSPACE 18535 break 18536 case 'w': 18537 specialOp = RE_OP_WORD 18538 break 18539 case 'W': 18540 specialOp = RE_OP_NOTWORD 18541 break 18542 } 18543 if specialOp != 0 { 18544 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18545 re_append(tls, p, specialOp, 0) 18546 } else { 18547 c = re_esc_char(tls, p) 18548 re_append(tls, p, RE_OP_MATCH, int32(c)) 18549 } 18550 break 18551 18552 } 18553 default: 18554 { 18555 re_append(tls, p, RE_OP_MATCH, int32(c)) 18556 break 18557 18558 } 18559 } 18560 iPrev = iStart 18561 } 18562 return uintptr(0) 18563 } 18564 18565 func sqlite3re_free(tls *libc.TLS, pRe uintptr) { 18566 if pRe != 0 { 18567 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaOp) 18568 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaArg) 18569 sqlite3.Xsqlite3_free(tls, pRe) 18570 } 18571 } 18572 18573 func sqlite3re_compile(tls *libc.TLS, ppRe uintptr, zIn uintptr, noCase int32) uintptr { 18574 var pRe uintptr 18575 var zErr uintptr 18576 var i int32 18577 var j int32 18578 18579 *(*uintptr)(unsafe.Pointer(ppRe)) = uintptr(0) 18580 pRe = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(ReCompiled{}))) 18581 if pRe == uintptr(0) { 18582 return ts + 2069 18583 } 18584 libc.Xmemset(tls, pRe, 0, uint64(unsafe.Sizeof(ReCompiled{}))) 18585 (*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar = func() uintptr { 18586 if noCase != 0 { 18587 return *(*uintptr)(unsafe.Pointer(&struct { 18588 f func(*libc.TLS, uintptr) uint32 18589 }{re_next_char_nocase})) 18590 } 18591 return *(*uintptr)(unsafe.Pointer(&struct { 18592 f func(*libc.TLS, uintptr) uint32 18593 }{re_next_char})) 18594 }() 18595 if re_resize(tls, pRe, 30) != 0 { 18596 sqlite3re_free(tls, pRe) 18597 return ts + 2069 18598 } 18599 if int32(*(*int8)(unsafe.Pointer(zIn))) == '^' { 18600 zIn++ 18601 } else { 18602 re_append(tls, pRe, RE_OP_ANYSTAR, 0) 18603 } 18604 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fz = zIn 18605 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi = 0 18606 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx = int32(libc.Xstrlen(tls, zIn)) 18607 zErr = re_subcompile_re(tls, pRe) 18608 if zErr != 0 { 18609 sqlite3re_free(tls, pRe) 18610 return zErr 18611 } 18612 if int32(rePeek(tls, pRe)) == '$' && (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi+1 >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 18613 re_append(tls, pRe, RE_OP_MATCH, RE_EOF) 18614 re_append(tls, pRe, RE_OP_ACCEPT, 0) 18615 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 18616 } else if (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 18617 re_append(tls, pRe, RE_OP_ACCEPT, 0) 18618 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 18619 } else { 18620 sqlite3re_free(tls, pRe) 18621 return ts + 6808 18622 } 18623 18624 if int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp))) == RE_OP_ANYSTAR && !(noCase != 0) { 18625 j = 0 18626 i = 1 18627 for ; j < int32(unsafe.Sizeof([12]uint8{}))-2 && int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(i)))) == RE_OP_MATCH; i++ { 18628 var x uint32 = uint32(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(i)*4))) 18629 if x <= uint32(127) { 18630 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(x) 18631 } else if x <= uint32(0xfff) { 18632 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xc0) | x>>6) 18633 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 18634 } else if x <= uint32(0xffff) { 18635 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xe0) | x>>12) 18636 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x>>6&uint32(0x3f)) 18637 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 18638 } else { 18639 break 18640 } 18641 } 18642 if j > 0 && int32(*(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(j-1)))) == 0 { 18643 j-- 18644 } 18645 (*ReCompiled)(unsafe.Pointer(pRe)).FnInit = j 18646 } 18647 return (*ReCompiled)(unsafe.Pointer(pRe)).FzErr 18648 } 18649 18650 func re_sql_func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 18651 bp := tls.Alloc(8) 18652 defer tls.Free(8) 18653 18654 var zPattern uintptr 18655 var zStr uintptr 18656 var zErr uintptr 18657 var setAux int32 = 0 18658 18659 _ = argc 18660 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_get_auxdata(tls, context, 0) 18661 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 18662 zPattern = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 18663 if zPattern == uintptr(0) { 18664 return 18665 } 18666 zErr = sqlite3re_compile(tls, bp, zPattern, libc.Bool32(sqlite3.Xsqlite3_user_data(tls, context) != uintptr(0))) 18667 if zErr != 0 { 18668 sqlite3re_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 18669 sqlite3.Xsqlite3_result_error(tls, context, zErr, -1) 18670 return 18671 } 18672 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 18673 sqlite3.Xsqlite3_result_error_nomem(tls, context) 18674 return 18675 } 18676 setAux = 1 18677 } 18678 zStr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 18679 if zStr != uintptr(0) { 18680 sqlite3.Xsqlite3_result_int(tls, context, sqlite3re_match(tls, *(*uintptr)(unsafe.Pointer(bp)), zStr, -1)) 18681 } 18682 if setAux != 0 { 18683 sqlite3.Xsqlite3_set_auxdata(tls, context, 0, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3re_free}))) 18684 } 18685 } 18686 18687 func sqlite3_regexp_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18688 var rc int32 = SQLITE_OK 18689 _ = pApi 18690 18691 _ = pzErrMsg 18692 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6831, 2, 18693 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 18694 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 18695 f func(*libc.TLS, uintptr, int32, uintptr) 18696 }{re_sql_func})), uintptr(0), uintptr(0)) 18697 if rc == SQLITE_OK { 18698 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6838, 2, 18699 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 18700 db, *(*uintptr)(unsafe.Pointer(&struct { 18701 f func(*libc.TLS, uintptr, int32, uintptr) 18702 }{re_sql_func})), uintptr(0), uintptr(0)) 18703 } 18704 return rc 18705 } 18706 18707 func rememberFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 18708 var v sqlite3_int64 18709 var ptr uintptr 18710 18711 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 18712 ptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4060) 18713 if ptr != 0 { 18714 *(*sqlite3_int64)(unsafe.Pointer(ptr)) = v 18715 } 18716 sqlite3.Xsqlite3_result_int64(tls, pCtx, v) 18717 } 18718 18719 func sqlite3_remember_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18720 var rc int32 = SQLITE_OK 18721 _ = pApi 18722 18723 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6846, 2, SQLITE_UTF8, uintptr(0), 18724 *(*uintptr)(unsafe.Pointer(&struct { 18725 f func(*libc.TLS, uintptr, int32, uintptr) 18726 }{rememberFunc})), uintptr(0), uintptr(0)) 18727 return rc 18728 } 18729 18730 type series_cursor1 = struct { 18731 Fbase sqlite3_vtab_cursor 18732 FisDesc int32 18733 F__ccgo_pad1 [4]byte 18734 FiRowid sqlite3_int64 18735 FiValue sqlite3_int64 18736 FmnValue sqlite3_int64 18737 FmxValue sqlite3_int64 18738 FiStep sqlite3_int64 18739 } 18740 18741 type series_cursor = series_cursor1 18742 18743 func seriesConnect(tls *libc.TLS, db uintptr, pUnused uintptr, argcUnused int32, argvUnused uintptr, ppVtab uintptr, pzErrUnused uintptr) int32 { 18744 var pNew uintptr 18745 var rc int32 18746 18747 _ = pUnused 18748 _ = argcUnused 18749 _ = argvUnused 18750 _ = pzErrUnused 18751 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 18752 ts+6855) 18753 if rc == SQLITE_OK { 18754 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 18755 if pNew == uintptr(0) { 18756 return SQLITE_NOMEM 18757 } 18758 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 18759 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 18760 } 18761 return rc 18762 } 18763 18764 func seriesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 18765 sqlite3.Xsqlite3_free(tls, pVtab) 18766 return SQLITE_OK 18767 } 18768 18769 func seriesOpen(tls *libc.TLS, pUnused uintptr, ppCursor uintptr) int32 { 18770 var pCur uintptr 18771 _ = pUnused 18772 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(series_cursor{}))) 18773 if pCur == uintptr(0) { 18774 return SQLITE_NOMEM 18775 } 18776 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(series_cursor{}))) 18777 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 18778 return SQLITE_OK 18779 } 18780 18781 func seriesClose(tls *libc.TLS, cur uintptr) int32 { 18782 sqlite3.Xsqlite3_free(tls, cur) 18783 return SQLITE_OK 18784 } 18785 18786 func seriesNext(tls *libc.TLS, cur uintptr) int32 { 18787 var pCur uintptr = cur 18788 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 18789 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= (*series_cursor)(unsafe.Pointer(pCur)).FiStep 18790 } else { 18791 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) += (*series_cursor)(unsafe.Pointer(pCur)).FiStep 18792 } 18793 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid++ 18794 return SQLITE_OK 18795 } 18796 18797 func seriesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 18798 var pCur uintptr = cur 18799 var x sqlite3_int64 = int64(0) 18800 switch i { 18801 case SERIES_COLUMN_START: 18802 x = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 18803 break 18804 case SERIES_COLUMN_STOP: 18805 x = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 18806 break 18807 case SERIES_COLUMN_STEP: 18808 x = (*series_cursor)(unsafe.Pointer(pCur)).FiStep 18809 break 18810 default: 18811 x = (*series_cursor)(unsafe.Pointer(pCur)).FiValue 18812 break 18813 } 18814 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 18815 return SQLITE_OK 18816 } 18817 18818 func seriesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18819 var pCur uintptr = cur 18820 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*series_cursor)(unsafe.Pointer(pCur)).FiRowid 18821 return SQLITE_OK 18822 } 18823 18824 func seriesEof(tls *libc.TLS, cur uintptr) int32 { 18825 var pCur uintptr = cur 18826 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 18827 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue < (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) 18828 } else { 18829 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue > (*series_cursor)(unsafe.Pointer(pCur)).FmxValue) 18830 } 18831 return int32(0) 18832 } 18833 18834 func seriesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStrUnused uintptr, argc int32, argv uintptr) int32 { 18835 var pCur uintptr = pVtabCursor 18836 var i int32 = 0 18837 _ = idxStrUnused 18838 if idxNum&1 != 0 { 18839 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 18840 } else { 18841 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(0) 18842 } 18843 if idxNum&2 != 0 { 18844 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 18845 } else { 18846 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 18847 } 18848 if idxNum&4 != 0 { 18849 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 18850 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep == int64(0) { 18851 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 18852 } else if (*series_cursor)(unsafe.Pointer(pCur)).FiStep < int64(0) { 18853 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = -(*series_cursor)(unsafe.Pointer(pCur)).FiStep 18854 if idxNum&16 == 0 { 18855 idxNum = idxNum | 8 18856 } 18857 } 18858 } else { 18859 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 18860 } 18861 for i = 0; i < argc; i++ { 18862 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) == SQLITE_NULL { 18863 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(1) 18864 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0) 18865 break 18866 } 18867 } 18868 if idxNum&8 != 0 { 18869 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 1 18870 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 18871 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep > int64(0) { 18872 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= ((*series_cursor)(unsafe.Pointer(pCur)).FmxValue - (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) % (*series_cursor)(unsafe.Pointer(pCur)).FiStep 18873 } 18874 } else { 18875 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 0 18876 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 18877 } 18878 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 18879 return SQLITE_OK 18880 } 18881 18882 func seriesBestIndex(tls *libc.TLS, pVTab uintptr, pIdxInfo uintptr) int32 { 18883 bp := tls.Alloc(12) 18884 defer tls.Free(12) 18885 18886 var i int32 18887 var j int32 18888 var idxNum int32 = 0 18889 var bStartSeen int32 = 0 18890 var unusableMask int32 = 0 18891 var nArg int32 = 0 18892 18893 var pConstraint uintptr 18894 18895 *(*int32)(unsafe.Pointer(bp)) = libc.AssignPtrInt32(bp+1*4, libc.AssignPtrInt32(bp+2*4, -1)) 18896 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 18897 i = 0 18898 __1: 18899 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 18900 goto __3 18901 } 18902 { 18903 var iCol int32 18904 var iMask int32 18905 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < SERIES_COLUMN_START { 18906 goto __2 18907 } 18908 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn - SERIES_COLUMN_START 18909 18910 iMask = int32(1) << iCol 18911 if iCol == 0 { 18912 bStartSeen = 1 18913 } 18914 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 18915 unusableMask = unusableMask | iMask 18916 goto __2 18917 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 18918 idxNum = idxNum | iMask 18919 *(*int32)(unsafe.Pointer(bp + uintptr(iCol)*4)) = i 18920 } 18921 18922 } 18923 goto __2 18924 __2: 18925 i++ 18926 pConstraint += 12 18927 goto __1 18928 goto __3 18929 __3: 18930 ; 18931 for i = 0; i < 3; i++ { 18932 if libc.AssignInt32(&j, *(*int32)(unsafe.Pointer(bp + uintptr(i)*4))) >= 0 { 18933 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).FargvIndex = libc.PreIncInt32(&nArg, 1) 18934 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).Fomit = libc.BoolUint8(!(1 != 0)) 18935 } 18936 } 18937 18938 if !(bStartSeen != 0) { 18939 sqlite3.Xsqlite3_free(tls, (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg) 18940 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 18941 ts+6914, 0) 18942 return SQLITE_ERROR 18943 } 18944 if unusableMask & ^idxNum != 0 { 18945 return SQLITE_CONSTRAINT 18946 } 18947 if idxNum&3 == 3 { 18948 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2 - libc.Bool32(idxNum&4 != 0)) 18949 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000) 18950 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy >= 1 && (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 0 { 18951 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 18952 idxNum = idxNum | 8 18953 } else { 18954 idxNum = idxNum | 16 18955 } 18956 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 18957 } 18958 } else { 18959 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 18960 } 18961 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 18962 return SQLITE_OK 18963 } 18964 18965 var seriesModule = sqlite3_module{ 18966 FxConnect: 0, 18967 FxBestIndex: 0, 18968 FxDisconnect: 0, 18969 FxOpen: 0, 18970 FxClose: 0, 18971 FxFilter: 0, 18972 FxNext: 0, 18973 FxEof: 0, 18974 FxColumn: 0, 18975 FxRowid: 0, 18976 } 18977 18978 func sqlite3_series_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18979 var rc int32 = SQLITE_OK 18980 _ = pApi 18981 18982 if sqlite3.Xsqlite3_libversion_number(tls) < 3008012 && pzErrMsg != uintptr(0) { 18983 *(*uintptr)(unsafe.Pointer(pzErrMsg)) = sqlite3.Xsqlite3_mprintf(tls, 18984 ts+6972, 0) 18985 return SQLITE_ERROR 18986 } 18987 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+7022, uintptr(unsafe.Pointer(&seriesModule)), uintptr(0)) 18988 return rc 18989 } 18990 18991 type u16 = uint16 18992 18993 var midClass = [128]uint8{ 18994 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 18995 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 18996 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 18997 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 18998 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 18999 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19000 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19001 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19002 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19003 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19004 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19005 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19006 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19007 uint8(CCLASS_SILENT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19008 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19009 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19010 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19011 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19012 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19013 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19014 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19015 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19016 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19017 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19018 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19019 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19020 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19021 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19022 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19023 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_VOWEL), 19024 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19025 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19026 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19027 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19028 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19029 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19030 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19031 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19032 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19033 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19034 uint8(CCLASS_C), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19035 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19036 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19037 } 19038 19039 var initClass = [128]uint8{ 19040 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19041 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19042 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19043 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19044 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 19045 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19046 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19047 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19048 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19049 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19050 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19051 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19052 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19053 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19054 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19055 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19056 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19057 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19058 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19059 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19060 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19061 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19062 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19063 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19064 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19065 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19066 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19067 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19068 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19069 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_Y), 19070 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19071 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19072 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19073 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19074 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19075 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19076 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19077 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19078 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19079 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19080 uint8(CCLASS_C), uint8(CCLASS_Y), uint8(CCLASS_C), 19081 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19082 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19083 } 19084 19085 var className = *(*[14]uint8)(unsafe.Pointer(ts + 7038)) 19086 19087 func phoneticHash(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 19088 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+1)) 19089 var i int32 19090 var nOut int32 = 0 19091 var cPrev int8 = int8(0x77) 19092 var cPrevX int8 = int8(0x77) 19093 var aClass uintptr = uintptr(unsafe.Pointer(&initClass)) 19094 19095 if zOut == uintptr(0) { 19096 return uintptr(0) 19097 } 19098 if nIn > 2 { 19099 switch int32(*(*uint8)(unsafe.Pointer(zIn))) { 19100 case 'g': 19101 fallthrough 19102 case 'k': 19103 { 19104 if int32(*(*uint8)(unsafe.Pointer(zIn + 1))) == 'n' { 19105 zIn++ 19106 nIn-- 19107 } 19108 break 19109 19110 } 19111 } 19112 } 19113 for i = 0; i < nIn; i++ { 19114 var c uint8 = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 19115 if i+1 < nIn { 19116 if int32(c) == 'w' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'r' { 19117 continue 19118 } 19119 if int32(c) == 'd' && (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'j' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'g') { 19120 continue 19121 } 19122 if i+2 < nIn { 19123 if int32(c) == 't' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'c' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+2)))) == 'h' { 19124 continue 19125 } 19126 } 19127 } 19128 c = *(*uint8)(unsafe.Pointer(aClass + uintptr(int32(c)&0x7f))) 19129 if int32(c) == CCLASS_SPACE { 19130 continue 19131 } 19132 if int32(c) == CCLASS_OTHER && int32(cPrev) != CCLASS_DIGIT { 19133 continue 19134 } 19135 aClass = uintptr(unsafe.Pointer(&midClass)) 19136 if int32(c) == CCLASS_VOWEL && (int32(cPrevX) == CCLASS_R || int32(cPrevX) == CCLASS_L) { 19137 continue 19138 } 19139 if (int32(c) == CCLASS_R || int32(c) == CCLASS_L) && int32(cPrevX) == CCLASS_VOWEL { 19140 nOut-- 19141 } 19142 cPrev = int8(c) 19143 if int32(c) == CCLASS_SILENT { 19144 continue 19145 } 19146 cPrevX = int8(c) 19147 c = className[c] 19148 19149 if nOut == 0 || int32(c) != int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(nOut-1)))) { 19150 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = c 19151 } 19152 } 19153 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 19154 return zOut 19155 } 19156 19157 func phoneticHashSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19158 var zIn uintptr 19159 var zOut uintptr 19160 19161 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19162 if zIn == uintptr(0) { 19163 return 19164 } 19165 zOut = phoneticHash(tls, zIn, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 19166 if zOut == uintptr(0) { 19167 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19168 } else { 19169 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 19170 } 19171 } 19172 19173 func characterClass(tls *libc.TLS, cPrev int8, c int8) int8 { 19174 if int32(cPrev) == 0 { 19175 return int8(initClass[int32(c)&0x7f]) 19176 } 19177 return int8(midClass[int32(c)&0x7f]) 19178 } 19179 19180 func insertOrDeleteCost(tls *libc.TLS, cPrev int8, c int8, cNext int8) int32 { 19181 var classC int8 = characterClass(tls, cPrev, c) 19182 var classCprev int8 19183 19184 if int32(classC) == CCLASS_SILENT { 19185 return 1 19186 } 19187 if int32(cPrev) == int32(c) { 19188 return 10 19189 } 19190 if int32(classC) == CCLASS_VOWEL && (int32(cPrev) == 'r' || int32(cNext) == 'r') { 19191 return 20 19192 } 19193 classCprev = characterClass(tls, cPrev, cPrev) 19194 if int32(classC) == int32(classCprev) { 19195 if int32(classC) == CCLASS_VOWEL { 19196 return 15 19197 } else { 19198 return 50 19199 } 19200 } 19201 19202 return 100 19203 } 19204 19205 func substituteCost(tls *libc.TLS, cPrev int8, cFrom int8, cTo int8) int32 { 19206 var classFrom int8 19207 var classTo int8 19208 if int32(cFrom) == int32(cTo) { 19209 return 0 19210 } 19211 if int32(cFrom) == int32(cTo)^0x20 && (int32(cTo) >= 'A' && int32(cTo) <= 'Z' || int32(cTo) >= 'a' && int32(cTo) <= 'z') { 19212 return 0 19213 } 19214 classFrom = characterClass(tls, cPrev, cFrom) 19215 classTo = characterClass(tls, cPrev, cTo) 19216 if int32(classFrom) == int32(classTo) { 19217 return 40 19218 } 19219 if int32(classFrom) >= CCLASS_B && int32(classFrom) <= CCLASS_Y && 19220 int32(classTo) >= CCLASS_B && int32(classTo) <= CCLASS_Y { 19221 return 75 19222 } 19223 19224 return 100 19225 } 19226 19227 func editdist1(tls *libc.TLS, zA uintptr, zB uintptr, pnMatch uintptr) int32 { 19228 bp := tls.Alloc(300) 19229 defer tls.Free(300) 19230 19231 var nA int32 19232 var nB int32 19233 var xA int32 19234 var xB int32 19235 var cA int8 = int8(0) 19236 var cB int8 19237 var cAprev int8 19238 var cBprev int8 19239 var cAnext int8 19240 var cBnext int8 19241 var d int32 19242 var dc int32 = 0 19243 var res int32 19244 var m uintptr 19245 var cx uintptr 19246 var toFree uintptr = uintptr(0) 19247 var nMatch int32 = 0 19248 19249 if zA == uintptr(0) || zB == uintptr(0) { 19250 return -1 19251 } 19252 19253 for *(*int8)(unsafe.Pointer(zA)) != 0 && int32(*(*int8)(unsafe.Pointer(zA))) == int32(*(*int8)(unsafe.Pointer(zB))) { 19254 dc = int32(*(*int8)(unsafe.Pointer(zA))) 19255 zA++ 19256 zB++ 19257 nMatch++ 19258 } 19259 if pnMatch != 0 { 19260 *(*int32)(unsafe.Pointer(pnMatch)) = nMatch 19261 } 19262 if int32(*(*int8)(unsafe.Pointer(zA))) == 0 && int32(*(*int8)(unsafe.Pointer(zB))) == 0 { 19263 return 0 19264 } 19265 19266 for nA = 0; *(*int8)(unsafe.Pointer(zA + uintptr(nA))) != 0; nA++ { 19267 if int32(*(*int8)(unsafe.Pointer(zA + uintptr(nA))))&0x80 != 0 { 19268 return -2 19269 } 19270 } 19271 for nB = 0; *(*int8)(unsafe.Pointer(zB + uintptr(nB))) != 0; nB++ { 19272 if int32(*(*int8)(unsafe.Pointer(zB + uintptr(nB))))&0x80 != 0 { 19273 return -2 19274 } 19275 } 19276 19277 if nA == 0 { 19278 cBprev = int8(dc) 19279 for xB = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB))))) != 0; xB++ { 19280 res = res + insertOrDeleteCost(tls, cBprev, cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB+1))))/FINAL_INS_COST_DIV 19281 cBprev = cB 19282 } 19283 return res 19284 } 19285 if nB == 0 { 19286 cAprev = int8(dc) 19287 for xA = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA))))) != 0; xA++ { 19288 res = res + insertOrDeleteCost(tls, cAprev, cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA+1)))) 19289 cAprev = cA 19290 } 19291 return res 19292 } 19293 19294 if int32(*(*int8)(unsafe.Pointer(zA))) == '*' && int32(*(*int8)(unsafe.Pointer(zA + 1))) == 0 { 19295 return 0 19296 } 19297 19298 if uint64(nB) < uint64(unsafe.Sizeof([75]int32{}))*uint64(4)/(uint64(unsafe.Sizeof(int32(0)))*uint64(5)) { 19299 m = bp 19300 } else { 19301 m = libc.AssignUintptr(&toFree, sqlite3.Xsqlite3_malloc64(tls, uint64((nB+1)*5)*uint64(unsafe.Sizeof(int32(0)))/uint64(4))) 19302 if m == uintptr(0) { 19303 return -3 19304 } 19305 } 19306 cx = m + uintptr(nB+1)*4 19307 19308 *(*int32)(unsafe.Pointer(m)) = 0 19309 *(*int8)(unsafe.Pointer(cx)) = int8(dc) 19310 cBprev = int8(dc) 19311 for xB = 1; xB <= nB; xB++ { 19312 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 19313 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 19314 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = cB 19315 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) + insertOrDeleteCost(tls, cBprev, cB, cBnext) 19316 cBprev = cB 19317 } 19318 cAprev = int8(dc) 19319 for xA = 1; xA <= nA; xA++ { 19320 var lastA int32 = libc.Bool32(xA == nA) 19321 cA = *(*int8)(unsafe.Pointer(zA + uintptr(xA-1))) 19322 cAnext = *(*int8)(unsafe.Pointer(zA + uintptr(xA))) 19323 if int32(cA) == '*' && lastA != 0 { 19324 break 19325 } 19326 d = *(*int32)(unsafe.Pointer(m)) 19327 dc = int32(*(*int8)(unsafe.Pointer(cx))) 19328 *(*int32)(unsafe.Pointer(m)) = d + insertOrDeleteCost(tls, cAprev, cA, cAnext) 19329 cBprev = int8(0) 19330 for xB = 1; xB <= nB; xB++ { 19331 var totalCost int32 19332 var insCost int32 19333 var delCost int32 19334 var subCost int32 19335 var ncx int32 19336 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 19337 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 19338 19339 insCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cB, cBnext) 19340 if lastA != 0 { 19341 insCost = insCost / FINAL_INS_COST_DIV 19342 } 19343 19344 delCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB))), cA, cBnext) 19345 19346 subCost = substituteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cA, cB) 19347 19348 totalCost = insCost + *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) 19349 ncx = int32(cB) 19350 if delCost+*(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < totalCost { 19351 totalCost = delCost + *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19352 ncx = int32(cA) 19353 } 19354 if subCost+d < totalCost { 19355 totalCost = subCost + d 19356 } 19357 19358 d = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19359 dc = int32(*(*int8)(unsafe.Pointer(cx + uintptr(xB)))) 19360 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = totalCost 19361 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = int8(ncx) 19362 cBprev = cB 19363 } 19364 cAprev = cA 19365 } 19366 19367 if int32(cA) == '*' { 19368 res = *(*int32)(unsafe.Pointer(m + 1*4)) 19369 for xB = 1; xB <= nB; xB++ { 19370 if *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < res { 19371 res = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19372 if pnMatch != 0 { 19373 *(*int32)(unsafe.Pointer(pnMatch)) = xB + nMatch 19374 } 19375 } 19376 } 19377 } else { 19378 res = *(*int32)(unsafe.Pointer(m + uintptr(nB)*4)) 19379 19380 } 19381 sqlite3.Xsqlite3_free(tls, toFree) 19382 return res 19383 } 19384 19385 func editdistSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19386 var res int32 = editdist1(tls, 19387 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 19388 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), 19389 uintptr(0)) 19390 if res < 0 { 19391 if res == -3 { 19392 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19393 } else if res == -2 { 19394 sqlite3.Xsqlite3_result_error(tls, context, ts+7052, -1) 19395 } else { 19396 sqlite3.Xsqlite3_result_error(tls, context, ts+7082, -1) 19397 } 19398 } else { 19399 sqlite3.Xsqlite3_result_int(tls, context, res) 19400 } 19401 } 19402 19403 type EditDist3Cost1 = struct { 19404 FpNext uintptr 19405 FnFrom u8 19406 FnTo u8 19407 FiCost u16 19408 Fa [4]int8 19409 } 19410 19411 type EditDist3Cost = EditDist3Cost1 19412 type EditDist3Config1 = struct { 19413 FnLang int32 19414 F__ccgo_pad1 [4]byte 19415 Fa uintptr 19416 } 19417 19418 type EditDist3Config = EditDist3Config1 19419 type EditDist3From1 = struct { 19420 FnSubst int32 19421 FnDel int32 19422 FnByte int32 19423 F__ccgo_pad1 [4]byte 19424 FapSubst uintptr 19425 FapDel uintptr 19426 } 19427 19428 type EditDist3From = EditDist3From1 19429 type EditDist3FromString1 = struct { 19430 Fz uintptr 19431 Fn int32 19432 FisPrefix int32 19433 Fa uintptr 19434 } 19435 19436 type EditDist3FromString = EditDist3FromString1 19437 type EditDist3To1 = struct { 19438 FnIns int32 19439 FnByte int32 19440 FapIns uintptr 19441 } 19442 19443 type EditDist3To = EditDist3To1 19444 type EditDist3ToString1 = struct { 19445 Fz uintptr 19446 Fn int32 19447 F__ccgo_pad1 [4]byte 19448 Fa uintptr 19449 } 19450 19451 type EditDist3ToString = EditDist3ToString1 19452 type EditDist3Lang1 = struct { 19453 FiLang int32 19454 FiInsCost int32 19455 FiDelCost int32 19456 FiSubCost int32 19457 FpCost uintptr 19458 } 19459 19460 type EditDist3Lang = EditDist3Lang1 19461 19462 var editDist3Lang = EditDist3Lang{FiInsCost: 100, FiDelCost: 100, FiSubCost: 150} 19463 19464 func editDist3ConfigClear(tls *libc.TLS, p uintptr) { 19465 var i int32 19466 if p == uintptr(0) { 19467 return 19468 } 19469 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; i++ { 19470 var pCost uintptr 19471 var pNext uintptr 19472 pCost = (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(i)*24)).FpCost 19473 for pCost != 0 { 19474 pNext = (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext 19475 sqlite3.Xsqlite3_free(tls, pCost) 19476 pCost = pNext 19477 } 19478 } 19479 sqlite3.Xsqlite3_free(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa) 19480 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 19481 } 19482 19483 func editDist3ConfigDelete(tls *libc.TLS, pIn uintptr) { 19484 var p uintptr = pIn 19485 editDist3ConfigClear(tls, p) 19486 sqlite3.Xsqlite3_free(tls, p) 19487 } 19488 19489 func editDist3CostCompare(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 19490 var n int32 = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) 19491 var rc int32 19492 if n > int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) { 19493 n = int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 19494 } 19495 rc = libc.Xstrncmp(tls, pA+12, pB+12, uint64(n)) 19496 if rc == 0 { 19497 rc = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) - int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 19498 } 19499 return rc 19500 } 19501 19502 func editDist3CostMerge(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 19503 bp := tls.Alloc(8) 19504 defer tls.Free(8) 19505 19506 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 19507 var ppTail uintptr = bp 19508 var p uintptr 19509 for pA != 0 && pB != 0 { 19510 if editDist3CostCompare(tls, pA, pB) <= 0 { 19511 p = pA 19512 pA = (*EditDist3Cost)(unsafe.Pointer(pA)).FpNext 19513 } else { 19514 p = pB 19515 pB = (*EditDist3Cost)(unsafe.Pointer(pB)).FpNext 19516 } 19517 *(*uintptr)(unsafe.Pointer(ppTail)) = p 19518 ppTail = p 19519 } 19520 if pA != 0 { 19521 *(*uintptr)(unsafe.Pointer(ppTail)) = pA 19522 } else { 19523 *(*uintptr)(unsafe.Pointer(ppTail)) = pB 19524 } 19525 return *(*uintptr)(unsafe.Pointer(bp)) 19526 } 19527 19528 func editDist3CostSort(tls *libc.TLS, pList uintptr) uintptr { 19529 bp := tls.Alloc(480) 19530 defer tls.Free(480) 19531 19532 var p uintptr 19533 var i int32 19534 var mx int32 = 0 19535 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 19536 *(*uintptr)(unsafe.Pointer(bp + 1*8)) = uintptr(0) 19537 for pList != 0 { 19538 p = pList 19539 pList = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 19540 (*EditDist3Cost)(unsafe.Pointer(p)).FpNext = uintptr(0) 19541 for i = 0; *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0; i++ { 19542 p = editDist3CostMerge(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)), p) 19543 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = uintptr(0) 19544 } 19545 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = p 19546 if i > mx { 19547 mx = i 19548 *(*uintptr)(unsafe.Pointer(bp + uintptr(i+1)*8)) = uintptr(0) 19549 } 19550 } 19551 p = uintptr(0) 19552 for i = 0; i <= mx; i++ { 19553 if *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0 { 19554 p = editDist3CostMerge(tls, p, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8))) 19555 } 19556 } 19557 return p 19558 } 19559 19560 func editDist3ConfigLoad(tls *libc.TLS, p uintptr, db uintptr, zTable uintptr) int32 { 19561 bp := tls.Alloc(16) 19562 defer tls.Free(16) 19563 19564 var rc int32 19565 var rc2 int32 19566 var zSql uintptr 19567 var iLangPrev int32 = -9999 19568 var pLang uintptr = uintptr(0) 19569 19570 zSql = sqlite3.Xsqlite3_mprintf(tls, 19571 ts+7107, libc.VaList(bp, zTable)) 19572 if zSql == uintptr(0) { 19573 return SQLITE_NOMEM 19574 } 19575 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+8, uintptr(0)) 19576 sqlite3.Xsqlite3_free(tls, zSql) 19577 if rc != 0 { 19578 return rc 19579 } 19580 editDist3ConfigClear(tls, p) 19581 for sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) == SQLITE_ROW { 19582 var iLang int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0) 19583 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 19584 var nFrom int32 19585 if zFrom != 0 { 19586 nFrom = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 19587 } else { 19588 nFrom = 0 19589 } 19590 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 19591 var nTo int32 19592 if zTo != 0 { 19593 nTo = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 19594 } else { 19595 nTo = 0 19596 } 19597 var iCost int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 3) 19598 19599 if nFrom > 100 || nTo > 100 { 19600 continue 19601 } 19602 if iCost < 0 { 19603 continue 19604 } 19605 if iCost >= 10000 { 19606 continue 19607 } 19608 if pLang == uintptr(0) || iLang != iLangPrev { 19609 var pNew uintptr 19610 pNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa, uint64((*EditDist3Config)(unsafe.Pointer(p)).FnLang+1)*uint64(unsafe.Sizeof(EditDist3Lang{}))) 19611 if pNew == uintptr(0) { 19612 rc = SQLITE_NOMEM 19613 break 19614 } 19615 (*EditDist3Config)(unsafe.Pointer(p)).Fa = pNew 19616 pLang = (*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr((*EditDist3Config)(unsafe.Pointer(p)).FnLang)*24 19617 (*EditDist3Config)(unsafe.Pointer(p)).FnLang++ 19618 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiLang = iLang 19619 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = 100 19620 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = 100 19621 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = 150 19622 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = uintptr(0) 19623 iLangPrev = iLang 19624 } 19625 if nFrom == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && nTo == 0 { 19626 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = iCost 19627 } else if nFrom == 0 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 19628 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = iCost 19629 } else if nFrom == 1 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 19630 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = iCost 19631 } else { 19632 var pCost uintptr 19633 var nExtra int32 = nFrom + nTo - 4 19634 if nExtra < 0 { 19635 nExtra = 0 19636 } 19637 pCost = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Cost{}))+uint64(nExtra)) 19638 if pCost == uintptr(0) { 19639 rc = SQLITE_NOMEM 19640 break 19641 } 19642 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnFrom = u8(nFrom) 19643 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnTo = u8(nTo) 19644 (*EditDist3Cost)(unsafe.Pointer(pCost)).FiCost = u16(iCost) 19645 libc.Xmemcpy(tls, pCost+12, zFrom, uint64(nFrom)) 19646 libc.Xmemcpy(tls, pCost+12+uintptr(nFrom), zTo, uint64(nTo)) 19647 (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 19648 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = pCost 19649 } 19650 } 19651 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 19652 if rc == SQLITE_OK { 19653 rc = rc2 19654 } 19655 if rc == SQLITE_OK { 19656 var iLang int32 19657 for iLang = 0; iLang < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; iLang++ { 19658 (*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) 19659 } 19660 } 19661 return rc 19662 } 19663 19664 func utf8Len(tls *libc.TLS, c uint8, N int32) int32 { 19665 var len int32 = 1 19666 if int32(c) > 0x7f { 19667 if int32(c)&0xe0 == 0xc0 { 19668 len = 2 19669 } else if int32(c)&0xf0 == 0xe0 { 19670 len = 3 19671 } else { 19672 len = 4 19673 } 19674 } 19675 if len > N { 19676 len = N 19677 } 19678 return len 19679 } 19680 19681 func matchTo(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 19682 if int32(*(*int8)(unsafe.Pointer(p + 12 + uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)))) != int32(*(*int8)(unsafe.Pointer(z))) { 19683 return 0 19684 } 19685 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n { 19686 return 0 19687 } 19688 if libc.Xstrncmp(tls, p+12+uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)) != 0 { 19689 return 0 19690 } 19691 return 1 19692 } 19693 19694 func matchFrom(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 19695 if (*EditDist3Cost)(unsafe.Pointer(p)).FnFrom != 0 { 19696 if int32(*(*int8)(unsafe.Pointer(p + 12))) != int32(*(*int8)(unsafe.Pointer(z))) { 19697 return 0 19698 } 19699 if libc.Xstrncmp(tls, p+12, z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)) != 0 { 19700 return 0 19701 } 19702 } 19703 return 1 19704 } 19705 19706 func matchFromTo(tls *libc.TLS, pStr uintptr, n1 int32, z2 uintptr, n2 int32) int32 { 19707 var b1 int32 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n1)*32)).FnByte 19708 if b1 > n2 { 19709 return 0 19710 } 19711 19712 if int32(*(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n1)))) != int32(*(*int8)(unsafe.Pointer(z2))) { 19713 return 0 19714 } 19715 if libc.Xstrncmp(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz+uintptr(n1), z2, uint64(b1)) != 0 { 19716 return 0 19717 } 19718 return 1 19719 } 19720 19721 func editDist3FromStringDelete(tls *libc.TLS, p uintptr) { 19722 var i int32 19723 if p != 0 { 19724 for i = 0; i < (*EditDist3FromString)(unsafe.Pointer(p)).Fn; i++ { 19725 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapDel) 19726 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapSubst) 19727 } 19728 sqlite3.Xsqlite3_free(tls, p) 19729 } 19730 } 19731 19732 func editDist3FromStringNew(tls *libc.TLS, pLang uintptr, z uintptr, n int32) uintptr { 19733 var pStr uintptr 19734 var p uintptr 19735 var i int32 19736 19737 if z == uintptr(0) { 19738 return uintptr(0) 19739 } 19740 if n < 0 { 19741 n = int32(libc.Xstrlen(tls, z)) 19742 } 19743 pStr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3FromString{}))+uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)+uint64(n)+uint64(1)) 19744 if pStr == uintptr(0) { 19745 return uintptr(0) 19746 } 19747 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa = pStr + 1*24 19748 libc.Xmemset(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa, 0, uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)) 19749 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn = n 19750 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n)*32 19751 libc.Xmemcpy(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz, z, uint64(n+1)) 19752 if n != 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(n-1)))) == '*' { 19753 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 1 19754 n-- 19755 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn-- 19756 *(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n))) = int8(0) 19757 } else { 19758 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 0 19759 } 19760 19761 for i = 0; i < n; i++ { 19762 var pFrom uintptr = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(i)*32 19763 libc.Xmemset(tls, pFrom, 0, uint64(unsafe.Sizeof(EditDist3From{}))) 19764 (*EditDist3From)(unsafe.Pointer(pFrom)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))), n-i) 19765 for p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost; p != 0; p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext { 19766 var apNew uintptr 19767 if i+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > n { 19768 continue 19769 } 19770 if matchFrom(tls, p, z+uintptr(i), n-i) == 0 { 19771 continue 19772 } 19773 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) == 0 { 19774 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel, 19775 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnDel+1)) 19776 if apNew == uintptr(0) { 19777 break 19778 } 19779 (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel = apNew 19780 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnDel, 1))*8)) = p 19781 } else { 19782 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst, 19783 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst+1)) 19784 if apNew == uintptr(0) { 19785 break 19786 } 19787 (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst = apNew 19788 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst, 1))*8)) = p 19789 } 19790 } 19791 if p != 0 { 19792 editDist3FromStringDelete(tls, pStr) 19793 pStr = uintptr(0) 19794 break 19795 } 19796 } 19797 return pStr 19798 } 19799 19800 func updateCost(tls *libc.TLS, m uintptr, i int32, j int32, iCost int32) { 19801 var b uint32 19802 19803 b = *(*uint32)(unsafe.Pointer(m + uintptr(j)*4)) + uint32(iCost) 19804 if b < *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) { 19805 *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) = b 19806 } 19807 } 19808 19809 func editDist3Core(tls *libc.TLS, pFrom uintptr, z2 uintptr, n2 int32, pLang uintptr, pnMatch uintptr) int32 { 19810 bp := tls.Alloc(1048) 19811 defer tls.Free(1048) 19812 19813 var k int32 19814 var n int32 19815 var i1 int32 19816 var b1 int32 19817 var i2 int32 19818 var b2 int32 19819 19820 var a2 uintptr 19821 var m uintptr 19822 var pToFree uintptr 19823 var szRow int32 19824 var p uintptr 19825 var res int32 19826 var nByte sqlite3_uint64 19827 19828 var apNew uintptr 19829 var cx int32 19830 var cxp int32 19831 var cxd int32 19832 var cxu int32 19833 var rx int32 19834 var rxp int32 19835 var b int32 19836 var nExtra int32 19837 *(*EditDist3FromString)(unsafe.Pointer(bp + 1024)) = *(*EditDist3FromString)(unsafe.Pointer(pFrom)) 19838 19839 n = ((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1) * (n2 + 1) 19840 n = (n + 1) & libc.CplInt32(1) 19841 nByte = uint64(n)*uint64(unsafe.Sizeof(uint32(0))) + uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2) 19842 if !(nByte <= sqlite3_uint64(unsafe.Sizeof([256]uint32{}))) { 19843 goto __1 19844 } 19845 m = bp 19846 pToFree = uintptr(0) 19847 goto __2 19848 __1: 19849 m = libc.AssignUintptr(&pToFree, sqlite3.Xsqlite3_malloc64(tls, nByte)) 19850 if !(m == uintptr(0)) { 19851 goto __3 19852 } 19853 return -1 19854 __3: 19855 ; 19856 __2: 19857 ; 19858 a2 = m + uintptr(n)*4 19859 libc.Xmemset(tls, a2, 0, uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2)) 19860 19861 i2 = 0 19862 __4: 19863 if !(i2 < n2) { 19864 goto __6 19865 } 19866 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z2 + uintptr(i2)))), n2-i2) 19867 p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 19868 __7: 19869 if !(p != 0) { 19870 goto __9 19871 } 19872 if !(int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > 0) { 19873 goto __10 19874 } 19875 goto __9 19876 __10: 19877 ; 19878 if !(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n2) { 19879 goto __11 19880 } 19881 goto __8 19882 __11: 19883 ; 19884 if !(int32(*(*int8)(unsafe.Pointer(p + 12))) > int32(*(*int8)(unsafe.Pointer(z2 + uintptr(i2))))) { 19885 goto __12 19886 } 19887 goto __9 19888 __12: 19889 ; 19890 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) == 0) { 19891 goto __13 19892 } 19893 goto __8 19894 __13: 19895 ; 19896 (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns++ 19897 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)) 19898 if !(apNew == uintptr(0)) { 19899 goto __14 19900 } 19901 res = -1 19902 goto editDist3Abort 19903 __14: 19904 ; 19905 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FapIns = apNew 19906 *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns-1)*8)) = p 19907 goto __8 19908 __8: 19909 p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 19910 goto __7 19911 goto __9 19912 __9: 19913 ; 19914 goto __5 19915 __5: 19916 i2++ 19917 goto __4 19918 goto __6 19919 __6: 19920 ; 19921 szRow = (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1 19922 libc.Xmemset(tls, m, 0x01, uint64((n2+1)*szRow)*uint64(unsafe.Sizeof(uint32(0)))) 19923 *(*uint32)(unsafe.Pointer(m)) = uint32(0) 19924 19925 i1 = 0 19926 __15: 19927 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 19928 goto __17 19929 } 19930 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 19931 updateCost(tls, m, i1+b1, i1, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 19932 k = 0 19933 __18: 19934 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 19935 goto __20 19936 } 19937 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 19938 updateCost(tls, m, i1+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), i1, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 19939 goto __19 19940 __19: 19941 k++ 19942 goto __18 19943 goto __20 19944 __20: 19945 ; 19946 goto __16 19947 __16: 19948 i1 = i1 + b1 19949 goto __15 19950 goto __17 19951 __17: 19952 ; 19953 i2 = 0 19954 __21: 19955 if !(i2 < n2) { 19956 goto __23 19957 } 19958 b2 = (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte 19959 rx = szRow * (i2 + b2) 19960 rxp = szRow * i2 19961 updateCost(tls, m, rx, rxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 19962 k = 0 19963 __24: 19964 if !(k < (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns) { 19965 goto __26 19966 } 19967 p = *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr(k)*8)) 19968 updateCost(tls, m, szRow*(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)), rxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 19969 goto __25 19970 __25: 19971 k++ 19972 goto __24 19973 goto __26 19974 __26: 19975 ; 19976 i1 = 0 19977 __27: 19978 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 19979 goto __29 19980 } 19981 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 19982 cxp = rx + i1 19983 cx = cxp + b1 19984 cxd = rxp + i1 19985 cxu = cxd + b1 19986 updateCost(tls, m, cx, cxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 19987 k = 0 19988 __30: 19989 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 19990 goto __32 19991 } 19992 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 19993 updateCost(tls, m, cxp+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), cxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 19994 goto __31 19995 __31: 19996 k++ 19997 goto __30 19998 goto __32 19999 __32: 20000 ; 20001 updateCost(tls, m, cx, cxu, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20002 if !(matchFromTo(tls, bp+1024, i1, z2+uintptr(i2), n2-i2) != 0) { 20003 goto __33 20004 } 20005 updateCost(tls, m, cx, cxd, 0) 20006 __33: 20007 ; 20008 updateCost(tls, m, cx, cxd, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost) 20009 k = 0 20010 __34: 20011 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnSubst) { 20012 goto __36 20013 } 20014 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapSubst + uintptr(k)*8)) 20015 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) != 0) { 20016 goto __37 20017 } 20018 updateCost(tls, m, cxd+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)+szRow*int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo), cxd, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20019 __37: 20020 ; 20021 goto __35 20022 __35: 20023 k++ 20024 goto __34 20025 goto __36 20026 __36: 20027 ; 20028 goto __28 20029 __28: 20030 i1 = i1 + b1 20031 goto __27 20032 goto __29 20033 __29: 20034 ; 20035 goto __22 20036 __22: 20037 i2 = i2 + b2 20038 goto __21 20039 goto __23 20040 __23: 20041 ; 20042 res = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*(n2+1)-1)*4))) 20043 n = n2 20044 if !((*EditDist3FromString)(unsafe.Pointer(bp+1024)).FisPrefix != 0) { 20045 goto __38 20046 } 20047 i2 = 1 20048 __39: 20049 if !(i2 <= n2) { 20050 goto __41 20051 } 20052 b = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*i2-1)*4))) 20053 if !(b <= res) { 20054 goto __42 20055 } 20056 res = b 20057 n = i2 - 1 20058 __42: 20059 ; 20060 goto __40 20061 __40: 20062 i2++ 20063 goto __39 20064 goto __41 20065 __41: 20066 ; 20067 __38: 20068 ; 20069 if !(pnMatch != 0) { 20070 goto __43 20071 } 20072 nExtra = 0 20073 k = 0 20074 __44: 20075 if !(k < n) { 20076 goto __46 20077 } 20078 if !(int32(*(*int8)(unsafe.Pointer(z2 + uintptr(k))))&0xc0 == 0x80) { 20079 goto __47 20080 } 20081 nExtra++ 20082 __47: 20083 ; 20084 goto __45 20085 __45: 20086 k++ 20087 goto __44 20088 goto __46 20089 __46: 20090 ; 20091 *(*int32)(unsafe.Pointer(pnMatch)) = n - nExtra 20092 __43: 20093 ; 20094 editDist3Abort: 20095 i2 = 0 20096 __48: 20097 if !(i2 < n2) { 20098 goto __50 20099 } 20100 sqlite3.Xsqlite3_free(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns) 20101 goto __49 20102 __49: 20103 i2++ 20104 goto __48 20105 goto __50 20106 __50: 20107 ; 20108 sqlite3.Xsqlite3_free(tls, pToFree) 20109 return res 20110 } 20111 20112 func editDist3FindLang(tls *libc.TLS, pConfig uintptr, iLang int32) uintptr { 20113 var i int32 20114 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(pConfig)).FnLang; i++ { 20115 if (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(pConfig)).Fa+uintptr(i)*24)).FiLang == iLang { 20116 return (*EditDist3Config)(unsafe.Pointer(pConfig)).Fa + uintptr(i)*24 20117 } 20118 } 20119 return uintptr(unsafe.Pointer(&editDist3Lang)) 20120 } 20121 20122 func editDist3SqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20123 var pConfig uintptr = sqlite3.Xsqlite3_user_data(tls, context) 20124 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 20125 var rc int32 20126 if argc == 1 { 20127 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20128 rc = editDist3ConfigLoad(tls, pConfig, db, zTable) 20129 if rc != 0 { 20130 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 20131 } 20132 } else { 20133 var zA uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20134 var zB uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20135 var nA int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20136 var nB int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20137 var iLang int32 20138 if argc == 3 { 20139 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 20140 } else { 20141 iLang = 0 20142 } 20143 var pLang uintptr = editDist3FindLang(tls, pConfig, iLang) 20144 var pFrom uintptr 20145 var dist int32 20146 20147 pFrom = editDist3FromStringNew(tls, pLang, zA, nA) 20148 if pFrom == uintptr(0) { 20149 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20150 return 20151 } 20152 dist = editDist3Core(tls, pFrom, zB, nB, pLang, uintptr(0)) 20153 editDist3FromStringDelete(tls, pFrom) 20154 if dist == -1 { 20155 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20156 } else { 20157 sqlite3.Xsqlite3_result_int(tls, context, dist) 20158 } 20159 } 20160 } 20161 20162 func editDist3Install(tls *libc.TLS, db uintptr) int32 { 20163 var rc int32 20164 var pConfig uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 20165 if pConfig == uintptr(0) { 20166 return SQLITE_NOMEM 20167 } 20168 libc.Xmemset(tls, pConfig, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 20169 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20170 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20171 *(*uintptr)(unsafe.Pointer(&struct { 20172 f func(*libc.TLS, uintptr, int32, uintptr) 20173 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20174 if rc == SQLITE_OK { 20175 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20176 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20177 *(*uintptr)(unsafe.Pointer(&struct { 20178 f func(*libc.TLS, uintptr, int32, uintptr) 20179 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20180 } 20181 if rc == SQLITE_OK { 20182 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20183 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20184 *(*uintptr)(unsafe.Pointer(&struct { 20185 f func(*libc.TLS, uintptr, int32, uintptr) 20186 }{editDist3SqlFunc})), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{editDist3ConfigDelete}))) 20187 } else { 20188 sqlite3.Xsqlite3_free(tls, pConfig) 20189 } 20190 return rc 20191 } 20192 20193 var sqlite3Utf8Trans1 = [64]uint8{ 20194 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20195 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20196 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 20197 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 20198 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20199 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20200 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20201 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 20202 } 20203 20204 func utf8Read(tls *libc.TLS, z uintptr, n int32, pSize uintptr) int32 { 20205 var c int32 20206 var i int32 20207 20208 if 0 != 0 { 20209 c = libc.AssignInt32(&i, 0) 20210 } else { 20211 c = int32(*(*uint8)(unsafe.Pointer(z))) 20212 i = 1 20213 if c >= 0xc0 { 20214 c = int32(sqlite3Utf8Trans1[c-0xc0]) 20215 for i < n && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))&0xc0 == 0x80 { 20216 c = c<<6 + 0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1))))) 20217 } 20218 } 20219 } 20220 *(*int32)(unsafe.Pointer(pSize)) = i 20221 return c 20222 } 20223 20224 func utf8Charlen(tls *libc.TLS, zIn uintptr, nIn int32) int32 { 20225 bp := tls.Alloc(4) 20226 defer tls.Free(4) 20227 20228 var i int32 20229 var nChar int32 = 0 20230 for i = 0; i < nIn; nChar++ { 20231 utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 20232 i = i + *(*int32)(unsafe.Pointer(bp)) 20233 } 20234 return nChar 20235 } 20236 20237 type Transliteration1 = struct { 20238 FcFrom uint16 20239 FcTo0 uint8 20240 FcTo1 uint8 20241 FcTo2 uint8 20242 FcTo3 uint8 20243 } 20244 20245 type Transliteration = Transliteration1 20246 20247 var translit = [389]Transliteration{ 20248 {FcFrom: uint16(0x00A0), FcTo0: uint8(0x20)}, 20249 {FcFrom: uint16(0x00B5), FcTo0: uint8(0x75)}, 20250 {FcFrom: uint16(0x00C0), FcTo0: uint8(0x41)}, 20251 {FcFrom: uint16(0x00C1), FcTo0: uint8(0x41)}, 20252 {FcFrom: uint16(0x00C2), FcTo0: uint8(0x41)}, 20253 {FcFrom: uint16(0x00C3), FcTo0: uint8(0x41)}, 20254 {FcFrom: uint16(0x00C4), FcTo0: uint8(0x41), FcTo1: uint8(0x65)}, 20255 {FcFrom: uint16(0x00C5), FcTo0: uint8(0x41), FcTo1: uint8(0x61)}, 20256 {FcFrom: uint16(0x00C6), FcTo0: uint8(0x41), FcTo1: uint8(0x45)}, 20257 {FcFrom: uint16(0x00C7), FcTo0: uint8(0x43)}, 20258 {FcFrom: uint16(0x00C8), FcTo0: uint8(0x45)}, 20259 {FcFrom: uint16(0x00C9), FcTo0: uint8(0x45)}, 20260 {FcFrom: uint16(0x00CA), FcTo0: uint8(0x45)}, 20261 {FcFrom: uint16(0x00CB), FcTo0: uint8(0x45)}, 20262 {FcFrom: uint16(0x00CC), FcTo0: uint8(0x49)}, 20263 {FcFrom: uint16(0x00CD), FcTo0: uint8(0x49)}, 20264 {FcFrom: uint16(0x00CE), FcTo0: uint8(0x49)}, 20265 {FcFrom: uint16(0x00CF), FcTo0: uint8(0x49)}, 20266 {FcFrom: uint16(0x00D0), FcTo0: uint8(0x44)}, 20267 {FcFrom: uint16(0x00D1), FcTo0: uint8(0x4E)}, 20268 {FcFrom: uint16(0x00D2), FcTo0: uint8(0x4F)}, 20269 {FcFrom: uint16(0x00D3), FcTo0: uint8(0x4F)}, 20270 {FcFrom: uint16(0x00D4), FcTo0: uint8(0x4F)}, 20271 {FcFrom: uint16(0x00D5), FcTo0: uint8(0x4F)}, 20272 {FcFrom: uint16(0x00D6), FcTo0: uint8(0x4F), FcTo1: uint8(0x65)}, 20273 {FcFrom: uint16(0x00D7), FcTo0: uint8(0x78)}, 20274 {FcFrom: uint16(0x00D8), FcTo0: uint8(0x4F)}, 20275 {FcFrom: uint16(0x00D9), FcTo0: uint8(0x55)}, 20276 {FcFrom: uint16(0x00DA), FcTo0: uint8(0x55)}, 20277 {FcFrom: uint16(0x00DB), FcTo0: uint8(0x55)}, 20278 {FcFrom: uint16(0x00DC), FcTo0: uint8(0x55), FcTo1: uint8(0x65)}, 20279 {FcFrom: uint16(0x00DD), FcTo0: uint8(0x59)}, 20280 {FcFrom: uint16(0x00DE), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20281 {FcFrom: uint16(0x00DF), FcTo0: uint8(0x73), FcTo1: uint8(0x73)}, 20282 {FcFrom: uint16(0x00E0), FcTo0: uint8(0x61)}, 20283 {FcFrom: uint16(0x00E1), FcTo0: uint8(0x61)}, 20284 {FcFrom: uint16(0x00E2), FcTo0: uint8(0x61)}, 20285 {FcFrom: uint16(0x00E3), FcTo0: uint8(0x61)}, 20286 {FcFrom: uint16(0x00E4), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20287 {FcFrom: uint16(0x00E5), FcTo0: uint8(0x61), FcTo1: uint8(0x61)}, 20288 {FcFrom: uint16(0x00E6), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20289 {FcFrom: uint16(0x00E7), FcTo0: uint8(0x63)}, 20290 {FcFrom: uint16(0x00E8), FcTo0: uint8(0x65)}, 20291 {FcFrom: uint16(0x00E9), FcTo0: uint8(0x65)}, 20292 {FcFrom: uint16(0x00EA), FcTo0: uint8(0x65)}, 20293 {FcFrom: uint16(0x00EB), FcTo0: uint8(0x65)}, 20294 {FcFrom: uint16(0x00EC), FcTo0: uint8(0x69)}, 20295 {FcFrom: uint16(0x00ED), FcTo0: uint8(0x69)}, 20296 {FcFrom: uint16(0x00EE), FcTo0: uint8(0x69)}, 20297 {FcFrom: uint16(0x00EF), FcTo0: uint8(0x69)}, 20298 {FcFrom: uint16(0x00F0), FcTo0: uint8(0x64)}, 20299 {FcFrom: uint16(0x00F1), FcTo0: uint8(0x6E)}, 20300 {FcFrom: uint16(0x00F2), FcTo0: uint8(0x6F)}, 20301 {FcFrom: uint16(0x00F3), FcTo0: uint8(0x6F)}, 20302 {FcFrom: uint16(0x00F4), FcTo0: uint8(0x6F)}, 20303 {FcFrom: uint16(0x00F5), FcTo0: uint8(0x6F)}, 20304 {FcFrom: uint16(0x00F6), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20305 {FcFrom: uint16(0x00F7), FcTo0: uint8(0x3A)}, 20306 {FcFrom: uint16(0x00F8), FcTo0: uint8(0x6F)}, 20307 {FcFrom: uint16(0x00F9), FcTo0: uint8(0x75)}, 20308 {FcFrom: uint16(0x00FA), FcTo0: uint8(0x75)}, 20309 {FcFrom: uint16(0x00FB), FcTo0: uint8(0x75)}, 20310 {FcFrom: uint16(0x00FC), FcTo0: uint8(0x75), FcTo1: uint8(0x65)}, 20311 {FcFrom: uint16(0x00FD), FcTo0: uint8(0x79)}, 20312 {FcFrom: uint16(0x00FE), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 20313 {FcFrom: uint16(0x00FF), FcTo0: uint8(0x79)}, 20314 {FcFrom: uint16(0x0100), FcTo0: uint8(0x41)}, 20315 {FcFrom: uint16(0x0101), FcTo0: uint8(0x61)}, 20316 {FcFrom: uint16(0x0102), FcTo0: uint8(0x41)}, 20317 {FcFrom: uint16(0x0103), FcTo0: uint8(0x61)}, 20318 {FcFrom: uint16(0x0104), FcTo0: uint8(0x41)}, 20319 {FcFrom: uint16(0x0105), FcTo0: uint8(0x61)}, 20320 {FcFrom: uint16(0x0106), FcTo0: uint8(0x43)}, 20321 {FcFrom: uint16(0x0107), FcTo0: uint8(0x63)}, 20322 {FcFrom: uint16(0x0108), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20323 {FcFrom: uint16(0x0109), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20324 {FcFrom: uint16(0x010A), FcTo0: uint8(0x43)}, 20325 {FcFrom: uint16(0x010B), FcTo0: uint8(0x63)}, 20326 {FcFrom: uint16(0x010C), FcTo0: uint8(0x43)}, 20327 {FcFrom: uint16(0x010D), FcTo0: uint8(0x63)}, 20328 {FcFrom: uint16(0x010E), FcTo0: uint8(0x44)}, 20329 {FcFrom: uint16(0x010F), FcTo0: uint8(0x64)}, 20330 {FcFrom: uint16(0x0110), FcTo0: uint8(0x44)}, 20331 {FcFrom: uint16(0x0111), FcTo0: uint8(0x64)}, 20332 {FcFrom: uint16(0x0112), FcTo0: uint8(0x45)}, 20333 {FcFrom: uint16(0x0113), FcTo0: uint8(0x65)}, 20334 {FcFrom: uint16(0x0114), FcTo0: uint8(0x45)}, 20335 {FcFrom: uint16(0x0115), FcTo0: uint8(0x65)}, 20336 {FcFrom: uint16(0x0116), FcTo0: uint8(0x45)}, 20337 {FcFrom: uint16(0x0117), FcTo0: uint8(0x65)}, 20338 {FcFrom: uint16(0x0118), FcTo0: uint8(0x45)}, 20339 {FcFrom: uint16(0x0119), FcTo0: uint8(0x65)}, 20340 {FcFrom: uint16(0x011A), FcTo0: uint8(0x45)}, 20341 {FcFrom: uint16(0x011B), FcTo0: uint8(0x65)}, 20342 {FcFrom: uint16(0x011C), FcTo0: uint8(0x47), FcTo1: uint8(0x68)}, 20343 {FcFrom: uint16(0x011D), FcTo0: uint8(0x67), FcTo1: uint8(0x68)}, 20344 {FcFrom: uint16(0x011E), FcTo0: uint8(0x47)}, 20345 {FcFrom: uint16(0x011F), FcTo0: uint8(0x67)}, 20346 {FcFrom: uint16(0x0120), FcTo0: uint8(0x47)}, 20347 {FcFrom: uint16(0x0121), FcTo0: uint8(0x67)}, 20348 {FcFrom: uint16(0x0122), FcTo0: uint8(0x47)}, 20349 {FcFrom: uint16(0x0123), FcTo0: uint8(0x67)}, 20350 {FcFrom: uint16(0x0124), FcTo0: uint8(0x48), FcTo1: uint8(0x68)}, 20351 {FcFrom: uint16(0x0125), FcTo0: uint8(0x68), FcTo1: uint8(0x68)}, 20352 {FcFrom: uint16(0x0126), FcTo0: uint8(0x48)}, 20353 {FcFrom: uint16(0x0127), FcTo0: uint8(0x68)}, 20354 {FcFrom: uint16(0x0128), FcTo0: uint8(0x49)}, 20355 {FcFrom: uint16(0x0129), FcTo0: uint8(0x69)}, 20356 {FcFrom: uint16(0x012A), FcTo0: uint8(0x49)}, 20357 {FcFrom: uint16(0x012B), FcTo0: uint8(0x69)}, 20358 {FcFrom: uint16(0x012C), FcTo0: uint8(0x49)}, 20359 {FcFrom: uint16(0x012D), FcTo0: uint8(0x69)}, 20360 {FcFrom: uint16(0x012E), FcTo0: uint8(0x49)}, 20361 {FcFrom: uint16(0x012F), FcTo0: uint8(0x69)}, 20362 {FcFrom: uint16(0x0130), FcTo0: uint8(0x49)}, 20363 {FcFrom: uint16(0x0131), FcTo0: uint8(0x69)}, 20364 {FcFrom: uint16(0x0132), FcTo0: uint8(0x49), FcTo1: uint8(0x4A)}, 20365 {FcFrom: uint16(0x0133), FcTo0: uint8(0x69), FcTo1: uint8(0x6A)}, 20366 {FcFrom: uint16(0x0134), FcTo0: uint8(0x4A), FcTo1: uint8(0x68)}, 20367 {FcFrom: uint16(0x0135), FcTo0: uint8(0x6A), FcTo1: uint8(0x68)}, 20368 {FcFrom: uint16(0x0136), FcTo0: uint8(0x4B)}, 20369 {FcFrom: uint16(0x0137), FcTo0: uint8(0x6B)}, 20370 {FcFrom: uint16(0x0138), FcTo0: uint8(0x6B)}, 20371 {FcFrom: uint16(0x0139), FcTo0: uint8(0x4C)}, 20372 {FcFrom: uint16(0x013A), FcTo0: uint8(0x6C)}, 20373 {FcFrom: uint16(0x013B), FcTo0: uint8(0x4C)}, 20374 {FcFrom: uint16(0x013C), FcTo0: uint8(0x6C)}, 20375 {FcFrom: uint16(0x013D), FcTo0: uint8(0x4C)}, 20376 {FcFrom: uint16(0x013E), FcTo0: uint8(0x6C)}, 20377 {FcFrom: uint16(0x013F), FcTo0: uint8(0x4C), FcTo1: uint8(0x2E)}, 20378 {FcFrom: uint16(0x0140), FcTo0: uint8(0x6C), FcTo1: uint8(0x2E)}, 20379 {FcFrom: uint16(0x0141), FcTo0: uint8(0x4C)}, 20380 {FcFrom: uint16(0x0142), FcTo0: uint8(0x6C)}, 20381 {FcFrom: uint16(0x0143), FcTo0: uint8(0x4E)}, 20382 {FcFrom: uint16(0x0144), FcTo0: uint8(0x6E)}, 20383 {FcFrom: uint16(0x0145), FcTo0: uint8(0x4E)}, 20384 {FcFrom: uint16(0x0146), FcTo0: uint8(0x6E)}, 20385 {FcFrom: uint16(0x0147), FcTo0: uint8(0x4E)}, 20386 {FcFrom: uint16(0x0148), FcTo0: uint8(0x6E)}, 20387 {FcFrom: uint16(0x0149), FcTo0: uint8(0x27), FcTo1: uint8(0x6E)}, 20388 {FcFrom: uint16(0x014A), FcTo0: uint8(0x4E), FcTo1: uint8(0x47)}, 20389 {FcFrom: uint16(0x014B), FcTo0: uint8(0x6E), FcTo1: uint8(0x67)}, 20390 {FcFrom: uint16(0x014C), FcTo0: uint8(0x4F)}, 20391 {FcFrom: uint16(0x014D), FcTo0: uint8(0x6F)}, 20392 {FcFrom: uint16(0x014E), FcTo0: uint8(0x4F)}, 20393 {FcFrom: uint16(0x014F), FcTo0: uint8(0x6F)}, 20394 {FcFrom: uint16(0x0150), FcTo0: uint8(0x4F)}, 20395 {FcFrom: uint16(0x0151), FcTo0: uint8(0x6F)}, 20396 {FcFrom: uint16(0x0152), FcTo0: uint8(0x4F), FcTo1: uint8(0x45)}, 20397 {FcFrom: uint16(0x0153), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20398 {FcFrom: uint16(0x0154), FcTo0: uint8(0x52)}, 20399 {FcFrom: uint16(0x0155), FcTo0: uint8(0x72)}, 20400 {FcFrom: uint16(0x0156), FcTo0: uint8(0x52)}, 20401 {FcFrom: uint16(0x0157), FcTo0: uint8(0x72)}, 20402 {FcFrom: uint16(0x0158), FcTo0: uint8(0x52)}, 20403 {FcFrom: uint16(0x0159), FcTo0: uint8(0x72)}, 20404 {FcFrom: uint16(0x015A), FcTo0: uint8(0x53)}, 20405 {FcFrom: uint16(0x015B), FcTo0: uint8(0x73)}, 20406 {FcFrom: uint16(0x015C), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 20407 {FcFrom: uint16(0x015D), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 20408 {FcFrom: uint16(0x015E), FcTo0: uint8(0x53)}, 20409 {FcFrom: uint16(0x015F), FcTo0: uint8(0x73)}, 20410 {FcFrom: uint16(0x0160), FcTo0: uint8(0x53)}, 20411 {FcFrom: uint16(0x0161), FcTo0: uint8(0x73)}, 20412 {FcFrom: uint16(0x0162), FcTo0: uint8(0x54)}, 20413 {FcFrom: uint16(0x0163), FcTo0: uint8(0x74)}, 20414 {FcFrom: uint16(0x0164), FcTo0: uint8(0x54)}, 20415 {FcFrom: uint16(0x0165), FcTo0: uint8(0x74)}, 20416 {FcFrom: uint16(0x0166), FcTo0: uint8(0x54)}, 20417 {FcFrom: uint16(0x0167), FcTo0: uint8(0x74)}, 20418 {FcFrom: uint16(0x0168), FcTo0: uint8(0x55)}, 20419 {FcFrom: uint16(0x0169), FcTo0: uint8(0x75)}, 20420 {FcFrom: uint16(0x016A), FcTo0: uint8(0x55)}, 20421 {FcFrom: uint16(0x016B), FcTo0: uint8(0x75)}, 20422 {FcFrom: uint16(0x016C), FcTo0: uint8(0x55)}, 20423 {FcFrom: uint16(0x016D), FcTo0: uint8(0x75)}, 20424 {FcFrom: uint16(0x016E), FcTo0: uint8(0x55)}, 20425 {FcFrom: uint16(0x016F), FcTo0: uint8(0x75)}, 20426 {FcFrom: uint16(0x0170), FcTo0: uint8(0x55)}, 20427 {FcFrom: uint16(0x0171), FcTo0: uint8(0x75)}, 20428 {FcFrom: uint16(0x0172), FcTo0: uint8(0x55)}, 20429 {FcFrom: uint16(0x0173), FcTo0: uint8(0x75)}, 20430 {FcFrom: uint16(0x0174), FcTo0: uint8(0x57)}, 20431 {FcFrom: uint16(0x0175), FcTo0: uint8(0x77)}, 20432 {FcFrom: uint16(0x0176), FcTo0: uint8(0x59)}, 20433 {FcFrom: uint16(0x0177), FcTo0: uint8(0x79)}, 20434 {FcFrom: uint16(0x0178), FcTo0: uint8(0x59)}, 20435 {FcFrom: uint16(0x0179), FcTo0: uint8(0x5A)}, 20436 {FcFrom: uint16(0x017A), FcTo0: uint8(0x7A)}, 20437 {FcFrom: uint16(0x017B), FcTo0: uint8(0x5A)}, 20438 {FcFrom: uint16(0x017C), FcTo0: uint8(0x7A)}, 20439 {FcFrom: uint16(0x017D), FcTo0: uint8(0x5A)}, 20440 {FcFrom: uint16(0x017E), FcTo0: uint8(0x7A)}, 20441 {FcFrom: uint16(0x017F), FcTo0: uint8(0x73)}, 20442 {FcFrom: uint16(0x0192), FcTo0: uint8(0x66)}, 20443 {FcFrom: uint16(0x0218), FcTo0: uint8(0x53)}, 20444 {FcFrom: uint16(0x0219), FcTo0: uint8(0x73)}, 20445 {FcFrom: uint16(0x021A), FcTo0: uint8(0x54)}, 20446 {FcFrom: uint16(0x021B), FcTo0: uint8(0x74)}, 20447 {FcFrom: uint16(0x0386), FcTo0: uint8(0x41)}, 20448 {FcFrom: uint16(0x0388), FcTo0: uint8(0x45)}, 20449 {FcFrom: uint16(0x0389), FcTo0: uint8(0x49)}, 20450 {FcFrom: uint16(0x038A), FcTo0: uint8(0x49)}, 20451 {FcFrom: uint16(0x038C), FcTo0: uint8(0x4f)}, 20452 {FcFrom: uint16(0x038E), FcTo0: uint8(0x59)}, 20453 {FcFrom: uint16(0x038F), FcTo0: uint8(0x4f)}, 20454 {FcFrom: uint16(0x0390), FcTo0: uint8(0x69)}, 20455 {FcFrom: uint16(0x0391), FcTo0: uint8(0x41)}, 20456 {FcFrom: uint16(0x0392), FcTo0: uint8(0x42)}, 20457 {FcFrom: uint16(0x0393), FcTo0: uint8(0x47)}, 20458 {FcFrom: uint16(0x0394), FcTo0: uint8(0x44)}, 20459 {FcFrom: uint16(0x0395), FcTo0: uint8(0x45)}, 20460 {FcFrom: uint16(0x0396), FcTo0: uint8(0x5a)}, 20461 {FcFrom: uint16(0x0397), FcTo0: uint8(0x49)}, 20462 {FcFrom: uint16(0x0398), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20463 {FcFrom: uint16(0x0399), FcTo0: uint8(0x49)}, 20464 {FcFrom: uint16(0x039A), FcTo0: uint8(0x4b)}, 20465 {FcFrom: uint16(0x039B), FcTo0: uint8(0x4c)}, 20466 {FcFrom: uint16(0x039C), FcTo0: uint8(0x4d)}, 20467 {FcFrom: uint16(0x039D), FcTo0: uint8(0x4e)}, 20468 {FcFrom: uint16(0x039E), FcTo0: uint8(0x58)}, 20469 {FcFrom: uint16(0x039F), FcTo0: uint8(0x4f)}, 20470 {FcFrom: uint16(0x03A0), FcTo0: uint8(0x50)}, 20471 {FcFrom: uint16(0x03A1), FcTo0: uint8(0x52)}, 20472 {FcFrom: uint16(0x03A3), FcTo0: uint8(0x53)}, 20473 {FcFrom: uint16(0x03A4), FcTo0: uint8(0x54)}, 20474 {FcFrom: uint16(0x03A5), FcTo0: uint8(0x59)}, 20475 {FcFrom: uint16(0x03A6), FcTo0: uint8(0x46)}, 20476 {FcFrom: uint16(0x03A7), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20477 {FcFrom: uint16(0x03A8), FcTo0: uint8(0x50), FcTo1: uint8(0x73)}, 20478 {FcFrom: uint16(0x03A9), FcTo0: uint8(0x4f)}, 20479 {FcFrom: uint16(0x03AA), FcTo0: uint8(0x49)}, 20480 {FcFrom: uint16(0x03AB), FcTo0: uint8(0x59)}, 20481 {FcFrom: uint16(0x03AC), FcTo0: uint8(0x61)}, 20482 {FcFrom: uint16(0x03AD), FcTo0: uint8(0x65)}, 20483 {FcFrom: uint16(0x03AE), FcTo0: uint8(0x69)}, 20484 {FcFrom: uint16(0x03AF), FcTo0: uint8(0x69)}, 20485 {FcFrom: uint16(0x03B1), FcTo0: uint8(0x61)}, 20486 {FcFrom: uint16(0x03B2), FcTo0: uint8(0x62)}, 20487 {FcFrom: uint16(0x03B3), FcTo0: uint8(0x67)}, 20488 {FcFrom: uint16(0x03B4), FcTo0: uint8(0x64)}, 20489 {FcFrom: uint16(0x03B5), FcTo0: uint8(0x65)}, 20490 {FcFrom: uint16(0x03B6), FcTo0: uint8(0x7a)}, 20491 {FcFrom: uint16(0x03B7), FcTo0: uint8(0x69)}, 20492 {FcFrom: uint16(0x03B8), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 20493 {FcFrom: uint16(0x03B9), FcTo0: uint8(0x69)}, 20494 {FcFrom: uint16(0x03BA), FcTo0: uint8(0x6b)}, 20495 {FcFrom: uint16(0x03BB), FcTo0: uint8(0x6c)}, 20496 {FcFrom: uint16(0x03BC), FcTo0: uint8(0x6d)}, 20497 {FcFrom: uint16(0x03BD), FcTo0: uint8(0x6e)}, 20498 {FcFrom: uint16(0x03BE), FcTo0: uint8(0x78)}, 20499 {FcFrom: uint16(0x03BF), FcTo0: uint8(0x6f)}, 20500 {FcFrom: uint16(0x03C0), FcTo0: uint8(0x70)}, 20501 {FcFrom: uint16(0x03C1), FcTo0: uint8(0x72)}, 20502 {FcFrom: uint16(0x03C3), FcTo0: uint8(0x73)}, 20503 {FcFrom: uint16(0x03C4), FcTo0: uint8(0x74)}, 20504 {FcFrom: uint16(0x03C5), FcTo0: uint8(0x79)}, 20505 {FcFrom: uint16(0x03C6), FcTo0: uint8(0x66)}, 20506 {FcFrom: uint16(0x03C7), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20507 {FcFrom: uint16(0x03C8), FcTo0: uint8(0x70), FcTo1: uint8(0x73)}, 20508 {FcFrom: uint16(0x03C9), FcTo0: uint8(0x6f)}, 20509 {FcFrom: uint16(0x03CA), FcTo0: uint8(0x69)}, 20510 {FcFrom: uint16(0x03CB), FcTo0: uint8(0x79)}, 20511 {FcFrom: uint16(0x03CC), FcTo0: uint8(0x6f)}, 20512 {FcFrom: uint16(0x03CD), FcTo0: uint8(0x79)}, 20513 {FcFrom: uint16(0x03CE), FcTo0: uint8(0x69)}, 20514 {FcFrom: uint16(0x0400), FcTo0: uint8(0x45)}, 20515 {FcFrom: uint16(0x0401), FcTo0: uint8(0x45)}, 20516 {FcFrom: uint16(0x0402), FcTo0: uint8(0x44)}, 20517 {FcFrom: uint16(0x0403), FcTo0: uint8(0x47)}, 20518 {FcFrom: uint16(0x0404), FcTo0: uint8(0x45)}, 20519 {FcFrom: uint16(0x0405), FcTo0: uint8(0x5a)}, 20520 {FcFrom: uint16(0x0406), FcTo0: uint8(0x49)}, 20521 {FcFrom: uint16(0x0407), FcTo0: uint8(0x49)}, 20522 {FcFrom: uint16(0x0408), FcTo0: uint8(0x4a)}, 20523 {FcFrom: uint16(0x0409), FcTo0: uint8(0x49)}, 20524 {FcFrom: uint16(0x040A), FcTo0: uint8(0x4e)}, 20525 {FcFrom: uint16(0x040B), FcTo0: uint8(0x44)}, 20526 {FcFrom: uint16(0x040C), FcTo0: uint8(0x4b)}, 20527 {FcFrom: uint16(0x040D), FcTo0: uint8(0x49)}, 20528 {FcFrom: uint16(0x040E), FcTo0: uint8(0x55)}, 20529 {FcFrom: uint16(0x040F), FcTo0: uint8(0x44)}, 20530 {FcFrom: uint16(0x0410), FcTo0: uint8(0x41)}, 20531 {FcFrom: uint16(0x0411), FcTo0: uint8(0x42)}, 20532 {FcFrom: uint16(0x0412), FcTo0: uint8(0x56)}, 20533 {FcFrom: uint16(0x0413), FcTo0: uint8(0x47)}, 20534 {FcFrom: uint16(0x0414), FcTo0: uint8(0x44)}, 20535 {FcFrom: uint16(0x0415), FcTo0: uint8(0x45)}, 20536 {FcFrom: uint16(0x0416), FcTo0: uint8(0x5a), FcTo1: uint8(0x68)}, 20537 {FcFrom: uint16(0x0417), FcTo0: uint8(0x5a)}, 20538 {FcFrom: uint16(0x0418), FcTo0: uint8(0x49)}, 20539 {FcFrom: uint16(0x0419), FcTo0: uint8(0x49)}, 20540 {FcFrom: uint16(0x041A), FcTo0: uint8(0x4b)}, 20541 {FcFrom: uint16(0x041B), FcTo0: uint8(0x4c)}, 20542 {FcFrom: uint16(0x041C), FcTo0: uint8(0x4d)}, 20543 {FcFrom: uint16(0x041D), FcTo0: uint8(0x4e)}, 20544 {FcFrom: uint16(0x041E), FcTo0: uint8(0x4f)}, 20545 {FcFrom: uint16(0x041F), FcTo0: uint8(0x50)}, 20546 {FcFrom: uint16(0x0420), FcTo0: uint8(0x52)}, 20547 {FcFrom: uint16(0x0421), FcTo0: uint8(0x53)}, 20548 {FcFrom: uint16(0x0422), FcTo0: uint8(0x54)}, 20549 {FcFrom: uint16(0x0423), FcTo0: uint8(0x55)}, 20550 {FcFrom: uint16(0x0424), FcTo0: uint8(0x46)}, 20551 {FcFrom: uint16(0x0425), FcTo0: uint8(0x4b), FcTo1: uint8(0x68)}, 20552 {FcFrom: uint16(0x0426), FcTo0: uint8(0x54), FcTo1: uint8(0x63)}, 20553 {FcFrom: uint16(0x0427), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20554 {FcFrom: uint16(0x0428), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 20555 {FcFrom: uint16(0x0429), FcTo0: uint8(0x53), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 20556 {FcFrom: uint16(0x042A), FcTo0: uint8(0x61)}, 20557 {FcFrom: uint16(0x042B), FcTo0: uint8(0x59)}, 20558 {FcFrom: uint16(0x042C), FcTo0: uint8(0x59)}, 20559 {FcFrom: uint16(0x042D), FcTo0: uint8(0x45)}, 20560 {FcFrom: uint16(0x042E), FcTo0: uint8(0x49), FcTo1: uint8(0x75)}, 20561 {FcFrom: uint16(0x042F), FcTo0: uint8(0x49), FcTo1: uint8(0x61)}, 20562 {FcFrom: uint16(0x0430), FcTo0: uint8(0x61)}, 20563 {FcFrom: uint16(0x0431), FcTo0: uint8(0x62)}, 20564 {FcFrom: uint16(0x0432), FcTo0: uint8(0x76)}, 20565 {FcFrom: uint16(0x0433), FcTo0: uint8(0x67)}, 20566 {FcFrom: uint16(0x0434), FcTo0: uint8(0x64)}, 20567 {FcFrom: uint16(0x0435), FcTo0: uint8(0x65)}, 20568 {FcFrom: uint16(0x0436), FcTo0: uint8(0x7a), FcTo1: uint8(0x68)}, 20569 {FcFrom: uint16(0x0437), FcTo0: uint8(0x7a)}, 20570 {FcFrom: uint16(0x0438), FcTo0: uint8(0x69)}, 20571 {FcFrom: uint16(0x0439), FcTo0: uint8(0x69)}, 20572 {FcFrom: uint16(0x043A), FcTo0: uint8(0x6b)}, 20573 {FcFrom: uint16(0x043B), FcTo0: uint8(0x6c)}, 20574 {FcFrom: uint16(0x043C), FcTo0: uint8(0x6d)}, 20575 {FcFrom: uint16(0x043D), FcTo0: uint8(0x6e)}, 20576 {FcFrom: uint16(0x043E), FcTo0: uint8(0x6f)}, 20577 {FcFrom: uint16(0x043F), FcTo0: uint8(0x70)}, 20578 {FcFrom: uint16(0x0440), FcTo0: uint8(0x72)}, 20579 {FcFrom: uint16(0x0441), FcTo0: uint8(0x73)}, 20580 {FcFrom: uint16(0x0442), FcTo0: uint8(0x74)}, 20581 {FcFrom: uint16(0x0443), FcTo0: uint8(0x75)}, 20582 {FcFrom: uint16(0x0444), FcTo0: uint8(0x66)}, 20583 {FcFrom: uint16(0x0445), FcTo0: uint8(0x6b), FcTo1: uint8(0x68)}, 20584 {FcFrom: uint16(0x0446), FcTo0: uint8(0x74), FcTo1: uint8(0x63)}, 20585 {FcFrom: uint16(0x0447), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20586 {FcFrom: uint16(0x0448), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 20587 {FcFrom: uint16(0x0449), FcTo0: uint8(0x73), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 20588 {FcFrom: uint16(0x044A), FcTo0: uint8(0x61)}, 20589 {FcFrom: uint16(0x044B), FcTo0: uint8(0x79)}, 20590 {FcFrom: uint16(0x044C), FcTo0: uint8(0x79)}, 20591 {FcFrom: uint16(0x044D), FcTo0: uint8(0x65)}, 20592 {FcFrom: uint16(0x044E), FcTo0: uint8(0x69), FcTo1: uint8(0x75)}, 20593 {FcFrom: uint16(0x044F), FcTo0: uint8(0x69), FcTo1: uint8(0x61)}, 20594 {FcFrom: uint16(0x0450), FcTo0: uint8(0x65)}, 20595 {FcFrom: uint16(0x0451), FcTo0: uint8(0x65)}, 20596 {FcFrom: uint16(0x0452), FcTo0: uint8(0x64)}, 20597 {FcFrom: uint16(0x0453), FcTo0: uint8(0x67)}, 20598 {FcFrom: uint16(0x0454), FcTo0: uint8(0x65)}, 20599 {FcFrom: uint16(0x0455), FcTo0: uint8(0x7a)}, 20600 {FcFrom: uint16(0x0456), FcTo0: uint8(0x69)}, 20601 {FcFrom: uint16(0x0457), FcTo0: uint8(0x69)}, 20602 {FcFrom: uint16(0x0458), FcTo0: uint8(0x6a)}, 20603 {FcFrom: uint16(0x0459), FcTo0: uint8(0x69)}, 20604 {FcFrom: uint16(0x045A), FcTo0: uint8(0x6e)}, 20605 {FcFrom: uint16(0x045B), FcTo0: uint8(0x64)}, 20606 {FcFrom: uint16(0x045C), FcTo0: uint8(0x6b)}, 20607 {FcFrom: uint16(0x045D), FcTo0: uint8(0x69)}, 20608 {FcFrom: uint16(0x045E), FcTo0: uint8(0x75)}, 20609 {FcFrom: uint16(0x045F), FcTo0: uint8(0x64)}, 20610 {FcFrom: uint16(0x1E02), FcTo0: uint8(0x42)}, 20611 {FcFrom: uint16(0x1E03), FcTo0: uint8(0x62)}, 20612 {FcFrom: uint16(0x1E0A), FcTo0: uint8(0x44)}, 20613 {FcFrom: uint16(0x1E0B), FcTo0: uint8(0x64)}, 20614 {FcFrom: uint16(0x1E1E), FcTo0: uint8(0x46)}, 20615 {FcFrom: uint16(0x1E1F), FcTo0: uint8(0x66)}, 20616 {FcFrom: uint16(0x1E40), FcTo0: uint8(0x4D)}, 20617 {FcFrom: uint16(0x1E41), FcTo0: uint8(0x6D)}, 20618 {FcFrom: uint16(0x1E56), FcTo0: uint8(0x50)}, 20619 {FcFrom: uint16(0x1E57), FcTo0: uint8(0x70)}, 20620 {FcFrom: uint16(0x1E60), FcTo0: uint8(0x53)}, 20621 {FcFrom: uint16(0x1E61), FcTo0: uint8(0x73)}, 20622 {FcFrom: uint16(0x1E6A), FcTo0: uint8(0x54)}, 20623 {FcFrom: uint16(0x1E6B), FcTo0: uint8(0x74)}, 20624 {FcFrom: uint16(0x1E80), FcTo0: uint8(0x57)}, 20625 {FcFrom: uint16(0x1E81), FcTo0: uint8(0x77)}, 20626 {FcFrom: uint16(0x1E82), FcTo0: uint8(0x57)}, 20627 {FcFrom: uint16(0x1E83), FcTo0: uint8(0x77)}, 20628 {FcFrom: uint16(0x1E84), FcTo0: uint8(0x57)}, 20629 {FcFrom: uint16(0x1E85), FcTo0: uint8(0x77)}, 20630 {FcFrom: uint16(0x1EF2), FcTo0: uint8(0x59)}, 20631 {FcFrom: uint16(0x1EF3), FcTo0: uint8(0x79)}, 20632 {FcFrom: uint16(0xFB00), FcTo0: uint8(0x66), FcTo1: uint8(0x66)}, 20633 {FcFrom: uint16(0xFB01), FcTo0: uint8(0x66), FcTo1: uint8(0x69)}, 20634 {FcFrom: uint16(0xFB02), FcTo0: uint8(0x66), FcTo1: uint8(0x6C)}, 20635 {FcFrom: uint16(0xFB05), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 20636 {FcFrom: uint16(0xFB06), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 20637 } 20638 20639 func spellfixFindTranslit(tls *libc.TLS, c int32, pxTop uintptr) uintptr { 20640 *(*int32)(unsafe.Pointer(pxTop)) = int32(uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{})) - uint64(1)) 20641 return uintptr(unsafe.Pointer(&translit)) 20642 } 20643 20644 func transliterate(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 20645 bp := tls.Alloc(8) 20646 defer tls.Free(8) 20647 20648 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn*4+1)) 20649 var c int32 20650 20651 var nOut int32 20652 if zOut == uintptr(0) { 20653 return uintptr(0) 20654 } 20655 nOut = 0 20656 for nIn > 0 { 20657 c = utf8Read(tls, zIn, nIn, bp) 20658 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 20659 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 20660 if c <= 127 { 20661 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8(c) 20662 } else { 20663 var xBtm int32 20664 var x int32 20665 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 20666 xBtm = 0 20667 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 20668 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 20669 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 20670 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo0 20671 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 20672 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo1 20673 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 20674 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo2 20675 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 20676 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo3 20677 } 20678 } 20679 } 20680 c = 0 20681 break 20682 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 20683 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 20684 } else { 20685 xBtm = x + 1 20686 } 20687 } 20688 if c != 0 { 20689 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8('?') 20690 } 20691 } 20692 } 20693 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 20694 return zOut 20695 } 20696 20697 func translen_to_charlen(tls *libc.TLS, zIn uintptr, nIn int32, nTrans int32) int32 { 20698 bp := tls.Alloc(8) 20699 defer tls.Free(8) 20700 20701 var i int32 20702 var c int32 20703 20704 var nOut int32 20705 var nChar int32 20706 20707 i = libc.AssignInt32(&nOut, 0) 20708 for nChar = 0; i < nIn && nOut < nTrans; nChar++ { 20709 c = utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 20710 i = i + *(*int32)(unsafe.Pointer(bp)) 20711 20712 nOut++ 20713 if c >= 128 { 20714 var xBtm int32 20715 var x int32 20716 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 20717 xBtm = 0 20718 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 20719 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 20720 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 20721 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 20722 nOut++ 20723 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 20724 nOut++ 20725 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 20726 nOut++ 20727 } 20728 } 20729 } 20730 break 20731 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 20732 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 20733 } else { 20734 xBtm = x + 1 20735 } 20736 } 20737 } 20738 } 20739 20740 return nChar 20741 } 20742 20743 func transliterateSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20744 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20745 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20746 var zOut uintptr = transliterate(tls, zIn, nIn) 20747 if zOut == uintptr(0) { 20748 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20749 } else { 20750 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 20751 } 20752 } 20753 20754 func scriptCodeSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20755 bp := tls.Alloc(4) 20756 defer tls.Free(4) 20757 20758 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20759 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20760 var c int32 20761 20762 var scriptMask int32 = 0 20763 var res int32 20764 var seenDigit int32 = 0 20765 20766 for nIn > 0 { 20767 c = utf8Read(tls, zIn, nIn, bp) 20768 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 20769 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 20770 if c < 0x02af { 20771 if c >= 0x80 || int32(midClass[c&0x7f]) < CCLASS_DIGIT { 20772 scriptMask = scriptMask | SCRIPT_LATIN 20773 } else if c >= '0' && c <= '9' { 20774 seenDigit = 1 20775 } 20776 } else if c >= 0x0400 && c <= 0x04ff { 20777 scriptMask = scriptMask | SCRIPT_CYRILLIC 20778 } else if c >= 0x0386 && c <= 0x03ce { 20779 scriptMask = scriptMask | SCRIPT_GREEK 20780 } else if c >= 0x0590 && c <= 0x05ff { 20781 scriptMask = scriptMask | SCRIPT_HEBREW 20782 } else if c >= 0x0600 && c <= 0x06ff { 20783 scriptMask = scriptMask | SCRIPT_ARABIC 20784 } 20785 } 20786 if scriptMask == 0 && seenDigit != 0 { 20787 scriptMask = SCRIPT_LATIN 20788 } 20789 switch scriptMask { 20790 case 0: 20791 res = 999 20792 break 20793 case SCRIPT_LATIN: 20794 res = 215 20795 break 20796 case SCRIPT_CYRILLIC: 20797 res = 220 20798 break 20799 case SCRIPT_GREEK: 20800 res = 200 20801 break 20802 case SCRIPT_HEBREW: 20803 res = 125 20804 break 20805 case SCRIPT_ARABIC: 20806 res = 160 20807 break 20808 default: 20809 res = 998 20810 break 20811 } 20812 sqlite3.Xsqlite3_result_int(tls, context, res) 20813 } 20814 20815 type spellfix1_vtab1 = struct { 20816 Fbase sqlite3_vtab 20817 Fdb uintptr 20818 FzDbName uintptr 20819 FzTableName uintptr 20820 FzCostTable uintptr 20821 FpConfig3 uintptr 20822 } 20823 20824 type spellfix1_vtab = spellfix1_vtab1 20825 type spellfix1_cursor1 = struct { 20826 Fbase sqlite3_vtab_cursor 20827 FpVTab uintptr 20828 FzPattern uintptr 20829 FidxNum int32 20830 FnRow int32 20831 FnAlloc int32 20832 FiRow int32 20833 FiLang int32 20834 FiTop int32 20835 FiScope int32 20836 FnSearch int32 20837 FpFullScan uintptr 20838 Fa uintptr 20839 } 20840 20841 type spellfix1_cursor = spellfix1_cursor1 20842 20843 type spellfix1_row = struct { 20844 FiRowid sqlite3_int64 20845 FzWord uintptr 20846 FiRank int32 20847 FiDistance int32 20848 FiScore int32 20849 FiMatchlen int32 20850 FzHash [32]int8 20851 } 20852 20853 func spellfix1DbExec(tls *libc.TLS, pRc uintptr, db uintptr, zFormat uintptr, va uintptr) { 20854 var ap va_list 20855 _ = ap 20856 var zSql uintptr 20857 if *(*int32)(unsafe.Pointer(pRc)) != 0 { 20858 return 20859 } 20860 ap = va 20861 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap) 20862 _ = ap 20863 if zSql == uintptr(0) { 20864 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 20865 } else { 20866 *(*int32)(unsafe.Pointer(pRc)) = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 20867 sqlite3.Xsqlite3_free(tls, zSql) 20868 } 20869 } 20870 20871 func spellfix1Uninit(tls *libc.TLS, isDestroy int32, pVTab uintptr) int32 { 20872 bp := tls.Alloc(20) 20873 defer tls.Free(20) 20874 20875 var p uintptr = pVTab 20876 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 20877 if isDestroy != 0 { 20878 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 20879 spellfix1DbExec(tls, bp+16, db, ts+7189, 20880 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 20881 } 20882 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 20883 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 20884 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 20885 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 20886 sqlite3.Xsqlite3_free(tls, p) 20887 } 20888 return *(*int32)(unsafe.Pointer(bp + 16)) 20889 } 20890 20891 func spellfix1Disconnect(tls *libc.TLS, pVTab uintptr) int32 { 20892 return spellfix1Uninit(tls, 0, pVTab) 20893 } 20894 20895 func spellfix1Destroy(tls *libc.TLS, pVTab uintptr) int32 { 20896 return spellfix1Uninit(tls, 1, pVTab) 20897 } 20898 20899 func spellfix1Dequote(tls *libc.TLS, zIn uintptr) uintptr { 20900 bp := tls.Alloc(8) 20901 defer tls.Free(8) 20902 20903 var zOut uintptr 20904 var i int32 20905 var j int32 20906 var c int8 20907 for libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zIn))))) != 0 { 20908 zIn++ 20909 } 20910 zOut = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zIn)) 20911 if zOut == uintptr(0) { 20912 return uintptr(0) 20913 } 20914 i = int32(libc.Xstrlen(tls, zOut)) 20915 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = int8(0) 20916 c = *(*int8)(unsafe.Pointer(zOut)) 20917 if int32(c) == '\'' || int32(c) == '"' { 20918 i = 1 20919 j = 0 20920 for ; 1 != 0; i++ { 20921 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zOut + uintptr(i))) 20922 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i)))) == int32(c) { 20923 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i+1)))) == int32(c) { 20924 i++ 20925 } else { 20926 *(*int8)(unsafe.Pointer(zOut + uintptr(j-1))) = int8(0) 20927 break 20928 } 20929 } 20930 } 20931 } 20932 return zOut 20933 } 20934 20935 func spellfix1Init(tls *libc.TLS, isCreate int32, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 20936 bp := tls.Alloc(60) 20937 defer tls.Free(60) 20938 20939 var pNew uintptr = uintptr(0) 20940 20941 var zDbName uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 20942 var zTableName uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 20943 var nDbName int32 20944 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_OK 20945 var i int32 20946 20947 nDbName = int32(libc.Xstrlen(tls, zDbName)) 20948 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_vtab{}))+uint64(nDbName)+uint64(1)) 20949 if pNew == uintptr(0) { 20950 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 20951 } else { 20952 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(spellfix1_vtab{}))) 20953 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName = pNew + 1*64 20954 libc.Xmemcpy(tls, (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName, zDbName, uint64(nDbName+1)) 20955 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 20956 (*spellfix1_vtab)(unsafe.Pointer(pNew)).Fdb = db 20957 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0) { 20958 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 20959 } else { 20960 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 20961 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_declare_vtab(tls, db, 20962 ts+7226) 20963 } 20964 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && isCreate != 0 { 20965 spellfix1DbExec(tls, bp+56, db, 20966 ts+7380, 20967 libc.VaList(bp+8, zDbName, zTableName)) 20968 spellfix1DbExec(tls, bp+56, db, 20969 ts+7514, 20970 libc.VaList(bp+24, zDbName, zTableName, zTableName)) 20971 } 20972 for i = 3; *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && i < argc; i++ { 20973 if libc.Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ts+7599, uint64(16)) == 0 && (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 20974 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable = spellfix1Dequote(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))+16) 20975 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 20976 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 20977 } 20978 continue 20979 } 20980 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+7616, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 20981 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_ERROR 20982 } 20983 } 20984 20985 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 && pNew != 0 { 20986 *(*uintptr)(unsafe.Pointer(ppVTab)) = uintptr(0) 20987 spellfix1Uninit(tls, 0, pNew) 20988 } else { 20989 *(*uintptr)(unsafe.Pointer(ppVTab)) = pNew 20990 } 20991 return *(*int32)(unsafe.Pointer(bp + 56)) 20992 } 20993 20994 func spellfix1Connect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 20995 return spellfix1Init(tls, 0, db, pAux, argc, argv, ppVTab, pzErr) 20996 } 20997 20998 func spellfix1Create(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 20999 return spellfix1Init(tls, 1, db, pAux, argc, argv, ppVTab, pzErr) 21000 } 21001 21002 func spellfix1ResetCursor(tls *libc.TLS, pCur uintptr) { 21003 var i int32 21004 for i = 0; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21005 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(i)*64)).FzWord) 21006 } 21007 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = 0 21008 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 21009 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch = 0 21010 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21011 sqlite3.Xsqlite3_finalize(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21012 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan = uintptr(0) 21013 } 21014 } 21015 21016 func spellfix1ResizeCursor(tls *libc.TLS, pCur uintptr, N int32) { 21017 var aNew uintptr 21018 21019 aNew = sqlite3.Xsqlite3_realloc64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64(unsafe.Sizeof(spellfix1_row{}))*uint64(N)) 21020 if aNew == uintptr(0) && N > 0 { 21021 spellfix1ResetCursor(tls, pCur) 21022 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa) 21023 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = 0 21024 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = uintptr(0) 21025 } else { 21026 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = N 21027 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = aNew 21028 } 21029 } 21030 21031 func spellfix1Close(tls *libc.TLS, cur uintptr) int32 { 21032 var pCur uintptr = cur 21033 spellfix1ResetCursor(tls, pCur) 21034 spellfix1ResizeCursor(tls, pCur, 0) 21035 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21036 sqlite3.Xsqlite3_free(tls, pCur) 21037 return SQLITE_OK 21038 } 21039 21040 func spellfix1BestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 21041 var iPlan int32 = 0 21042 var iLangTerm int32 = -1 21043 var iTopTerm int32 = -1 21044 var iScopeTerm int32 = -1 21045 var iDistTerm int32 = -1 21046 var iRowidTerm int32 = -1 21047 var i int32 21048 var pConstraint uintptr 21049 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 21050 i = 0 21051 __1: 21052 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 21053 goto __3 21054 } 21055 { 21056 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 21057 goto __2 21058 } 21059 21060 if iPlan&SPELLFIX_IDXNUM_MATCH == 0 && 21061 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_WORD && 21062 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 21063 iPlan = iPlan | SPELLFIX_IDXNUM_MATCH 21064 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 21065 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 21066 } 21067 21068 if iPlan&SPELLFIX_IDXNUM_LANGID == 0 && 21069 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_LANGID && 21070 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21071 iPlan = iPlan | SPELLFIX_IDXNUM_LANGID 21072 iLangTerm = i 21073 } 21074 21075 if iPlan&SPELLFIX_IDXNUM_TOP == 0 && 21076 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_TOP && 21077 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21078 iPlan = iPlan | SPELLFIX_IDXNUM_TOP 21079 iTopTerm = i 21080 } 21081 21082 if iPlan&SPELLFIX_IDXNUM_SCOPE == 0 && 21083 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_SCOPE && 21084 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21085 iPlan = iPlan | SPELLFIX_IDXNUM_SCOPE 21086 iScopeTerm = i 21087 } 21088 21089 if iPlan&(0x10|0x20) == 0 && 21090 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_DISTANCE && 21091 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 21092 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 21093 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 21094 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLT 21095 } else { 21096 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLE 21097 } 21098 iDistTerm = i 21099 } 21100 21101 if iPlan&SPELLFIX_IDXNUM_ROWID == 0 && 21102 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < 0 && 21103 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21104 iPlan = iPlan | SPELLFIX_IDXNUM_ROWID 21105 iRowidTerm = i 21106 } 21107 21108 } 21109 goto __2 21110 __2: 21111 i++ 21112 pConstraint += 12 21113 goto __1 21114 goto __3 21115 __3: 21116 ; 21117 if iPlan&SPELLFIX_IDXNUM_MATCH != 0 { 21118 var idx int32 = 2 21119 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 21120 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 21121 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == SPELLFIX_COL_SCORE && 21122 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 21123 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 21124 } 21125 if iPlan&SPELLFIX_IDXNUM_LANGID != 0 { 21126 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21127 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).Fomit = uint8(1) 21128 } 21129 if iPlan&SPELLFIX_IDXNUM_TOP != 0 { 21130 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21131 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).Fomit = uint8(1) 21132 } 21133 if iPlan&SPELLFIX_IDXNUM_SCOPE != 0 { 21134 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21135 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).Fomit = uint8(1) 21136 } 21137 if iPlan&(0x10|0x20) != 0 { 21138 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21139 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).Fomit = uint8(1) 21140 } 21141 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e5 21142 } else if iPlan&SPELLFIX_IDXNUM_ROWID != 0 { 21143 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SPELLFIX_IDXNUM_ROWID 21144 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).FargvIndex = 1 21145 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).Fomit = uint8(1) 21146 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 21147 } else { 21148 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 21149 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e50 21150 } 21151 return SQLITE_OK 21152 } 21153 21154 func spellfix1Open(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 21155 var p uintptr = pVTab 21156 var pCur uintptr 21157 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21158 if pCur == uintptr(0) { 21159 return SQLITE_NOMEM 21160 } 21161 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21162 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab = p 21163 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 21164 return SQLITE_OK 21165 } 21166 21167 func spellfix1Score(tls *libc.TLS, iDistance int32, iRank int32) int32 { 21168 var iLog2 int32 21169 iLog2 = 0 21170 __1: 21171 if !(iRank > 0) { 21172 goto __3 21173 } 21174 { 21175 } 21176 goto __2 21177 __2: 21178 iLog2++ 21179 iRank >>= 1 21180 goto __1 21181 goto __3 21182 __3: 21183 ; 21184 return iDistance + 32 - iLog2 21185 } 21186 21187 func spellfix1RowCompare(tls *libc.TLS, A uintptr, B uintptr) int32 { 21188 var a uintptr = A 21189 var b uintptr = B 21190 return (*spellfix1_row)(unsafe.Pointer(a)).FiScore - (*spellfix1_row)(unsafe.Pointer(b)).FiScore 21191 } 21192 21193 type MatchQuery1 = struct { 21194 FpCur uintptr 21195 FpStmt uintptr 21196 FzHash [32]int8 21197 FzPattern uintptr 21198 FnPattern int32 21199 F__ccgo_pad1 [4]byte 21200 FpMatchStr3 uintptr 21201 FpConfig3 uintptr 21202 FpLang uintptr 21203 FiLang int32 21204 FiScope int32 21205 FiMaxDist int32 21206 Frc int32 21207 FnRun int32 21208 FazPrior [1][32]int8 21209 F__ccgo_pad2 [4]byte 21210 } 21211 21212 type MatchQuery = MatchQuery1 21213 21214 func spellfix1RunQuery(tls *libc.TLS, p uintptr, zQuery uintptr, nQuery int32) { 21215 bp := tls.Alloc(76) 21216 defer tls.Free(76) 21217 21218 var zK1 uintptr 21219 var zWord uintptr 21220 var iDist int32 21221 var iRank int32 21222 var iScore int32 21223 var iWorst int32 = 0 21224 var idx int32 21225 var idxWorst int32 = -1 21226 var i int32 21227 var iScope int32 = (*MatchQuery)(unsafe.Pointer(p)).FiScope 21228 var pCur uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpCur 21229 var pStmt uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpStmt 21230 21231 var zClass uintptr 21232 var nClass int32 21233 var rc int32 21234 21235 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) || (*MatchQuery)(unsafe.Pointer(p)).Frc != 0 { 21236 return 21237 } 21238 zClass = phoneticHash(tls, zQuery, nQuery) 21239 if zClass == uintptr(0) { 21240 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21241 return 21242 } 21243 nClass = int32(libc.Xstrlen(tls, zClass)) 21244 if nClass > SPELLFIX_MX_HASH-2 { 21245 nClass = SPELLFIX_MX_HASH - 2 21246 *(*int8)(unsafe.Pointer(zClass + uintptr(nClass))) = int8(0) 21247 } 21248 if nClass <= iScope { 21249 if nClass > 2 { 21250 iScope = nClass - 1 21251 } else { 21252 iScope = nClass 21253 } 21254 } 21255 libc.Xmemcpy(tls, bp+8, zClass, uint64(iScope)) 21256 sqlite3.Xsqlite3_free(tls, zClass) 21257 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(iScope))) = int8(0) 21258 libc.Xmemcpy(tls, bp+40, bp+8, uint64(iScope)) 21259 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope))) = int8('Z') 21260 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope+1))) = int8(0) 21261 21262 libc.Xmemcpy(tls, p+108+uintptr(libc.PostIncInt32(&(*MatchQuery)(unsafe.Pointer(p)).FnRun, 1))*32, bp+8, uint64(iScope+1)) 21263 if sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, bp+8, -1, uintptr(0)) == SQLITE_NOMEM || 21264 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, bp+40, -1, uintptr(0)) == SQLITE_NOMEM { 21265 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21266 return 21267 } 21268 for sqlite3.Xsqlite3_step(tls, pStmt) == SQLITE_ROW { 21269 *(*int32)(unsafe.Pointer(bp + 72)) = -1 21270 iRank = sqlite3.Xsqlite3_column_int(tls, pStmt, 2) 21271 if (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3 != 0 { 21272 var nWord int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, 1) 21273 zWord = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 21274 iDist = editDist3Core(tls, (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3, zWord, nWord, (*MatchQuery)(unsafe.Pointer(p)).FpLang, bp+72) 21275 } else { 21276 zK1 = sqlite3.Xsqlite3_column_text(tls, pStmt, 3) 21277 if zK1 == uintptr(0) { 21278 continue 21279 } 21280 iDist = editdist1(tls, (*MatchQuery)(unsafe.Pointer(p)).FzPattern, zK1, uintptr(0)) 21281 } 21282 if iDist < 0 { 21283 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21284 break 21285 } 21286 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch++ 21287 21288 if (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist >= 0 { 21289 if iDist > (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist { 21290 continue 21291 } 21292 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc && (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum&SPELLFIX_IDXNUM_TOP == 0 { 21293 spellfix1ResizeCursor(tls, pCur, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc*2+10) 21294 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) { 21295 break 21296 } 21297 } 21298 } 21299 21300 iScore = spellfix1Score(tls, iDist, iRank) 21301 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21302 idx = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 21303 } else if iScore < iWorst { 21304 idx = idxWorst 21305 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord) 21306 } else { 21307 continue 21308 } 21309 21310 (*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))) 21311 if (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord == uintptr(0) { 21312 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21313 break 21314 } 21315 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRowid = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 21316 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRank = iRank 21317 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiDistance = iDist 21318 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiScore = iScore 21319 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiMatchlen = *(*int32)(unsafe.Pointer(bp + 72)) 21320 libc.Xmemcpy(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64+32, bp+8, uint64(iScope+1)) 21321 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21322 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow++ 21323 } 21324 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow == (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21325 iWorst = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa)).FiScore 21326 idxWorst = 0 21327 for i = 1; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21328 iScore = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(i)*64)).FiScore 21329 if iWorst < iScore { 21330 iWorst = iScore 21331 idxWorst = i 21332 } 21333 } 21334 } 21335 } 21336 rc = sqlite3.Xsqlite3_reset(tls, pStmt) 21337 if rc != 0 { 21338 (*MatchQuery)(unsafe.Pointer(p)).Frc = rc 21339 } 21340 } 21341 21342 func spellfix1FilterForMatch(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 21343 bp := tls.Alloc(176) 21344 defer tls.Free(176) 21345 21346 var idxNum int32 21347 var zMatchThis uintptr 21348 var pMatchStr3 uintptr 21349 var zPattern uintptr 21350 var nPattern int32 21351 var iLimit int32 21352 var iScope int32 21353 var iLang int32 21354 var zSql uintptr 21355 21356 var rc int32 21357 var idx int32 21358 var p uintptr 21359 21360 idxNum = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 21361 pMatchStr3 = uintptr(0) 21362 iLimit = 20 21363 iScope = 3 21364 iLang = 0 21365 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 21366 idx = 1 21367 p = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 21368 21369 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable != uintptr(0) && (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 21370 goto __1 21371 } 21372 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 21373 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 21374 goto __2 21375 } 21376 return SQLITE_NOMEM 21377 __2: 21378 ; 21379 libc.Xmemset(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 21380 rc = editDist3ConfigLoad(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21381 if !(rc != 0) { 21382 goto __3 21383 } 21384 return rc 21385 __3: 21386 ; 21387 __1: 21388 ; 21389 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(MatchQuery{}))) 21390 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 3 21391 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = -1 21392 21393 if !(idxNum&2 != 0) { 21394 goto __4 21395 } 21396 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21397 __4: 21398 ; 21399 if !(idxNum&4 != 0) { 21400 goto __5 21401 } 21402 iLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21403 if !(iLimit < 1) { 21404 goto __6 21405 } 21406 iLimit = 1 21407 __6: 21408 ; 21409 __5: 21410 ; 21411 if !(idxNum&8 != 0) { 21412 goto __7 21413 } 21414 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21415 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope < 1) { 21416 goto __8 21417 } 21418 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 1 21419 __8: 21420 ; 21421 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope > SPELLFIX_MX_HASH-2) { 21422 goto __9 21423 } 21424 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = SPELLFIX_MX_HASH - 2 21425 __9: 21426 ; 21427 __7: 21428 ; 21429 if !(idxNum&(16|32) != 0) { 21430 goto __10 21431 } 21432 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21433 if !(idxNum&16 != 0) { 21434 goto __11 21435 } 21436 (*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist-- 21437 __11: 21438 ; 21439 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist < 0) { 21440 goto __12 21441 } 21442 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = 0 21443 __12: 21444 ; 21445 __10: 21446 ; 21447 spellfix1ResetCursor(tls, pCur) 21448 spellfix1ResizeCursor(tls, pCur, iLimit) 21449 zMatchThis = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21450 if !(zMatchThis == uintptr(0)) { 21451 goto __13 21452 } 21453 return SQLITE_OK 21454 __13: 21455 ; 21456 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 != 0) { 21457 goto __14 21458 } 21459 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = editDist3FindLang(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, iLang) 21460 pMatchStr3 = editDist3FromStringNew(tls, (*MatchQuery)(unsafe.Pointer(bp+24)).FpLang, zMatchThis, -1) 21461 if !(pMatchStr3 == uintptr(0)) { 21462 goto __16 21463 } 21464 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21465 goto filter_exit 21466 __16: 21467 ; 21468 goto __15 21469 __14: 21470 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = uintptr(0) 21471 __15: 21472 ; 21473 zPattern = transliterate(tls, zMatchThis, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 21474 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21475 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern = zPattern 21476 if !(zPattern == uintptr(0)) { 21477 goto __17 21478 } 21479 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21480 goto filter_exit 21481 __17: 21482 ; 21483 nPattern = int32(libc.Xstrlen(tls, zPattern)) 21484 if !(int32(*(*int8)(unsafe.Pointer(zPattern + uintptr(nPattern-1)))) == '*') { 21485 goto __18 21486 } 21487 nPattern-- 21488 __18: 21489 ; 21490 zSql = sqlite3.Xsqlite3_mprintf(tls, 21491 ts+7650, 21492 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, iLang)) 21493 if !(zSql == uintptr(0)) { 21494 goto __19 21495 } 21496 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21497 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 21498 goto filter_exit 21499 __19: 21500 ; 21501 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, bp+168, uintptr(0)) 21502 sqlite3.Xsqlite3_free(tls, zSql) 21503 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang = iLang 21504 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpCur = pCur 21505 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpStmt = *(*uintptr)(unsafe.Pointer(bp + 168)) 21506 (*MatchQuery)(unsafe.Pointer(bp + 24)).FzPattern = zPattern 21507 (*MatchQuery)(unsafe.Pointer(bp + 24)).FnPattern = nPattern 21508 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpMatchStr3 = pMatchStr3 21509 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiLang = iLang 21510 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = rc 21511 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpConfig3 = (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 21512 if !((*MatchQuery)(unsafe.Pointer(bp+24)).Frc == SQLITE_OK) { 21513 goto __20 21514 } 21515 spellfix1RunQuery(tls, bp+24, zPattern, nPattern) 21516 __20: 21517 ; 21518 if !((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa != 0) { 21519 goto __21 21520 } 21521 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 { 21522 f func(*libc.TLS, uintptr, uintptr) int32 21523 }{spellfix1RowCompare}))) 21524 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop = iLimit 21525 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope = iScope 21526 goto __22 21527 __21: 21528 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21529 __22: 21530 ; 21531 filter_exit: 21532 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 21533 editDist3FromStringDelete(tls, pMatchStr3) 21534 return (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc 21535 } 21536 21537 func spellfix1FilterForFullScan(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 21538 bp := tls.Alloc(24) 21539 defer tls.Free(24) 21540 21541 var rc int32 = SQLITE_OK 21542 var idxNum int32 = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 21543 var zSql uintptr 21544 var pVTab uintptr = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 21545 spellfix1ResetCursor(tls, pCur) 21546 21547 zSql = sqlite3.Xsqlite3_mprintf(tls, 21548 ts+7750, 21549 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzTableName, 21550 func() uintptr { 21551 if idxNum&64 != 0 { 21552 return ts + 7809 21553 } 21554 return ts + 584 21555 }())) 21556 if zSql == uintptr(0) { 21557 return SQLITE_NOMEM 21558 } 21559 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).Fdb, zSql, -1, pCur+56, uintptr(0)) 21560 sqlite3.Xsqlite3_free(tls, zSql) 21561 if rc == SQLITE_OK && idxNum&64 != 0 { 21562 rc = sqlite3.Xsqlite3_bind_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 1, *(*uintptr)(unsafe.Pointer(argv))) 21563 } 21564 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = libc.AssignPtrInt32(pCur+36, 0) 21565 if rc == SQLITE_OK { 21566 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21567 if rc == SQLITE_ROW { 21568 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = -1 21569 rc = SQLITE_OK 21570 } 21571 if rc == SQLITE_DONE { 21572 rc = SQLITE_OK 21573 } 21574 } else { 21575 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 21576 } 21577 return rc 21578 } 21579 21580 func spellfix1Filter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 21581 var pCur uintptr = cur 21582 var rc int32 21583 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum = idxNum 21584 if idxNum&1 != 0 { 21585 rc = spellfix1FilterForMatch(tls, pCur, argc, argv) 21586 } else { 21587 rc = spellfix1FilterForFullScan(tls, pCur, argc, argv) 21588 } 21589 return rc 21590 } 21591 21592 func spellfix1Next(tls *libc.TLS, cur uintptr) int32 { 21593 var pCur uintptr = cur 21594 var rc int32 = SQLITE_OK 21595 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow { 21596 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21597 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21598 if rc != SQLITE_ROW { 21599 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 21600 } 21601 if rc == SQLITE_ROW || rc == SQLITE_DONE { 21602 rc = SQLITE_OK 21603 } 21604 } else { 21605 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow++ 21606 } 21607 } 21608 return rc 21609 } 21610 21611 func spellfix1Eof(tls *libc.TLS, cur uintptr) int32 { 21612 var pCur uintptr = cur 21613 return libc.Bool32((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow) 21614 } 21615 21616 func spellfix1Column(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 21617 bp := tls.Alloc(4) 21618 defer tls.Free(4) 21619 21620 var pCur uintptr = cur 21621 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21622 if i <= SPELLFIX_COL_LANGID { 21623 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, i)) 21624 } else { 21625 sqlite3.Xsqlite3_result_null(tls, ctx) 21626 } 21627 return SQLITE_OK 21628 } 21629 switch i { 21630 case SPELLFIX_COL_WORD: 21631 { 21632 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)) 21633 break 21634 21635 } 21636 case SPELLFIX_COL_RANK: 21637 { 21638 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) 21639 break 21640 21641 } 21642 case SPELLFIX_COL_DISTANCE: 21643 { 21644 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) 21645 break 21646 21647 } 21648 case SPELLFIX_COL_LANGID: 21649 { 21650 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang) 21651 break 21652 21653 } 21654 case SPELLFIX_COL_SCORE: 21655 { 21656 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) 21657 break 21658 21659 } 21660 case SPELLFIX_COL_MATCHLEN: 21661 { 21662 *(*int32)(unsafe.Pointer(bp)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiMatchlen 21663 if *(*int32)(unsafe.Pointer(bp)) < 0 { 21664 var nPattern int32 = int32(libc.Xstrlen(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern)) 21665 var zWord uintptr = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FzWord 21666 var nWord int32 = int32(libc.Xstrlen(tls, zWord)) 21667 21668 if nPattern > 0 && int32(*(*int8)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern + uintptr(nPattern-1)))) == '*' { 21669 var zTranslit uintptr 21670 var res int32 21671 zTranslit = transliterate(tls, zWord, nWord) 21672 if !(zTranslit != 0) { 21673 return SQLITE_NOMEM 21674 } 21675 res = editdist1(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern, zTranslit, bp) 21676 sqlite3.Xsqlite3_free(tls, zTranslit) 21677 if res < 0 { 21678 return SQLITE_NOMEM 21679 } 21680 *(*int32)(unsafe.Pointer(bp)) = translen_to_charlen(tls, zWord, nWord, *(*int32)(unsafe.Pointer(bp))) 21681 } else { 21682 *(*int32)(unsafe.Pointer(bp)) = utf8Charlen(tls, zWord, nWord) 21683 } 21684 } 21685 21686 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(bp))) 21687 break 21688 21689 } 21690 case SPELLFIX_COL_PHONEHASH: 21691 { 21692 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64+32, -1, uintptr(0)) 21693 break 21694 21695 } 21696 case SPELLFIX_COL_TOP: 21697 { 21698 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop) 21699 break 21700 21701 } 21702 case SPELLFIX_COL_SCOPE: 21703 { 21704 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope) 21705 break 21706 21707 } 21708 case SPELLFIX_COL_SRCHCNT: 21709 { 21710 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch) 21711 break 21712 21713 } 21714 default: 21715 { 21716 sqlite3.Xsqlite3_result_null(tls, ctx) 21717 break 21718 21719 } 21720 } 21721 return SQLITE_OK 21722 } 21723 21724 func spellfix1Rowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 21725 var pCur uintptr = cur 21726 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21727 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 4) 21728 } else { 21729 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiRowid 21730 } 21731 return SQLITE_OK 21732 } 21733 21734 func spellfix1GetConflict(tls *libc.TLS, db uintptr) uintptr { 21735 var eConflict int32 = sqlite3.Xsqlite3_vtab_on_conflict(tls, db) 21736 21737 return azConflict[eConflict-1] 21738 } 21739 21740 var azConflict = [5]uintptr{ 21741 ts + 7824, ts + 7833, ts + 7840, ts + 7840, ts + 7846, 21742 } 21743 21744 func spellfix1Update(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 21745 bp := tls.Alloc(284) 21746 defer tls.Free(284) 21747 21748 *(*int32)(unsafe.Pointer(bp + 280)) = SQLITE_OK 21749 var rowid sqlite3_int64 21750 var newRowid sqlite3_int64 21751 var p uintptr = pVTab 21752 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 21753 21754 if argc == 1 { 21755 rowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 21756 spellfix1DbExec(tls, bp+280, db, 21757 ts+7854, 21758 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, rowid)) 21759 } else { 21760 var zWord uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 21761 var nWord int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 21762 var iLang int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 21763 var iRank int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 21764 var zSoundslike uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 21765 var nSoundslike int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 21766 var zK1 uintptr 21767 var zK2 uintptr 21768 var i int32 21769 var c int8 21770 var zConflict uintptr = spellfix1GetConflict(tls, db) 21771 21772 if zWord == uintptr(0) { 21773 var zCmd uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 13*8))) 21774 if zCmd == uintptr(0) { 21775 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7897, 21776 libc.VaList(bp+24, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 21777 return SQLITE_CONSTRAINT | int32(5)<<8 21778 } 21779 if libc.Xstrcmp(tls, zCmd, ts+7933) == 0 { 21780 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 21781 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 21782 return SQLITE_OK 21783 } 21784 if libc.Xstrncmp(tls, zCmd, ts+7599, uint64(16)) == 0 { 21785 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 21786 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 21787 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21788 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = spellfix1Dequote(tls, zCmd+uintptr(16)) 21789 if (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable == uintptr(0) { 21790 return SQLITE_NOMEM 21791 } 21792 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 { 21793 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21794 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = uintptr(0) 21795 } 21796 return SQLITE_OK 21797 } 21798 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7944, 21799 libc.VaList(bp+32, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zCmd)) 21800 return SQLITE_ERROR 21801 } 21802 if iRank < 1 { 21803 iRank = 1 21804 } 21805 if zSoundslike != 0 { 21806 zK1 = transliterate(tls, zSoundslike, nSoundslike) 21807 } else { 21808 zK1 = transliterate(tls, zWord, nWord) 21809 } 21810 if zK1 == uintptr(0) { 21811 return SQLITE_NOMEM 21812 } 21813 for i = 0; int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zK1 + uintptr(i))))) != 0; i++ { 21814 if int32(c) >= 'A' && int32(c) <= 'Z' { 21815 *(*int8)(unsafe.Pointer(zK1 + uintptr(i))) += int8('a' - 'A') 21816 } 21817 } 21818 zK2 = phoneticHash(tls, zK1, i) 21819 if zK2 == uintptr(0) { 21820 sqlite3.Xsqlite3_free(tls, zK1) 21821 return SQLITE_NOMEM 21822 } 21823 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 21824 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_NULL { 21825 spellfix1DbExec(tls, bp+280, db, 21826 ts+7979, 21827 libc.VaList(bp+48, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 21828 iRank, iLang, zWord, zK1, zWord, zK2)) 21829 } else { 21830 newRowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 21831 spellfix1DbExec(tls, bp+280, db, 21832 ts+8065, 21833 libc.VaList(bp+112, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 21834 newRowid, iRank, iLang, zWord, zK1, zWord, zK2)) 21835 } 21836 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 21837 } else { 21838 rowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 21839 newRowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 21840 spellfix1DbExec(tls, bp+280, db, 21841 ts+8165, 21842 libc.VaList(bp+192, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, newRowid, iRank, iLang, 21843 zWord, zK1, zWord, zK2, rowid)) 21844 } 21845 sqlite3.Xsqlite3_free(tls, zK1) 21846 sqlite3.Xsqlite3_free(tls, zK2) 21847 } 21848 return *(*int32)(unsafe.Pointer(bp + 280)) 21849 } 21850 21851 func spellfix1Rename(tls *libc.TLS, pVTab uintptr, zNew uintptr) int32 { 21852 bp := tls.Alloc(36) 21853 defer tls.Free(36) 21854 21855 var p uintptr = pVTab 21856 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 21857 *(*int32)(unsafe.Pointer(bp + 32)) = SQLITE_OK 21858 var zNewName uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zNew)) 21859 if zNewName == uintptr(0) { 21860 return SQLITE_NOMEM 21861 } 21862 spellfix1DbExec(tls, bp+32, db, 21863 ts+8274, 21864 libc.VaList(bp+8, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zNewName)) 21865 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK { 21866 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 21867 (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName = zNewName 21868 } else { 21869 sqlite3.Xsqlite3_free(tls, zNewName) 21870 } 21871 return *(*int32)(unsafe.Pointer(bp + 32)) 21872 } 21873 21874 var spellfix1Module = sqlite3_module{ 21875 FxCreate: 0, 21876 FxConnect: 0, 21877 FxBestIndex: 0, 21878 FxDisconnect: 0, 21879 FxDestroy: 0, 21880 FxOpen: 0, 21881 FxClose: 0, 21882 FxFilter: 0, 21883 FxNext: 0, 21884 FxEof: 0, 21885 FxColumn: 0, 21886 FxRowid: 0, 21887 FxUpdate: 0, 21888 FxRename: 0, 21889 } 21890 21891 func spellfix1Register(tls *libc.TLS, db uintptr) int32 { 21892 var rc int32 = SQLITE_OK 21893 var i int32 21894 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8323, 1, 21895 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 21896 *(*uintptr)(unsafe.Pointer(&struct { 21897 f func(*libc.TLS, uintptr, int32, uintptr) 21898 }{transliterateSqlFunc})), uintptr(0), uintptr(0)) 21899 if rc == SQLITE_OK { 21900 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8342, 2, 21901 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 21902 *(*uintptr)(unsafe.Pointer(&struct { 21903 f func(*libc.TLS, uintptr, int32, uintptr) 21904 }{editdistSqlFunc})), uintptr(0), uintptr(0)) 21905 } 21906 if rc == SQLITE_OK { 21907 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8361, 1, 21908 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 21909 *(*uintptr)(unsafe.Pointer(&struct { 21910 f func(*libc.TLS, uintptr, int32, uintptr) 21911 }{phoneticHashSqlFunc})), uintptr(0), uintptr(0)) 21912 } 21913 if rc == SQLITE_OK { 21914 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8381, 1, 21915 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 21916 *(*uintptr)(unsafe.Pointer(&struct { 21917 f func(*libc.TLS, uintptr, int32, uintptr) 21918 }{scriptCodeSqlFunc})), uintptr(0), uintptr(0)) 21919 } 21920 if rc == SQLITE_OK { 21921 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8402, uintptr(unsafe.Pointer(&spellfix1Module)), uintptr(0)) 21922 } 21923 if rc == SQLITE_OK { 21924 rc = editDist3Install(tls, db) 21925 } 21926 21927 for i = 0; uint64(i) < uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{}))-uint64(1); i++ { 21928 } 21929 21930 return rc 21931 } 21932 21933 func sqlite3_spellfix_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 21934 _ = pApi 21935 21936 return spellfix1Register(tls, db) 21937 return SQLITE_OK 21938 } 21939 21940 var totype_one int32 = 1 21941 21942 func totypeIsspace(tls *libc.TLS, c uint8) int32 { 21943 return libc.Bool32(int32(c) == ' ' || int32(c) == '\t' || int32(c) == '\n' || int32(c) == '\v' || int32(c) == '\f' || int32(c) == '\r') 21944 } 21945 21946 func totypeIsdigit(tls *libc.TLS, c uint8) int32 { 21947 return libc.Bool32(int32(c) >= '0' && int32(c) <= '9') 21948 } 21949 21950 func totypeCompare2pow63(tls *libc.TLS, zNum uintptr) int32 { 21951 var c int32 = 0 21952 var i int32 21953 21954 var pow63 uintptr = ts + 8412 21955 for i = 0; c == 0 && i < 18; i++ { 21956 c = (int32(*(*int8)(unsafe.Pointer(zNum + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(pow63 + uintptr(i))))) * 10 21957 } 21958 if c == 0 { 21959 c = int32(*(*int8)(unsafe.Pointer(zNum + 18))) - '8' 21960 } 21961 return c 21962 } 21963 21964 func totypeAtoi64(tls *libc.TLS, zNum uintptr, pNum uintptr, length int32) int32 { 21965 var u sqlite3_uint64 = uint64(0) 21966 var neg int32 = 0 21967 var i int32 21968 var c int32 = 0 21969 var nonNum int32 = 0 21970 var zStart uintptr 21971 var zEnd uintptr = zNum + uintptr(length) 21972 21973 for zNum < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(zNum)))) != 0 { 21974 zNum++ 21975 } 21976 if zNum < zEnd { 21977 if int32(*(*int8)(unsafe.Pointer(zNum))) == '-' { 21978 neg = 1 21979 zNum++ 21980 } else if int32(*(*int8)(unsafe.Pointer(zNum))) == '+' { 21981 zNum++ 21982 } 21983 } 21984 zStart = zNum 21985 for zNum < zEnd && int32(*(*int8)(unsafe.Pointer(zNum))) == '0' { 21986 zNum++ 21987 } 21988 for i = 0; zNum+uintptr(i) < zEnd && libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(zNum + uintptr(i))))) >= '0' && c <= '9'; i++ { 21989 u = u*uint64(10) + sqlite3_uint64(c) - uint64('0') 21990 } 21991 if u > uint64(int64(0xffffffff)|int64(0x7fffffff)<<32) { 21992 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 21993 } else if neg != 0 { 21994 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = -sqlite3_int64(u) 21995 } else { 21996 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = sqlite3_int64(u) 21997 } 21998 if c != 0 && zNum+uintptr(i) < zEnd || i == 0 && zStart == zNum || i > 19 || nonNum != 0 { 21999 return 1 22000 } else if i < 19 { 22001 return 0 22002 } else { 22003 c = totypeCompare2pow63(tls, zNum) 22004 if c < 0 { 22005 return 0 22006 } else if c > 0 { 22007 return 1 22008 } else { 22009 if neg != 0 { 22010 return 0 22011 } 22012 return 2 22013 } 22014 } 22015 return int32(0) 22016 } 22017 22018 func totypeAtoF(tls *libc.TLS, z uintptr, pResult uintptr, length int32) int32 { 22019 var zEnd uintptr 22020 22021 var sign int32 22022 var s sqlite3_int64 22023 var d int32 22024 var esign int32 22025 var e int32 22026 var eValid int32 22027 var result float64 22028 var nDigits int32 22029 var nonNum int32 22030 var scale float64 22031 zEnd = z + uintptr(length) 22032 sign = 1 22033 s = int64(0) 22034 d = 0 22035 esign = 1 22036 e = 0 22037 eValid = 1 22038 nDigits = 0 22039 nonNum = 0 22040 22041 *(*float64)(unsafe.Pointer(pResult)) = 0.0 22042 22043 __1: 22044 if !(z < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22045 goto __2 22046 } 22047 z++ 22048 goto __1 22049 __2: 22050 ; 22051 if !(z >= zEnd) { 22052 goto __3 22053 } 22054 return 0 22055 __3: 22056 ; 22057 if !(int32(*(*int8)(unsafe.Pointer(z))) == '-') { 22058 goto __4 22059 } 22060 sign = -1 22061 z++ 22062 goto __5 22063 __4: 22064 if !(int32(*(*int8)(unsafe.Pointer(z))) == '+') { 22065 goto __6 22066 } 22067 z++ 22068 __6: 22069 ; 22070 __5: 22071 ; 22072 __7: 22073 if !(z < zEnd && int32(*(*int8)(unsafe.Pointer(z))) == '0') { 22074 goto __8 22075 } 22076 z++ 22077 nDigits++ 22078 goto __7 22079 __8: 22080 ; 22081 __9: 22082 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 22083 goto __10 22084 } 22085 s = s*int64(10) + sqlite3_int64(int32(*(*int8)(unsafe.Pointer(z)))-'0') 22086 z++ 22087 nDigits++ 22088 goto __9 22089 __10: 22090 ; 22091 __11: 22092 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22093 goto __12 22094 } 22095 z++ 22096 nDigits++ 22097 d++ 22098 goto __11 22099 __12: 22100 ; 22101 if !(z >= zEnd) { 22102 goto __13 22103 } 22104 goto totype_atof_calc 22105 __13: 22106 ; 22107 if !(int32(*(*int8)(unsafe.Pointer(z))) == '.') { 22108 goto __14 22109 } 22110 z++ 22111 22112 __15: 22113 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 22114 goto __16 22115 } 22116 s = s*int64(10) + sqlite3_int64(int32(*(*int8)(unsafe.Pointer(z)))-'0') 22117 z++ 22118 nDigits++ 22119 d-- 22120 goto __15 22121 __16: 22122 ; 22123 __17: 22124 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22125 goto __18 22126 } 22127 z++ 22128 nDigits++ 22129 goto __17 22130 __18: 22131 ; 22132 __14: 22133 ; 22134 if !(z >= zEnd) { 22135 goto __19 22136 } 22137 goto totype_atof_calc 22138 __19: 22139 ; 22140 if !(int32(*(*int8)(unsafe.Pointer(z))) == 'e' || int32(*(*int8)(unsafe.Pointer(z))) == 'E') { 22141 goto __20 22142 } 22143 z++ 22144 eValid = 0 22145 if !(z >= zEnd) { 22146 goto __21 22147 } 22148 goto totype_atof_calc 22149 __21: 22150 ; 22151 if !(int32(*(*int8)(unsafe.Pointer(z))) == '-') { 22152 goto __22 22153 } 22154 esign = -1 22155 z++ 22156 goto __23 22157 __22: 22158 if !(int32(*(*int8)(unsafe.Pointer(z))) == '+') { 22159 goto __24 22160 } 22161 z++ 22162 __24: 22163 ; 22164 __23: 22165 ; 22166 __25: 22167 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22168 goto __26 22169 } 22170 if e < 10000 { 22171 e = e*10 + (int32(*(*int8)(unsafe.Pointer(z))) - '0') 22172 } else { 22173 e = 10000 22174 } 22175 z++ 22176 eValid = 1 22177 goto __25 22178 __26: 22179 ; 22180 __20: 22181 ; 22182 if !(nDigits != 0 && eValid != 0) { 22183 goto __27 22184 } 22185 __28: 22186 if !(z < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22187 goto __29 22188 } 22189 z++ 22190 goto __28 22191 __29: 22192 ; 22193 __27: 22194 ; 22195 totype_atof_calc: 22196 e = e*esign + d 22197 if !(e < 0) { 22198 goto __30 22199 } 22200 esign = -1 22201 e = e * -1 22202 goto __31 22203 __30: 22204 esign = 1 22205 __31: 22206 ; 22207 if !!(s != 0) { 22208 goto __32 22209 } 22210 22211 if sign < 0 && nDigits != 0 { 22212 result = -libc.Float64FromFloat64(float64(0)) 22213 } else { 22214 result = float64(0) 22215 } 22216 goto __33 22217 __32: 22218 if !(esign > 0) { 22219 goto __34 22220 } 22221 __36: 22222 if !(s < (int64(0xffffffff)|int64(0x7fffffff)<<32)/int64(10) && e > 0) { 22223 goto __37 22224 } 22225 e-- 22226 s = s * int64(10) 22227 goto __36 22228 __37: 22229 ; 22230 goto __35 22231 __34: 22232 __38: 22233 if !(!(int32(s%int64(10)) != 0) && e > 0) { 22234 goto __39 22235 } 22236 e-- 22237 s = s / int64(10) 22238 goto __38 22239 __39: 22240 ; 22241 __35: 22242 ; 22243 if sign < 0 { 22244 s = -s 22245 } else { 22246 s = s 22247 } 22248 22249 if !(e != 0) { 22250 goto __40 22251 } 22252 scale = 1.0 22253 22254 if !(e > 307 && e < 342) { 22255 goto __42 22256 } 22257 __44: 22258 if !(e%308 != 0) { 22259 goto __45 22260 } 22261 scale = scale * 1.0e+1 22262 e = e - 1 22263 goto __44 22264 __45: 22265 ; 22266 if !(esign < 0) { 22267 goto __46 22268 } 22269 result = float64(s) / scale 22270 result = result / 1.0e+308 22271 goto __47 22272 __46: 22273 result = float64(s) * scale 22274 result = result * 1.0e+308 22275 __47: 22276 ; 22277 goto __43 22278 __42: 22279 if !(e >= 342) { 22280 goto __48 22281 } 22282 if !(esign < 0) { 22283 goto __50 22284 } 22285 result = 0.0 * float64(s) 22286 goto __51 22287 __50: 22288 result = libc.Float64(1e308) * libc.Float64(1e308) * float64(s) 22289 __51: 22290 ; 22291 goto __49 22292 __48: 22293 __52: 22294 if !(e%22 != 0) { 22295 goto __53 22296 } 22297 scale = scale * 1.0e+1 22298 e = e - 1 22299 goto __52 22300 __53: 22301 ; 22302 __54: 22303 if !(e > 0) { 22304 goto __55 22305 } 22306 scale = scale * 1.0e+22 22307 e = e - 22 22308 goto __54 22309 __55: 22310 ; 22311 if !(esign < 0) { 22312 goto __56 22313 } 22314 result = float64(s) / scale 22315 goto __57 22316 __56: 22317 result = float64(s) * scale 22318 __57: 22319 ; 22320 __49: 22321 ; 22322 __43: 22323 ; 22324 goto __41 22325 __40: 22326 result = float64(s) 22327 __41: 22328 ; 22329 __33: 22330 ; 22331 *(*float64)(unsafe.Pointer(pResult)) = result 22332 22333 return libc.Bool32(z >= zEnd && nDigits > 0 && eValid != 0 && nonNum == 0) 22334 } 22335 22336 func tointegerFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22337 bp := tls.Alloc(24) 22338 defer tls.Free(24) 22339 22340 _ = argc 22341 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 22342 case SQLITE_FLOAT: 22343 { 22344 var rVal float64 = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 22345 var iVal sqlite3_int64 = sqlite3_int64(rVal) 22346 if rVal == float64(iVal) { 22347 sqlite3.Xsqlite3_result_int64(tls, context, iVal) 22348 } 22349 break 22350 22351 } 22352 case SQLITE_INTEGER: 22353 { 22354 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22355 break 22356 22357 } 22358 case SQLITE_BLOB: 22359 { 22360 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 22361 if zBlob != 0 { 22362 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22363 if uint64(nBlob) == uint64(unsafe.Sizeof(sqlite3_int64(0))) { 22364 if int32(*(*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(&totype_one))))) == 0 { 22365 var i int32 22366 22367 for i = 0; uint64(i) < uint64(unsafe.Sizeof(sqlite3_int64(0))); i++ { 22368 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(sqlite3_int64(0)))-uint64(1)-uint64(i)))) 22369 } 22370 libc.Xmemcpy(tls, bp+8, bp, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 22371 } else { 22372 libc.Xmemcpy(tls, bp+8, zBlob, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 22373 } 22374 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))) 22375 } 22376 } 22377 break 22378 22379 } 22380 case SQLITE_TEXT: 22381 { 22382 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22383 if zStr != 0 { 22384 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22385 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) { 22386 if !(totypeAtoi64(tls, zStr, bp+16, nStr) != 0) { 22387 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 22388 } 22389 } 22390 } 22391 break 22392 22393 } 22394 default: 22395 { 22396 break 22397 22398 } 22399 } 22400 } 22401 22402 func torealFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22403 bp := tls.Alloc(24) 22404 defer tls.Free(24) 22405 22406 _ = argc 22407 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 22408 case SQLITE_FLOAT: 22409 { 22410 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22411 break 22412 22413 } 22414 case SQLITE_INTEGER: 22415 { 22416 var iVal sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 22417 var rVal float64 = float64(iVal) 22418 if iVal == sqlite3_int64(rVal) { 22419 sqlite3.Xsqlite3_result_double(tls, context, rVal) 22420 } 22421 break 22422 22423 } 22424 case SQLITE_BLOB: 22425 { 22426 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 22427 if zBlob != 0 { 22428 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22429 if uint64(nBlob) == uint64(unsafe.Sizeof(float64(0))) { 22430 if int32(*(*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(&totype_one))))) == 1 { 22431 var i int32 22432 22433 for i = 0; uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 22434 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(1)-uint64(i)))) 22435 } 22436 libc.Xmemcpy(tls, bp+8, bp, uint64(unsafe.Sizeof(float64(0)))) 22437 } else { 22438 libc.Xmemcpy(tls, bp+8, zBlob, uint64(unsafe.Sizeof(float64(0)))) 22439 } 22440 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 8))) 22441 } 22442 } 22443 break 22444 22445 } 22446 case SQLITE_TEXT: 22447 { 22448 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22449 if zStr != 0 { 22450 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22451 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr + uintptr(nStr-1)))) != 0) { 22452 if totypeAtoF(tls, zStr, bp+16, nStr) != 0 { 22453 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 16))) 22454 return 22455 } 22456 } 22457 } 22458 break 22459 22460 } 22461 default: 22462 { 22463 break 22464 22465 } 22466 } 22467 } 22468 22469 func sqlite3_totype_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 22470 var rc int32 = SQLITE_OK 22471 _ = pApi 22472 22473 _ = pzErrMsg 22474 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8431, 1, 22475 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 22476 *(*uintptr)(unsafe.Pointer(&struct { 22477 f func(*libc.TLS, uintptr, int32, uintptr) 22478 }{tointegerFunc})), uintptr(0), uintptr(0)) 22479 if rc == SQLITE_OK { 22480 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8441, 1, 22481 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 22482 *(*uintptr)(unsafe.Pointer(&struct { 22483 f func(*libc.TLS, uintptr, int32, uintptr) 22484 }{torealFunc})), uintptr(0), uintptr(0)) 22485 } 22486 return rc 22487 } 22488 22489 type UnionCsr1 = struct { 22490 Fbase sqlite3_vtab_cursor 22491 FpStmt uintptr 22492 FiMaxRowid sqlite3_int64 22493 FiTab int32 22494 F__ccgo_pad1 [4]byte 22495 } 22496 22497 type UnionCsr = UnionCsr1 22498 type UnionTab1 = struct { 22499 Fbase sqlite3_vtab 22500 Fdb uintptr 22501 FbSwarm int32 22502 FiPK int32 22503 FnSrc int32 22504 F__ccgo_pad1 [4]byte 22505 FaSrc uintptr 22506 FbHasContext int32 22507 F__ccgo_pad2 [4]byte 22508 FzSourceStr uintptr 22509 FpNotFound uintptr 22510 FpOpenClose uintptr 22511 FpClosable uintptr 22512 FnOpen int32 22513 FnMaxOpen int32 22514 } 22515 22516 type UnionTab = UnionTab1 22517 type UnionSrc1 = struct { 22518 FzDb uintptr 22519 FzTab uintptr 22520 FiMin sqlite3_int64 22521 FiMax sqlite3_int64 22522 FzFile uintptr 22523 FzContext uintptr 22524 FnUser int32 22525 F__ccgo_pad1 [4]byte 22526 Fdb uintptr 22527 FpNextClosable uintptr 22528 } 22529 22530 type UnionSrc = UnionSrc1 22531 22532 func unionMalloc(tls *libc.TLS, pRc uintptr, nByte sqlite3_int64) uintptr { 22533 var pRet uintptr 22534 22535 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 22536 pRet = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 22537 if pRet != 0 { 22538 libc.Xmemset(tls, pRet, 0, size_t(nByte)) 22539 } else { 22540 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 22541 } 22542 } else { 22543 pRet = uintptr(0) 22544 } 22545 return pRet 22546 } 22547 22548 func unionStrdup(tls *libc.TLS, pRc uintptr, zIn uintptr) uintptr { 22549 var zRet uintptr = uintptr(0) 22550 if zIn != 0 { 22551 var nByte sqlite3_int64 = sqlite3_int64(libc.Xstrlen(tls, zIn) + uint64(1)) 22552 zRet = unionMalloc(tls, pRc, nByte) 22553 if zRet != 0 { 22554 libc.Xmemcpy(tls, zRet, zIn, size_t(nByte)) 22555 } 22556 } 22557 return zRet 22558 } 22559 22560 func unionDequote(tls *libc.TLS, z uintptr) { 22561 if z != 0 { 22562 var q int8 = *(*int8)(unsafe.Pointer(z)) 22563 22564 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 22565 var iIn int32 = 1 22566 var iOut int32 = 0 22567 if int32(q) == '[' { 22568 q = int8(']') 22569 } 22570 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 22571 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 22572 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 22573 iIn++ 22574 break 22575 } else { 22576 iIn = iIn + 2 22577 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 22578 } 22579 } else { 22580 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 22581 } 22582 } 22583 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 22584 } 22585 } 22586 } 22587 22588 func unionPrepare(tls *libc.TLS, pRc uintptr, db uintptr, zSql uintptr, pzErr uintptr) uintptr { 22589 bp := tls.Alloc(16) 22590 defer tls.Free(16) 22591 22592 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 22593 22594 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 22595 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 22596 if rc != SQLITE_OK { 22597 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8448, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 22598 *(*int32)(unsafe.Pointer(pRc)) = rc 22599 } 22600 } 22601 return *(*uintptr)(unsafe.Pointer(bp + 8)) 22602 } 22603 22604 func unionPreparePrintf(tls *libc.TLS, pRc uintptr, pzErr uintptr, db uintptr, zFmt uintptr, va uintptr) uintptr { 22605 var pRet uintptr = uintptr(0) 22606 var zSql uintptr 22607 var ap va_list 22608 _ = ap 22609 ap = va 22610 22611 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 22612 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 22613 if zSql == uintptr(0) { 22614 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 22615 } else { 22616 pRet = unionPrepare(tls, pRc, db, zSql, pzErr) 22617 } 22618 } 22619 sqlite3.Xsqlite3_free(tls, zSql) 22620 22621 _ = ap 22622 return pRet 22623 } 22624 22625 func unionFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr, pzErr uintptr) { 22626 bp := tls.Alloc(8) 22627 defer tls.Free(8) 22628 22629 var db uintptr = sqlite3.Xsqlite3_db_handle(tls, pStmt) 22630 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 22631 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 22632 *(*int32)(unsafe.Pointer(pRc)) = rc 22633 if rc != 0 { 22634 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 22635 } 22636 } 22637 } 22638 22639 func unionInvokeOpenClose(tls *libc.TLS, pTab uintptr, pSrc uintptr, bClose int32, pzErr uintptr) int32 { 22640 bp := tls.Alloc(8) 22641 defer tls.Free(8) 22642 22643 var rc int32 = SQLITE_OK 22644 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 22645 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 22646 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 22647 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 22648 } 22649 sqlite3.Xsqlite3_bind_int(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2+(*UnionTab)(unsafe.Pointer(pTab)).FbHasContext, bClose) 22650 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 22651 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose)) { 22652 if pzErr != 0 { 22653 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 22654 } 22655 } 22656 } 22657 return rc 22658 } 22659 22660 func unionCloseSources(tls *libc.TLS, pTab uintptr, nMax int32) { 22661 for (*UnionTab)(unsafe.Pointer(pTab)).FpClosable != 0 && (*UnionTab)(unsafe.Pointer(pTab)).FnOpen > nMax { 22662 var p uintptr 22663 var pp uintptr 22664 for pp = pTab + 88; (*UnionSrc)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNextClosable != 0; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 22665 } 22666 p = *(*uintptr)(unsafe.Pointer(pp)) 22667 22668 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(p)).Fdb) 22669 (*UnionSrc)(unsafe.Pointer(p)).Fdb = uintptr(0) 22670 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 22671 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen-- 22672 unionInvokeOpenClose(tls, pTab, p, 1, uintptr(0)) 22673 } 22674 } 22675 22676 func unionDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 22677 if pVtab != 0 { 22678 var pTab uintptr = pVtab 22679 var i int32 22680 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 22681 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 22682 var bHaveSrcDb int32 = libc.Bool32((*UnionSrc)(unsafe.Pointer(pSrc)).Fdb != uintptr(0)) 22683 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 22684 if bHaveSrcDb != 0 { 22685 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 22686 } 22687 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb) 22688 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab) 22689 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile) 22690 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext) 22691 } 22692 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 22693 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 22694 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) 22695 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc) 22696 sqlite3.Xsqlite3_free(tls, pTab) 22697 } 22698 return SQLITE_OK 22699 } 22700 22701 func unionIsIntkeyTable(tls *libc.TLS, db uintptr, pSrc uintptr, pzErr uintptr) int32 { 22702 bp := tls.Alloc(36) 22703 defer tls.Free(36) 22704 22705 *(*int32)(unsafe.Pointer(bp + 32)) = 0 22706 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 22707 var rc int32 22708 22709 sqlite3.Xsqlite3_table_column_metadata(tls, 22710 db, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, ts+8462, bp+24, uintptr(0), uintptr(0), bp+32, uintptr(0)) 22711 rc = sqlite3.Xsqlite3_errcode(tls, db) 22712 if rc == SQLITE_ERROR || 22713 rc == SQLITE_OK && (!(*(*int32)(unsafe.Pointer(bp + 32)) != 0) || sqlite3.Xsqlite3_stricmp(tls, ts+8470, *(*uintptr)(unsafe.Pointer(bp + 24))) != 0) { 22714 rc = SQLITE_ERROR 22715 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8478, 22716 libc.VaList(bp, func() uintptr { 22717 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 22718 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 22719 } 22720 return ts + 584 22721 }(), 22722 func() uintptr { 22723 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 22724 return ts + 8506 22725 } 22726 return ts + 584 22727 }(), 22728 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 22729 } 22730 return rc 22731 } 22732 22733 func unionSourceToStr(tls *libc.TLS, pRc uintptr, pTab uintptr, pSrc uintptr, pzErr uintptr) uintptr { 22734 bp := tls.Alloc(4) 22735 defer tls.Free(4) 22736 22737 var zRet uintptr = uintptr(0) 22738 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 22739 var db uintptr = func() uintptr { 22740 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 22741 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 22742 } 22743 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 22744 }() 22745 *(*int32)(unsafe.Pointer(bp)) = unionIsIntkeyTable(tls, db, pSrc, pzErr) 22746 var pStmt uintptr = unionPrepare(tls, bp, db, 22747 ts+8508, pzErr) 22748 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 22749 sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, -1, uintptr(0)) 22750 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, -1, uintptr(0)) 22751 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 22752 var z uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 22753 zRet = unionStrdup(tls, bp, z) 22754 } 22755 unionFinalize(tls, bp, pStmt, pzErr) 22756 } 22757 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp)) 22758 } 22759 22760 return zRet 22761 } 22762 22763 func unionSourceCheck(tls *libc.TLS, pTab uintptr, pzErr uintptr) int32 { 22764 bp := tls.Alloc(4) 22765 defer tls.Free(4) 22766 22767 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 22768 var z0 uintptr = uintptr(0) 22769 var i int32 22770 22771 z0 = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, pzErr) 22772 for i = 1; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 22773 var z uintptr = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc+uintptr(i)*72, pzErr) 22774 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && sqlite3.Xsqlite3_stricmp(tls, z, z0) != 0 { 22775 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 22776 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 22777 } 22778 sqlite3.Xsqlite3_free(tls, z) 22779 } 22780 sqlite3.Xsqlite3_free(tls, z0) 22781 22782 return *(*int32)(unsafe.Pointer(bp)) 22783 } 22784 22785 func unionOpenDatabaseInner(tls *libc.TLS, pTab uintptr, pSrc uintptr, pzErr uintptr) int32 { 22786 bp := tls.Alloc(16) 22787 defer tls.Free(16) 22788 22789 var rc int32 22790 22791 rc = unionInvokeOpenClose(tls, pTab, pSrc, 0, pzErr) 22792 if rc != SQLITE_OK { 22793 return rc 22794 } 22795 22796 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 22797 if rc == SQLITE_OK { 22798 return rc 22799 } 22800 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 22801 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 22802 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 22803 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 22804 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 22805 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 22806 } 22807 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 22808 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound)) { 22809 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 22810 return rc 22811 } 22812 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 22813 } 22814 if rc != SQLITE_OK { 22815 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_errmsg(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb))) 22816 } 22817 return rc 22818 } 22819 22820 var openFlags int32 = SQLITE_OPEN_READONLY | SQLITE_OPEN_URI 22821 22822 func unionOpenDatabase(tls *libc.TLS, pTab uintptr, iSrc int32, pzErr uintptr) int32 { 22823 bp := tls.Alloc(4) 22824 defer tls.Free(4) 22825 22826 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 22827 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iSrc)*72 22828 22829 if (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb == uintptr(0) { 22830 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen-1) 22831 *(*int32)(unsafe.Pointer(bp)) = unionOpenDatabaseInner(tls, pTab, pSrc, pzErr) 22832 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 22833 var z uintptr = unionSourceToStr(tls, bp, pTab, pSrc, pzErr) 22834 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 22835 if (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr == uintptr(0) { 22836 (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr = z 22837 } else { 22838 if sqlite3.Xsqlite3_stricmp(tls, z, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) != 0 { 22839 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 22840 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 22841 } 22842 sqlite3.Xsqlite3_free(tls, z) 22843 } 22844 } 22845 } 22846 22847 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 22848 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 22849 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 22850 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen++ 22851 } else { 22852 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 22853 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 22854 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 22855 } 22856 } 22857 22858 return *(*int32)(unsafe.Pointer(bp)) 22859 } 22860 22861 func unionIncrRefcount(tls *libc.TLS, pTab uintptr, iTab int32) { 22862 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 22863 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iTab)*72 22864 22865 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 22866 var pp uintptr 22867 for pp = pTab + 88; *(*uintptr)(unsafe.Pointer(pp)) != pSrc; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 22868 } 22869 *(*uintptr)(unsafe.Pointer(pp)) = (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable 22870 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = uintptr(0) 22871 } 22872 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser++ 22873 } 22874 } 22875 22876 func unionFinalizeCsrStmt(tls *libc.TLS, pCsr uintptr) int32 { 22877 var rc int32 = SQLITE_OK 22878 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 22879 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 22880 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 22881 rc = sqlite3.Xsqlite3_finalize(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) 22882 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 22883 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 22884 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser-- 22885 22886 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 22887 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 22888 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 22889 } 22890 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen) 22891 } 22892 } 22893 return rc 22894 } 22895 22896 func union_isspace(tls *libc.TLS, c int8) int32 { 22897 return libc.Bool32(int32(c) == ' ' || int32(c) == '\n' || int32(c) == '\r' || int32(c) == '\t') 22898 } 22899 22900 func union_isidchar(tls *libc.TLS, c int8) int32 { 22901 return libc.Bool32(int32(c) >= 'a' && int32(c) <= 'z' || int32(c) >= 'A' && int32(c) < 'Z' || int32(c) >= '0' && int32(c) <= '9') 22902 } 22903 22904 func unionConfigureVtab(tls *libc.TLS, pRc uintptr, pTab uintptr, pStmt uintptr, nArg int32, azArg uintptr, pzErr uintptr) { 22905 bp := tls.Alloc(68) 22906 defer tls.Free(68) 22907 22908 *(*int32)(unsafe.Pointer(bp + 64)) = *(*int32)(unsafe.Pointer(pRc)) 22909 var i int32 22910 if *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK { 22911 (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext = libc.Bool32(sqlite3.Xsqlite3_column_count(tls, pStmt) > 4) 22912 } 22913 for i = 0; *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK && i < nArg; i++ { 22914 var zArg uintptr = unionStrdup(tls, bp+64, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8))) 22915 if zArg != 0 { 22916 var nOpt int32 = 0 22917 var zOpt uintptr 22918 var zVal uintptr 22919 22920 unionDequote(tls, zArg) 22921 zOpt = zArg 22922 for union_isspace(tls, *(*int8)(unsafe.Pointer(zOpt))) != 0 { 22923 zOpt++ 22924 } 22925 zVal = zOpt 22926 if int32(*(*int8)(unsafe.Pointer(zVal))) == ':' { 22927 zVal++ 22928 } 22929 for union_isidchar(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 22930 zVal++ 22931 } 22932 nOpt = int32((int64(zVal) - int64(zOpt)) / 1) 22933 22934 for union_isspace(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 22935 zVal++ 22936 } 22937 if int32(*(*int8)(unsafe.Pointer(zVal))) == '=' { 22938 *(*int8)(unsafe.Pointer(zOpt + uintptr(nOpt))) = int8(0) 22939 zVal++ 22940 for union_isspace(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 22941 zVal++ 22942 } 22943 zVal = unionStrdup(tls, bp+64, zVal) 22944 if zVal != 0 { 22945 unionDequote(tls, zVal) 22946 if int32(*(*int8)(unsafe.Pointer(zOpt))) == ':' { 22947 var iParam int32 = sqlite3.Xsqlite3_bind_parameter_index(tls, pStmt, zOpt) 22948 if iParam == 0 { 22949 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 22950 ts+8621, libc.VaList(bp, zOpt)) 22951 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 22952 } else { 22953 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3_bind_text(tls, pStmt, iParam, zVal, -1, libc.UintptrFromInt32(-1)) 22954 } 22955 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8658, 7) { 22956 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = libc.Xatoi(tls, zVal) 22957 if (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen <= 0 { 22958 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8666, 0) 22959 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 22960 } 22961 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8699, 7) { 22962 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 22963 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 22964 ts+8707, 0) 22965 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 22966 } else { 22967 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 22968 ts+8745, libc.VaList(bp+8, zVal, func() uintptr { 22969 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 22970 return ts + 8762 22971 } 22972 return ts + 584 22973 }())) 22974 } 22975 } else if nOpt == 9 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8765, 9) { 22976 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 22977 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 22978 ts+8775, 0) 22979 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 22980 } else { 22981 (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 22982 ts+8815, libc.VaList(bp+24, zVal, func() uintptr { 22983 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 22984 return ts + 8762 22985 } 22986 return ts + 584 22987 }())) 22988 } 22989 } else { 22990 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8834, libc.VaList(bp+40, zOpt)) 22991 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 22992 } 22993 sqlite3.Xsqlite3_free(tls, zVal) 22994 } 22995 } else { 22996 if i == 0 && nArg == 1 { 22997 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 22998 ts+8869, libc.VaList(bp+48, zArg)) 22999 } else { 23000 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8884, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)))) 23001 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23002 } 23003 } 23004 sqlite3.Xsqlite3_free(tls, zArg) 23005 } 23006 } 23007 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 64)) 23008 } 23009 23010 func unionConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 23011 bp := tls.Alloc(44) 23012 defer tls.Free(44) 23013 23014 var pTab uintptr = uintptr(0) 23015 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 23016 var bSwarm int32 = func() int32 { 23017 if pAux == uintptr(0) { 23018 return 0 23019 } 23020 return 1 23021 }() 23022 var zVtab uintptr = func() uintptr { 23023 if bSwarm != 0 { 23024 return ts + 8911 23025 } 23026 return ts + 8921 23027 }() 23028 23029 if sqlite3.Xsqlite3_stricmp(tls, ts+8931, *(*uintptr)(unsafe.Pointer(argv + 1*8))) != 0 { 23030 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8936, libc.VaList(bp, zVtab)) 23031 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23032 } else if argc < 4 || argc > 4 && bSwarm == 0 { 23033 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8977, libc.VaList(bp+8, zVtab)) 23034 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23035 } else { 23036 var nAlloc int32 = 0 23037 var pStmt uintptr = uintptr(0) 23038 var zArg uintptr = unionStrdup(tls, bp+40, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 23039 23040 unionDequote(tls, zArg) 23041 pStmt = unionPreparePrintf(tls, bp+40, pzErr, db, 23042 ts+9010, libc.VaList(bp+16, zArg)) 23043 23044 pTab = unionMalloc(tls, bp+40, int64(unsafe.Sizeof(UnionTab{}))) 23045 if pTab != 0 { 23046 (*UnionTab)(unsafe.Pointer(pTab)).Fdb = db 23047 (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm = bSwarm 23048 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = SWARMVTAB_MAX_OPEN 23049 } 23050 23051 if bSwarm != 0 { 23052 unionConfigureVtab(tls, bp+40, pTab, pStmt, argc-4, argv+4*8, pzErr) 23053 } 23054 23055 for *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23056 var zDb uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23057 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 23058 var iMin sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 2) 23059 var iMax sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 3) 23060 var pSrc uintptr 23061 23062 if nAlloc <= (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 23063 var nNew int32 23064 if nAlloc != 0 { 23065 nNew = nAlloc * 2 23066 } else { 23067 nNew = 8 23068 } 23069 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, 23070 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, uint64(nNew)*uint64(unsafe.Sizeof(UnionSrc{}))) 23071 if aNew == uintptr(0) { 23072 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_NOMEM 23073 break 23074 } else { 23075 libc.Xmemset(tls, aNew+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*72, 0, uint64(nNew-(*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*uint64(unsafe.Sizeof(UnionSrc{}))) 23076 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc = aNew 23077 nAlloc = nNew 23078 } 23079 } 23080 23081 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 { 23082 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9040, 0) 23083 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23084 } 23085 23086 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23087 pSrc = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(libc.PostIncInt32(&(*UnionTab)(unsafe.Pointer(pTab)).FnSrc, 1))*72 23088 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab = unionStrdup(tls, bp+40, zTab) 23089 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin = iMin 23090 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax = iMax 23091 if bSwarm != 0 { 23092 (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile = unionStrdup(tls, bp+40, zDb) 23093 } else { 23094 (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb = unionStrdup(tls, bp+40, zDb) 23095 } 23096 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23097 var zContext uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 4) 23098 (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext = unionStrdup(tls, bp+40, zContext) 23099 } 23100 } 23101 } 23102 unionFinalize(tls, bp+40, pStmt, pzErr) 23103 pStmt = uintptr(0) 23104 23105 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FnSrc == 0 { 23106 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9067, 0) 23107 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23108 } 23109 23110 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23111 if bSwarm != 0 { 23112 *(*int32)(unsafe.Pointer(bp + 40)) = unionOpenDatabase(tls, pTab, 0, pzErr) 23113 } else { 23114 *(*int32)(unsafe.Pointer(bp + 40)) = unionSourceCheck(tls, pTab, pzErr) 23115 } 23116 } 23117 23118 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23119 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc 23120 var tdb uintptr = func() uintptr { 23121 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23122 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 23123 } 23124 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23125 }() 23126 pStmt = unionPreparePrintf(tls, bp+40, pzErr, tdb, 23127 ts+9095, 23128 libc.VaList(bp+24, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb)) 23129 } 23130 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23131 var zDecl uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23132 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zDecl) 23133 (*UnionTab)(unsafe.Pointer(pTab)).FiPK = sqlite3.Xsqlite3_column_int(tls, pStmt, 1) 23134 } 23135 23136 unionFinalize(tls, bp+40, pStmt, pzErr) 23137 } 23138 23139 if *(*int32)(unsafe.Pointer(bp + 40)) != SQLITE_OK { 23140 unionDisconnect(tls, pTab) 23141 pTab = uintptr(0) 23142 } 23143 23144 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 23145 return *(*int32)(unsafe.Pointer(bp + 40)) 23146 } 23147 23148 func unionOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 23149 bp := tls.Alloc(4) 23150 defer tls.Free(4) 23151 23152 var pCsr uintptr 23153 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23154 _ = p 23155 pCsr = unionMalloc(tls, bp, int64(unsafe.Sizeof(UnionCsr{}))) 23156 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 23157 return *(*int32)(unsafe.Pointer(bp)) 23158 } 23159 23160 func unionClose(tls *libc.TLS, cur uintptr) int32 { 23161 var pCsr uintptr = cur 23162 unionFinalizeCsrStmt(tls, pCsr) 23163 sqlite3.Xsqlite3_free(tls, pCsr) 23164 return SQLITE_OK 23165 } 23166 23167 func doUnionNext(tls *libc.TLS, pCsr uintptr) int32 { 23168 bp := tls.Alloc(28) 23169 defer tls.Free(28) 23170 23171 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_OK 23172 23173 if sqlite3.Xsqlite3_step(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) != SQLITE_ROW { 23174 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 23175 *(*int32)(unsafe.Pointer(bp + 24)) = unionFinalizeCsrStmt(tls, pCsr) 23176 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23177 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab++ 23178 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 23179 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 23180 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid >= (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23181 *(*int32)(unsafe.Pointer(bp + 24)) = unionOpenDatabase(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab, pTab+16) 23182 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPreparePrintf(tls, bp+24, pTab+16, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb, 23183 ts+9273, 23184 libc.VaList(bp, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, 23185 func() uintptr { 23186 if (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax > (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid { 23187 return ts + 9305 23188 } 23189 return ts + 9322 23190 }(), 23191 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid)) 23192 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 23193 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 23194 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ROW 23195 } 23196 } 23197 } 23198 } 23199 } 23200 23201 return *(*int32)(unsafe.Pointer(bp + 24)) 23202 } 23203 23204 func unionNext(tls *libc.TLS, cur uintptr) int32 { 23205 var rc int32 23206 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_ROW { 23207 rc = doUnionNext(tls, cur) 23208 } 23209 return rc 23210 } 23211 23212 func unionColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 23213 var pCsr uintptr = cur 23214 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 23215 return SQLITE_OK 23216 } 23217 23218 func unionRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 23219 var pCsr uintptr = cur 23220 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, 0) 23221 return SQLITE_OK 23222 } 23223 23224 func unionEof(tls *libc.TLS, cur uintptr) int32 { 23225 var pCsr uintptr = cur 23226 return libc.Bool32((*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 23227 } 23228 23229 func unionFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 23230 bp := tls.Alloc(108) 23231 defer tls.Free(108) 23232 23233 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 23234 var pCsr uintptr = pVtabCursor 23235 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 23236 var i int32 23237 var zSql uintptr = uintptr(0) 23238 var bZero int32 = 0 23239 23240 var iMin sqlite3_int64 = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 23241 var iMax sqlite3_int64 = int64(0xffffffff) | int64(0x7fffffff)<<32 23242 23243 _ = idxStr 23244 23245 if idxNum == SQLITE_INDEX_CONSTRAINT_EQ { 23246 iMin = libc.AssignInt64(&iMax, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 23247 } else { 23248 if idxNum&(SQLITE_INDEX_CONSTRAINT_LE|SQLITE_INDEX_CONSTRAINT_LT) != 0 { 23249 iMax = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 23250 if idxNum&SQLITE_INDEX_CONSTRAINT_LT != 0 { 23251 if iMax == int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) { 23252 bZero = 1 23253 } else { 23254 iMax-- 23255 } 23256 } 23257 } 23258 23259 if idxNum&(SQLITE_INDEX_CONSTRAINT_GE|SQLITE_INDEX_CONSTRAINT_GT) != 0 { 23260 iMin = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(argc-1)*8))) 23261 if idxNum&SQLITE_INDEX_CONSTRAINT_GT != 0 { 23262 if iMin == int64(0xffffffff)|int64(0x7fffffff)<<32 { 23263 bZero = 1 23264 } else { 23265 iMin++ 23266 } 23267 } 23268 } 23269 } 23270 23271 unionFinalizeCsrStmt(tls, pCsr) 23272 if bZero != 0 { 23273 return SQLITE_OK 23274 } 23275 23276 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23277 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 23278 if iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax || iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23279 continue 23280 } 23281 23282 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9326, libc.VaList(bp, zSql, func() uintptr { 23283 if zSql != 0 { 23284 return ts + 9360 23285 } 23286 return ts + 584 23287 }(), func() uintptr { 23288 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23289 return ts + 5624 23290 } 23291 return ts + 584 23292 }(), func() uintptr { 23293 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23294 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 23295 } 23296 return ts + 584 23297 }(), func() uintptr { 23298 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23299 return ts + 5626 23300 } 23301 return ts + 584 23302 }(), (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 23303 if zSql == uintptr(0) { 23304 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 23305 break 23306 } 23307 23308 if iMin == iMax { 23309 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9372, libc.VaList(bp+48, zSql, iMin)) 23310 } else { 23311 var zWhere uintptr = ts + 9392 23312 if iMin != int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) && iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23313 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9398, libc.VaList(bp+64, zSql, iMin)) 23314 zWhere = ts + 9419 23315 } 23316 if iMax != int64(0xffffffff)|int64(0x7fffffff)<<32 && iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax { 23317 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9423, libc.VaList(bp+80, zSql, zWhere, iMax)) 23318 } 23319 } 23320 23321 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23322 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab = i 23323 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid = iMax 23324 *(*int32)(unsafe.Pointer(bp + 104)) = unionOpenDatabase(tls, pTab, i, pTab+16) 23325 break 23326 } 23327 } 23328 23329 if zSql == uintptr(0) { 23330 return *(*int32)(unsafe.Pointer(bp + 104)) 23331 } else { 23332 var db uintptr = func() uintptr { 23333 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23334 return (*UnionSrc)(unsafe.Pointer((*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72)).Fdb 23335 } 23336 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23337 }() 23338 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPrepare(tls, bp+104, db, zSql, pTab+16) 23339 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 23340 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 23341 } 23342 sqlite3.Xsqlite3_free(tls, zSql) 23343 } 23344 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 23345 return *(*int32)(unsafe.Pointer(bp + 104)) 23346 } 23347 return unionNext(tls, pVtabCursor) 23348 } 23349 23350 func unionBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 23351 var pTab uintptr = tab 23352 var iEq int32 = -1 23353 var iLt int32 = -1 23354 var iGt int32 = -1 23355 var i int32 23356 23357 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 23358 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 23359 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) { 23360 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) { 23361 case SQLITE_INDEX_CONSTRAINT_EQ: 23362 iEq = i 23363 break 23364 fallthrough 23365 case SQLITE_INDEX_CONSTRAINT_LE: 23366 fallthrough 23367 case SQLITE_INDEX_CONSTRAINT_LT: 23368 iLt = i 23369 break 23370 fallthrough 23371 case SQLITE_INDEX_CONSTRAINT_GE: 23372 fallthrough 23373 case SQLITE_INDEX_CONSTRAINT_GT: 23374 iGt = i 23375 break 23376 } 23377 } 23378 } 23379 23380 if iEq >= 0 { 23381 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1) 23382 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags = SQLITE_INDEX_SCAN_UNIQUE 23383 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 23384 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SQLITE_INDEX_CONSTRAINT_EQ 23385 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).FargvIndex = 1 23386 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).Fomit = uint8(1) 23387 } else { 23388 var iCons int32 = 1 23389 var idxNum int32 = 0 23390 var nRow sqlite3_int64 = int64(1000000) 23391 if iLt >= 0 { 23392 nRow = nRow / int64(2) 23393 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 23394 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).Fomit = uint8(1) 23395 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iLt)*12)).Fop) 23396 } 23397 if iGt >= 0 { 23398 nRow = nRow / int64(2) 23399 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 23400 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).Fomit = uint8(1) 23401 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iGt)*12)).Fop) 23402 } 23403 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = nRow 23404 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 * float64(nRow) 23405 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 23406 } 23407 23408 return SQLITE_OK 23409 } 23410 23411 func createUnionVtab(tls *libc.TLS, db uintptr) int32 { 23412 var rc int32 23413 23414 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8921, uintptr(unsafe.Pointer(&unionModule)), uintptr(0)) 23415 if rc == SQLITE_OK { 23416 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8911, uintptr(unsafe.Pointer(&unionModule)), db) 23417 } 23418 return rc 23419 } 23420 23421 var unionModule = sqlite3_module{ 23422 FxCreate: 0, 23423 FxConnect: 0, 23424 FxBestIndex: 0, 23425 FxDisconnect: 0, 23426 FxDestroy: 0, 23427 FxOpen: 0, 23428 FxClose: 0, 23429 FxFilter: 0, 23430 FxNext: 0, 23431 FxEof: 0, 23432 FxColumn: 0, 23433 FxRowid: 0, 23434 } 23435 23436 func sqlite3_unionvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 23437 var rc int32 = SQLITE_OK 23438 _ = pApi 23439 23440 _ = pzErrMsg 23441 rc = createUnionVtab(tls, db) 23442 return rc 23443 } 23444 23445 type wholenumber_cursor1 = struct { 23446 Fbase sqlite3_vtab_cursor 23447 FiValue sqlite3_int64 23448 FmxValue sqlite3_int64 23449 } 23450 23451 type wholenumber_cursor = wholenumber_cursor1 23452 23453 func wholenumberConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 23454 var pNew uintptr 23455 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 23456 if pNew == uintptr(0) { 23457 return SQLITE_NOMEM 23458 } 23459 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+9441) 23460 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 23461 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 23462 return SQLITE_OK 23463 } 23464 23465 func wholenumberDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 23466 sqlite3.Xsqlite3_free(tls, pVtab) 23467 return SQLITE_OK 23468 } 23469 23470 func wholenumberOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 23471 var pCur uintptr 23472 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(wholenumber_cursor{}))) 23473 if pCur == uintptr(0) { 23474 return SQLITE_NOMEM 23475 } 23476 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(wholenumber_cursor{}))) 23477 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 23478 return SQLITE_OK 23479 } 23480 23481 func wholenumberClose(tls *libc.TLS, cur uintptr) int32 { 23482 sqlite3.Xsqlite3_free(tls, cur) 23483 return SQLITE_OK 23484 } 23485 23486 func wholenumberNext(tls *libc.TLS, cur uintptr) int32 { 23487 var pCur uintptr = cur 23488 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue++ 23489 return SQLITE_OK 23490 } 23491 23492 func wholenumberColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 23493 var pCur uintptr = cur 23494 sqlite3.Xsqlite3_result_int64(tls, ctx, (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue) 23495 return SQLITE_OK 23496 } 23497 23498 func wholenumberRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 23499 var pCur uintptr = cur 23500 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue 23501 return SQLITE_OK 23502 } 23503 23504 func wholenumberEof(tls *libc.TLS, cur uintptr) int32 { 23505 var pCur uintptr = cur 23506 return libc.Bool32((*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue || (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue == int64(0)) 23507 } 23508 23509 func wholenumberFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 23510 var pCur uintptr = pVtabCursor 23511 var v sqlite3_int64 23512 var i int32 = 0 23513 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = int64(1) 23514 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 23515 if idxNum&3 != 0 { 23516 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) + sqlite3_int64(idxNum&1) 23517 if v > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v <= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 23518 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = v 23519 } 23520 i++ 23521 } 23522 if idxNum&12 != 0 { 23523 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) - sqlite3_int64(idxNum>>2&1) 23524 if v >= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v < (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 23525 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = v 23526 } 23527 } 23528 return SQLITE_OK 23529 } 23530 23531 func wholenumberBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 23532 var i int32 23533 var idxNum int32 = 0 23534 var argvIdx int32 = 1 23535 var ltIdx int32 = -1 23536 var gtIdx int32 = -1 23537 var pConstraint uintptr 23538 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 23539 i = 0 23540 __1: 23541 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 23542 goto __3 23543 } 23544 { 23545 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 23546 goto __2 23547 } 23548 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GT { 23549 idxNum = idxNum | 1 23550 ltIdx = i 23551 } 23552 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GE { 23553 idxNum = idxNum | 2 23554 ltIdx = i 23555 } 23556 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 23557 idxNum = idxNum | 4 23558 gtIdx = i 23559 } 23560 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE { 23561 idxNum = idxNum | 8 23562 gtIdx = i 23563 } 23564 23565 } 23566 goto __2 23567 __2: 23568 i++ 23569 pConstraint += 12 23570 goto __1 23571 goto __3 23572 __3: 23573 ; 23574 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 23575 if ltIdx >= 0 { 23576 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).FargvIndex = libc.PostIncInt32(&argvIdx, 1) 23577 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).Fomit = uint8(1) 23578 } 23579 if gtIdx >= 0 { 23580 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).FargvIndex = argvIdx 23581 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).Fomit = uint8(1) 23582 } 23583 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 23584 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 23585 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 23586 } 23587 if idxNum&12 == 0 { 23588 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e99 23589 } else if idxNum&3 == 0 { 23590 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 23591 } else { 23592 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 23593 } 23594 return SQLITE_OK 23595 } 23596 23597 var wholenumberModule = sqlite3_module{ 23598 FxCreate: 0, 23599 FxConnect: 0, 23600 FxBestIndex: 0, 23601 FxDisconnect: 0, 23602 FxDestroy: 0, 23603 FxOpen: 0, 23604 FxClose: 0, 23605 FxFilter: 0, 23606 FxNext: 0, 23607 FxEof: 0, 23608 FxColumn: 0, 23609 FxRowid: 0, 23610 } 23611 23612 func sqlite3_wholenumber_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 23613 var rc int32 = SQLITE_OK 23614 _ = pApi 23615 23616 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+9463, uintptr(unsafe.Pointer(&wholenumberModule)), uintptr(0)) 23617 return rc 23618 } 23619 23620 func test_rbu_delta(tls *libc.TLS, pCtx uintptr, nArg int32, apVal uintptr) { 23621 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 23622 var pScript uintptr 23623 var i int32 23624 23625 pScript = tcl.XTcl_NewObj(tls) 23626 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 23627 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, ts+9475, -1)) 23628 for i = 0; i < nArg; i++ { 23629 var pIn uintptr = *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)) 23630 var z uintptr = sqlite3.Xsqlite3_value_text(tls, pIn) 23631 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, z, -1)) 23632 } 23633 23634 if TCL_OK == tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_GLOBAL_ONLY) { 23635 var z uintptr = tcl.XTcl_GetStringResult(tls, interp) 23636 sqlite3.Xsqlite3_result_text(tls, pCtx, z, -1, libc.UintptrFromInt32(-1)) 23637 } else { 23638 tcl.XTcl_BackgroundError(tls, interp) 23639 } 23640 23641 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 23642 var _objPtr uintptr = pScript 23643 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 23644 tcl.XTclFreeObj(tls, _objPtr) 23645 } 23646 } 23647 } 23648 23649 func test_sqlite3rbu_cmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 23650 bp := tls.Alloc(496) 23651 defer tls.Free(496) 23652 23653 var ret int32 = TCL_OK 23654 var pRbu uintptr = clientData 23655 *(*[14]RbuCmd)(unsafe.Pointer(bp + 24)) = [14]RbuCmd{ 23656 {FzName: ts + 9485, FnArg: 2, FzUsage: ts + 584}, 23657 {FzName: ts + 9490, FnArg: 2, FzUsage: ts + 584}, 23658 {FzName: ts + 9496, FnArg: 2, FzUsage: ts + 584}, 23659 {FzName: ts + 9513, FnArg: 2, FzUsage: ts + 584}, 23660 {FzName: ts + 9523, FnArg: 3, FzUsage: ts + 9535}, 23661 {FzName: ts + 9539, FnArg: 2, FzUsage: ts + 584}, 23662 {FzName: ts + 9551, FnArg: 3, FzUsage: ts + 9554}, 23663 {FzName: ts + 9558, FnArg: 2, FzUsage: ts + 584}, 23664 {FzName: ts + 9564, FnArg: 2, FzUsage: ts + 584}, 23665 {FzName: ts + 9573, FnArg: 2, FzUsage: ts + 584}, 23666 {FzName: ts + 9588, FnArg: 3, FzUsage: ts + 9604}, 23667 {FzName: ts + 9610, FnArg: 2, FzUsage: ts + 584}, 23668 {FzName: ts + 9620, FnArg: 3, FzUsage: ts + 9535}, 23669 {}, 23670 } 23671 23672 if objc < 2 { 23673 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9631) 23674 return TCL_ERROR 23675 } 23676 ret = tcl.XTcl_GetIndexFromObjStruct(tls, 23677 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, int32(unsafe.Sizeof(RbuCmd{})), ts+9638, 0, bp+360) 23678 if ret != 0 { 23679 return TCL_ERROR 23680 } 23681 if objc != (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FnArg { 23682 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FzUsage) 23683 return TCL_ERROR 23684 } 23685 23686 switch *(*int32)(unsafe.Pointer(bp + 360)) { 23687 case 0: 23688 { 23689 var rc int32 = sqlite3.Xsqlite3rbu_step(tls, pRbu) 23690 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 23691 break 23692 23693 } 23694 23695 case 9: 23696 fallthrough 23697 case 1: 23698 { 23699 *(*uintptr)(unsafe.Pointer(bp + 368)) = uintptr(0) 23700 var rc int32 23701 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 23702 if *(*int32)(unsafe.Pointer(bp + 360)) == 1 { 23703 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, bp+368) 23704 } else { 23705 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, uintptr(0)) 23706 } 23707 if rc == SQLITE_OK || rc == SQLITE_DONE { 23708 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 23709 23710 } else { 23711 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 23712 if *(*uintptr)(unsafe.Pointer(bp + 368)) != 0 { 23713 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, *(*uintptr)(unsafe.Pointer(bp + 368)), 0)) 23714 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 368))) 23715 } 23716 ret = TCL_ERROR 23717 } 23718 break 23719 23720 } 23721 23722 case 2: 23723 { 23724 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, 0) 23725 var rc int32 = sqlite3.Xsqlite3_create_function(tls, 23726 db, ts+9475, -1, SQLITE_UTF8, interp, *(*uintptr)(unsafe.Pointer(&struct { 23727 f func(*libc.TLS, uintptr, int32, uintptr) 23728 }{test_rbu_delta})), uintptr(0), uintptr(0)) 23729 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 23730 ret = func() int32 { 23731 if rc == SQLITE_OK { 23732 return TCL_OK 23733 } 23734 return TCL_ERROR 23735 }() 23736 break 23737 23738 } 23739 23740 case 3: 23741 { 23742 var rc int32 = sqlite3.Xsqlite3rbu_savestate(tls, pRbu) 23743 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 23744 ret = func() int32 { 23745 if rc == SQLITE_OK { 23746 return TCL_OK 23747 } 23748 return TCL_ERROR 23749 }() 23750 break 23751 23752 } 23753 23754 case 12: 23755 fallthrough 23756 case 4: 23757 { 23758 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 360)) == 12)) 23759 var rc int32 = sqlite3.Xsqlite3_exec(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), uintptr(0), uintptr(0), uintptr(0)) 23760 if rc != SQLITE_OK { 23761 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, db), -1)) 23762 ret = TCL_ERROR 23763 } 23764 break 23765 23766 } 23767 23768 case 5: 23769 { 23770 var pObj uintptr 23771 sqlite3.Xsqlite3rbu_bp_progress(tls, pRbu, bp+376, bp+380) 23772 23773 pObj = tcl.XTcl_NewObj(tls) 23774 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 376)))) 23775 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 380)))) 23776 tcl.XTcl_SetObjResult(tls, interp, pObj) 23777 break 23778 23779 } 23780 23781 case 6: 23782 { 23783 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+384) != 0 { 23784 ret = TCL_ERROR 23785 } else { 23786 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, *(*int32)(unsafe.Pointer(bp + 384))) 23787 if sqlite3TestMakePointerStr(tls, interp, bp+388, db) != 0 { 23788 ret = TCL_ERROR 23789 } else { 23790 tcl.XTcl_SetResult(tls, interp, bp+388, uintptr(1)) 23791 } 23792 } 23793 break 23794 23795 } 23796 case 7: 23797 { 23798 *(*[6]uintptr)(unsafe.Pointer(bp + 440)) = [6]uintptr{uintptr(0), ts + 9649, ts + 9653, ts + 9658, ts + 9669, ts + 9674} 23799 var eState int32 = sqlite3.Xsqlite3rbu_state(tls, pRbu) 23800 23801 tcl.XTcl_SetResult(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 440 + uintptr(eState)*8)), uintptr(0)) 23802 break 23803 23804 } 23805 case 8: 23806 { 23807 var nStep sqlite3_int64 = sqlite3.Xsqlite3rbu_progress(tls, pRbu) 23808 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nStep)) 23809 break 23810 23811 } 23812 23813 case 10: 23814 { 23815 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+488) != 0 { 23816 ret = TCL_ERROR 23817 } else { 23818 *(*sqlite3_int64)(unsafe.Pointer(bp + 488)) = sqlite3.Xsqlite3rbu_temp_size_limit(tls, pRbu, *(*sqlite3_int64)(unsafe.Pointer(bp + 488))) 23819 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 488)))) 23820 } 23821 break 23822 23823 } 23824 case 11: 23825 { 23826 var sz sqlite3_int64 = sqlite3.Xsqlite3rbu_temp_size(tls, pRbu) 23827 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sz)) 23828 break 23829 23830 } 23831 23832 default: 23833 break 23834 } 23835 23836 return ret 23837 } 23838 23839 type RbuCmd = struct { 23840 FzName uintptr 23841 FnArg int32 23842 F__ccgo_pad1 [4]byte 23843 FzUsage uintptr 23844 } 23845 23846 func test_sqlite3rbu(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 23847 var pRbu uintptr = uintptr(0) 23848 var zCmd uintptr 23849 var zTarget uintptr 23850 var zRbu uintptr 23851 var zStateDb uintptr = uintptr(0) 23852 23853 if objc != 4 && objc != 5 { 23854 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9680) 23855 return TCL_ERROR 23856 } 23857 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 23858 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 23859 zRbu = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 23860 if objc == 5 { 23861 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 23862 } 23863 23864 pRbu = sqlite3.Xsqlite3rbu_open(tls, zTarget, zRbu, zStateDb) 23865 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 23866 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 23867 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 23868 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 23869 return TCL_OK 23870 } 23871 23872 func test_sqlite3rbu_vacuum(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 23873 var pRbu uintptr = uintptr(0) 23874 var zCmd uintptr 23875 var zTarget uintptr 23876 var zStateDb uintptr = uintptr(0) 23877 23878 if objc != 3 && objc != 4 { 23879 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9713) 23880 return TCL_ERROR 23881 } 23882 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 23883 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 23884 if objc == 4 { 23885 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 23886 } 23887 if zStateDb != 0 && int32(*(*int8)(unsafe.Pointer(zStateDb))) == 0 { 23888 zStateDb = uintptr(0) 23889 } 23890 23891 pRbu = sqlite3.Xsqlite3rbu_vacuum(tls, zTarget, zStateDb) 23892 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 23893 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 23894 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 23895 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 23896 return TCL_OK 23897 } 23898 23899 func test_sqlite3rbu_create_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 23900 var zName uintptr 23901 var zParent uintptr 23902 var rc int32 23903 23904 if objc != 3 && objc != 4 { 23905 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9739) 23906 return TCL_ERROR 23907 } 23908 23909 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 23910 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8))) 23911 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 23912 zParent = uintptr(0) 23913 } 23914 23915 rc = sqlite3.Xsqlite3rbu_create_vfs(tls, zName, zParent) 23916 if rc != SQLITE_OK { 23917 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 23918 return TCL_ERROR 23919 } else if objc == 4 { 23920 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, zName) 23921 sqlite3.Xsqlite3_vfs_register(tls, pVfs, 1) 23922 } 23923 23924 tcl.XTcl_ResetResult(tls, interp) 23925 return TCL_OK 23926 } 23927 23928 func test_sqlite3rbu_destroy_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 23929 var zName uintptr 23930 23931 if objc != 2 { 23932 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 23933 return TCL_ERROR 23934 } 23935 23936 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 23937 sqlite3.Xsqlite3rbu_destroy_vfs(tls, zName) 23938 return TCL_OK 23939 } 23940 23941 func test_sqlite3rbu_internal_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 23942 bp := tls.Alloc(16) 23943 defer tls.Free(16) 23944 23945 var db uintptr 23946 23947 if objc != 1 { 23948 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 23949 return TCL_ERROR 23950 } 23951 23952 db = sqlite3.Xsqlite3rbu_db(tls, uintptr(0), 0) 23953 if db != uintptr(0) { 23954 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9767, 0)) 23955 return TCL_ERROR 23956 } 23957 23958 return TCL_OK 23959 } 23960 23961 func SqliteRbu_Init(tls *libc.TLS, interp uintptr) int32 { 23962 var i int32 23963 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd))/uint64(unsafe.Sizeof(struct { 23964 FzName uintptr 23965 FxProc uintptr 23966 }{})); i++ { 23967 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd[i].FzName, aObjCmd[i].FxProc, uintptr(0), uintptr(0)) 23968 } 23969 return TCL_OK 23970 } 23971 23972 var aObjCmd = [5]struct { 23973 FzName uintptr 23974 FxProc uintptr 23975 }{ 23976 {FzName: ts + 9790, FxProc: 0}, 23977 {FzName: ts + 9801, FxProc: 0}, 23978 {FzName: ts + 9819, FxProc: 0}, 23979 {FzName: ts + 9841, FxProc: 0}, 23980 {FzName: ts + 9864, FxProc: 0}, 23981 } 23982 23983 type sqlite31 = sqlite32 23984 23985 type sqlite3_str = sqlite3_str1 23986 23987 type int_least8_t = int8 23988 type uint_least8_t = uint8 23989 type int_least16_t = int16 23990 type uint_least16_t = uint16 23991 type int_least32_t = int32 23992 type uint_least32_t = uint32 23993 type int_least64_t = int64 23994 type uint_least64_t = uint64 23995 23996 type int_fast8_t = int32 23997 type uint_fast8_t = uint32 23998 type int_fast16_t = int32 23999 type uint_fast16_t = uint32 24000 type int_fast32_t = int32 24001 type uint_fast32_t = uint32 24002 type int_fast64_t = int64 24003 type uint_fast64_t = uint64 24004 24005 type uintptr_t = uint64 24006 24007 type intmax_t = int64 24008 type uintmax_t = uint64 24009 24010 type imaxdiv_t = struct { 24011 Fquot intmax_t 24012 Frem intmax_t 24013 } 24014 24015 type Hash1 = struct { 24016 Fhtsize uint32 24017 Fcount uint32 24018 Ffirst uintptr 24019 Fht uintptr 24020 } 24021 24022 type Hash = Hash1 24023 type HashElem1 = struct { 24024 Fnext uintptr 24025 Fprev uintptr 24026 Fdata uintptr 24027 FpKey uintptr 24028 } 24029 24030 type HashElem = HashElem1 24031 24032 type _ht = struct { 24033 Fcount uint32 24034 F__ccgo_pad1 [4]byte 24035 Fchain uintptr 24036 } 24037 24038 type wint_t = int32 24039 24040 type mbstate_t = struct { 24041 F__ccgo_pad1 [0]uint64 24042 F__mbstate8 [128]int8 24043 } 24044 24045 type max_align_t = struct { 24046 F__max_align_ll int64 24047 F__max_align_ld float64 24048 } 24049 type i16 = int16_t 24050 type i8 = int8_t 24051 24052 type tRowcnt = u32 24053 24054 type LogEst = int16_t 24055 24056 type uptr = uintptr_t 24057 24058 type BusyHandler1 = struct { 24059 FxBusyHandler uintptr 24060 FpBusyArg uintptr 24061 FnBusy int32 24062 F__ccgo_pad1 [4]byte 24063 } 24064 24065 type BusyHandler = BusyHandler1 24066 24067 type AggInfo1 = struct { 24068 FdirectMode u8 24069 FuseSortingIdx u8 24070 F__ccgo_pad1 [2]byte 24071 FsortingIdx int32 24072 FsortingIdxPTab int32 24073 FnSortingColumn int32 24074 FmnReg int32 24075 FmxReg int32 24076 FpGroupBy uintptr 24077 FaCol uintptr 24078 FnColumn int32 24079 FnAccumulator int32 24080 FaFunc uintptr 24081 FnFunc int32 24082 FselId u32 24083 } 24084 24085 type AggInfo = AggInfo1 24086 type AuthContext1 = struct { 24087 FzAuthContext uintptr 24088 FpParse uintptr 24089 } 24090 24091 type AuthContext = AuthContext1 24092 type AutoincInfo1 = struct { 24093 FpNext uintptr 24094 FpTab uintptr 24095 FiDb int32 24096 FregCtr int32 24097 } 24098 24099 type AutoincInfo = AutoincInfo1 24100 type CollSeq1 = struct { 24101 FzName uintptr 24102 Fenc u8 24103 F__ccgo_pad1 [7]byte 24104 FpUser uintptr 24105 FxCmp uintptr 24106 FxDel uintptr 24107 } 24108 24109 type CollSeq = CollSeq1 24110 type Column1 = struct { 24111 FzCnName uintptr 24112 FnotNull uint8 24113 F__ccgo_pad1 [1]byte 24114 Faffinity int8 24115 FszEst u8 24116 FhName u8 24117 F__ccgo_pad2 [1]byte 24118 FiDflt u16 24119 FcolFlags u16 24120 F__ccgo_pad3 [6]byte 24121 } 24122 24123 type Column = Column1 24124 type Cte1 = struct { 24125 FzName uintptr 24126 FpCols uintptr 24127 FpSelect uintptr 24128 FzCteErr uintptr 24129 FpUse uintptr 24130 FeM10d u8 24131 F__ccgo_pad1 [7]byte 24132 } 24133 24134 type Cte = Cte1 24135 type CteUse1 = struct { 24136 FnUse int32 24137 FaddrM9e int32 24138 FregRtn int32 24139 FiCur int32 24140 FnRowEst LogEst 24141 FeM10d u8 24142 F__ccgo_pad1 [1]byte 24143 } 24144 24145 type CteUse = CteUse1 24146 type Db1 = struct { 24147 FzDbSName uintptr 24148 FpBt uintptr 24149 Fsafety_level u8 24150 FbSyncSet u8 24151 F__ccgo_pad1 [6]byte 24152 FpSchema uintptr 24153 } 24154 24155 type Db = Db1 24156 type DbFixer1 = struct { 24157 FpParse uintptr 24158 Fw Walker 24159 FpSchema uintptr 24160 FbTemp u8 24161 F__ccgo_pad1 [7]byte 24162 FzDb uintptr 24163 FzType uintptr 24164 FpName uintptr 24165 } 24166 24167 type DbFixer = DbFixer1 24168 type Schema1 = struct { 24169 Fschema_cookie int32 24170 FiGeneration int32 24171 FtblHash Hash 24172 FidxHash Hash 24173 FtrigHash Hash 24174 FfkeyHash Hash 24175 FpSeqTab uintptr 24176 Ffile_format u8 24177 Fenc u8 24178 FschemaFlags u16 24179 Fcache_size int32 24180 } 24181 24182 type Schema = Schema1 24183 type Expr1 = struct { 24184 Fop u8 24185 FaffExpr int8 24186 Fop2 u8 24187 F__ccgo_pad1 [1]byte 24188 Fflags u32 24189 Fu struct{ FzToken uintptr } 24190 FpLeft uintptr 24191 FpRight uintptr 24192 Fx struct{ FpList uintptr } 24193 FnHeight int32 24194 FiTable int32 24195 FiColumn ynVar 24196 FiAgg i16 24197 Fw struct{ FiJoin int32 } 24198 FpAggInfo uintptr 24199 Fy struct{ FpTab uintptr } 24200 } 24201 24202 type Expr = Expr1 24203 type ExprList1 = struct { 24204 FnExpr int32 24205 FnAlloc int32 24206 Fa [1]struct { 24207 FpExpr uintptr 24208 FzEName uintptr 24209 Ffg struct { 24210 F__ccgo_pad1 [0]uint32 24211 FsortFlags u8 24212 F__ccgo_pad2 [3]byte 24213 FeEName uint16 24214 F__ccgo_pad3 [2]byte 24215 } 24216 Fu struct { 24217 F__ccgo_pad1 [0]uint32 24218 Fx struct { 24219 FiOrderByCol u16 24220 FiAlias u16 24221 } 24222 } 24223 F__ccgo_pad1 [4]byte 24224 } 24225 } 24226 24227 type ExprList = ExprList1 24228 type FKey1 = struct { 24229 FpFrom uintptr 24230 FpNextFrom uintptr 24231 FzTo uintptr 24232 FpNextTo uintptr 24233 FpPrevTo uintptr 24234 FnCol int32 24235 FisDeferred u8 24236 FaAction [2]u8 24237 F__ccgo_pad1 [1]byte 24238 FapTrigger [2]uintptr 24239 FaCol [1]struct { 24240 FiFrom int32 24241 F__ccgo_pad1 [4]byte 24242 FzCol uintptr 24243 } 24244 } 24245 24246 type FKey = FKey1 24247 type FuncDestructor1 = struct { 24248 FnRef int32 24249 F__ccgo_pad1 [4]byte 24250 FxDestroy uintptr 24251 FpUserData uintptr 24252 } 24253 24254 type FuncDestructor = FuncDestructor1 24255 type FuncDef1 = struct { 24256 FnArg i8 24257 F__ccgo_pad1 [3]byte 24258 FfuncFlags u32 24259 FpUserData uintptr 24260 FpNext uintptr 24261 FxSFunc uintptr 24262 FxFinalize uintptr 24263 FxValue uintptr 24264 FxInverse uintptr 24265 FzName uintptr 24266 Fu struct{ FpHash uintptr } 24267 } 24268 24269 type FuncDef = FuncDef1 24270 type FuncDefHash1 = struct{ Fa [23]uintptr } 24271 24272 type FuncDefHash = FuncDefHash1 24273 type IdList1 = struct { 24274 FnId int32 24275 FeU4 u8 24276 F__ccgo_pad1 [3]byte 24277 Fa [1]struct { 24278 FzName uintptr 24279 Fu4 struct { 24280 F__ccgo_pad1 [0]uint64 24281 Fidx int32 24282 F__ccgo_pad2 [4]byte 24283 } 24284 } 24285 } 24286 24287 type IdList = IdList1 24288 type Index1 = struct { 24289 FzName uintptr 24290 FaiColumn uintptr 24291 FaiRowLogEst uintptr 24292 FpTable uintptr 24293 FzColAff uintptr 24294 FpNext uintptr 24295 FpSchema uintptr 24296 FaSortOrder uintptr 24297 FazColl uintptr 24298 FpPartIdxWhere uintptr 24299 FaColExpr uintptr 24300 Ftnum Pgno 24301 FszIdxRow LogEst 24302 FnKeyCol u16 24303 FnColumn u16 24304 FonError u8 24305 F__ccgo_pad1 [1]byte 24306 FidxType uint16 24307 F__ccgo_pad2 [2]byte 24308 FnSample int32 24309 FnSampleCol int32 24310 FaAvgEq uintptr 24311 FaSample uintptr 24312 FaiRowEst uintptr 24313 FnRowEst0 tRowcnt 24314 F__ccgo_pad3 [4]byte 24315 FcolNotIdxed Bitmask 24316 } 24317 24318 type Index = Index1 24319 type IndexSample1 = struct { 24320 Fp uintptr 24321 Fn int32 24322 F__ccgo_pad1 [4]byte 24323 FanEq uintptr 24324 FanLt uintptr 24325 FanDLt uintptr 24326 } 24327 24328 type IndexSample = IndexSample1 24329 type KeyInfo1 = struct { 24330 FnRef u32 24331 Fenc u8 24332 F__ccgo_pad1 [1]byte 24333 FnKeyField u16 24334 FnAllField u16 24335 F__ccgo_pad2 [6]byte 24336 Fdb uintptr 24337 FaSortFlags uintptr 24338 FaColl [1]uintptr 24339 } 24340 24341 type KeyInfo = KeyInfo1 24342 type Lookaside1 = struct { 24343 FbDisable u32 24344 Fsz u16 24345 FszTrue u16 24346 FbMalloced u8 24347 F__ccgo_pad1 [3]byte 24348 FnSlot u32 24349 FanStat [3]u32 24350 F__ccgo_pad2 [4]byte 24351 FpInit uintptr 24352 FpFree uintptr 24353 FpSmallInit uintptr 24354 FpSmallFree uintptr 24355 FpMiddle uintptr 24356 FpStart uintptr 24357 FpEnd uintptr 24358 } 24359 24360 type Lookaside = Lookaside1 24361 type LookasideSlot1 = struct{ FpNext uintptr } 24362 24363 type LookasideSlot = LookasideSlot1 24364 type Module1 = struct { 24365 FpModule uintptr 24366 FzName uintptr 24367 FnRefModule int32 24368 F__ccgo_pad1 [4]byte 24369 FpAux uintptr 24370 FxDestroy uintptr 24371 FpEpoTab uintptr 24372 } 24373 24374 type Module = Module1 24375 type NameContext1 = struct { 24376 FpParse uintptr 24377 FpSrcList uintptr 24378 FuNC struct{ FpEList uintptr } 24379 FpNext uintptr 24380 FnRef int32 24381 FnNcErr int32 24382 FncFlags int32 24383 F__ccgo_pad1 [4]byte 24384 FpWinSelect uintptr 24385 } 24386 24387 type NameContext = NameContext1 24388 type OnOrUsing1 = struct { 24389 FpOn uintptr 24390 FpUsing uintptr 24391 } 24392 24393 type OnOrUsing = OnOrUsing1 24394 type Parse1 = struct { 24395 Fdb uintptr 24396 FzErrMsg uintptr 24397 FpVdbe uintptr 24398 Frc int32 24399 FcolNamesSet u8 24400 FcheckSchema u8 24401 Fnested u8 24402 FnTempReg u8 24403 FisMultiWrite u8 24404 FmayAbort u8 24405 FhasCompound u8 24406 FokConstFactor u8 24407 FdisableLookaside u8 24408 FdisableVtab u8 24409 FwithinRJSubrtn u8 24410 F__ccgo_pad1 [1]byte 24411 FnRangeReg int32 24412 FiRangeReg int32 24413 FnErr int32 24414 FnTab int32 24415 FnMem int32 24416 FszOpAlloc int32 24417 FiSelfTab int32 24418 FnLabel int32 24419 FnLabelAlloc int32 24420 F__ccgo_pad2 [4]byte 24421 FaLabel uintptr 24422 FpConstExpr uintptr 24423 FconstraintName Token 24424 FwriteMask yDbMask 24425 FcookieMask yDbMask 24426 FregRowid int32 24427 FregRoot int32 24428 FnMaxArg int32 24429 FnSelect int32 24430 FnTableLock int32 24431 F__ccgo_pad3 [4]byte 24432 FaTableLock uintptr 24433 FpAinc uintptr 24434 FpToplevel uintptr 24435 FpTriggerTab uintptr 24436 FpTriggerPrg uintptr 24437 FpCleanup uintptr 24438 Fu1 struct { 24439 F__ccgo_pad1 [0]uint64 24440 FaddrCrTab int32 24441 F__ccgo_pad2 [4]byte 24442 } 24443 FnQueryLoop u32 24444 Foldmask u32 24445 Fnewmask u32 24446 FeTriggerOp u8 24447 FbReturning u8 24448 FeOrconf u8 24449 FdisableTriggers u8 24450 FaTempReg [8]int32 24451 FpOuterParse uintptr 24452 FsNameToken Token 24453 FsLastToken Token 24454 FnVar ynVar 24455 FiPkSortOrder u8 24456 Fexplain u8 24457 FeParseMode u8 24458 F__ccgo_pad4 [3]byte 24459 FnVtabLock int32 24460 FnHeight int32 24461 FaddrExplain int32 24462 F__ccgo_pad5 [4]byte 24463 FpVList uintptr 24464 FpReprepare uintptr 24465 FzTail uintptr 24466 FpNewTable uintptr 24467 FpNewIndex uintptr 24468 FpNewTrigger uintptr 24469 FzAuthContext uintptr 24470 FsArg Token 24471 FapVtabLock uintptr 24472 FpWith uintptr 24473 FpRename uintptr 24474 } 24475 24476 type Parse = Parse1 24477 type ParseCleanup1 = struct { 24478 FpNext uintptr 24479 FpPtr uintptr 24480 FxCleanup uintptr 24481 } 24482 24483 type ParseCleanup = ParseCleanup1 24484 type PreUpdate1 = struct { 24485 Fv uintptr 24486 FpCsr uintptr 24487 Fop int32 24488 F__ccgo_pad1 [4]byte 24489 FaRecord uintptr 24490 Fkeyinfo KeyInfo 24491 FpUnpacked uintptr 24492 FpNewUnpacked uintptr 24493 FiNewReg int32 24494 FiBlobWrite int32 24495 FiKey1 i64 24496 FiKey2 i64 24497 FaNew uintptr 24498 FpTab uintptr 24499 FpPk uintptr 24500 } 24501 24502 type PrintfArguments1 = struct { 24503 FnArg int32 24504 FnUsed int32 24505 FapArg uintptr 24506 } 24507 24508 type PrintfArguments = PrintfArguments1 24509 type Returning1 = struct { 24510 FpParse uintptr 24511 FpReturnEL uintptr 24512 FretTrig Trigger 24513 FretTStep TriggerStep 24514 FiRetCur int32 24515 FnRetCol int32 24516 FiRetReg int32 24517 F__ccgo_pad1 [4]byte 24518 } 24519 24520 type Returning = Returning1 24521 type Savepoint1 = struct { 24522 FzName uintptr 24523 FnDeferredCons i64 24524 FnDeferredImmCons i64 24525 FpNext uintptr 24526 } 24527 24528 type Savepoint = Savepoint1 24529 type Select1 = struct { 24530 Fop u8 24531 F__ccgo_pad1 [1]byte 24532 FnSelectRow LogEst 24533 FselFlags u32 24534 FiLimit int32 24535 FiOffset int32 24536 FselId u32 24537 FaddrOpenEphm [2]int32 24538 F__ccgo_pad2 [4]byte 24539 FpEList uintptr 24540 FpSrc uintptr 24541 FpWhere uintptr 24542 FpGroupBy uintptr 24543 FpHaving uintptr 24544 FpOrderBy uintptr 24545 FpPrior uintptr 24546 FpNext uintptr 24547 FpLimit uintptr 24548 FpWith uintptr 24549 FpWin uintptr 24550 FpWinDefn uintptr 24551 } 24552 24553 type Select = Select1 24554 type SelectDest1 = struct { 24555 FeDest u8 24556 F__ccgo_pad1 [3]byte 24557 FiSDParm int32 24558 FiSDParm2 int32 24559 FiSdst int32 24560 FnSdst int32 24561 F__ccgo_pad2 [4]byte 24562 FzAffSdst uintptr 24563 FpOrderBy uintptr 24564 } 24565 24566 type SelectDest = SelectDest1 24567 type SrcItem1 = struct { 24568 FpSchema uintptr 24569 FzDatabase uintptr 24570 FzName uintptr 24571 FzAlias uintptr 24572 FpTab uintptr 24573 FpSelect uintptr 24574 FaddrFillSub int32 24575 FregReturn int32 24576 FregResult int32 24577 Ffg struct { 24578 F__ccgo_pad1 [0]uint32 24579 Fjointype u8 24580 F__ccgo_pad2 [3]byte 24581 FnotIndexed uint16 24582 F__ccgo_pad3 [2]byte 24583 } 24584 FiCursor int32 24585 Fu3 struct{ FpOn uintptr } 24586 FcolUsed Bitmask 24587 Fu1 struct{ FzIndexedBy uintptr } 24588 Fu2 struct{ FpIBIndex uintptr } 24589 } 24590 24591 type SrcItem = SrcItem1 24592 type SrcList1 = struct { 24593 FnSrc int32 24594 FnAlloc u32 24595 Fa [1]SrcItem 24596 } 24597 24598 type SrcList = SrcList1 24599 type StrAccum = sqlite3_str1 24600 type Table1 = struct { 24601 FzName uintptr 24602 FaCol uintptr 24603 FpIndex uintptr 24604 FzColAff uintptr 24605 FpCheck uintptr 24606 Ftnum Pgno 24607 FnTabRef u32 24608 FtabFlags u32 24609 FiPKey i16 24610 FnCol i16 24611 FnNVCol i16 24612 FnRowLogEst LogEst 24613 FszTabRow LogEst 24614 FkeyConf u8 24615 FeTabType u8 24616 Fu struct { 24617 Ftab struct { 24618 FaddColOffset int32 24619 F__ccgo_pad1 [4]byte 24620 FpFKey uintptr 24621 FpDfltList uintptr 24622 } 24623 } 24624 FpTrigger uintptr 24625 FpSchema uintptr 24626 } 24627 24628 type Table = Table1 24629 type Token1 = struct { 24630 Fz uintptr 24631 Fn uint32 24632 F__ccgo_pad1 [4]byte 24633 } 24634 24635 type Token = Token1 24636 type Trigger1 = struct { 24637 FzName uintptr 24638 Ftable uintptr 24639 Fop u8 24640 Ftr_tm u8 24641 FbReturning u8 24642 F__ccgo_pad1 [5]byte 24643 FpWhen uintptr 24644 FpColumns uintptr 24645 FpSchema uintptr 24646 FpTabSchema uintptr 24647 Fstep_list uintptr 24648 FpNext uintptr 24649 } 24650 24651 type Trigger = Trigger1 24652 type TriggerPrg1 = struct { 24653 FpTrigger uintptr 24654 FpNext uintptr 24655 FpProgram uintptr 24656 Forconf int32 24657 FaColmask [2]u32 24658 F__ccgo_pad1 [4]byte 24659 } 24660 24661 type TriggerPrg = TriggerPrg1 24662 type TriggerStep1 = struct { 24663 Fop u8 24664 Forconf u8 24665 F__ccgo_pad1 [6]byte 24666 FpTrig uintptr 24667 FpSelect uintptr 24668 FzTarget uintptr 24669 FpFrom uintptr 24670 FpWhere uintptr 24671 FpExprList uintptr 24672 FpIdList uintptr 24673 FpUpsert uintptr 24674 FzSpan uintptr 24675 FpNext uintptr 24676 FpLast uintptr 24677 } 24678 24679 type TriggerStep = TriggerStep1 24680 type UnpackedRecord1 = struct { 24681 FpKeyInfo uintptr 24682 FaMem uintptr 24683 Fu struct{ Fz uintptr } 24684 Fn int32 24685 FnField u16 24686 Fdefault_rc i8 24687 FerrCode u8 24688 Fr1 i8 24689 Fr2 i8 24690 FeqSeen u8 24691 F__ccgo_pad1 [5]byte 24692 } 24693 24694 type UnpackedRecord = UnpackedRecord1 24695 type Upsert1 = struct { 24696 FpUpsertTarget uintptr 24697 FpUpsertTargetWhere uintptr 24698 FpUpsertSet uintptr 24699 FpUpsertWhere uintptr 24700 FpNextUpsert uintptr 24701 FisDoUpdate u8 24702 F__ccgo_pad1 [7]byte 24703 FpToFree uintptr 24704 FpUpsertIdx uintptr 24705 FpUpsertSrc uintptr 24706 FregData int32 24707 FiDataCur int32 24708 FiIdxCur int32 24709 F__ccgo_pad2 [4]byte 24710 } 24711 24712 type Upsert = Upsert1 24713 type VTable1 = struct { 24714 Fdb uintptr 24715 FpMod uintptr 24716 FpVtab uintptr 24717 FnRef int32 24718 FbConstraint u8 24719 FeVtabRisk u8 24720 F__ccgo_pad1 [2]byte 24721 FiSavepoint int32 24722 F__ccgo_pad2 [4]byte 24723 FpNext uintptr 24724 } 24725 24726 type VTable = VTable1 24727 type Walker1 = struct { 24728 FpParse uintptr 24729 FxExprCallback uintptr 24730 FxSelectCallback uintptr 24731 FxSelectCallback2 uintptr 24732 FwalkerDepth int32 24733 FeCode u16 24734 F__ccgo_pad1 [2]byte 24735 Fu struct{ FpNC uintptr } 24736 } 24737 24738 type Walker = Walker1 24739 type Window1 = struct { 24740 FzName uintptr 24741 FzBase uintptr 24742 FpPartition uintptr 24743 FpOrderBy uintptr 24744 FeFrmType u8 24745 FeStart u8 24746 FeEnd u8 24747 FbImplicitFrame u8 24748 FeExclude u8 24749 F__ccgo_pad1 [3]byte 24750 FpStart uintptr 24751 FpEnd uintptr 24752 FppThis uintptr 24753 FpNextWin uintptr 24754 FpFilter uintptr 24755 FpWFunc uintptr 24756 FiEphCsr int32 24757 FregAccum int32 24758 FregResult int32 24759 FcsrApp int32 24760 FregApp int32 24761 FregPart int32 24762 FpOwner uintptr 24763 FnBufferCol int32 24764 FiArgCol int32 24765 FregOne int32 24766 FregStartRowid int32 24767 FregEndRowid int32 24768 FbExprArgs u8 24769 F__ccgo_pad2 [3]byte 24770 } 24771 24772 type Window = Window1 24773 type With1 = struct { 24774 FnCte int32 24775 FbView int32 24776 FpOuter uintptr 24777 Fa [1]Cte 24778 } 24779 24780 type With = With1 24781 24782 type Bitmask = u64 24783 24784 type VList = int32 24785 24786 type Pgno = u32 24787 24788 type PgHdr1 = struct { 24789 FpPage uintptr 24790 FpData uintptr 24791 FpExtra uintptr 24792 FpCache uintptr 24793 FpDirty uintptr 24794 FpPager uintptr 24795 Fpgno Pgno 24796 Fflags u16 24797 FnRef i16 24798 FpDirtyNext uintptr 24799 FpDirtyPrev uintptr 24800 } 24801 24802 type DbPage = PgHdr1 24803 24804 type Btree1 = struct { 24805 Fdb uintptr 24806 FpBt uintptr 24807 FinTrans u8 24808 Fsharable u8 24809 Flocked u8 24810 FhasIncrblobCur u8 24811 FwantToLock int32 24812 FnBackup int32 24813 FiBDataVersion u32 24814 FpNext uintptr 24815 FpPrev uintptr 24816 Flock BtLock 24817 } 24818 24819 type BtCursor1 = struct { 24820 FeState u8 24821 FcurFlags u8 24822 FcurPagerFlags u8 24823 Fhints u8 24824 FskipNext int32 24825 FpBtree uintptr 24826 FaOverflow uintptr 24827 FpKey uintptr 24828 FpBt uintptr 24829 FpNext uintptr 24830 Finfo CellInfo 24831 FnKey i64 24832 FpgnoRoot Pgno 24833 FiPage i8 24834 FcurIntKey u8 24835 Fix u16 24836 FaiIdx [19]u16 24837 F__ccgo_pad1 [2]byte 24838 FpKeyInfo uintptr 24839 FpPage uintptr 24840 FapPage [19]uintptr 24841 } 24842 24843 type BtShared1 = struct { 24844 FpPager uintptr 24845 Fdb uintptr 24846 FpCursor uintptr 24847 FpPage1 uintptr 24848 FopenFlags u8 24849 FautoVacuum u8 24850 FincrVacuum u8 24851 FbDoTruncate u8 24852 FinTransaction u8 24853 Fmax1bytePayload u8 24854 FnReserveWanted u8 24855 F__ccgo_pad1 [1]byte 24856 FbtsFlags u16 24857 FmaxLocal u16 24858 FminLocal u16 24859 FmaxLeaf u16 24860 FminLeaf u16 24861 F__ccgo_pad2 [2]byte 24862 FpageSize u32 24863 FusableSize u32 24864 FnTransaction int32 24865 FnPage u32 24866 F__ccgo_pad3 [4]byte 24867 FpSchema uintptr 24868 FxFreeSchema uintptr 24869 Fmutex uintptr 24870 FpHasContent uintptr 24871 FnRef int32 24872 F__ccgo_pad4 [4]byte 24873 FpNext uintptr 24874 FpLock uintptr 24875 FpWriter uintptr 24876 FpTmpSpace uintptr 24877 FnPreformatSize int32 24878 F__ccgo_pad5 [4]byte 24879 } 24880 24881 type BtreePayload1 = struct { 24882 FpKey uintptr 24883 FnKey sqlite3_int64 24884 FpData uintptr 24885 FaMem uintptr 24886 FnMem u16 24887 F__ccgo_pad1 [2]byte 24888 FnData int32 24889 FnZero int32 24890 F__ccgo_pad2 [4]byte 24891 } 24892 24893 type BtreePayload = BtreePayload1 24894 24895 type Vdbe1 = struct { 24896 Fdb uintptr 24897 FpPrev uintptr 24898 FpNext uintptr 24899 FpParse uintptr 24900 FnVar ynVar 24901 F__ccgo_pad1 [2]byte 24902 FnMem int32 24903 FnCursor int32 24904 FcacheCtr u32 24905 Fpc int32 24906 Frc int32 24907 FnChange i64 24908 FiStatement int32 24909 F__ccgo_pad2 [4]byte 24910 FiCurrentTime i64 24911 FnFkConstraint i64 24912 FnStmtDefCons i64 24913 FnStmtDefImmCons i64 24914 FaMem uintptr 24915 FapArg uintptr 24916 FapCsr uintptr 24917 FaVar uintptr 24918 FaOp uintptr 24919 FnOp int32 24920 FnOpAlloc int32 24921 FaColName uintptr 24922 FpResultSet uintptr 24923 FzErrMsg uintptr 24924 FpVList uintptr 24925 FstartTime i64 24926 FnResColumn u16 24927 FerrorAction u8 24928 FminWriteFileFormat u8 24929 FprepFlags u8 24930 FeVdbeState u8 24931 F__ccgo_pad3 [2]byte 24932 Fexpired uint8 24933 F__ccgo_pad4 [3]byte 24934 FbtreeMask yDbMask 24935 FlockMask yDbMask 24936 FaCounter [9]u32 24937 FzSql uintptr 24938 FpFree uintptr 24939 FpFrame uintptr 24940 FpDelFrame uintptr 24941 FnFrame int32 24942 Fexpmask u32 24943 FpProgram uintptr 24944 FpAuxData uintptr 24945 } 24946 24947 type SubProgram1 = struct { 24948 FaOp uintptr 24949 FnOp int32 24950 FnMem int32 24951 FnCsr int32 24952 F__ccgo_pad1 [4]byte 24953 FaOnce uintptr 24954 Ftoken uintptr 24955 FpNext uintptr 24956 } 24957 24958 type SubProgram = SubProgram1 24959 24960 type VdbeOp1 = struct { 24961 Fopcode u8 24962 Fp4type int8 24963 Fp5 u16 24964 Fp1 int32 24965 Fp2 int32 24966 Fp3 int32 24967 Fp4 struct { 24968 F__ccgo_pad1 [0]uint64 24969 Fi int32 24970 F__ccgo_pad2 [4]byte 24971 } 24972 FzComment uintptr 24973 } 24974 24975 type p4union = struct { 24976 F__ccgo_pad1 [0]uint64 24977 Fi int32 24978 F__ccgo_pad2 [4]byte 24979 } 24980 24981 type VdbeOp = VdbeOp1 24982 24983 type VdbeOpList1 = struct { 24984 Fopcode u8 24985 Fp1 int8 24986 Fp2 int8 24987 Fp3 int8 24988 } 24989 24990 type VdbeOpList = VdbeOpList1 24991 24992 type RecordCompare = uintptr 24993 24994 type PgHdr = PgHdr1 24995 24996 type sqlite3_xauth = uintptr 24997 24998 type sqlite3InitInfo = struct { 24999 FnewTnum Pgno 25000 FiDb u8 25001 Fbusy u8 25002 F__ccgo_pad1 [2]byte 25003 ForphanTrigger uint8 25004 F__ccgo_pad2 [7]byte 25005 FazInit uintptr 25006 } 25007 25008 type sColMap = struct { 25009 FiFrom int32 25010 F__ccgo_pad1 [4]byte 25011 FzCol uintptr 25012 } 25013 25014 type AggInfo_col = struct { 25015 FpTab uintptr 25016 FpCExpr uintptr 25017 FiTable int32 25018 FiMem int32 25019 FiColumn i16 25020 FiSorterColumn i16 25021 F__ccgo_pad1 [4]byte 25022 } 25023 25024 type AggInfo_func = struct { 25025 FpFExpr uintptr 25026 FpFunc uintptr 25027 FiMem int32 25028 FiDistinct int32 25029 FiDistAddr int32 25030 F__ccgo_pad1 [4]byte 25031 } 25032 25033 type ynVar = i16 25034 25035 type ExprList_item = struct { 25036 FpExpr uintptr 25037 FzEName uintptr 25038 Ffg struct { 25039 F__ccgo_pad1 [0]uint32 25040 FsortFlags u8 25041 F__ccgo_pad2 [3]byte 25042 FeEName uint16 25043 F__ccgo_pad3 [2]byte 25044 } 25045 Fu struct { 25046 F__ccgo_pad1 [0]uint32 25047 Fx struct { 25048 FiOrderByCol u16 25049 FiAlias u16 25050 } 25051 } 25052 F__ccgo_pad1 [4]byte 25053 } 25054 25055 type IdList_item = struct { 25056 FzName uintptr 25057 Fu4 struct { 25058 F__ccgo_pad1 [0]uint64 25059 Fidx int32 25060 F__ccgo_pad2 [4]byte 25061 } 25062 } 25063 25064 type yDbMask = uint32 25065 25066 type InitData = struct { 25067 Fdb uintptr 25068 FpzErrMsg uintptr 25069 FiDb int32 25070 Frc int32 25071 FmInitFlags u32 25072 FnInitRow u32 25073 FmxPage Pgno 25074 F__ccgo_pad1 [4]byte 25075 } 25076 25077 type Sqlite3Config = struct { 25078 FbMemstat int32 25079 FbCoreMutex u8 25080 FbFullMutex u8 25081 FbOpenUri u8 25082 FbUseCis u8 25083 FbSmallMalloc u8 25084 FbExtraSchemaChecks u8 25085 F__ccgo_pad1 [2]byte 25086 FmxStrlen int32 25087 FneverCorrupt int32 25088 FszLookaside int32 25089 FnLookaside int32 25090 FnStmtSpill int32 25091 Fm sqlite3_mem_methods 25092 Fmutex sqlite3_mutex_methods 25093 Fpcache2 sqlite3_pcache_methods2 25094 FpHeap uintptr 25095 FnHeap int32 25096 FmnReq int32 25097 FmxReq int32 25098 F__ccgo_pad2 [4]byte 25099 FszMmap sqlite3_int64 25100 FmxMmap sqlite3_int64 25101 FpPage uintptr 25102 FszPage int32 25103 FnPage int32 25104 FmxParserStack int32 25105 FsharedCacheEnabled int32 25106 FszPma u32 25107 FisInit int32 25108 FinProgress int32 25109 FisMutexInit int32 25110 FisMallocInit int32 25111 FisPCacheInit int32 25112 FnRefInitMutex int32 25113 F__ccgo_pad3 [4]byte 25114 FpInitMutex uintptr 25115 FxLog uintptr 25116 FpLogArg uintptr 25117 FmxMemdbSize sqlite3_int64 25118 FxTestCallback uintptr 25119 FbLocaltimeFault int32 25120 F__ccgo_pad4 [4]byte 25121 FxAltLocaltime uintptr 25122 FiOnceResetThreshold int32 25123 FszSorterRef u32 25124 FiPrngSeed uint32 25125 F__ccgo_pad5 [4]byte 25126 } 25127 25128 type BoxGeomCtx1 = struct { 25129 Finterp uintptr 25130 FpScript uintptr 25131 } 25132 25133 type BoxGeomCtx = BoxGeomCtx1 25134 25135 type BoxQueryCtx1 = struct { 25136 Finterp uintptr 25137 FpScript uintptr 25138 } 25139 25140 type BoxQueryCtx = BoxQueryCtx1 25141 25142 func testDelUser(tls *libc.TLS, pCtx uintptr) { 25143 var p uintptr = pCtx 25144 tcl.XTcl_EvalObjEx(tls, (*BoxGeomCtx)(unsafe.Pointer(p)).Finterp, (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript, 0) 25145 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25146 var _objPtr uintptr = (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript 25147 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25148 tcl.XTclFreeObj(tls, _objPtr) 25149 } 25150 } 25151 sqlite3.Xsqlite3_free(tls, p) 25152 } 25153 25154 func invokeTclGeomCb(tls *libc.TLS, zName uintptr, p uintptr, nCoord int32, aCoord uintptr) int32 { 25155 bp := tls.Alloc(96) 25156 defer tls.Free(96) 25157 25158 var rc int32 = SQLITE_OK 25159 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext != 0 { 25160 var pCtx uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext 25161 var interp uintptr = (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp 25162 var pScript uintptr = uintptr(0) 25163 var pParam uintptr = uintptr(0) 25164 var pCoord uintptr = uintptr(0) 25165 var ii int32 25166 var pRes uintptr 25167 25168 pScript = tcl.XTcl_DuplicateObj(tls, (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript) 25169 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 25170 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 25171 25172 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)) 25173 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25174 25175 pParam = tcl.XTcl_NewObj(tls) 25176 for ii = 0; ii < (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam; ii++ { 25177 tcl.XTcl_ListObjAppendElement(tls, 25178 interp, pParam, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + uintptr(ii)*8)))) 25179 } 25180 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pParam) 25181 25182 pCoord = tcl.XTcl_NewObj(tls) 25183 for ii = 0; ii < nCoord; ii++ { 25184 tcl.XTcl_ListObjAppendElement(tls, interp, pCoord, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + uintptr(ii)*8)))) 25185 } 25186 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pCoord) 25187 25188 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([64]int8{}))-uint64(1)), bp+16, ts+9889, libc.VaList(bp+8, p)) 25189 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25190 25191 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 25192 if rc != TCL_OK { 25193 rc = SQLITE_ERROR 25194 } else { 25195 *(*int32)(unsafe.Pointer(bp + 80)) = 0 25196 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 25197 25198 pRes = tcl.XTcl_GetObjResult(tls, interp) 25199 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) != 0 { 25200 return TCL_ERROR 25201 } 25202 if *(*int32)(unsafe.Pointer(bp + 80)) > 0 { 25203 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88))))) 25204 if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9892) { 25205 *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) = 0.0 25206 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam = 1 25207 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9897) { 25208 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 25209 rc = SQLITE_ERROR 25210 } else { 25211 var pBGCtx uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(BoxGeomCtx{}))) 25212 if pBGCtx == uintptr(0) { 25213 rc = SQLITE_NOMEM 25214 } else { 25215 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).Finterp = interp 25216 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, pRes) 25217 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript)).FrefCount++ 25218 tcl.XTcl_ListObjReplace(tls, interp, (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript, 0, 1, 0, uintptr(0)) 25219 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pBGCtx 25220 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testDelUser})) 25221 } 25222 } 25223 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9902) { 25224 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 25225 rc = SQLITE_ERROR 25226 } 25227 } 25228 } 25229 } 25230 } 25231 return rc 25232 } 25233 25234 func box_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 25235 var ii int32 25236 25237 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != nCoord { 25238 invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) 25239 return SQLITE_ERROR 25240 } 25241 if invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) != 0 { 25242 return SQLITE_ERROR 25243 } 25244 25245 for ii = 0; ii < nCoord; ii = ii + 2 { 25246 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)) { 25247 *(*int32)(unsafe.Pointer(pRes)) = 0 25248 return SQLITE_OK 25249 } 25250 } 25251 25252 *(*int32)(unsafe.Pointer(pRes)) = 1 25253 25254 return SQLITE_OK 25255 } 25256 25257 func register_box_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25258 bp := tls.Alloc(80) 25259 defer tls.Free(80) 25260 25261 var pCtx uintptr 25262 25263 if objc != 3 { 25264 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 25265 return TCL_ERROR 25266 } 25267 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 25268 return TCL_ERROR 25269 } 25270 25271 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(uintptr(0)))) 25272 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp = interp 25273 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25274 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 25275 25276 sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), ts+9915, *(*uintptr)(unsafe.Pointer(&struct { 25277 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 25278 }{box_geom})), pCtx) 25279 25280 sqlite3.Xsqlite3_snprintf(tls, 64, bp+16, ts+9889, libc.VaList(bp, pCtx)) 25281 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25282 return TCL_OK 25283 } 25284 25285 func box_query(tls *libc.TLS, pInfo uintptr) int32 { 25286 bp := tls.Alloc(60) 25287 defer tls.Free(60) 25288 25289 *(*[4]uintptr)(unsafe.Pointer(bp)) = [4]uintptr{ts + 5854, ts + 9929, ts + 9936, uintptr(0)} 25290 var pCtx uintptr = (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FpContext 25291 var interp uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp 25292 var pEval uintptr 25293 var pArg uintptr 25294 var pTmp uintptr = uintptr(0) 25295 var rc int32 25296 var ii int32 25297 25298 pEval = tcl.XTcl_DuplicateObj(tls, (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript) 25299 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 25300 pArg = tcl.XTcl_NewObj(tls) 25301 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 25302 25303 pTmp = tcl.XTcl_NewObj(tls) 25304 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25305 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnParam; ii++ { 25306 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaParam + uintptr(ii)*8))) 25307 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25308 } 25309 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9942, -1)) 25310 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25311 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25312 var _objPtr uintptr = pTmp 25313 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25314 tcl.XTclFreeObj(tls, _objPtr) 25315 } 25316 } 25317 25318 pTmp = tcl.XTcl_NewObj(tls) 25319 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25320 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnCoord; ii++ { 25321 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaCoord + uintptr(ii)*8))) 25322 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25323 } 25324 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9949, -1)) 25325 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25326 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 25327 var _objPtr uintptr = pTmp 25328 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25329 tcl.XTclFreeObj(tls, _objPtr) 25330 } 25331 } 25332 25333 pTmp = tcl.XTcl_NewObj(tls) 25334 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25335 for ii = 0; ii <= (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel; ii++ { 25336 var p uintptr = tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FanQueue + uintptr(ii)*4)))) 25337 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25338 } 25339 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9956, -1)) 25340 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25341 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 25342 var _objPtr uintptr = pTmp 25343 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25344 tcl.XTclFreeObj(tls, _objPtr) 25345 } 25346 } 25347 25348 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9964, -1)) 25349 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiLevel)) 25350 25351 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9971, -1)) 25352 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel)) 25353 25354 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9979, -1)) 25355 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewWideIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiRowid)) 25356 25357 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9986, -1)) 25358 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewDoubleObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrParentScore)) 25359 25360 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9999, -1)) 25361 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, 25362 tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin)*8)), -1)) 25363 25364 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, pArg) 25365 if tcl.XTcl_EvalObjEx(tls, interp, pEval, 0) != 0 { 25366 rc = SQLITE_ERROR 25367 } else { 25368 rc = SQLITE_OK 25369 } 25370 25371 if rc == SQLITE_OK { 25372 *(*float64)(unsafe.Pointer(bp + 48)) = 0.0 25373 *(*int32)(unsafe.Pointer(bp + 32)) = 0 25374 *(*int32)(unsafe.Pointer(bp + 56)) = 0 25375 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 25376 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 25377 25378 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+32, bp+40) != 0 || 25379 *(*int32)(unsafe.Pointer(bp + 32)) != 2 || 25380 tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)) + 1*8)), bp+48) != 0 || 25381 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 { 25382 rc = SQLITE_ERROR 25383 } else { 25384 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrScore = *(*float64)(unsafe.Pointer(bp + 48)) 25385 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin = *(*int32)(unsafe.Pointer(bp + 56)) 25386 } 25387 } 25388 25389 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 25390 var _objPtr uintptr = pArg 25391 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25392 tcl.XTclFreeObj(tls, _objPtr) 25393 } 25394 } 25395 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 25396 var _objPtr uintptr = pEval 25397 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25398 tcl.XTclFreeObj(tls, _objPtr) 25399 } 25400 } 25401 return rc 25402 } 25403 25404 func box_query_destroy(tls *libc.TLS, p uintptr) { 25405 var pCtx uintptr = p 25406 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25407 var _objPtr uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript 25408 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25409 tcl.XTclFreeObj(tls, _objPtr) 25410 } 25411 } 25412 tcl.XTcl_Free(tls, pCtx) 25413 } 25414 25415 func register_box_query(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25416 bp := tls.Alloc(8) 25417 defer tls.Free(8) 25418 25419 var pCtx uintptr 25420 25421 if objc != 3 { 25422 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 25423 return TCL_ERROR 25424 } 25425 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 25426 return TCL_ERROR 25427 } 25428 25429 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(BoxQueryCtx{}))) 25430 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp = interp 25431 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25432 (*Tcl_Obj)(unsafe.Pointer((*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 25433 25434 sqlite3.Xsqlite3_rtree_query_callback(tls, 25435 *(*uintptr)(unsafe.Pointer(bp)), ts+10019, *(*uintptr)(unsafe.Pointer(&struct { 25436 f func(*libc.TLS, uintptr) int32 25437 }{box_query})), pCtx, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{box_query_destroy}))) 25438 25439 tcl.XTcl_ResetResult(tls, interp) 25440 return TCL_OK 25441 } 25442 25443 func Sqlitetestrtreedoc_Init(tls *libc.TLS, interp uintptr) int32 { 25444 tcl.XTcl_CreateObjCommand(tls, interp, ts+10024, *(*uintptr)(unsafe.Pointer(&struct { 25445 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 25446 }{register_box_geom})), uintptr(0), uintptr(0)) 25447 tcl.XTcl_CreateObjCommand(tls, interp, ts+10042, *(*uintptr)(unsafe.Pointer(&struct { 25448 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 25449 }{register_box_query})), uintptr(0), uintptr(0)) 25450 return TCL_OK 25451 } 25452 25453 type TestSession1 = struct { 25454 FpSession uintptr 25455 Finterp uintptr 25456 FpFilterScript uintptr 25457 } 25458 25459 type TestSession = TestSession1 25460 25461 type TestStreamInput1 = struct { 25462 FnStream int32 25463 F__ccgo_pad1 [4]byte 25464 FaData uintptr 25465 FnData int32 25466 FiData int32 25467 } 25468 25469 type TestStreamInput = TestStreamInput1 25470 25471 func dbHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 25472 bp := tls.Alloc(88) 25473 defer tls.Free(88) 25474 25475 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 25476 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 25477 return TCL_ERROR 25478 } 25479 25480 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 25481 return TCL_OK 25482 } 25483 25484 func sql_exec_changeset(tls *libc.TLS, db uintptr, zSql uintptr, pnChangeset uintptr, ppChangeset uintptr) int32 { 25485 bp := tls.Alloc(8) 25486 defer tls.Free(8) 25487 25488 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 25489 var rc int32 25490 25491 rc = sqlite3.Xsqlite3session_create(tls, db, ts+85, bp) 25492 25493 if rc == SQLITE_OK { 25494 rc = sqlite3.Xsqlite3session_attach(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0)) 25495 } 25496 25497 if rc == SQLITE_OK { 25498 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 25499 } 25500 25501 if rc == SQLITE_OK { 25502 rc = sqlite3.Xsqlite3session_changeset(tls, *(*uintptr)(unsafe.Pointer(bp)), pnChangeset, ppChangeset) 25503 } 25504 25505 sqlite3.Xsqlite3session_delete(tls, *(*uintptr)(unsafe.Pointer(bp))) 25506 25507 return rc 25508 } 25509 25510 func test_sql_exec_changeset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25511 bp := tls.Alloc(40) 25512 defer tls.Free(40) 25513 25514 var zSql uintptr 25515 25516 var rc int32 25517 25518 if objc != 3 { 25519 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 25520 return TCL_ERROR 25521 } 25522 if dbHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 25523 return TCL_ERROR 25524 } 25525 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25526 25527 rc = sql_exec_changeset(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zSql, bp+24, bp+32) 25528 if rc != SQLITE_OK { 25529 tcl.XTcl_ResetResult(tls, interp) 25530 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+10068, 0)) 25531 return TCL_ERROR 25532 } 25533 25534 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 24)))) 25535 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 25536 return TCL_OK 25537 } 25538 25539 func test_tcl_integer(tls *libc.TLS, interp uintptr, zVar uintptr) int32 { 25540 bp := tls.Alloc(4) 25541 defer tls.Free(4) 25542 25543 var pObj uintptr 25544 *(*int32)(unsafe.Pointer(bp)) = 0 25545 var pName uintptr = tcl.XTcl_NewStringObj(tls, zVar, -1) 25546 (*Tcl_Obj)(unsafe.Pointer(pName)).FrefCount++ 25547 pObj = tcl.XTcl_ObjGetVar2(tls, interp, pName, uintptr(0), TCL_GLOBAL_ONLY) 25548 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25549 var _objPtr uintptr = pName 25550 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25551 tcl.XTclFreeObj(tls, _objPtr) 25552 } 25553 } 25554 if pObj != 0 { 25555 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pObj, bp) 25556 } 25557 return *(*int32)(unsafe.Pointer(bp)) 25558 } 25559 25560 func test_session_error(tls *libc.TLS, interp uintptr, rc int32, zErr uintptr) int32 { 25561 bp := tls.Alloc(24) 25562 defer tls.Free(24) 25563 25564 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 25565 if zErr != 0 { 25566 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, zErr, 0)) 25567 sqlite3.Xsqlite3_free(tls, zErr) 25568 } 25569 return TCL_ERROR 25570 } 25571 25572 func test_table_filter(tls *libc.TLS, pCtx uintptr, zTbl uintptr) int32 { 25573 bp := tls.Alloc(4) 25574 defer tls.Free(4) 25575 25576 var p uintptr = pCtx 25577 var pEval uintptr 25578 var rc int32 25579 *(*int32)(unsafe.Pointer(bp)) = 0 25580 25581 pEval = tcl.XTcl_DuplicateObj(tls, (*TestSession)(unsafe.Pointer(p)).FpFilterScript) 25582 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 25583 rc = tcl.XTcl_ListObjAppendElement(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 25584 if rc == TCL_OK { 25585 rc = tcl.XTcl_EvalObjEx(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 25586 } 25587 if rc == TCL_OK { 25588 rc = tcl.XTcl_GetBooleanFromObj(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestSession)(unsafe.Pointer(p)).Finterp), bp) 25589 } 25590 if rc != TCL_OK { 25591 tcl.XTcl_BackgroundError(tls, (*TestSession)(unsafe.Pointer(p)).Finterp) 25592 } 25593 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25594 var _objPtr uintptr = pEval 25595 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25596 tcl.XTclFreeObj(tls, _objPtr) 25597 } 25598 } 25599 25600 return *(*int32)(unsafe.Pointer(bp)) 25601 } 25602 25603 type TestSessionsBlob1 = struct { 25604 Fp uintptr 25605 Fn int32 25606 F__ccgo_pad1 [4]byte 25607 } 25608 25609 type TestSessionsBlob = TestSessionsBlob1 25610 25611 func testStreamOutput(tls *libc.TLS, pCtx uintptr, pData uintptr, nData int32) int32 { 25612 var pBlob uintptr = pCtx 25613 var pNew uintptr 25614 25615 pNew = sqlite3.Xsqlite3_realloc(tls, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn+nData) 25616 if pNew == uintptr(0) { 25617 return SQLITE_NOMEM 25618 } 25619 (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp = pNew 25620 libc.Xmemcpy(tls, pNew+uintptr((*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn), pData, uint64(nData)) 25621 *(*int32)(unsafe.Pointer(pBlob + 8)) += nData 25622 return SQLITE_OK 25623 } 25624 25625 func test_session_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25626 bp := tls.Alloc(44) 25627 defer tls.Free(44) 25628 25629 var p uintptr = clientData 25630 var pSession uintptr = (*TestSession)(unsafe.Pointer(p)).FpSession 25631 25632 var rc int32 25633 25634 if objc < 2 { 25635 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 25636 return TCL_ERROR 25637 } 25638 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 25639 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub)), int32(unsafe.Sizeof(SessionSubcmd{})), ts+2014, 0, bp) 25640 if rc != TCL_OK { 25641 return rc 25642 } 25643 if objc != 2+aSub[*(*int32)(unsafe.Pointer(bp))].FnArg { 25644 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub[*(*int32)(unsafe.Pointer(bp))].FzMsg) 25645 return TCL_ERROR 25646 } 25647 25648 switch *(*int32)(unsafe.Pointer(bp)) { 25649 case 0: 25650 { 25651 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25652 if int32(*(*int8)(unsafe.Pointer(zArg))) == '*' && int32(*(*int8)(unsafe.Pointer(zArg + 1))) == 0 { 25653 zArg = uintptr(0) 25654 } 25655 rc = sqlite3.Xsqlite3session_attach(tls, pSession, zArg) 25656 if rc != SQLITE_OK { 25657 return test_session_error(tls, interp, rc, uintptr(0)) 25658 } 25659 break 25660 25661 } 25662 25663 case 7: 25664 fallthrough 25665 case 1: 25666 { 25667 *(*TestSessionsBlob)(unsafe.Pointer(bp + 8)) = TestSessionsBlob{} 25668 if test_tcl_integer(tls, interp, ts+10098) != 0 { 25669 var pCtx uintptr = bp + 8 25670 if *(*int32)(unsafe.Pointer(bp)) == 7 { 25671 rc = sqlite3.Xsqlite3session_patchset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 25672 f func(*libc.TLS, uintptr, uintptr, int32) int32 25673 }{testStreamOutput})), pCtx) 25674 } else { 25675 rc = sqlite3.Xsqlite3session_changeset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 25676 f func(*libc.TLS, uintptr, uintptr, int32) int32 25677 }{testStreamOutput})), pCtx) 25678 } 25679 } else { 25680 if *(*int32)(unsafe.Pointer(bp)) == 7 { 25681 rc = sqlite3.Xsqlite3session_patchset(tls, pSession, bp+8+8, bp+8) 25682 } else { 25683 rc = sqlite3.Xsqlite3session_changeset(tls, pSession, bp+8+8, bp+8) 25684 } 25685 } 25686 if rc == SQLITE_OK { 25687 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fn)) 25688 } 25689 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp) 25690 if rc != SQLITE_OK { 25691 return test_session_error(tls, interp, rc, uintptr(0)) 25692 } 25693 break 25694 25695 } 25696 25697 case 2: 25698 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 25699 break 25700 25701 case 3: 25702 { 25703 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 25704 return TCL_ERROR 25705 } 25706 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3session_enable(tls, pSession, *(*int32)(unsafe.Pointer(bp + 24))) 25707 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 24)) != 0))) 25708 break 25709 25710 } 25711 25712 case 4: 25713 { 25714 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+28) != 0 { 25715 return TCL_ERROR 25716 } 25717 *(*int32)(unsafe.Pointer(bp + 28)) = sqlite3.Xsqlite3session_indirect(tls, pSession, *(*int32)(unsafe.Pointer(bp + 28))) 25718 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 28)) != 0))) 25719 break 25720 25721 } 25722 25723 case 5: 25724 { 25725 var val int32 25726 val = sqlite3.Xsqlite3session_isempty(tls, pSession) 25727 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(val != 0))) 25728 break 25729 25730 } 25731 25732 case 6: 25733 { 25734 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 25735 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25736 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 25737 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25738 tcl.XTclFreeObj(tls, _objPtr) 25739 } 25740 } 25741 } 25742 (*TestSession)(unsafe.Pointer(p)).Finterp = interp 25743 (*TestSession)(unsafe.Pointer(p)).FpFilterScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25744 (*Tcl_Obj)(unsafe.Pointer((*TestSession)(unsafe.Pointer(p)).FpFilterScript)).FrefCount++ 25745 sqlite3.Xsqlite3session_table_filter(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 25746 f func(*libc.TLS, uintptr, uintptr) int32 25747 }{test_table_filter})), clientData) 25748 break 25749 25750 } 25751 25752 case 8: 25753 { 25754 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 25755 rc = sqlite3.Xsqlite3session_diff(tls, pSession, 25756 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 25757 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), 25758 bp+32) 25759 25760 if rc != 0 { 25761 return test_session_error(tls, interp, rc, *(*uintptr)(unsafe.Pointer(bp + 32))) 25762 } 25763 break 25764 25765 } 25766 25767 case 9: 25768 { 25769 var nMalloc sqlite3_int64 = sqlite3.Xsqlite3session_memory_used(tls, pSession) 25770 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nMalloc)) 25771 break 25772 25773 } 25774 25775 case 10: 25776 { 25777 var nSize sqlite3_int64 = sqlite3.Xsqlite3session_changeset_size(tls, pSession) 25778 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nSize)) 25779 break 25780 25781 } 25782 case 11: 25783 { 25784 var rc int32 25785 25786 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 25787 return TCL_ERROR 25788 } 25789 rc = sqlite3.Xsqlite3session_object_config(tls, 25790 pSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+40) 25791 if rc != SQLITE_OK { 25792 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 25793 } else { 25794 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 25795 } 25796 break 25797 25798 } 25799 } 25800 25801 return TCL_OK 25802 } 25803 25804 type SessionSubcmd = struct { 25805 FzSub uintptr 25806 FnArg int32 25807 F__ccgo_pad1 [4]byte 25808 FzMsg uintptr 25809 FiSub int32 25810 F__ccgo_pad2 [4]byte 25811 } 25812 25813 var aSub = [13]SessionSubcmd{ 25814 {FzSub: ts + 10121, FnArg: 1, FzMsg: ts + 1951}, 25815 {FzSub: ts + 10128, FzMsg: ts + 584}, 25816 {FzSub: ts + 10138, FzMsg: ts + 584}, 25817 {FzSub: ts + 10145, FnArg: 1, FzMsg: ts + 10152}, 25818 {FzSub: ts + 10157, FnArg: 1, FzMsg: ts + 10152}, 25819 {FzSub: ts + 10166, FzMsg: ts + 584}, 25820 {FzSub: ts + 10174, FnArg: 1, FzMsg: ts + 10187}, 25821 {FzSub: ts + 10194, FzMsg: ts + 584}, 25822 {FzSub: ts + 10203, FnArg: 2, FzMsg: ts + 10208}, 25823 {FzSub: ts + 10219, FzMsg: ts + 584}, 25824 {FzSub: ts + 10231, FzMsg: ts + 584}, 25825 {FzSub: ts + 10246, FnArg: 1, FzMsg: ts + 2413}, 25826 {}, 25827 } 25828 25829 func test_session_del(tls *libc.TLS, clientData uintptr) { 25830 var p uintptr = clientData 25831 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 25832 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25833 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 25834 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25835 tcl.XTclFreeObj(tls, _objPtr) 25836 } 25837 } 25838 } 25839 sqlite3.Xsqlite3session_delete(tls, (*TestSession)(unsafe.Pointer(p)).FpSession) 25840 tcl.XTcl_Free(tls, p) 25841 } 25842 25843 func test_sqlite3session(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25844 bp := tls.Alloc(92) 25845 defer tls.Free(92) 25846 25847 var db uintptr 25848 25849 var rc int32 25850 var p uintptr 25851 *(*int32)(unsafe.Pointer(bp + 88)) = -1 25852 25853 if objc != 4 { 25854 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10265) 25855 return TCL_ERROR 25856 } 25857 25858 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) { 25859 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 25860 return TCL_ERROR 25861 } 25862 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 25863 25864 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestSession{}))) 25865 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TestSession{}))) 25866 rc = sqlite3.Xsqlite3session_create(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), p) 25867 if rc != SQLITE_OK { 25868 tcl.XTcl_Free(tls, p) 25869 return test_session_error(tls, interp, rc, uintptr(0)) 25870 } 25871 25872 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 25873 25874 *(*int32)(unsafe.Pointer(bp + 88)) = 1 25875 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 25876 25877 tcl.XTcl_CreateObjCommand(tls, 25878 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 25879 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 25880 }{test_session_cmd})), p, 25881 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_session_del}))) 25882 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 25883 return TCL_OK 25884 } 25885 25886 func test_append_value(tls *libc.TLS, pList uintptr, pVal uintptr) { 25887 if pVal == uintptr(0) { 25888 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 25889 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 25890 } else { 25891 var pObj uintptr 25892 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 25893 case SQLITE_NULL: 25894 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10287, 1)) 25895 pObj = tcl.XTcl_NewObj(tls) 25896 break 25897 fallthrough 25898 case SQLITE_INTEGER: 25899 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10289, 1)) 25900 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, pVal)) 25901 break 25902 fallthrough 25903 case SQLITE_FLOAT: 25904 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10291, 1)) 25905 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, pVal)) 25906 break 25907 fallthrough 25908 case SQLITE_TEXT: 25909 { 25910 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 25911 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 25912 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10293, 1)) 25913 pObj = tcl.XTcl_NewStringObj(tls, z, n) 25914 break 25915 25916 } 25917 fallthrough 25918 default: 25919 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+6206, 1)) 25920 pObj = tcl.XTcl_NewByteArrayObj(tls, 25921 sqlite3.Xsqlite3_value_blob(tls, pVal), 25922 sqlite3.Xsqlite3_value_bytes(tls, pVal)) 25923 break 25924 } 25925 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, pObj) 25926 } 25927 } 25928 25929 type TestConflictHandler1 = struct { 25930 Finterp uintptr 25931 FpConflictScript uintptr 25932 FpFilterScript uintptr 25933 } 25934 25935 type TestConflictHandler = TestConflictHandler1 25936 25937 func test_obj_eq_string(tls *libc.TLS, p uintptr, z uintptr) int32 { 25938 bp := tls.Alloc(4) 25939 defer tls.Free(4) 25940 25941 var n int32 25942 25943 var zObj uintptr 25944 25945 n = int32(libc.Xstrlen(tls, z)) 25946 zObj = tcl.XTcl_GetStringFromObj(tls, p, bp) 25947 25948 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == n && (n == 0 || 0 == libc.Xmemcmp(tls, zObj, z, uint64(n)))) 25949 } 25950 25951 func test_filter_handler(tls *libc.TLS, pCtx uintptr, zTab uintptr) int32 { 25952 bp := tls.Alloc(4) 25953 defer tls.Free(4) 25954 25955 var p uintptr = pCtx 25956 *(*int32)(unsafe.Pointer(bp)) = 1 25957 var pEval uintptr 25958 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 25959 25960 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpFilterScript) 25961 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 25962 25963 if TCL_OK != tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zTab, -1)) || 25964 TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) || 25965 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 25966 tcl.XTcl_BackgroundError(tls, interp) 25967 } 25968 25969 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25970 var _objPtr uintptr = pEval 25971 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25972 tcl.XTclFreeObj(tls, _objPtr) 25973 } 25974 } 25975 return *(*int32)(unsafe.Pointer(bp)) 25976 } 25977 25978 func test_conflict_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 25979 bp := tls.Alloc(104) 25980 defer tls.Free(104) 25981 25982 var p uintptr = pCtx 25983 var pEval uintptr 25984 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 25985 *(*int32)(unsafe.Pointer(bp + 100)) = 0 25986 25987 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpConflictScript) 25988 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 25989 25990 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 25991 25992 if eConf == SQLITE_CHANGESET_FOREIGN_KEY { 25993 sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+16) 25994 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, ts+10295, -1)) 25995 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 25996 } else { 25997 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, 25998 func() uintptr { 25999 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 26000 return ts + 10307 26001 } 26002 return func() uintptr { 26003 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_UPDATE { 26004 return ts + 10314 26005 } 26006 return ts + 10321 26007 }() 26008 }(), -1)) 26009 26010 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp)), -1)) 26011 26012 switch eConf { 26013 case SQLITE_CHANGESET_DATA: 26014 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10328, -1)) 26015 break 26016 fallthrough 26017 case SQLITE_CHANGESET_NOTFOUND: 26018 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10333, -1)) 26019 break 26020 fallthrough 26021 case SQLITE_CHANGESET_CONFLICT: 26022 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10342, -1)) 26023 break 26024 fallthrough 26025 case SQLITE_CHANGESET_CONSTRAINT: 26026 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10351, -1)) 26027 break 26028 } 26029 26030 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 26031 var i int32 26032 var pOld uintptr = tcl.XTcl_NewObj(tls) 26033 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26034 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+24) 26035 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 24))) 26036 } 26037 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pOld) 26038 } 26039 26040 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 26041 var i int32 26042 var pNew uintptr = tcl.XTcl_NewObj(tls) 26043 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26044 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+32) 26045 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 32))) 26046 } 26047 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pNew) 26048 } 26049 26050 if eConf == SQLITE_CHANGESET_DATA || eConf == SQLITE_CHANGESET_CONFLICT { 26051 var i int32 26052 var pConflict uintptr = tcl.XTcl_NewObj(tls) 26053 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26054 var rc int32 26055 _ = rc 26056 26057 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, i, bp+40) 26058 26059 test_append_value(tls, pConflict, *(*uintptr)(unsafe.Pointer(bp + 40))) 26060 } 26061 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pConflict) 26062 } 26063 26064 if eConf == SQLITE_CHANGESET_CONSTRAINT || 26065 eConf == SQLITE_CHANGESET_NOTFOUND { 26066 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, 0, bp+48) 26067 _ = rc 26068 26069 } else { 26070 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, -1, bp+56) 26071 _ = rc 26072 26073 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+56) 26074 26075 } 26076 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_DELETE { 26077 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, 0, bp+64) 26078 _ = rc 26079 26080 } else { 26081 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, -1, bp+72) 26082 _ = rc 26083 26084 rc = sqlite3.Xsqlite3changeset_new(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+72) 26085 26086 } 26087 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 26088 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, 0, bp+80) 26089 _ = rc 26090 26091 } else { 26092 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, -1, bp+88) 26093 _ = rc 26094 26095 rc = sqlite3.Xsqlite3changeset_old(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+88) 26096 26097 } 26098 if eConf != SQLITE_CHANGESET_FOREIGN_KEY { 26099 var rc int32 = sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+96) 26100 _ = rc 26101 26102 } 26103 26104 } 26105 26106 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) { 26107 tcl.XTcl_BackgroundError(tls, interp) 26108 } else { 26109 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 26110 if test_obj_eq_string(tls, pRes, ts+10362) != 0 || test_obj_eq_string(tls, pRes, ts+584) != 0 { 26111 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_OMIT 26112 } else if test_obj_eq_string(tls, pRes, ts+7846) != 0 { 26113 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_REPLACE 26114 } else if test_obj_eq_string(tls, pRes, ts+7840) != 0 { 26115 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_ABORT 26116 } else { 26117 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pRes, bp+100) 26118 } 26119 } 26120 26121 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26122 var _objPtr uintptr = pEval 26123 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26124 tcl.XTclFreeObj(tls, _objPtr) 26125 } 26126 } 26127 return *(*int32)(unsafe.Pointer(bp + 100)) 26128 } 26129 26130 func replace_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 26131 bp := tls.Alloc(32) 26132 defer tls.Free(32) 26133 26134 var i int32 26135 var x int32 = 0 26136 26137 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 26138 26139 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 26140 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26141 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+16) 26142 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 26143 x++ 26144 } 26145 } 26146 26147 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 26148 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26149 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+24) 26150 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 26151 x++ 26152 } 26153 } 26154 26155 if eConf == SQLITE_CHANGESET_DATA { 26156 return SQLITE_CHANGESET_REPLACE 26157 } 26158 return SQLITE_CHANGESET_OMIT 26159 } 26160 26161 func testStreamInput(tls *libc.TLS, pCtx uintptr, pData uintptr, pnData uintptr) int32 { 26162 var p uintptr = pCtx 26163 var nReq int32 = *(*int32)(unsafe.Pointer(pnData)) 26164 var nRem int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnData - (*TestStreamInput)(unsafe.Pointer(p)).FiData 26165 var nRet int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnStream 26166 26167 var pAlloc uintptr = sqlite3.Xsqlite3_malloc(tls, 10) 26168 if pAlloc == uintptr(0) { 26169 return SQLITE_NOMEM 26170 } 26171 sqlite3.Xsqlite3_free(tls, pAlloc) 26172 26173 if nRet > nReq { 26174 nRet = nReq 26175 } 26176 if nRet > nRem { 26177 nRet = nRem 26178 } 26179 26180 if nRet > 0 { 26181 libc.Xmemcpy(tls, pData, (*TestStreamInput)(unsafe.Pointer(p)).FaData+uintptr((*TestStreamInput)(unsafe.Pointer(p)).FiData), uint64(nRet)) 26182 *(*int32)(unsafe.Pointer(p + 20)) += nRet 26183 } 26184 26185 *(*int32)(unsafe.Pointer(pnData)) = nRet 26186 return SQLITE_OK 26187 } 26188 26189 func testSqlite3changesetApply(tls *libc.TLS, bV2 int32, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26190 bp := tls.Alloc(156) 26191 defer tls.Free(156) 26192 26193 var db uintptr 26194 26195 var rc int32 26196 var pChangeset uintptr 26197 26198 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 26199 *(*int32)(unsafe.Pointer(bp + 152)) = 0 26200 var flags int32 = 0 26201 26202 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26203 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26204 26205 if bV2 != 0 { 26206 if objc > 1 { 26207 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26208 var n int32 = int32(libc.Xstrlen(tls, z1)) 26209 if n > 1 && n <= 12 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10367, z1, n) { 26210 flags = flags | SQLITE_CHANGESETAPPLY_NOSAVEPOINT 26211 objc-- 26212 objv += 8 26213 } 26214 } 26215 if objc > 1 { 26216 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26217 var n int32 = int32(libc.Xstrlen(tls, z1)) 26218 if n > 1 && n <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10380, z1, n) { 26219 flags = flags | SQLITE_CHANGESETAPPLY_INVERT 26220 objc-- 26221 objv += 8 26222 } 26223 } 26224 } 26225 26226 if objc != 4 && objc != 5 { 26227 var zMsg uintptr 26228 if bV2 != 0 { 26229 zMsg = ts + 10388 26230 } else { 26231 zMsg = ts + 10459 26232 } 26233 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zMsg) 26234 return TCL_ERROR 26235 } 26236 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) { 26237 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), 0)) 26238 return TCL_ERROR 26239 } 26240 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData)) 26241 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+112) 26242 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpConflictScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 26243 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpFilterScript = func() uintptr { 26244 if objc == 5 { 26245 return *(*uintptr)(unsafe.Pointer(objv + 4*8)) 26246 } 26247 return uintptr(0) 26248 }() 26249 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).Finterp = interp 26250 26251 if (*TestStreamInput)(unsafe.Pointer(bp+24)).FnStream == 0 { 26252 if bV2 == 0 { 26253 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 26254 func() uintptr { 26255 if objc == 5 { 26256 return *(*uintptr)(unsafe.Pointer(&struct { 26257 f func(*libc.TLS, uintptr, uintptr) int32 26258 }{test_filter_handler})) 26259 } 26260 return uintptr(0) 26261 }(), *(*uintptr)(unsafe.Pointer(&struct { 26262 f func(*libc.TLS, uintptr, int32, uintptr) int32 26263 }{test_conflict_handler})), bp+120) 26264 } else { 26265 rc = sqlite3.Xsqlite3changeset_apply_v2(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 26266 func() uintptr { 26267 if objc == 5 { 26268 return *(*uintptr)(unsafe.Pointer(&struct { 26269 f func(*libc.TLS, uintptr, uintptr) int32 26270 }{test_filter_handler})) 26271 } 26272 return uintptr(0) 26273 }(), *(*uintptr)(unsafe.Pointer(&struct { 26274 f func(*libc.TLS, uintptr, int32, uintptr) int32 26275 }{test_conflict_handler})), bp+120, 26276 bp+144, bp+152, flags) 26277 } 26278 } else { 26279 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = pChangeset 26280 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnData = *(*int32)(unsafe.Pointer(bp + 112)) 26281 if bV2 == 0 { 26282 rc = sqlite3.Xsqlite3changeset_apply_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 26283 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26284 }{testStreamInput})), bp+24, 26285 func() uintptr { 26286 if objc == 5 { 26287 return *(*uintptr)(unsafe.Pointer(&struct { 26288 f func(*libc.TLS, uintptr, uintptr) int32 26289 }{test_filter_handler})) 26290 } 26291 return uintptr(0) 26292 }(), 26293 *(*uintptr)(unsafe.Pointer(&struct { 26294 f func(*libc.TLS, uintptr, int32, uintptr) int32 26295 }{test_conflict_handler})), bp+120) 26296 } else { 26297 rc = sqlite3.Xsqlite3changeset_apply_v2_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 26298 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26299 }{testStreamInput})), bp+24, 26300 func() uintptr { 26301 if objc == 5 { 26302 return *(*uintptr)(unsafe.Pointer(&struct { 26303 f func(*libc.TLS, uintptr, uintptr) int32 26304 }{test_filter_handler})) 26305 } 26306 return uintptr(0) 26307 }(), 26308 *(*uintptr)(unsafe.Pointer(&struct { 26309 f func(*libc.TLS, uintptr, int32, uintptr) int32 26310 }{test_conflict_handler})), bp+120, 26311 bp+144, bp+152, flags) 26312 } 26313 } 26314 26315 if rc != SQLITE_OK { 26316 return test_session_error(tls, interp, rc, uintptr(0)) 26317 } else { 26318 tcl.XTcl_ResetResult(tls, interp) 26319 if bV2 != 0 && *(*uintptr)(unsafe.Pointer(bp + 144)) != 0 { 26320 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 144)), *(*int32)(unsafe.Pointer(bp + 152)))) 26321 } 26322 } 26323 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 144))) 26324 return TCL_OK 26325 } 26326 26327 func test_sqlite3changeset_apply(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26328 return testSqlite3changesetApply(tls, 0, clientData, interp, objc, objv) 26329 } 26330 26331 func test_sqlite3changeset_apply_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26332 return testSqlite3changesetApply(tls, 1, clientData, interp, objc, objv) 26333 } 26334 26335 func test_sqlite3changeset_apply_replace_all(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26336 bp := tls.Alloc(92) 26337 defer tls.Free(92) 26338 26339 var db uintptr 26340 26341 var rc int32 26342 var pChangeset uintptr 26343 26344 if objc != 3 { 26345 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10504) 26346 return TCL_ERROR 26347 } 26348 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) { 26349 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 26350 return TCL_ERROR 26351 } 26352 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26353 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+88) 26354 26355 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 88)), pChangeset, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 26356 f func(*libc.TLS, uintptr, int32, uintptr) int32 26357 }{replace_handler})), uintptr(0)) 26358 if rc != SQLITE_OK { 26359 return test_session_error(tls, interp, rc, uintptr(0)) 26360 } 26361 tcl.XTcl_ResetResult(tls, interp) 26362 return TCL_OK 26363 } 26364 26365 func test_sqlite3changeset_invert(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26366 bp := tls.Alloc(40) 26367 defer tls.Free(40) 26368 26369 var rc int32 26370 26371 if objc != 2 { 26372 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10517) 26373 return TCL_ERROR 26374 } 26375 26376 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26377 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestSessionsBlob{}))) 26378 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26379 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 26380 26381 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream != 0 { 26382 rc = sqlite3.Xsqlite3changeset_invert_strm(tls, 26383 *(*uintptr)(unsafe.Pointer(&struct { 26384 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26385 }{testStreamInput})), bp, *(*uintptr)(unsafe.Pointer(&struct { 26386 f func(*libc.TLS, uintptr, uintptr, int32) int32 26387 }{testStreamOutput})), bp+24) 26388 } else { 26389 rc = sqlite3.Xsqlite3changeset_invert(tls, (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, bp+24+8, bp+24) 26390 } 26391 if rc != SQLITE_OK { 26392 rc = test_session_error(tls, interp, rc, uintptr(0)) 26393 } else { 26394 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fn)) 26395 } 26396 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp) 26397 return rc 26398 } 26399 26400 func test_sqlite3changeset_concat(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26401 bp := tls.Alloc(64) 26402 defer tls.Free(64) 26403 26404 var rc int32 26405 26406 *(*TestSessionsBlob)(unsafe.Pointer(bp + 48)) = TestSessionsBlob{} 26407 26408 if objc != 3 { 26409 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10527) 26410 return TCL_ERROR 26411 } 26412 26413 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26414 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26415 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 26416 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24+16) 26417 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26418 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = (*TestStreamInput)(unsafe.Pointer(bp)).FnStream 26419 26420 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream > 0 { 26421 rc = sqlite3.Xsqlite3changeset_concat_strm(tls, 26422 *(*uintptr)(unsafe.Pointer(&struct { 26423 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26424 }{testStreamInput})), bp, 26425 *(*uintptr)(unsafe.Pointer(&struct { 26426 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26427 }{testStreamInput})), bp+24, 26428 *(*uintptr)(unsafe.Pointer(&struct { 26429 f func(*libc.TLS, uintptr, uintptr, int32) int32 26430 }{testStreamOutput})), bp+48) 26431 } else { 26432 rc = sqlite3.Xsqlite3changeset_concat(tls, 26433 (*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) 26434 } 26435 26436 if rc != SQLITE_OK { 26437 rc = test_session_error(tls, interp, rc, uintptr(0)) 26438 } else { 26439 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fn)) 26440 } 26441 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp) 26442 return rc 26443 } 26444 26445 func test_sqlite3session_foreach(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26446 bp := tls.Alloc(104) 26447 defer tls.Free(104) 26448 26449 var pChangeset uintptr 26450 26451 var rc int32 26452 var pVarname uintptr 26453 var pCS uintptr 26454 var pScript uintptr 26455 var isCheckNext int32 = 0 26456 var isInvert int32 = 0 26457 26458 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26459 26460 for objc > 1 { 26461 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26462 var nOpt int32 = int32(libc.Xstrlen(tls, zOpt)) 26463 if int32(*(*int8)(unsafe.Pointer(zOpt))) != '-' { 26464 break 26465 } 26466 if nOpt <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10380, nOpt) { 26467 isInvert = 1 26468 } else if nOpt <= 5 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10538, nOpt) { 26469 isCheckNext = 1 26470 } else { 26471 break 26472 } 26473 objv += 8 26474 objc-- 26475 } 26476 if objc != 4 { 26477 tcl.XTcl_WrongNumArgs(tls, 26478 interp, 1, objv, ts+10544) 26479 return TCL_ERROR 26480 } 26481 26482 pVarname = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 26483 pCS = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 26484 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 26485 26486 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, pCS, bp+24) 26487 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26488 if isInvert != 0 { 26489 var f int32 = SQLITE_CHANGESETSTART_INVERT 26490 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 26491 rc = sqlite3.Xsqlite3changeset_start_v2(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset, f) 26492 } else { 26493 var pCtx uintptr = bp 26494 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 26495 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 26496 rc = sqlite3.Xsqlite3changeset_start_v2_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 26497 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26498 }{testStreamInput})), pCtx, f) 26499 } 26500 } else { 26501 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 26502 rc = sqlite3.Xsqlite3changeset_start(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset) 26503 } else { 26504 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 26505 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 26506 rc = sqlite3.Xsqlite3changeset_start_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 26507 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26508 }{testStreamInput})), bp) 26509 } 26510 } 26511 if rc != SQLITE_OK { 26512 return test_session_error(tls, interp, rc, uintptr(0)) 26513 } 26514 26515 for SQLITE_ROW == sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) { 26516 var pVar uintptr 26517 var pOld uintptr 26518 var pNew uintptr 26519 26520 var zPK uintptr 26521 26522 var i int32 26523 26524 if SQLITE_MISUSE != sqlite3.Xsqlite3changeset_fk_conflicts(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+40) { 26525 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 26526 return TCL_ERROR 26527 } 26528 26529 sqlite3.Xsqlite3changeset_op(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+48, bp+56, bp+60, bp+64) 26530 pVar = tcl.XTcl_NewObj(tls) 26531 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, 26532 func() uintptr { 26533 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_INSERT { 26534 return ts + 10307 26535 } 26536 return func() uintptr { 26537 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_UPDATE { 26538 return ts + 10314 26539 } 26540 return ts + 10321 26541 }() 26542 }(), -1)) 26543 26544 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), -1)) 26545 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 64)) != 0))) 26546 26547 zPK = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 56))+1)) 26548 libc.Xmemset(tls, zPK, 0, uint64(*(*int32)(unsafe.Pointer(bp + 56))+1)) 26549 sqlite3.Xsqlite3changeset_pk(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+72, bp+80) 26550 26551 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 26552 *(*int8)(unsafe.Pointer(zPK + uintptr(i))) = func() int8 { 26553 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)) + uintptr(i))) != 0 { 26554 return int8('X') 26555 } 26556 return int8('.') 26557 }() 26558 } 26559 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, zPK, -1)) 26560 tcl.XTcl_Free(tls, zPK) 26561 26562 pOld = tcl.XTcl_NewObj(tls) 26563 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_INSERT { 26564 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 26565 sqlite3.Xsqlite3changeset_old(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+88) 26566 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 88))) 26567 } 26568 } 26569 pNew = tcl.XTcl_NewObj(tls) 26570 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_DELETE { 26571 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 26572 sqlite3.Xsqlite3changeset_new(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+96) 26573 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 96))) 26574 } 26575 } 26576 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pOld) 26577 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pNew) 26578 26579 tcl.XTcl_ObjSetVar2(tls, interp, pVarname, uintptr(0), pVar, 0) 26580 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 26581 if rc != TCL_OK && rc != TCL_CONTINUE { 26582 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 26583 if rc == TCL_BREAK { 26584 return TCL_OK 26585 } 26586 return rc 26587 } 26588 } 26589 26590 if isCheckNext != 0 { 26591 var rc2 int32 = sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 26592 _ = rc2 26593 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 26594 26595 } else { 26596 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 26597 } 26598 if rc != SQLITE_OK { 26599 return test_session_error(tls, interp, rc, uintptr(0)) 26600 } 26601 26602 return TCL_OK 26603 } 26604 26605 func test_rebaser_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26606 bp := tls.Alloc(48) 26607 defer tls.Free(48) 26608 26609 var p uintptr = clientData 26610 26611 var rc int32 26612 26613 if objc < 2 { 26614 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 26615 return TCL_ERROR 26616 } 26617 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 26618 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub1)), int32(unsafe.Sizeof(RebaseSubcmd{})), ts+2014, 0, bp) 26619 if rc != TCL_OK { 26620 return rc 26621 } 26622 if objc != 2+aSub1[*(*int32)(unsafe.Pointer(bp))].FnArg { 26623 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub1[*(*int32)(unsafe.Pointer(bp))].FzMsg) 26624 return TCL_ERROR 26625 } 26626 26627 switch *(*int32)(unsafe.Pointer(bp)) { 26628 case 0: 26629 { 26630 *(*int32)(unsafe.Pointer(bp + 4)) = 0 26631 var pRebase uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 26632 rc = sqlite3.Xsqlite3rebaser_configure(tls, p, *(*int32)(unsafe.Pointer(bp + 4)), pRebase) 26633 break 26634 26635 } 26636 26637 case 1: 26638 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 26639 break 26640 26641 default: 26642 { 26643 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26644 libc.Xmemset(tls, bp+32, 0, uint64(unsafe.Sizeof(TestSessionsBlob{}))) 26645 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8+16) 26646 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26647 26648 if (*TestStreamInput)(unsafe.Pointer(bp+8)).FnStream != 0 { 26649 rc = sqlite3.Xsqlite3rebaser_rebase_strm(tls, p, 26650 *(*uintptr)(unsafe.Pointer(&struct { 26651 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26652 }{testStreamInput})), bp+8, 26653 *(*uintptr)(unsafe.Pointer(&struct { 26654 f func(*libc.TLS, uintptr, uintptr, int32) int32 26655 }{testStreamOutput})), bp+32) 26656 } else { 26657 rc = sqlite3.Xsqlite3rebaser_rebase(tls, p, (*TestStreamInput)(unsafe.Pointer(bp+8)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+8)).FaData, bp+32+8, bp+32) 26658 } 26659 26660 if rc == SQLITE_OK { 26661 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fn)) 26662 } 26663 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp) 26664 break 26665 26666 } 26667 } 26668 26669 if rc != SQLITE_OK { 26670 return test_session_error(tls, interp, rc, uintptr(0)) 26671 } 26672 return TCL_OK 26673 } 26674 26675 type RebaseSubcmd = struct { 26676 FzSub uintptr 26677 FnArg int32 26678 F__ccgo_pad1 [4]byte 26679 FzMsg uintptr 26680 FiSub int32 26681 F__ccgo_pad2 [4]byte 26682 } 26683 26684 var aSub1 = [4]RebaseSubcmd{ 26685 {FzSub: ts + 10587, FnArg: 1, FzMsg: ts + 10597}, 26686 {FzSub: ts + 10138, FzMsg: ts + 584}, 26687 {FzSub: ts + 10609, FnArg: 1, FzMsg: ts + 10517}, 26688 {}, 26689 } 26690 26691 func test_rebaser_del(tls *libc.TLS, clientData uintptr) { 26692 var p uintptr = clientData 26693 sqlite3.Xsqlite3rebaser_delete(tls, p) 26694 } 26695 26696 func test_sqlite3rebaser_create(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26697 bp := tls.Alloc(8) 26698 defer tls.Free(8) 26699 26700 var rc int32 26701 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 26702 if objc != 2 { 26703 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 26704 return SQLITE_ERROR 26705 } 26706 26707 rc = sqlite3.Xsqlite3rebaser_create(tls, bp) 26708 if rc != SQLITE_OK { 26709 return test_session_error(tls, interp, rc, uintptr(0)) 26710 } 26711 26712 tcl.XTcl_CreateObjCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 26713 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26714 }{test_rebaser_cmd})), 26715 *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_rebaser_del}))) 26716 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26717 return TCL_OK 26718 } 26719 26720 func test_sqlite3session_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26721 bp := tls.Alloc(8) 26722 defer tls.Free(8) 26723 26724 var rc int32 26725 26726 if objc != 3 { 26727 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10616) 26728 return SQLITE_ERROR 26729 } 26730 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 26731 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub2)), int32(unsafe.Sizeof(ConfigOpt{})), ts+2014, 0, bp) 26732 if rc != TCL_OK { 26733 return rc 26734 } 26735 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 26736 return TCL_ERROR 26737 } 26738 26739 rc = sqlite3.Xsqlite3session_config(tls, aSub2[*(*int32)(unsafe.Pointer(bp))].Fop, bp+4) 26740 if rc != SQLITE_OK { 26741 return test_session_error(tls, interp, rc, uintptr(0)) 26742 } 26743 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 26744 return TCL_OK 26745 } 26746 26747 type ConfigOpt = struct { 26748 FzSub uintptr 26749 Fop int32 26750 F__ccgo_pad1 [4]byte 26751 } 26752 26753 var aSub2 = [3]ConfigOpt{ 26754 {FzSub: ts + 10625, Fop: SQLITE_SESSION_CONFIG_STRMSIZE}, 26755 {FzSub: ts + 2758}, 26756 {}, 26757 } 26758 26759 func TestSession_Init(tls *libc.TLS, interp uintptr) int32 { 26760 bp := tls.Alloc(160) 26761 defer tls.Free(160) 26762 26763 *(*[10]struct { 26764 FzCmd uintptr 26765 FxProc uintptr 26766 })(unsafe.Pointer(bp)) = [10]struct { 26767 FzCmd uintptr 26768 FxProc uintptr 26769 }{ 26770 {FzCmd: ts + 10635, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26771 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26772 }{test_sqlite3session}))}, 26773 {FzCmd: ts + 10650, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26774 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26775 }{test_sqlite3session_foreach}))}, 26776 {FzCmd: ts + 10673, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26777 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26778 }{test_sqlite3changeset_invert}))}, 26779 {FzCmd: ts + 10697, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26780 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26781 }{test_sqlite3changeset_concat}))}, 26782 {FzCmd: ts + 10721, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26783 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26784 }{test_sqlite3changeset_apply}))}, 26785 {FzCmd: ts + 10744, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26786 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26787 }{test_sqlite3changeset_apply_v2}))}, 26788 {FzCmd: ts + 10770, 26789 FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26790 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26791 }{test_sqlite3changeset_apply_replace_all}))}, 26792 {FzCmd: ts + 10805, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26793 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26794 }{test_sql_exec_changeset}))}, 26795 {FzCmd: ts + 10824, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26796 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26797 }{test_sqlite3rebaser_create}))}, 26798 {FzCmd: ts + 10846, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 26799 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26800 }{test_sqlite3session_config}))}, 26801 } 26802 var i int32 26803 26804 for i = 0; uint64(i) < uint64(unsafe.Sizeof([10]struct { 26805 FzCmd uintptr 26806 FxProc uintptr 26807 }{}))/uint64(unsafe.Sizeof(struct { 26808 FzCmd uintptr 26809 FxProc uintptr 26810 }{})); i++ { 26811 var p uintptr = bp + uintptr(i)*16 26812 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 26813 FzCmd uintptr 26814 FxProc uintptr 26815 })(unsafe.Pointer(p)).FzCmd, (*struct { 26816 FzCmd uintptr 26817 FxProc uintptr 26818 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 26819 } 26820 26821 return TCL_OK 26822 } 26823 26824 type sig_atomic_t = int32 26825 26826 type sigcontext = struct { 26827 F__sc_unused int32 26828 Fsc_mask int32 26829 Fsc_sp uint64 26830 Fsc_lr uint64 26831 Fsc_elr uint64 26832 Fsc_spsr uint64 26833 Fsc_x [30]uint64 26834 Fsc_cookie int64 26835 } 26836 26837 type sigval = struct { 26838 F__ccgo_pad1 [0]uint64 26839 Fsival_int int32 26840 F__ccgo_pad2 [4]byte 26841 } 26842 26843 type siginfo_t = struct { 26844 Fsi_signo int32 26845 Fsi_code int32 26846 Fsi_errno int32 26847 F__ccgo_pad1 [4]byte 26848 F_data struct { 26849 F__ccgo_pad1 [0]uint64 26850 F_pad [29]int32 26851 F__ccgo_pad2 [4]byte 26852 } 26853 } 26854 26855 type sigaction = struct { 26856 F__sigaction_u struct{ F__sa_handler uintptr } 26857 Fsa_mask sigset_t 26858 Fsa_flags int32 26859 } 26860 26861 type sig_t = uintptr 26862 26863 type sigvec = struct { 26864 Fsv_handler uintptr 26865 Fsv_mask int32 26866 Fsv_flags int32 26867 } 26868 26869 type sigaltstack = struct { 26870 Fss_sp uintptr 26871 Fss_size size_t 26872 Fss_flags int32 26873 F__ccgo_pad1 [4]byte 26874 } 26875 26876 type stack_t = sigaltstack 26877 26878 type ucontext_t = sigcontext 26879 26880 type SqliteDb = struct { 26881 Fdb uintptr 26882 Finterp uintptr 26883 FzBusy uintptr 26884 FzCommit uintptr 26885 FzTrace uintptr 26886 FzTraceV2 uintptr 26887 FzProfile uintptr 26888 FzProgress uintptr 26889 FzBindFallback uintptr 26890 FzAuth uintptr 26891 FdisableAuth int32 26892 F__ccgo_pad1 [4]byte 26893 FzNull uintptr 26894 FpFunc uintptr 26895 FpUpdateHook uintptr 26896 FpPreUpdateHook uintptr 26897 FpRollbackHook uintptr 26898 FpWalHook uintptr 26899 FpUnlockNotify uintptr 26900 FpCollate uintptr 26901 Frc int32 26902 F__ccgo_pad2 [4]byte 26903 FpCollateNeeded uintptr 26904 FstmtList uintptr 26905 FstmtLast uintptr 26906 FmaxStmt int32 26907 FnStmt int32 26908 FpIncrblob uintptr 26909 FnStep int32 26910 FnSort int32 26911 FnIndex int32 26912 FnVMStep int32 26913 FnTransaction int32 26914 FopenFlags int32 26915 FnRef int32 26916 FbLegacyPrepare int32 26917 } 26918 26919 type SqlFunc1 = struct { 26920 Finterp uintptr 26921 FpScript uintptr 26922 FpDb uintptr 26923 FuseEvalObjv int32 26924 FeType int32 26925 FzName uintptr 26926 FpNext uintptr 26927 } 26928 26929 type SqlFunc = SqlFunc1 26930 26931 type SqlCollate1 = struct { 26932 Finterp uintptr 26933 FzScript uintptr 26934 FpNext uintptr 26935 } 26936 26937 type SqlCollate = SqlCollate1 26938 26939 type SqlPreparedStmt1 = struct { 26940 FpNext uintptr 26941 FpPrev uintptr 26942 FpStmt uintptr 26943 FnSql int32 26944 F__ccgo_pad1 [4]byte 26945 FzSql uintptr 26946 FnParm int32 26947 F__ccgo_pad2 [4]byte 26948 FapParm uintptr 26949 } 26950 26951 type SqlPreparedStmt = SqlPreparedStmt1 26952 26953 type IncrblobChannel1 = struct { 26954 FpBlob uintptr 26955 FpDb uintptr 26956 FiSeek int32 26957 F__ccgo_pad1 [4]byte 26958 Fchannel Tcl_Channel 26959 FpNext uintptr 26960 FpPrev uintptr 26961 } 26962 26963 type IncrblobChannel = IncrblobChannel1 26964 26965 func strlen30(tls *libc.TLS, z uintptr) int32 { 26966 var z2 uintptr = z 26967 for *(*int8)(unsafe.Pointer(z2)) != 0 { 26968 z2++ 26969 } 26970 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 26971 } 26972 26973 func closeIncrblobChannels(tls *libc.TLS, pDb uintptr) { 26974 var p uintptr 26975 var pNext uintptr 26976 26977 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob; p != 0; p = pNext { 26978 pNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 26979 26980 tcl.XTcl_UnregisterChannel(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 26981 } 26982 } 26983 26984 func incrblobClose(tls *libc.TLS, instanceData ClientData, interp uintptr) int32 { 26985 var p uintptr = instanceData 26986 var rc int32 = sqlite3.Xsqlite3_blob_close(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 26987 var db uintptr = (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).Fdb 26988 26989 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 26990 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev 26991 } 26992 if (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev != 0 { 26993 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpPrev)).FpNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 26994 } 26995 if (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob == p { 26996 (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 26997 } 26998 26999 tcl.XTcl_Free(tls, p) 27000 27001 if rc != SQLITE_OK { 27002 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(1)) 27003 return TCL_ERROR 27004 } 27005 return TCL_OK 27006 } 27007 27008 func incrblobInput(tls *libc.TLS, instanceData ClientData, buf uintptr, bufSize int32, errorCodePtr uintptr) int32 { 27009 var p uintptr = instanceData 27010 var nRead int32 = bufSize 27011 var nBlob int32 27012 var rc int32 27013 27014 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27015 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nRead > nBlob { 27016 nRead = nBlob - (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27017 } 27018 if nRead <= 0 { 27019 return 0 27020 } 27021 27022 rc = sqlite3.Xsqlite3_blob_read(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nRead, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27023 if rc != SQLITE_OK { 27024 *(*int32)(unsafe.Pointer(errorCodePtr)) = rc 27025 return -1 27026 } 27027 27028 *(*int32)(unsafe.Pointer(p + 16)) += nRead 27029 return nRead 27030 } 27031 27032 func incrblobOutput(tls *libc.TLS, instanceData ClientData, buf uintptr, toWrite int32, errorCodePtr uintptr) int32 { 27033 var p uintptr = instanceData 27034 var nWrite int32 = toWrite 27035 var nBlob int32 27036 var rc int32 27037 27038 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27039 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nWrite > nBlob { 27040 *(*int32)(unsafe.Pointer(errorCodePtr)) = EINVAL 27041 return -1 27042 } 27043 if nWrite <= 0 { 27044 return 0 27045 } 27046 27047 rc = sqlite3.Xsqlite3_blob_write(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nWrite, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27048 if rc != SQLITE_OK { 27049 *(*int32)(unsafe.Pointer(errorCodePtr)) = EIO 27050 return -1 27051 } 27052 27053 *(*int32)(unsafe.Pointer(p + 16)) += nWrite 27054 return nWrite 27055 } 27056 27057 func incrblobSeek(tls *libc.TLS, instanceData ClientData, offset int64, seekMode int32, errorCodePtr uintptr) int32 { 27058 var p uintptr = instanceData 27059 27060 switch seekMode { 27061 case SEEK_SET: 27062 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(offset) 27063 break 27064 case SEEK_CUR: 27065 *(*int32)(unsafe.Pointer(p + 16)) += int32(offset) 27066 break 27067 case SEEK_END: 27068 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(int64(sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob)) + offset) 27069 break 27070 27071 default: 27072 } 27073 27074 return (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27075 } 27076 27077 func incrblobWatch(tls *libc.TLS, instanceData ClientData, mode int32) { 27078 } 27079 27080 func incrblobHandle(tls *libc.TLS, instanceData ClientData, dir int32, hPtr uintptr) int32 { 27081 return TCL_ERROR 27082 } 27083 27084 var IncrblobChannelType = Tcl_ChannelType{ 27085 FtypeName: ts + 10868, 27086 Fversion: uintptr(0x2), 27087 FcloseProc: 0, 27088 FinputProc: 0, 27089 FoutputProc: 0, 27090 FseekProc: 0, 27091 FwatchProc: 0, 27092 FgetHandleProc: 0, 27093 } 27094 27095 func createIncrblobChannel(tls *libc.TLS, interp uintptr, pDb uintptr, zDb uintptr, zTable uintptr, zColumn uintptr, iRow sqlite_int64, isReadonly int32) int32 { 27096 bp := tls.Alloc(80) 27097 defer tls.Free(80) 27098 27099 var p uintptr 27100 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 27101 27102 var rc int32 27103 var flags int32 = int32(1)<<1 | func() int32 { 27104 if isReadonly != 0 { 27105 return 0 27106 } 27107 return int32(1) << 2 27108 }() 27109 27110 rc = sqlite3.Xsqlite3_blob_open(tls, db, zDb, zTable, zColumn, iRow, libc.BoolInt32(!(isReadonly != 0)), bp+8) 27111 if rc != SQLITE_OK { 27112 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 27113 return TCL_ERROR 27114 } 27115 27116 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(IncrblobChannel{}))) 27117 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = 0 27118 (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob = *(*uintptr)(unsafe.Pointer(bp + 8)) 27119 27120 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+10877, libc.VaList(bp, libc.PreIncInt32(&count, 1))) 27121 (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel = tcl.XTcl_CreateChannel(tls, uintptr(unsafe.Pointer(&IncrblobChannelType)), bp+16, p, flags) 27122 tcl.XTcl_RegisterChannel(tls, interp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27123 27124 (*IncrblobChannel)(unsafe.Pointer(p)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob 27125 (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev = uintptr(0) 27126 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27127 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = p 27128 } 27129 (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob = p 27130 (*IncrblobChannel)(unsafe.Pointer(p)).FpDb = pDb 27131 27132 tcl.XTcl_SetResult(tls, interp, tcl.XTcl_GetChannelName(tls, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel), uintptr(1)) 27133 return TCL_OK 27134 } 27135 27136 var count int32 = 0 27137 27138 func safeToUseEvalObjv(tls *libc.TLS, interp uintptr, pCmd uintptr) int32 { 27139 bp := tls.Alloc(4) 27140 defer tls.Free(4) 27141 27142 var z uintptr 27143 27144 z = tcl.XTcl_GetStringFromObj(tls, pCmd, bp) 27145 for libc.PostDecInt32(&*(*int32)(unsafe.Pointer(bp)), 1) > 0 { 27146 var c int32 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 27147 if c == '$' || c == '[' || c == ';' { 27148 return 0 27149 } 27150 } 27151 return 1 27152 } 27153 27154 func findSqlFunc(tls *libc.TLS, pDb uintptr, zName uintptr) uintptr { 27155 var p uintptr 27156 var pNew uintptr 27157 var nName int32 = strlen30(tls, zName) 27158 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlFunc{}))+uint64(nName)+uint64(1))) 27159 (*SqlFunc)(unsafe.Pointer(pNew)).FzName = pNew + 1*48 27160 libc.Xmemcpy(tls, (*SqlFunc)(unsafe.Pointer(pNew)).FzName, zName, uint64(nName+1)) 27161 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc; p != 0; p = (*SqlFunc)(unsafe.Pointer(p)).FpNext { 27162 if sqlite3.Xsqlite3_stricmp(tls, (*SqlFunc)(unsafe.Pointer(p)).FzName, (*SqlFunc)(unsafe.Pointer(pNew)).FzName) == 0 { 27163 tcl.XTcl_Free(tls, pNew) 27164 return p 27165 } 27166 } 27167 (*SqlFunc)(unsafe.Pointer(pNew)).Finterp = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 27168 (*SqlFunc)(unsafe.Pointer(pNew)).FpDb = pDb 27169 (*SqlFunc)(unsafe.Pointer(pNew)).FpScript = uintptr(0) 27170 (*SqlFunc)(unsafe.Pointer(pNew)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27171 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = pNew 27172 return pNew 27173 } 27174 27175 func dbFreeStmt(tls *libc.TLS, pStmt uintptr) { 27176 if sqlite3.Xsqlite3_sql(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) == uintptr(0) { 27177 tcl.XTcl_Free(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FzSql) 27178 } 27179 sqlite3.Xsqlite3_finalize(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) 27180 tcl.XTcl_Free(tls, pStmt) 27181 } 27182 27183 func flushStmtCache(tls *libc.TLS, pDb uintptr) { 27184 var pPreStmt uintptr 27185 var pNext uintptr 27186 27187 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = pNext { 27188 pNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 27189 dbFreeStmt(tls, pPreStmt) 27190 } 27191 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt = 0 27192 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = uintptr(0) 27193 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = uintptr(0) 27194 } 27195 27196 func addDatabaseRef(tls *libc.TLS, pDb uintptr) { 27197 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef++ 27198 } 27199 27200 func delDatabaseRef(tls *libc.TLS, pDb uintptr) { 27201 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef-- 27202 if (*SqliteDb)(unsafe.Pointer(pDb)).FnRef == 0 { 27203 flushStmtCache(tls, pDb) 27204 closeIncrblobChannels(tls, pDb) 27205 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 27206 for (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc != 0 { 27207 var pFunc uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27208 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = (*SqlFunc)(unsafe.Pointer(pFunc)).FpNext 27209 27210 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27211 var _objPtr uintptr = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 27212 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27213 tcl.XTclFreeObj(tls, _objPtr) 27214 } 27215 } 27216 tcl.XTcl_Free(tls, pFunc) 27217 } 27218 for (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate != 0 { 27219 var pCollate uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 27220 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext 27221 tcl.XTcl_Free(tls, pCollate) 27222 } 27223 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0 { 27224 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 27225 } 27226 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0 { 27227 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 27228 } 27229 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0 { 27230 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 27231 } 27232 if (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0 { 27233 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 27234 } 27235 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0 { 27236 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 27237 } 27238 if (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0 { 27239 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 27240 } 27241 if (*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0 { 27242 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 27243 } 27244 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 27245 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27246 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook 27247 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27248 tcl.XTclFreeObj(tls, _objPtr) 27249 } 27250 } 27251 } 27252 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 27253 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27254 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook 27255 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27256 tcl.XTclFreeObj(tls, _objPtr) 27257 } 27258 } 27259 } 27260 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 27261 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 27262 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook 27263 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27264 tcl.XTclFreeObj(tls, _objPtr) 27265 } 27266 } 27267 } 27268 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 27269 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 27270 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook 27271 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27272 tcl.XTclFreeObj(tls, _objPtr) 27273 } 27274 } 27275 } 27276 if (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0 { 27277 for __ccgo5 := true; __ccgo5; __ccgo5 = 0 != 0 { 27278 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 27279 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27280 tcl.XTclFreeObj(tls, _objPtr) 27281 } 27282 } 27283 } 27284 tcl.XTcl_Free(tls, pDb) 27285 } 27286 } 27287 27288 func DbDeleteCmd(tls *libc.TLS, db uintptr) { 27289 var pDb uintptr = db 27290 delDatabaseRef(tls, pDb) 27291 } 27292 27293 func DbBusyHandler(tls *libc.TLS, cd uintptr, nTries int32) int32 { 27294 bp := tls.Alloc(70) 27295 defer tls.Free(70) 27296 27297 var pDb uintptr = cd 27298 var rc int32 27299 27300 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+40, ts+1333, libc.VaList(bp, nTries)) 27301 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))) 27302 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27303 return 0 27304 } 27305 return 1 27306 } 27307 27308 func DbProgressHandler(tls *libc.TLS, cd uintptr) int32 { 27309 var pDb uintptr = cd 27310 var rc int32 27311 27312 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 27313 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27314 return 1 27315 } 27316 return 0 27317 } 27318 27319 func DbTraceHandler(tls *libc.TLS, cd uintptr, zSql uintptr) { 27320 bp := tls.Alloc(216) 27321 defer tls.Free(216) 27322 27323 var pDb uintptr = cd 27324 27325 tcl.XTcl_DStringInit(tls, bp) 27326 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, -1) 27327 tcl.XTcl_DStringAppendElement(tls, bp, zSql) 27328 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 27329 tcl.XTcl_DStringFree(tls, bp) 27330 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27331 } 27332 27333 func DbTraceV2Handler(tls *libc.TLS, type1 uint32, cd uintptr, pd uintptr, xd uintptr) int32 { 27334 var pDb uintptr = cd 27335 var pCmd uintptr 27336 27337 switch type1 { 27338 case uint32(SQLITE_TRACE_STMT): 27339 { 27340 var pStmt uintptr = pd 27341 var zSql uintptr = xd 27342 27343 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27344 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27345 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27346 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27347 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27348 tcl.XTcl_NewStringObj(tls, zSql, -1)) 27349 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27350 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27351 var _objPtr uintptr = pCmd 27352 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27353 tcl.XTclFreeObj(tls, _objPtr) 27354 } 27355 } 27356 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27357 break 27358 27359 } 27360 case uint32(SQLITE_TRACE_PROFILE): 27361 { 27362 var pStmt uintptr = pd 27363 var ns sqlite3_int64 = *(*sqlite3_int64)(unsafe.Pointer(xd)) 27364 27365 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27366 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27367 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27368 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27369 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27370 tcl.XTcl_NewWideIntObj(tls, ns)) 27371 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27372 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27373 var _objPtr uintptr = pCmd 27374 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27375 tcl.XTclFreeObj(tls, _objPtr) 27376 } 27377 } 27378 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27379 break 27380 27381 } 27382 case uint32(SQLITE_TRACE_ROW): 27383 { 27384 var pStmt uintptr = pd 27385 27386 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27387 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27388 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27389 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27390 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27391 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27392 var _objPtr uintptr = pCmd 27393 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27394 tcl.XTclFreeObj(tls, _objPtr) 27395 } 27396 } 27397 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27398 break 27399 27400 } 27401 case uint32(SQLITE_TRACE_CLOSE): 27402 { 27403 var db uintptr = pd 27404 27405 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27406 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27407 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27408 tcl.XTcl_NewWideIntObj(tls, int64(db))) 27409 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27410 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 27411 var _objPtr uintptr = pCmd 27412 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27413 tcl.XTclFreeObj(tls, _objPtr) 27414 } 27415 } 27416 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27417 break 27418 27419 } 27420 } 27421 return SQLITE_OK 27422 } 27423 27424 func DbProfileHandler(tls *libc.TLS, cd uintptr, zSql uintptr, tm1 sqlite_uint64) { 27425 bp := tls.Alloc(328) 27426 defer tls.Free(328) 27427 27428 var pDb uintptr = cd 27429 27430 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([100]int8{}))-uint64(1)), bp+8, ts+6325, libc.VaList(bp, tm1)) 27431 tcl.XTcl_DStringInit(tls, bp+112) 27432 tcl.XTcl_DStringAppend(tls, bp+112, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, -1) 27433 tcl.XTcl_DStringAppendElement(tls, bp+112, zSql) 27434 tcl.XTcl_DStringAppendElement(tls, bp+112, bp+8) 27435 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+112)).Fstring) 27436 tcl.XTcl_DStringFree(tls, bp+112) 27437 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27438 } 27439 27440 func DbCommitHandler(tls *libc.TLS, cd uintptr) int32 { 27441 var pDb uintptr = cd 27442 var rc int32 27443 27444 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 27445 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27446 return 1 27447 } 27448 return 0 27449 } 27450 27451 func DbRollbackHandler(tls *libc.TLS, clientData uintptr) { 27452 var pDb uintptr = clientData 27453 27454 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook, 0) { 27455 tcl.XTcl_BackgroundError(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27456 } 27457 } 27458 27459 func DbWalHandler(tls *libc.TLS, clientData uintptr, db uintptr, zDb uintptr, nEntry int32) int32 { 27460 bp := tls.Alloc(4) 27461 defer tls.Free(4) 27462 27463 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 27464 var p uintptr 27465 var pDb uintptr = clientData 27466 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 27467 27468 p = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook) 27469 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 27470 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewStringObj(tls, zDb, -1)) 27471 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewIntObj(tls, nEntry)) 27472 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, p, 0) || 27473 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 27474 tcl.XTcl_BackgroundError(tls, interp) 27475 } 27476 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27477 var _objPtr uintptr = p 27478 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27479 tcl.XTclFreeObj(tls, _objPtr) 27480 } 27481 } 27482 27483 return *(*int32)(unsafe.Pointer(bp)) 27484 } 27485 27486 func setTestUnlockNotifyVars(tls *libc.TLS, interp uintptr, iArg int32, nArg int32) { 27487 bp := tls.Alloc(80) 27488 defer tls.Free(80) 27489 27490 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp, iArg)) 27491 tcl.XTcl_SetVar2(tls, interp, ts+10889, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 27492 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp+8, nArg)) 27493 tcl.XTcl_SetVar2(tls, interp, ts+10914, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 27494 } 27495 27496 func DbUnlockNotify(tls *libc.TLS, apArg uintptr, nArg int32) { 27497 var i int32 27498 for i = 0; i < nArg; i++ { 27499 var flags int32 = TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT 27500 var pDb uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 27501 setTestUnlockNotifyVars(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, i, nArg) 27502 27503 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify, flags) 27504 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27505 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 27506 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27507 tcl.XTclFreeObj(tls, _objPtr) 27508 } 27509 } 27510 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 27511 } 27512 } 27513 27514 func DbPreUpdateHandler(tls *libc.TLS, p uintptr, db uintptr, op int32, zDb uintptr, zTbl uintptr, iKey1 sqlite_int64, iKey2 sqlite_int64) { 27515 var pDb uintptr = p 27516 var pCmd uintptr 27517 27518 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook) 27519 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27520 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr[(op-1)/9], -1)) 27521 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 27522 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 27523 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey1)) 27524 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey2)) 27525 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27526 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27527 var _objPtr uintptr = pCmd 27528 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27529 tcl.XTclFreeObj(tls, _objPtr) 27530 } 27531 } 27532 } 27533 27534 var azStr = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 27535 27536 func DbUpdateHandler(tls *libc.TLS, p uintptr, op int32, zDb uintptr, zTbl uintptr, rowid sqlite_int64) { 27537 var pDb uintptr = p 27538 var pCmd uintptr 27539 27540 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook) 27541 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27542 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr1[(op-1)/9], -1)) 27543 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 27544 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 27545 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, rowid)) 27546 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27547 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27548 var _objPtr uintptr = pCmd 27549 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27550 tcl.XTclFreeObj(tls, _objPtr) 27551 } 27552 } 27553 } 27554 27555 var azStr1 = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 27556 27557 func tclCollateNeeded(tls *libc.TLS, pCtx uintptr, db uintptr, enc int32, zName uintptr) { 27558 var pDb uintptr = pCtx 27559 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 27560 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 27561 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 27562 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pScript, 0) 27563 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27564 var _objPtr uintptr = pScript 27565 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27566 tcl.XTclFreeObj(tls, _objPtr) 27567 } 27568 } 27569 } 27570 27571 func tclSqlCollate(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 27572 var p uintptr = pCtx 27573 var pCmd uintptr 27574 27575 pCmd = tcl.XTcl_NewStringObj(tls, (*SqlCollate)(unsafe.Pointer(p)).FzScript, -1) 27576 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27577 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zA, nA)) 27578 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zB, nB)) 27579 tcl.XTcl_EvalObjEx(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 27580 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27581 var _objPtr uintptr = pCmd 27582 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27583 tcl.XTclFreeObj(tls, _objPtr) 27584 } 27585 } 27586 return libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp)) 27587 } 27588 27589 func tclSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 27590 bp := tls.Alloc(40) 27591 defer tls.Free(40) 27592 27593 var p uintptr = sqlite3.Xsqlite3_user_data(tls, context) 27594 var pCmd uintptr 27595 var i int32 27596 var rc int32 27597 27598 if argc == 0 { 27599 pCmd = (*SqlFunc)(unsafe.Pointer(p)).FpScript 27600 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27601 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, 0) 27602 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27603 var _objPtr uintptr = pCmd 27604 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27605 tcl.XTclFreeObj(tls, _objPtr) 27606 } 27607 } 27608 } else { 27609 if tcl.XTcl_ListObjGetElements(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, (*SqlFunc)(unsafe.Pointer(p)).FpScript, bp, bp+8) != 0 { 27610 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 27611 return 27612 } 27613 pCmd = tcl.XTcl_NewListObj(tls, *(*int32)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 27614 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27615 for i = 0; i < argc; i++ { 27616 var pIn uintptr = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 27617 var pVal uintptr 27618 27619 switch sqlite3.Xsqlite3_value_type(tls, pIn) { 27620 case SQLITE_BLOB: 27621 { 27622 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 27623 pVal = tcl.XTcl_NewByteArrayObj(tls, sqlite3.Xsqlite3_value_blob(tls, pIn), bytes) 27624 break 27625 27626 } 27627 fallthrough 27628 case SQLITE_INTEGER: 27629 { 27630 var v sqlite_int64 = sqlite3.Xsqlite3_value_int64(tls, pIn) 27631 if v >= int64(-2147483647) && v <= int64(2147483647) { 27632 pVal = tcl.XTcl_NewIntObj(tls, int32(v)) 27633 } else { 27634 pVal = tcl.XTcl_NewWideIntObj(tls, v) 27635 } 27636 break 27637 27638 } 27639 fallthrough 27640 case SQLITE_FLOAT: 27641 { 27642 var r float64 = sqlite3.Xsqlite3_value_double(tls, pIn) 27643 pVal = tcl.XTcl_NewDoubleObj(tls, r) 27644 break 27645 27646 } 27647 fallthrough 27648 case SQLITE_NULL: 27649 { 27650 pVal = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 27651 break 27652 27653 } 27654 fallthrough 27655 default: 27656 { 27657 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 27658 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pIn), bytes) 27659 break 27660 27661 } 27662 } 27663 rc = tcl.XTcl_ListObjAppendElement(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, pVal) 27664 if rc != 0 { 27665 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27666 var _objPtr uintptr = pCmd 27667 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27668 tcl.XTclFreeObj(tls, _objPtr) 27669 } 27670 } 27671 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 27672 return 27673 } 27674 } 27675 if !((*SqlFunc)(unsafe.Pointer(p)).FuseEvalObjv != 0) { 27676 tcl.XTcl_GetString(tls, pCmd) 27677 } 27678 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 27679 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27680 var _objPtr uintptr = pCmd 27681 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27682 tcl.XTclFreeObj(tls, _objPtr) 27683 } 27684 } 27685 } 27686 27687 if rc != 0 && rc != TCL_RETURN { 27688 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 27689 } else { 27690 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp) 27691 27692 var data uintptr 27693 var zType uintptr = func() uintptr { 27694 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 27695 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 27696 } 27697 return ts + 584 27698 }() 27699 var c int8 = *(*int8)(unsafe.Pointer(zType)) 27700 var eType int32 = (*SqlFunc)(unsafe.Pointer(p)).FeType 27701 27702 if eType == SQLITE_NULL { 27703 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 27704 eType = SQLITE_BLOB 27705 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 || 27706 int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || 27707 int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 27708 eType = SQLITE_INTEGER 27709 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 27710 eType = SQLITE_FLOAT 27711 } else { 27712 eType = SQLITE_TEXT 27713 } 27714 } 27715 27716 switch eType { 27717 case SQLITE_BLOB: 27718 { 27719 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+16) 27720 sqlite3.Xsqlite3_result_blob(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 27721 break 27722 27723 } 27724 fallthrough 27725 case SQLITE_INTEGER: 27726 { 27727 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+24) { 27728 sqlite3.Xsqlite3_result_int64(tls, context, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 27729 break 27730 } 27731 27732 } 27733 fallthrough 27734 case SQLITE_FLOAT: 27735 { 27736 if TCL_OK == tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+32) { 27737 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 32))) 27738 break 27739 } 27740 27741 } 27742 fallthrough 27743 default: 27744 { 27745 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+16) 27746 sqlite3.Xsqlite3_result_text(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 27747 break 27748 27749 } 27750 } 27751 27752 } 27753 } 27754 27755 func auth_callback(tls *libc.TLS, pArg uintptr, code int32, zArg1 uintptr, zArg2 uintptr, zArg3 uintptr, zArg4 uintptr) int32 { 27756 bp := tls.Alloc(216) 27757 defer tls.Free(216) 27758 27759 var zCode uintptr 27760 27761 var rc int32 27762 var zReply uintptr 27763 27764 var pDb uintptr = pArg 27765 if (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth != 0 { 27766 return SQLITE_OK 27767 } 27768 27769 switch code { 27770 case SQLITE_COPY: 27771 zCode = ts + 10944 27772 break 27773 case SQLITE_CREATE_INDEX: 27774 zCode = ts + 10956 27775 break 27776 case SQLITE_CREATE_TABLE: 27777 zCode = ts + 10976 27778 break 27779 case SQLITE_CREATE_TEMP_INDEX: 27780 zCode = ts + 10996 27781 break 27782 case SQLITE_CREATE_TEMP_TABLE: 27783 zCode = ts + 11021 27784 break 27785 case SQLITE_CREATE_TEMP_TRIGGER: 27786 zCode = ts + 11046 27787 break 27788 case SQLITE_CREATE_TEMP_VIEW: 27789 zCode = ts + 11073 27790 break 27791 case SQLITE_CREATE_TRIGGER: 27792 zCode = ts + 11097 27793 break 27794 case SQLITE_CREATE_VIEW: 27795 zCode = ts + 11119 27796 break 27797 case SQLITE_DELETE: 27798 zCode = ts + 11138 27799 break 27800 case SQLITE_DROP_INDEX: 27801 zCode = ts + 11152 27802 break 27803 case SQLITE_DROP_TABLE: 27804 zCode = ts + 11170 27805 break 27806 case SQLITE_DROP_TEMP_INDEX: 27807 zCode = ts + 11188 27808 break 27809 case SQLITE_DROP_TEMP_TABLE: 27810 zCode = ts + 11211 27811 break 27812 case SQLITE_DROP_TEMP_TRIGGER: 27813 zCode = ts + 11234 27814 break 27815 case SQLITE_DROP_TEMP_VIEW: 27816 zCode = ts + 11259 27817 break 27818 case SQLITE_DROP_TRIGGER: 27819 zCode = ts + 11281 27820 break 27821 case SQLITE_DROP_VIEW: 27822 zCode = ts + 11301 27823 break 27824 case SQLITE_INSERT: 27825 zCode = ts + 11318 27826 break 27827 case SQLITE_PRAGMA: 27828 zCode = ts + 11332 27829 break 27830 case SQLITE_READ: 27831 zCode = ts + 11346 27832 break 27833 case SQLITE_SELECT: 27834 zCode = ts + 11358 27835 break 27836 case SQLITE_TRANSACTION: 27837 zCode = ts + 11372 27838 break 27839 case SQLITE_UPDATE: 27840 zCode = ts + 11391 27841 break 27842 case SQLITE_ATTACH: 27843 zCode = ts + 11405 27844 break 27845 case SQLITE_DETACH: 27846 zCode = ts + 11419 27847 break 27848 case SQLITE_ALTER_TABLE: 27849 zCode = ts + 11433 27850 break 27851 case SQLITE_REINDEX: 27852 zCode = ts + 11452 27853 break 27854 case SQLITE_ANALYZE: 27855 zCode = ts + 11467 27856 break 27857 case SQLITE_CREATE_VTABLE: 27858 zCode = ts + 11482 27859 break 27860 case SQLITE_DROP_VTABLE: 27861 zCode = ts + 11503 27862 break 27863 case SQLITE_FUNCTION: 27864 zCode = ts + 11522 27865 break 27866 case SQLITE_SAVEPOINT: 27867 zCode = ts + 11538 27868 break 27869 case SQLITE_RECURSIVE: 27870 zCode = ts + 11555 27871 break 27872 default: 27873 zCode = ts + 11572 27874 break 27875 } 27876 tcl.XTcl_DStringInit(tls, bp) 27877 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, -1) 27878 tcl.XTcl_DStringAppendElement(tls, bp, zCode) 27879 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 27880 if zArg1 != 0 { 27881 return zArg1 27882 } 27883 return ts + 584 27884 }()) 27885 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 27886 if zArg2 != 0 { 27887 return zArg2 27888 } 27889 return ts + 584 27890 }()) 27891 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 27892 if zArg3 != 0 { 27893 return zArg3 27894 } 27895 return ts + 584 27896 }()) 27897 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 27898 if zArg4 != 0 { 27899 return zArg4 27900 } 27901 return ts + 584 27902 }()) 27903 rc = tcl.XTcl_GlobalEval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 27904 tcl.XTcl_DStringFree(tls, bp) 27905 if rc == TCL_OK { 27906 zReply = tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27907 } else { 27908 zReply = ts + 11577 27909 } 27910 if libc.Xstrcmp(tls, zReply, ts+2127) == 0 { 27911 rc = SQLITE_OK 27912 } else if libc.Xstrcmp(tls, zReply, ts+11577) == 0 { 27913 rc = SQLITE_DENY 27914 } else if libc.Xstrcmp(tls, zReply, ts+11589) == 0 { 27915 rc = SQLITE_IGNORE 27916 } else { 27917 rc = 999 27918 } 27919 return rc 27920 } 27921 27922 func local_getline(tls *libc.TLS, zPrompt uintptr, in uintptr) uintptr { 27923 var zLine uintptr 27924 var nLine int32 27925 var n int32 27926 27927 nLine = 100 27928 zLine = libc.Xmalloc(tls, uint64(nLine)) 27929 if zLine == uintptr(0) { 27930 return uintptr(0) 27931 } 27932 n = 0 27933 for 1 != 0 { 27934 if n+100 > nLine { 27935 nLine = nLine*2 + 100 27936 zLine = libc.Xrealloc(tls, zLine, uint64(nLine)) 27937 if zLine == uintptr(0) { 27938 return uintptr(0) 27939 } 27940 } 27941 if libc.Xfgets(tls, zLine+uintptr(n), nLine-n, in) == uintptr(0) { 27942 if n == 0 { 27943 libc.Xfree(tls, zLine) 27944 return uintptr(0) 27945 } 27946 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 27947 break 27948 } 27949 for *(*int8)(unsafe.Pointer(zLine + uintptr(n))) != 0 { 27950 n++ 27951 } 27952 if n > 0 && int32(*(*int8)(unsafe.Pointer(zLine + uintptr(n-1)))) == '\n' { 27953 n-- 27954 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 27955 break 27956 } 27957 } 27958 zLine = libc.Xrealloc(tls, zLine, uint64(n+1)) 27959 return zLine 27960 } 27961 27962 func DbTransPostCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 27963 bp := tls.Alloc(16) 27964 defer tls.Free(16) 27965 27966 var pDb uintptr = *(*ClientData)(unsafe.Pointer(data)) 27967 var rc int32 = result 27968 var zEnd uintptr 27969 27970 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction-- 27971 zEnd = azEnd[libc.Bool32(rc == TCL_ERROR)*2+libc.Bool32((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0)] 27972 27973 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 27974 if sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zEnd, uintptr(0), uintptr(0), uintptr(0)) != 0 { 27975 if rc != TCL_ERROR { 27976 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 27977 rc = TCL_ERROR 27978 } 27979 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+7824, uintptr(0), uintptr(0), uintptr(0)) 27980 } 27981 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 27982 27983 delDatabaseRef(tls, pDb) 27984 return rc 27985 } 27986 27987 var azEnd = [4]uintptr{ 27988 ts + 11603, 27989 ts + 11628, 27990 ts + 11635, 27991 ts + 7824, 27992 } 27993 27994 func dbPrepare(tls *libc.TLS, pDb uintptr, zSql uintptr, ppStmt uintptr, pzOut uintptr) int32 { 27995 var prepFlags uint32 = uint32(0) 27996 if (*SqliteDb)(unsafe.Pointer(pDb)).FbLegacyPrepare != 0 { 27997 return sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, ppStmt, pzOut) 27998 } 27999 28000 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt > 5 { 28001 prepFlags = uint32(SQLITE_PREPARE_PERSISTENT) 28002 } 28003 28004 return sqlite3.Xsqlite3_prepare_v3(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, prepFlags, ppStmt, pzOut) 28005 } 28006 28007 func dbPrepareAndBind(tls *libc.TLS, pDb uintptr, zIn uintptr, pzOut uintptr, ppPreStmt uintptr) int32 { 28008 bp := tls.Alloc(32) 28009 defer tls.Free(32) 28010 28011 var zSql uintptr = zIn 28012 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 28013 var pPreStmt uintptr 28014 var nSql int32 28015 var nVar int32 = 0 28016 var iParm int32 = 0 28017 var c int8 28018 var i int32 28019 var needResultReset int32 = 0 28020 var rc int32 = SQLITE_OK 28021 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28022 28023 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = uintptr(0) 28024 28025 for int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zSql)))) == ' ' || int32(c) == '\t' || int32(c) == '\r' || int32(c) == '\n' { 28026 zSql++ 28027 } 28028 nSql = strlen30(tls, zSql) 28029 28030 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext { 28031 var n int32 = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql 28032 if nSql >= n && 28033 libc.Xmemcmp(tls, (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql, zSql, uint64(n)) == 0 && 28034 (int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n)))) == 0 || int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n-1)))) == ';') { 28035 *(*uintptr)(unsafe.Pointer(bp)) = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28036 *(*uintptr)(unsafe.Pointer(pzOut)) = zSql + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql) 28037 28038 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev != 0 { 28039 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev)).FpNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28040 } else { 28041 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28042 } 28043 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext != 0 { 28044 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext)).FpPrev = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28045 } else { 28046 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28047 } 28048 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28049 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28050 break 28051 } 28052 } 28053 28054 if pPreStmt == uintptr(0) { 28055 var nByte int32 28056 28057 if SQLITE_OK != dbPrepare(tls, pDb, zSql, bp, pzOut) { 28058 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28059 return TCL_ERROR 28060 } 28061 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 28062 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) { 28063 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28064 return TCL_ERROR 28065 } else { 28066 return TCL_OK 28067 } 28068 } 28069 28070 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28071 nByte = int32(uint64(unsafe.Sizeof(SqlPreparedStmt{})) + uint64(nVar)*uint64(unsafe.Sizeof(uintptr(0)))) 28072 pPreStmt = tcl.XTcl_Alloc(tls, uint32(nByte)) 28073 libc.Xmemset(tls, pPreStmt, 0, uint64(nByte)) 28074 28075 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt = *(*uintptr)(unsafe.Pointer(bp)) 28076 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql = int32((int64(*(*uintptr)(unsafe.Pointer(pzOut))) - int64(zSql)) / 1) 28077 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 28078 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm = pPreStmt + 1*56 28079 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql == uintptr(0) { 28080 var zCopy uintptr = tcl.XTcl_Alloc(tls, uint32((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql+1)) 28081 libc.Xmemcpy(tls, zCopy, zSql, uint64((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql)) 28082 *(*int8)(unsafe.Pointer(zCopy + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql))) = int8(0) 28083 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = zCopy 28084 } 28085 } 28086 28087 for i = 1; i <= nVar; i++ { 28088 var zVar uintptr = sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28089 if zVar != uintptr(0) && (int32(*(*int8)(unsafe.Pointer(zVar))) == '$' || int32(*(*int8)(unsafe.Pointer(zVar))) == ':' || int32(*(*int8)(unsafe.Pointer(zVar))) == '@') { 28090 var pVar uintptr = tcl.XTcl_GetVar2Ex(tls, interp, zVar+1, uintptr(0), 0) 28091 if pVar == uintptr(0) && (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != uintptr(0) { 28092 var pCmd uintptr 28093 var rx int32 28094 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, -1) 28095 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28096 tcl.XTcl_ListObjAppendElement(tls, interp, pCmd, tcl.XTcl_NewStringObj(tls, zVar, -1)) 28097 if needResultReset != 0 { 28098 tcl.XTcl_ResetResult(tls, interp) 28099 } 28100 needResultReset = 1 28101 rx = tcl.XTcl_EvalObjEx(tls, interp, pCmd, TCL_EVAL_DIRECT) 28102 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28103 var _objPtr uintptr = pCmd 28104 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28105 tcl.XTclFreeObj(tls, _objPtr) 28106 } 28107 } 28108 if rx == TCL_OK { 28109 pVar = tcl.XTcl_GetObjResult(tls, interp) 28110 } else if rx == TCL_ERROR { 28111 rc = TCL_ERROR 28112 break 28113 } else { 28114 pVar = uintptr(0) 28115 } 28116 } 28117 if pVar != 0 { 28118 var data uintptr 28119 var zType uintptr = func() uintptr { 28120 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28121 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28122 } 28123 return ts + 584 28124 }() 28125 c = *(*int8)(unsafe.Pointer(zType)) 28126 if int32(*(*int8)(unsafe.Pointer(zVar))) == '@' || int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28127 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+8) 28128 sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 28129 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28130 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 28131 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 28132 tcl.XTcl_GetIntFromObj(tls, interp, pVar, bp+8) 28133 sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*int32)(unsafe.Pointer(bp + 8))) 28134 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28135 tcl.XTcl_GetDoubleFromObj(tls, interp, pVar, bp+16) 28136 sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*float64)(unsafe.Pointer(bp + 16))) 28137 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28138 tcl.XTcl_GetWideIntFromObj(tls, interp, pVar, bp+24) 28139 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 28140 } else { 28141 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+8) 28142 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 28143 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28144 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 28145 } 28146 } else { 28147 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28148 } 28149 if needResultReset != 0 { 28150 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28151 } 28152 } 28153 } 28154 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = iParm 28155 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = pPreStmt 28156 if needResultReset != 0 && rc == TCL_OK { 28157 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28158 } 28159 28160 return rc 28161 } 28162 28163 func dbReleaseStmt(tls *libc.TLS, pDb uintptr, pPreStmt uintptr, discard int32) { 28164 var i int32 28165 28166 for i = 0; i < (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm; i++ { 28167 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28168 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(i)*8)) 28169 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28170 tcl.XTclFreeObj(tls, _objPtr) 28171 } 28172 } 28173 } 28174 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = 0 28175 28176 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt <= 0 || discard != 0 { 28177 dbFreeStmt(tls, pPreStmt) 28178 } else { 28179 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList 28180 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev = uintptr(0) 28181 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 28182 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpPrev = pPreStmt 28183 } 28184 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = pPreStmt 28185 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast == uintptr(0) { 28186 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = pPreStmt 28187 } else { 28188 } 28189 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt++ 28190 28191 for (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt > (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt { 28192 var pLast uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast 28193 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pLast)).FpPrev 28194 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast)).FpNext = uintptr(0) 28195 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28196 dbFreeStmt(tls, pLast) 28197 } 28198 } 28199 } 28200 28201 type DbEvalContext1 = struct { 28202 FpDb uintptr 28203 FpSql uintptr 28204 FzSql uintptr 28205 FpPreStmt uintptr 28206 FnCol int32 28207 FevalFlags int32 28208 FpArray uintptr 28209 FapColName uintptr 28210 } 28211 28212 type DbEvalContext = DbEvalContext1 28213 28214 func dbReleaseColumnNames(tls *libc.TLS, p uintptr) { 28215 if (*DbEvalContext)(unsafe.Pointer(p)).FapColName != 0 { 28216 var i int32 28217 for i = 0; i < (*DbEvalContext)(unsafe.Pointer(p)).FnCol; i++ { 28218 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28219 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FapColName + uintptr(i)*8)) 28220 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28221 tcl.XTclFreeObj(tls, _objPtr) 28222 } 28223 } 28224 } 28225 tcl.XTcl_Free(tls, (*DbEvalContext)(unsafe.Pointer(p)).FapColName) 28226 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = uintptr(0) 28227 } 28228 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = 0 28229 } 28230 28231 func dbEvalInit(tls *libc.TLS, p uintptr, pDb uintptr, pSql uintptr, pArray uintptr, evalFlags int32) { 28232 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(DbEvalContext{}))) 28233 (*DbEvalContext)(unsafe.Pointer(p)).FpDb = pDb 28234 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = tcl.XTcl_GetString(tls, pSql) 28235 (*DbEvalContext)(unsafe.Pointer(p)).FpSql = pSql 28236 (*Tcl_Obj)(unsafe.Pointer(pSql)).FrefCount++ 28237 if pArray != 0 { 28238 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = pArray 28239 (*Tcl_Obj)(unsafe.Pointer(pArray)).FrefCount++ 28240 } 28241 (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags = evalFlags 28242 addDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 28243 } 28244 28245 func dbEvalRowInfo(tls *libc.TLS, p uintptr, pnCol uintptr, papColName uintptr) { 28246 if uintptr(0) == (*DbEvalContext)(unsafe.Pointer(p)).FapColName { 28247 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 28248 var i int32 28249 var nCol int32 28250 var apColName uintptr = uintptr(0) 28251 28252 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = libc.AssignInt32(&nCol, sqlite3.Xsqlite3_column_count(tls, pStmt)) 28253 if nCol > 0 && (papColName != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0) { 28254 apColName = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol))) 28255 for i = 0; i < nCol; i++ { 28256 *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)) = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_name(tls, pStmt, i), -1) 28257 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)))).FrefCount++ 28258 } 28259 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = apColName 28260 } 28261 28262 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28263 var interp uintptr = (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).Finterp 28264 var pColList uintptr = tcl.XTcl_NewObj(tls) 28265 var pStar uintptr = tcl.XTcl_NewStringObj(tls, ts+3840, -1) 28266 28267 for i = 0; i < nCol; i++ { 28268 tcl.XTcl_ListObjAppendElement(tls, interp, pColList, *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8))) 28269 } 28270 (*Tcl_Obj)(unsafe.Pointer(pStar)).FrefCount++ 28271 tcl.XTcl_ObjSetVar2(tls, interp, (*DbEvalContext)(unsafe.Pointer(p)).FpArray, pStar, pColList, 0) 28272 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28273 var _objPtr uintptr = pStar 28274 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28275 tcl.XTclFreeObj(tls, _objPtr) 28276 } 28277 } 28278 } 28279 } 28280 28281 if papColName != 0 { 28282 *(*uintptr)(unsafe.Pointer(papColName)) = (*DbEvalContext)(unsafe.Pointer(p)).FapColName 28283 } 28284 if pnCol != 0 { 28285 *(*int32)(unsafe.Pointer(pnCol)) = (*DbEvalContext)(unsafe.Pointer(p)).FnCol 28286 } 28287 } 28288 28289 func dbEvalStep(tls *libc.TLS, p uintptr) int32 { 28290 var zPrevSql uintptr = uintptr(0) 28291 28292 for *(*int8)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FzSql)) != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 28293 var rc int32 28294 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt == uintptr(0) { 28295 zPrevSql = func() uintptr { 28296 if (*DbEvalContext)(unsafe.Pointer(p)).FzSql == zPrevSql { 28297 return uintptr(0) 28298 } 28299 return (*DbEvalContext)(unsafe.Pointer(p)).FzSql 28300 }() 28301 rc = dbPrepareAndBind(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FzSql, p+16, p+24) 28302 if rc != TCL_OK { 28303 return rc 28304 } 28305 } else { 28306 var rcs int32 28307 var pDb uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpDb 28308 var pPreStmt uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt 28309 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28310 28311 rcs = sqlite3.Xsqlite3_step(tls, pStmt) 28312 if rcs == SQLITE_ROW { 28313 return TCL_OK 28314 } 28315 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28316 dbEvalRowInfo(tls, p, uintptr(0), uintptr(0)) 28317 } 28318 rcs = sqlite3.Xsqlite3_reset(tls, pStmt) 28319 28320 (*SqliteDb)(unsafe.Pointer(pDb)).FnStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, 1) 28321 (*SqliteDb)(unsafe.Pointer(pDb)).FnSort = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_SORT, 1) 28322 (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_AUTOINDEX, 1) 28323 (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_VM_STEP, 1) 28324 dbReleaseColumnNames(tls, p) 28325 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 28326 28327 if rcs != SQLITE_OK { 28328 dbReleaseStmt(tls, pDb, pPreStmt, 1) 28329 if (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FbLegacyPrepare != 0 && rcs == SQLITE_SCHEMA && zPrevSql != 0 { 28330 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = zPrevSql 28331 continue 28332 } 28333 tcl.XTcl_SetObjResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, 28334 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28335 return TCL_ERROR 28336 } else { 28337 dbReleaseStmt(tls, pDb, pPreStmt, 0) 28338 } 28339 } 28340 } 28341 28342 return TCL_BREAK 28343 } 28344 28345 func dbEvalFinalize(tls *libc.TLS, p uintptr) { 28346 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 28347 sqlite3.Xsqlite3_reset(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt) 28348 dbReleaseStmt(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt, 0) 28349 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 28350 } 28351 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28352 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28353 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 28354 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28355 tcl.XTclFreeObj(tls, _objPtr) 28356 } 28357 } 28358 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = uintptr(0) 28359 } 28360 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28361 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpSql 28362 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28363 tcl.XTclFreeObj(tls, _objPtr) 28364 } 28365 } 28366 dbReleaseColumnNames(tls, p) 28367 delDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 28368 } 28369 28370 func dbEvalColumnValue(tls *libc.TLS, p uintptr, iCol int32) uintptr { 28371 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 28372 switch sqlite3.Xsqlite3_column_type(tls, pStmt, iCol) { 28373 case SQLITE_BLOB: 28374 { 28375 var bytes int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, iCol) 28376 var zBlob uintptr = sqlite3.Xsqlite3_column_blob(tls, pStmt, iCol) 28377 if !(zBlob != 0) { 28378 bytes = 0 28379 } 28380 return tcl.XTcl_NewByteArrayObj(tls, zBlob, bytes) 28381 28382 } 28383 case SQLITE_INTEGER: 28384 { 28385 var v sqlite_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, iCol) 28386 if v >= int64(-2147483647) && v <= int64(2147483647) { 28387 return tcl.XTcl_NewIntObj(tls, int32(v)) 28388 } else { 28389 return tcl.XTcl_NewWideIntObj(tls, v) 28390 } 28391 28392 } 28393 fallthrough 28394 case SQLITE_FLOAT: 28395 { 28396 return tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_column_double(tls, pStmt, iCol)) 28397 28398 } 28399 case SQLITE_NULL: 28400 { 28401 return tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 28402 28403 } 28404 } 28405 28406 return tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_text(tls, pStmt, iCol), -1) 28407 } 28408 28409 func DbUseNre(tls *libc.TLS) int32 { 28410 bp := tls.Alloc(8) 28411 defer tls.Free(8) 28412 28413 tcl.XTcl_GetVersion(tls, bp, bp+4, uintptr(0), uintptr(0)) 28414 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == 8 && *(*int32)(unsafe.Pointer(bp + 4)) >= 6 || *(*int32)(unsafe.Pointer(bp)) > 8) 28415 } 28416 28417 func DbEvalNextCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 28418 bp := tls.Alloc(16) 28419 defer tls.Free(16) 28420 28421 var rc int32 = result 28422 28423 var p uintptr = *(*ClientData)(unsafe.Pointer(data)) 28424 var pScript uintptr = *(*ClientData)(unsafe.Pointer(data + 1*8)) 28425 var pArray uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 28426 28427 for (rc == TCL_OK || rc == TCL_CONTINUE) && TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, p)) { 28428 var i int32 28429 28430 dbEvalRowInfo(tls, p, bp, bp+8) 28431 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 28432 if pArray == uintptr(0) { 28433 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(0), dbEvalColumnValue(tls, p, i), 0) 28434 } else if (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags&SQLITE_EVAL_WITHOUTNULLS != 0 && 28435 sqlite3.Xsqlite3_column_type(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt, i) == SQLITE_NULL { 28436 tcl.XTcl_UnsetVar2(tls, interp, tcl.XTcl_GetString(tls, pArray), 28437 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8))), 0) 28438 } else { 28439 tcl.XTcl_ObjSetVar2(tls, interp, pArray, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), dbEvalColumnValue(tls, p, i), 0) 28440 } 28441 } 28442 28443 if DbUseNre(tls) != 0 { 28444 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 28445 f func(*libc.TLS, uintptr, uintptr, int32) int32 28446 }{DbEvalNextCmd})), p, pScript, uintptr(0), uintptr(0)) 28447 return tcl.XTcl_NREvalObj(tls, interp, pScript, 0) 28448 } else { 28449 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 28450 } 28451 } 28452 28453 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28454 var _objPtr uintptr = pScript 28455 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28456 tcl.XTclFreeObj(tls, _objPtr) 28457 } 28458 } 28459 dbEvalFinalize(tls, p) 28460 tcl.XTcl_Free(tls, p) 28461 28462 if rc == TCL_OK || rc == TCL_BREAK { 28463 tcl.XTcl_ResetResult(tls, interp) 28464 rc = TCL_OK 28465 } 28466 return rc 28467 } 28468 28469 func DbHookCmd(tls *libc.TLS, interp uintptr, pDb uintptr, pArg uintptr, ppHook uintptr) { 28470 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 28471 28472 if *(*uintptr)(unsafe.Pointer(ppHook)) != 0 { 28473 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(ppHook))) 28474 if pArg != 0 { 28475 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28476 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer(ppHook)) 28477 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28478 tcl.XTclFreeObj(tls, _objPtr) 28479 } 28480 } 28481 *(*uintptr)(unsafe.Pointer(ppHook)) = uintptr(0) 28482 } 28483 } 28484 if pArg != 0 { 28485 if tcl.XTcl_GetCharLength(tls, pArg) > 0 { 28486 *(*uintptr)(unsafe.Pointer(ppHook)) = pArg 28487 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppHook)))).FrefCount++ 28488 } 28489 } 28490 28491 sqlite3.Xsqlite3_preupdate_hook(tls, db, func() uintptr { 28492 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 28493 return *(*uintptr)(unsafe.Pointer(&struct { 28494 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, sqlite_int64, sqlite_int64) 28495 }{DbPreUpdateHandler})) 28496 } 28497 return uintptr(0) 28498 }(), pDb) 28499 sqlite3.Xsqlite3_update_hook(tls, db, func() uintptr { 28500 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 28501 return *(*uintptr)(unsafe.Pointer(&struct { 28502 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, sqlite_int64) 28503 }{DbUpdateHandler})) 28504 } 28505 return uintptr(0) 28506 }(), pDb) 28507 sqlite3.Xsqlite3_rollback_hook(tls, db, func() uintptr { 28508 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 28509 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbRollbackHandler})) 28510 } 28511 return uintptr(0) 28512 }(), pDb) 28513 sqlite3.Xsqlite3_wal_hook(tls, db, func() uintptr { 28514 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 28515 return *(*uintptr)(unsafe.Pointer(&struct { 28516 f func(*libc.TLS, uintptr, uintptr, uintptr, int32) int32 28517 }{DbWalHandler})) 28518 } 28519 return uintptr(0) 28520 }(), pDb) 28521 } 28522 28523 func DbObjCmd(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 28524 bp := tls.Alloc(1588) 28525 defer tls.Free(1588) 28526 *(*uintptr)(unsafe.Pointer(bp + 1464)) = cd 28527 28528 var pDb uintptr 28529 28530 var rc int32 28531 var zAuth uintptr 28532 28533 var zDestFile uintptr 28534 var zSrcDb uintptr 28535 28536 var pBackup uintptr 28537 var zCallback uintptr 28538 28539 var zBusy uintptr 28540 28541 var subCmd uintptr 28542 28543 var pResult uintptr 28544 var pCollate uintptr 28545 var zName uintptr 28546 var zScript uintptr 28547 28548 var _objPtr uintptr 28549 var zCommit uintptr 28550 28551 var pResult1 uintptr 28552 var isComplete int32 28553 28554 var zOpt uintptr 28555 28556 var pResult2 uintptr 28557 var ii int32 28558 var zErr uintptr 28559 var nErr int32 28560 var z uintptr 28561 var zTable uintptr 28562 var zFile uintptr 28563 var zConflict uintptr 28564 28565 var nCol int32 28566 var nByte int32 28567 var i int32 28568 var j int32 28569 var nSep int32 28570 var nNull int32 28571 var zSql uintptr 28572 var zLine uintptr 28573 var azCol uintptr 28574 var zCommit1 uintptr 28575 var in uintptr 28576 var lineno int32 28577 28578 var pResult3 uintptr 28579 28580 var zSep uintptr 28581 var zNull uintptr 28582 28583 var z1 uintptr 28584 var flags int32 28585 var zSchema uintptr 28586 var pValue uintptr 28587 var pBA uintptr 28588 var pData uintptr 28589 28590 var xrc int32 28591 28592 var i1 int32 28593 28594 var pResult4 uintptr 28595 28596 var i2 int32 28597 28598 var _objPtr1 uintptr 28599 28600 var pRet uintptr 28601 28602 var p uintptr 28603 var pArray uintptr 28604 var pScript uintptr 28605 var evalFlags int32 28606 var zOpt1 uintptr 28607 28608 var z2 uintptr 28609 var n1 int32 28610 var _objPtr2 uintptr 28611 var flags1 int32 28612 var pFunc uintptr 28613 var pScript1 uintptr 28614 var zName1 uintptr 28615 28616 var i3 int32 28617 28618 var isReadonly1 int32 28619 var zDb uintptr 28620 var zTable1 uintptr 28621 var zColumn uintptr 28622 28623 var zNull1 uintptr 28624 var pResult5 uintptr 28625 var rowid Tcl_WideInt 28626 var zProgress uintptr 28627 28628 var zProfile uintptr 28629 28630 var zSrcFile uintptr 28631 var zDestDb uintptr 28632 28633 var pBackup1 uintptr 28634 var nTimeout int32 28635 var needFree int32 28636 var zSchema1 uintptr 28637 28638 var pData1 uintptr 28639 var v2 int32 28640 var zOp uintptr 28641 28642 var pResult6 uintptr 28643 var zTrace uintptr 28644 28645 var _objPtr3 uintptr 28646 var _objPtr4 uintptr 28647 28648 var pError uintptr 28649 28650 var i4 int32 28651 var zTraceV2 uintptr 28652 28653 var wMask Tcl_WideInt 28654 28655 var pScript2 uintptr 28656 var zBegin uintptr 28657 var _objPtr5 uintptr 28658 var xNotify uintptr 28659 var pNotifyArg uintptr 28660 var nCol2 int32 28661 var pRet1 uintptr 28662 var pObj1 uintptr 28663 28664 var ppHook uintptr 28665 28666 var zArg uintptr 28667 var i5 int32 28668 pDb = *(*uintptr)(unsafe.Pointer(bp + 1464)) 28669 rc = TCL_OK 28670 28671 if !(objc < 2) { 28672 goto __1 28673 } 28674 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 28675 return TCL_ERROR 28676 __1: 28677 ; 28678 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) { 28679 goto __2 28680 } 28681 return TCL_ERROR 28682 __2: 28683 ; 28684 switch uint32(*(*int32)(unsafe.Pointer(bp + 1016))) { 28685 case uint32(0): 28686 goto __4 28687 28688 case uint32(1): 28689 goto __5 28690 28691 case uint32(2): 28692 goto __6 28693 28694 case uint32(3): 28695 goto __7 28696 28697 case uint32(4): 28698 goto __8 28699 28700 case uint32(5): 28701 goto __9 28702 28703 case uint32(6): 28704 goto __10 28705 28706 case uint32(7): 28707 goto __11 28708 28709 case uint32(8): 28710 goto __12 28711 28712 case uint32(9): 28713 goto __13 28714 28715 case uint32(10): 28716 goto __14 28717 28718 case uint32(11): 28719 goto __15 28720 28721 case uint32(12): 28722 goto __16 28723 28724 case uint32(13): 28725 goto __17 28726 28727 case uint32(14): 28728 goto __18 28729 28730 case uint32(15): 28731 goto __19 28732 28733 case uint32(16): 28734 goto __20 28735 28736 case uint32(18): 28737 goto __21 28738 case uint32(24): 28739 goto __22 28740 28741 case uint32(17): 28742 goto __23 28743 28744 case uint32(19): 28745 goto __24 28746 28747 case uint32(20): 28748 goto __25 28749 28750 case uint32(21): 28751 goto __26 28752 28753 case uint32(23): 28754 goto __27 28755 28756 case uint32(22): 28757 goto __28 28758 28759 case uint32(27): 28760 goto __29 28761 28762 case uint32(26): 28763 goto __30 28764 28765 case uint32(28): 28766 goto __31 28767 28768 case uint32(29): 28769 goto __32 28770 28771 case uint32(31): 28772 goto __33 28773 28774 case uint32(32): 28775 goto __34 28776 28777 case uint32(33): 28778 goto __35 28779 28780 case uint32(34): 28781 goto __36 28782 28783 case uint32(35): 28784 goto __37 28785 28786 case uint32(36): 28787 goto __38 28788 28789 case uint32(37): 28790 goto __39 28791 28792 case uint32(38): 28793 goto __40 28794 28795 case uint32(25): 28796 goto __41 28797 28798 case uint32(41): 28799 goto __42 28800 case uint32(39): 28801 goto __43 28802 case uint32(30): 28803 goto __44 28804 28805 case uint32(40): 28806 goto __45 28807 } 28808 goto __3 28809 28810 __4: 28811 if !(objc > 3) { 28812 goto __46 28813 } 28814 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 28815 return TCL_ERROR 28816 goto __47 28817 __46: 28818 if !(objc == 2) { 28819 goto __48 28820 } 28821 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 28822 goto __50 28823 } 28824 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, uintptr(0))) 28825 __50: 28826 ; 28827 goto __49 28828 __48: 28829 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 28830 goto __51 28831 } 28832 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 28833 __51: 28834 ; 28835 zAuth = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1020) 28836 if !(zAuth != 0 && *(*int32)(unsafe.Pointer(bp + 1020)) > 0) { 28837 goto __52 28838 } 28839 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 28840 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, zAuth, uint64(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 28841 goto __53 28842 __52: 28843 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = uintptr(0) 28844 __53: 28845 ; 28846 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 28847 goto __54 28848 } 28849 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 28850 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 28851 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 28852 }{auth_callback})), pDb) 28853 goto __55 28854 __54: 28855 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 28856 __55: 28857 ; 28858 __49: 28859 ; 28860 __47: 28861 ; 28862 goto __3 28863 28864 __5: 28865 if !(objc == 3) { 28866 goto __56 28867 } 28868 zSrcDb = ts + 85 28869 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28870 goto __57 28871 __56: 28872 if !(objc == 4) { 28873 goto __58 28874 } 28875 zSrcDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28876 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 28877 goto __59 28878 __58: 28879 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 28880 return TCL_ERROR 28881 __59: 28882 ; 28883 __57: 28884 ; 28885 rc = sqlite3.Xsqlite3_open_v2(tls, zDestFile, bp+1024, 28886 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 28887 if !(rc != SQLITE_OK) { 28888 goto __60 28889 } 28890 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+11729, 28891 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 28892 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 28893 return TCL_ERROR 28894 __60: 28895 ; 28896 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 1024)), ts+85, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSrcDb) 28897 if !(pBackup == uintptr(0)) { 28898 goto __61 28899 } 28900 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+11759, 28901 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 28902 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 28903 return TCL_ERROR 28904 __61: 28905 ; 28906 __62: 28907 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup, 100)) == SQLITE_OK) { 28908 goto __63 28909 } 28910 goto __62 28911 __63: 28912 ; 28913 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 28914 if !(rc == SQLITE_DONE) { 28915 goto __64 28916 } 28917 rc = TCL_OK 28918 goto __65 28919 __64: 28920 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+11759, 28921 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 28922 rc = TCL_ERROR 28923 __65: 28924 ; 28925 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 28926 goto __3 28927 28928 __6: 28929 if !(objc > 3) { 28930 goto __66 28931 } 28932 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 28933 return TCL_ERROR 28934 goto __67 28935 __66: 28936 if !(objc == 2) { 28937 goto __68 28938 } 28939 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 28940 goto __70 28941 } 28942 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+88, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, uintptr(0))) 28943 __70: 28944 ; 28945 goto __69 28946 __68: 28947 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 28948 goto __71 28949 } 28950 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 28951 __71: 28952 ; 28953 zCallback = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1032) 28954 if !(zCallback != 0 && *(*int32)(unsafe.Pointer(bp + 1032)) > 0) { 28955 goto __72 28956 } 28957 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 28958 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, zCallback, uint64(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 28959 goto __73 28960 __72: 28961 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = uintptr(0) 28962 __73: 28963 ; 28964 __69: 28965 ; 28966 __67: 28967 ; 28968 goto __3 28969 28970 __7: 28971 if !(objc > 3) { 28972 goto __74 28973 } 28974 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11775) 28975 return TCL_ERROR 28976 goto __75 28977 __74: 28978 if !(objc == 2) { 28979 goto __76 28980 } 28981 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 28982 goto __78 28983 } 28984 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, uintptr(0))) 28985 __78: 28986 ; 28987 goto __77 28988 __76: 28989 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 28990 goto __79 28991 } 28992 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 28993 __79: 28994 ; 28995 zBusy = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1036) 28996 if !(zBusy != 0 && *(*int32)(unsafe.Pointer(bp + 1036)) > 0) { 28997 goto __80 28998 } 28999 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 29000 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, zBusy, uint64(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 29001 goto __81 29002 __80: 29003 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = uintptr(0) 29004 __81: 29005 ; 29006 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29007 goto __82 29008 } 29009 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29010 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29011 f func(*libc.TLS, uintptr, int32) int32 29012 }{DbBusyHandler})), pDb) 29013 goto __83 29014 __82: 29015 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29016 __83: 29017 ; 29018 __77: 29019 ; 29020 __75: 29021 ; 29022 goto __3 29023 29024 __8: 29025 if !(objc <= 2) { 29026 goto __84 29027 } 29028 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+11784) 29029 return TCL_ERROR 29030 __84: 29031 ; 29032 subCmd = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29033 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 'f' && libc.Xstrcmp(tls, subCmd, ts+11803) == 0) { 29034 goto __85 29035 } 29036 if !(objc != 3) { 29037 goto __87 29038 } 29039 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11803) 29040 return TCL_ERROR 29041 goto __88 29042 __87: 29043 flushStmtCache(tls, pDb) 29044 __88: 29045 ; 29046 goto __86 29047 __85: 29048 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 's' && libc.Xstrcmp(tls, subCmd, ts+11809) == 0) { 29049 goto __89 29050 } 29051 if !(objc != 4) { 29052 goto __91 29053 } 29054 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11814) 29055 return TCL_ERROR 29056 goto __92 29057 __91: 29058 if !(TCL_ERROR == tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1040)) { 29059 goto __93 29060 } 29061 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+120, ts+11821, 29062 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)), ts+11838, uintptr(0))) 29063 return TCL_ERROR 29064 goto __94 29065 __93: 29066 if !(*(*int32)(unsafe.Pointer(bp + 1040)) < 0) { 29067 goto __95 29068 } 29069 flushStmtCache(tls, pDb) 29070 *(*int32)(unsafe.Pointer(bp + 1040)) = 0 29071 goto __96 29072 __95: 29073 if !(*(*int32)(unsafe.Pointer(bp + 1040)) > MAX_PREPARED_STMTS) { 29074 goto __97 29075 } 29076 *(*int32)(unsafe.Pointer(bp + 1040)) = MAX_PREPARED_STMTS 29077 __97: 29078 ; 29079 __96: 29080 ; 29081 (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt = *(*int32)(unsafe.Pointer(bp + 1040)) 29082 __94: 29083 ; 29084 __92: 29085 ; 29086 goto __90 29087 __89: 29088 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+152, ts+11851, 29089 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)), ts+11864, 29090 uintptr(0))) 29091 return TCL_ERROR 29092 __90: 29093 ; 29094 __86: 29095 ; 29096 goto __3 29097 29098 __9: 29099 if !(objc != 2) { 29100 goto __98 29101 } 29102 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 29103 return TCL_ERROR 29104 __98: 29105 ; 29106 pResult = tcl.XTcl_GetObjResult(tls, interp) 29107 tcl.XTcl_SetWideIntObj(tls, pResult, sqlite3.Xsqlite3_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 29108 goto __3 29109 29110 __10: 29111 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0))) 29112 goto __3 29113 29114 __11: 29115 if !(objc != 4) { 29116 goto __99 29117 } 29118 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11889) 29119 return TCL_ERROR 29120 __99: 29121 ; 29122 zName = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29123 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1044) 29124 pCollate = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlCollate{}))+uint64(*(*int32)(unsafe.Pointer(bp + 1044)))+uint64(1))) 29125 if !(pCollate == uintptr(0)) { 29126 goto __100 29127 } 29128 return TCL_ERROR 29129 __100: 29130 ; 29131 (*SqlCollate)(unsafe.Pointer(pCollate)).Finterp = interp 29132 (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 29133 (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript = pCollate + 1*24 29134 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = pCollate 29135 libc.Xmemcpy(tls, (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 1044))+1)) 29136 if !(sqlite3.Xsqlite3_create_collation(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName, SQLITE_UTF8, 29137 pCollate, *(*uintptr)(unsafe.Pointer(&struct { 29138 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 29139 }{tclSqlCollate}))) != 0) { 29140 goto __101 29141 } 29142 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 29143 return TCL_ERROR 29144 __101: 29145 ; 29146 goto __3 29147 29148 __12: 29149 if !(objc != 3) { 29150 goto __102 29151 } 29152 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+10187) 29153 return TCL_ERROR 29154 __102: 29155 ; 29156 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0) { 29157 goto __103 29158 } 29159 __104: 29160 _objPtr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 29161 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1) { 29162 goto __107 29163 } 29164 tcl.XTclFreeObj(tls, _objPtr) 29165 __107: 29166 ; 29167 goto __105 29168 __105: 29169 if 0 != 0 { 29170 goto __104 29171 } 29172 goto __106 29173 __106: 29174 ; 29175 __103: 29176 ; 29177 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29178 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount++ 29179 sqlite3.Xsqlite3_collation_needed(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, pDb, *(*uintptr)(unsafe.Pointer(&struct { 29180 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 29181 }{tclCollateNeeded}))) 29182 goto __3 29183 29184 __13: 29185 if !(objc > 3) { 29186 goto __108 29187 } 29188 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29189 return TCL_ERROR 29190 goto __109 29191 __108: 29192 if !(objc == 2) { 29193 goto __110 29194 } 29195 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29196 goto __112 29197 } 29198 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+184, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, uintptr(0))) 29199 __112: 29200 ; 29201 goto __111 29202 __110: 29203 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29204 goto __113 29205 } 29206 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 29207 __113: 29208 ; 29209 zCommit = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1048) 29210 if !(zCommit != 0 && *(*int32)(unsafe.Pointer(bp + 1048)) > 0) { 29211 goto __114 29212 } 29213 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 29214 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, zCommit, uint64(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 29215 goto __115 29216 __114: 29217 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = uintptr(0) 29218 __115: 29219 ; 29220 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29221 goto __116 29222 } 29223 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29224 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29225 f func(*libc.TLS, uintptr) int32 29226 }{DbCommitHandler})), pDb) 29227 goto __117 29228 __116: 29229 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29230 __117: 29231 ; 29232 __111: 29233 ; 29234 __109: 29235 ; 29236 goto __3 29237 29238 __14: 29239 if !(objc != 3) { 29240 goto __118 29241 } 29242 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 29243 return TCL_ERROR 29244 __118: 29245 ; 29246 isComplete = sqlite3.Xsqlite3_complete(tls, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0))) 29247 pResult1 = tcl.XTcl_GetObjResult(tls, interp) 29248 tcl.XTcl_SetIntObj(tls, pResult1, libc.Bool32(isComplete != 0)) 29249 goto __3 29250 29251 __15: 29252 if !(objc > 4) { 29253 goto __119 29254 } 29255 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11901) 29256 return TCL_ERROR 29257 __119: 29258 ; 29259 if !(objc == 2) { 29260 goto __120 29261 } 29262 29263 pResult2 = tcl.XTcl_NewListObj(tls, 0, uintptr(0)) 29264 ii = 0 29265 __122: 29266 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29267 goto __124 29268 } 29269 *(*int32)(unsafe.Pointer(bp + 1052)) = 0 29270 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+200, -1, bp+1052)) 29271 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 29272 tcl.XTcl_NewStringObj(tls, aDbConfig[ii].FzName, -1)) 29273 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 29274 tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1052)))) 29275 goto __123 29276 __123: 29277 ii++ 29278 goto __122 29279 goto __124 29280 __124: 29281 ; 29282 goto __121 29283 __120: 29284 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29285 *(*int32)(unsafe.Pointer(bp + 1056)) = -1 29286 *(*int32)(unsafe.Pointer(bp + 1060)) = 0 29287 if !(int32(*(*int8)(unsafe.Pointer(zOpt))) == '-') { 29288 goto __125 29289 } 29290 zOpt++ 29291 __125: 29292 ; 29293 ii = 0 29294 __126: 29295 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29296 goto __128 29297 } 29298 if !(libc.Xstrcmp(tls, aDbConfig[ii].FzName, zOpt) == 0) { 29299 goto __129 29300 } 29301 goto __128 29302 __129: 29303 ; 29304 goto __127 29305 __127: 29306 ii++ 29307 goto __126 29308 goto __128 29309 __128: 29310 ; 29311 if !(uint64(ii) >= uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29312 goto __130 29313 } 29314 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+216, ts+11920, zOpt, 29315 ts+11945, uintptr(0))) 29316 return TCL_ERROR 29317 __130: 29318 ; 29319 if !(objc == 4) { 29320 goto __131 29321 } 29322 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1056) != 0) { 29323 goto __132 29324 } 29325 return TCL_ERROR 29326 __132: 29327 ; 29328 __131: 29329 ; 29330 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+248, *(*int32)(unsafe.Pointer(bp + 1056)), bp+1060)) 29331 pResult2 = tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1060))) 29332 __121: 29333 ; 29334 tcl.XTcl_SetObjResult(tls, interp, pResult2) 29335 goto __3 29336 29337 __16: 29338 lineno = 0 29339 if !(objc < 5 || objc > 7) { 29340 goto __133 29341 } 29342 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 29343 ts+11947) 29344 return TCL_ERROR 29345 __133: 29346 ; 29347 if !(objc >= 6) { 29348 goto __134 29349 } 29350 zSep = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8)), uintptr(0)) 29351 goto __135 29352 __134: 29353 zSep = ts + 12009 29354 __135: 29355 ; 29356 if !(objc >= 7) { 29357 goto __136 29358 } 29359 zNull = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8)), uintptr(0)) 29360 goto __137 29361 __136: 29362 zNull = ts + 584 29363 __137: 29364 ; 29365 zConflict = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29366 zTable = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)) 29367 zFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0)) 29368 nSep = strlen30(tls, zSep) 29369 nNull = strlen30(tls, zNull) 29370 if !(nSep == 0) { 29371 goto __138 29372 } 29373 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+264, ts+12011, 29374 uintptr(0))) 29375 return TCL_ERROR 29376 __138: 29377 ; 29378 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) { 29379 goto __139 29380 } 29381 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+280, ts+12090, zConflict, 29382 ts+12099, uintptr(0))) 29383 return TCL_ERROR 29384 __139: 29385 ; 29386 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+12179, libc.VaList(bp+312, zTable)) 29387 if !(zSql == uintptr(0)) { 29388 goto __140 29389 } 29390 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+320, ts+12198, zTable, uintptr(0))) 29391 return TCL_ERROR 29392 __140: 29393 ; 29394 nByte = strlen30(tls, zSql) 29395 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 29396 sqlite3.Xsqlite3_free(tls, zSql) 29397 if !(rc != 0) { 29398 goto __141 29399 } 29400 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+344, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29401 nCol = 0 29402 goto __142 29403 __141: 29404 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29405 __142: 29406 ; 29407 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29408 if !(nCol == 0) { 29409 goto __143 29410 } 29411 return TCL_ERROR 29412 __143: 29413 ; 29414 zSql = libc.Xmalloc(tls, uint64(nByte+50+nCol*2)) 29415 if !(zSql == uintptr(0)) { 29416 goto __144 29417 } 29418 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+368, ts+12229, uintptr(0))) 29419 return TCL_ERROR 29420 __144: 29421 ; 29422 sqlite3.Xsqlite3_snprintf(tls, nByte+50, zSql, ts+12251, 29423 libc.VaList(bp+384, zConflict, zTable)) 29424 j = strlen30(tls, zSql) 29425 i = 1 29426 __145: 29427 if !(i < nCol) { 29428 goto __147 29429 } 29430 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(',') 29431 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 29432 goto __146 29433 __146: 29434 i++ 29435 goto __145 29436 goto __147 29437 __147: 29438 ; 29439 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(')') 29440 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 29441 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 29442 libc.Xfree(tls, zSql) 29443 if !(rc != 0) { 29444 goto __148 29445 } 29446 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+400, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29447 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29448 return TCL_ERROR 29449 __148: 29450 ; 29451 in = libc.Xfopen(tls, zFile, ts+4402) 29452 if !(in == uintptr(0)) { 29453 goto __149 29454 } 29455 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+424, ts+12283, zFile, uintptr(0))) 29456 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29457 return TCL_ERROR 29458 __149: 29459 ; 29460 azCol = libc.Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol+1)) 29461 if !(azCol == uintptr(0)) { 29462 goto __150 29463 } 29464 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+448, ts+12229, uintptr(0))) 29465 libc.Xfclose(tls, in) 29466 return TCL_ERROR 29467 __150: 29468 ; 29469 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+12309, uintptr(0), uintptr(0), uintptr(0)) 29470 zCommit1 = ts + 11628 29471 __151: 29472 if !(libc.AssignUintptr(&zLine, local_getline(tls, uintptr(0), in)) != uintptr(0)) { 29473 goto __152 29474 } 29475 lineno++ 29476 *(*uintptr)(unsafe.Pointer(azCol)) = zLine 29477 i = 0 29478 z = zLine 29479 __153: 29480 if !(*(*int8)(unsafe.Pointer(z)) != 0) { 29481 goto __155 29482 } 29483 if !(int32(*(*int8)(unsafe.Pointer(z))) == int32(*(*int8)(unsafe.Pointer(zSep))) && libc.Xstrncmp(tls, z, zSep, uint64(nSep)) == 0) { 29484 goto __156 29485 } 29486 *(*int8)(unsafe.Pointer(z)) = int8(0) 29487 i++ 29488 if !(i < nCol) { 29489 goto __157 29490 } 29491 *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)) = z + uintptr(nSep) 29492 z += uintptr(nSep - 1) 29493 __157: 29494 ; 29495 __156: 29496 ; 29497 goto __154 29498 __154: 29499 z++ 29500 goto __153 29501 goto __155 29502 __155: 29503 ; 29504 if !(i+1 != nCol) { 29505 goto __158 29506 } 29507 nErr = strlen30(tls, zFile) + 200 29508 zErr = libc.Xmalloc(tls, uint64(nErr)) 29509 if !(zErr != 0) { 29510 goto __159 29511 } 29512 sqlite3.Xsqlite3_snprintf(tls, nErr, zErr, 29513 ts+12315, 29514 libc.VaList(bp+464, zFile, lineno, nCol, i+1)) 29515 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+496, zErr, uintptr(0))) 29516 libc.Xfree(tls, zErr) 29517 __159: 29518 ; 29519 zCommit1 = ts + 7824 29520 goto __152 29521 __158: 29522 ; 29523 i = 0 29524 __160: 29525 if !(i < nCol) { 29526 goto __162 29527 } 29528 29529 if !(nNull > 0 && libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), zNull) == 0 || 29530 strlen30(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8))) == 0) { 29531 goto __163 29532 } 29533 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1) 29534 goto __164 29535 __163: 29536 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), -1, uintptr(0)) 29537 __164: 29538 ; 29539 goto __161 29540 __161: 29541 i++ 29542 goto __160 29543 goto __162 29544 __162: 29545 ; 29546 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29547 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29548 libc.Xfree(tls, zLine) 29549 if !(rc != SQLITE_OK) { 29550 goto __165 29551 } 29552 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+512, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29553 zCommit1 = ts + 7824 29554 goto __152 29555 __165: 29556 ; 29557 goto __151 29558 __152: 29559 ; 29560 libc.Xfree(tls, azCol) 29561 libc.Xfclose(tls, in) 29562 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29563 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zCommit1, uintptr(0), uintptr(0), uintptr(0)) 29564 29565 if !(int32(*(*int8)(unsafe.Pointer(zCommit1))) == 'C') { 29566 goto __166 29567 } 29568 29569 pResult3 = tcl.XTcl_GetObjResult(tls, interp) 29570 tcl.XTcl_SetIntObj(tls, pResult3, lineno) 29571 rc = TCL_OK 29572 goto __167 29573 __166: 29574 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+1072, ts+1333, libc.VaList(bp+536, lineno)) 29575 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+544, ts+12375, bp+1072, 29576 uintptr(0))) 29577 rc = TCL_ERROR 29578 __167: 29579 ; 29580 goto __3 29581 29582 __17: 29583 zSchema = uintptr(0) 29584 pValue = uintptr(0) 29585 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = int64(0) 29586 *(*int32)(unsafe.Pointer(bp + 1160)) = 0 29587 29588 if !(objc < 3) { 29589 goto __168 29590 } 29591 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12408) 29592 rc = TCL_ERROR 29593 goto __3 29594 __168: 29595 ; 29596 i1 = 2 29597 __169: 29598 if !(i1 < objc-1) { 29599 goto __171 29600 } 29601 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i1)*8))) 29602 if !(libc.Xstrcmp(tls, z1, ts+12425) == 0 && i1 < objc-2) { 29603 goto __172 29604 } 29605 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1152) 29606 if !(rc != 0) { 29607 goto __173 29608 } 29609 goto deserialize_error 29610 __173: 29611 ; 29612 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 1152)) 29613 goto __170 29614 __172: 29615 ; 29616 if !(libc.Xstrcmp(tls, z1, ts+12434) == 0 && i1 < objc-2) { 29617 goto __174 29618 } 29619 rc = tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1160) 29620 if !(rc != 0) { 29621 goto __175 29622 } 29623 goto deserialize_error 29624 __175: 29625 ; 29626 goto __170 29627 __174: 29628 ; 29629 if !(zSchema == uintptr(0) && i1 == objc-2 && int32(*(*int8)(unsafe.Pointer(z1))) != '-') { 29630 goto __176 29631 } 29632 zSchema = z1 29633 goto __170 29634 __176: 29635 ; 29636 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+568, ts+12444, z1, uintptr(0))) 29637 rc = TCL_ERROR 29638 goto deserialize_error 29639 goto __170 29640 __170: 29641 i1++ 29642 goto __169 29643 goto __171 29644 __171: 29645 ; 29646 pValue = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 29647 pBA = tcl.XTcl_GetByteArrayFromObj(tls, pValue, bp+1164) 29648 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 29649 if !(pData == uintptr(0) && *(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 29650 goto __177 29651 } 29652 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+592, ts+2069, uintptr(0))) 29653 rc = TCL_ERROR 29654 goto __178 29655 __177: 29656 if !(*(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 29657 goto __179 29658 } 29659 libc.Xmemcpy(tls, pData, pBA, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 29660 __179: 29661 ; 29662 if !(*(*int32)(unsafe.Pointer(bp + 1160)) != 0) { 29663 goto __180 29664 } 29665 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY 29666 goto __181 29667 __180: 29668 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE 29669 __181: 29670 ; 29671 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)) 29672 if !(xrc != 0) { 29673 goto __182 29674 } 29675 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+608, ts+12461, uintptr(0))) 29676 rc = TCL_ERROR 29677 __182: 29678 ; 29679 if !(*(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) > int64(0)) { 29680 goto __183 29681 } 29682 sqlite3.Xsqlite3_file_control(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, SQLITE_FCNTL_SIZE_LIMIT, bp+1168) 29683 __183: 29684 ; 29685 __178: 29686 ; 29687 deserialize_error: 29688 goto __3 29689 29690 __18: 29691 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+624, ts+12489, 29692 uintptr(0))) 29693 return TCL_ERROR 29694 29695 __19: 29696 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 29697 goto __3 29698 29699 __20: 29700 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_error_offset(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 29701 goto __3 29702 29703 __21: 29704 __22: 29705 pResult4 = uintptr(0) 29706 if !(objc != 3) { 29707 goto __184 29708 } 29709 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 29710 return TCL_ERROR 29711 __184: 29712 ; 29713 dbEvalInit(tls, bp+1176, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 29714 rc = dbEvalStep(tls, bp+1176) 29715 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 24) { 29716 goto __185 29717 } 29718 if !(rc == TCL_OK) { 29719 goto __187 29720 } 29721 pResult4 = dbEvalColumnValue(tls, bp+1176, 0) 29722 goto __188 29723 __187: 29724 if !(rc == TCL_BREAK) { 29725 goto __189 29726 } 29727 tcl.XTcl_ResetResult(tls, interp) 29728 __189: 29729 ; 29730 __188: 29731 ; 29732 goto __186 29733 __185: 29734 if !(rc == TCL_BREAK || rc == TCL_OK) { 29735 goto __190 29736 } 29737 pResult4 = tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(rc == TCL_OK) != 0)) 29738 __190: 29739 ; 29740 __186: 29741 ; 29742 dbEvalFinalize(tls, bp+1176) 29743 if !(pResult4 != 0) { 29744 goto __191 29745 } 29746 tcl.XTcl_SetObjResult(tls, interp, pResult4) 29747 __191: 29748 ; 29749 if !(rc == TCL_BREAK) { 29750 goto __192 29751 } 29752 rc = TCL_OK 29753 __192: 29754 ; 29755 goto __3 29756 29757 __23: 29758 evalFlags = 0 29759 __193: 29760 if !(objc > 3 && libc.AssignUintptr(&zOpt1, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) != uintptr(0) && int32(*(*int8)(unsafe.Pointer(zOpt1))) == '-') { 29761 goto __194 29762 } 29763 if !(libc.Xstrcmp(tls, zOpt1, ts+12537) == 0) { 29764 goto __195 29765 } 29766 evalFlags = evalFlags | SQLITE_EVAL_WITHOUTNULLS 29767 goto __196 29768 __195: 29769 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+640, ts+12551, zOpt1, ts+11945, uintptr(0))) 29770 return TCL_ERROR 29771 __196: 29772 ; 29773 objc-- 29774 objv += 8 29775 goto __193 29776 __194: 29777 ; 29778 if !(objc < 3 || objc > 5) { 29779 goto __197 29780 } 29781 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 29782 ts+12569) 29783 return TCL_ERROR 29784 __197: 29785 ; 29786 if !(objc == 3) { 29787 goto __198 29788 } 29789 pRet = tcl.XTcl_NewObj(tls) 29790 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 29791 dbEvalInit(tls, bp+1232, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 29792 __200: 29793 if !(TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, bp+1232))) { 29794 goto __201 29795 } 29796 dbEvalRowInfo(tls, bp+1232, bp+1288, uintptr(0)) 29797 i2 = 0 29798 __202: 29799 if !(i2 < *(*int32)(unsafe.Pointer(bp + 1288))) { 29800 goto __204 29801 } 29802 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, dbEvalColumnValue(tls, bp+1232, i2)) 29803 goto __203 29804 __203: 29805 i2++ 29806 goto __202 29807 goto __204 29808 __204: 29809 ; 29810 goto __200 29811 __201: 29812 ; 29813 dbEvalFinalize(tls, bp+1232) 29814 if !(rc == TCL_BREAK) { 29815 goto __205 29816 } 29817 tcl.XTcl_SetObjResult(tls, interp, pRet) 29818 rc = TCL_OK 29819 __205: 29820 ; 29821 __206: 29822 _objPtr1 = pRet 29823 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr1)).FrefCount, 1) <= 1) { 29824 goto __209 29825 } 29826 tcl.XTclFreeObj(tls, _objPtr1) 29827 __209: 29828 ; 29829 goto __207 29830 __207: 29831 if 0 != 0 { 29832 goto __206 29833 } 29834 goto __208 29835 __208: 29836 ; 29837 goto __199 29838 __198: 29839 pArray = uintptr(0) 29840 29841 if !(objc >= 5 && *(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))))) != 0) { 29842 goto __210 29843 } 29844 pArray = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 29845 __210: 29846 ; 29847 pScript = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 29848 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 29849 29850 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(DbEvalContext{}))) 29851 dbEvalInit(tls, p, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), pArray, evalFlags) 29852 29853 *(*ClientData)(unsafe.Pointer(bp + 1296)) = p 29854 *(*ClientData)(unsafe.Pointer(bp + 1296 + 1*8)) = pScript 29855 rc = DbEvalNextCmd(tls, bp+1296, interp, TCL_OK) 29856 __199: 29857 ; 29858 goto __3 29859 29860 __24: 29861 flags1 = SQLITE_UTF8 29862 *(*int32)(unsafe.Pointer(bp + 1312)) = -1 29863 *(*int32)(unsafe.Pointer(bp + 1368)) = SQLITE_NULL 29864 if !(objc < 4) { 29865 goto __211 29866 } 29867 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12605) 29868 return TCL_ERROR 29869 __211: 29870 ; 29871 i3 = 3 29872 __212: 29873 if !(i3 < objc-1) { 29874 goto __214 29875 } 29876 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8))) 29877 n1 = strlen30(tls, z2) 29878 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12628, uint64(n1)) == 0) { 29879 goto __215 29880 } 29881 if !(i3 == objc-2) { 29882 goto __217 29883 } 29884 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+672, ts+12638, z2, uintptr(0))) 29885 return TCL_ERROR 29886 __217: 29887 ; 29888 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3+1)*8)), bp+1312) != 0) { 29889 goto __218 29890 } 29891 return TCL_ERROR 29892 __218: 29893 ; 29894 if !(*(*int32)(unsafe.Pointer(bp + 1312)) < 0) { 29895 goto __219 29896 } 29897 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+696, ts+12668, 29898 uintptr(0))) 29899 return TCL_ERROR 29900 __219: 29901 ; 29902 i3++ 29903 goto __216 29904 __215: 29905 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12709, uint64(n1)) == 0) { 29906 goto __220 29907 } 29908 flags1 = flags1 | SQLITE_DETERMINISTIC 29909 goto __221 29910 __220: 29911 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12724, uint64(n1)) == 0) { 29912 goto __222 29913 } 29914 flags1 = flags1 | SQLITE_DIRECTONLY 29915 goto __223 29916 __222: 29917 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12736, uint64(n1)) == 0) { 29918 goto __224 29919 } 29920 flags1 = flags1 | SQLITE_INNOCUOUS 29921 goto __225 29922 __224: 29923 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12747, uint64(n1)) == 0) { 29924 goto __226 29925 } 29926 *(*[6]uintptr)(unsafe.Pointer(bp + 1320)) = [6]uintptr{ts + 8470, ts + 12759, ts + 12764, ts + 12769, ts + 12774, uintptr(0)} 29927 29928 if !(i3 == objc-2) { 29929 goto __228 29930 } 29931 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+712, ts+12638, z2, uintptr(0))) 29932 return TCL_ERROR 29933 __228: 29934 ; 29935 i3++ 29936 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) { 29937 goto __229 29938 } 29939 return TCL_ERROR 29940 __229: 29941 ; 29942 *(*int32)(unsafe.Pointer(bp + 1368))++ 29943 goto __227 29944 __226: 29945 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+736, ts+11851, z2, 29946 ts+12783, uintptr(0))) 29947 return TCL_ERROR 29948 __227: 29949 ; 29950 __225: 29951 ; 29952 __223: 29953 ; 29954 __221: 29955 ; 29956 __216: 29957 ; 29958 goto __213 29959 __213: 29960 i3++ 29961 goto __212 29962 goto __214 29963 __214: 29964 ; 29965 pScript1 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 29966 zName1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29967 pFunc = findSqlFunc(tls, pDb, zName1) 29968 if !(pFunc == uintptr(0)) { 29969 goto __230 29970 } 29971 return TCL_ERROR 29972 __230: 29973 ; 29974 if !((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript != 0) { 29975 goto __231 29976 } 29977 __232: 29978 _objPtr2 = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 29979 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr2)).FrefCount, 1) <= 1) { 29980 goto __235 29981 } 29982 tcl.XTclFreeObj(tls, _objPtr2) 29983 __235: 29984 ; 29985 goto __233 29986 __233: 29987 if 0 != 0 { 29988 goto __232 29989 } 29990 goto __234 29991 __234: 29992 ; 29993 __231: 29994 ; 29995 (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript = pScript1 29996 (*Tcl_Obj)(unsafe.Pointer(pScript1)).FrefCount++ 29997 (*SqlFunc)(unsafe.Pointer(pFunc)).FuseEvalObjv = safeToUseEvalObjv(tls, interp, pScript1) 29998 (*SqlFunc)(unsafe.Pointer(pFunc)).FeType = *(*int32)(unsafe.Pointer(bp + 1368)) 29999 rc = sqlite3.Xsqlite3_create_function(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName1, *(*int32)(unsafe.Pointer(bp + 1312)), flags1, 30000 pFunc, *(*uintptr)(unsafe.Pointer(&struct { 30001 f func(*libc.TLS, uintptr, int32, uintptr) 30002 }{tclSqlFunc})), uintptr(0), uintptr(0)) 30003 if !(rc != SQLITE_OK) { 30004 goto __236 30005 } 30006 rc = TCL_ERROR 30007 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 30008 __236: 30009 ; 30010 goto __3 30011 30012 __25: 30013 isReadonly1 = 0 30014 zDb = ts + 85 30015 30016 if !(objc > 3 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), ts+12434) == 0) { 30017 goto __237 30018 } 30019 isReadonly1 = 1 30020 __237: 30021 ; 30022 if !(objc != 5+isReadonly1 && objc != 6+isReadonly1) { 30023 goto __238 30024 } 30025 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12861) 30026 return TCL_ERROR 30027 __238: 30028 ; 30029 if !(objc == 6+isReadonly1) { 30030 goto __239 30031 } 30032 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(2+isReadonly1)*8))) 30033 __239: 30034 ; 30035 zTable1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8))) 30036 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 30037 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+1376) 30038 30039 if !(rc == TCL_OK) { 30040 goto __240 30041 } 30042 rc = createIncrblobChannel(tls, 30043 interp, pDb, zDb, zTable1, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 1376)), isReadonly1) 30044 __240: 30045 ; 30046 goto __3 30047 30048 __26: 30049 sqlite3.Xsqlite3_interrupt(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30050 goto __3 30051 30052 __27: 30053 if !(objc != 2 && objc != 3) { 30054 goto __241 30055 } 30056 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12897) 30057 return TCL_ERROR 30058 __241: 30059 ; 30060 if !(objc == 3) { 30061 goto __242 30062 } 30063 zNull1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1384) 30064 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0) { 30065 goto __243 30066 } 30067 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 30068 __243: 30069 ; 30070 if !(zNull1 != 0 && *(*int32)(unsafe.Pointer(bp + 1384)) > 0) { 30071 goto __244 30072 } 30073 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1384))+1)) 30074 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, zNull1, uint64(*(*int32)(unsafe.Pointer(bp + 1384)))) 30075 *(*int8)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FzNull + uintptr(*(*int32)(unsafe.Pointer(bp + 1384))))) = int8(0) 30076 goto __245 30077 __244: 30078 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = uintptr(0) 30079 __245: 30080 ; 30081 __242: 30082 ; 30083 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, -1)) 30084 goto __3 30085 30086 __28: 30087 if !(objc != 2) { 30088 goto __246 30089 } 30090 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30091 return TCL_ERROR 30092 __246: 30093 ; 30094 rowid = sqlite3.Xsqlite3_last_insert_rowid(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30095 pResult5 = tcl.XTcl_GetObjResult(tls, interp) 30096 tcl.XTcl_SetWideIntObj(tls, pResult5, rowid) 30097 goto __3 30098 30099 __29: 30100 if !(objc == 2) { 30101 goto __247 30102 } 30103 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30104 goto __249 30105 } 30106 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+768, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, uintptr(0))) 30107 __249: 30108 ; 30109 goto __248 30110 __247: 30111 if !(objc == 4) { 30112 goto __250 30113 } 30114 if !(TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1388)) { 30115 goto __252 30116 } 30117 return TCL_ERROR 30118 __252: 30119 ; 30120 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30121 goto __253 30122 } 30123 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 30124 __253: 30125 ; 30126 zProgress = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1392) 30127 if !(zProgress != 0 && *(*int32)(unsafe.Pointer(bp + 1392)) > 0) { 30128 goto __254 30129 } 30130 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 30131 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, zProgress, uint64(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 30132 goto __255 30133 __254: 30134 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = uintptr(0) 30135 __255: 30136 ; 30137 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30138 goto __256 30139 } 30140 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30141 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1388)), *(*uintptr)(unsafe.Pointer(&struct { 30142 f func(*libc.TLS, uintptr) int32 30143 }{DbProgressHandler})), pDb) 30144 goto __257 30145 __256: 30146 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, 0, uintptr(0), uintptr(0)) 30147 __257: 30148 ; 30149 goto __251 30150 __250: 30151 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12907) 30152 return TCL_ERROR 30153 __251: 30154 ; 30155 __248: 30156 ; 30157 goto __3 30158 30159 __30: 30160 if !(objc > 3) { 30161 goto __258 30162 } 30163 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30164 return TCL_ERROR 30165 goto __259 30166 __258: 30167 if !(objc == 2) { 30168 goto __260 30169 } 30170 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30171 goto __262 30172 } 30173 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+784, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, uintptr(0))) 30174 __262: 30175 ; 30176 goto __261 30177 __260: 30178 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30179 goto __263 30180 } 30181 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 30182 __263: 30183 ; 30184 zProfile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1396) 30185 if !(zProfile != 0 && *(*int32)(unsafe.Pointer(bp + 1396)) > 0) { 30186 goto __264 30187 } 30188 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 30189 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, zProfile, uint64(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 30190 goto __265 30191 __264: 30192 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = uintptr(0) 30193 __265: 30194 ; 30195 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30196 goto __266 30197 } 30198 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30199 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30200 f func(*libc.TLS, uintptr, uintptr, sqlite_uint64) 30201 }{DbProfileHandler})), pDb) 30202 goto __267 30203 __266: 30204 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30205 __267: 30206 ; 30207 __261: 30208 ; 30209 __259: 30210 ; 30211 goto __3 30212 30213 __31: 30214 if !(objc != 3) { 30215 goto __268 30216 } 30217 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12918) 30218 return TCL_ERROR 30219 __268: 30220 ; 30221 goto __3 30222 30223 __32: 30224 nTimeout = 0 30225 30226 if !(objc == 3) { 30227 goto __269 30228 } 30229 zDestDb = ts + 85 30230 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30231 goto __270 30232 __269: 30233 if !(objc == 4) { 30234 goto __271 30235 } 30236 zDestDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30237 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 30238 goto __272 30239 __271: 30240 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 30241 return TCL_ERROR 30242 __272: 30243 ; 30244 __270: 30245 ; 30246 rc = sqlite3.Xsqlite3_open_v2(tls, zSrcFile, bp+1400, 30247 SQLITE_OPEN_READONLY|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 30248 if !(rc != SQLITE_OK) { 30249 goto __273 30250 } 30251 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+800, ts+12922, 30252 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))), uintptr(0))) 30253 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30254 return TCL_ERROR 30255 __273: 30256 ; 30257 pBackup1 = sqlite3.Xsqlite3_backup_init(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zDestDb, *(*uintptr)(unsafe.Pointer(bp + 1400)), ts+85) 30258 if !(pBackup1 == uintptr(0)) { 30259 goto __274 30260 } 30261 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+824, ts+12952, 30262 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30263 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30264 return TCL_ERROR 30265 __274: 30266 ; 30267 __275: 30268 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup1, 100)) == SQLITE_OK || 30269 rc == SQLITE_BUSY) { 30270 goto __276 30271 } 30272 if !(rc == SQLITE_BUSY) { 30273 goto __277 30274 } 30275 if !(libc.PostIncInt32(&nTimeout, 1) >= 3) { 30276 goto __278 30277 } 30278 goto __276 30279 __278: 30280 ; 30281 sqlite3.Xsqlite3_sleep(tls, 100) 30282 __277: 30283 ; 30284 goto __275 30285 __276: 30286 ; 30287 sqlite3.Xsqlite3_backup_finish(tls, pBackup1) 30288 if !(rc == SQLITE_DONE) { 30289 goto __279 30290 } 30291 rc = TCL_OK 30292 goto __280 30293 __279: 30294 if !(rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { 30295 goto __281 30296 } 30297 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+848, ts+12969, 30298 uintptr(0))) 30299 rc = TCL_ERROR 30300 goto __282 30301 __281: 30302 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+864, ts+12952, 30303 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30304 rc = TCL_ERROR 30305 __282: 30306 ; 30307 __280: 30308 ; 30309 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30310 goto __3 30311 30312 __33: 30313 if objc >= 3 { 30314 zSchema1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30315 } else { 30316 zSchema1 = ts + 85 30317 } 30318 *(*sqlite3_int64)(unsafe.Pointer(bp + 1408)) = int64(0) 30319 if !(objc != 2 && objc != 3) { 30320 goto __283 30321 } 30322 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13006) 30323 rc = TCL_ERROR 30324 goto __284 30325 __283: 30326 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(SQLITE_SERIALIZE_NOCOPY)) 30327 if !(pData1 != 0) { 30328 goto __285 30329 } 30330 needFree = 0 30331 goto __286 30332 __285: 30333 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(0)) 30334 needFree = 1 30335 __286: 30336 ; 30337 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pData1, int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 1408))))) 30338 if !(needFree != 0) { 30339 goto __287 30340 } 30341 sqlite3.Xsqlite3_free(tls, pData1) 30342 __287: 30343 ; 30344 __284: 30345 ; 30346 goto __3 30347 30348 __34: 30349 if !(objc != 3) { 30350 goto __288 30351 } 30352 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13017) 30353 return TCL_ERROR 30354 __288: 30355 ; 30356 zOp = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30357 if !(libc.Xstrcmp(tls, zOp, ts+9485) == 0) { 30358 goto __289 30359 } 30360 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnStep 30361 goto __290 30362 __289: 30363 if !(libc.Xstrcmp(tls, zOp, ts+13039) == 0) { 30364 goto __291 30365 } 30366 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnSort 30367 goto __292 30368 __291: 30369 if !(libc.Xstrcmp(tls, zOp, ts+13044) == 0) { 30370 goto __293 30371 } 30372 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex 30373 goto __294 30374 __293: 30375 if !(libc.Xstrcmp(tls, zOp, ts+13054) == 0) { 30376 goto __295 30377 } 30378 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep 30379 goto __296 30380 __295: 30381 tcl.XTcl_AppendResult(tls, interp, 30382 libc.VaList(bp+888, ts+13061, 30383 uintptr(0))) 30384 return TCL_ERROR 30385 __296: 30386 ; 30387 __294: 30388 ; 30389 __292: 30390 ; 30391 __290: 30392 ; 30393 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, v2)) 30394 goto __3 30395 30396 __35: 30397 if !(objc != 3) { 30398 goto __297 30399 } 30400 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13117) 30401 return TCL_ERROR 30402 __297: 30403 ; 30404 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1416) != 0) { 30405 goto __298 30406 } 30407 return TCL_ERROR 30408 __298: 30409 ; 30410 sqlite3.Xsqlite3_busy_timeout(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1416))) 30411 goto __3 30412 30413 __36: 30414 if !(objc != 2) { 30415 goto __299 30416 } 30417 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30418 return TCL_ERROR 30419 __299: 30420 ; 30421 pResult6 = tcl.XTcl_GetObjResult(tls, interp) 30422 tcl.XTcl_SetWideIntObj(tls, pResult6, sqlite3.Xsqlite3_total_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 30423 goto __3 30424 30425 __37: 30426 if !(objc > 3) { 30427 goto __300 30428 } 30429 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30430 return TCL_ERROR 30431 goto __301 30432 __300: 30433 if !(objc == 2) { 30434 goto __302 30435 } 30436 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30437 goto __304 30438 } 30439 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+904, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, uintptr(0))) 30440 __304: 30441 ; 30442 goto __303 30443 __302: 30444 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30445 goto __305 30446 } 30447 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 30448 __305: 30449 ; 30450 zTrace = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1420) 30451 if !(zTrace != 0 && *(*int32)(unsafe.Pointer(bp + 1420)) > 0) { 30452 goto __306 30453 } 30454 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 30455 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, zTrace, uint64(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 30456 goto __307 30457 __306: 30458 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = uintptr(0) 30459 __307: 30460 ; 30461 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30462 goto __308 30463 } 30464 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30465 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30466 f func(*libc.TLS, uintptr, uintptr) 30467 }{DbTraceHandler})), pDb) 30468 goto __309 30469 __308: 30470 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30471 __309: 30472 ; 30473 __303: 30474 ; 30475 __301: 30476 ; 30477 goto __3 30478 30479 __38: 30480 if !(objc > 4) { 30481 goto __310 30482 } 30483 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13130) 30484 return TCL_ERROR 30485 goto __311 30486 __310: 30487 if !(objc == 2) { 30488 goto __312 30489 } 30490 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 30491 goto __314 30492 } 30493 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+920, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, uintptr(0))) 30494 __314: 30495 ; 30496 goto __313 30497 __312: 30498 wMask = int64(0) 30499 if !(objc == 4) { 30500 goto __315 30501 } 30502 if !(TCL_OK != tcl.XTcl_ListObjLength(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1424)) { 30503 goto __317 30504 } 30505 return TCL_ERROR 30506 __317: 30507 ; 30508 i4 = 0 30509 __318: 30510 if !(i4 < *(*int32)(unsafe.Pointer(bp + 1424))) { 30511 goto __320 30512 } 30513 if !(TCL_OK != tcl.XTcl_ListObjIndex(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), i4, bp+1432)) { 30514 goto __321 30515 } 30516 return TCL_ERROR 30517 __321: 30518 ; 30519 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) { 30520 goto __322 30521 } 30522 pError = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, interp)) 30523 (*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount++ 30524 if !(TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), bp+1448)) { 30525 goto __324 30526 } 30527 __326: 30528 _objPtr3 = pError 30529 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr3)).FrefCount, 1) <= 1) { 30530 goto __329 30531 } 30532 tcl.XTclFreeObj(tls, _objPtr3) 30533 __329: 30534 ; 30535 goto __327 30536 __327: 30537 if 0 != 0 { 30538 goto __326 30539 } 30540 goto __328 30541 __328: 30542 ; 30543 wMask = wMask | *(*Tcl_WideInt)(unsafe.Pointer(bp + 1448)) 30544 goto __325 30545 __324: 30546 tcl.XTcl_SetObjResult(tls, interp, pError) 30547 __330: 30548 _objPtr4 = pError 30549 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr4)).FrefCount, 1) <= 1) { 30550 goto __333 30551 } 30552 tcl.XTclFreeObj(tls, _objPtr4) 30553 __333: 30554 ; 30555 goto __331 30556 __331: 30557 if 0 != 0 { 30558 goto __330 30559 } 30560 goto __332 30561 __332: 30562 ; 30563 return TCL_ERROR 30564 __325: 30565 ; 30566 goto __323 30567 __322: 30568 switch uint32(*(*int32)(unsafe.Pointer(bp + 1440))) { 30569 case uint32(0): 30570 goto __335 30571 case uint32(1): 30572 goto __336 30573 case uint32(2): 30574 goto __337 30575 case uint32(3): 30576 goto __338 30577 } 30578 goto __334 30579 __335: 30580 wMask = wMask | int64(SQLITE_TRACE_STMT) 30581 goto __334 30582 __336: 30583 wMask = wMask | int64(SQLITE_TRACE_PROFILE) 30584 goto __334 30585 __337: 30586 wMask = wMask | int64(SQLITE_TRACE_ROW) 30587 goto __334 30588 __338: 30589 wMask = wMask | int64(SQLITE_TRACE_CLOSE) 30590 goto __334 30591 __334: 30592 ; 30593 __323: 30594 ; 30595 goto __319 30596 __319: 30597 i4++ 30598 goto __318 30599 goto __320 30600 __320: 30601 ; 30602 goto __316 30603 __315: 30604 wMask = int64(SQLITE_TRACE_STMT) 30605 __316: 30606 ; 30607 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 30608 goto __339 30609 } 30610 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 30611 __339: 30612 ; 30613 zTraceV2 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1424) 30614 if !(zTraceV2 != 0 && *(*int32)(unsafe.Pointer(bp + 1424)) > 0) { 30615 goto __340 30616 } 30617 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 30618 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, zTraceV2, uint64(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 30619 goto __341 30620 __340: 30621 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = uintptr(0) 30622 __341: 30623 ; 30624 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 30625 goto __342 30626 } 30627 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30628 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(wMask), *(*uintptr)(unsafe.Pointer(&struct { 30629 f func(*libc.TLS, uint32, uintptr, uintptr, uintptr) int32 30630 }{DbTraceV2Handler})), pDb) 30631 goto __343 30632 __342: 30633 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(0), uintptr(0), uintptr(0)) 30634 __343: 30635 ; 30636 __313: 30637 ; 30638 __311: 30639 ; 30640 goto __3 30641 30642 __39: 30643 zBegin = ts + 13159 30644 if !(objc != 3 && objc != 4) { 30645 goto __344 30646 } 30647 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13186) 30648 return TCL_ERROR 30649 __344: 30650 ; 30651 if !((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0 && objc == 4) { 30652 goto __345 30653 } 30654 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) { 30655 goto __346 30656 } 30657 return TCL_ERROR 30658 __346: 30659 ; 30660 switch uint32(*(*int32)(unsafe.Pointer(bp + 1456))) { 30661 case uint32(0): 30662 goto __348 30663 case uint32(1): 30664 goto __349 30665 case uint32(2): 30666 goto __350 30667 } 30668 goto __347 30669 __348: 30670 ; 30671 goto __347 30672 __349: 30673 zBegin = ts + 13217 30674 goto __347 30675 __350: 30676 zBegin = ts + 13233 30677 goto __347 30678 __347: 30679 ; 30680 __345: 30681 ; 30682 pScript2 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30683 30684 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 30685 rc = sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zBegin, uintptr(0), uintptr(0), uintptr(0)) 30686 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 30687 if !(rc != SQLITE_OK) { 30688 goto __351 30689 } 30690 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+936, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30691 return TCL_ERROR 30692 __351: 30693 ; 30694 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction++ 30695 30696 addDatabaseRef(tls, pDb) 30697 if !(DbUseNre(tls) != 0) { 30698 goto __352 30699 } 30700 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 30701 f func(*libc.TLS, uintptr, uintptr, int32) int32 30702 }{DbTransPostCmd})), *(*uintptr)(unsafe.Pointer(bp + 1464)), uintptr(0), uintptr(0), uintptr(0)) 30703 tcl.XTcl_NREvalObj(tls, interp, pScript2, 0) 30704 goto __353 30705 __352: 30706 rc = DbTransPostCmd(tls, bp+1464, interp, tcl.XTcl_EvalObjEx(tls, interp, pScript2, 0)) 30707 __353: 30708 ; 30709 goto __3 30710 30711 __40: 30712 if !(objc != 2 && objc != 3) { 30713 goto __354 30714 } 30715 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 30716 rc = TCL_ERROR 30717 goto __355 30718 __354: 30719 xNotify = uintptr(0) 30720 pNotifyArg = uintptr(0) 30721 30722 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify != 0) { 30723 goto __356 30724 } 30725 __357: 30726 _objPtr5 = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 30727 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr5)).FrefCount, 1) <= 1) { 30728 goto __360 30729 } 30730 tcl.XTclFreeObj(tls, _objPtr5) 30731 __360: 30732 ; 30733 goto __358 30734 __358: 30735 if 0 != 0 { 30736 goto __357 30737 } 30738 goto __359 30739 __359: 30740 ; 30741 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 30742 __356: 30743 ; 30744 if !(objc == 3) { 30745 goto __361 30746 } 30747 xNotify = *(*uintptr)(unsafe.Pointer(&struct { 30748 f func(*libc.TLS, uintptr, int32) 30749 }{DbUnlockNotify})) 30750 pNotifyArg = pDb 30751 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 30752 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount++ 30753 __361: 30754 ; 30755 if !(sqlite3.Xsqlite3_unlock_notify(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, xNotify, pNotifyArg) != 0) { 30756 goto __362 30757 } 30758 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+952, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30759 rc = TCL_ERROR 30760 __362: 30761 ; 30762 __355: 30763 ; 30764 goto __3 30765 30766 __41: 30767 if !(objc < 3) { 30768 goto __363 30769 } 30770 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13258) 30771 __363: 30772 ; 30773 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) { 30774 goto __364 30775 } 30776 return TCL_ERROR 30777 __364: 30778 ; 30779 switch uint32(*(*int32)(unsafe.Pointer(bp + 1472))) { 30780 case uint32(0): 30781 goto __366 30782 30783 case uint32(2): 30784 goto __367 30785 30786 case uint32(1): 30787 goto __368 30788 30789 case uint32(3): 30790 goto __369 30791 case uint32(4): 30792 goto __370 30793 } 30794 goto __365 30795 __366: 30796 nCol2 = sqlite3.Xsqlite3_preupdate_count(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30797 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol2)) 30798 goto __365 30799 30800 __367: 30801 if !(objc > 4) { 30802 goto __371 30803 } 30804 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13277) 30805 return TCL_ERROR 30806 __371: 30807 ; 30808 DbHookCmd(tls, interp, pDb, func() uintptr { 30809 if objc == 4 { 30810 return *(*uintptr)(unsafe.Pointer(objv + 3*8)) 30811 } 30812 return uintptr(0) 30813 }(), pDb+112) 30814 goto __365 30815 30816 __368: 30817 if !(objc != 3) { 30818 goto __372 30819 } 30820 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+584) 30821 return TCL_ERROR 30822 __372: 30823 ; 30824 pRet1 = tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_preupdate_depth(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 30825 tcl.XTcl_SetObjResult(tls, interp, pRet1) 30826 goto __365 30827 30828 __369: 30829 __370: 30830 if !(objc != 4) { 30831 goto __373 30832 } 30833 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+13291) 30834 return TCL_ERROR 30835 __373: 30836 ; 30837 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1476) != 0) { 30838 goto __374 30839 } 30840 return TCL_ERROR 30841 __374: 30842 ; 30843 if !(*(*int32)(unsafe.Pointer(bp + 1472)) == 4) { 30844 goto __375 30845 } 30846 rc = sqlite3.Xsqlite3_preupdate_old(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 30847 goto __376 30848 __375: 30849 ; 30850 rc = sqlite3.Xsqlite3_preupdate_new(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 30851 __376: 30852 ; 30853 if !(rc == SQLITE_OK) { 30854 goto __377 30855 } 30856 pObj1 = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1480))), -1) 30857 tcl.XTcl_SetObjResult(tls, interp, pObj1) 30858 goto __378 30859 __377: 30860 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+968, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30861 return TCL_ERROR 30862 __378: 30863 ; 30864 __365: 30865 ; 30866 goto __3 30867 30868 __42: 30869 __43: 30870 __44: 30871 ppHook = uintptr(0) 30872 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 41) { 30873 goto __379 30874 } 30875 ppHook = pDb + 128 30876 __379: 30877 ; 30878 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 39) { 30879 goto __380 30880 } 30881 ppHook = pDb + 104 30882 __380: 30883 ; 30884 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 30) { 30885 goto __381 30886 } 30887 ppHook = pDb + 120 30888 __381: 30889 ; 30890 if !(objc > 3) { 30891 goto __382 30892 } 30893 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 30894 return TCL_ERROR 30895 __382: 30896 ; 30897 DbHookCmd(tls, interp, pDb, func() uintptr { 30898 if objc == 3 { 30899 return *(*uintptr)(unsafe.Pointer(objv + 2*8)) 30900 } 30901 return uintptr(0) 30902 }(), ppHook) 30903 goto __3 30904 30905 __45: 30906 i5 = 2 30907 __383: 30908 if !(i5 < objc) { 30909 goto __385 30910 } 30911 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8))) 30912 30913 if !(libc.Xstrcmp(tls, zArg, ts+13297) == 0 && i5+1 < objc) { 30914 goto __386 30915 } 30916 i5++ 30917 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8)), pDb+228) != 0) { 30918 goto __388 30919 } 30920 return TCL_ERROR 30921 __388: 30922 ; 30923 goto __387 30924 __386: 30925 if !(libc.Xstrcmp(tls, zArg, ts+13317) == 0) { 30926 goto __389 30927 } 30928 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+1488, ts+9889, 30929 libc.VaList(bp+984, func() uintptr { 30930 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 30931 return (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpStmt 30932 } 30933 return uintptr(0) 30934 }())) 30935 tcl.XTcl_SetResult(tls, interp, bp+1488, uintptr(1)) 30936 goto __390 30937 __389: 30938 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+992, ts+13332, zArg, uintptr(0))) 30939 return TCL_ERROR 30940 __390: 30941 ; 30942 __387: 30943 ; 30944 goto __384 30945 __384: 30946 i5++ 30947 goto __383 30948 goto __385 30949 __385: 30950 ; 30951 if !(i5 == 2) { 30952 goto __391 30953 } 30954 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_libversion(tls), uintptr(0)) 30955 __391: 30956 ; 30957 goto __3 30958 30959 __3: 30960 ; 30961 return rc 30962 } 30963 30964 type DbConfigChoices = struct { 30965 FzName uintptr 30966 Fop int32 30967 F__ccgo_pad1 [4]byte 30968 } 30969 30970 var DB_strs = [43]uintptr{ 30971 ts + 13351, ts + 13362, ts + 13369, 30972 ts + 13383, ts + 13388, ts + 13394, 30973 ts + 9490, ts + 13402, ts + 13410, 30974 ts + 13427, ts + 13439, ts + 13448, 30975 ts + 13455, ts + 13460, ts + 13472, 30976 ts + 13494, ts + 13504, ts + 4896, 30977 ts + 13516, ts + 13523, ts + 10868, 30978 ts + 13532, ts + 13542, ts + 13560, 30979 ts + 13570, ts + 13580, ts + 13590, 30980 ts + 9564, ts + 13598, ts + 13604, 30981 ts + 13612, ts + 13626, ts + 13636, 30982 ts + 13643, ts + 13651, ts + 13665, 30983 ts + 13671, ts + 13680, ts + 13692, 30984 ts + 13706, ts + 13718, ts + 13726, 30985 uintptr(0), 30986 } 30987 var aDbConfig = [16]DbConfigChoices{ 30988 {FzName: ts + 13735, Fop: SQLITE_DBCONFIG_DEFENSIVE}, 30989 {FzName: ts + 13745, Fop: SQLITE_DBCONFIG_DQS_DDL}, 30990 {FzName: ts + 13753, Fop: SQLITE_DBCONFIG_DQS_DML}, 30991 {FzName: ts + 13761, Fop: SQLITE_DBCONFIG_ENABLE_FKEY}, 30992 {FzName: ts + 13773, Fop: SQLITE_DBCONFIG_ENABLE_QPSG}, 30993 {FzName: ts + 13785, Fop: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 30994 {FzName: ts + 13800, Fop: SQLITE_DBCONFIG_ENABLE_VIEW}, 30995 {FzName: ts + 13812, Fop: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 30996 {FzName: ts + 13827, Fop: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 30997 {FzName: ts + 13846, Fop: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 30998 {FzName: ts + 13865, Fop: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 30999 {FzName: ts + 13880, Fop: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 31000 {FzName: ts + 13897, Fop: SQLITE_DBCONFIG_RESET_DATABASE}, 31001 {FzName: ts + 13912, Fop: SQLITE_DBCONFIG_TRIGGER_EQP}, 31002 {FzName: ts + 13924, Fop: SQLITE_DBCONFIG_TRUSTED_SCHEMA}, 31003 {FzName: ts + 13939, Fop: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 31004 } 31005 var TTYPE_strs = [5]uintptr{ 31006 ts + 13955, ts + 13590, ts + 13965, ts + 9490, uintptr(0), 31007 } 31008 var TTYPE_strs1 = [4]uintptr{ 31009 ts + 13969, ts + 13978, ts + 13988, uintptr(0), 31010 } 31011 var azSub = [6]uintptr{ts + 1965, ts + 13998, ts + 14004, ts + 14009, ts + 14013, uintptr(0)} 31012 31013 func DbObjCmdAdaptor(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31014 return tcl.XTcl_NRCallObjProc(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31015 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31016 }{DbObjCmd})), cd, objc, objv) 31017 } 31018 31019 func sqliteCmdUsage(tls *libc.TLS, interp uintptr, objv uintptr) int32 { 31020 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 31021 ts+14017) 31022 return TCL_ERROR 31023 } 31024 31025 func DbMain(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31026 bp := tls.Alloc(336) 31027 defer tls.Free(336) 31028 31029 var p uintptr 31030 var zArg uintptr 31031 var zErrMsg uintptr 31032 var i int32 31033 var zFile uintptr = uintptr(0) 31034 var zVfs uintptr = uintptr(0) 31035 var flags int32 31036 *(*int32)(unsafe.Pointer(bp + 112)) = 1 31037 31038 var rc int32 31039 31040 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX 31041 31042 if objc == 1 { 31043 return sqliteCmdUsage(tls, interp, objv) 31044 } 31045 if objc == 2 { 31046 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 31047 if libc.Xstrcmp(tls, zArg, ts+14163) == 0 { 31048 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_libversion(tls), uintptr(0))) 31049 return TCL_OK 31050 } 31051 if libc.Xstrcmp(tls, zArg, ts+14172) == 0 { 31052 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3_sourceid(tls), uintptr(0))) 31053 return TCL_OK 31054 } 31055 if libc.Xstrcmp(tls, zArg, ts+14182) == 0 { 31056 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+14193, uintptr(0))) 31057 return TCL_OK 31058 } 31059 if int32(*(*int8)(unsafe.Pointer(zArg))) == '-' { 31060 return sqliteCmdUsage(tls, interp, objv) 31061 } 31062 } 31063 for i = 2; i < objc; i++ { 31064 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 31065 if int32(*(*int8)(unsafe.Pointer(zArg))) != '-' { 31066 if zFile != uintptr(0) { 31067 return sqliteCmdUsage(tls, interp, objv) 31068 } 31069 zFile = zArg 31070 continue 31071 } 31072 if i == objc-1 { 31073 return sqliteCmdUsage(tls, interp, objv) 31074 } 31075 i++ 31076 if libc.Xstrcmp(tls, zArg, ts+14195) == 0 { 31077 } else if libc.Xstrcmp(tls, zArg, ts+14200) == 0 { 31078 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 31079 } else if libc.Xstrcmp(tls, zArg, ts+12434) == 0 { 31080 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0 { 31081 return TCL_ERROR 31082 } 31083 if *(*int32)(unsafe.Pointer(bp + 88)) != 0 { 31084 flags = flags & libc.CplInt32(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE) 31085 flags = flags | SQLITE_OPEN_READONLY 31086 } else { 31087 flags = flags & libc.CplInt32(SQLITE_OPEN_READONLY) 31088 flags = flags | SQLITE_OPEN_READWRITE 31089 } 31090 } else if libc.Xstrcmp(tls, zArg, ts+14205) == 0 { 31091 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+92) != 0 { 31092 return TCL_ERROR 31093 } 31094 if *(*int32)(unsafe.Pointer(bp + 92)) != 0 && flags&SQLITE_OPEN_READONLY == 0 { 31095 flags = flags | SQLITE_OPEN_CREATE 31096 } else { 31097 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 31098 } 31099 } else if libc.Xstrcmp(tls, zArg, ts+14213) == 0 { 31100 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+96) != 0 { 31101 return TCL_ERROR 31102 } 31103 if *(*int32)(unsafe.Pointer(bp + 96)) != 0 { 31104 flags = flags | SQLITE_OPEN_NOFOLLOW 31105 } else { 31106 flags = flags & libc.CplInt32(SQLITE_OPEN_NOFOLLOW) 31107 } 31108 } else if libc.Xstrcmp(tls, zArg, ts+14223) == 0 { 31109 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+100) != 0 { 31110 return TCL_ERROR 31111 } 31112 if *(*int32)(unsafe.Pointer(bp + 100)) != 0 { 31113 flags = flags | SQLITE_OPEN_NOMUTEX 31114 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31115 } else { 31116 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31117 } 31118 } else if libc.Xstrcmp(tls, zArg, ts+14232) == 0 { 31119 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+104) != 0 { 31120 return TCL_ERROR 31121 } 31122 if *(*int32)(unsafe.Pointer(bp + 104)) != 0 { 31123 flags = flags | SQLITE_OPEN_FULLMUTEX 31124 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31125 } else { 31126 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31127 } 31128 } else if libc.Xstrcmp(tls, zArg, ts+14243) == 0 { 31129 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+108) != 0 { 31130 return TCL_ERROR 31131 } 31132 if *(*int32)(unsafe.Pointer(bp + 108)) != 0 { 31133 flags = flags | SQLITE_OPEN_URI 31134 } else { 31135 flags = flags & libc.CplInt32(SQLITE_OPEN_URI) 31136 } 31137 } else if libc.Xstrcmp(tls, zArg, ts+14248) == 0 { 31138 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+112) != 0 { 31139 return TCL_ERROR 31140 } 31141 } else { 31142 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+12444, zArg, uintptr(0))) 31143 return TCL_ERROR 31144 } 31145 } 31146 zErrMsg = uintptr(0) 31147 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqliteDb{}))) 31148 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(SqliteDb{}))) 31149 if zFile == uintptr(0) { 31150 zFile = ts + 584 31151 } 31152 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31153 zFile = tcl.XTcl_TranslateFileName(tls, interp, zFile, bp+120) 31154 } 31155 rc = sqlite3.Xsqlite3_open_v2(tls, zFile, p, flags, zVfs) 31156 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31157 tcl.XTcl_DStringFree(tls, bp+120) 31158 } 31159 if (*SqliteDb)(unsafe.Pointer(p)).Fdb != 0 { 31160 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) { 31161 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb))) 31162 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) 31163 (*SqliteDb)(unsafe.Pointer(p)).Fdb = uintptr(0) 31164 } 31165 } else { 31166 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+80, sqlite3.Xsqlite3_errstr(tls, rc))) 31167 } 31168 if (*SqliteDb)(unsafe.Pointer(p)).Fdb == uintptr(0) { 31169 tcl.XTcl_SetResult(tls, interp, zErrMsg, uintptr(1)) 31170 tcl.XTcl_Free(tls, p) 31171 sqlite3.Xsqlite3_free(tls, zErrMsg) 31172 return TCL_ERROR 31173 } 31174 (*SqliteDb)(unsafe.Pointer(p)).FmaxStmt = NUM_PREPARED_STMTS 31175 (*SqliteDb)(unsafe.Pointer(p)).FopenFlags = flags & SQLITE_OPEN_URI 31176 (*SqliteDb)(unsafe.Pointer(p)).Finterp = interp 31177 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 31178 if DbUseNre(tls) != 0 { 31179 tcl.XTcl_NRCreateCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31180 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31181 }{DbObjCmdAdaptor})), *(*uintptr)(unsafe.Pointer(&struct { 31182 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31183 }{DbObjCmd})), 31184 p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31185 } else { 31186 tcl.XTcl_CreateObjCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31187 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31188 }{DbObjCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31189 } 31190 (*SqliteDb)(unsafe.Pointer(p)).FnRef = 1 31191 return TCL_OK 31192 } 31193 31194 func Sqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31195 var rc int32 31196 if 1 != 0 { 31197 rc = TCL_OK 31198 } else { 31199 rc = TCL_ERROR 31200 } 31201 if rc == TCL_OK { 31202 tcl.XTcl_CreateObjCommand(tls, interp, ts+14267, *(*uintptr)(unsafe.Pointer(&struct { 31203 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31204 }{DbMain})), uintptr(0), uintptr(0)) 31205 31206 tcl.XTcl_CreateObjCommand(tls, interp, ts+14275, *(*uintptr)(unsafe.Pointer(&struct { 31207 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31208 }{DbMain})), uintptr(0), uintptr(0)) 31209 rc = tcl.XTcl_PkgProvideEx(tls, interp, ts+14267, ts+14282, uintptr(0)) 31210 } 31211 return rc 31212 } 31213 31214 func Tclsqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31215 return Sqlite3_Init(tls, interp) 31216 } 31217 31218 func Sqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31219 return TCL_OK 31220 } 31221 31222 func Tclsqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31223 return TCL_OK 31224 } 31225 31226 func Sqlite3_SafeInit(tls *libc.TLS, interp uintptr) int32 { 31227 return TCL_ERROR 31228 } 31229 31230 func Sqlite3_SafeUnload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31231 return TCL_ERROR 31232 } 31233 31234 func Sqlite_Init(tls *libc.TLS, interp uintptr) int32 { 31235 return Sqlite3_Init(tls, interp) 31236 } 31237 31238 func Tclsqlite_Init(tls *libc.TLS, interp uintptr) int32 { 31239 return Sqlite3_Init(tls, interp) 31240 } 31241 31242 func Sqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31243 return TCL_OK 31244 } 31245 31246 func Tclsqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31247 return TCL_OK 31248 } 31249 31250 func tclsh_main_loop(tls *libc.TLS) uintptr { 31251 return uintptr(unsafe.Pointer(&zMainloop)) 31252 } 31253 31254 var zMainloop = *(*[431]int8)(unsafe.Pointer(ts + 14289)) 31255 31256 func main1(tls *libc.TLS, argc int32, argv uintptr) int32 { 31257 bp := tls.Alloc(64) 31258 defer tls.Free(64) 31259 31260 var interp uintptr 31261 var i int32 31262 var zScript uintptr = uintptr(0) 31263 31264 if libc.Xgetenv(tls, ts+14720) != 0 { 31265 if libc.Xisatty(tls, 0) != 0 && libc.Xisatty(tls, 2) != 0 { 31266 libc.Xfprintf(tls, uintptr(unsafe.Pointer(&libc.X__sF))+2*152, 31267 ts+14739, 31268 libc.VaList(bp, libc.Xgetpid(tls))) 31269 libc.Xfgetc(tls, uintptr(unsafe.Pointer(&libc.X__sF))) 31270 } else { 31271 libc.Xraise(tls, SIGTRAP) 31272 } 31273 } 31274 31275 sqlite3.Xsqlite3_shutdown(tls) 31276 31277 tcl.XTcl_FindExecutable(tls, *(*uintptr)(unsafe.Pointer(argv))) 31278 tcl.XTcl_SetSystemEncoding(tls, uintptr(0), ts+14801) 31279 interp = tcl.XTcl_CreateInterp(tls) 31280 Sqlite3_Init(tls, interp) 31281 31282 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]int8{})), bp+32, ts+1333, libc.VaList(bp+8, argc-1)) 31283 tcl.XTcl_SetVar2(tls, interp, ts+14807, uintptr(0), bp+32, TCL_GLOBAL_ONLY) 31284 tcl.XTcl_SetVar2(tls, interp, ts+14812, uintptr(0), *(*uintptr)(unsafe.Pointer(argv)), TCL_GLOBAL_ONLY) 31285 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), ts+584, TCL_GLOBAL_ONLY) 31286 for i = 1; i < argc; i++ { 31287 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) 31288 } 31289 zScript = sqlite3TestInit(tls, interp) 31290 if zScript == uintptr(0) { 31291 zScript = tclsh_main_loop(tls) 31292 } 31293 if tcl.XTcl_GlobalEval(tls, interp, zScript) != TCL_OK { 31294 var zInfo uintptr = tcl.XTcl_GetVar2(tls, interp, ts+14823, uintptr(0), TCL_GLOBAL_ONLY) 31295 if zInfo == uintptr(0) { 31296 zInfo = tcl.XTcl_GetStringResult(tls, interp) 31297 } 31298 libc.Xfprintf(tls, uintptr(unsafe.Pointer(&libc.X__sF))+2*152, ts+14833, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv)), zInfo)) 31299 return 1 31300 } 31301 return 0 31302 } 31303 31304 type sqlite3_value = sqlite3_value1 31305 31306 type sqlite3_context = sqlite3_context1 31307 type PreUpdate = PreUpdate1 31308 31309 type Vdbe = Vdbe1 31310 31311 type Mem = sqlite3_value1 31312 31313 type Op = VdbeOp1 31314 31315 type Bool = uint32 31316 31317 type AuxData1 = struct { 31318 FiAuxOp int32 31319 FiAuxArg int32 31320 FpAux uintptr 31321 FxDeleteAux uintptr 31322 FpNextAux uintptr 31323 } 31324 31325 type AuxData = AuxData1 31326 31327 type VdbeCursor1 = struct { 31328 FeCurType u8 31329 FiDb i8 31330 FnullRow u8 31331 FdeferredMoveto u8 31332 FisTable u8 31333 F__ccgo_pad1 [3]byte 31334 FisEphemeral uint8 31335 F__ccgo_pad2 [1]byte 31336 FseekHit u16 31337 F__ccgo_pad3 [4]byte 31338 Fub struct{ FpBtx uintptr } 31339 FseqCount i64 31340 FcacheStatus u32 31341 FseekResult int32 31342 FpAltCursor uintptr 31343 Fuc struct{ FpCursor uintptr } 31344 FpKeyInfo uintptr 31345 FiHdrOffset u32 31346 FpgnoRoot Pgno 31347 FnField i16 31348 FnHdrParsed u16 31349 F__ccgo_pad4 [4]byte 31350 FmovetoTarget i64 31351 FaOffset uintptr 31352 FaRow uintptr 31353 FpayloadSize u32 31354 FszRow u32 31355 FaType [1]u32 31356 F__ccgo_pad5 [4]byte 31357 } 31358 31359 type VdbeCursor = VdbeCursor1 31360 31361 type VdbeFrame1 = struct { 31362 Fv uintptr 31363 FpParent uintptr 31364 FaOp uintptr 31365 FanExec uintptr 31366 FaMem uintptr 31367 FapCsr uintptr 31368 FaOnce uintptr 31369 Ftoken uintptr 31370 FlastRowid i64 31371 FpAuxData uintptr 31372 FnCursor int32 31373 Fpc int32 31374 FnOp int32 31375 FnMem int32 31376 FnChildMem int32 31377 FnChildCsr int32 31378 FnChange i64 31379 FnDbChange i64 31380 } 31381 31382 type VdbeFrame = VdbeFrame1 31383 31384 type MemValue = struct{ Fr float64 } 31385 31386 type bft = uint32 31387 31388 type ScanStatus1 = struct { 31389 FaddrExplain int32 31390 FaddrLoop int32 31391 FaddrVisit int32 31392 FiSelectID int32 31393 FnEst LogEst 31394 F__ccgo_pad1 [6]byte 31395 FzName uintptr 31396 } 31397 31398 type ScanStatus = ScanStatus1 31399 31400 type DblquoteStr1 = struct { 31401 FpNextStr uintptr 31402 Fz [8]int8 31403 } 31404 31405 type DblquoteStr = DblquoteStr1 31406 31407 type ValueList1 = struct { 31408 FpCsr uintptr 31409 FpOut uintptr 31410 } 31411 31412 type ValueList = ValueList1 31413 31414 func testHexToInt(tls *libc.TLS, h int32) int32 { 31415 if h >= '0' && h <= '9' { 31416 return h - '0' 31417 } else if h >= 'a' && h <= 'f' { 31418 return h - 'a' + 10 31419 } else { 31420 return h - 'A' + 10 31421 } 31422 return int32(0) 31423 } 31424 31425 func sqlite3TestTextToPtr(tls *libc.TLS, z uintptr) uintptr { 31426 bp := tls.Alloc(20) 31427 defer tls.Free(20) 31428 31429 if int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 'x' { 31430 z += uintptr(2) 31431 } 31432 *(*u64)(unsafe.Pointer(bp + 8)) = uint64(0) 31433 for *(*int8)(unsafe.Pointer(z)) != 0 { 31434 *(*u64)(unsafe.Pointer(bp + 8)) = *(*u64)(unsafe.Pointer(bp + 8))<<4 + u64(testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(z))))) 31435 z++ 31436 } 31437 if uint64(unsafe.Sizeof(uintptr(0))) == uint64(unsafe.Sizeof(u64(0))) { 31438 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 31439 } else { 31440 *(*u32)(unsafe.Pointer(bp + 16)) = u32(*(*u64)(unsafe.Pointer(bp + 8))) 31441 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 31442 } 31443 return *(*uintptr)(unsafe.Pointer(bp)) 31444 } 31445 31446 func get_sqlite_pointer(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31447 bp := tls.Alloc(212) 31448 defer tls.Free(212) 31449 31450 var p uintptr 31451 31452 if objc != 2 { 31453 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+14841) 31454 return TCL_ERROR 31455 } 31456 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 31457 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 31458 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 31459 return TCL_ERROR 31460 } 31461 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData 31462 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+112, ts+9889, libc.VaList(bp+24, (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb)) 31463 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+112, 0)) 31464 return TCL_OK 31465 } 31466 31467 func getDbPointer(tls *libc.TLS, interp uintptr, zA uintptr, ppDb uintptr) int32 { 31468 bp := tls.Alloc(64) 31469 defer tls.Free(64) 31470 31471 var p uintptr 31472 31473 if tcl.XTcl_GetCommandInfo(tls, interp, zA, bp) != 0 { 31474 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 31475 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 31476 } else { 31477 *(*uintptr)(unsafe.Pointer(ppDb)) = sqlite3TestTextToPtr(tls, zA) 31478 } 31479 return TCL_OK 31480 } 31481 31482 func sqlite3TestErrCode(tls *libc.TLS, interp uintptr, db uintptr, rc int32) int32 { 31483 bp := tls.Alloc(248) 31484 defer tls.Free(248) 31485 31486 if sqlite3.Xsqlite3_threadsafe(tls) == 0 && rc != SQLITE_MISUSE && rc != SQLITE_OK && 31487 sqlite3.Xsqlite3_errcode(tls, db) != rc { 31488 var r2 int32 = sqlite3.Xsqlite3_errcode(tls, db) 31489 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+48, 31490 ts+14879, 31491 libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), rc, sqlite3.Xsqlite3ErrName(tls, r2), r2)) 31492 tcl.XTcl_ResetResult(tls, interp) 31493 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 31494 return 1 31495 } 31496 return 0 31497 } 31498 31499 func getStmtPointer(tls *libc.TLS, interp uintptr, zArg uintptr, ppStmt uintptr) int32 { 31500 *(*uintptr)(unsafe.Pointer(ppStmt)) = sqlite3TestTextToPtr(tls, zArg) 31501 return TCL_OK 31502 } 31503 31504 func sqlite3TestMakePointerStr(tls *libc.TLS, interp uintptr, zPtr uintptr, p uintptr) int32 { 31505 bp := tls.Alloc(8) 31506 defer tls.Free(8) 31507 31508 sqlite3.Xsqlite3_snprintf(tls, 100, zPtr, ts+9889, libc.VaList(bp, p)) 31509 return TCL_OK 31510 } 31511 31512 func exec_printf_cb(tls *libc.TLS, pArg uintptr, argc int32, argv uintptr, name uintptr) int32 { 31513 var str uintptr = pArg 31514 var i int32 31515 31516 if (*Tcl_DString)(unsafe.Pointer(str)).Flength == 0 { 31517 for i = 0; i < argc; i++ { 31518 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 31519 if *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) != 0 { 31520 return *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) 31521 } 31522 return ts + 5846 31523 }()) 31524 } 31525 } 31526 for i = 0; i < argc; i++ { 31527 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 31528 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 31529 return *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 31530 } 31531 return ts + 5846 31532 }()) 31533 } 31534 return 0 31535 } 31536 31537 func test_io_trace(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31538 return TCL_OK 31539 } 31540 31541 func clang_sanitize_address(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31542 var res int32 = 0 31543 if res == 0 && libc.Xgetenv(tls, ts+14937) != uintptr(0) { 31544 res = 1 31545 } 31546 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 31547 return TCL_OK 31548 } 31549 31550 func test_exec_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31551 bp := tls.Alloc(310) 31552 defer tls.Free(310) 31553 31554 var rc int32 31555 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 31556 var zSql uintptr 31557 31558 if argc != 4 { 31559 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31560 ts+14975, 0)) 31561 return TCL_ERROR 31562 } 31563 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 31564 return TCL_ERROR 31565 } 31566 tcl.XTcl_DStringInit(tls, bp+56) 31567 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 31568 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 31569 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 31570 }{exec_printf_cb})), bp+56, bp+272) 31571 sqlite3.Xsqlite3_free(tls, zSql) 31572 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 31573 tcl.XTcl_AppendElement(tls, interp, bp+280) 31574 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 31575 if rc == SQLITE_OK { 31576 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 31577 } 31578 return *(*uintptr)(unsafe.Pointer(bp + 272)) 31579 }()) 31580 tcl.XTcl_DStringFree(tls, bp+56) 31581 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 31582 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 31583 } 31584 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 31585 return TCL_ERROR 31586 } 31587 return TCL_OK 31588 } 31589 31590 func test_exec_hex(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31591 bp := tls.Alloc(806) 31592 defer tls.Free(806) 31593 31594 var rc int32 31595 var i int32 31596 var j int32 31597 *(*uintptr)(unsafe.Pointer(bp + 768)) = uintptr(0) 31598 var zHex uintptr 31599 31600 if argc != 3 { 31601 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31602 ts+14993, 0)) 31603 return TCL_ERROR 31604 } 31605 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 31606 return TCL_ERROR 31607 } 31608 zHex = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 31609 i = libc.AssignInt32(&j, 0) 31610 __1: 31611 if !(uint64(i) < uint64(unsafe.Sizeof([501]int8{}))-uint64(1) && *(*int8)(unsafe.Pointer(zHex + uintptr(j))) != 0) { 31612 goto __3 31613 } 31614 { 31615 if int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j)))) == '%' && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 { 31616 *(*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)))))) 31617 j = j + 2 31618 } else { 31619 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = *(*int8)(unsafe.Pointer(zHex + uintptr(j))) 31620 } 31621 31622 } 31623 goto __2 31624 __2: 31625 i++ 31626 j++ 31627 goto __1 31628 goto __3 31629 __3: 31630 ; 31631 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = int8(0) 31632 tcl.XTcl_DStringInit(tls, bp+552) 31633 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48, *(*uintptr)(unsafe.Pointer(&struct { 31634 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 31635 }{exec_printf_cb})), bp+552, bp+768) 31636 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+776, ts+1333, libc.VaList(bp+32, rc)) 31637 tcl.XTcl_AppendElement(tls, interp, bp+776) 31638 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 31639 if rc == SQLITE_OK { 31640 return (*Tcl_DString)(unsafe.Pointer(bp + 552)).Fstring 31641 } 31642 return *(*uintptr)(unsafe.Pointer(bp + 768)) 31643 }()) 31644 tcl.XTcl_DStringFree(tls, bp+552) 31645 if *(*uintptr)(unsafe.Pointer(bp + 768)) != 0 { 31646 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 768))) 31647 } 31648 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 40)), rc) != 0 { 31649 return TCL_ERROR 31650 } 31651 return TCL_OK 31652 } 31653 31654 func db_enter(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31655 bp := tls.Alloc(40) 31656 defer tls.Free(40) 31657 31658 if argc != 2 { 31659 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31660 ts+15001, 0)) 31661 return TCL_ERROR 31662 } 31663 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31664 return TCL_ERROR 31665 } 31666 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 31667 return TCL_OK 31668 } 31669 31670 func db_leave(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31671 bp := tls.Alloc(40) 31672 defer tls.Free(40) 31673 31674 if argc != 2 { 31675 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31676 ts+15001, 0)) 31677 return TCL_ERROR 31678 } 31679 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31680 return TCL_ERROR 31681 } 31682 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 31683 return TCL_OK 31684 } 31685 31686 func test_exec(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31687 bp := tls.Alloc(310) 31688 defer tls.Free(310) 31689 31690 var rc int32 31691 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 31692 var zSql uintptr 31693 var i int32 31694 var j int32 31695 31696 if argc != 3 { 31697 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31698 ts+15005, 0)) 31699 return TCL_ERROR 31700 } 31701 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 31702 return TCL_ERROR 31703 } 31704 tcl.XTcl_DStringInit(tls, bp+56) 31705 zSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 31706 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; { 31707 if int32(*(*int8)(unsafe.Pointer(zSql + uintptr(i)))) == '%' { 31708 *(*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)))))) 31709 i = i + 3 31710 } else { 31711 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&i, 1)))) 31712 } 31713 } 31714 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 31715 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 31716 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 31717 }{exec_printf_cb})), bp+56, bp+272) 31718 sqlite3.Xsqlite3_free(tls, zSql) 31719 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 31720 tcl.XTcl_AppendElement(tls, interp, bp+280) 31721 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 31722 if rc == SQLITE_OK { 31723 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 31724 } 31725 return *(*uintptr)(unsafe.Pointer(bp + 272)) 31726 }()) 31727 tcl.XTcl_DStringFree(tls, bp+56) 31728 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 31729 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 31730 } 31731 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 31732 return TCL_ERROR 31733 } 31734 return TCL_OK 31735 } 31736 31737 func test_exec_nr(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31738 bp := tls.Alloc(48) 31739 defer tls.Free(48) 31740 31741 var rc int32 31742 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 31743 if argc != 3 { 31744 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31745 ts+15005, 0)) 31746 return TCL_ERROR 31747 } 31748 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31749 return TCL_ERROR 31750 } 31751 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), uintptr(0), uintptr(0), bp+40) 31752 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 31753 return TCL_ERROR 31754 } 31755 return TCL_OK 31756 } 31757 31758 func test_mprintf_z(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31759 bp := tls.Alloc(40) 31760 defer tls.Free(40) 31761 31762 var zResult uintptr = uintptr(0) 31763 var i int32 31764 31765 for i = 2; i < argc && (i == 2 || zResult != 0); i++ { 31766 zResult = sqlite3.Xsqlite3_mprintf(tls, ts+15013, libc.VaList(bp, zResult, *(*uintptr)(unsafe.Pointer(argv + 1*8)), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 31767 } 31768 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zResult, 0)) 31769 sqlite3.Xsqlite3_free(tls, zResult) 31770 return TCL_OK 31771 } 31772 31773 func test_mprintf_n(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31774 bp := tls.Alloc(20) 31775 defer tls.Free(20) 31776 31777 var zStr uintptr 31778 *(*int32)(unsafe.Pointer(bp + 16)) = 0 31779 zStr = sqlite3.Xsqlite3_mprintf(tls, ts+15020, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+16)) 31780 sqlite3.Xsqlite3_free(tls, zStr) 31781 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 31782 return TCL_OK 31783 } 31784 31785 func test_snprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31786 bp := tls.Alloc(124) 31787 defer tls.Free(124) 31788 31789 var n int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 31790 var zFormat uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 31791 var a1 int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 31792 if uint64(n) > uint64(unsafe.Sizeof([100]int8{})) { 31793 n = int32(unsafe.Sizeof([100]int8{})) 31794 } 31795 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+15025, 0) 31796 sqlite3.Xsqlite3_snprintf(tls, n, bp+24, zFormat, libc.VaList(bp, a1)) 31797 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, 0)) 31798 return TCL_OK 31799 } 31800 31801 func test_get_table_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31802 bp := tls.Alloc(350) 31803 defer tls.Free(350) 31804 31805 var rc int32 31806 *(*uintptr)(unsafe.Pointer(bp + 304)) = uintptr(0) 31807 *(*int32)(unsafe.Pointer(bp + 312)) = 0 31808 *(*int32)(unsafe.Pointer(bp + 316)) = 0 31809 31810 var i int32 31811 31812 var zSql uintptr 31813 *(*int32)(unsafe.Pointer(bp + 64)) = -1 31814 if argc == 5 { 31815 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+64) != 0 { 31816 return TCL_ERROR 31817 } 31818 } 31819 if argc != 4 && argc != 5 { 31820 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31821 ts+15052, 0)) 31822 return TCL_ERROR 31823 } 31824 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) != 0 { 31825 return TCL_ERROR 31826 } 31827 tcl.XTcl_DStringInit(tls, bp+80) 31828 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 31829 if argc == 5 { 31830 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, uintptr(0), uintptr(0), bp+304) 31831 } else { 31832 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, bp+312, bp+316, bp+304) 31833 *(*int32)(unsafe.Pointer(bp + 64)) = (*(*int32)(unsafe.Pointer(bp + 312)) + 1) * *(*int32)(unsafe.Pointer(bp + 316)) 31834 } 31835 sqlite3.Xsqlite3_free(tls, zSql) 31836 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+40, rc)) 31837 tcl.XTcl_AppendElement(tls, interp, bp+320) 31838 if rc == SQLITE_OK { 31839 if argc == 4 { 31840 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 312)))) 31841 tcl.XTcl_AppendElement(tls, interp, bp+320) 31842 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+56, *(*int32)(unsafe.Pointer(bp + 316)))) 31843 tcl.XTcl_AppendElement(tls, interp, bp+320) 31844 } 31845 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 31846 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 31847 if *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) != 0 { 31848 return *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) 31849 } 31850 return ts + 5846 31851 }()) 31852 } 31853 } else { 31854 tcl.XTcl_AppendElement(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 304))) 31855 } 31856 sqlite3.Xsqlite3_free_table(tls, *(*uintptr)(unsafe.Pointer(bp + 296))) 31857 if *(*uintptr)(unsafe.Pointer(bp + 304)) != 0 { 31858 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 304))) 31859 } 31860 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 72)), rc) != 0 { 31861 return TCL_ERROR 31862 } 31863 return TCL_OK 31864 } 31865 31866 func test_last_rowid(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31867 bp := tls.Alloc(94) 31868 defer tls.Free(94) 31869 31870 if argc != 2 { 31871 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15078, 0)) 31872 return TCL_ERROR 31873 } 31874 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 31875 return TCL_ERROR 31876 } 31877 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))))) 31878 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 31879 return SQLITE_OK 31880 } 31881 31882 func test_key(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31883 return TCL_OK 31884 } 31885 31886 func test_rekey(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31887 return TCL_OK 31888 } 31889 31890 func sqlite_test_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31891 bp := tls.Alloc(40) 31892 defer tls.Free(40) 31893 31894 var rc int32 31895 if argc != 2 { 31896 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31897 ts+15083, 0)) 31898 return TCL_ERROR 31899 } 31900 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31901 return TCL_ERROR 31902 } 31903 rc = sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 31904 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 31905 return TCL_OK 31906 } 31907 31908 func sqlite_test_close_v2(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31909 bp := tls.Alloc(40) 31910 defer tls.Free(40) 31911 31912 var rc int32 31913 if argc != 2 { 31914 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31915 ts+15083, 0)) 31916 return TCL_ERROR 31917 } 31918 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31919 return TCL_ERROR 31920 } 31921 rc = sqlite3.Xsqlite3_close_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 31922 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 31923 return TCL_OK 31924 } 31925 31926 func t1_ifnullFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 31927 var i int32 31928 for i = 0; i < argc; i++ { 31929 if SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) { 31930 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 31931 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))), 31932 n, libc.UintptrFromInt32(-1)) 31933 break 31934 } 31935 } 31936 } 31937 31938 func hex8Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 31939 bp := tls.Alloc(208) 31940 defer tls.Free(208) 31941 31942 var z uintptr 31943 var i int32 31944 31945 z = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 31946 for i = 0; uint64(i) < uint64(unsafe.Sizeof([200]int8{}))/uint64(2)-uint64(2) && *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 31947 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)))))) 31948 } 31949 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = int8(0) 31950 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 31951 } 31952 31953 func hex16Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 31954 bp := tls.Alloc(408) 31955 defer tls.Free(408) 31956 31957 var z uintptr 31958 var i int32 31959 31960 z = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 31961 for i = 0; uint64(i) < uint64(unsafe.Sizeof([400]int8{}))/uint64(4)-uint64(4) && *(*uint16)(unsafe.Pointer(z + uintptr(i)*2)) != 0; i++ { 31962 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)) 31963 } 31964 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*4))) = int8(0) 31965 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 31966 } 31967 31968 type dstr = struct { 31969 FnAlloc int32 31970 FnUsed int32 31971 Fz uintptr 31972 } 31973 31974 func dstrAppend(tls *libc.TLS, p uintptr, z uintptr, divider int32) { 31975 var n int32 = int32(libc.Xstrlen(tls, z)) 31976 if (*dstr)(unsafe.Pointer(p)).FnUsed+n+2 > (*dstr)(unsafe.Pointer(p)).FnAlloc { 31977 var zNew uintptr 31978 (*dstr)(unsafe.Pointer(p)).FnAlloc = (*dstr)(unsafe.Pointer(p)).FnAlloc*2 + n + 200 31979 zNew = sqlite3.Xsqlite3_realloc(tls, (*dstr)(unsafe.Pointer(p)).Fz, (*dstr)(unsafe.Pointer(p)).FnAlloc) 31980 if zNew == uintptr(0) { 31981 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(p)).Fz) 31982 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(dstr{}))) 31983 return 31984 } 31985 (*dstr)(unsafe.Pointer(p)).Fz = zNew 31986 } 31987 if divider != 0 && (*dstr)(unsafe.Pointer(p)).FnUsed > 0 { 31988 *(*int8)(unsafe.Pointer((*dstr)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*dstr)(unsafe.Pointer(p)).FnUsed, 1)))) = int8(divider) 31989 } 31990 libc.Xmemcpy(tls, (*dstr)(unsafe.Pointer(p)).Fz+uintptr((*dstr)(unsafe.Pointer(p)).FnUsed), z, uint64(n+1)) 31991 *(*int32)(unsafe.Pointer(p + 4)) += n 31992 } 31993 31994 func execFuncCallback(tls *libc.TLS, pData uintptr, argc int32, argv uintptr, NotUsed uintptr) int32 { 31995 var p uintptr = pData 31996 var i int32 31997 for i = 0; i < argc; i++ { 31998 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) == uintptr(0) { 31999 dstrAppend(tls, p, ts+5846, ' ') 32000 } else { 32001 dstrAppend(tls, p, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ' ') 32002 } 32003 } 32004 return 0 32005 } 32006 32007 func sqlite3ExecFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32008 bp := tls.Alloc(16) 32009 defer tls.Free(16) 32010 32011 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(dstr{}))) 32012 sqlite3.Xsqlite3_exec(tls, sqlite3.Xsqlite3_user_data(tls, context), 32013 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 32014 *(*uintptr)(unsafe.Pointer(&struct { 32015 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32016 }{execFuncCallback})), bp, uintptr(0)) 32017 sqlite3.Xsqlite3_result_text(tls, context, (*dstr)(unsafe.Pointer(bp)).Fz, (*dstr)(unsafe.Pointer(bp)).FnUsed, libc.UintptrFromInt32(-1)) 32018 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(bp)).Fz) 32019 } 32020 32021 func tkt2213Function(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32022 var nText int32 32023 var zText1 uintptr 32024 var zText2 uintptr 32025 var zText3 uintptr 32026 32027 nText = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32028 zText1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32029 zText2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32030 zText3 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32031 32032 if zText1 != zText2 || zText2 != zText3 { 32033 sqlite3.Xsqlite3_result_error(tls, context, ts+15099, -1) 32034 } else { 32035 var zCopy uintptr = sqlite3.Xsqlite3_malloc(tls, nText) 32036 libc.Xmemcpy(tls, zCopy, zText1, uint64(nText)) 32037 sqlite3.Xsqlite3_result_text(tls, context, zCopy, nText, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 32038 } 32039 } 32040 32041 func ptrChngFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32042 var p1 uintptr 32043 var p2 uintptr 32044 var zCmd uintptr 32045 if argc != 4 { 32046 return 32047 } 32048 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 32049 if zCmd == uintptr(0) { 32050 return 32051 } 32052 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32053 p1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32054 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32055 p1 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32056 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32057 p1 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32058 } else { 32059 return 32060 } 32061 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 32062 if zCmd == uintptr(0) { 32063 return 32064 } 32065 if libc.Xstrcmp(tls, zCmd, ts+15127) == 0 { 32066 sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32067 } else if libc.Xstrcmp(tls, zCmd, ts+15133) == 0 { 32068 sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32069 } else if libc.Xstrcmp(tls, zCmd, ts+15141) == 0 { 32070 } else { 32071 return 32072 } 32073 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 32074 if zCmd == uintptr(0) { 32075 return 32076 } 32077 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32078 p2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32079 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32080 p2 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32081 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32082 p2 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32083 } else { 32084 return 32085 } 32086 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(p1 != p2)) 32087 } 32088 32089 func nondeterministicFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32090 sqlite3.Xsqlite3_result_int(tls, context, libc.PostIncInt32(&cnt, 1)) 32091 } 32092 32093 var cnt int32 = 0 32094 32095 func intrealFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32096 bp := tls.Alloc(8) 32097 defer tls.Free(8) 32098 32099 var v sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 32100 sqlite3.Xsqlite3_result_int64(tls, context, v) 32101 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_RESULT_INTREAL, libc.VaList(bp, context)) 32102 } 32103 32104 func test_create_function(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32105 bp := tls.Alloc(40) 32106 defer tls.Free(40) 32107 32108 var rc int32 32109 32110 if argc != 2 { 32111 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32112 ts+15078, 0)) 32113 return TCL_ERROR 32114 } 32115 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32116 return TCL_ERROR 32117 } 32118 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15146, -1, SQLITE_UTF8, uintptr(0), 32119 *(*uintptr)(unsafe.Pointer(&struct { 32120 f func(*libc.TLS, uintptr, int32, uintptr) 32121 }{t1_ifnullFunc})), uintptr(0), uintptr(0)) 32122 if rc == SQLITE_OK { 32123 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15157, 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32124 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32125 f func(*libc.TLS, uintptr, int32, uintptr) 32126 }{hex8Func})), uintptr(0), uintptr(0)) 32127 } 32128 if rc == SQLITE_OK { 32129 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15162, 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 32130 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32131 f func(*libc.TLS, uintptr, int32, uintptr) 32132 }{hex16Func})), uintptr(0), uintptr(0)) 32133 } 32134 if rc == SQLITE_OK { 32135 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15168, 1, SQLITE_ANY, uintptr(0), 32136 *(*uintptr)(unsafe.Pointer(&struct { 32137 f func(*libc.TLS, uintptr, int32, uintptr) 32138 }{tkt2213Function})), uintptr(0), uintptr(0)) 32139 } 32140 if rc == SQLITE_OK { 32141 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15180, 4, SQLITE_ANY, uintptr(0), 32142 *(*uintptr)(unsafe.Pointer(&struct { 32143 f func(*libc.TLS, uintptr, int32, uintptr) 32144 }{ptrChngFunction})), uintptr(0), uintptr(0)) 32145 } 32146 32147 if rc == SQLITE_OK { 32148 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15195, -1, SQLITE_UTF8, 32149 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32150 f func(*libc.TLS, uintptr, int32, uintptr) 32151 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32152 } 32153 if rc == SQLITE_OK { 32154 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15204, -1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32155 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32156 f func(*libc.TLS, uintptr, int32, uintptr) 32157 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32158 } 32159 32160 if rc == SQLITE_OK { 32161 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15213, 1, SQLITE_UTF8, 32162 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32163 f func(*libc.TLS, uintptr, int32, uintptr) 32164 }{intrealFunction})), uintptr(0), uintptr(0)) 32165 } 32166 32167 if rc == SQLITE_OK { 32168 var zUtf16 uintptr 32169 var pVal uintptr 32170 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32171 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32172 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+15221, uint8(SQLITE_UTF8), uintptr(0)) 32173 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 32174 if (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FmallocFailed != 0 { 32175 rc = SQLITE_NOMEM 32176 } else { 32177 rc = sqlite3.Xsqlite3_create_function16(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zUtf16, 32178 1, SQLITE_UTF16, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct { 32179 f func(*libc.TLS, uintptr, int32, uintptr) 32180 }{sqlite3ExecFunc})), uintptr(0), uintptr(0)) 32181 } 32182 sqlite3.Xsqlite3ValueFree(tls, pVal) 32183 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32184 } 32185 32186 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32187 return TCL_ERROR 32188 } 32189 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32190 return TCL_OK 32191 } 32192 32193 func test_drop_modules(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32194 bp := tls.Alloc(40) 32195 defer tls.Free(40) 32196 32197 if argc < 2 { 32198 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32199 ts+15078, 0)) 32200 return TCL_ERROR 32201 } 32202 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32203 return TCL_ERROR 32204 } 32205 sqlite3.Xsqlite3_drop_modules(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), func() uintptr { 32206 if argc > 2 { 32207 return argv + uintptr(2)*8 32208 } 32209 return uintptr(0) 32210 }()) 32211 return TCL_OK 32212 } 32213 32214 type t1CountCtx1 = struct{ Fn int32 } 32215 32216 type t1CountCtx = t1CountCtx1 32217 32218 func t1CountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32219 bp := tls.Alloc(9) 32220 defer tls.Free(9) 32221 32222 var p uintptr 32223 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 32224 if (argc == 0 || SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv)))) && p != 0 { 32225 (*t1CountCtx)(unsafe.Pointer(p)).Fn++ 32226 } 32227 if argc > 0 { 32228 var v int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 32229 if v == 40 { 32230 sqlite3.Xsqlite3_result_error(tls, context, ts+15235, -1) 32231 } else if v == 41 { 32232 *(*[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)} 32233 sqlite3.Xsqlite3_result_error16(tls, context, bp+1, -1) 32234 } 32235 } 32236 } 32237 32238 func t1CountFinalize(tls *libc.TLS, context uintptr) { 32239 var p uintptr 32240 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 32241 if p != 0 { 32242 if (*t1CountCtx)(unsafe.Pointer(p)).Fn == 42 { 32243 sqlite3.Xsqlite3_result_error(tls, context, ts+15265, -1) 32244 } else { 32245 sqlite3.Xsqlite3_result_int(tls, context, func() int32 { 32246 if p != 0 { 32247 return (*t1CountCtx)(unsafe.Pointer(p)).Fn 32248 } 32249 return 0 32250 }()) 32251 } 32252 } 32253 } 32254 32255 func legacyCountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32256 } 32257 32258 func legacyCountFinalize(tls *libc.TLS, context uintptr) { 32259 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_aggregate_count(tls, context)) 32260 } 32261 32262 func test_create_aggregate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32263 bp := tls.Alloc(40) 32264 defer tls.Free(40) 32265 32266 var rc int32 32267 if argc != 2 { 32268 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32269 ts+15083, 0)) 32270 return TCL_ERROR 32271 } 32272 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32273 return TCL_ERROR 32274 } 32275 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 0, SQLITE_UTF8, uintptr(0), uintptr(0), 32276 *(*uintptr)(unsafe.Pointer(&struct { 32277 f func(*libc.TLS, uintptr, int32, uintptr) 32278 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 32279 if rc == SQLITE_OK { 32280 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 1, SQLITE_UTF8, uintptr(0), uintptr(0), 32281 *(*uintptr)(unsafe.Pointer(&struct { 32282 f func(*libc.TLS, uintptr, int32, uintptr) 32283 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 32284 } 32285 if rc == SQLITE_OK { 32286 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15294, 0, SQLITE_ANY, uintptr(0), uintptr(0), 32287 *(*uintptr)(unsafe.Pointer(&struct { 32288 f func(*libc.TLS, uintptr, int32, uintptr) 32289 }{legacyCountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{legacyCountFinalize}))) 32290 } 32291 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32292 return TCL_ERROR 32293 } 32294 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32295 return TCL_OK 32296 } 32297 32298 func test_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32299 bp := tls.Alloc(40) 32300 defer tls.Free(40) 32301 32302 if argc != 2 { 32303 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32304 ts+15307, 0)) 32305 return TCL_ERROR 32306 } 32307 libc.Xprintf(tls, ts+389, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 32308 return TCL_OK 32309 } 32310 32311 func sqlite3_mprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32312 bp := tls.Alloc(84) 32313 defer tls.Free(84) 32314 32315 var i int32 32316 var z uintptr 32317 if argc != 5 { 32318 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32319 ts+15314, 0)) 32320 return TCL_ERROR 32321 } 32322 for i = 2; i < 5; i++ { 32323 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32324 return TCL_ERROR 32325 } 32326 } 32327 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)))) 32328 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32329 sqlite3.Xsqlite3_free(tls, z) 32330 return TCL_OK 32331 } 32332 32333 func sqlite3_mprintf_int64(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32334 bp := tls.Alloc(112) 32335 defer tls.Free(112) 32336 32337 var i int32 32338 32339 var z uintptr 32340 if argc != 5 { 32341 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32342 ts+15314, 0)) 32343 return TCL_ERROR 32344 } 32345 for i = 2; i < 5; i++ { 32346 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 { 32347 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15335, 0)) 32348 return TCL_ERROR 32349 } 32350 } 32351 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)))) 32352 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32353 sqlite3.Xsqlite3_free(tls, z) 32354 return TCL_OK 32355 } 32356 32357 func sqlite3_mprintf_long(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32358 bp := tls.Alloc(112) 32359 defer tls.Free(112) 32360 32361 var i int32 32362 32363 var z uintptr 32364 if argc != 5 { 32365 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32366 ts+15314, 0)) 32367 return TCL_ERROR 32368 } 32369 for i = 2; i < 5; i++ { 32370 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32371 return TCL_ERROR 32372 } 32373 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) = int64(*(*int32)(unsafe.Pointer(bp + 72 + uintptr(i-2)*4))) 32374 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) &= int64(uint64(1)<<(uint64(unsafe.Sizeof(int32(0)))*uint64(8)) - uint64(1)) 32375 } 32376 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)))) 32377 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32378 sqlite3.Xsqlite3_free(tls, z) 32379 return TCL_OK 32380 } 32381 32382 func sqlite3_mprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32383 bp := tls.Alloc(84) 32384 defer tls.Free(84) 32385 32386 var i int32 32387 var z uintptr 32388 if argc < 4 || argc > 5 { 32389 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32390 ts+15374, 0)) 32391 return TCL_ERROR 32392 } 32393 for i = 2; i < 4; i++ { 32394 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32395 return TCL_ERROR 32396 } 32397 } 32398 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 { 32399 if argc > 4 { 32400 return *(*uintptr)(unsafe.Pointer(argv + 4*8)) 32401 } 32402 return uintptr(0) 32403 }())) 32404 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32405 sqlite3.Xsqlite3_free(tls, z) 32406 return TCL_OK 32407 } 32408 32409 func sqlite3_snprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32410 bp := tls.Alloc(104) 32411 defer tls.Free(104) 32412 32413 var i int32 32414 32415 var z uintptr 32416 if argc < 5 || argc > 6 { 32417 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32418 ts+15400, 0)) 32419 return TCL_ERROR 32420 } 32421 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+88) != 0 { 32422 return TCL_ERROR 32423 } 32424 if *(*int32)(unsafe.Pointer(bp + 88)) < 0 { 32425 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15430, 0)) 32426 return TCL_ERROR 32427 } 32428 for i = 3; i < 5; i++ { 32429 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+92+uintptr(i-3)*4) != 0 { 32430 return TCL_ERROR 32431 } 32432 } 32433 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 88))+1) 32434 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 { 32435 if argc > 4 { 32436 return *(*uintptr)(unsafe.Pointer(argv + 5*8)) 32437 } 32438 return uintptr(0) 32439 }())) 32440 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32441 sqlite3.Xsqlite3_free(tls, z) 32442 return TCL_OK 32443 } 32444 32445 func sqlite3_mprintf_double(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32446 bp := tls.Alloc(96) 32447 defer tls.Free(96) 32448 32449 var i int32 32450 32451 var z uintptr 32452 if argc != 5 { 32453 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32454 ts+15453, 0)) 32455 return TCL_ERROR 32456 } 32457 for i = 2; i < 4; i++ { 32458 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32459 return TCL_ERROR 32460 } 32461 } 32462 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+88) != 0 { 32463 return TCL_ERROR 32464 } 32465 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)))) 32466 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32467 sqlite3.Xsqlite3_free(tls, z) 32468 return TCL_OK 32469 } 32470 32471 func sqlite3_mprintf_scaled(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32472 bp := tls.Alloc(72) 32473 defer tls.Free(72) 32474 32475 var i int32 32476 32477 var z uintptr 32478 if argc != 4 { 32479 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32480 ts+15477, 0)) 32481 return TCL_ERROR 32482 } 32483 for i = 2; i < 4; i++ { 32484 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+56+uintptr(i-2)*8) != 0 { 32485 return TCL_ERROR 32486 } 32487 } 32488 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)))) 32489 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 32490 sqlite3.Xsqlite3_free(tls, z) 32491 return TCL_OK 32492 } 32493 32494 func sqlite3_mprintf_stronly(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32495 bp := tls.Alloc(56) 32496 defer tls.Free(56) 32497 32498 var z uintptr 32499 if argc != 3 { 32500 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32501 ts+15500, 0)) 32502 return TCL_ERROR 32503 } 32504 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 32505 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 32506 sqlite3.Xsqlite3_free(tls, z) 32507 return TCL_OK 32508 } 32509 32510 func sqlite3_mprintf_hexdouble(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32511 bp := tls.Alloc(112) 32512 defer tls.Free(112) 32513 32514 var z uintptr 32515 32516 if argc != 3 { 32517 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32518 ts+15500, 0)) 32519 return TCL_ERROR 32520 } 32521 if libc.Xsscanf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), ts+15516, libc.VaList(bp+32, bp+88, bp+92)) != 2 { 32522 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+15525, 0)) 32523 return TCL_ERROR 32524 } 32525 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 88))) 32526 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = *(*sqlite_uint64)(unsafe.Pointer(bp + 104))<<32 + sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 92))) 32527 libc.Xmemcpy(tls, bp+96, bp+104, uint64(unsafe.Sizeof(float64(0)))) 32528 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+64, *(*float64)(unsafe.Pointer(bp + 96)))) 32529 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32530 sqlite3.Xsqlite3_free(tls, z) 32531 return TCL_OK 32532 } 32533 32534 func test_enable_shared(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32535 bp := tls.Alloc(4) 32536 defer tls.Free(4) 32537 32538 var rc int32 32539 32540 var ret int32 = 0 32541 32542 if objc != 2 && objc != 1 { 32543 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15569) 32544 return TCL_ERROR 32545 } 32546 ret = sqlite3.Xsqlite3Config.FsharedCacheEnabled 32547 32548 if objc == 2 { 32549 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 32550 return TCL_ERROR 32551 } 32552 rc = sqlite3.Xsqlite3_enable_shared_cache(tls, *(*int32)(unsafe.Pointer(bp))) 32553 if rc != SQLITE_OK { 32554 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 32555 return TCL_ERROR 32556 } 32557 } 32558 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(ret != 0))) 32559 return TCL_OK 32560 } 32561 32562 func test_extended_result_codes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32563 bp := tls.Alloc(12) 32564 defer tls.Free(12) 32565 32566 if objc != 3 { 32567 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15579) 32568 return TCL_ERROR 32569 } 32570 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 32571 return TCL_ERROR 32572 } 32573 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 32574 return TCL_ERROR 32575 } 32576 sqlite3.Xsqlite3_extended_result_codes(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 32577 return TCL_OK 32578 } 32579 32580 func test_libversion_number(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32581 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_libversion_number(tls))) 32582 return TCL_OK 32583 } 32584 32585 func test_table_column_metadata(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32586 bp := tls.Alloc(52) 32587 defer tls.Free(52) 32588 32589 var zDb uintptr 32590 var zTbl uintptr 32591 var zCol uintptr 32592 var rc int32 32593 var pRet uintptr 32594 32595 if objc != 5 && objc != 4 { 32596 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15590) 32597 return TCL_ERROR 32598 } 32599 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 32600 return TCL_ERROR 32601 } 32602 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 32603 zTbl = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 32604 if objc == 5 { 32605 zCol = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 32606 } else { 32607 zCol = uintptr(0) 32608 } 32609 32610 if libc.Xstrlen(tls, zDb) == uint64(0) { 32611 zDb = uintptr(0) 32612 } 32613 32614 rc = sqlite3.Xsqlite3_table_column_metadata(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDb, zTbl, zCol, 32615 bp+24, bp+32, bp+40, bp+44, bp+48) 32616 32617 if rc != SQLITE_OK { 32618 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 32619 return TCL_ERROR 32620 } 32621 32622 pRet = tcl.XTcl_NewObj(tls) 32623 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), -1)) 32624 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), -1)) 32625 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 32626 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 44)))) 32627 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 48)))) 32628 tcl.XTcl_SetObjResult(tls, interp, pRet) 32629 32630 return TCL_OK 32631 } 32632 32633 func blobHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 32634 bp := tls.Alloc(8) 32635 defer tls.Free(8) 32636 32637 var z uintptr 32638 32639 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 32640 if *(*int32)(unsafe.Pointer(bp)) == 0 { 32641 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 32642 } else { 32643 var channel Tcl_Channel 32644 var instanceData ClientData 32645 32646 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 32647 if !(channel != 0) { 32648 return TCL_ERROR 32649 } 32650 32651 tcl.XTcl_Flush(tls, channel) 32652 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 32653 32654 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 32655 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 32656 } 32657 32658 return TCL_OK 32659 } 32660 32661 func test_blob_reopen(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32662 bp := tls.Alloc(16) 32663 defer tls.Free(16) 32664 32665 var rc int32 32666 32667 if objc != 3 { 32668 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15616) 32669 return TCL_ERROR 32670 } 32671 32672 if blobHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 32673 return TCL_ERROR 32674 } 32675 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 32676 return TCL_ERROR 32677 } 32678 32679 rc = sqlite3.Xsqlite3_blob_reopen(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 8))) 32680 if rc != SQLITE_OK { 32681 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 32682 } 32683 32684 return func() int32 { 32685 if rc == SQLITE_OK { 32686 return TCL_OK 32687 } 32688 return TCL_ERROR 32689 }() 32690 } 32691 32692 type TestCollationX1 = struct { 32693 Finterp uintptr 32694 FpCmp uintptr 32695 FpDel uintptr 32696 } 32697 32698 type TestCollationX = TestCollationX1 32699 32700 func testCreateCollationDel(tls *libc.TLS, pCtx uintptr) { 32701 var p uintptr = pCtx 32702 32703 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, (*TestCollationX)(unsafe.Pointer(p)).FpDel, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) 32704 if rc != TCL_OK { 32705 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 32706 } 32707 32708 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 32709 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpCmp 32710 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32711 tcl.XTclFreeObj(tls, _objPtr) 32712 } 32713 } 32714 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 32715 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpDel 32716 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32717 tcl.XTclFreeObj(tls, _objPtr) 32718 } 32719 } 32720 sqlite3.Xsqlite3_free(tls, p) 32721 } 32722 32723 func testCreateCollationCmp(tls *libc.TLS, pCtx uintptr, nLeft int32, zLeft uintptr, nRight int32, zRight uintptr) int32 { 32724 bp := tls.Alloc(4) 32725 defer tls.Free(4) 32726 32727 var p uintptr = pCtx 32728 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpCmp) 32729 *(*int32)(unsafe.Pointer(bp)) = 0 32730 32731 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 32732 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zLeft, nLeft)) 32733 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zRight, nRight)) 32734 32735 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, pScript, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) || 32736 TCL_OK != tcl.XTcl_GetIntFromObj(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp), bp) { 32737 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 32738 } 32739 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 32740 var _objPtr uintptr = pScript 32741 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32742 tcl.XTclFreeObj(tls, _objPtr) 32743 } 32744 } 32745 32746 return *(*int32)(unsafe.Pointer(bp)) 32747 } 32748 32749 func test_create_collation_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32750 bp := tls.Alloc(24) 32751 defer tls.Free(24) 32752 32753 var p uintptr 32754 32755 var rc int32 32756 32757 if objc != 5 { 32758 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15630) 32759 return TCL_ERROR 32760 } 32761 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 32762 return TCL_ERROR 32763 } 32764 32765 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TestCollationX{}))) 32766 (*TestCollationX)(unsafe.Pointer(p)).FpCmp = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 32767 (*TestCollationX)(unsafe.Pointer(p)).FpDel = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 32768 (*TestCollationX)(unsafe.Pointer(p)).Finterp = interp 32769 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpCmp)).FrefCount++ 32770 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpDel)).FrefCount++ 32771 32772 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 16, 32773 p, *(*uintptr)(unsafe.Pointer(&struct { 32774 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 32775 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 32776 if rc != SQLITE_MISUSE { 32777 tcl.XTcl_AppendResult(tls, interp, 32778 libc.VaList(bp, ts+15663, uintptr(0))) 32779 return TCL_ERROR 32780 } 32781 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), SQLITE_UTF8, 32782 p, *(*uintptr)(unsafe.Pointer(&struct { 32783 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 32784 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 32785 return TCL_OK 32786 } 32787 32788 type CreateFunctionV21 = struct { 32789 Finterp uintptr 32790 FpFunc uintptr 32791 FpStep uintptr 32792 FpFinal uintptr 32793 FpDestroy uintptr 32794 } 32795 32796 type CreateFunctionV2 = CreateFunctionV21 32797 32798 func cf2Func(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 32799 } 32800 32801 func cf2Step(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 32802 } 32803 32804 func cf2Final(tls *libc.TLS, ctx uintptr) { 32805 } 32806 32807 func cf2Destroy(tls *libc.TLS, pUser uintptr) { 32808 var p uintptr = pUser 32809 32810 if (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp != 0 && (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 32811 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy, 0) 32812 if rc != TCL_OK { 32813 tcl.XTcl_BackgroundError(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp) 32814 } 32815 } 32816 32817 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 32818 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 32819 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc 32820 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32821 tcl.XTclFreeObj(tls, _objPtr) 32822 } 32823 } 32824 } 32825 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 32826 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 32827 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep 32828 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32829 tcl.XTclFreeObj(tls, _objPtr) 32830 } 32831 } 32832 } 32833 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 32834 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 32835 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal 32836 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32837 tcl.XTclFreeObj(tls, _objPtr) 32838 } 32839 } 32840 } 32841 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 32842 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 32843 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy 32844 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32845 tcl.XTclFreeObj(tls, _objPtr) 32846 } 32847 } 32848 } 32849 sqlite3.Xsqlite3_free(tls, p) 32850 } 32851 32852 func test_create_function_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32853 bp := tls.Alloc(180) 32854 defer tls.Free(180) 32855 32856 var zFunc uintptr 32857 32858 var p uintptr 32859 var i int32 32860 var rc int32 32861 32862 *(*[6]EncTable)(unsafe.Pointer(bp + 32)) = [6]EncTable{ 32863 {FzEnc: ts + 15728, Fenc: SQLITE_UTF8}, 32864 {FzEnc: ts + 15733, Fenc: SQLITE_UTF16}, 32865 {FzEnc: ts + 15739, Fenc: SQLITE_UTF16LE}, 32866 {FzEnc: ts + 15747, Fenc: SQLITE_UTF16BE}, 32867 {FzEnc: ts + 12774, Fenc: SQLITE_ANY}, 32868 {FzEnc: ts + 14193}, 32869 } 32870 32871 if objc < 5 || objc%2 == 0 { 32872 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15755) 32873 return TCL_ERROR 32874 } 32875 32876 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 32877 return TCL_ERROR 32878 } 32879 zFunc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 32880 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 32881 return TCL_ERROR 32882 } 32883 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+32, int32(unsafe.Sizeof(EncTable{})), 32884 ts+15784, 0, bp+128) != 0 { 32885 return TCL_ERROR 32886 } 32887 *(*int32)(unsafe.Pointer(bp + 128)) = (*EncTable)(unsafe.Pointer(bp + 32 + uintptr(*(*int32)(unsafe.Pointer(bp + 128)))*16)).Fenc 32888 32889 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CreateFunctionV2{}))) 32890 32891 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CreateFunctionV2{}))) 32892 (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp = interp 32893 32894 for i = 5; i < objc; i = i + 2 { 32895 *(*[5]uintptr)(unsafe.Pointer(bp + 136)) = [5]uintptr{ts + 15793, ts + 15799, ts + 15805, ts + 15812, uintptr(0)} 32896 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 { 32897 sqlite3.Xsqlite3_free(tls, p) 32898 return TCL_ERROR 32899 } 32900 32901 switch *(*int32)(unsafe.Pointer(bp + 176)) { 32902 case 0: 32903 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 32904 break 32905 case 1: 32906 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 32907 break 32908 case 2: 32909 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 32910 break 32911 case 3: 32912 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 32913 break 32914 } 32915 } 32916 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 32917 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc) 32918 } 32919 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 32920 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep) 32921 } 32922 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 32923 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal) 32924 } 32925 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 32926 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy) 32927 } 32928 32929 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 32930 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc)).FrefCount++ 32931 } 32932 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 32933 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpStep)).FrefCount++ 32934 } 32935 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 32936 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal)).FrefCount++ 32937 } 32938 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 32939 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy)).FrefCount++ 32940 } 32941 32942 rc = sqlite3.Xsqlite3_create_function_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zFunc, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 128)), p, 32943 func() uintptr { 32944 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 32945 return *(*uintptr)(unsafe.Pointer(&struct { 32946 f func(*libc.TLS, uintptr, int32, uintptr) 32947 }{cf2Func})) 32948 } 32949 return uintptr(0) 32950 }(), 32951 func() uintptr { 32952 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 32953 return *(*uintptr)(unsafe.Pointer(&struct { 32954 f func(*libc.TLS, uintptr, int32, uintptr) 32955 }{cf2Step})) 32956 } 32957 return uintptr(0) 32958 }(), 32959 func() uintptr { 32960 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 32961 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Final})) 32962 } 32963 return uintptr(0) 32964 }(), 32965 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Destroy}))) 32966 if rc != SQLITE_OK { 32967 tcl.XTcl_ResetResult(tls, interp) 32968 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 32969 return TCL_ERROR 32970 } 32971 return TCL_OK 32972 } 32973 32974 type EncTable = struct { 32975 FzEnc uintptr 32976 Fenc int32 32977 F__ccgo_pad1 [4]byte 32978 } 32979 32980 func test_load_extension(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32981 bp := tls.Alloc(88) 32982 defer tls.Free(88) 32983 32984 var db uintptr 32985 _ = db 32986 var rc int32 32987 var zDb uintptr 32988 var zFile uintptr 32989 _ = zFile 32990 var zProc uintptr = uintptr(0) 32991 _ = zProc 32992 var zErr uintptr = uintptr(0) 32993 32994 if objc != 4 && objc != 3 { 32995 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15828) 32996 return TCL_ERROR 32997 } 32998 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 32999 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33000 if objc == 4 { 33001 zProc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 33002 } 33003 33004 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+24) != 0) { 33005 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33006 return TCL_ERROR 33007 } 33008 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)).Fdb 33009 33010 rc = SQLITE_ERROR 33011 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+15850, 0) 33012 _ = zProc 33013 _ = zFile 33014 if rc != SQLITE_OK { 33015 tcl.XTcl_SetResult(tls, interp, func() uintptr { 33016 if zErr != 0 { 33017 return zErr 33018 } 33019 return ts + 584 33020 }(), uintptr(1)) 33021 rc = TCL_ERROR 33022 } else { 33023 rc = TCL_OK 33024 } 33025 sqlite3.Xsqlite3_free(tls, zErr) 33026 33027 return rc 33028 } 33029 33030 func test_enable_load(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33031 bp := tls.Alloc(100) 33032 defer tls.Free(100) 33033 33034 var db uintptr 33035 _ = db 33036 var zDb uintptr 33037 33038 if objc != 3 { 33039 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15892) 33040 return TCL_ERROR 33041 } 33042 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33043 33044 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+32) != 0) { 33045 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33046 return TCL_ERROR 33047 } 33048 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 32)).FobjClientData)).Fdb 33049 33050 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+96) != 0 { 33051 return TCL_ERROR 33052 } 33053 33054 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+15850)) 33055 return TCL_ERROR 33056 } 33057 33058 func sqlite_abort(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33059 libc.Xexit(tls, 255) 33060 33061 return TCL_OK 33062 } 33063 33064 func testFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33065 var zArg0 uintptr 33066 __1: 33067 if !(argc >= 2) { 33068 goto __2 33069 } 33070 zArg0 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33071 if !(zArg0 != 0) { 33072 goto __3 33073 } 33074 if !(0 == sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2577)) { 33075 goto __5 33076 } 33077 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33078 goto __6 33079 __5: 33080 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+3973) == 0) { 33081 goto __7 33082 } 33083 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33084 goto __8 33085 __7: 33086 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+15908) == 0) { 33087 goto __9 33088 } 33089 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), -1, 33090 libc.UintptrFromInt32(-1)) 33091 goto __10 33092 __9: 33093 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2562) == 0) { 33094 goto __11 33095 } 33096 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33097 goto __12 33098 __11: 33099 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+7939) == 0) { 33100 goto __13 33101 } 33102 sqlite3.Xsqlite3_result_null(tls, context) 33103 goto __14 33104 __13: 33105 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+10013) == 0) { 33106 goto __15 33107 } 33108 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv + uintptr(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))*8))) 33109 goto __16 33110 __15: 33111 goto error_out 33112 __16: 33113 ; 33114 __14: 33115 ; 33116 __12: 33117 ; 33118 __10: 33119 ; 33120 __8: 33121 ; 33122 __6: 33123 ; 33124 goto __4 33125 __3: 33126 goto error_out 33127 __4: 33128 ; 33129 argc = argc - 2 33130 argv += 8 * uintptr(2) 33131 goto __1 33132 __2: 33133 ; 33134 return 33135 33136 error_out: 33137 sqlite3.Xsqlite3_result_error(tls, context, 33138 ts+15915, -1) 33139 } 33140 33141 func test_register_func(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33142 bp := tls.Alloc(56) 33143 defer tls.Free(56) 33144 33145 var rc int32 33146 if argc != 3 { 33147 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33148 ts+15983, 0)) 33149 return TCL_ERROR 33150 } 33151 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 33152 return TCL_ERROR 33153 } 33154 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), -1, SQLITE_UTF8, uintptr(0), 33155 *(*uintptr)(unsafe.Pointer(&struct { 33156 f func(*libc.TLS, uintptr, int32, uintptr) 33157 }{testFunc})), uintptr(0), uintptr(0)) 33158 if rc != 0 { 33159 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 33160 return TCL_ERROR 33161 } 33162 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 33163 return TCL_ERROR 33164 } 33165 return TCL_OK 33166 } 33167 33168 func test_finalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33169 bp := tls.Alloc(40) 33170 defer tls.Free(40) 33171 33172 var rc int32 33173 var db uintptr = uintptr(0) 33174 33175 if objc != 2 { 33176 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33177 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33178 return TCL_ERROR 33179 } 33180 33181 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33182 return TCL_ERROR 33183 } 33184 33185 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 { 33186 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33187 } 33188 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33189 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33190 if db != 0 && sqlite3TestErrCode(tls, interp, db, rc) != 0 { 33191 return TCL_ERROR 33192 } 33193 return TCL_OK 33194 } 33195 33196 func test_stmt_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33197 bp := tls.Alloc(16) 33198 defer tls.Free(16) 33199 33200 var iValue int32 33201 var i int32 33202 *(*int32)(unsafe.Pointer(bp + 8)) = 0 33203 33204 var zOpName uintptr 33205 33206 if objc != 4 { 33207 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16009) 33208 return TCL_ERROR 33209 } 33210 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33211 return TCL_ERROR 33212 } 33213 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33214 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 33215 FzName uintptr 33216 Fop int32 33217 F__ccgo_pad1 [4]byte 33218 }{}))); i++ { 33219 if libc.Xstrcmp(tls, aOp[i].FzName, zOpName) == 0 { 33220 *(*int32)(unsafe.Pointer(bp + 8)) = aOp[i].Fop 33221 break 33222 } 33223 } 33224 if i >= int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 33225 FzName uintptr 33226 Fop int32 33227 F__ccgo_pad1 [4]byte 33228 }{}))) { 33229 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33230 return TCL_ERROR 33231 } 33232 } 33233 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 33234 return TCL_ERROR 33235 } 33236 iValue = sqlite3.Xsqlite3_stmt_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 33237 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iValue)) 33238 return TCL_OK 33239 } 33240 33241 var aOp = [7]struct { 33242 FzName uintptr 33243 Fop int32 33244 F__ccgo_pad1 [4]byte 33245 }{ 33246 {FzName: ts + 16034, Fop: SQLITE_STMTSTATUS_FULLSCAN_STEP}, 33247 {FzName: ts + 16066, Fop: SQLITE_STMTSTATUS_SORT}, 33248 {FzName: ts + 16089, Fop: SQLITE_STMTSTATUS_AUTOINDEX}, 33249 {FzName: ts + 16117, Fop: SQLITE_STMTSTATUS_VM_STEP}, 33250 {FzName: ts + 16143, Fop: SQLITE_STMTSTATUS_REPREPARE}, 33251 {FzName: ts + 16171, Fop: SQLITE_STMTSTATUS_RUN}, 33252 {FzName: ts + 16193, Fop: SQLITE_STMTSTATUS_MEMUSED}, 33253 } 33254 33255 func test_config_sorterref(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33256 bp := tls.Alloc(12) 33257 defer tls.Free(12) 33258 33259 if objc != 2 { 33260 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 33261 return TCL_ERROR 33262 } 33263 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 33264 return TCL_ERROR 33265 } 33266 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_SORTERREF_SIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 33267 return TCL_OK 33268 } 33269 33270 func vfsCurrentTimeInt64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33271 bp := tls.Alloc(8) 33272 defer tls.Free(8) 33273 33274 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 33275 if objc != 1 { 33276 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 33277 return TCL_ERROR 33278 } 33279 (*struct { 33280 f func(*libc.TLS, uintptr, uintptr) int32 33281 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTimeInt64})).f(tls, pVfs, bp) 33282 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*i64)(unsafe.Pointer(bp)))) 33283 return TCL_OK 33284 } 33285 33286 func test_snapshot_get(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33287 bp := tls.Alloc(116) 33288 defer tls.Free(116) 33289 33290 var rc int32 33291 33292 var zName uintptr 33293 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 33294 33295 if objc != 3 { 33296 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33297 return TCL_ERROR 33298 } 33299 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33300 return TCL_ERROR 33301 } 33302 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33303 33304 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 33305 if rc != SQLITE_OK { 33306 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33307 return TCL_ERROR 33308 } else { 33309 if sqlite3TestMakePointerStr(tls, interp, bp+16, *(*uintptr)(unsafe.Pointer(bp + 8))) != 0 { 33310 return TCL_ERROR 33311 } 33312 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 33313 } 33314 return TCL_OK 33315 } 33316 33317 func test_snapshot_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33318 bp := tls.Alloc(8) 33319 defer tls.Free(8) 33320 33321 var rc int32 33322 33323 var zName uintptr 33324 33325 if objc != 3 { 33326 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33327 return TCL_ERROR 33328 } 33329 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33330 return TCL_ERROR 33331 } 33332 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33333 33334 rc = sqlite3.Xsqlite3_snapshot_recover(tls, *(*uintptr)(unsafe.Pointer(bp)), zName) 33335 if rc != SQLITE_OK { 33336 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33337 return TCL_ERROR 33338 } else { 33339 tcl.XTcl_ResetResult(tls, interp) 33340 } 33341 return TCL_OK 33342 } 33343 33344 func test_snapshot_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33345 bp := tls.Alloc(8) 33346 defer tls.Free(8) 33347 33348 var rc int32 33349 33350 var zName uintptr 33351 var pSnapshot uintptr 33352 33353 if objc != 4 { 33354 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 33355 return TCL_ERROR 33356 } 33357 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33358 return TCL_ERROR 33359 } 33360 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33361 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)))) 33362 33363 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, pSnapshot) 33364 if rc != SQLITE_OK { 33365 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33366 return TCL_ERROR 33367 } else { 33368 tcl.XTcl_ResetResult(tls, interp) 33369 } 33370 return TCL_OK 33371 } 33372 33373 func test_snapshot_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33374 var pSnapshot uintptr 33375 if objc != 2 { 33376 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16254) 33377 return TCL_ERROR 33378 } 33379 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 33380 sqlite3.Xsqlite3_snapshot_free(tls, pSnapshot) 33381 return TCL_OK 33382 } 33383 33384 func test_snapshot_cmp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33385 var res int32 33386 var p1 uintptr 33387 var p2 uintptr 33388 if objc != 3 { 33389 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 33390 return TCL_ERROR 33391 } 33392 p1 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 33393 p2 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 33394 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 33395 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 33396 return TCL_OK 33397 } 33398 33399 func test_snapshot_get_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33400 bp := tls.Alloc(16) 33401 defer tls.Free(16) 33402 33403 var rc int32 33404 33405 var zName uintptr 33406 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 33407 33408 if objc != 3 { 33409 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33410 return TCL_ERROR 33411 } 33412 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33413 return TCL_ERROR 33414 } 33415 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33416 33417 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 33418 if rc != SQLITE_OK { 33419 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33420 return TCL_ERROR 33421 } else { 33422 tcl.XTcl_SetObjResult(tls, interp, 33423 tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), int32(unsafe.Sizeof(sqlite3_snapshot{})))) 33424 sqlite3.Xsqlite3_snapshot_free(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 33425 } 33426 return TCL_OK 33427 } 33428 33429 func test_snapshot_open_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33430 bp := tls.Alloc(28) 33431 defer tls.Free(28) 33432 33433 var rc int32 33434 33435 var zName uintptr 33436 var pBlob uintptr 33437 33438 if objc != 4 { 33439 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 33440 return TCL_ERROR 33441 } 33442 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33443 return TCL_ERROR 33444 } 33445 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33446 pBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) 33447 if uint64(*(*int32)(unsafe.Pointer(bp + 24))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) { 33448 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 33449 return TCL_ERROR 33450 } 33451 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zName, pBlob) 33452 if rc != SQLITE_OK { 33453 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33454 return TCL_ERROR 33455 } 33456 return TCL_OK 33457 } 33458 33459 func test_snapshot_cmp_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33460 bp := tls.Alloc(24) 33461 defer tls.Free(24) 33462 33463 var res int32 33464 var p1 uintptr 33465 var p2 uintptr 33466 33467 if objc != 3 { 33468 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 33469 return TCL_ERROR 33470 } 33471 33472 p1 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 33473 p2 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) 33474 33475 if uint64(*(*int32)(unsafe.Pointer(bp + 16))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) || *(*int32)(unsafe.Pointer(bp + 16)) != *(*int32)(unsafe.Pointer(bp + 20)) { 33476 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 33477 return TCL_ERROR 33478 } 33479 33480 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 33481 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 33482 return TCL_OK 33483 } 33484 33485 func test_delete_database(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33486 var rc int32 33487 var zFile uintptr 33488 if objc != 2 { 33489 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16296) 33490 return TCL_ERROR 33491 } 33492 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33493 rc = sqlite3_delete_database(tls, zFile) 33494 33495 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33496 return TCL_OK 33497 } 33498 33499 func test_atomic_batch_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33500 bp := tls.Alloc(32) 33501 defer tls.Free(32) 33502 33503 var zFile uintptr = uintptr(0) 33504 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 33505 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 33506 var bRes int32 = 0 33507 var dc int32 = 0 33508 var rc int32 33509 33510 if objc != 2 { 33511 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16301) 33512 return TCL_ERROR 33513 } 33514 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33515 33516 rc = sqlite3.Xsqlite3_open(tls, zFile, bp+16) 33517 if rc != SQLITE_OK { 33518 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 33519 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 33520 return TCL_ERROR 33521 } 33522 33523 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 33524 dc = (*struct { 33525 f func(*libc.TLS, uintptr) int32 33526 })(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))) 33527 if dc&SQLITE_IOCAP_BATCH_ATOMIC != 0 { 33528 bRes = 1 33529 } 33530 33531 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bRes)) 33532 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 33533 return TCL_OK 33534 } 33535 33536 func test_next_stmt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33537 bp := tls.Alloc(114) 33538 defer tls.Free(114) 33539 33540 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 33541 33542 if objc != 3 { 33543 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33544 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16306, 0)) 33545 return TCL_ERROR 33546 } 33547 33548 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 33549 return TCL_ERROR 33550 } 33551 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+56) != 0 { 33552 return TCL_ERROR 33553 } 33554 *(*uintptr)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_next_stmt(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56))) 33555 if *(*uintptr)(unsafe.Pointer(bp + 56)) != 0 { 33556 if sqlite3TestMakePointerStr(tls, interp, bp+64, *(*uintptr)(unsafe.Pointer(bp + 56))) != 0 { 33557 return TCL_ERROR 33558 } 33559 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+64, 0)) 33560 } 33561 return TCL_OK 33562 } 33563 33564 func test_stmt_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33565 bp := tls.Alloc(40) 33566 defer tls.Free(40) 33567 33568 var rc int32 33569 33570 if objc != 2 { 33571 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33572 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 33573 return TCL_ERROR 33574 } 33575 33576 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33577 return TCL_ERROR 33578 } 33579 rc = sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33580 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 33581 return TCL_OK 33582 } 33583 33584 func test_stmt_isexplain(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33585 bp := tls.Alloc(40) 33586 defer tls.Free(40) 33587 33588 var rc int32 33589 33590 if objc != 2 { 33591 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33592 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 33593 return TCL_ERROR 33594 } 33595 33596 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33597 return TCL_ERROR 33598 } 33599 rc = sqlite3.Xsqlite3_stmt_isexplain(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33600 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 33601 return TCL_OK 33602 } 33603 33604 func test_stmt_busy(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33605 bp := tls.Alloc(40) 33606 defer tls.Free(40) 33607 33608 var rc int32 33609 33610 if objc != 2 { 33611 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33612 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 33613 return TCL_ERROR 33614 } 33615 33616 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33617 return TCL_ERROR 33618 } 33619 rc = sqlite3.Xsqlite3_stmt_busy(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33620 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 33621 return TCL_OK 33622 } 33623 33624 func uses_stmt_journal(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33625 bp := tls.Alloc(40) 33626 defer tls.Free(40) 33627 33628 if objc != 2 { 33629 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33630 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 33631 return TCL_ERROR 33632 } 33633 33634 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33635 return TCL_ERROR 33636 } 33637 sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33638 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)) + 200))&0x20>>5) != 0))) 33639 return TCL_OK 33640 } 33641 33642 func test_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33643 bp := tls.Alloc(40) 33644 defer tls.Free(40) 33645 33646 var rc int32 33647 33648 if objc != 2 { 33649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33650 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33651 return TCL_ERROR 33652 } 33653 33654 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33655 return TCL_ERROR 33656 } 33657 33658 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33659 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 && sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 33660 return TCL_ERROR 33661 } 33662 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33663 33664 return TCL_OK 33665 } 33666 33667 func test_expired(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33668 bp := tls.Alloc(40) 33669 defer tls.Free(40) 33670 33671 if objc != 2 { 33672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33673 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33674 return TCL_ERROR 33675 } 33676 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33677 return TCL_ERROR 33678 } 33679 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(sqlite3.Xsqlite3_expired(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) != 0))) 33680 return TCL_OK 33681 } 33682 33683 func test_transfer_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33684 bp := tls.Alloc(48) 33685 defer tls.Free(48) 33686 33687 if objc != 3 { 33688 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33689 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16321, 0)) 33690 return TCL_ERROR 33691 } 33692 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33693 return TCL_ERROR 33694 } 33695 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+40) != 0 { 33696 return TCL_ERROR 33697 } 33698 tcl.XTcl_SetObjResult(tls, interp, 33699 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_transfer_bindings(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))))) 33700 return TCL_OK 33701 } 33702 33703 func test_changes(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33704 bp := tls.Alloc(40) 33705 defer tls.Free(40) 33706 33707 if objc != 2 { 33708 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33709 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 33710 return TCL_ERROR 33711 } 33712 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33713 return TCL_ERROR 33714 } 33715 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_changes(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 33716 return TCL_OK 33717 } 33718 33719 var sqlite_static_bind_value uintptr = uintptr(0) 33720 var sqlite_static_bind_nbyte int32 = 0 33721 33722 func test_bind(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33723 bp := tls.Alloc(142) 33724 defer tls.Free(142) 33725 33726 var rc int32 33727 33728 if argc != 5 { 33729 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33730 ts+16340, 0)) 33731 return TCL_ERROR 33732 } 33733 if getStmtPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 33734 return TCL_ERROR 33735 } 33736 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+88) != 0 { 33737 return TCL_ERROR 33738 } 33739 if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+7939) == 0 { 33740 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88))) 33741 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16376) == 0 { 33742 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, -1, uintptr(0)) 33743 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16383) == 0 { 33744 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, 33745 sqlite_static_bind_nbyte, uintptr(0)) 33746 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16397) == 0 { 33747 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)) 33748 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16404) == 0 { 33749 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), ts+16411, 10, uintptr(0)) 33750 } else { 33751 tcl.XTcl_AppendResult(tls, interp, 33752 libc.VaList(bp+32, ts+16422, 0)) 33753 return TCL_ERROR 33754 } 33755 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), rc) != 0 { 33756 return TCL_ERROR 33757 } 33758 if rc != 0 { 33759 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+92, ts+16476, libc.VaList(bp+48, rc)) 33760 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 33761 return TCL_ERROR 33762 } 33763 return TCL_OK 33764 } 33765 33766 var pTestCollateInterp uintptr 33767 33768 func test_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 33769 bp := tls.Alloc(4) 33770 defer tls.Free(4) 33771 33772 var i uintptr = pTestCollateInterp 33773 var encin int32 = int32(pCtx) 33774 33775 var n int32 33776 var pVal uintptr 33777 var pX uintptr 33778 33779 pX = tcl.XTcl_NewStringObj(tls, ts+16482, -1) 33780 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 33781 33782 switch encin { 33783 case SQLITE_UTF8: 33784 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 33785 break 33786 case SQLITE_UTF16LE: 33787 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 33788 break 33789 case SQLITE_UTF16BE: 33790 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 33791 break 33792 default: 33793 } 33794 33795 sqlite3.Xsqlite3BeginBenignMalloc(tls) 33796 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 33797 if pVal != 0 { 33798 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nA, zA, uint8(encin), uintptr(0)) 33799 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 33800 tcl.XTcl_ListObjAppendElement(tls, i, pX, 33801 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 33802 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nB, zB, uint8(encin), uintptr(0)) 33803 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 33804 tcl.XTcl_ListObjAppendElement(tls, i, pX, 33805 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 33806 sqlite3.Xsqlite3ValueFree(tls, pVal) 33807 } 33808 sqlite3.Xsqlite3EndBenignMalloc(tls) 33809 33810 tcl.XTcl_EvalObjEx(tls, i, pX, 0) 33811 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33812 var _objPtr uintptr = pX 33813 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33814 tcl.XTclFreeObj(tls, _objPtr) 33815 } 33816 } 33817 tcl.XTcl_GetIntFromObj(tls, i, tcl.XTcl_GetObjResult(tls, i), bp) 33818 return *(*int32)(unsafe.Pointer(bp)) 33819 } 33820 33821 func test_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33822 bp := tls.Alloc(60) 33823 defer tls.Free(60) 33824 33825 var pVal uintptr 33826 var rc int32 33827 var zUtf16 uintptr 33828 33829 if !(objc != 5) { 33830 goto __1 33831 } 33832 goto bad_args 33833 __1: 33834 ; 33835 pTestCollateInterp = interp 33836 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 33837 goto __2 33838 } 33839 return TCL_ERROR 33840 __2: 33841 ; 33842 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56)) { 33843 goto __3 33844 } 33845 return TCL_ERROR 33846 __3: 33847 ; 33848 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF8, 33849 uintptr(SQLITE_UTF8), func() uintptr { 33850 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 33851 return *(*uintptr)(unsafe.Pointer(&struct { 33852 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33853 }{test_collate_func})) 33854 } 33855 return uintptr(0) 33856 }()) 33857 if !(rc == SQLITE_OK) { 33858 goto __4 33859 } 33860 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+56)) { 33861 goto __5 33862 } 33863 return TCL_ERROR 33864 __5: 33865 ; 33866 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF16LE, 33867 uintptr(SQLITE_UTF16LE), func() uintptr { 33868 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 33869 return *(*uintptr)(unsafe.Pointer(&struct { 33870 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33871 }{test_collate_func})) 33872 } 33873 return uintptr(0) 33874 }()) 33875 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+56)) { 33876 goto __6 33877 } 33878 return TCL_ERROR 33879 __6: 33880 ; 33881 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 33882 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 33883 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+16482, uint8(SQLITE_UTF8), uintptr(0)) 33884 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 33885 if !((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FmallocFailed != 0) { 33886 goto __7 33887 } 33888 rc = SQLITE_NOMEM 33889 goto __8 33890 __7: 33891 rc = sqlite3.Xsqlite3_create_collation16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zUtf16, SQLITE_UTF16BE, 33892 uintptr(SQLITE_UTF16BE), func() uintptr { 33893 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 33894 return *(*uintptr)(unsafe.Pointer(&struct { 33895 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33896 }{test_collate_func})) 33897 } 33898 return uintptr(0) 33899 }()) 33900 __8: 33901 ; 33902 sqlite3.Xsqlite3ValueFree(tls, pVal) 33903 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 33904 __4: 33905 ; 33906 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0) { 33907 goto __9 33908 } 33909 return TCL_ERROR 33910 __9: 33911 ; 33912 if !(rc != SQLITE_OK) { 33913 goto __10 33914 } 33915 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 33916 return TCL_ERROR 33917 __10: 33918 ; 33919 return TCL_OK 33920 33921 bad_args: 33922 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+14949, 33923 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 33924 return TCL_ERROR 33925 } 33926 33927 func test_utf16bin_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 33928 var nCmp int32 = func() int32 { 33929 if nA > nB { 33930 return nB 33931 } 33932 return nA 33933 }() 33934 var res int32 = libc.Xmemcmp(tls, zA, zB, uint64(nCmp)) 33935 if res == 0 { 33936 res = nA - nB 33937 } 33938 return res 33939 } 33940 33941 func test_utf16bin_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33942 bp := tls.Alloc(8) 33943 defer tls.Free(8) 33944 33945 var rc int32 33946 33947 if !(objc != 2) { 33948 goto __1 33949 } 33950 goto bad_args 33951 __1: 33952 ; 33953 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 33954 goto __2 33955 } 33956 return TCL_ERROR 33957 __2: 33958 ; 33959 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16552, SQLITE_UTF16, uintptr(0), 33960 *(*uintptr)(unsafe.Pointer(&struct { 33961 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33962 }{test_utf16bin_collate_func}))) 33963 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 33964 goto __3 33965 } 33966 return TCL_ERROR 33967 __3: 33968 ; 33969 return TCL_OK 33970 33971 bad_args: 33972 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 33973 return TCL_ERROR 33974 } 33975 33976 var zNeededCollation [200]int8 33977 var pzNeededCollation uintptr = 0 33978 33979 func test_collate_needed_cb(tls *libc.TLS, pCtx uintptr, db uintptr, eTextRep int32, pName uintptr) { 33980 var enc int32 = int32((*sqlite31)(unsafe.Pointer(db)).Fenc) 33981 var i int32 33982 var z uintptr 33983 z = pName 33984 i = 0 33985 for ; *(*int8)(unsafe.Pointer(z)) != 0 || *(*int8)(unsafe.Pointer(z + 1)) != 0; z++ { 33986 if *(*int8)(unsafe.Pointer(z)) != 0 { 33987 zNeededCollation[libc.PostIncInt32(&i, 1)] = *(*int8)(unsafe.Pointer(z)) 33988 } 33989 } 33990 zNeededCollation[i] = int8(0) 33991 sqlite3.Xsqlite3_create_collation(tls, 33992 db, ts+16482, int32((*sqlite31)(unsafe.Pointer(db)).Fenc), uintptr(intptr_t(enc)), *(*uintptr)(unsafe.Pointer(&struct { 33993 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33994 }{test_collate_func}))) 33995 } 33996 33997 func test_collate_needed(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33998 bp := tls.Alloc(8) 33999 defer tls.Free(8) 34000 34001 var rc int32 34002 34003 if !(objc != 2) { 34004 goto __1 34005 } 34006 goto bad_args 34007 __1: 34008 ; 34009 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 34010 goto __2 34011 } 34012 return TCL_ERROR 34013 __2: 34014 ; 34015 rc = sqlite3.Xsqlite3_collation_needed16(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34016 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 34017 }{test_collate_needed_cb}))) 34018 zNeededCollation[0] = int8(0) 34019 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 34020 goto __3 34021 } 34022 return TCL_ERROR 34023 __3: 34024 ; 34025 return TCL_OK 34026 34027 bad_args: 34028 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 34029 return TCL_ERROR 34030 } 34031 34032 var unaligned_string_counter int32 = 0 34033 34034 func alignmentCollFunc(tls *libc.TLS, NotUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 34035 var rc int32 34036 var n int32 34037 if nKey1 < nKey2 { 34038 n = nKey1 34039 } else { 34040 n = nKey2 34041 } 34042 if nKey1 > 0 && 1 == 1&int32(pKey1) { 34043 unaligned_string_counter++ 34044 } 34045 if nKey2 > 0 && 1 == 1&int32(pKey2) { 34046 unaligned_string_counter++ 34047 } 34048 rc = libc.Xmemcmp(tls, pKey1, pKey2, uint64(n)) 34049 if rc == 0 { 34050 rc = nKey1 - nKey2 34051 } 34052 return rc 34053 } 34054 34055 func add_alignment_test_collations(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34056 bp := tls.Alloc(8) 34057 defer tls.Free(8) 34058 34059 if objc >= 2 { 34060 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34061 return TCL_ERROR 34062 } 34063 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16561, SQLITE_UTF16, 34064 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34065 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34066 }{alignmentCollFunc}))) 34067 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16577, SQLITE_UTF16_ALIGNED, 34068 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34069 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34070 }{alignmentCollFunc}))) 34071 } 34072 return SQLITE_OK 34073 } 34074 34075 func test_function_utf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34076 var interp uintptr 34077 var pX uintptr 34078 var pVal uintptr 34079 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34080 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34081 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34082 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34083 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34084 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34085 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34086 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34087 var _objPtr uintptr = pX 34088 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34089 tcl.XTclFreeObj(tls, _objPtr) 34090 } 34091 } 34092 sqlite3.Xsqlite3_result_text(tls, pCtx, tcl.XTcl_GetStringResult(tls, interp), -1, libc.UintptrFromInt32(-1)) 34093 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34094 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34095 uint8(SQLITE_UTF8), uintptr(0)) 34096 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16be(tls, pVal), 34097 -1, libc.UintptrFromInt32(-1)) 34098 sqlite3.Xsqlite3ValueFree(tls, pVal) 34099 } 34100 34101 func test_function_utf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34102 var interp uintptr 34103 var pX uintptr 34104 var pVal uintptr 34105 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34106 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34107 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34108 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34109 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34110 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34111 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34112 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34113 var _objPtr uintptr = pX 34114 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34115 tcl.XTclFreeObj(tls, _objPtr) 34116 } 34117 } 34118 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34119 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34120 uint8(SQLITE_UTF8), uintptr(0)) 34121 sqlite3.Xsqlite3_result_text(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, pVal), -1, libc.UintptrFromInt32(-1)) 34122 sqlite3.Xsqlite3ValueFree(tls, pVal) 34123 } 34124 34125 func test_function_utf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34126 var interp uintptr 34127 var pX uintptr 34128 var pVal uintptr 34129 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34130 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34131 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34132 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34133 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34134 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34135 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34136 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34137 var _objPtr uintptr = pX 34138 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34139 tcl.XTclFreeObj(tls, _objPtr) 34140 } 34141 } 34142 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34143 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34144 uint8(SQLITE_UTF8), uintptr(0)) 34145 sqlite3.Xsqlite3_result_text16(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34146 -1, libc.UintptrFromInt32(-1)) 34147 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34148 -1, libc.UintptrFromInt32(-1)) 34149 sqlite3.Xsqlite3_result_text16le(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34150 -1, libc.UintptrFromInt32(-1)) 34151 sqlite3.Xsqlite3ValueFree(tls, pVal) 34152 } 34153 34154 func test_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34155 bp := tls.Alloc(44) 34156 defer tls.Free(44) 34157 34158 if !(objc != 5) { 34159 goto __1 34160 } 34161 goto bad_args 34162 __1: 34163 ; 34164 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0) { 34165 goto __2 34166 } 34167 return TCL_ERROR 34168 __2: 34169 ; 34170 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40)) { 34171 goto __3 34172 } 34173 return TCL_ERROR 34174 __3: 34175 ; 34176 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34177 goto __4 34178 } 34179 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF8, 34180 interp, *(*uintptr)(unsafe.Pointer(&struct { 34181 f func(*libc.TLS, uintptr, int32, uintptr) 34182 }{test_function_utf8})), uintptr(0), uintptr(0)) 34183 __4: 34184 ; 34185 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+40)) { 34186 goto __5 34187 } 34188 return TCL_ERROR 34189 __5: 34190 ; 34191 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34192 goto __6 34193 } 34194 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16LE, 34195 interp, *(*uintptr)(unsafe.Pointer(&struct { 34196 f func(*libc.TLS, uintptr, int32, uintptr) 34197 }{test_function_utf16le})), uintptr(0), uintptr(0)) 34198 __6: 34199 ; 34200 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40)) { 34201 goto __7 34202 } 34203 return TCL_ERROR 34204 __7: 34205 ; 34206 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34207 goto __8 34208 } 34209 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16BE, 34210 interp, *(*uintptr)(unsafe.Pointer(&struct { 34211 f func(*libc.TLS, uintptr, int32, uintptr) 34212 }{test_function_utf16be})), uintptr(0), uintptr(0)) 34213 __8: 34214 ; 34215 return TCL_OK 34216 bad_args: 34217 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34218 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 34219 return TCL_ERROR 34220 } 34221 34222 func test_errstr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34223 var zCode uintptr 34224 var i int32 34225 if objc != 1 { 34226 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16605) 34227 } 34228 34229 zCode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34230 for i = 0; i < 200; i++ { 34231 if 0 == libc.Xstrcmp(tls, sqlite3.Xsqlite3ErrName(tls, i), zCode) { 34232 break 34233 } 34234 } 34235 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, i), uintptr(0)) 34236 return TCL_OK 34237 } 34238 34239 func test_breakpoint(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34240 return TCL_OK 34241 } 34242 34243 func test_bind_zeroblob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34244 bp := tls.Alloc(16) 34245 defer tls.Free(16) 34246 34247 var rc int32 34248 34249 if objc != 4 { 34250 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 34251 return TCL_ERROR 34252 } 34253 34254 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34255 return TCL_ERROR 34256 } 34257 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 34258 return TCL_ERROR 34259 } 34260 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 34261 return TCL_ERROR 34262 } 34263 34264 rc = sqlite3.Xsqlite3_bind_zeroblob(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 34265 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp))), rc) != 0 { 34266 return TCL_ERROR 34267 } 34268 if rc != SQLITE_OK { 34269 return TCL_ERROR 34270 } 34271 34272 return TCL_OK 34273 } 34274 34275 func test_bind_zeroblob64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34276 bp := tls.Alloc(40) 34277 defer tls.Free(40) 34278 34279 var rc int32 34280 34281 if objc != 4 { 34282 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 34283 return TCL_ERROR 34284 } 34285 34286 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 34287 return TCL_ERROR 34288 } 34289 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 34290 return TCL_ERROR 34291 } 34292 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+32) != 0 { 34293 return TCL_ERROR 34294 } 34295 34296 rc = sqlite3.Xsqlite3_bind_zeroblob64(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 24)), uint64(*(*Tcl_WideInt)(unsafe.Pointer(bp + 32)))) 34297 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), rc) != 0 { 34298 return TCL_ERROR 34299 } 34300 if rc != SQLITE_OK { 34301 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34302 return TCL_ERROR 34303 } 34304 34305 return TCL_OK 34306 } 34307 34308 func test_bind_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34309 bp := tls.Alloc(48) 34310 defer tls.Free(48) 34311 34312 var rc int32 34313 34314 if objc != 4 { 34315 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34316 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34317 return TCL_ERROR 34318 } 34319 34320 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34321 return TCL_ERROR 34322 } 34323 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34324 return TCL_ERROR 34325 } 34326 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 34327 return TCL_ERROR 34328 } 34329 34330 rc = sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*int32)(unsafe.Pointer(bp + 44))) 34331 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34332 return TCL_ERROR 34333 } 34334 if rc != SQLITE_OK { 34335 return TCL_ERROR 34336 } 34337 34338 return TCL_OK 34339 } 34340 34341 func test_intarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34342 var i int32 34343 34344 sqlite3.Xsqlite3_free(tls, p) 34345 p = uintptr(0) 34346 if objc > 1 { 34347 p = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(objc-1))) 34348 if p == uintptr(0) { 34349 return TCL_ERROR 34350 } 34351 for i = 0; i < objc-1; i++ { 34352 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p+uintptr(i)*4) != 0 { 34353 sqlite3.Xsqlite3_free(tls, p) 34354 p = uintptr(0) 34355 return TCL_ERROR 34356 } 34357 } 34358 } 34359 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p))) 34360 return TCL_OK 34361 } 34362 34363 var p uintptr = uintptr(0) 34364 34365 func test_int64array_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34366 bp := tls.Alloc(8) 34367 defer tls.Free(8) 34368 34369 var i int32 34370 34371 sqlite3.Xsqlite3_free(tls, p1) 34372 p1 = uintptr(0) 34373 if objc > 1 { 34374 p1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(objc-1))) 34375 if p1 == uintptr(0) { 34376 return TCL_ERROR 34377 } 34378 for i = 0; i < objc-1; i++ { 34379 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), bp) != 0 { 34380 sqlite3.Xsqlite3_free(tls, p1) 34381 p1 = uintptr(0) 34382 return TCL_ERROR 34383 } 34384 *(*sqlite3_int64)(unsafe.Pointer(p1 + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 34385 } 34386 } 34387 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p1))) 34388 return TCL_OK 34389 } 34390 34391 var p1 uintptr = uintptr(0) 34392 34393 func test_doublearray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34394 var i int32 34395 34396 sqlite3.Xsqlite3_free(tls, p2) 34397 p2 = uintptr(0) 34398 if objc > 1 { 34399 p2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(objc-1))) 34400 if p2 == uintptr(0) { 34401 return TCL_ERROR 34402 } 34403 for i = 0; i < objc-1; i++ { 34404 if tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p2+uintptr(i)*8) != 0 { 34405 sqlite3.Xsqlite3_free(tls, p2) 34406 p2 = uintptr(0) 34407 return TCL_ERROR 34408 } 34409 } 34410 } 34411 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p2))) 34412 return TCL_OK 34413 } 34414 34415 var p2 uintptr = uintptr(0) 34416 34417 func test_textarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34418 bp := tls.Alloc(8) 34419 defer tls.Free(8) 34420 34421 var i int32 34422 34423 for i = 0; i < n; i++ { 34424 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*8))) 34425 } 34426 sqlite3.Xsqlite3_free(tls, p3) 34427 p3 = uintptr(0) 34428 if objc > 1 { 34429 p3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(objc-1))) 34430 if p3 == uintptr(0) { 34431 return TCL_ERROR 34432 } 34433 for i = 0; i < objc-1; i++ { 34434 *(*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))))) 34435 } 34436 } 34437 n = objc - 1 34438 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p3))) 34439 return TCL_OK 34440 } 34441 34442 var n int32 = 0 34443 var p3 uintptr = uintptr(0) 34444 34445 func test_bind_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34446 bp := tls.Alloc(56) 34447 defer tls.Free(56) 34448 34449 var rc int32 34450 34451 if objc != 4 { 34452 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34453 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34454 return TCL_ERROR 34455 } 34456 34457 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34458 return TCL_ERROR 34459 } 34460 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34461 return TCL_ERROR 34462 } 34463 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 34464 return TCL_ERROR 34465 } 34466 34467 rc = sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 48))) 34468 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34469 return TCL_ERROR 34470 } 34471 if rc != SQLITE_OK { 34472 return TCL_ERROR 34473 } 34474 34475 return TCL_OK 34476 } 34477 34478 func test_bind_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34479 bp := tls.Alloc(64) 34480 defer tls.Free(64) 34481 34482 *(*float64)(unsafe.Pointer(bp + 48)) = float64(0) 34483 var rc int32 34484 var zVal uintptr 34485 var i int32 34486 34487 if objc != 4 { 34488 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34489 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34490 return TCL_ERROR 34491 } 34492 34493 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34494 return TCL_ERROR 34495 } 34496 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34497 return TCL_ERROR 34498 } 34499 34500 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 34501 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 34502 FzName uintptr 34503 FiUpper uint32 34504 FiLower uint32 34505 }{})); i++ { 34506 if libc.Xstrcmp(tls, aSpecialFp[i].FzName, zVal) == 0 { 34507 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) = sqlite3_uint64(aSpecialFp[i].FiUpper) 34508 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) <<= 32 34509 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) |= sqlite3_uint64(aSpecialFp[i].FiLower) 34510 34511 libc.Xmemcpy(tls, bp+48, bp+56, uint64(8)) 34512 break 34513 } 34514 } 34515 if uint64(i) >= uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 34516 FzName uintptr 34517 FiUpper uint32 34518 FiLower uint32 34519 }{})) && tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 34520 return TCL_ERROR 34521 } 34522 rc = sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*float64)(unsafe.Pointer(bp + 48))) 34523 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34524 return TCL_ERROR 34525 } 34526 if rc != SQLITE_OK { 34527 return TCL_ERROR 34528 } 34529 34530 return TCL_OK 34531 } 34532 34533 var aSpecialFp = [10]struct { 34534 FzName uintptr 34535 FiUpper uint32 34536 FiLower uint32 34537 }{ 34538 {FzName: ts + 16643, FiUpper: uint32(0x7fffffff), FiLower: 0xffffffff}, 34539 {FzName: ts + 16647, FiUpper: uint32(0x7ff7ffff), FiLower: 0xffffffff}, 34540 {FzName: ts + 16652, FiUpper: 0xffffffff, FiLower: 0xffffffff}, 34541 {FzName: ts + 16657, FiUpper: 0xfff7ffff, FiLower: 0xffffffff}, 34542 {FzName: ts + 16663, FiUpper: uint32(0x7ff00000)}, 34543 {FzName: ts + 16668, FiUpper: 0xfff00000}, 34544 {FzName: ts + 16673, FiLower: uint32(0x00000001)}, 34545 {FzName: ts + 16681, FiUpper: 0x80000000, FiLower: uint32(0x00000001)}, 34546 {FzName: ts + 16690, FiUpper: uint32(0x7ff80000)}, 34547 {FzName: ts + 16695, FiUpper: 0xfff80000}, 34548 } 34549 34550 func test_bind_null(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34551 bp := tls.Alloc(44) 34552 defer tls.Free(44) 34553 34554 var rc int32 34555 34556 if objc != 3 { 34557 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34558 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16701, 0)) 34559 return TCL_ERROR 34560 } 34561 34562 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34563 return TCL_ERROR 34564 } 34565 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34566 return TCL_ERROR 34567 } 34568 34569 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 34570 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34571 return TCL_ERROR 34572 } 34573 if rc != SQLITE_OK { 34574 return TCL_ERROR 34575 } 34576 34577 return TCL_OK 34578 } 34579 34580 func test_bind_text(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34581 bp := tls.Alloc(84) 34582 defer tls.Free(84) 34583 34584 *(*int32)(unsafe.Pointer(bp + 76)) = 0 34585 34586 var value uintptr 34587 var rc int32 34588 var toFree uintptr = uintptr(0) 34589 34590 if objc != 5 { 34591 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34592 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 34593 return TCL_ERROR 34594 } 34595 34596 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 34597 return TCL_ERROR 34598 } 34599 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 34600 return TCL_ERROR 34601 } 34602 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 34603 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 34604 return TCL_ERROR 34605 } 34606 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 { 34607 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+1)) 34608 if toFree == uintptr(0) { 34609 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 34610 return TCL_ERROR 34611 } 34612 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 34613 *(*int8)(unsafe.Pointer(toFree + uintptr(*(*int32)(unsafe.Pointer(bp + 76))))) = int8(0) 34614 value = toFree 34615 } 34616 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)) 34617 libc.Xfree(tls, toFree) 34618 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 34619 return TCL_ERROR 34620 } 34621 if rc != SQLITE_OK { 34622 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 34623 return TCL_ERROR 34624 } 34625 34626 return TCL_OK 34627 } 34628 34629 func test_bind_text16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34630 bp := tls.Alloc(84) 34631 defer tls.Free(84) 34632 34633 var value uintptr 34634 var toFree uintptr = uintptr(0) 34635 var rc int32 34636 *(*int32)(unsafe.Pointer(bp + 76)) = 0 34637 34638 var xDel uintptr = func() uintptr { 34639 if objc == 6 { 34640 return uintptr(0) 34641 } 34642 return libc.UintptrFromInt32(-1) 34643 }() 34644 var oStmt uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-4)*8)) 34645 var oN uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)) 34646 var oString uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)) 34647 var oBytes uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 34648 34649 if objc != 5 && objc != 6 { 34650 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34651 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 34652 return TCL_ERROR 34653 } 34654 34655 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, oStmt), bp+64) != 0 { 34656 return TCL_ERROR 34657 } 34658 if tcl.XTcl_GetIntFromObj(tls, interp, oN, bp+72) != 0 { 34659 return TCL_ERROR 34660 } 34661 value = tcl.XTcl_GetByteArrayFromObj(tls, oString, bp+76) 34662 if tcl.XTcl_GetIntFromObj(tls, interp, oBytes, bp+80) != 0 { 34663 return TCL_ERROR 34664 } 34665 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 && xDel == libc.UintptrFromInt32(-1) { 34666 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+3)) 34667 if toFree == uintptr(0) { 34668 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 34669 return TCL_ERROR 34670 } 34671 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 34672 libc.Xmemset(tls, toFree+uintptr(*(*int32)(unsafe.Pointer(bp + 76))), 0, uint64(3)) 34673 value = toFree 34674 } 34675 rc = sqlite3.Xsqlite3_bind_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDel) 34676 libc.Xfree(tls, toFree) 34677 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 34678 return TCL_ERROR 34679 } 34680 if rc != SQLITE_OK { 34681 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34682 return TCL_ERROR 34683 } 34684 34685 return TCL_OK 34686 } 34687 34688 func test_bind_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34689 bp := tls.Alloc(284) 34690 defer tls.Free(284) 34691 34692 var value uintptr 34693 var rc int32 34694 var xDestructor sqlite3_destructor_type = libc.UintptrFromInt32(-1) 34695 34696 if objc != 5 && objc != 6 { 34697 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34698 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16729, 0)) 34699 return TCL_ERROR 34700 } 34701 34702 if objc == 6 { 34703 xDestructor = uintptr(0) 34704 objv += 8 34705 } 34706 34707 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 34708 return TCL_ERROR 34709 } 34710 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 34711 return TCL_ERROR 34712 } 34713 34714 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 34715 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 34716 return TCL_ERROR 34717 } 34718 34719 if *(*int32)(unsafe.Pointer(bp + 80)) > *(*int32)(unsafe.Pointer(bp + 76)) { 34720 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+84, 34721 ts+16748, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 76)))) 34722 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+84, uintptr(0))) 34723 return TCL_ERROR 34724 } 34725 34726 rc = sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDestructor) 34727 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 34728 return TCL_ERROR 34729 } 34730 if rc != SQLITE_OK { 34731 return TCL_ERROR 34732 } 34733 34734 return TCL_OK 34735 } 34736 34737 func test_bind_value_from_preupdate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34738 bp := tls.Alloc(48) 34739 defer tls.Free(48) 34740 34741 var z3 uintptr = uintptr(0) 34742 var db uintptr = uintptr(0) 34743 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 34744 34745 if objc != 5 { 34746 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16782) 34747 return TCL_ERROR 34748 } 34749 34750 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 34751 return TCL_ERROR 34752 } 34753 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+32) != 0 { 34754 return TCL_ERROR 34755 } 34756 z3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 34757 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+36) != 0 { 34758 return TCL_ERROR 34759 } 34760 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 34761 34762 if int32(*(*int8)(unsafe.Pointer(z3))) == 'n' { 34763 sqlite3.Xsqlite3_preupdate_new(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 34764 } else if int32(*(*int8)(unsafe.Pointer(z3))) == 'o' { 34765 sqlite3.Xsqlite3_preupdate_old(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 34766 } else { 34767 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16801, z3, uintptr(0))) 34768 return TCL_ERROR 34769 } 34770 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))) 34771 34772 return TCL_OK 34773 } 34774 34775 func test_bind_value_from_select(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34776 bp := tls.Alloc(72) 34777 defer tls.Free(72) 34778 34779 var zSql uintptr = uintptr(0) 34780 var db uintptr = uintptr(0) 34781 var rc int32 = SQLITE_OK 34782 34783 if objc != 4 { 34784 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16828) 34785 return TCL_ERROR 34786 } 34787 34788 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 34789 return TCL_ERROR 34790 } 34791 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) != 0 { 34792 return TCL_ERROR 34793 } 34794 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 34795 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 34796 34797 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 34798 if rc != SQLITE_OK { 34799 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16842, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 34800 return TCL_ERROR 34801 } 34802 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 34803 var pVal uintptr = sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 34804 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56)), pVal) 34805 } 34806 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 34807 if rc != SQLITE_OK { 34808 tcl.XTcl_AppendResult(tls, interp, 34809 libc.VaList(bp+24, ts+16857, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 34810 return TCL_ERROR 34811 } 34812 34813 return TCL_OK 34814 } 34815 34816 func test_carray_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34817 bp := tls.Alloc(112) 34818 defer tls.Free(112) 34819 34820 var eType int32 34821 var nData int32 34822 var aData uintptr 34823 var isTransient int32 34824 var isStatic int32 34825 34826 var i int32 34827 var j int32 34828 var rc int32 34829 var xDel uintptr 34830 var z uintptr 34831 34832 var a uintptr 34833 34834 var a1 uintptr 34835 34836 var a2 uintptr 34837 var v3 uintptr 34838 var a3 uintptr 34839 eType = 0 34840 nData = 0 34841 aData = uintptr(0) 34842 isTransient = 0 34843 isStatic = 0 34844 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 34845 34846 if !(aStaticData != 0) { 34847 goto __1 34848 } 34849 34850 if !(eStaticType == 3) { 34851 goto __2 34852 } 34853 i = 0 34854 __3: 34855 if !(i < nStaticData) { 34856 goto __5 34857 } 34858 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aStaticData + uintptr(i)*8))) 34859 goto __4 34860 __4: 34861 i++ 34862 goto __3 34863 goto __5 34864 __5: 34865 ; 34866 __2: 34867 ; 34868 sqlite3.Xsqlite3_free(tls, aStaticData) 34869 aStaticData = uintptr(0) 34870 nStaticData = 0 34871 eStaticType = 0 34872 __1: 34873 ; 34874 if !(objc == 1) { 34875 goto __6 34876 } 34877 return TCL_OK 34878 __6: 34879 ; 34880 i = 1 34881 __7: 34882 if !(i < objc && int32(*(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)))))) == '-') { 34883 goto __9 34884 } 34885 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 34886 if !(libc.Xstrcmp(tls, z, ts+16878) == 0) { 34887 goto __10 34888 } 34889 isTransient = 1 34890 xDel = libc.UintptrFromInt32(-1) 34891 goto __11 34892 __10: 34893 if !(libc.Xstrcmp(tls, z, ts+16889) == 0) { 34894 goto __12 34895 } 34896 isStatic = 1 34897 xDel = uintptr(0) 34898 goto __13 34899 __12: 34900 if !(libc.Xstrcmp(tls, z, ts+16897) == 0) { 34901 goto __14 34902 } 34903 eType = 0 34904 goto __15 34905 __14: 34906 if !(libc.Xstrcmp(tls, z, ts+16904) == 0) { 34907 goto __16 34908 } 34909 eType = 1 34910 goto __17 34911 __16: 34912 if !(libc.Xstrcmp(tls, z, ts+16911) == 0) { 34913 goto __18 34914 } 34915 eType = 2 34916 goto __19 34917 __18: 34918 if !(libc.Xstrcmp(tls, z, ts+16919) == 0) { 34919 goto __20 34920 } 34921 eType = 3 34922 goto __21 34923 __20: 34924 if !(libc.Xstrcmp(tls, z, ts+16925) == 0) { 34925 goto __22 34926 } 34927 goto __9 34928 goto __23 34929 __22: 34930 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+12444, z, uintptr(0))) 34931 return TCL_ERROR 34932 __23: 34933 ; 34934 __21: 34935 ; 34936 __19: 34937 ; 34938 __17: 34939 ; 34940 __15: 34941 ; 34942 __13: 34943 ; 34944 __11: 34945 ; 34946 goto __8 34947 __8: 34948 i++ 34949 goto __7 34950 goto __9 34951 __9: 34952 ; 34953 if !(eType == 3 && !(isStatic != 0) && !(isTransient != 0)) { 34954 goto __24 34955 } 34956 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+16928, 34957 uintptr(0))) 34958 return TCL_ERROR 34959 __24: 34960 ; 34961 if !(isStatic != 0 && isTransient != 0) { 34962 goto __25 34963 } 34964 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+16975, 34965 uintptr(0))) 34966 return TCL_ERROR 34967 __25: 34968 ; 34969 if !(objc-i < 2) { 34970 goto __26 34971 } 34972 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17013) 34973 return TCL_ERROR 34974 __26: 34975 ; 34976 if !(getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))), bp+80) != 0) { 34977 goto __27 34978 } 34979 return TCL_ERROR 34980 __27: 34981 ; 34982 i++ 34983 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0) { 34984 goto __28 34985 } 34986 return TCL_ERROR 34987 __28: 34988 ; 34989 i++ 34990 nData = objc - i 34991 switch eType + 4*libc.Bool32(nData <= 0) { 34992 case 0: 34993 goto __30 34994 case 1: 34995 goto __31 34996 case 2: 34997 goto __32 34998 case 3: 34999 goto __33 35000 case 4: 35001 goto __34 35002 } 35003 goto __29 35004 __30: 35005 a = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nData))) 35006 if !(a == uintptr(0)) { 35007 goto __35 35008 } 35009 rc = SQLITE_NOMEM 35010 goto carray_bind_done 35011 __35: 35012 ; 35013 j = 0 35014 __36: 35015 if !(j < nData) { 35016 goto __38 35017 } 35018 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+92) != 0) { 35019 goto __39 35020 } 35021 sqlite3.Xsqlite3_free(tls, a) 35022 return TCL_ERROR 35023 __39: 35024 ; 35025 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = *(*int32)(unsafe.Pointer(bp + 92)) 35026 goto __37 35027 __37: 35028 j++ 35029 goto __36 35030 goto __38 35031 __38: 35032 ; 35033 aData = a 35034 goto __29 35035 35036 __31: 35037 a1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(nData))) 35038 if !(a1 == uintptr(0)) { 35039 goto __40 35040 } 35041 rc = SQLITE_NOMEM 35042 goto carray_bind_done 35043 __40: 35044 ; 35045 j = 0 35046 __41: 35047 if !(j < nData) { 35048 goto __43 35049 } 35050 if !(tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+96) != 0) { 35051 goto __44 35052 } 35053 sqlite3.Xsqlite3_free(tls, a1) 35054 return TCL_ERROR 35055 __44: 35056 ; 35057 *(*sqlite3_int64)(unsafe.Pointer(a1 + uintptr(j)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) 35058 goto __42 35059 __42: 35060 j++ 35061 goto __41 35062 goto __43 35063 __43: 35064 ; 35065 aData = a1 35066 goto __29 35067 35068 __32: 35069 a2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(nData))) 35070 if !(a2 == uintptr(0)) { 35071 goto __45 35072 } 35073 rc = SQLITE_NOMEM 35074 goto carray_bind_done 35075 __45: 35076 ; 35077 j = 0 35078 __46: 35079 if !(j < nData) { 35080 goto __48 35081 } 35082 if !(tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+104) != 0) { 35083 goto __49 35084 } 35085 sqlite3.Xsqlite3_free(tls, a2) 35086 return TCL_ERROR 35087 __49: 35088 ; 35089 *(*float64)(unsafe.Pointer(a2 + uintptr(j)*8)) = *(*float64)(unsafe.Pointer(bp + 104)) 35090 goto __47 35091 __47: 35092 j++ 35093 goto __46 35094 goto __48 35095 __48: 35096 ; 35097 aData = a2 35098 goto __29 35099 35100 __33: 35101 a3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nData))) 35102 if !(a3 == uintptr(0)) { 35103 goto __50 35104 } 35105 rc = SQLITE_NOMEM 35106 goto carray_bind_done 35107 __50: 35108 ; 35109 j = 0 35110 __51: 35111 if !(j < nData) { 35112 goto __53 35113 } 35114 v3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8))) 35115 *(*uintptr)(unsafe.Pointer(a3 + uintptr(j)*8)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+56, v3)) 35116 goto __52 35117 __52: 35118 j++ 35119 goto __51 35120 goto __53 35121 __53: 35122 ; 35123 aData = a3 35124 goto __29 35125 35126 __34: 35127 aData = ts + 584 35128 xDel = uintptr(0) 35129 isTransient = 0 35130 isStatic = 0 35131 goto __29 35132 35133 __29: 35134 ; 35135 if !(isStatic != 0) { 35136 goto __54 35137 } 35138 aStaticData = aData 35139 nStaticData = nData 35140 eStaticType = eType 35141 __54: 35142 ; 35143 rc = sqlite3_carray_bind(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), aData, nData, eType, xDel) 35144 if !(isTransient != 0) { 35145 goto __55 35146 } 35147 if !(eType == 3) { 35148 goto __56 35149 } 35150 i = 0 35151 __57: 35152 if !(i < nData) { 35153 goto __59 35154 } 35155 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8))) 35156 goto __58 35157 __58: 35158 i++ 35159 goto __57 35160 goto __59 35161 __59: 35162 ; 35163 __56: 35164 ; 35165 sqlite3.Xsqlite3_free(tls, aData) 35166 __55: 35167 ; 35168 carray_bind_done: 35169 if !(rc != 0) { 35170 goto __60 35171 } 35172 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, sqlite3.Xsqlite3_errstr(tls, rc), uintptr(0))) 35173 return TCL_ERROR 35174 __60: 35175 ; 35176 return TCL_OK 35177 } 35178 35179 var aStaticData uintptr = uintptr(0) 35180 var nStaticData int32 = 0 35181 var eStaticType int32 = 0 35182 35183 func test_bind_parameter_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35184 bp := tls.Alloc(8) 35185 defer tls.Free(8) 35186 35187 if objc != 2 { 35188 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35189 return TCL_ERROR 35190 } 35191 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35192 return TCL_ERROR 35193 } 35194 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))))) 35195 return TCL_OK 35196 } 35197 35198 func test_bind_parameter_name(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35199 bp := tls.Alloc(12) 35200 defer tls.Free(12) 35201 35202 if objc != 3 { 35203 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17047) 35204 return TCL_ERROR 35205 } 35206 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35207 return TCL_ERROR 35208 } 35209 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 35210 return TCL_ERROR 35211 } 35212 tcl.XTcl_SetObjResult(tls, interp, 35213 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))), -1)) 35214 return TCL_OK 35215 } 35216 35217 func test_bind_parameter_index(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35218 bp := tls.Alloc(8) 35219 defer tls.Free(8) 35220 35221 if objc != 3 { 35222 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17054) 35223 return TCL_ERROR 35224 } 35225 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35226 return TCL_ERROR 35227 } 35228 tcl.XTcl_SetObjResult(tls, interp, 35229 tcl.XTcl_NewIntObj(tls, 35230 sqlite3.Xsqlite3_bind_parameter_index(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))))) 35231 return TCL_OK 35232 } 35233 35234 func test_clear_bindings(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35235 bp := tls.Alloc(8) 35236 defer tls.Free(8) 35237 35238 if objc != 2 { 35239 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35240 return TCL_ERROR 35241 } 35242 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35243 return TCL_ERROR 35244 } 35245 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_clear_bindings(tls, *(*uintptr)(unsafe.Pointer(bp))))) 35246 return TCL_OK 35247 } 35248 35249 func test_sleep(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35250 bp := tls.Alloc(4) 35251 defer tls.Free(4) 35252 35253 if objc != 2 { 35254 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+13117) 35255 return TCL_ERROR 35256 } 35257 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 35258 return TCL_ERROR 35259 } 35260 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_sleep(tls, *(*int32)(unsafe.Pointer(bp))))) 35261 return TCL_OK 35262 } 35263 35264 func test_ex_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35265 bp := tls.Alloc(56) 35266 defer tls.Free(56) 35267 35268 var rc int32 35269 35270 if objc != 2 { 35271 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35272 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35273 return TCL_ERROR 35274 } 35275 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35276 return TCL_ERROR 35277 } 35278 rc = sqlite3.Xsqlite3_extended_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35279 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35280 return TCL_OK 35281 } 35282 35283 func test_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35284 bp := tls.Alloc(56) 35285 defer tls.Free(56) 35286 35287 var rc int32 35288 35289 if objc != 2 { 35290 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35291 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35292 return TCL_ERROR 35293 } 35294 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35295 return TCL_ERROR 35296 } 35297 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35298 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35299 return TCL_OK 35300 } 35301 35302 func test_errmsg(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35303 bp := tls.Alloc(40) 35304 defer tls.Free(40) 35305 35306 var zErr uintptr 35307 35308 if objc != 2 { 35309 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35310 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35311 return TCL_ERROR 35312 } 35313 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35314 return TCL_ERROR 35315 } 35316 35317 zErr = sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35318 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErr, -1)) 35319 return TCL_OK 35320 } 35321 35322 func test_error_offset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35323 bp := tls.Alloc(40) 35324 defer tls.Free(40) 35325 35326 var iByteOffset int32 35327 35328 if objc != 2 { 35329 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35330 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35331 return TCL_ERROR 35332 } 35333 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35334 return TCL_ERROR 35335 } 35336 35337 iByteOffset = sqlite3.Xsqlite3_error_offset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35338 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iByteOffset)) 35339 return TCL_OK 35340 } 35341 35342 func test_errmsg16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35343 bp := tls.Alloc(40) 35344 defer tls.Free(40) 35345 35346 var zErr uintptr 35347 var z uintptr 35348 var bytes int32 = 0 35349 35350 if objc != 2 { 35351 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35352 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35353 return TCL_ERROR 35354 } 35355 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35356 return TCL_ERROR 35357 } 35358 35359 zErr = sqlite3.Xsqlite3_errmsg16(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35360 if zErr != 0 { 35361 z = zErr 35362 for bytes = 0; *(*int8)(unsafe.Pointer(z + uintptr(bytes))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(bytes+1))) != 0; bytes = bytes + 2 { 35363 } 35364 } 35365 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zErr, bytes)) 35366 return TCL_OK 35367 } 35368 35369 func test_prepare(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35370 bp := tls.Alloc(162) 35371 defer tls.Free(162) 35372 35373 var zSql uintptr 35374 35375 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 35376 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 35377 35378 var rc int32 35379 35380 if objc != 5 && objc != 4 { 35381 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35382 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 35383 return TCL_ERROR 35384 } 35385 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35386 return TCL_ERROR 35387 } 35388 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35389 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 35390 return TCL_ERROR 35391 } 35392 35393 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, func() uintptr { 35394 if objc >= 5 { 35395 return bp + 104 35396 } 35397 return uintptr(0) 35398 }()) 35399 tcl.XTcl_ResetResult(tls, interp) 35400 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35401 return TCL_ERROR 35402 } 35403 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 35404 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35405 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 35406 } 35407 if int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) < *(*int32)(unsafe.Pointer(bp + 88)) { 35408 *(*int32)(unsafe.Pointer(bp + 88)) = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) 35409 } 35410 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) 35411 } 35412 if rc != SQLITE_OK { 35413 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 35414 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35415 return TCL_ERROR 35416 } 35417 35418 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 35419 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 35420 return TCL_ERROR 35421 } 35422 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 35423 } 35424 return TCL_OK 35425 } 35426 35427 func test_prepare_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35428 bp := tls.Alloc(162) 35429 defer tls.Free(162) 35430 35431 var zSql uintptr 35432 var zCopy uintptr = uintptr(0) 35433 35434 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 35435 var pzTail uintptr 35436 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 35437 35438 var rc int32 35439 35440 if objc != 5 && objc != 4 { 35441 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35442 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 35443 return TCL_ERROR 35444 } 35445 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35446 return TCL_ERROR 35447 } 35448 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35449 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 35450 return TCL_ERROR 35451 } 35452 35453 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35454 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35455 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35456 } else { 35457 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 35458 zCopy = libc.Xmalloc(tls, uint64(n)) 35459 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 35460 } 35461 if objc >= 5 { 35462 pzTail = bp + 96 35463 } else { 35464 pzTail = uintptr(0) 35465 } 35466 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 88)), bp+104, pzTail) 35467 if objc >= 5 { 35468 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 35469 } 35470 libc.Xfree(tls, zCopy) 35471 35472 tcl.XTcl_ResetResult(tls, interp) 35473 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35474 return TCL_ERROR 35475 } 35476 if rc == SQLITE_OK && objc >= 5 && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 35477 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35478 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 35479 } 35480 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) 35481 } 35482 if rc != SQLITE_OK { 35483 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 35484 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35485 return TCL_ERROR 35486 } 35487 35488 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 35489 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 35490 return TCL_ERROR 35491 } 35492 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 35493 } 35494 return TCL_OK 35495 } 35496 35497 func test_prepare_v3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35498 bp := tls.Alloc(162) 35499 defer tls.Free(162) 35500 35501 var zSql uintptr 35502 var zCopy uintptr = uintptr(0) 35503 35504 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 35505 var pzTail uintptr 35506 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 35507 35508 var rc int32 35509 35510 if objc != 6 && objc != 5 { 35511 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35512 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17110, 0)) 35513 return TCL_ERROR 35514 } 35515 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35516 return TCL_ERROR 35517 } 35518 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35519 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 35520 return TCL_ERROR 35521 } 35522 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+92) != 0 { 35523 return TCL_ERROR 35524 } 35525 35526 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35527 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35528 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35529 } else { 35530 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 35531 zCopy = libc.Xmalloc(tls, uint64(n)) 35532 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 35533 } 35534 if objc >= 6 { 35535 pzTail = bp + 96 35536 } else { 35537 pzTail = uintptr(0) 35538 } 35539 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) 35540 libc.Xfree(tls, zCopy) 35541 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 35542 35543 tcl.XTcl_ResetResult(tls, interp) 35544 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35545 return TCL_ERROR 35546 } 35547 if rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 && objc >= 6 { 35548 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35549 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 35550 } 35551 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) 35552 } 35553 if rc != SQLITE_OK { 35554 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 35555 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35556 return TCL_ERROR 35557 } 35558 35559 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 35560 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 35561 return TCL_ERROR 35562 } 35563 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 35564 } 35565 return TCL_OK 35566 } 35567 35568 func test_prepare_tkt3134(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35569 bp := tls.Alloc(146) 35570 defer tls.Free(146) 35571 35572 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 35573 35574 var rc int32 35575 35576 if objc != 2 { 35577 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35578 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 35579 return TCL_ERROR 35580 } 35581 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35582 return TCL_ERROR 35583 } 35584 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), uintptr(unsafe.Pointer(&zSql))+1, 0, bp+88, uintptr(0)) 35585 35586 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35587 return TCL_ERROR 35588 } 35589 if rc != SQLITE_OK { 35590 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+96, ts+16476, libc.VaList(bp+32, rc)) 35591 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35592 return TCL_ERROR 35593 } 35594 35595 if *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 35596 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 88))) != 0 { 35597 return TCL_ERROR 35598 } 35599 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 35600 } 35601 return TCL_OK 35602 } 35603 35604 var zSql = *(*[10]int8)(unsafe.Pointer(ts + 17138)) 35605 35606 func test_prepare16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35607 bp := tls.Alloc(130) 35608 defer tls.Free(130) 35609 35610 var zSql uintptr 35611 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 35612 var pTail uintptr = uintptr(0) 35613 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 35614 35615 var rc int32 35616 35617 if objc != 5 && objc != 4 { 35618 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35619 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 35620 return TCL_ERROR 35621 } 35622 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35623 return TCL_ERROR 35624 } 35625 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 35626 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 35627 return TCL_ERROR 35628 } 35629 35630 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 35631 if objc >= 5 { 35632 return bp + 72 35633 } 35634 return uintptr(0) 35635 }()) 35636 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 35637 return TCL_ERROR 35638 } 35639 if rc != 0 { 35640 return TCL_ERROR 35641 } 35642 35643 if objc >= 5 { 35644 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 35645 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 35646 } else { 35647 *(*int32)(unsafe.Pointer(bp + 56)) = 0 35648 } 35649 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 35650 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 35651 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 35652 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35653 var _objPtr uintptr = pTail 35654 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 35655 tcl.XTclFreeObj(tls, _objPtr) 35656 } 35657 } 35658 } 35659 35660 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 35661 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 35662 return TCL_ERROR 35663 } 35664 } 35665 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 35666 return TCL_OK 35667 } 35668 35669 func test_prepare16_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35670 bp := tls.Alloc(130) 35671 defer tls.Free(130) 35672 35673 var zSql uintptr 35674 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 35675 var pTail uintptr = uintptr(0) 35676 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 35677 35678 var rc int32 35679 35680 if objc != 5 && objc != 4 { 35681 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35682 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 35683 return TCL_ERROR 35684 } 35685 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35686 return TCL_ERROR 35687 } 35688 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 35689 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 35690 return TCL_ERROR 35691 } 35692 35693 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 35694 if objc >= 5 { 35695 return bp + 72 35696 } 35697 return uintptr(0) 35698 }()) 35699 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 35700 return TCL_ERROR 35701 } 35702 if rc != 0 { 35703 return TCL_ERROR 35704 } 35705 35706 if objc >= 5 { 35707 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 35708 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 35709 } else { 35710 *(*int32)(unsafe.Pointer(bp + 56)) = 0 35711 } 35712 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 35713 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 35714 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 35715 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35716 var _objPtr uintptr = pTail 35717 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 35718 tcl.XTclFreeObj(tls, _objPtr) 35719 } 35720 } 35721 } 35722 35723 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 35724 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 35725 return TCL_ERROR 35726 } 35727 } 35728 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 35729 return TCL_OK 35730 } 35731 35732 func test_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35733 bp := tls.Alloc(156) 35734 defer tls.Free(156) 35735 35736 var zFilename uintptr 35737 35738 if objc != 3 && objc != 2 && objc != 1 { 35739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35740 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 35741 return TCL_ERROR 35742 } 35743 35744 if objc > 1 { 35745 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 35746 } else { 35747 zFilename = uintptr(0) 35748 } 35749 sqlite3.Xsqlite3_open(tls, zFilename, bp+48) 35750 35751 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 35752 return TCL_ERROR 35753 } 35754 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 35755 return TCL_OK 35756 } 35757 35758 func test_open_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35759 bp := tls.Alloc(484) 35760 defer tls.Free(484) 35761 35762 var zFilename uintptr 35763 var zVfs uintptr 35764 var flags int32 = 0 35765 35766 var rc int32 35767 35768 var i int32 35769 35770 if objc != 4 { 35771 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17171) 35772 return TCL_ERROR 35773 } 35774 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 35775 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35776 if int32(*(*int8)(unsafe.Pointer(zVfs))) == 0x00 { 35777 zVfs = uintptr(0) 35778 } 35779 35780 rc = tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16, bp+24) 35781 if rc != TCL_OK { 35782 return rc 35783 } 35784 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 16)); i++ { 35785 *(*[21]OpenFlag)(unsafe.Pointer(bp + 32)) = [21]OpenFlag{ 35786 {FzFlag: ts + 17190, Fflag: SQLITE_OPEN_READONLY}, 35787 {FzFlag: ts + 17211, Fflag: SQLITE_OPEN_READWRITE}, 35788 {FzFlag: ts + 17233, Fflag: SQLITE_OPEN_CREATE}, 35789 {FzFlag: ts + 17252, Fflag: SQLITE_OPEN_DELETEONCLOSE}, 35790 {FzFlag: ts + 17278, Fflag: SQLITE_OPEN_EXCLUSIVE}, 35791 {FzFlag: ts + 17300, Fflag: SQLITE_OPEN_AUTOPROXY}, 35792 {FzFlag: ts + 17322, Fflag: SQLITE_OPEN_MAIN_DB}, 35793 {FzFlag: ts + 17342, Fflag: SQLITE_OPEN_TEMP_DB}, 35794 {FzFlag: ts + 17362, Fflag: SQLITE_OPEN_TRANSIENT_DB}, 35795 {FzFlag: ts + 17387, Fflag: SQLITE_OPEN_MAIN_JOURNAL}, 35796 {FzFlag: ts + 17412, Fflag: SQLITE_OPEN_TEMP_JOURNAL}, 35797 {FzFlag: ts + 17437, Fflag: SQLITE_OPEN_SUBJOURNAL}, 35798 {FzFlag: ts + 17460, Fflag: SQLITE_OPEN_SUPER_JOURNAL}, 35799 {FzFlag: ts + 17486, Fflag: SQLITE_OPEN_NOMUTEX}, 35800 {FzFlag: ts + 17506, Fflag: SQLITE_OPEN_FULLMUTEX}, 35801 {FzFlag: ts + 17528, Fflag: SQLITE_OPEN_SHAREDCACHE}, 35802 {FzFlag: ts + 17552, Fflag: SQLITE_OPEN_PRIVATECACHE}, 35803 {FzFlag: ts + 17577, Fflag: SQLITE_OPEN_WAL}, 35804 {FzFlag: ts + 17593, Fflag: SQLITE_OPEN_URI}, 35805 {FzFlag: ts + 17609, Fflag: SQLITE_OPEN_EXRESCODE}, 35806 {}, 35807 } 35808 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)) + uintptr(i)*8)), bp+32, int32(unsafe.Sizeof(OpenFlag{})), 35809 ts+17631, 0, bp+368) 35810 if rc != TCL_OK { 35811 return rc 35812 } 35813 flags = flags | (*OpenFlag)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 368)))*16)).Fflag 35814 } 35815 35816 rc = sqlite3.Xsqlite3_open_v2(tls, zFilename, bp+376, flags, zVfs) 35817 if sqlite3TestMakePointerStr(tls, interp, bp+384, *(*uintptr)(unsafe.Pointer(bp + 376))) != 0 { 35818 return TCL_ERROR 35819 } 35820 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+384, 0)) 35821 return TCL_OK 35822 } 35823 35824 type OpenFlag = struct { 35825 FzFlag uintptr 35826 Fflag int32 35827 F__ccgo_pad1 [4]byte 35828 } 35829 35830 func test_open16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35831 bp := tls.Alloc(156) 35832 defer tls.Free(156) 35833 35834 var zFilename uintptr 35835 35836 if objc != 3 { 35837 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35838 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 35839 return TCL_ERROR 35840 } 35841 35842 zFilename = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 35843 sqlite3.Xsqlite3_open16(tls, zFilename, bp+48) 35844 35845 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 35846 return TCL_ERROR 35847 } 35848 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 35849 return TCL_OK 35850 } 35851 35852 func test_complete16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35853 var zBuf uintptr 35854 35855 if objc != 2 { 35856 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17636) 35857 return TCL_ERROR 35858 } 35859 35860 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 35861 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_complete16(tls, zBuf))) 35862 return TCL_OK 35863 } 35864 35865 func test_normalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35866 var zSql uintptr 35867 var zNorm uintptr 35868 35869 if objc != 2 { 35870 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9535) 35871 return TCL_ERROR 35872 } 35873 35874 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 35875 zNorm = sqlite3_normalize(tls, zSql) 35876 if zNorm != 0 { 35877 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zNorm, -1)) 35878 sqlite3.Xsqlite3_free(tls, zNorm) 35879 } 35880 return TCL_OK 35881 } 35882 35883 func test_step(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35884 bp := tls.Alloc(40) 35885 defer tls.Free(40) 35886 35887 var rc int32 35888 35889 if objc != 2 { 35890 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35891 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+16315, 0)) 35892 return TCL_ERROR 35893 } 35894 35895 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35896 return TCL_ERROR 35897 } 35898 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35899 35900 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 35901 return TCL_OK 35902 } 35903 35904 func test_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35905 bp := tls.Alloc(8) 35906 defer tls.Free(8) 35907 35908 if objc != 2 { 35909 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35910 return TCL_ERROR 35911 } 35912 35913 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35914 return TCL_ERROR 35915 } 35916 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 35917 return TCL_OK 35918 } 35919 35920 func test_ex_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35921 bp := tls.Alloc(8) 35922 defer tls.Free(8) 35923 35924 var z uintptr 35925 35926 if objc != 2 { 35927 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35928 return TCL_ERROR 35929 } 35930 35931 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35932 return TCL_ERROR 35933 } 35934 z = sqlite3.Xsqlite3_expanded_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 35935 tcl.XTcl_SetResult(tls, interp, z, uintptr(1)) 35936 sqlite3.Xsqlite3_free(tls, z) 35937 return TCL_OK 35938 } 35939 35940 func test_column_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35941 bp := tls.Alloc(40) 35942 defer tls.Free(40) 35943 35944 if objc != 2 { 35945 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35946 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 35947 return TCL_ERROR 35948 } 35949 35950 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35951 return TCL_ERROR 35952 } 35953 35954 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 35955 return TCL_OK 35956 } 35957 35958 func test_column_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35959 bp := tls.Alloc(44) 35960 defer tls.Free(44) 35961 35962 var tp int32 35963 35964 if objc != 3 { 35965 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35966 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 35967 return TCL_ERROR 35968 } 35969 35970 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35971 return TCL_ERROR 35972 } 35973 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35974 return TCL_ERROR 35975 } 35976 35977 tp = sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 35978 switch tp { 35979 case SQLITE_INTEGER: 35980 tcl.XTcl_SetResult(tls, interp, ts+2413, uintptr(0)) 35981 break 35982 case SQLITE_NULL: 35983 tcl.XTcl_SetResult(tls, interp, ts+5846, uintptr(0)) 35984 break 35985 case SQLITE_FLOAT: 35986 tcl.XTcl_SetResult(tls, interp, ts+17662, uintptr(0)) 35987 break 35988 case SQLITE_TEXT: 35989 tcl.XTcl_SetResult(tls, interp, ts+17668, uintptr(0)) 35990 break 35991 case SQLITE_BLOB: 35992 tcl.XTcl_SetResult(tls, interp, ts+17673, uintptr(0)) 35993 break 35994 default: 35995 } 35996 35997 return TCL_OK 35998 } 35999 36000 func test_column_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36001 bp := tls.Alloc(44) 36002 defer tls.Free(44) 36003 36004 var iVal i64 36005 36006 if objc != 3 { 36007 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36008 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36009 return TCL_ERROR 36010 } 36011 36012 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36013 return TCL_ERROR 36014 } 36015 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36016 return TCL_ERROR 36017 } 36018 36019 iVal = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36020 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iVal)) 36021 return TCL_OK 36022 } 36023 36024 func test_column_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36025 bp := tls.Alloc(44) 36026 defer tls.Free(44) 36027 36028 var len int32 36029 var pBlob uintptr 36030 36031 if objc != 3 { 36032 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36033 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36034 return TCL_ERROR 36035 } 36036 36037 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36038 return TCL_ERROR 36039 } 36040 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36041 return TCL_ERROR 36042 } 36043 36044 len = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36045 pBlob = sqlite3.Xsqlite3_column_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36046 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pBlob, len)) 36047 return TCL_OK 36048 } 36049 36050 func test_column_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36051 bp := tls.Alloc(44) 36052 defer tls.Free(44) 36053 36054 var rVal float64 36055 36056 if objc != 3 { 36057 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36058 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36059 return TCL_ERROR 36060 } 36061 36062 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36063 return TCL_ERROR 36064 } 36065 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36066 return TCL_ERROR 36067 } 36068 36069 rVal = sqlite3.Xsqlite3_column_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36070 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewDoubleObj(tls, rVal)) 36071 return TCL_OK 36072 } 36073 36074 func test_data_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36075 bp := tls.Alloc(40) 36076 defer tls.Free(40) 36077 36078 if objc != 2 { 36079 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36080 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36081 return TCL_ERROR 36082 } 36083 36084 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36085 return TCL_ERROR 36086 } 36087 36088 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_data_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36089 return TCL_OK 36090 } 36091 36092 func test_stmt_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36093 bp := tls.Alloc(44) 36094 defer tls.Free(44) 36095 36096 var xFunc uintptr 36097 var zRet uintptr 36098 36099 xFunc = clientData 36100 if objc != 3 { 36101 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36102 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36103 return TCL_ERROR 36104 } 36105 36106 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36107 return TCL_ERROR 36108 } 36109 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36110 return TCL_ERROR 36111 } 36112 zRet = (*struct { 36113 f func(*libc.TLS, uintptr, int32) uintptr 36114 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36115 if zRet != 0 { 36116 tcl.XTcl_SetResult(tls, interp, zRet, uintptr(0)) 36117 } 36118 return TCL_OK 36119 } 36120 36121 func test_global_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36122 var rc int32 36123 if objc != 1 { 36124 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 36125 return TCL_ERROR 36126 } 36127 rc = sqlite3.Xsqlite3_global_recover(tls) 36128 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36129 return TCL_OK 36130 } 36131 36132 func test_stmt_utf16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36133 bp := tls.Alloc(44) 36134 defer tls.Free(44) 36135 36136 var pRet uintptr 36137 var zName16 uintptr 36138 var xFunc uintptr 36139 36140 xFunc = clientData 36141 if objc != 3 { 36142 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36143 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36144 return TCL_ERROR 36145 } 36146 36147 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36148 return TCL_ERROR 36149 } 36150 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36151 return TCL_ERROR 36152 } 36153 36154 zName16 = (*struct { 36155 f func(*libc.TLS, uintptr, int32) uintptr 36156 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36157 if zName16 != 0 { 36158 var n int32 36159 var z uintptr = zName16 36160 for n = 0; *(*int8)(unsafe.Pointer(z + uintptr(n))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(n+1))) != 0; n = n + 2 { 36161 } 36162 pRet = tcl.XTcl_NewByteArrayObj(tls, zName16, n+2) 36163 tcl.XTcl_SetObjResult(tls, interp, pRet) 36164 } 36165 36166 return TCL_OK 36167 } 36168 36169 func test_stmt_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36170 bp := tls.Alloc(44) 36171 defer tls.Free(44) 36172 36173 var xFunc uintptr 36174 36175 xFunc = clientData 36176 if objc != 3 { 36177 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36178 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36179 return TCL_ERROR 36180 } 36181 36182 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36183 return TCL_ERROR 36184 } 36185 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36186 return TCL_ERROR 36187 } 36188 36189 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*struct { 36190 f func(*libc.TLS, uintptr, int32) int32 36191 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))))) 36192 return TCL_OK 36193 } 36194 36195 func test_interrupt(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36196 bp := tls.Alloc(40) 36197 defer tls.Free(40) 36198 36199 if argc != 2 { 36200 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15001, 0)) 36201 return TCL_ERROR 36202 } 36203 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36204 return TCL_ERROR 36205 } 36206 sqlite3.Xsqlite3_interrupt(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36207 return TCL_OK 36208 } 36209 36210 func delete_function(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36211 bp := tls.Alloc(40) 36212 defer tls.Free(40) 36213 36214 var rc int32 36215 36216 if argc != 3 { 36217 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36218 ts+17678, 0)) 36219 return TCL_ERROR 36220 } 36221 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36222 return TCL_ERROR 36223 } 36224 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)) 36225 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36226 return TCL_OK 36227 } 36228 36229 func delete_collation(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36230 bp := tls.Alloc(40) 36231 defer tls.Free(40) 36232 36233 var rc int32 36234 36235 if argc != 3 { 36236 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36237 ts+17678, 0)) 36238 return TCL_ERROR 36239 } 36240 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36241 return TCL_ERROR 36242 } 36243 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), SQLITE_UTF8, uintptr(0), uintptr(0)) 36244 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36245 return TCL_OK 36246 } 36247 36248 func get_autocommit(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36249 bp := tls.Alloc(94) 36250 defer tls.Free(94) 36251 36252 if argc != 2 { 36253 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36254 ts+15001, 0)) 36255 return TCL_ERROR 36256 } 36257 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 36258 return TCL_ERROR 36259 } 36260 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))))) 36261 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 36262 return TCL_OK 36263 } 36264 36265 func test_busy_timeout(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36266 bp := tls.Alloc(60) 36267 defer tls.Free(60) 36268 36269 var rc int32 36270 36271 if argc != 3 { 36272 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36273 ts+15001, 0)) 36274 return TCL_ERROR 36275 } 36276 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 36277 return TCL_ERROR 36278 } 36279 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 36280 return TCL_ERROR 36281 } 36282 rc = sqlite3.Xsqlite3_busy_timeout(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56))) 36283 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36284 return TCL_OK 36285 } 36286 36287 func tcl_variable_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36288 var pVar uintptr 36289 if objc != 2 { 36290 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17696) 36291 return TCL_ERROR 36292 } 36293 pVar = tcl.XTcl_GetVar2Ex(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0), TCL_LEAVE_ERR_MSG) 36294 if pVar == uintptr(0) { 36295 return TCL_ERROR 36296 } 36297 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 36298 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname, -1)) 36299 } 36300 return TCL_OK 36301 } 36302 36303 func test_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36304 bp := tls.Alloc(4) 36305 defer tls.Free(4) 36306 36307 var amt int32 36308 if objc != 1 && objc != 2 { 36309 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36310 return TCL_ERROR 36311 } 36312 if objc == 2 { 36313 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36314 return TCL_ERROR 36315 } 36316 } else { 36317 *(*int32)(unsafe.Pointer(bp)) = -1 36318 } 36319 amt = sqlite3.Xsqlite3_release_memory(tls, *(*int32)(unsafe.Pointer(bp))) 36320 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, amt)) 36321 return TCL_OK 36322 } 36323 36324 func test_db_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36325 bp := tls.Alloc(8) 36326 defer tls.Free(8) 36327 36328 var rc int32 36329 if objc != 2 { 36330 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36331 return TCL_ERROR 36332 } 36333 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36334 return TCL_ERROR 36335 } 36336 rc = sqlite3.Xsqlite3_db_release_memory(tls, *(*uintptr)(unsafe.Pointer(bp))) 36337 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36338 return TCL_OK 36339 } 36340 36341 func test_db_cacheflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36342 bp := tls.Alloc(8) 36343 defer tls.Free(8) 36344 36345 var rc int32 36346 if objc != 2 { 36347 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36348 return TCL_ERROR 36349 } 36350 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36351 return TCL_ERROR 36352 } 36353 rc = sqlite3.Xsqlite3_db_cacheflush(tls, *(*uintptr)(unsafe.Pointer(bp))) 36354 if rc != 0 { 36355 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 36356 return TCL_ERROR 36357 } 36358 36359 tcl.XTcl_ResetResult(tls, interp) 36360 return TCL_OK 36361 } 36362 36363 func test_system_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36364 bp := tls.Alloc(8) 36365 defer tls.Free(8) 36366 36367 var iErrno int32 36368 if objc != 2 { 36369 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36370 return TCL_ERROR 36371 } 36372 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36373 return TCL_ERROR 36374 } 36375 iErrno = sqlite3.Xsqlite3_system_errno(tls, *(*uintptr)(unsafe.Pointer(bp))) 36376 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iErrno)) 36377 return TCL_OK 36378 } 36379 36380 func test_db_filename(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36381 bp := tls.Alloc(24) 36382 defer tls.Free(24) 36383 36384 var zDbName uintptr 36385 if objc != 3 { 36386 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36387 return TCL_ERROR 36388 } 36389 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 36390 return TCL_ERROR 36391 } 36392 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36393 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_db_filename(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbName), uintptr(0))) 36394 return TCL_OK 36395 } 36396 36397 func test_db_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36398 bp := tls.Alloc(8) 36399 defer tls.Free(8) 36400 36401 var zDbName uintptr 36402 if objc != 3 { 36403 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36404 return TCL_ERROR 36405 } 36406 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36407 return TCL_ERROR 36408 } 36409 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36410 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_db_readonly(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName))) 36411 return TCL_OK 36412 } 36413 36414 func test_soft_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36415 bp := tls.Alloc(8) 36416 defer tls.Free(8) 36417 36418 var amt sqlite3_int64 36419 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 36420 if objc != 1 && objc != 2 { 36421 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36422 return TCL_ERROR 36423 } 36424 if objc == 2 { 36425 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36426 return TCL_ERROR 36427 } 36428 } 36429 amt = sqlite3.Xsqlite3_soft_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 36430 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 36431 return TCL_OK 36432 } 36433 36434 func test_hard_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36435 bp := tls.Alloc(8) 36436 defer tls.Free(8) 36437 36438 var amt sqlite3_int64 36439 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 36440 if objc != 1 && objc != 2 { 36441 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36442 return TCL_ERROR 36443 } 36444 if objc == 2 { 36445 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36446 return TCL_ERROR 36447 } 36448 } 36449 amt = sqlite3.Xsqlite3_hard_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 36450 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 36451 return TCL_OK 36452 } 36453 36454 func test_thread_cleanup(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36455 sqlite3.Xsqlite3_thread_cleanup(tls) 36456 return TCL_OK 36457 } 36458 36459 func test_pager_refcounts(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36460 bp := tls.Alloc(40) 36461 defer tls.Free(40) 36462 36463 var i int32 36464 var v int32 36465 var a uintptr 36466 var pResult uintptr 36467 36468 if objc != 2 { 36469 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36470 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 36471 return TCL_ERROR 36472 } 36473 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36474 return TCL_ERROR 36475 } 36476 pResult = tcl.XTcl_NewObj(tls) 36477 for i = 0; i < (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FnDb; i++ { 36478 if (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt == uintptr(0) { 36479 v = -1 36480 } else { 36481 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 36482 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt)) 36483 v = *(*int32)(unsafe.Pointer(a)) 36484 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 36485 } 36486 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, v)) 36487 } 36488 tcl.XTcl_SetObjResult(tls, interp, pResult) 36489 return TCL_OK 36490 } 36491 36492 func working_64bit_int(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36493 var pTestObj uintptr 36494 var working int32 = 0 36495 36496 pTestObj = tcl.XTcl_NewWideIntObj(tls, int64(1000000)*int64(1234567890)) 36497 working = libc.Bool32(libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, pTestObj), ts+17709) == 0) 36498 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36499 var _objPtr uintptr = pTestObj 36500 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36501 tcl.XTclFreeObj(tls, _objPtr) 36502 } 36503 } 36504 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(working != 0))) 36505 return TCL_OK 36506 } 36507 36508 func vfs_unlink_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36509 bp := tls.Alloc(496) 36510 defer tls.Free(496) 36511 36512 var i int32 36513 var pMain uintptr 36514 36515 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(0)) 36516 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 36517 (*sqlite3_vfs)(unsafe.Pointer(bp + 168)).FzName = ts + 17732 36518 36519 pMain = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 36520 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 36521 36522 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 0) 36523 36524 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 36525 36526 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 1) 36527 36528 if pMain != 0 { 36529 sqlite3.Xsqlite3_vfs_register(tls, pMain, 1) 36530 36531 } 36532 36533 for i = 0; uint64(i) < uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 36534 *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 36535 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 36536 sqlite3.Xsqlite3_vfs_unregister(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8))) 36537 36538 } 36539 } 36540 36541 sqlite3.Xsqlite3_vfs_register(tls, pMain, 0) 36542 36543 sqlite3.Xsqlite3_vfs_unregister(tls, pMain) 36544 36545 for i = int32(uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)); i >= 0; i-- { 36546 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 36547 sqlite3.Xsqlite3_vfs_register(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)), 1) 36548 36549 } 36550 } 36551 36552 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 36553 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 36554 36555 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 36556 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 36557 36558 return TCL_OK 36559 } 36560 36561 func vfs_initfail_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36562 bp := tls.Alloc(168) 36563 defer tls.Free(168) 36564 36565 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 36566 36567 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 36568 return TCL_ERROR 36569 } 36570 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 36571 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 36572 return TCL_ERROR 36573 } 36574 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 36575 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 36576 return TCL_ERROR 36577 } 36578 return TCL_OK 36579 } 36580 36581 var apVfs [20]uintptr 36582 var nVfs int32 = 0 36583 36584 func vfs_unregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36585 var i int32 36586 for i = 0; i < int32(uint64(unsafe.Sizeof(apVfs))/uint64(unsafe.Sizeof(uintptr(0)))); i++ { 36587 apVfs[i] = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 36588 if apVfs[i] == uintptr(0) { 36589 break 36590 } 36591 sqlite3.Xsqlite3_vfs_unregister(tls, apVfs[i]) 36592 } 36593 nVfs = i 36594 return TCL_OK 36595 } 36596 36597 func vfs_reregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36598 var i int32 36599 for i = nVfs - 1; i >= 0; i-- { 36600 sqlite3.Xsqlite3_vfs_register(tls, apVfs[i], 1) 36601 } 36602 return TCL_OK 36603 } 36604 36605 func file_control_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36606 bp := tls.Alloc(44) 36607 defer tls.Free(44) 36608 36609 *(*int32)(unsafe.Pointer(bp + 40)) = 0 36610 36611 var rc int32 36612 _ = rc 36613 36614 if objc != 2 { 36615 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36616 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 36617 return TCL_ERROR 36618 } 36619 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36620 return TCL_ERROR 36621 } 36622 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), uintptr(0), 0, bp+40) 36623 36624 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+17738, SQLITE_FCNTL_LOCKSTATE, bp+40) 36625 36626 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+85, -1, bp+40) 36627 36628 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+8931, -1, bp+40) 36629 36630 return TCL_OK 36631 } 36632 36633 func file_control_lasterrno_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36634 bp := tls.Alloc(76) 36635 defer tls.Free(76) 36636 36637 *(*int32)(unsafe.Pointer(bp + 72)) = 0 36638 36639 var rc int32 36640 36641 if objc != 2 { 36642 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36643 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 36644 return TCL_ERROR 36645 } 36646 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 36647 return TCL_ERROR 36648 } 36649 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_LAST_ERRNO, bp+72) 36650 if rc != 0 { 36651 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36652 return TCL_ERROR 36653 } 36654 if *(*int32)(unsafe.Pointer(bp + 72)) != 0 { 36655 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17751, 36656 tcl.XTcl_GetStringFromObj(tls, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 72))), uintptr(0)), ts+4894, 0)) 36657 return TCL_ERROR 36658 } 36659 return TCL_OK 36660 } 36661 36662 func file_control_data_version(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36663 bp := tls.Alloc(120) 36664 defer tls.Free(120) 36665 36666 var zDb uintptr 36667 36668 var rc int32 36669 36670 if objc != 3 && objc != 2 { 36671 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17779) 36672 return TCL_ERROR 36673 } 36674 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 36675 return TCL_ERROR 36676 } 36677 if objc == 3 { 36678 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36679 } else { 36680 zDb = uintptr(0) 36681 } 36682 36683 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, SQLITE_FCNTL_DATA_VERSION, bp+16) 36684 if rc != 0 { 36685 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36686 return TCL_ERROR 36687 } else { 36688 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+20, ts+17791, libc.VaList(bp, *(*uint32)(unsafe.Pointer(bp + 16)))) 36689 tcl.XTcl_SetResult(tls, interp, bp+20, uintptr(1)) 36690 return TCL_OK 36691 } 36692 return int32(0) 36693 } 36694 36695 func file_control_chunksize_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36696 bp := tls.Alloc(12) 36697 defer tls.Free(12) 36698 36699 var zDb uintptr 36700 36701 var rc int32 36702 36703 if objc != 4 { 36704 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 36705 return TCL_ERROR 36706 } 36707 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 36708 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 36709 return TCL_ERROR 36710 } 36711 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36712 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 36713 zDb = uintptr(0) 36714 } 36715 36716 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_CHUNK_SIZE, bp+8) 36717 if rc != 0 { 36718 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36719 return TCL_ERROR 36720 } 36721 return TCL_OK 36722 } 36723 36724 func file_control_sizehint_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36725 bp := tls.Alloc(16) 36726 defer tls.Free(16) 36727 36728 var zDb uintptr 36729 36730 var rc int32 36731 36732 if objc != 4 { 36733 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 36734 return TCL_ERROR 36735 } 36736 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 36737 tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 36738 return TCL_ERROR 36739 } 36740 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36741 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 36742 zDb = uintptr(0) 36743 } 36744 36745 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_SIZE_HINT, bp+8) 36746 if rc != 0 { 36747 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36748 return TCL_ERROR 36749 } 36750 return TCL_OK 36751 } 36752 36753 func file_control_lockproxy_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36754 bp := tls.Alloc(40) 36755 defer tls.Free(40) 36756 36757 if objc != 3 { 36758 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36759 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17809, 0)) 36760 return TCL_ERROR 36761 } 36762 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36763 return TCL_ERROR 36764 } 36765 36766 return TCL_OK 36767 } 36768 36769 func file_control_persist_wal(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36770 bp := tls.Alloc(176) 36771 defer tls.Free(176) 36772 36773 var rc int32 36774 36775 if objc != 3 { 36776 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36777 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 36778 return TCL_ERROR 36779 } 36780 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 36781 return TCL_ERROR 36782 } 36783 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 36784 return TCL_ERROR 36785 } 36786 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_PERSIST_WAL, bp+72) 36787 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 36788 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 36789 return TCL_OK 36790 } 36791 36792 func file_control_powersafe_overwrite(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36793 bp := tls.Alloc(176) 36794 defer tls.Free(176) 36795 36796 var rc int32 36797 36798 if objc != 3 { 36799 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36800 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 36801 return TCL_ERROR 36802 } 36803 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 36804 return TCL_ERROR 36805 } 36806 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 36807 return TCL_ERROR 36808 } 36809 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_POWERSAFE_OVERWRITE, bp+72) 36810 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 36811 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 36812 return TCL_OK 36813 } 36814 36815 func file_control_vfsname(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36816 bp := tls.Alloc(64) 36817 defer tls.Free(64) 36818 36819 var zDbName uintptr = ts + 85 36820 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 36821 36822 if objc != 2 && objc != 3 { 36823 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36824 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 36825 return TCL_ERROR 36826 } 36827 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36828 return TCL_ERROR 36829 } 36830 if objc == 3 { 36831 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36832 } 36833 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_VFSNAME, bp+56) 36834 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 36835 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 36836 return TCL_OK 36837 } 36838 36839 func file_control_reservebytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36840 bp := tls.Alloc(12) 36841 defer tls.Free(12) 36842 36843 var zDbName uintptr = ts + 85 36844 *(*int32)(unsafe.Pointer(bp + 8)) = 0 36845 var rc int32 36846 36847 if objc != 3 { 36848 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17844) 36849 return TCL_ERROR 36850 } 36851 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 36852 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 36853 return TCL_ERROR 36854 } 36855 36856 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName, SQLITE_FCNTL_RESERVE_BYTES, bp+8) 36857 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 36858 return TCL_OK 36859 } 36860 36861 func file_control_tempfilename(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36862 bp := tls.Alloc(64) 36863 defer tls.Free(64) 36864 36865 var zDbName uintptr = ts + 85 36866 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 36867 36868 if objc != 2 && objc != 3 { 36869 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36870 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 36871 return TCL_ERROR 36872 } 36873 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36874 return TCL_ERROR 36875 } 36876 if objc == 3 { 36877 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36878 } 36879 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_TEMPFILENAME, bp+56) 36880 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 36881 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 36882 return TCL_OK 36883 } 36884 36885 func file_control_external_reader(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36886 bp := tls.Alloc(44) 36887 defer tls.Free(44) 36888 36889 var zName uintptr = ts + 85 36890 *(*int32)(unsafe.Pointer(bp + 40)) = 0 36891 var rc int32 = SQLITE_OK 36892 36893 if objc != 2 && objc != 3 { 36894 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36895 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 36896 return TCL_ERROR 36897 } 36898 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36899 return TCL_ERROR 36900 } 36901 if objc == 3 { 36902 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36903 } 36904 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, SQLITE_FCNTL_EXTERNAL_READER, bp+40) 36905 if rc != SQLITE_OK { 36906 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36907 return TCL_ERROR 36908 } 36909 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 36910 return TCL_OK 36911 } 36912 36913 func vfs_list(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36914 var pVfs uintptr 36915 var pRet uintptr = tcl.XTcl_NewObj(tls) 36916 if objc != 1 { 36917 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 36918 return TCL_ERROR 36919 } 36920 for pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)); pVfs != 0; pVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpNext { 36921 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 36922 } 36923 tcl.XTcl_SetObjResult(tls, interp, pRet) 36924 return TCL_OK 36925 } 36926 36927 func test_limit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36928 bp := tls.Alloc(68) 36929 defer tls.Free(68) 36930 36931 var rc int32 36932 var i int32 36933 var id int32 = 0 36934 36935 var zId uintptr 36936 36937 if objc != 4 { 36938 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36939 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17849, 0)) 36940 return TCL_ERROR 36941 } 36942 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 36943 return TCL_ERROR 36944 } 36945 zId = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36946 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 36947 FzName uintptr 36948 Fid int32 36949 F__ccgo_pad1 [4]byte 36950 }{})); i++ { 36951 if libc.Xstrcmp(tls, zId, aId[i].FzName) == 0 { 36952 id = aId[i].Fid 36953 break 36954 } 36955 } 36956 if uint64(i) >= uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 36957 FzName uintptr 36958 Fid int32 36959 F__ccgo_pad1 [4]byte 36960 }{})) { 36961 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17862, zId, uintptr(0))) 36962 return TCL_ERROR 36963 } 36964 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 36965 return TCL_ERROR 36966 } 36967 rc = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), id, *(*int32)(unsafe.Pointer(bp + 64))) 36968 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36969 return TCL_OK 36970 } 36971 36972 var aId = [14]struct { 36973 FzName uintptr 36974 Fid int32 36975 F__ccgo_pad1 [4]byte 36976 }{ 36977 {FzName: ts + 17883}, 36978 {FzName: ts + 17903, Fid: SQLITE_LIMIT_SQL_LENGTH}, 36979 {FzName: ts + 17927, Fid: SQLITE_LIMIT_COLUMN}, 36980 {FzName: ts + 17947, Fid: SQLITE_LIMIT_EXPR_DEPTH}, 36981 {FzName: ts + 17971, Fid: SQLITE_LIMIT_COMPOUND_SELECT}, 36982 {FzName: ts + 18000, Fid: SQLITE_LIMIT_VDBE_OP}, 36983 {FzName: ts + 18021, Fid: SQLITE_LIMIT_FUNCTION_ARG}, 36984 {FzName: ts + 18047, Fid: SQLITE_LIMIT_ATTACHED}, 36985 {FzName: ts + 18069, Fid: SQLITE_LIMIT_LIKE_PATTERN_LENGTH}, 36986 {FzName: ts + 18102, Fid: SQLITE_LIMIT_VARIABLE_NUMBER}, 36987 {FzName: ts + 18131, Fid: SQLITE_LIMIT_TRIGGER_DEPTH}, 36988 {FzName: ts + 18158, Fid: SQLITE_LIMIT_WORKER_THREADS}, 36989 {FzName: ts + 18186, Fid: -1}, 36990 {FzName: ts + 18208, Fid: SQLITE_LIMIT_WORKER_THREADS + 1}, 36991 } 36992 36993 func save_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36994 var rc int32 = sqlite3.Xsqlite3_test_control(tls, 9999, 0) 36995 _ = rc 36996 36997 rc = sqlite3.Xsqlite3_test_control(tls, -1, 0) 36998 36999 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SAVE, 0) 37000 return TCL_OK 37001 } 37002 37003 func restore_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37004 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_RESTORE, 0) 37005 return TCL_OK 37006 } 37007 37008 func reset_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37009 sqlite3.Xsqlite3_randomness(tls, 0, uintptr(0)) 37010 return TCL_OK 37011 } 37012 37013 func prng_seed(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37014 bp := tls.Alloc(32) 37015 defer tls.Free(32) 37016 37017 *(*int32)(unsafe.Pointer(bp + 16)) = 0 37018 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 37019 if objc != 2 && objc != 3 { 37020 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18228) 37021 return TCL_ERROR 37022 } 37023 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 37024 return TCL_ERROR 37025 } 37026 if objc == 3 && getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) != 0 { 37027 return TCL_ERROR 37028 } 37029 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SEED, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 24)))) 37030 return TCL_OK 37031 } 37032 37033 func extra_schema_checks(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37034 bp := tls.Alloc(12) 37035 defer tls.Free(12) 37036 37037 *(*int32)(unsafe.Pointer(bp + 8)) = 0 37038 if objc != 2 { 37039 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 37040 return TCL_ERROR 37041 } 37042 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 37043 return TCL_ERROR 37044 } 37045 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 37046 return TCL_OK 37047 } 37048 37049 func database_may_be_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37050 bp := tls.Alloc(8) 37051 defer tls.Free(8) 37052 37053 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 0)) 37054 return TCL_OK 37055 } 37056 37057 func database_never_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37058 bp := tls.Alloc(8) 37059 defer tls.Free(8) 37060 37061 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 1)) 37062 return TCL_OK 37063 } 37064 37065 func test_pcache_stats(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37066 bp := tls.Alloc(16) 37067 defer tls.Free(16) 37068 37069 var pRet uintptr 37070 37071 sqlite3.Xsqlite3PcacheStats(tls, bp, bp+4, bp+8, bp+12) 37072 37073 pRet = tcl.XTcl_NewObj(tls) 37074 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18246, -1)) 37075 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp)))) 37076 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18254, -1)) 37077 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 37078 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18258, -1)) 37079 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 37080 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18262, -1)) 37081 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 37082 37083 tcl.XTcl_SetObjResult(tls, interp, pRet) 37084 37085 return TCL_OK 37086 } 37087 37088 func test_unlock_notify_cb(tls *libc.TLS, aArg uintptr, nArg int32) { 37089 var ii int32 37090 for ii = 0; ii < nArg; ii++ { 37091 tcl.XTcl_EvalEx(tls, *(*uintptr)(unsafe.Pointer(aArg + uintptr(ii)*8)), ts+13692, -1, TCL_EVAL_GLOBAL) 37092 } 37093 } 37094 37095 func test_unlock_notify(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37096 bp := tls.Alloc(8) 37097 defer tls.Free(8) 37098 37099 var rc int32 37100 37101 if objc != 2 { 37102 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37103 return TCL_ERROR 37104 } 37105 37106 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37107 return TCL_ERROR 37108 } 37109 rc = sqlite3.Xsqlite3_unlock_notify(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct { 37110 f func(*libc.TLS, uintptr, int32) 37111 }{test_unlock_notify_cb})), interp) 37112 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37113 return TCL_OK 37114 } 37115 37116 func test_wal_checkpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37117 bp := tls.Alloc(8) 37118 defer tls.Free(8) 37119 37120 var zDb uintptr = uintptr(0) 37121 37122 var rc int32 37123 37124 if objc != 3 && objc != 2 { 37125 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18273) 37126 return TCL_ERROR 37127 } 37128 37129 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37130 return TCL_ERROR 37131 } 37132 if objc == 3 { 37133 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37134 } 37135 rc = sqlite3.Xsqlite3_wal_checkpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 37136 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37137 return TCL_OK 37138 } 37139 37140 func test_wal_checkpoint_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37141 bp := tls.Alloc(96) 37142 defer tls.Free(96) 37143 37144 var zDb uintptr = uintptr(0) 37145 37146 var rc int32 37147 37148 *(*int32)(unsafe.Pointer(bp + 88)) = -555 37149 *(*int32)(unsafe.Pointer(bp + 92)) = -555 37150 var pRet uintptr 37151 37152 *(*[5]uintptr)(unsafe.Pointer(bp + 48)) = [5]uintptr{ts + 18283, ts + 18291, ts + 18296, ts + 18304, uintptr(0)} 37153 37154 if objc != 3 && objc != 4 { 37155 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18313) 37156 return TCL_ERROR 37157 } 37158 37159 if objc == 4 { 37160 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37161 } 37162 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) && 37163 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) { 37164 return TCL_ERROR 37165 } 37166 37167 rc = sqlite3.Xsqlite3_wal_checkpoint_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zDb, *(*int32)(unsafe.Pointer(bp + 40)), bp+88, bp+92) 37168 if rc != SQLITE_OK && rc != SQLITE_BUSY { 37169 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37170 tcl.XTcl_ResetResult(tls, interp) 37171 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErrCode, ts+9645, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0)) 37172 return TCL_ERROR 37173 } 37174 37175 pRet = tcl.XTcl_NewObj(tls) 37176 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, func() int32 { 37177 if rc == SQLITE_BUSY { 37178 return 1 37179 } 37180 return 0 37181 }())) 37182 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 88)))) 37183 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 92)))) 37184 tcl.XTcl_SetObjResult(tls, interp, pRet) 37185 37186 return TCL_OK 37187 } 37188 37189 func test_wal_autocheckpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37190 bp := tls.Alloc(12) 37191 defer tls.Free(12) 37192 37193 var rc int32 37194 37195 if objc != 3 { 37196 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18333) 37197 return TCL_ERROR 37198 } 37199 37200 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37201 tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 37202 return TCL_ERROR 37203 } 37204 37205 rc = sqlite3.Xsqlite3_wal_autocheckpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 37206 tcl.XTcl_ResetResult(tls, interp) 37207 if rc != SQLITE_OK { 37208 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37209 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErrCode, -1)) 37210 return TCL_ERROR 37211 } 37212 37213 return TCL_OK 37214 } 37215 37216 type LogCallback = struct { 37217 FpInterp uintptr 37218 FpObj uintptr 37219 } 37220 37221 var logcallback = LogCallback{} 37222 37223 func xLogcallback(tls *libc.TLS, unused uintptr, err int32, zMsg uintptr) { 37224 var pNew uintptr = tcl.XTcl_DuplicateObj(tls, logcallback.FpObj) 37225 (*Tcl_Obj)(unsafe.Pointer(pNew)).FrefCount++ 37226 tcl.XTcl_ListObjAppendElement(tls, 37227 uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, err), -1)) 37228 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, zMsg, -1)) 37229 tcl.XTcl_EvalObjEx(tls, logcallback.FpInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT) 37230 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37231 var _objPtr uintptr = pNew 37232 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37233 tcl.XTclFreeObj(tls, _objPtr) 37234 } 37235 } 37236 } 37237 37238 func test_sqlite3_log(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37239 bp := tls.Alloc(32) 37240 defer tls.Free(32) 37241 37242 if objc > 2 { 37243 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10187) 37244 return TCL_ERROR 37245 } 37246 if logcallback.FpObj != 0 { 37247 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37248 var _objPtr uintptr = logcallback.FpObj 37249 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37250 tcl.XTclFreeObj(tls, _objPtr) 37251 } 37252 } 37253 logcallback.FpObj = uintptr(0) 37254 logcallback.FpInterp = uintptr(0) 37255 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp, uintptr(0), uintptr(0))) 37256 } 37257 if objc > 1 { 37258 logcallback.FpObj = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 37259 (*Tcl_Obj)(unsafe.Pointer(logcallback.FpObj)).FrefCount++ 37260 logcallback.FpInterp = interp 37261 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct { 37262 f func(*libc.TLS, uintptr, int32, uintptr) 37263 }{xLogcallback})), uintptr(0))) 37264 } 37265 return TCL_OK 37266 } 37267 37268 func runAsObjProc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37269 bp := tls.Alloc(112) 37270 defer tls.Free(112) 37271 37272 if objc < 2 { 37273 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18342) 37274 return TCL_ERROR 37275 } 37276 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 37277 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 37278 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 37279 return TCL_ERROR 37280 } 37281 if (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjProc == uintptr(0) { 37282 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18354, 37283 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 37284 return TCL_ERROR 37285 } 37286 return (*struct { 37287 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 37288 })(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) 37289 } 37290 37291 func printExplainQueryPlan(tls *libc.TLS, pStmt uintptr) int32 { 37292 bp := tls.Alloc(48) 37293 defer tls.Free(48) 37294 37295 var zSql uintptr 37296 var zExplain uintptr 37297 37298 var rc int32 37299 37300 zSql = sqlite3.Xsqlite3_sql(tls, pStmt) 37301 if zSql == uintptr(0) { 37302 return SQLITE_ERROR 37303 } 37304 37305 zExplain = sqlite3.Xsqlite3_mprintf(tls, ts+330, libc.VaList(bp, zSql)) 37306 if zExplain == uintptr(0) { 37307 return SQLITE_NOMEM 37308 } 37309 37310 rc = sqlite3.Xsqlite3_prepare_v2(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt), zExplain, -1, bp+40, uintptr(0)) 37311 sqlite3.Xsqlite3_free(tls, zExplain) 37312 if rc != SQLITE_OK { 37313 return rc 37314 } 37315 37316 for SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 37317 var iSelectid int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 37318 var iOrder int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 37319 var iFrom int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 37320 var zDetail uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 3) 37321 37322 libc.Xprintf(tls, ts+18379, libc.VaList(bp+8, iSelectid, iOrder, iFrom, zDetail)) 37323 } 37324 37325 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 37326 } 37327 37328 func test_print_eqp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37329 bp := tls.Alloc(8) 37330 defer tls.Free(8) 37331 37332 var rc int32 37333 37334 if objc != 2 { 37335 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 37336 return TCL_ERROR 37337 } 37338 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37339 return TCL_ERROR 37340 } 37341 rc = printExplainQueryPlan(tls, *(*uintptr)(unsafe.Pointer(bp))) 37342 37343 libc.Xfflush(tls, uintptr(unsafe.Pointer(&libc.X__sF))+1*152) 37344 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37345 return TCL_OK 37346 } 37347 37348 func testLocaltime(tls *libc.TLS, aliasT uintptr, aliasTM uintptr) int32 { 37349 var t time_t = *(*time_t)(unsafe.Pointer(aliasT)) 37350 var pTm uintptr = aliasTM 37351 var altT time_t 37352 var iJD sqlite3_int64 37353 var Z int32 37354 var A int32 37355 var B int32 37356 var C int32 37357 var D int32 37358 var E int32 37359 var X1 int32 37360 var S int32 37361 37362 if t/int64(86400)&int64(1) != 0 { 37363 altT = t + int64(1800) 37364 } else { 37365 altT = t - int64(1800) 37366 } 37367 iJD = altT + 210866760000 37368 Z = int32((iJD + int64(43200)) / int64(86400)) 37369 A = libc.Int32FromFloat64((float64(Z) - 1867216.25) / 36524.25) 37370 A = Z + 1 + A - A/4 37371 B = A + 1524 37372 C = libc.Int32FromFloat64((float64(B) - 122.1) / 365.25) 37373 D = 36525 * (C & 32767) / 100 37374 E = libc.Int32FromFloat64(float64(B-D) / 30.6001) 37375 X1 = libc.Int32FromFloat64(30.6001 * float64(E)) 37376 (*tm)(unsafe.Pointer(pTm)).Ftm_mday = B - D - X1 37377 (*tm)(unsafe.Pointer(pTm)).Ftm_mon = func() int32 { 37378 if E < 14 { 37379 return E - 2 37380 } 37381 return E - 14 37382 }() 37383 (*tm)(unsafe.Pointer(pTm)).Ftm_year = func() int32 { 37384 if (*tm)(unsafe.Pointer(pTm)).Ftm_mon > 1 { 37385 return C - 4716 37386 } 37387 return C - 4715 37388 }() - 1900 37389 S = int32((iJD + int64(43200)) % int64(86400)) 37390 (*tm)(unsafe.Pointer(pTm)).Ftm_hour = S / 3600 37391 (*tm)(unsafe.Pointer(pTm)).Ftm_min = S / 60 % 60 37392 (*tm)(unsafe.Pointer(pTm)).Ftm_sec = S % 60 37393 return libc.Bool32(t == int64(959609760)) 37394 } 37395 37396 func test_test_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37397 bp := tls.Alloc(192) 37398 defer tls.Free(192) 37399 37400 *(*[4]Verb)(unsafe.Pointer(bp + 72)) = [4]Verb{ 37401 {FzName: ts + 18392, Fi: SQLITE_TESTCTRL_LOCALTIME_FAULT}, 37402 {FzName: ts + 18424, Fi: SQLITE_TESTCTRL_SORTER_MMAP}, 37403 {FzName: ts + 18452, Fi: SQLITE_TESTCTRL_IMPOSTER}, 37404 {FzName: ts + 18477, Fi: SQLITE_TESTCTRL_INTERNAL_FUNCTIONS}, 37405 } 37406 37407 var iFlag int32 37408 var rc int32 37409 37410 if objc < 2 { 37411 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18512) 37412 return TCL_ERROR 37413 } 37414 37415 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 37416 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+72, int32(unsafe.Sizeof(Verb{})), ts+18525, 0, bp+136) 37417 if rc != TCL_OK { 37418 return rc 37419 } 37420 37421 iFlag = (*Verb)(unsafe.Pointer(bp + 72 + uintptr(*(*int32)(unsafe.Pointer(bp + 136)))*16)).Fi 37422 switch iFlag { 37423 case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: 37424 { 37425 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 37426 if objc != 3 { 37427 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 37428 return TCL_ERROR 37429 } 37430 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+144) != 0 { 37431 return TCL_ERROR 37432 } 37433 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(bp + 144)))) 37434 break 37435 37436 } 37437 case SQLITE_TESTCTRL_LOCALTIME_FAULT: 37438 { 37439 if objc != 3 { 37440 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18530) 37441 return TCL_ERROR 37442 } 37443 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+152) != 0 { 37444 return TCL_ERROR 37445 } 37446 sqlite3.Xsqlite3_test_control(tls, iFlag, libc.VaList(bp+8, *(*int32)(unsafe.Pointer(bp + 152)), *(*uintptr)(unsafe.Pointer(&struct { 37447 f func(*libc.TLS, uintptr, uintptr) int32 37448 }{testLocaltime})))) 37449 break 37450 37451 } 37452 37453 case SQLITE_TESTCTRL_SORTER_MMAP: 37454 { 37455 if objc != 4 { 37456 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18536) 37457 return TCL_ERROR 37458 } 37459 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+160) != 0 { 37460 return TCL_ERROR 37461 } 37462 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168) != 0 { 37463 return TCL_ERROR 37464 } 37465 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_SORTER_MMAP, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 160)), *(*int32)(unsafe.Pointer(bp + 168)))) 37466 break 37467 37468 } 37469 37470 case SQLITE_TESTCTRL_IMPOSTER: 37471 { 37472 var zDbName uintptr 37473 37474 if objc != 6 { 37475 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18545) 37476 return TCL_ERROR 37477 } 37478 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+176) != 0 { 37479 return TCL_ERROR 37480 } 37481 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37482 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+184) != 0 { 37483 return TCL_ERROR 37484 } 37485 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+188) != 0 { 37486 return TCL_ERROR 37487 } 37488 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)))) 37489 break 37490 37491 } 37492 } 37493 37494 tcl.XTcl_ResetResult(tls, interp) 37495 return TCL_OK 37496 } 37497 37498 type Verb = struct { 37499 FzName uintptr 37500 Fi int32 37501 F__ccgo_pad1 [4]byte 37502 } 37503 37504 type rusage = struct { 37505 Fru_utime struct { 37506 Ftv_sec time_t 37507 Ftv_usec suseconds_t 37508 } 37509 Fru_stime struct { 37510 Ftv_sec time_t 37511 Ftv_usec suseconds_t 37512 } 37513 Fru_maxrss int64 37514 Fru_ixrss int64 37515 Fru_idrss int64 37516 Fru_isrss int64 37517 Fru_minflt int64 37518 Fru_majflt int64 37519 Fru_nswap int64 37520 Fru_inblock int64 37521 Fru_oublock int64 37522 Fru_msgsnd int64 37523 Fru_msgrcv int64 37524 Fru_nsignals int64 37525 Fru_nvcsw int64 37526 Fru_nivcsw int64 37527 } 37528 37529 type rlimit = struct { 37530 Frlim_cur rlim_t 37531 Frlim_max rlim_t 37532 } 37533 37534 type loadavg = struct { 37535 Fldavg [3]fixpt_t 37536 F__ccgo_pad1 [4]byte 37537 Ffscale int64 37538 } 37539 37540 func test_getrusage(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37541 bp := tls.Alloc(1216) 37542 defer tls.Free(1216) 37543 37544 libc.Xmemset(tls, bp+48, 0, uint64(unsafe.Sizeof(rusage{}))) 37545 libc.Xgetrusage(tls, RUSAGE_SELF, bp+48) 37546 37547 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1024]int8{})), bp+192, 37548 ts+18566, 37549 libc.VaList(bp, int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_usec), 37550 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_usec), 37551 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_minflt), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_majflt))) 37552 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+192, -1)) 37553 return TCL_OK 37554 } 37555 37556 func optimization_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37557 bp := tls.Alloc(68) 37558 defer tls.Free(68) 37559 37560 var i int32 37561 37562 var zOpt uintptr 37563 37564 var mask int32 = 0 37565 37566 if objc != 4 { 37567 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18626) 37568 return TCL_ERROR 37569 } 37570 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 37571 return TCL_ERROR 37572 } 37573 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 37574 return TCL_ERROR 37575 } 37576 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37577 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 37578 FzOptName uintptr 37579 Fmask int32 37580 F__ccgo_pad1 [4]byte 37581 }{})); i++ { 37582 if libc.Xstrcmp(tls, zOpt, aOpt[i].FzOptName) == 0 { 37583 mask = aOpt[i].Fmask 37584 break 37585 } 37586 } 37587 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 37588 mask = ^mask 37589 } 37590 if uint64(i) >= uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 37591 FzOptName uintptr 37592 Fmask int32 37593 F__ccgo_pad1 [4]byte 37594 }{})) { 37595 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18641, 37596 uintptr(0))) 37597 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 37598 FzOptName uintptr 37599 Fmask int32 37600 F__ccgo_pad1 [4]byte 37601 }{})); i++ { 37602 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+4894, aOpt[i].FzOptName, uintptr(0))) 37603 } 37604 return TCL_ERROR 37605 } 37606 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_OPTIMIZATIONS, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 56)), mask)) 37607 return TCL_OK 37608 } 37609 37610 var aOpt = [14]struct { 37611 FzOptName uintptr 37612 Fmask int32 37613 F__ccgo_pad1 [4]byte 37614 }{ 37615 {FzOptName: ts + 18682, Fmask: libc.Int32FromUint32(SQLITE_AllOpts)}, 37616 {FzOptName: ts + 18686}, 37617 {FzOptName: ts + 18691, Fmask: SQLITE_QueryFlattener}, 37618 {FzOptName: ts + 18707, Fmask: SQLITE_GroupByOrder}, 37619 {FzOptName: ts + 18721, Fmask: SQLITE_FactorOutConst}, 37620 {FzOptName: ts + 18738, Fmask: SQLITE_DistinctOpt}, 37621 {FzOptName: ts + 18751, Fmask: SQLITE_CoverIdxScan}, 37622 {FzOptName: ts + 18766, Fmask: SQLITE_OrderByIdxJoin}, 37623 {FzOptName: ts + 18784, Fmask: SQLITE_Transitive}, 37624 {FzOptName: ts + 18795, Fmask: SQLITE_OmitNoopJoin}, 37625 {FzOptName: ts + 18810, Fmask: SQLITE_Stat4}, 37626 {FzOptName: ts + 18816, Fmask: SQLITE_SkipScan}, 37627 {FzOptName: ts + 18826, Fmask: SQLITE_PushDown}, 37628 {FzOptName: ts + 18836, Fmask: SQLITE_BalancedMerge}, 37629 } 37630 37631 func tclLoadStaticExtensionCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37632 bp := tls.Alloc(80) 37633 defer tls.Free(80) 37634 37635 var zName uintptr 37636 var i int32 37637 var j int32 37638 var rc int32 37639 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 37640 if objc < 3 { 37641 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18851) 37642 return TCL_ERROR 37643 } 37644 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37645 return TCL_ERROR 37646 } 37647 for j = 2; j < objc; j++ { 37648 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(j)*8))) 37649 for i = 0; i < int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 37650 FzExtName uintptr 37651 FpInit uintptr 37652 }{}))); i++ { 37653 if libc.Xstrcmp(tls, zName, aExtension[i].FzExtName) == 0 { 37654 break 37655 } 37656 } 37657 if i >= int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 37658 FzExtName uintptr 37659 FpInit uintptr 37660 }{}))) { 37661 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18863, zName, uintptr(0))) 37662 return TCL_ERROR 37663 } 37664 if aExtension[i].FpInit != 0 { 37665 rc = (*struct { 37666 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 37667 })(unsafe.Pointer(&struct{ uintptr }{aExtension[i].FpInit})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), bp+72, uintptr(0)) 37668 } else { 37669 rc = SQLITE_OK 37670 } 37671 if rc != SQLITE_OK && rc != SQLITE_OK|int32(1)<<8 || *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 37672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18883, zName, ts+18902, *(*uintptr)(unsafe.Pointer(bp + 72)), 37673 uintptr(0))) 37674 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 37675 return TCL_ERROR 37676 } 37677 } 37678 return TCL_OK 37679 } 37680 37681 var aExtension = [22]struct { 37682 FzExtName uintptr 37683 FpInit uintptr 37684 }{ 37685 {FzExtName: ts + 18912, FpInit: 0}, 37686 {FzExtName: ts + 18919, FpInit: 0}, 37687 {FzExtName: ts + 4060, FpInit: 0}, 37688 {FzExtName: ts + 18929, FpInit: 0}, 37689 {FzExtName: ts + 4815, FpInit: 0}, 37690 {FzExtName: ts + 4838, FpInit: 0}, 37691 {FzExtName: ts + 4896, FpInit: 0}, 37692 {FzExtName: ts + 4974, FpInit: 0}, 37693 {FzExtName: ts + 18937, FpInit: 0}, 37694 {FzExtName: ts + 5483, FpInit: 0}, 37695 {FzExtName: ts + 5507, FpInit: 0}, 37696 {FzExtName: ts + 18944, FpInit: 0}, 37697 {FzExtName: ts + 6087, FpInit: 0}, 37698 {FzExtName: ts + 6162, FpInit: 0}, 37699 {FzExtName: ts + 6535, FpInit: 0}, 37700 {FzExtName: ts + 6831, FpInit: 0}, 37701 {FzExtName: ts + 6846, FpInit: 0}, 37702 {FzExtName: ts + 18953, FpInit: 0}, 37703 {FzExtName: ts + 18960, FpInit: 0}, 37704 {FzExtName: ts + 18969, FpInit: 0}, 37705 {FzExtName: ts + 8921, FpInit: 0}, 37706 {FzExtName: ts + 9463, FpInit: 0}, 37707 } 37708 37709 func sorter_test_fakeheap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37710 bp := tls.Alloc(4) 37711 defer tls.Free(4) 37712 37713 if objc != 2 { 37714 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 37715 return TCL_ERROR 37716 } 37717 37718 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37719 return TCL_ERROR 37720 } 37721 37722 if *(*int32)(unsafe.Pointer(bp)) != 0 { 37723 if sqlite3.Xsqlite3Config.FpHeap == uintptr(0) { 37724 sqlite3.Xsqlite3Config.FpHeap = libc.UintptrFromInt64(int64(-1)) 37725 } 37726 } else { 37727 if sqlite3.Xsqlite3Config.FpHeap == libc.UintptrFromInt64(int64(-1)) { 37728 sqlite3.Xsqlite3Config.FpHeap = uintptr(0) 37729 } 37730 } 37731 37732 tcl.XTcl_ResetResult(tls, interp) 37733 return TCL_OK 37734 } 37735 37736 func sorter_test_sort4_helper(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37737 bp := tls.Alloc(80) 37738 defer tls.Free(80) 37739 37740 var zSql1 uintptr 37741 var zSql2 uintptr 37742 37743 var iStep int32 37744 var iCksum1 uint32 37745 var iCksum2 uint32 37746 var rc int32 37747 var iB int32 37748 37749 var a int32 37750 var a1 int32 37751 iCksum1 = uint32(0) 37752 iCksum2 = uint32(0) 37753 37754 if !(objc != 5) { 37755 goto __1 37756 } 37757 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18976) 37758 return TCL_ERROR 37759 __1: 37760 ; 37761 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0) { 37762 goto __2 37763 } 37764 return TCL_ERROR 37765 __2: 37766 ; 37767 zSql1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37768 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0) { 37769 goto __3 37770 } 37771 return TCL_ERROR 37772 __3: 37773 ; 37774 zSql2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 37775 37776 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql1, -1, bp+72, uintptr(0)) 37777 if !(rc != SQLITE_OK) { 37778 goto __4 37779 } 37780 goto sql_error 37781 __4: 37782 ; 37783 iB = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) - 1 37784 iStep = 0 37785 __5: 37786 if !(iStep < *(*int32)(unsafe.Pointer(bp + 64)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 37787 goto __7 37788 } 37789 a = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 37790 if !(a != sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), iB)) { 37791 goto __8 37792 } 37793 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18995, 0)) 37794 return TCL_ERROR 37795 __8: 37796 ; 37797 iCksum1 = iCksum1 + (iCksum1<<3 + uint32(a)) 37798 goto __6 37799 __6: 37800 iStep++ 37801 goto __5 37802 goto __7 37803 __7: 37804 ; 37805 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 37806 if !(rc != SQLITE_OK) { 37807 goto __9 37808 } 37809 goto sql_error 37810 __9: 37811 ; 37812 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql2, -1, bp+72, uintptr(0)) 37813 if !(rc != SQLITE_OK) { 37814 goto __10 37815 } 37816 goto sql_error 37817 __10: 37818 ; 37819 iStep = 0 37820 __11: 37821 if !(SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 37822 goto __13 37823 } 37824 a1 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 37825 iCksum2 = iCksum2 + (iCksum2<<3 + uint32(a1)) 37826 goto __12 37827 __12: 37828 iStep++ 37829 goto __11 37830 goto __13 37831 __13: 37832 ; 37833 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 37834 if !(rc != SQLITE_OK) { 37835 goto __14 37836 } 37837 goto sql_error 37838 __14: 37839 ; 37840 if !(iCksum1 != iCksum2) { 37841 goto __15 37842 } 37843 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19014, 0)) 37844 return TCL_ERROR 37845 __15: 37846 ; 37847 return TCL_OK 37848 sql_error: 37849 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19032, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 56))), 0)) 37850 return TCL_ERROR 37851 } 37852 37853 func test_bad_behavior(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37854 bp := tls.Alloc(44) 37855 defer tls.Free(44) 37856 37857 var xyz int32 37858 var i int32 = *(*int32)(unsafe.Pointer(clientData)) 37859 var j int32 37860 37861 var a uintptr 37862 if objc != 2 { 37863 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19044) 37864 return TCL_ERROR 37865 } 37866 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37867 return TCL_ERROR 37868 } 37869 switch *(*int32)(unsafe.Pointer(bp)) { 37870 case 1: 37871 { 37872 xyz = 0x7fffff00 - i 37873 xyz = xyz + 0x100 37874 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, xyz)) 37875 break 37876 37877 } 37878 case 2: 37879 { 37880 *(*int32)(unsafe.Pointer(bp + 4 + 1*4)) = 5 37881 if *(*int32)(unsafe.Pointer(bp + 4 + uintptr(i)*4)) > 0 { 37882 *(*int32)(unsafe.Pointer(bp + 4 + 1*4))++ 37883 } 37884 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4 + 1*4)))) 37885 break 37886 37887 } 37888 case 3: 37889 { 37890 a = libc.Xmalloc(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(10)) 37891 for j = 0; j < 10; j++ { 37892 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = j 37893 } 37894 libc.Xfree(tls, a) 37895 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 37896 break 37897 37898 } 37899 case 4: 37900 { 37901 tcl.XTcl_Panic(tls, ts+19049, 0) 37902 break 37903 37904 } 37905 } 37906 return TCL_OK 37907 } 37908 37909 func test_register_dbstat_vtab(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37910 bp := tls.Alloc(64) 37911 defer tls.Free(64) 37912 37913 var zDb uintptr 37914 37915 if objc != 2 { 37916 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37917 return TCL_ERROR 37918 } 37919 37920 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 37921 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp) != 0 { 37922 var db uintptr = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)).Fdb 37923 sqlite3.Xsqlite3DbstatRegister(tls, db) 37924 } 37925 return TCL_OK 37926 } 37927 37928 func test_sqlite3_db_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37929 bp := tls.Alloc(28) 37930 defer tls.Free(28) 37931 37932 var i int32 37933 *(*int32)(unsafe.Pointer(bp + 24)) = 0 37934 var zSetting uintptr 37935 37936 if objc != 4 && objc != 3 { 37937 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19066) 37938 return TCL_ERROR 37939 } 37940 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 37941 return TCL_ERROR 37942 } 37943 zSetting = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37944 if sqlite3.Xsqlite3_strglob(tls, ts+19085, zSetting) == 0 { 37945 zSetting += uintptr(7) 37946 } 37947 if sqlite3.Xsqlite3_strglob(tls, ts+19094, zSetting) == 0 { 37948 zSetting += uintptr(9) 37949 } 37950 if sqlite3.Xsqlite3_strglob(tls, ts+19105, zSetting) == 0 { 37951 zSetting += uintptr(7) 37952 } 37953 for i = 0; i < int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 37954 FzName uintptr 37955 FeVal int32 37956 F__ccgo_pad1 [4]byte 37957 }{}))); i++ { 37958 if libc.Xstrcmp(tls, zSetting, aSetting[i].FzName) == 0 { 37959 break 37960 } 37961 } 37962 if i >= int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 37963 FzName uintptr 37964 FeVal int32 37965 F__ccgo_pad1 [4]byte 37966 }{}))) { 37967 tcl.XTcl_SetObjResult(tls, interp, 37968 tcl.XTcl_NewStringObj(tls, ts+19114, -1)) 37969 return TCL_ERROR 37970 } 37971 if objc == 4 { 37972 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 37973 return TCL_ERROR 37974 } 37975 } else { 37976 *(*int32)(unsafe.Pointer(bp + 24)) = -1 37977 } 37978 sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), aSetting[i].FeVal, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 24)), bp+24)) 37979 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 24)))) 37980 return TCL_OK 37981 } 37982 37983 var aSetting = [14]struct { 37984 FzName uintptr 37985 FeVal int32 37986 F__ccgo_pad1 [4]byte 37987 }{ 37988 {FzName: ts + 19148, FeVal: SQLITE_DBCONFIG_ENABLE_FKEY}, 37989 {FzName: ts + 19153, FeVal: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 37990 {FzName: ts + 19161, FeVal: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 37991 {FzName: ts + 19176, FeVal: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 37992 {FzName: ts + 19191, FeVal: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 37993 {FzName: ts + 19208, FeVal: SQLITE_DBCONFIG_ENABLE_QPSG}, 37994 {FzName: ts + 19213, FeVal: SQLITE_DBCONFIG_TRIGGER_EQP}, 37995 {FzName: ts + 19225, FeVal: SQLITE_DBCONFIG_RESET_DATABASE}, 37996 {FzName: ts + 19234, FeVal: SQLITE_DBCONFIG_DEFENSIVE}, 37997 {FzName: ts + 19244, FeVal: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 37998 {FzName: ts + 19260, FeVal: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 37999 {FzName: ts + 19279, FeVal: SQLITE_DBCONFIG_DQS_DML}, 38000 {FzName: ts + 19287, FeVal: SQLITE_DBCONFIG_DQS_DDL}, 38001 {FzName: ts + 19295, FeVal: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 38002 } 38003 38004 func test_sqlite3_txn_state(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38005 bp := tls.Alloc(8) 38006 defer tls.Free(8) 38007 38008 var zSchema uintptr 38009 var iTxn int32 38010 38011 if objc != 2 && objc != 3 { 38012 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19314) 38013 return TCL_ERROR 38014 } 38015 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38016 return TCL_ERROR 38017 } 38018 if objc == 3 { 38019 zSchema = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38020 } else { 38021 zSchema = uintptr(0) 38022 } 38023 iTxn = sqlite3.Xsqlite3_txn_state(tls, *(*uintptr)(unsafe.Pointer(bp)), zSchema) 38024 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iTxn)) 38025 return TCL_OK 38026 } 38027 38028 func test_dbconfig_maindbname_icecube(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38029 bp := tls.Alloc(16) 38030 defer tls.Free(16) 38031 38032 var rc int32 38033 38034 if objc != 2 { 38035 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38036 return TCL_ERROR 38037 } else { 38038 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 38039 return TCL_ERROR 38040 } 38041 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), SQLITE_DBCONFIG_MAINDBNAME, libc.VaList(bp, ts+19326)) 38042 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 38043 return TCL_OK 38044 } 38045 return int32(0) 38046 } 38047 38048 func test_mmap_warm(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38049 bp := tls.Alloc(8) 38050 defer tls.Free(8) 38051 38052 if objc != 2 && objc != 3 { 38053 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19334) 38054 return TCL_ERROR 38055 } else { 38056 var rc int32 38057 38058 var zDb uintptr = uintptr(0) 38059 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38060 return TCL_ERROR 38061 } 38062 if objc == 3 { 38063 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38064 } 38065 rc = sqlite3_mmap_warm(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 38066 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 38067 return TCL_OK 38068 } 38069 return int32(0) 38070 } 38071 38072 func test_write_db(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38073 bp := tls.Alloc(32) 38074 defer tls.Free(32) 38075 38076 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 38077 *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) = int64(0) 38078 var aData uintptr = uintptr(0) 38079 *(*int32)(unsafe.Pointer(bp + 16)) = 0 38080 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 38081 var rc int32 38082 38083 if objc != 4 { 38084 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19346) 38085 return TCL_ERROR 38086 } 38087 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38088 return TCL_ERROR 38089 } 38090 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 38091 return TCL_ERROR 38092 } 38093 aData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16) 38094 38095 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 38096 rc = (*struct { 38097 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 38098 })(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))) 38099 38100 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38101 return TCL_OK 38102 } 38103 38104 func test_register_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38105 if objc != 1 { 38106 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38107 return TCL_ERROR 38108 } else { 38109 var rc int32 = sqlite3_register_cksumvfs(tls, uintptr(0)) 38110 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38111 } 38112 return TCL_OK 38113 } 38114 38115 func test_unregister_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38116 if objc != 1 { 38117 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38118 return TCL_ERROR 38119 } else { 38120 var rc int32 = sqlite3_unregister_cksumvfs(tls) 38121 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38122 } 38123 return TCL_OK 38124 } 38125 38126 func test_decode_hexdb(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38127 bp := tls.Alloc(296) 38128 defer tls.Free(296) 38129 38130 var zIn uintptr = uintptr(0) 38131 var a uintptr = uintptr(0) 38132 *(*int32)(unsafe.Pointer(bp + 216)) = 0 38133 var lineno int32 = 0 38134 var i int32 38135 var iNext int32 38136 var iOffset int32 = 0 38137 38138 var rc int32 38139 38140 if objc != 2 { 38141 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19361) 38142 return TCL_ERROR 38143 } 38144 zIn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38145 for i = 0; *(*int8)(unsafe.Pointer(zIn + uintptr(i))) != 0; i = iNext { 38146 lineno++ 38147 for iNext = i; *(*int8)(unsafe.Pointer(zIn + uintptr(iNext))) != 0 && int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) != '\n'; iNext++ { 38148 } 38149 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) == '\n' { 38150 iNext++ 38151 } 38152 for int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == ' ' || int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == '\t' { 38153 i++ 38154 } 38155 if a == uintptr(0) { 38156 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19367, libc.VaList(bp, bp+216, bp+220)) 38157 if rc != 2 { 38158 continue 38159 } 38160 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 { 38161 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19389, uintptr(0))) 38162 return TCL_ERROR 38163 } 38164 *(*int32)(unsafe.Pointer(bp + 216)) = (*(*int32)(unsafe.Pointer(bp + 216)) + *(*int32)(unsafe.Pointer(bp + 220)) - 1) & ^(*(*int32)(unsafe.Pointer(bp + 220)) - 1) 38165 if *(*int32)(unsafe.Pointer(bp + 216)) < 512 { 38166 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19410, uintptr(0))) 38167 return TCL_ERROR 38168 } 38169 a = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 38170 if a == uintptr(0) { 38171 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+2069, uintptr(0))) 38172 return TCL_ERROR 38173 } 38174 libc.Xmemset(tls, a, 0, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 38175 continue 38176 } 38177 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19427, libc.VaList(bp+64, bp+224, bp+228)) 38178 if rc == 2 { 38179 iOffset = *(*int32)(unsafe.Pointer(bp + 228)) 38180 continue 38181 } 38182 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19447, 38183 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, 38184 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)) 38185 if rc == 17 { 38186 *(*int32)(unsafe.Pointer(bp + 228)) = iOffset + *(*int32)(unsafe.Pointer(bp + 224)) 38187 if *(*int32)(unsafe.Pointer(bp + 228))+16 <= *(*int32)(unsafe.Pointer(bp + 216)) { 38188 var ii int32 38189 for ii = 0; ii < 16; ii++ { 38190 *(*uint8)(unsafe.Pointer(a + uintptr(*(*int32)(unsafe.Pointer(bp + 228))+ii))) = uint8(*(*uint32)(unsafe.Pointer(bp + 232 + uintptr(ii)*4)) & uint32(0xff)) 38191 } 38192 } 38193 continue 38194 } 38195 } 38196 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, a, *(*int32)(unsafe.Pointer(bp + 216)))) 38197 libc.Xfree(tls, a) 38198 return TCL_OK 38199 } 38200 38201 type AutovacPageData1 = struct { 38202 Finterp uintptr 38203 FzScript uintptr 38204 } 38205 38206 type AutovacPageData = AutovacPageData1 38207 38208 func test_autovacuum_pages_callback(tls *libc.TLS, pClientData uintptr, zSchema uintptr, nFilePages uint32, nFreePages uint32, nBytePerPage uint32) uint32 { 38209 bp := tls.Alloc(344) 38210 defer tls.Free(344) 38211 38212 var pData uintptr = pClientData 38213 38214 tcl.XTcl_DStringInit(tls, bp+24) 38215 tcl.XTcl_DStringAppend(tls, bp+24, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, -1) 38216 tcl.XTcl_DStringAppendElement(tls, bp+24, zSchema) 38217 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp, nFilePages)) 38218 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38219 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp+8, nFreePages)) 38220 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38221 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp+16, nBytePerPage)) 38222 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38223 tcl.XTcl_ResetResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp) 38224 tcl.XTcl_Eval(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+24)).Fstring) 38225 tcl.XTcl_DStringFree(tls, bp+24) 38226 *(*uint32)(unsafe.Pointer(bp + 340)) = nFreePages 38227 tcl.XTcl_GetIntFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp), bp+340) 38228 return *(*uint32)(unsafe.Pointer(bp + 340)) 38229 } 38230 38231 func test_autovacuum_pages(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38232 bp := tls.Alloc(1048) 38233 defer tls.Free(1048) 38234 38235 var pData uintptr 38236 38237 var rc int32 38238 var zScript uintptr 38239 if objc != 2 && objc != 3 { 38240 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19501) 38241 return TCL_ERROR 38242 } 38243 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) != 0 { 38244 return TCL_ERROR 38245 } 38246 if objc == 3 { 38247 zScript = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38248 } else { 38249 zScript = uintptr(0) 38250 } 38251 if zScript != 0 { 38252 var nScript size_t = libc.Xstrlen(tls, zScript) 38253 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(AutovacPageData{}))+nScript+uint64(1)) 38254 if pData == uintptr(0) { 38255 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, uintptr(0))) 38256 return TCL_ERROR 38257 } 38258 (*AutovacPageData)(unsafe.Pointer(pData)).Finterp = interp 38259 (*AutovacPageData)(unsafe.Pointer(pData)).FzScript = pData + 1*16 38260 libc.Xmemcpy(tls, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, zScript, nScript+uint64(1)) 38261 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), *(*uintptr)(unsafe.Pointer(&struct { 38262 f func(*libc.TLS, uintptr, uintptr, uint32, uint32, uint32) uint32 38263 }{test_autovacuum_pages_callback})), 38264 pData, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 38265 } else { 38266 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), uintptr(0), uintptr(0), uintptr(0)) 38267 } 38268 if rc != 0 { 38269 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+48, 38270 ts+19513, libc.VaList(bp+16, rc)) 38271 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+48, uintptr(0))) 38272 return TCL_ERROR 38273 } 38274 return TCL_OK 38275 } 38276 38277 func Sqlitetest1_Init(tls *libc.TLS, interp uintptr) int32 { 38278 var i int32 38279 38280 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd1))/uint64(unsafe.Sizeof(struct { 38281 FzName uintptr 38282 FxProc uintptr 38283 }{})); i++ { 38284 tcl.XTcl_CreateCommand(tls, interp, aCmd1[i].FzName, aCmd1[i].FxProc, uintptr(0), uintptr(0)) 38285 } 38286 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd1))/uint64(unsafe.Sizeof(struct { 38287 FzName uintptr 38288 FxProc uintptr 38289 FclientData uintptr 38290 }{})); i++ { 38291 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd1[i].FzName, 38292 aObjCmd1[i].FxProc, aObjCmd1[i].FclientData, uintptr(0)) 38293 } 38294 tcl.XTcl_LinkVar(tls, interp, ts+19551, 38295 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_search_count)), TCL_LINK_INT) 38296 tcl.XTcl_LinkVar(tls, interp, ts+19571, 38297 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_found_count)), TCL_LINK_INT) 38298 tcl.XTcl_LinkVar(tls, interp, ts+19590, 38299 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sort_count)), TCL_LINK_INT) 38300 tcl.XTcl_LinkVar(tls, interp, ts+19608, 38301 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_max_blobsize)), TCL_LINK_INT) 38302 tcl.XTcl_LinkVar(tls, interp, ts+19629, 38303 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_like_count)), TCL_LINK_INT) 38304 tcl.XTcl_LinkVar(tls, interp, ts+19647, 38305 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_interrupt_count)), TCL_LINK_INT) 38306 tcl.XTcl_LinkVar(tls, interp, ts+19670, 38307 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_open_file_count)), TCL_LINK_INT) 38308 tcl.XTcl_LinkVar(tls, interp, ts+19693, 38309 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_current_time)), TCL_LINK_INT) 38310 tcl.XTcl_LinkVar(tls, interp, ts+19713, 38311 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_xferopt_count)), TCL_LINK_INT) 38312 tcl.XTcl_LinkVar(tls, interp, ts+19735, 38313 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_readdb_count)), TCL_LINK_INT) 38314 tcl.XTcl_LinkVar(tls, interp, ts+19762, 38315 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writedb_count)), TCL_LINK_INT) 38316 tcl.XTcl_LinkVar(tls, interp, ts+19790, 38317 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writej_count)), TCL_LINK_INT) 38318 tcl.XTcl_LinkVar(tls, interp, ts+19817, 38319 uintptr(unsafe.Pointer(&unaligned_string_counter)), TCL_LINK_INT) 38320 tcl.XTcl_LinkVar(tls, interp, ts+19842, 38321 uintptr(unsafe.Pointer(&pzNeededCollation)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 38322 { 38323 tcl.XTcl_LinkVar(tls, interp, ts+19871, 38324 uintptr(unsafe.Pointer(&query_plan)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 38325 38326 } 38327 tcl.XTcl_LinkVar(tls, interp, ts+19889, 38328 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_opentemp_count)), TCL_LINK_INT) 38329 tcl.XTcl_LinkVar(tls, interp, ts+19911, 38330 uintptr(unsafe.Pointer(&sqlite_static_bind_value)), TCL_LINK_STRING) 38331 tcl.XTcl_LinkVar(tls, interp, ts+19936, 38332 uintptr(unsafe.Pointer(&sqlite_static_bind_nbyte)), TCL_LINK_INT) 38333 tcl.XTcl_LinkVar(tls, interp, ts+19961, 38334 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_temp_directory)), TCL_LINK_STRING) 38335 tcl.XTcl_LinkVar(tls, interp, ts+19983, 38336 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_data_directory)), TCL_LINK_STRING) 38337 tcl.XTcl_LinkVar(tls, interp, ts+20005, 38338 uintptr(unsafe.Pointer(&bitmask_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 38339 tcl.XTcl_LinkVar(tls, interp, ts+20018, 38340 uintptr(unsafe.Pointer(&longdouble_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 38341 tcl.XTcl_LinkVar(tls, interp, ts+20034, 38342 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sync_count)), TCL_LINK_INT) 38343 tcl.XTcl_LinkVar(tls, interp, ts+20052, 38344 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_fullsync_count)), TCL_LINK_INT) 38345 return TCL_OK 38346 } 38347 38348 var iZero int32 = 0 38349 var aCmd1 = [39]struct { 38350 FzName uintptr 38351 FxProc uintptr 38352 }{ 38353 {FzName: ts + 20074, FxProc: 0}, 38354 {FzName: ts + 20083, FxProc: 0}, 38355 {FzName: ts + 20092, FxProc: 0}, 38356 {FzName: ts + 20112, FxProc: 0}, 38357 {FzName: ts + 20134, FxProc: 0}, 38358 {FzName: ts + 20155, FxProc: 0}, 38359 {FzName: ts + 20175, FxProc: 0}, 38360 {FzName: ts + 20196, FxProc: 0}, 38361 {FzName: ts + 20220, FxProc: 0}, 38362 {FzName: ts + 20243, FxProc: 0}, 38363 {FzName: ts + 20266, FxProc: 0}, 38364 {FzName: ts + 20292, FxProc: 0}, 38365 {FzName: ts + 20315, FxProc: 0}, 38366 {FzName: ts + 20338, FxProc: 0}, 38367 {FzName: ts + 20359, FxProc: 0}, 38368 {FzName: ts + 20385, FxProc: 0}, 38369 {FzName: ts + 20405, FxProc: 0}, 38370 {FzName: ts + 20422, FxProc: 0}, 38371 {FzName: ts + 20435, FxProc: 0}, 38372 {FzName: ts + 20451, FxProc: 0}, 38373 {FzName: ts + 20476, FxProc: 0}, 38374 {FzName: ts + 20490, FxProc: 0}, 38375 {FzName: ts + 20507, FxProc: 0}, 38376 {FzName: ts + 20531, FxProc: 0}, 38377 {FzName: ts + 20556, FxProc: 0}, 38378 {FzName: ts + 20577, FxProc: 0}, 38379 {FzName: ts + 20607, FxProc: 0}, 38380 {FzName: ts + 20620, FxProc: 0}, 38381 {FzName: ts + 20632, FxProc: 0}, 38382 {FzName: ts + 20643, FxProc: 0}, 38383 {FzName: ts + 20655, FxProc: 0}, 38384 {FzName: ts + 20669, FxProc: 0}, 38385 {FzName: ts + 20687, FxProc: 0}, 38386 {FzName: ts + 20710, FxProc: 0}, 38387 {FzName: ts + 20734, FxProc: 0}, 38388 {FzName: ts + 20757, FxProc: 0}, 38389 {FzName: ts + 20778, FxProc: 0}, 38390 {FzName: ts + 20785, FxProc: 0}, 38391 {FzName: ts + 20800, FxProc: 0}, 38392 } 38393 var aObjCmd1 = [165]struct { 38394 FzName uintptr 38395 FxProc uintptr 38396 FclientData uintptr 38397 }{ 38398 {FzName: ts + 20823, FxProc: 0}, 38399 {FzName: ts + 20841, FxProc: 0}, 38400 {FzName: ts + 20859, FxProc: 0, FclientData: 0}, 38401 {FzName: ts + 20872, FxProc: 0}, 38402 {FzName: ts + 20893, FxProc: 0}, 38403 {FzName: ts + 20920, FxProc: 0}, 38404 {FzName: ts + 20934, FxProc: 0}, 38405 {FzName: ts + 20950, FxProc: 0}, 38406 {FzName: ts + 20967, FxProc: 0}, 38407 {FzName: ts + 20982, FxProc: 0}, 38408 {FzName: ts + 20999, FxProc: 0}, 38409 {FzName: ts + 21021, FxProc: 0}, 38410 {FzName: ts + 21045, FxProc: 0}, 38411 {FzName: ts + 21064, FxProc: 0}, 38412 {FzName: ts + 21084, FxProc: 0}, 38413 {FzName: ts + 21102, FxProc: 0}, 38414 {FzName: ts + 21120, FxProc: 0}, 38415 {FzName: ts + 21140, FxProc: 0}, 38416 {FzName: ts + 21158, FxProc: 0}, 38417 {FzName: ts + 21189, FxProc: 0}, 38418 {FzName: ts + 21223, FxProc: 0}, 38419 {FzName: ts + 21243, FxProc: 0}, 38420 {FzName: ts + 21272, FxProc: 0}, 38421 {FzName: ts + 21300, FxProc: 0}, 38422 {FzName: ts + 21329, FxProc: 0}, 38423 {FzName: ts + 21352, FxProc: 0}, 38424 {FzName: ts + 21366, FxProc: 0}, 38425 {FzName: ts + 21382, FxProc: 0}, 38426 {FzName: ts + 21407, FxProc: 0}, 38427 {FzName: ts + 21422, FxProc: 0}, 38428 {FzName: ts + 21443, FxProc: 0}, 38429 {FzName: ts + 21460, FxProc: 0}, 38430 {FzName: ts + 21473, FxProc: 0}, 38431 {FzName: ts + 21488, FxProc: 0}, 38432 {FzName: ts + 21504, FxProc: 0}, 38433 {FzName: ts + 21523, FxProc: 0}, 38434 {FzName: ts + 21541, FxProc: 0}, 38435 {FzName: ts + 21557, FxProc: 0}, 38436 {FzName: ts + 21575, FxProc: 0}, 38437 {FzName: ts + 21594, FxProc: 0}, 38438 {FzName: ts + 21613, FxProc: 0}, 38439 {FzName: ts + 21637, FxProc: 0}, 38440 {FzName: ts + 21658, FxProc: 0}, 38441 {FzName: ts + 21675, FxProc: 0}, 38442 {FzName: ts + 21695, FxProc: 0}, 38443 {FzName: ts + 21709, FxProc: 0}, 38444 {FzName: ts + 21725, FxProc: 0}, 38445 {FzName: ts + 21751, FxProc: 0}, 38446 {FzName: ts + 21767, FxProc: 0}, 38447 {FzName: ts + 21780, FxProc: 0}, 38448 {FzName: ts + 21792, FxProc: 0}, 38449 {FzName: ts + 21813, FxProc: 0}, 38450 {FzName: ts + 21831, FxProc: 0}, 38451 {FzName: ts + 21853, FxProc: 0}, 38452 {FzName: ts + 21876, FxProc: 0}, 38453 {FzName: ts + 21894, FxProc: 0}, 38454 {FzName: ts + 21912, FxProc: 0}, 38455 {FzName: ts + 21935, FxProc: 0}, 38456 {FzName: ts + 21961, FxProc: 0}, 38457 {FzName: ts + 21983, FxProc: 0}, 38458 {FzName: ts + 22004, FxProc: 0}, 38459 {FzName: ts + 22024, FxProc: 0}, 38460 {FzName: ts + 22044, FxProc: 0}, 38461 {FzName: ts + 22068, FxProc: 0}, 38462 {FzName: ts + 22094, FxProc: 0}, 38463 {FzName: ts + 22120, FxProc: 0}, 38464 {FzName: ts + 22143, FxProc: 0}, 38465 {FzName: ts + 22167, FxProc: 0}, 38466 {FzName: ts + 22190, FxProc: 0}, 38467 {FzName: ts + 22220, FxProc: 0}, 38468 {FzName: ts + 22250, FxProc: 0}, 38469 {FzName: ts + 22264, FxProc: 0}, 38470 {FzName: ts + 22292, FxProc: 0}, 38471 {FzName: ts + 22308, FxProc: 0}, 38472 {FzName: ts + 22327, FxProc: 0}, 38473 {FzName: ts + 22344, FxProc: 0}, 38474 {FzName: ts + 22354, FxProc: 0}, 38475 {FzName: ts + 22374, FxProc: 0}, 38476 {FzName: ts + 22397, FxProc: 0}, 38477 {FzName: ts + 22421, FxProc: 0}, 38478 {FzName: ts + 22442, FxProc: 0}, 38479 {FzName: ts + 22454, FxProc: 0}, 38480 {FzName: ts + 22475, FxProc: 0}, 38481 {FzName: ts + 22494, FxProc: 0}, 38482 {FzName: ts + 22514, FxProc: 0}, 38483 {FzName: ts + 22534, FxProc: 0}, 38484 {FzName: ts + 22556, FxProc: 0}, 38485 {FzName: ts + 22577, FxProc: 0, FclientData: 0}, 38486 {FzName: ts + 22597, FxProc: 0, FclientData: 0}, 38487 {FzName: ts + 22617, FxProc: 0, FclientData: 0}, 38488 {FzName: ts + 22636, FxProc: 0, FclientData: 0}, 38489 {FzName: ts + 22657, FxProc: 0, FclientData: 0}, 38490 {FzName: ts + 22681, FxProc: 0, FclientData: 0}, 38491 {FzName: ts + 22710, FxProc: 0, FclientData: 0}, 38492 {FzName: ts + 22736, FxProc: 0, FclientData: 0}, 38493 {FzName: ts + 22763, FxProc: 0, FclientData: 0}, 38494 {FzName: ts + 22786, FxProc: 0, FclientData: 0}, 38495 {FzName: ts + 22808, FxProc: 0, FclientData: 0}, 38496 {FzName: ts + 22830, FxProc: 0}, 38497 {FzName: ts + 22860, FxProc: 0, FclientData: 0}, 38498 {FzName: ts + 22886, 38499 FxProc: 0, FclientData: 0}, 38500 {FzName: ts + 22917, FxProc: 0, FclientData: 0}, 38501 {FzName: ts + 22945, FxProc: 0, FclientData: 0}, 38502 {FzName: ts + 22974, FxProc: 0}, 38503 {FzName: ts + 23002, FxProc: 0}, 38504 {FzName: ts + 23025, FxProc: 0}, 38505 {FzName: ts + 23043, FxProc: 0}, 38506 {FzName: ts + 23059, FxProc: 0}, 38507 {FzName: ts + 23077, FxProc: 0}, 38508 {FzName: ts + 23096, FxProc: 0}, 38509 {FzName: ts + 23115, FxProc: 0}, 38510 {FzName: ts + 23133, FxProc: 0}, 38511 {FzName: ts + 23161, FxProc: 0}, 38512 {FzName: ts + 23189, FxProc: 0}, 38513 {FzName: ts + 23217, FxProc: 0}, 38514 {FzName: ts + 23244, FxProc: 0}, 38515 {FzName: ts + 23270, FxProc: 0}, 38516 {FzName: ts + 23295, FxProc: 0}, 38517 {FzName: ts + 23328, FxProc: 0}, 38518 {FzName: ts + 23349, FxProc: 0}, 38519 {FzName: ts + 23375, FxProc: 0}, 38520 {FzName: ts + 23401, FxProc: 0}, 38521 {FzName: ts + 23430, FxProc: 0}, 38522 {FzName: ts + 23447, FxProc: 0}, 38523 {FzName: ts + 23474, FxProc: 0}, 38524 {FzName: ts + 23491, FxProc: 0}, 38525 {FzName: ts + 23515, FxProc: 0}, 38526 {FzName: ts + 23533, FxProc: 0}, 38527 {FzName: ts + 23559, FxProc: 0}, 38528 {FzName: ts + 23579, FxProc: 0}, 38529 {FzName: ts + 23597, FxProc: 0}, 38530 {FzName: ts + 23625, FxProc: 0}, 38531 {FzName: ts + 23653, FxProc: 0}, 38532 {FzName: ts + 23679, FxProc: 0}, 38533 {FzName: ts + 23709, FxProc: 0}, 38534 {FzName: ts + 23729, FxProc: 0}, 38535 {FzName: ts + 23742, FxProc: 0}, 38536 {FzName: ts + 23764, FxProc: 0}, 38537 {FzName: ts + 23787, FxProc: 0}, 38538 {FzName: ts + 23813, FxProc: 0}, 38539 {FzName: ts + 23840, FxProc: 0}, 38540 {FzName: ts + 23857, FxProc: 0}, 38541 {FzName: ts + 23882, FxProc: 0}, 38542 {FzName: ts + 23903, FxProc: 0}, 38543 {FzName: ts + 23913, FxProc: 0}, 38544 {FzName: ts + 23935, FxProc: 0}, 38545 {FzName: ts + 23956, FxProc: 0}, 38546 {FzName: ts + 23981, FxProc: 0}, 38547 {FzName: ts + 24004, FxProc: 0}, 38548 {FzName: ts + 24025, FxProc: 0}, 38549 {FzName: ts + 24047, FxProc: 0}, 38550 {FzName: ts + 24069, FxProc: 0}, 38551 {FzName: ts + 24090, FxProc: 0}, 38552 {FzName: ts + 24115, FxProc: 0}, 38553 {FzName: ts + 24141, FxProc: 0}, 38554 {FzName: ts + 24168, FxProc: 0}, 38555 {FzName: ts + 24194, FxProc: 0}, 38556 {FzName: ts + 24218, FxProc: 0}, 38557 {FzName: ts + 24237, FxProc: 0}, 38558 {FzName: ts + 24255, FxProc: 0}, 38559 {FzName: ts + 24280, FxProc: 0}, 38560 {FzName: ts + 24305, FxProc: 0}, 38561 {FzName: ts + 24318, FxProc: 0}, 38562 {FzName: ts + 24332, FxProc: 0}, 38563 {FzName: ts + 24358, FxProc: 0}, 38564 } 38565 var bitmask_size int32 = int32(uint64(unsafe.Sizeof(Bitmask(0))) * uint64(8)) 38566 var longdouble_size int32 = int32(unsafe.Sizeof(float64(0))) 38567 var query_plan uintptr = ts + 24386 38568 38569 var test_pagesize int32 = 1024 38570 38571 func pager_test_reiniter(tls *libc.TLS, pNotUsed uintptr) { 38572 return 38573 } 38574 38575 func pager_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38576 bp := tls.Alloc(192) 38577 defer tls.Free(192) 38578 38579 var rc int32 38580 38581 if argc != 3 { 38582 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38583 ts+24412, 0)) 38584 return TCL_ERROR 38585 } 38586 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 38587 return TCL_ERROR 38588 } 38589 rc = sqlite3.Xsqlite3PagerOpen(tls, sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)), bp+80, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, 0, 38590 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB, 38591 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{pager_test_reiniter}))) 38592 if rc != SQLITE_OK { 38593 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38594 return TCL_ERROR 38595 } 38596 sqlite3.Xsqlite3PagerSetCachesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 38597 *(*u32)(unsafe.Pointer(bp + 88)) = u32(test_pagesize) 38598 sqlite3.Xsqlite3PagerSetPagesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), bp+88, -1) 38599 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+92, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 38600 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, 0)) 38601 return TCL_OK 38602 } 38603 38604 func pager_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38605 bp := tls.Alloc(48) 38606 defer tls.Free(48) 38607 38608 var pPager uintptr 38609 var rc int32 38610 if argc != 2 { 38611 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38612 ts+24430, 0)) 38613 return TCL_ERROR 38614 } 38615 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38616 rc = sqlite3.Xsqlite3PagerClose(tls, pPager, uintptr(0)) 38617 if rc != SQLITE_OK { 38618 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38619 return TCL_ERROR 38620 } 38621 return TCL_OK 38622 } 38623 38624 func pager_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38625 bp := tls.Alloc(48) 38626 defer tls.Free(48) 38627 38628 var pPager uintptr 38629 var rc int32 38630 if argc != 2 { 38631 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38632 ts+24430, 0)) 38633 return TCL_ERROR 38634 } 38635 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38636 rc = sqlite3.Xsqlite3PagerRollback(tls, pPager) 38637 if rc != SQLITE_OK { 38638 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38639 return TCL_ERROR 38640 } 38641 return TCL_OK 38642 } 38643 38644 func pager_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38645 bp := tls.Alloc(64) 38646 defer tls.Free(64) 38647 38648 var pPager uintptr 38649 var rc int32 38650 if argc != 2 { 38651 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38652 ts+24430, 0)) 38653 return TCL_ERROR 38654 } 38655 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38656 rc = sqlite3.Xsqlite3PagerCommitPhaseOne(tls, pPager, uintptr(0), 0) 38657 if rc != SQLITE_OK { 38658 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38659 return TCL_ERROR 38660 } 38661 rc = sqlite3.Xsqlite3PagerCommitPhaseTwo(tls, pPager) 38662 if rc != SQLITE_OK { 38663 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38664 return TCL_ERROR 38665 } 38666 return TCL_OK 38667 } 38668 38669 func pager_stmt_begin(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38670 bp := tls.Alloc(48) 38671 defer tls.Free(48) 38672 38673 var pPager uintptr 38674 var rc int32 38675 if argc != 2 { 38676 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38677 ts+24430, 0)) 38678 return TCL_ERROR 38679 } 38680 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38681 rc = sqlite3.Xsqlite3PagerOpenSavepoint(tls, pPager, 1) 38682 if rc != SQLITE_OK { 38683 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38684 return TCL_ERROR 38685 } 38686 return TCL_OK 38687 } 38688 38689 func pager_stmt_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38690 bp := tls.Alloc(48) 38691 defer tls.Free(48) 38692 38693 var pPager uintptr 38694 var rc int32 38695 if argc != 2 { 38696 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38697 ts+24430, 0)) 38698 return TCL_ERROR 38699 } 38700 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38701 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_ROLLBACK, 0) 38702 sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 38703 if rc != SQLITE_OK { 38704 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38705 return TCL_ERROR 38706 } 38707 return TCL_OK 38708 } 38709 38710 func pager_stmt_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38711 bp := tls.Alloc(48) 38712 defer tls.Free(48) 38713 38714 var pPager uintptr 38715 var rc int32 38716 if argc != 2 { 38717 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38718 ts+24430, 0)) 38719 return TCL_ERROR 38720 } 38721 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38722 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 38723 if rc != SQLITE_OK { 38724 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38725 return TCL_ERROR 38726 } 38727 return TCL_OK 38728 } 38729 38730 func pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38731 bp := tls.Alloc(140) 38732 defer tls.Free(140) 38733 38734 var pPager uintptr 38735 var i int32 38736 var a uintptr 38737 if argc != 2 { 38738 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38739 ts+24430, 0)) 38740 return TCL_ERROR 38741 } 38742 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38743 a = sqlite3.Xsqlite3PagerStats(tls, pPager) 38744 for i = 0; i < 9; i++ { 38745 tcl.XTcl_AppendElement(tls, interp, zName[i]) 38746 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 38747 tcl.XTcl_AppendElement(tls, interp, bp+40) 38748 } 38749 return TCL_OK 38750 } 38751 38752 var zName = [9]uintptr{ 38753 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 38754 ts + 24448, ts + 24452, ts + 24457, 38755 } 38756 38757 func pager_pagecount(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38758 bp := tls.Alloc(160) 38759 defer tls.Free(160) 38760 38761 var pPager uintptr 38762 38763 if argc != 2 { 38764 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38765 ts+24430, 0)) 38766 return TCL_ERROR 38767 } 38768 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38769 sqlite3.Xsqlite3PagerPagecount(tls, pPager, bp+56) 38770 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 56)))) 38771 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 38772 return TCL_OK 38773 } 38774 38775 func page_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38776 bp := tls.Alloc(188) 38777 defer tls.Free(188) 38778 38779 var pPager uintptr 38780 38781 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 38782 38783 var rc int32 38784 if argc != 3 { 38785 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38786 ts+24462, 0)) 38787 return TCL_ERROR 38788 } 38789 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38790 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 38791 return TCL_ERROR 38792 } 38793 rc = sqlite3.Xsqlite3PagerSharedLock(tls, pPager) 38794 if rc == SQLITE_OK { 38795 rc = sqlite3.Xsqlite3PagerGet(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 72))), bp+80, 0) 38796 } 38797 if rc != SQLITE_OK { 38798 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38799 return TCL_ERROR 38800 } 38801 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 38802 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 38803 return TCL_OK 38804 } 38805 38806 func page_lookup(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38807 bp := tls.Alloc(160) 38808 defer tls.Free(160) 38809 38810 var pPager uintptr 38811 38812 var pPage uintptr 38813 38814 if argc != 3 { 38815 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38816 ts+24462, 0)) 38817 return TCL_ERROR 38818 } 38819 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38820 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 38821 return TCL_ERROR 38822 } 38823 pPage = sqlite3.Xsqlite3PagerLookup(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 56)))) 38824 if pPage != 0 { 38825 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+9889, libc.VaList(bp+32, pPage)) 38826 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 38827 } 38828 return TCL_OK 38829 } 38830 38831 func pager_truncate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38832 bp := tls.Alloc(36) 38833 defer tls.Free(36) 38834 38835 var pPager uintptr 38836 38837 if argc != 3 { 38838 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38839 ts+24462, 0)) 38840 return TCL_ERROR 38841 } 38842 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38843 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 38844 return TCL_ERROR 38845 } 38846 sqlite3.Xsqlite3PagerTruncateImage(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 32)))) 38847 return TCL_OK 38848 } 38849 38850 func page_unref(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38851 bp := tls.Alloc(32) 38852 defer tls.Free(32) 38853 38854 var pPage uintptr 38855 if argc != 2 { 38856 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38857 ts+24472, 0)) 38858 return TCL_ERROR 38859 } 38860 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38861 sqlite3.Xsqlite3PagerUnref(tls, pPage) 38862 return TCL_OK 38863 } 38864 38865 func page_read(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38866 bp := tls.Alloc(148) 38867 defer tls.Free(148) 38868 38869 var pPage uintptr 38870 if argc != 2 { 38871 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38872 ts+24472, 0)) 38873 return TCL_ERROR 38874 } 38875 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38876 libc.Xmemcpy(tls, bp+48, sqlite3.Xsqlite3PagerGetData(tls, pPage), uint64(unsafe.Sizeof([100]int8{}))) 38877 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 38878 return TCL_OK 38879 } 38880 38881 func page_number(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38882 bp := tls.Alloc(156) 38883 defer tls.Free(156) 38884 38885 var pPage uintptr 38886 if argc != 2 { 38887 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38888 ts+24472, 0)) 38889 return TCL_ERROR 38890 } 38891 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38892 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+56, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3PagerPagenumber(tls, pPage))) 38893 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 38894 return TCL_OK 38895 } 38896 38897 func page_write(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38898 bp := tls.Alloc(48) 38899 defer tls.Free(48) 38900 38901 var pPage uintptr 38902 var pData uintptr 38903 var rc int32 38904 if argc != 3 { 38905 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38906 ts+24479, 0)) 38907 return TCL_ERROR 38908 } 38909 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38910 rc = sqlite3.Xsqlite3PagerWrite(tls, pPage) 38911 if rc != SQLITE_OK { 38912 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38913 return TCL_ERROR 38914 } 38915 pData = sqlite3.Xsqlite3PagerGetData(tls, pPage) 38916 libc.Xstrncpy(tls, pData, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(test_pagesize-1)) 38917 *(*int8)(unsafe.Pointer(pData + uintptr(test_pagesize-1))) = int8(0) 38918 return TCL_OK 38919 } 38920 38921 func fake_big_file(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38922 bp := tls.Alloc(96) 38923 defer tls.Free(96) 38924 38925 var pVfs uintptr 38926 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 38927 var rc int32 38928 38929 var offset i64 38930 var zFile uintptr 38931 var nFile int32 38932 if argc != 3 { 38933 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38934 ts+24491, 0)) 38935 return TCL_ERROR 38936 } 38937 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 38938 return TCL_ERROR 38939 } 38940 38941 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 38942 nFile = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 38943 zFile = sqlite3.Xsqlite3_malloc(tls, nFile+2) 38944 if zFile == uintptr(0) { 38945 return TCL_ERROR 38946 } 38947 libc.Xmemcpy(tls, zFile, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(nFile+1)) 38948 *(*int8)(unsafe.Pointer(zFile + uintptr(nFile+1))) = int8(0) 38949 rc = sqlite3.Xsqlite3OsOpenMalloc(tls, pVfs, zFile, bp+88, 38950 SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB, uintptr(0)) 38951 if rc != 0 { 38952 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+24510, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38953 sqlite3.Xsqlite3_free(tls, zFile) 38954 return TCL_ERROR 38955 } 38956 offset = i64(*(*int32)(unsafe.Pointer(bp + 80))) 38957 offset = offset * int64(1024*1024) 38958 rc = sqlite3.Xsqlite3OsWrite(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), ts+24524, 14, offset) 38959 sqlite3.Xsqlite3OsCloseFree(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 38960 sqlite3.Xsqlite3_free(tls, zFile) 38961 if rc != 0 { 38962 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, ts+24538, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38963 return TCL_ERROR 38964 } 38965 return TCL_OK 38966 } 38967 38968 func testPendingByte(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38969 bp := tls.Alloc(44) 38970 defer tls.Free(44) 38971 38972 var rc int32 38973 if argc != 2 { 38974 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38975 ts+24553, uintptr(0))) 38976 return TCL_ERROR 38977 } 38978 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 38979 return TCL_ERROR 38980 } 38981 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PENDING_BYTE, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 40)))) 38982 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 38983 return TCL_OK 38984 } 38985 38986 var faultSimInterp uintptr = uintptr(0) 38987 var faultSimScriptSize int32 = 0 38988 var faultSimScript uintptr 38989 38990 func faultSimCallback(tls *libc.TLS, x int32) int32 { 38991 bp := tls.Alloc(38) 38992 defer tls.Free(38) 38993 38994 var i int32 38995 var isNeg int32 38996 var rc int32 38997 if x == 0 { 38998 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), ts+14193, uint64(2)) 38999 } else { 39000 if x < 0 { 39001 isNeg = 1 39002 x = -x 39003 } else { 39004 isNeg = 0 39005 } 39006 *(*int8)(unsafe.Pointer(bp + 8 + 29)) = int8(0) 39007 i = int32(uint64(unsafe.Sizeof([30]int8{})) - uint64(2)) 39008 __1: 39009 if !(i > 0 && x > 0) { 39010 goto __3 39011 } 39012 { 39013 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8(x%10 + '0') 39014 39015 } 39016 goto __2 39017 __2: 39018 i-- 39019 x = x / 10 39020 goto __1 39021 goto __3 39022 __3: 39023 ; 39024 if isNeg != 0 { 39025 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(libc.PostDecInt32(&i, 1)))) = int8('-') 39026 } 39027 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), bp+8+uintptr(i)+uintptr(1), uint64(unsafe.Sizeof([30]int8{}))-uint64(i)) 39028 } 39029 rc = tcl.XTcl_Eval(tls, faultSimInterp, faultSimScript) 39030 if rc != 0 { 39031 libc.Xfprintf(tls, uintptr(unsafe.Pointer(&libc.X__sF))+2*152, ts+24568, libc.VaList(bp, faultSimScript)) 39032 rc = SQLITE_ERROR 39033 } else { 39034 rc = libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, faultSimInterp)) 39035 } 39036 tcl.XTcl_ResetResult(tls, faultSimInterp) 39037 return rc 39038 } 39039 39040 func faultInstallCmd(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39041 bp := tls.Alloc(64) 39042 defer tls.Free(64) 39043 39044 var zScript uintptr 39045 var nScript int32 39046 var rc int32 39047 if argc != 1 && argc != 2 { 39048 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39049 ts+24604, uintptr(0))) 39050 } 39051 if argc == 2 { 39052 zScript = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 39053 } else { 39054 zScript = ts + 584 39055 } 39056 nScript = int32(libc.Xstrlen(tls, zScript)) 39057 if faultSimScript != 0 { 39058 libc.Xfree(tls, faultSimScript) 39059 faultSimScript = uintptr(0) 39060 } 39061 if nScript == 0 { 39062 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_FAULT_INSTALL, libc.VaList(bp+32, 0)) 39063 } else { 39064 faultSimScript = libc.Xmalloc(tls, uint64(nScript+100)) 39065 if faultSimScript == uintptr(0) { 39066 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2069, uintptr(0))) 39067 return SQLITE_ERROR 39068 } 39069 libc.Xmemcpy(tls, faultSimScript, zScript, uint64(nScript)) 39070 *(*int8)(unsafe.Pointer(faultSimScript + uintptr(nScript))) = int8(' ') 39071 faultSimScriptSize = nScript + 1 39072 faultSimInterp = interp 39073 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})))) 39074 } 39075 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39076 return SQLITE_OK 39077 } 39078 39079 func testBitvecBuiltinTest(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39080 bp := tls.Alloc(452) 39081 defer tls.Free(452) 39082 39083 var rc int32 39084 var nProg int32 = 0 39085 39086 var z uintptr 39087 if argc != 3 { 39088 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39089 ts+24613, uintptr(0))) 39090 } 39091 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 39092 return TCL_ERROR 39093 } 39094 z = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 39095 for nProg < 99 && *(*int8)(unsafe.Pointer(z)) != 0 { 39096 for *(*int8)(unsafe.Pointer(z)) != 0 && !(int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0) { 39097 z++ 39098 } 39099 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 39100 break 39101 } 39102 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(libc.PostIncInt32(&nProg, 1))*4)) = libc.Xatoi(tls, z) 39103 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 39104 z++ 39105 } 39106 } 39107 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(nProg)*4)) = 0 39108 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BITVEC_TEST, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 48)), bp+52)) 39109 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39110 return TCL_OK 39111 } 39112 39113 func Sqlitetest2_Init(tls *libc.TLS, interp uintptr) int32 { 39114 var i int32 39115 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd2))/uint64(unsafe.Sizeof(struct { 39116 FzName uintptr 39117 FxProc uintptr 39118 }{})); i++ { 39119 tcl.XTcl_CreateCommand(tls, interp, aCmd2[i].FzName, aCmd2[i].FxProc, uintptr(0), uintptr(0)) 39120 } 39121 tcl.XTcl_LinkVar(tls, interp, ts+24628, 39122 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_pending)), TCL_LINK_INT) 39123 tcl.XTcl_LinkVar(tls, interp, ts+24652, 39124 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_persist)), TCL_LINK_INT) 39125 tcl.XTcl_LinkVar(tls, interp, ts+24676, 39126 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hit)), TCL_LINK_INT) 39127 tcl.XTcl_LinkVar(tls, interp, ts+24696, 39128 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hardhit)), TCL_LINK_INT) 39129 tcl.XTcl_LinkVar(tls, interp, ts+24720, 39130 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull_pending)), TCL_LINK_INT) 39131 tcl.XTcl_LinkVar(tls, interp, ts+24744, 39132 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull)), TCL_LINK_INT) 39133 tcl.XTcl_LinkVar(tls, interp, ts+24760, 39134 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3PendingByte)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39135 return TCL_OK 39136 } 39137 39138 var aCmd2 = [20]struct { 39139 FzName uintptr 39140 FxProc uintptr 39141 }{ 39142 {FzName: ts + 24780, FxProc: 0}, 39143 {FzName: ts + 24791, FxProc: 0}, 39144 {FzName: ts + 24803, FxProc: 0}, 39145 {FzName: ts + 24816, FxProc: 0}, 39146 {FzName: ts + 24831, FxProc: 0}, 39147 {FzName: ts + 24848, FxProc: 0}, 39148 {FzName: ts + 24866, FxProc: 0}, 39149 {FzName: ts + 24886, FxProc: 0}, 39150 {FzName: ts + 24898, FxProc: 0}, 39151 {FzName: ts + 24914, FxProc: 0}, 39152 {FzName: ts + 24923, FxProc: 0}, 39153 {FzName: ts + 24935, FxProc: 0}, 39154 {FzName: ts + 24946, FxProc: 0}, 39155 {FzName: ts + 24956, FxProc: 0}, 39156 {FzName: ts + 24967, FxProc: 0}, 39157 {FzName: ts + 24979, FxProc: 0}, 39158 {FzName: ts + 24994, FxProc: 0}, 39159 {FzName: ts + 25008, FxProc: 0}, 39160 {FzName: ts + 25033, FxProc: 0}, 39161 {FzName: ts + 25067, FxProc: 0}, 39162 } 39163 39164 type Btree = Btree1 39165 type BtCursor = BtCursor1 39166 type BtShared = BtShared1 39167 39168 type MemPage1 = struct { 39169 FisInit u8 39170 FintKey u8 39171 FintKeyLeaf u8 39172 F__ccgo_pad1 [1]byte 39173 Fpgno Pgno 39174 Fleaf u8 39175 FhdrOffset u8 39176 FchildPtrSize u8 39177 Fmax1bytePayload u8 39178 FnOverflow u8 39179 F__ccgo_pad2 [1]byte 39180 FmaxLocal u16 39181 FminLocal u16 39182 FcellOffset u16 39183 FnFree int32 39184 FnCell u16 39185 FmaskPage u16 39186 FaiOvfl [4]u16 39187 F__ccgo_pad3 [4]byte 39188 FapOvfl [4]uintptr 39189 FpBt uintptr 39190 FaData uintptr 39191 FaDataEnd uintptr 39192 FaCellIdx uintptr 39193 FaDataOfst uintptr 39194 FpDbPage uintptr 39195 FxCellSize uintptr 39196 FxParseCell uintptr 39197 } 39198 39199 type MemPage = MemPage1 39200 type BtLock1 = struct { 39201 FpBtree uintptr 39202 FiTable Pgno 39203 FeLock u8 39204 F__ccgo_pad1 [3]byte 39205 FpNext uintptr 39206 } 39207 39208 type BtLock = BtLock1 39209 type CellInfo1 = struct { 39210 FnKey i64 39211 FpPayload uintptr 39212 FnPayload u32 39213 FnLocal u16 39214 FnSize u16 39215 } 39216 39217 type CellInfo = CellInfo1 39218 39219 type IntegrityCk1 = struct { 39220 FpBt uintptr 39221 FpPager uintptr 39222 FaPgRef uintptr 39223 FnPage Pgno 39224 FmxErr int32 39225 FnErr int32 39226 FbOomFault int32 39227 FzPfx uintptr 39228 Fv1 Pgno 39229 Fv2 int32 39230 FerrMsg StrAccum 39231 Fheap uintptr 39232 Fdb uintptr 39233 } 39234 39235 type IntegrityCk = IntegrityCk1 39236 39237 var sDb sqlite31 39238 var nRefSqlite3 int32 = 0 39239 39240 func btree_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39241 bp := tls.Alloc(188) 39242 defer tls.Free(188) 39243 39244 var rc int32 39245 39246 var n int32 39247 var zFilename uintptr 39248 if argc != 3 { 39249 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39250 ts+25102, 0)) 39251 return TCL_ERROR 39252 } 39253 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39254 return TCL_ERROR 39255 } 39256 nRefSqlite3++ 39257 if nRefSqlite3 == 1 { 39258 sDb.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39259 sDb.Fmutex = sqlite3.Xsqlite3MutexAlloc(tls, SQLITE_MUTEX_RECURSIVE) 39260 sqlite3.Xsqlite3_mutex_enter(tls, sDb.Fmutex) 39261 } 39262 n = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 39263 zFilename = sqlite3.Xsqlite3_malloc(tls, n+2) 39264 if zFilename == uintptr(0) { 39265 return TCL_ERROR 39266 } 39267 libc.Xmemcpy(tls, zFilename, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint64(n+1)) 39268 *(*int8)(unsafe.Pointer(zFilename + uintptr(n+1))) = int8(0) 39269 rc = sqlite3.Xsqlite3BtreeOpen(tls, sDb.FpVfs, zFilename, uintptr(unsafe.Pointer(&sDb)), bp+80, 0, 39270 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB) 39271 sqlite3.Xsqlite3_free(tls, zFilename) 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 sqlite3.Xsqlite3BtreeSetCacheSize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 39277 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39278 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 39279 return TCL_OK 39280 } 39281 39282 func btree_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39283 bp := tls.Alloc(48) 39284 defer tls.Free(48) 39285 39286 var pBt uintptr 39287 var rc int32 39288 if argc != 2 { 39289 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39290 ts+24430, 0)) 39291 return TCL_ERROR 39292 } 39293 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39294 rc = sqlite3.Xsqlite3BtreeClose(tls, pBt) 39295 if rc != SQLITE_OK { 39296 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39297 return TCL_ERROR 39298 } 39299 nRefSqlite3-- 39300 if nRefSqlite3 == 0 { 39301 sqlite3.Xsqlite3_mutex_leave(tls, sDb.Fmutex) 39302 sqlite3.Xsqlite3_mutex_free(tls, sDb.Fmutex) 39303 sDb.Fmutex = uintptr(0) 39304 sDb.FpVfs = uintptr(0) 39305 } 39306 return TCL_OK 39307 } 39308 39309 func btree_begin_transaction(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39310 bp := tls.Alloc(48) 39311 defer tls.Free(48) 39312 39313 var pBt uintptr 39314 var rc int32 39315 if argc != 2 { 39316 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39317 ts+24430, 0)) 39318 return TCL_ERROR 39319 } 39320 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39321 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39322 rc = sqlite3.Xsqlite3BtreeBeginTrans(tls, pBt, 1, uintptr(0)) 39323 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39324 if rc != SQLITE_OK { 39325 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39326 return TCL_ERROR 39327 } 39328 return TCL_OK 39329 } 39330 39331 func btree_pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39332 bp := tls.Alloc(140) 39333 defer tls.Free(140) 39334 39335 var pBt uintptr 39336 var i int32 39337 var a uintptr 39338 39339 if argc != 2 { 39340 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39341 ts+24430, 0)) 39342 return TCL_ERROR 39343 } 39344 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39345 39346 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39347 39348 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39349 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 39350 for i = 0; i < 11; i++ { 39351 tcl.XTcl_AppendElement(tls, interp, zName1[i]) 39352 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 39353 tcl.XTcl_AppendElement(tls, interp, bp+40) 39354 } 39355 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39356 39357 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39358 return TCL_OK 39359 } 39360 39361 var zName1 = [11]uintptr{ 39362 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 39363 ts + 24448, ts + 24452, ts + 24457, ts + 25126, ts + 25131, 39364 } 39365 39366 func btree_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39367 bp := tls.Alloc(110) 39368 defer tls.Free(110) 39369 39370 var pBt uintptr 39371 39372 var pCur uintptr 39373 var rc int32 = SQLITE_OK 39374 39375 if argc != 4 { 39376 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39377 ts+25137, 0)) 39378 return TCL_ERROR 39379 } 39380 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39381 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39382 return TCL_ERROR 39383 } 39384 if tcl.XTcl_GetBoolean(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+76) != 0 { 39385 return TCL_ERROR 39386 } 39387 if *(*int32)(unsafe.Pointer(bp + 76)) != 0 { 39388 *(*int32)(unsafe.Pointer(bp + 76)) = BTREE_WRCSR 39389 } 39390 pCur = tcl.XTcl_Alloc(tls, uint32(sqlite3.Xsqlite3BtreeCursorSize(tls))) 39391 libc.Xmemset(tls, pCur, 0, uint64(sqlite3.Xsqlite3BtreeCursorSize(tls))) 39392 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39393 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39394 rc = sqlite3.Xsqlite3BtreeLockTable(tls, pBt, *(*int32)(unsafe.Pointer(bp + 72)), libc.BoolUint8(!!(*(*int32)(unsafe.Pointer(bp + 76)) != 0))) 39395 if rc == SQLITE_OK { 39396 rc = sqlite3.Xsqlite3BtreeCursor(tls, pBt, uint32(*(*int32)(unsafe.Pointer(bp + 72))), *(*int32)(unsafe.Pointer(bp + 76)), uintptr(0), pCur) 39397 } 39398 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39399 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39400 if rc != 0 { 39401 tcl.XTcl_Free(tls, pCur) 39402 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39403 return TCL_ERROR 39404 } 39405 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+80, ts+9889, libc.VaList(bp+48, pCur)) 39406 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 39407 return SQLITE_OK 39408 } 39409 39410 func btree_close_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39411 bp := tls.Alloc(48) 39412 defer tls.Free(48) 39413 39414 var pCur uintptr 39415 var rc int32 39416 39417 if argc != 2 { 39418 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39419 ts+24430, 0)) 39420 return TCL_ERROR 39421 } 39422 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39423 { 39424 var pBt uintptr = (*BtCursor)(unsafe.Pointer(pCur)).FpBtree 39425 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39426 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39427 rc = sqlite3.Xsqlite3BtreeCloseCursor(tls, pCur) 39428 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39429 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39430 39431 } 39432 tcl.XTcl_Free(tls, pCur) 39433 if rc != 0 { 39434 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39435 return TCL_ERROR 39436 } 39437 return SQLITE_OK 39438 } 39439 39440 func btree_next(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39441 bp := tls.Alloc(172) 39442 defer tls.Free(172) 39443 39444 var pCur uintptr 39445 var rc int32 39446 var res int32 = 0 39447 39448 if argc != 2 { 39449 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39450 ts+24430, 0)) 39451 return TCL_ERROR 39452 } 39453 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39454 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39455 rc = sqlite3.Xsqlite3BtreeNext(tls, pCur, 0) 39456 if rc == SQLITE_DONE { 39457 res = 1 39458 rc = SQLITE_OK 39459 } 39460 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39461 if rc != 0 { 39462 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39463 return TCL_ERROR 39464 } 39465 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, res)) 39466 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 39467 return SQLITE_OK 39468 } 39469 39470 func btree_first(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39471 bp := tls.Alloc(176) 39472 defer tls.Free(176) 39473 39474 var pCur uintptr 39475 var rc int32 39476 *(*int32)(unsafe.Pointer(bp + 72)) = 0 39477 39478 if argc != 2 { 39479 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39480 ts+24430, 0)) 39481 return TCL_ERROR 39482 } 39483 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39484 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39485 rc = sqlite3.Xsqlite3BtreeFirst(tls, pCur, bp+72) 39486 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39487 if rc != 0 { 39488 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39489 return TCL_ERROR 39490 } 39491 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 72)))) 39492 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+76, 0)) 39493 return SQLITE_OK 39494 } 39495 39496 func btree_eof(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39497 bp := tls.Alloc(106) 39498 defer tls.Free(106) 39499 39500 var pCur uintptr 39501 var rc int32 39502 39503 if argc != 2 { 39504 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39505 ts+24430, 0)) 39506 return TCL_ERROR 39507 } 39508 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39509 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39510 rc = sqlite3.Xsqlite3BtreeEof(tls, pCur) 39511 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39512 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+1333, libc.VaList(bp+32, rc)) 39513 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 39514 return SQLITE_OK 39515 } 39516 39517 func btree_payload_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39518 bp := tls.Alloc(106) 39519 defer tls.Free(106) 39520 39521 var pCur uintptr 39522 var n u32 39523 39524 if argc != 2 { 39525 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39526 ts+24430, 0)) 39527 return TCL_ERROR 39528 } 39529 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39530 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39531 n = sqlite3.Xsqlite3BtreePayloadSize(tls, pCur) 39532 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39533 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+17791, libc.VaList(bp+32, n)) 39534 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 39535 return SQLITE_OK 39536 } 39537 39538 func btree_varint_test(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39539 bp := tls.Alloc(516) 39540 defer tls.Free(516) 39541 39542 var in u64 39543 39544 var n1 int32 39545 var n2 int32 39546 var i int32 39547 var j int32 39548 39549 if argc != 5 { 39550 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39551 ts+25161, 0)) 39552 return TCL_ERROR 39553 } 39554 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+184) != 0 { 39555 return TCL_ERROR 39556 } 39557 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+188) != 0 { 39558 return TCL_ERROR 39559 } 39560 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+192) != 0 { 39561 return TCL_ERROR 39562 } 39563 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+196) != 0 { 39564 return TCL_ERROR 39565 } 39566 in = u64(*(*u32)(unsafe.Pointer(bp + 184))) 39567 in = in * u64(*(*u32)(unsafe.Pointer(bp + 188))) 39568 for i = 0; i < int32(*(*u32)(unsafe.Pointer(bp + 192))); i++ { 39569 n1 = sqlite3.Xsqlite3PutVarint(tls, bp+200, in) 39570 if n1 > 9 || n1 < 1 { 39571 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39572 ts+25196, libc.VaList(bp+32, n1)) 39573 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+300, 0)) 39574 return TCL_ERROR 39575 } 39576 n2 = int32(sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504)) 39577 if n1 != n2 { 39578 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39579 ts+25246, libc.VaList(bp+56, n1, n2)) 39580 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, bp+300, 0)) 39581 return TCL_ERROR 39582 } 39583 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 39584 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39585 ts+25294, libc.VaList(bp+88, in, *(*u64)(unsafe.Pointer(bp + 504)))) 39586 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, bp+300, 0)) 39587 return TCL_ERROR 39588 } 39589 if in&uint64(0xffffffff) == in { 39590 n2 = int32(func() uint8 { 39591 if int32(*(*uint8)(unsafe.Pointer(bp + 200))) < int32(u8(0x80)) { 39592 return uint8(func() int32 { *(*u32)(unsafe.Pointer(bp + 512)) = u32(*(*uint8)(unsafe.Pointer(bp + 200))); return 1 }()) 39593 } 39594 return sqlite3.Xsqlite3GetVarint32(tls, bp+200, bp+512) 39595 }()) 39596 *(*u64)(unsafe.Pointer(bp + 504)) = u64(*(*u32)(unsafe.Pointer(bp + 512))) 39597 if n1 != n2 { 39598 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39599 ts+25333, 39600 libc.VaList(bp+120, n1, n2)) 39601 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+136, bp+300, 0)) 39602 return TCL_ERROR 39603 } 39604 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 39605 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39606 ts+25383, 39607 libc.VaList(bp+152, in, *(*u64)(unsafe.Pointer(bp + 504)))) 39608 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+168, bp+300, 0)) 39609 return TCL_ERROR 39610 } 39611 } 39612 39613 for j = 0; j < 19; j++ { 39614 sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504) 39615 } 39616 in = in + u64(*(*u32)(unsafe.Pointer(bp + 196))) 39617 } 39618 return TCL_OK 39619 } 39620 39621 func btree_from_db(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39622 bp := tls.Alloc(236) 39623 defer tls.Free(236) 39624 39625 var db uintptr 39626 var pBt uintptr 39627 var iDb int32 = 0 39628 39629 if argc != 2 && argc != 3 { 39630 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39631 ts+25439, 0)) 39632 return TCL_ERROR 39633 } 39634 39635 if 1 != tcl.XTcl_GetCommandInfo(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) { 39636 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25455, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+11945, 0)) 39637 return TCL_ERROR 39638 } 39639 if argc == 3 { 39640 iDb = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 39641 } 39642 39643 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 72)).FobjClientData)) 39644 39645 pBt = (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(db)).FaDb + uintptr(iDb)*32)).FpBt 39646 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+136, ts+9889, libc.VaList(bp+64, pBt)) 39647 tcl.XTcl_SetResult(tls, interp, bp+136, uintptr(1)) 39648 return TCL_OK 39649 } 39650 39651 func btree_ismemdb(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39652 bp := tls.Alloc(32) 39653 defer tls.Free(32) 39654 39655 var pBt uintptr 39656 var res int32 39657 var pFile uintptr 39658 39659 if argc != 2 { 39660 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39661 ts+24430, 0)) 39662 return TCL_ERROR 39663 } 39664 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39665 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39666 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39667 pFile = sqlite3.Xsqlite3PagerFile(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 39668 res = libc.Bool32((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods == uintptr(0)) 39669 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39670 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39671 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(res != 0))) 39672 return SQLITE_OK 39673 } 39674 39675 func btree_set_cache_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39676 bp := tls.Alloc(36) 39677 defer tls.Free(36) 39678 39679 var pBt uintptr 39680 39681 if argc != 3 { 39682 tcl.XTcl_AppendResult(tls, 39683 interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+25476, 0)) 39684 return TCL_ERROR 39685 } 39686 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39687 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 39688 return TCL_ERROR 39689 } 39690 39691 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39692 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39693 sqlite3.Xsqlite3BtreeSetCacheSize(tls, pBt, *(*int32)(unsafe.Pointer(bp + 32))) 39694 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39695 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39696 return TCL_OK 39697 } 39698 39699 func btree_insert(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39700 bp := tls.Alloc(68) 39701 defer tls.Free(68) 39702 39703 var pCur uintptr 39704 39705 if objc != 4 && objc != 3 { 39706 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+25488) 39707 return TCL_ERROR 39708 } 39709 39710 libc.Xmemset(tls, bp+16, 0, uint64(unsafe.Sizeof(BtreePayload{}))) 39711 if objc == 4 { 39712 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 39713 return TCL_ERROR 39714 } 39715 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 39716 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16+36) 39717 } else { 39718 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpKey = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) 39719 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 39720 } 39721 pCur = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 39722 39723 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 39724 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39725 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3BtreeInsert(tls, pCur, bp+16, 0, 0) 39726 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39727 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 39728 39729 tcl.XTcl_ResetResult(tls, interp) 39730 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 39731 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, *(*int32)(unsafe.Pointer(bp + 64))), 0)) 39732 return TCL_ERROR 39733 } 39734 return TCL_OK 39735 } 39736 39737 func Sqlitetest3_Init(tls *libc.TLS, interp uintptr) int32 { 39738 var i int32 39739 39740 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd3))/uint64(unsafe.Sizeof(struct { 39741 FzName uintptr 39742 FxProc uintptr 39743 }{})); i++ { 39744 tcl.XTcl_CreateCommand(tls, interp, aCmd3[i].FzName, aCmd3[i].FxProc, uintptr(0), uintptr(0)) 39745 } 39746 39747 tcl.XTcl_CreateObjCommand(tls, interp, ts+25512, *(*uintptr)(unsafe.Pointer(&struct { 39748 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 39749 }{btree_insert})), uintptr(0), uintptr(0)) 39750 39751 return TCL_OK 39752 } 39753 39754 var aCmd3 = [14]struct { 39755 FzName uintptr 39756 FxProc uintptr 39757 }{ 39758 {FzName: ts + 25525, FxProc: 0}, 39759 {FzName: ts + 25536, FxProc: 0}, 39760 {FzName: ts + 25548, FxProc: 0}, 39761 {FzName: ts + 25572, FxProc: 0}, 39762 {FzName: ts + 25590, FxProc: 0}, 39763 {FzName: ts + 25603, FxProc: 0}, 39764 {FzName: ts + 25622, FxProc: 0}, 39765 {FzName: ts + 25633, FxProc: 0}, 39766 {FzName: ts + 25643, FxProc: 0}, 39767 {FzName: ts + 25662, FxProc: 0}, 39768 {FzName: ts + 25674, FxProc: 0}, 39769 {FzName: ts + 25692, FxProc: 0}, 39770 {FzName: ts + 25706, FxProc: 0}, 39771 {FzName: ts + 25720, FxProc: 0}, 39772 } 39773 39774 type sched_param = struct{ Fsched_priority int32 } 39775 39776 type pthread_once = struct { 39777 Fstate int32 39778 F__ccgo_pad1 [4]byte 39779 Fmutex pthread_mutex_t 39780 } 39781 39782 type pthread_t = uintptr 39783 type pthread_attr_t = uintptr 39784 type pthread_mutex_t = uintptr 39785 type pthread_mutexattr_t = uintptr 39786 type pthread_cond_t = uintptr 39787 type pthread_condattr_t = uintptr 39788 type pthread_key_t = int32 39789 type pthread_once_t = pthread_once 39790 type pthread_rwlock_t = uintptr 39791 type pthread_rwlockattr_t = uintptr 39792 type pthread_barrier_t = uintptr 39793 type pthread_barrierattr_t = uintptr 39794 type pthread_spinlock_t = uintptr 39795 39796 type pthread_addr_t = uintptr 39797 type pthread_startroutine_t = uintptr 39798 39799 type Thread = struct { 39800 FzFilename uintptr 39801 FxOp uintptr 39802 FzArg uintptr 39803 Fopnum int32 39804 Fbusy int32 39805 Fcompleted int32 39806 F__ccgo_pad1 [4]byte 39807 Fdb uintptr 39808 FpStmt uintptr 39809 FzErr uintptr 39810 FzStaticErr uintptr 39811 Frc int32 39812 Fargc int32 39813 Fargv [100]uintptr 39814 Fcolv [100]uintptr 39815 } 39816 39817 var threadset [26]Thread 39818 39819 func test_barrier(tls *libc.TLS) { 39820 var pMutex uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_APP1) 39821 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 39822 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 39823 } 39824 39825 func test_thread_main(tls *libc.TLS, pArg uintptr) uintptr { 39826 var p uintptr = pArg 39827 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 39828 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 39829 } 39830 sqlite3.Xsqlite3_open(tls, (*Thread)(unsafe.Pointer(p)).FzFilename, p+40) 39831 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread)(unsafe.Pointer(p)).Fdb) { 39832 (*Thread)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread)(unsafe.Pointer(p)).Fdb)) 39833 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 39834 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 39835 } 39836 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 39837 test_barrier(tls) 39838 (*Thread)(unsafe.Pointer(p)).Fcompleted = 1 39839 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 39840 libc.Xsched_yield(tls) 39841 } 39842 test_barrier(tls) 39843 for (*Thread)(unsafe.Pointer(p)).FxOp != 0 { 39844 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 39845 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 39846 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 39847 } 39848 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread)(unsafe.Pointer(p)).FxOp})).f(tls, p) 39849 test_barrier(tls) 39850 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 39851 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 39852 libc.Xsched_yield(tls) 39853 } 39854 test_barrier(tls) 39855 } 39856 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 39857 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 39858 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 39859 } 39860 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 39861 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 39862 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 39863 } 39864 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 39865 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 39866 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 39867 } 39868 test_barrier(tls) 39869 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 39870 sqlite3.Xsqlite3_thread_cleanup(tls) 39871 return uintptr(0) 39872 } 39873 39874 func parse_thread_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 39875 bp := tls.Alloc(16) 39876 defer tls.Free(16) 39877 39878 if zArg == uintptr(0) || int32(*(*int8)(unsafe.Pointer(zArg))) == 0 || int32(*(*int8)(unsafe.Pointer(zArg + 1))) != 0 || !(libc.Xisupper(tls, int32(uint8(*(*int8)(unsafe.Pointer(zArg))))) != 0) { 39879 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 39880 return -1 39881 } 39882 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 39883 } 39884 39885 func tcl_thread_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39886 bp := tls.Alloc(96) 39887 defer tls.Free(96) 39888 39889 var i int32 39890 39891 var rc int32 39892 39893 if argc != 3 { 39894 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39895 ts+25780, 0)) 39896 return TCL_ERROR 39897 } 39898 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39899 if i < 0 { 39900 return TCL_ERROR 39901 } 39902 if threadset[i].Fbusy != 0 { 39903 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 39904 return TCL_ERROR 39905 } 39906 threadset[i].Fbusy = 1 39907 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 39908 threadset[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 39909 threadset[i].Fopnum = 1 39910 threadset[i].Fcompleted = 0 39911 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 39912 f func(*libc.TLS, uintptr) uintptr 39913 }{test_thread_main})), uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 39914 if rc != 0 { 39915 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 39916 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 39917 threadset[i].Fbusy = 0 39918 return TCL_ERROR 39919 } 39920 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 39921 return TCL_OK 39922 } 39923 39924 func test_thread_wait(tls *libc.TLS, p uintptr) { 39925 test_barrier(tls) 39926 for (*Thread)(unsafe.Pointer(p)).Fopnum > (*Thread)(unsafe.Pointer(p)).Fcompleted { 39927 libc.Xsched_yield(tls) 39928 } 39929 test_barrier(tls) 39930 } 39931 39932 func tcl_thread_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39933 bp := tls.Alloc(48) 39934 defer tls.Free(48) 39935 39936 var i int32 39937 39938 if argc != 2 { 39939 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39940 ts+25849, 0)) 39941 return TCL_ERROR 39942 } 39943 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39944 if i < 0 { 39945 return TCL_ERROR 39946 } 39947 if !(threadset[i].Fbusy != 0) { 39948 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 39949 return TCL_ERROR 39950 } 39951 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 39952 return TCL_OK 39953 } 39954 39955 func test_stop_thread(tls *libc.TLS, p uintptr) { 39956 test_thread_wait(tls, p) 39957 (*Thread)(unsafe.Pointer(p)).FxOp = uintptr(0) 39958 (*Thread)(unsafe.Pointer(p)).Fopnum++ 39959 test_thread_wait(tls, p) 39960 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzArg) 39961 (*Thread)(unsafe.Pointer(p)).FzArg = uintptr(0) 39962 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzFilename) 39963 (*Thread)(unsafe.Pointer(p)).FzFilename = uintptr(0) 39964 (*Thread)(unsafe.Pointer(p)).Fbusy = 0 39965 } 39966 39967 func tcl_thread_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39968 bp := tls.Alloc(48) 39969 defer tls.Free(48) 39970 39971 var i int32 39972 39973 if argc != 2 { 39974 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39975 ts+25849, 0)) 39976 return TCL_ERROR 39977 } 39978 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 39979 for i = 0; i < N_THREAD; i++ { 39980 if threadset[i].Fbusy != 0 { 39981 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 39982 } 39983 } 39984 } else { 39985 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39986 if i < 0 { 39987 return TCL_ERROR 39988 } 39989 if !(threadset[i].Fbusy != 0) { 39990 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 39991 return TCL_ERROR 39992 } 39993 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 39994 } 39995 return TCL_OK 39996 } 39997 39998 func tcl_thread_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39999 bp := tls.Alloc(172) 40000 defer tls.Free(172) 40001 40002 var i int32 40003 40004 if argc != 2 { 40005 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40006 ts+25849, 0)) 40007 return TCL_ERROR 40008 } 40009 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40010 if i < 0 { 40011 return TCL_ERROR 40012 } 40013 if !(threadset[i].Fbusy != 0) { 40014 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40015 return TCL_ERROR 40016 } 40017 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40018 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset[i].Fargc)) 40019 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40020 return TCL_OK 40021 } 40022 40023 func tcl_thread_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40024 bp := tls.Alloc(84) 40025 defer tls.Free(84) 40026 40027 var i int32 40028 40029 if argc != 3 { 40030 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40031 ts+25868, 0)) 40032 return TCL_ERROR 40033 } 40034 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40035 if i < 0 { 40036 return TCL_ERROR 40037 } 40038 if !(threadset[i].Fbusy != 0) { 40039 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40040 return TCL_ERROR 40041 } 40042 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 40043 return TCL_ERROR 40044 } 40045 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40046 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40047 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40048 return TCL_ERROR 40049 } 40050 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)) 40051 return TCL_OK 40052 } 40053 40054 func tcl_thread_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40055 bp := tls.Alloc(84) 40056 defer tls.Free(84) 40057 40058 var i int32 40059 40060 if argc != 3 { 40061 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40062 ts+25868, 0)) 40063 return TCL_ERROR 40064 } 40065 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40066 if i < 0 { 40067 return TCL_ERROR 40068 } 40069 if !(threadset[i].Fbusy != 0) { 40070 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40071 return TCL_ERROR 40072 } 40073 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 40074 return TCL_ERROR 40075 } 40076 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40077 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40078 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40079 return TCL_ERROR 40080 } 40081 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)) 40082 return TCL_OK 40083 } 40084 40085 func tcl_thread_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40086 bp := tls.Alloc(64) 40087 defer tls.Free(64) 40088 40089 var i int32 40090 var zName uintptr 40091 40092 if argc != 2 { 40093 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40094 ts+25849, 0)) 40095 return TCL_ERROR 40096 } 40097 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40098 if i < 0 { 40099 return TCL_ERROR 40100 } 40101 if !(threadset[i].Fbusy != 0) { 40102 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40103 return TCL_ERROR 40104 } 40105 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40106 zName = sqlite3.Xsqlite3ErrName(tls, threadset[i].Frc) 40107 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 40108 return TCL_OK 40109 } 40110 40111 func tcl_thread_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40112 bp := tls.Alloc(64) 40113 defer tls.Free(64) 40114 40115 var i int32 40116 40117 if argc != 2 { 40118 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40119 ts+25849, 0)) 40120 return TCL_ERROR 40121 } 40122 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40123 if i < 0 { 40124 return TCL_ERROR 40125 } 40126 if !(threadset[i].Fbusy != 0) { 40127 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40128 return TCL_ERROR 40129 } 40130 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40131 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset[i].FzErr, 0)) 40132 return TCL_OK 40133 } 40134 40135 func do_compile(tls *libc.TLS, p uintptr) { 40136 if (*Thread)(unsafe.Pointer(p)).Fdb == uintptr(0) { 40137 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 40138 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40139 return 40140 } 40141 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 40142 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40143 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40144 } 40145 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_prepare(tls, (*Thread)(unsafe.Pointer(p)).Fdb, (*Thread)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 40146 } 40147 40148 func tcl_thread_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40149 bp := tls.Alloc(56) 40150 defer tls.Free(56) 40151 40152 var i int32 40153 if argc != 3 { 40154 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40155 ts+25921, 0)) 40156 return TCL_ERROR 40157 } 40158 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40159 if i < 0 { 40160 return TCL_ERROR 40161 } 40162 if !(threadset[i].Fbusy != 0) { 40163 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40164 return TCL_ERROR 40165 } 40166 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40167 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile})) 40168 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 40169 threadset[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 40170 test_barrier(tls) 40171 threadset[i].Fopnum++ 40172 return TCL_OK 40173 } 40174 40175 func do_step(tls *libc.TLS, p uintptr) { 40176 var i int32 40177 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 40178 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 40179 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40180 return 40181 } 40182 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_step(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40183 if (*Thread)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 40184 (*Thread)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40185 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt); i++ { 40186 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 40187 } 40188 for i = 0; i < (*Thread)(unsafe.Pointer(p)).Fargc; i++ { 40189 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 40190 } 40191 } 40192 } 40193 40194 func tcl_thread_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40195 bp := tls.Alloc(48) 40196 defer tls.Free(48) 40197 40198 var i int32 40199 if argc != 2 { 40200 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40201 ts+25958, 0)) 40202 return TCL_ERROR 40203 } 40204 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40205 if i < 0 { 40206 return TCL_ERROR 40207 } 40208 if !(threadset[i].Fbusy != 0) { 40209 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40210 return TCL_ERROR 40211 } 40212 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40213 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step})) 40214 test_barrier(tls) 40215 threadset[i].Fopnum++ 40216 return TCL_OK 40217 } 40218 40219 func do_finalize(tls *libc.TLS, p uintptr) { 40220 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 40221 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 40222 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40223 return 40224 } 40225 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40226 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40227 } 40228 40229 func tcl_thread_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40230 bp := tls.Alloc(48) 40231 defer tls.Free(48) 40232 40233 var i int32 40234 if argc != 2 { 40235 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40236 ts+25958, 0)) 40237 return TCL_ERROR 40238 } 40239 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40240 if i < 0 { 40241 return TCL_ERROR 40242 } 40243 if !(threadset[i].Fbusy != 0) { 40244 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40245 return TCL_ERROR 40246 } 40247 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40248 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize})) 40249 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 40250 threadset[i].FzArg = uintptr(0) 40251 test_barrier(tls) 40252 threadset[i].Fopnum++ 40253 return TCL_OK 40254 } 40255 40256 func tcl_thread_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40257 bp := tls.Alloc(64) 40258 defer tls.Free(64) 40259 40260 var i int32 40261 var j int32 40262 var temp uintptr 40263 if argc != 3 { 40264 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40265 ts+25963, 0)) 40266 return TCL_ERROR 40267 } 40268 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40269 if i < 0 { 40270 return TCL_ERROR 40271 } 40272 if !(threadset[i].Fbusy != 0) { 40273 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40274 return TCL_ERROR 40275 } 40276 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40277 j = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40278 if j < 0 { 40279 return TCL_ERROR 40280 } 40281 if !(threadset[j].Fbusy != 0) { 40282 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 40283 return TCL_ERROR 40284 } 40285 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(j)*1680) 40286 temp = threadset[i].Fdb 40287 threadset[i].Fdb = threadset[j].Fdb 40288 threadset[j].Fdb = temp 40289 return TCL_OK 40290 } 40291 40292 func tcl_thread_db_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40293 bp := tls.Alloc(164) 40294 defer tls.Free(164) 40295 40296 var i int32 40297 40298 if argc != 2 { 40299 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40300 ts+25849, 0)) 40301 return TCL_ERROR 40302 } 40303 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40304 if i < 0 { 40305 return TCL_ERROR 40306 } 40307 if !(threadset[i].Fbusy != 0) { 40308 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40309 return TCL_ERROR 40310 } 40311 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40312 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].Fdb) 40313 threadset[i].Fdb = uintptr(0) 40314 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 40315 return TCL_OK 40316 } 40317 40318 func tcl_thread_db_put(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40319 bp := tls.Alloc(48) 40320 defer tls.Free(48) 40321 40322 var i int32 40323 if argc != 3 { 40324 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40325 ts+25972, 0)) 40326 return TCL_ERROR 40327 } 40328 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40329 if i < 0 { 40330 return TCL_ERROR 40331 } 40332 if !(threadset[i].Fbusy != 0) { 40333 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40334 return TCL_ERROR 40335 } 40336 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40337 40338 threadset[i].Fdb = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40339 return TCL_OK 40340 } 40341 40342 func tcl_thread_stmt_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40343 bp := tls.Alloc(164) 40344 defer tls.Free(164) 40345 40346 var i int32 40347 40348 if argc != 2 { 40349 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40350 ts+25849, 0)) 40351 return TCL_ERROR 40352 } 40353 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40354 if i < 0 { 40355 return TCL_ERROR 40356 } 40357 if !(threadset[i].Fbusy != 0) { 40358 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40359 return TCL_ERROR 40360 } 40361 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40362 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].FpStmt) 40363 threadset[i].FpStmt = uintptr(0) 40364 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 40365 return TCL_OK 40366 } 40367 40368 func Sqlitetest4_Init(tls *libc.TLS, interp uintptr) int32 { 40369 var i int32 40370 40371 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd4))/uint64(unsafe.Sizeof(struct { 40372 FzName uintptr 40373 FxProc uintptr 40374 }{})); i++ { 40375 tcl.XTcl_CreateCommand(tls, interp, aCmd4[i].FzName, aCmd4[i].FxProc, uintptr(0), uintptr(0)) 40376 } 40377 return TCL_OK 40378 } 40379 40380 var aCmd4 = [15]struct { 40381 FzName uintptr 40382 FxProc uintptr 40383 }{ 40384 {FzName: ts + 25979, FxProc: 0}, 40385 {FzName: ts + 25993, FxProc: 0}, 40386 {FzName: ts + 26005, FxProc: 0}, 40387 {FzName: ts + 26017, FxProc: 0}, 40388 {FzName: ts + 26029, FxProc: 0}, 40389 {FzName: ts + 26041, FxProc: 0}, 40390 {FzName: ts + 26056, FxProc: 0}, 40391 {FzName: ts + 26070, FxProc: 0}, 40392 {FzName: ts + 26083, FxProc: 0}, 40393 {FzName: ts + 26098, FxProc: 0}, 40394 {FzName: ts + 26110, FxProc: 0}, 40395 {FzName: ts + 26126, FxProc: 0}, 40396 {FzName: ts + 26138, FxProc: 0}, 40397 {FzName: ts + 26152, FxProc: 0}, 40398 {FzName: ts + 26166, FxProc: 0}, 40399 } 40400 40401 func binarize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40402 bp := tls.Alloc(4) 40403 defer tls.Free(4) 40404 40405 var bytes uintptr 40406 var pRet uintptr 40407 40408 bytes = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 40409 pRet = tcl.XTcl_NewByteArrayObj(tls, bytes, *(*int32)(unsafe.Pointer(bp))+1) 40410 tcl.XTcl_SetObjResult(tls, interp, pRet) 40411 return TCL_OK 40412 } 40413 40414 func test_value_overhead(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40415 bp := tls.Alloc(96) 40416 defer tls.Free(96) 40417 40418 var i int32 40419 40420 if objc != 3 { 40421 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 40422 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+26182, 0)) 40423 return TCL_ERROR 40424 } 40425 40426 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32) != 0 { 40427 return TCL_ERROR 40428 } 40429 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+36) != 0 { 40430 return TCL_ERROR 40431 } 40432 40433 (*Mem)(unsafe.Pointer(bp + 40)).Fflags = u16(MEM_Str | MEM_Term | MEM_Static) 40434 (*Mem)(unsafe.Pointer(bp + 40)).Fz = ts + 26209 40435 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = u8(SQLITE_UTF8) 40436 40437 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 40438 if *(*int32)(unsafe.Pointer(bp + 36)) != 0 { 40439 sqlite3.Xsqlite3_value_text(tls, bp+40) 40440 } 40441 } 40442 40443 return TCL_OK 40444 } 40445 40446 func name_to_enc(tls *libc.TLS, interp uintptr, pObj uintptr) u8 { 40447 bp := tls.Alloc(104) 40448 defer tls.Free(104) 40449 40450 *(*[5]EncName)(unsafe.Pointer(bp + 24)) = [5]EncName{ 40451 {FzName: ts + 26221, Fenc: u8(SQLITE_UTF8)}, 40452 {FzName: ts + 26226, Fenc: u8(SQLITE_UTF16LE)}, 40453 {FzName: ts + 26234, Fenc: u8(SQLITE_UTF16BE)}, 40454 {FzName: ts + 26242, Fenc: u8(SQLITE_UTF16)}, 40455 {}, 40456 } 40457 var pEnc uintptr 40458 var z uintptr = tcl.XTcl_GetString(tls, pObj) 40459 for pEnc = bp + 24; (*EncName)(unsafe.Pointer(pEnc)).FzName != 0; pEnc += 16 { 40460 if 0 == sqlite3.Xsqlite3StrICmp(tls, z, (*EncName)(unsafe.Pointer(pEnc)).FzName) { 40461 break 40462 } 40463 } 40464 if !(int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) != 0) { 40465 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26248, z, 0)) 40466 } 40467 if int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) == SQLITE_UTF16 { 40468 return u8(SQLITE_UTF16LE) 40469 } 40470 return (*EncName)(unsafe.Pointer(pEnc)).Fenc 40471 } 40472 40473 type EncName = struct { 40474 FzName uintptr 40475 Fenc u8 40476 F__ccgo_pad1 [7]byte 40477 } 40478 40479 func test_translate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40480 bp := tls.Alloc(44) 40481 defer tls.Free(44) 40482 40483 var enc_from u8 40484 var enc_to u8 40485 var pVal uintptr 40486 var z uintptr 40487 40488 var xDel uintptr = uintptr(0) 40489 40490 if objc != 4 && objc != 5 { 40491 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 40492 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), 40493 ts+26267, 0)) 40494 return TCL_ERROR 40495 } 40496 if objc == 5 { 40497 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 40498 } 40499 40500 enc_from = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 40501 if !(enc_from != 0) { 40502 return TCL_ERROR 40503 } 40504 enc_to = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 40505 if !(enc_to != 0) { 40506 return TCL_ERROR 40507 } 40508 40509 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 40510 40511 if int32(enc_from) == SQLITE_UTF8 { 40512 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 40513 if objc == 5 { 40514 z = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, z)) 40515 } 40516 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 40517 } else { 40518 z = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) 40519 if objc == 5 { 40520 var zTmp uintptr = z 40521 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 40))) 40522 libc.Xmemcpy(tls, z, zTmp, uint64(*(*int32)(unsafe.Pointer(bp + 40)))) 40523 } 40524 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 40525 } 40526 40527 z = sqlite3.Xsqlite3ValueText(tls, pVal, enc_to) 40528 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3ValueBytes(tls, pVal, enc_to) + func() int32 { 40529 if int32(enc_to) == SQLITE_UTF8 { 40530 return 1 40531 } 40532 return 2 40533 }() 40534 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, z, *(*int32)(unsafe.Pointer(bp + 40)))) 40535 40536 sqlite3.Xsqlite3ValueFree(tls, pVal) 40537 40538 return TCL_OK 40539 } 40540 40541 func test_translate_selftest(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40542 sqlite3.Xsqlite3UtfSelfTest(tls) 40543 return SQLITE_OK 40544 } 40545 40546 func Sqlitetest5_Init(tls *libc.TLS, interp uintptr) int32 { 40547 var i int32 40548 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd5))/uint64(unsafe.Sizeof(struct { 40549 FzName uintptr 40550 FxProc uintptr 40551 }{})); i++ { 40552 tcl.XTcl_CreateObjCommand(tls, interp, aCmd5[i].FzName, aCmd5[i].FxProc, uintptr(0), uintptr(0)) 40553 } 40554 return SQLITE_OK 40555 } 40556 40557 var aCmd5 = [4]struct { 40558 FzName uintptr 40559 FxProc uintptr 40560 }{ 40561 {FzName: ts + 26302, FxProc: 0}, 40562 {FzName: ts + 26311, FxProc: 0}, 40563 {FzName: ts + 26331, FxProc: 0}, 40564 {FzName: ts + 26346, FxProc: 0}, 40565 } 40566 40567 type CrashFile1 = struct { 40568 FpMethod uintptr 40569 FpRealFile uintptr 40570 FzName uintptr 40571 Fflags int32 40572 F__ccgo_pad1 [4]byte 40573 FzData uintptr 40574 FnData int32 40575 F__ccgo_pad2 [4]byte 40576 FiSize i64 40577 } 40578 40579 type CrashFile = CrashFile1 40580 type CrashGlobal1 = struct { 40581 FpWriteList uintptr 40582 FpWriteListEnd uintptr 40583 FiSectorSize int32 40584 FiDeviceCharacteristics int32 40585 FiCrash int32 40586 FzCrashFile [500]int8 40587 } 40588 40589 type CrashGlobal = CrashGlobal1 40590 type WriteBuffer1 = struct { 40591 FiOffset i64 40592 FnBuf int32 40593 F__ccgo_pad1 [4]byte 40594 FzBuf uintptr 40595 FpFile uintptr 40596 FpNext uintptr 40597 } 40598 40599 type WriteBuffer = WriteBuffer1 40600 40601 var g = CrashGlobal{FiSectorSize: SQLITE_DEFAULT_SECTOR_SIZE} 40602 40603 var sqlite3CrashTestEnable int32 = 0 40604 40605 func crash_malloc(tls *libc.TLS, nByte int32) uintptr { 40606 return tcl.XTcl_AttemptAlloc(tls, uint32(size_t(nByte))) 40607 } 40608 40609 func crash_free(tls *libc.TLS, p uintptr) { 40610 tcl.XTcl_Free(tls, p) 40611 } 40612 40613 func crash_realloc(tls *libc.TLS, p uintptr, n int32) uintptr { 40614 return tcl.XTcl_AttemptRealloc(tls, p, uint32(size_t(n))) 40615 } 40616 40617 func writeDbFile(tls *libc.TLS, p uintptr, z uintptr, iAmt i64, iOff i64) int32 { 40618 var rc int32 = SQLITE_OK 40619 var iSkip int32 = 0 40620 if iAmt-i64(iSkip) > int64(0) { 40621 rc = sqlite3.Xsqlite3OsWrite(tls, (*CrashFile)(unsafe.Pointer(p)).FpRealFile, z+uintptr(iSkip), int32(iAmt-i64(iSkip)), iOff+i64(iSkip)) 40622 } 40623 return rc 40624 } 40625 40626 func writeListSync(tls *libc.TLS, pFile uintptr, isCrash int32) int32 { 40627 bp := tls.Alloc(16) 40628 defer tls.Free(16) 40629 40630 var rc int32 = SQLITE_OK 40631 var iDc int32 = g.FiDeviceCharacteristics 40632 var pWrite uintptr 40633 var ppPtr uintptr 40634 40635 var pFinal uintptr = uintptr(0) 40636 if !(isCrash != 0) { 40637 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 40638 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile { 40639 pFinal = pWrite 40640 } 40641 } 40642 } else if iDc&(SQLITE_IOCAP_SEQUENTIAL|SQLITE_IOCAP_SAFE_APPEND) != 0 { 40643 var nWrite int32 = 0 40644 40645 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 40646 nWrite++ 40647 } 40648 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 40649 *(*int32)(unsafe.Pointer(bp)) = func() int32 { 40650 if *(*int32)(unsafe.Pointer(bp)) < 0 { 40651 return -1 * *(*int32)(unsafe.Pointer(bp)) 40652 } 40653 return *(*int32)(unsafe.Pointer(bp)) 40654 }() % nWrite 40655 for pWrite = g.FpWriteList; *(*int32)(unsafe.Pointer(bp)) > 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 40656 *(*int32)(unsafe.Pointer(bp))-- 40657 } 40658 pFinal = pWrite 40659 } 40660 40661 ppPtr = uintptr(unsafe.Pointer(&g)) 40662 for pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)); rc == SQLITE_OK && pWrite != 0; pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)) { 40663 var pRealFile uintptr = (*CrashFile)(unsafe.Pointer((*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile)).FpRealFile 40664 40665 var eAction int32 = 0 40666 if !(isCrash != 0) { 40667 eAction = 2 40668 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile || iDc&SQLITE_IOCAP_SEQUENTIAL != 0 { 40669 eAction = 1 40670 } 40671 } else { 40672 sqlite3.Xsqlite3_randomness(tls, 1, bp+4) 40673 40674 if iDc&SQLITE_IOCAP_ATOMIC != 0 || (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf == uintptr(0) { 40675 *(*int8)(unsafe.Pointer(bp + 4)) &= int8(0x01) 40676 } 40677 40678 if iDc&SQLITE_IOCAP_SEQUENTIAL != 0 && pWrite != pFinal { 40679 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 40680 } 40681 40682 if iDc&SQLITE_IOCAP_SAFE_APPEND != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 40683 sqlite3.Xsqlite3OsFileSize(tls, pRealFile, bp+8) 40684 if *(*i64)(unsafe.Pointer(bp + 8)) == (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset { 40685 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 40686 } 40687 } 40688 40689 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x06 == 0x06 { 40690 eAction = 3 40691 } else { 40692 eAction = func() int32 { 40693 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x01 != 0 { 40694 return 2 40695 } 40696 return 1 40697 }() 40698 } 40699 } 40700 40701 switch eAction { 40702 case 1: 40703 { 40704 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 40705 rc = writeDbFile(tls, 40706 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf, int64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf), (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 40707 } else { 40708 rc = sqlite3.Xsqlite3OsTruncate(tls, pRealFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 40709 } 40710 *(*uintptr)(unsafe.Pointer(ppPtr)) = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext 40711 crash_free(tls, pWrite) 40712 break 40713 40714 } 40715 case 2: 40716 { 40717 ppPtr = pWrite + 32 40718 break 40719 40720 } 40721 case 3: 40722 { 40723 var zGarbage uintptr 40724 var iFirst int32 = int32((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset / i64(g.FiSectorSize)) 40725 var iLast int32 = int32(((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset + i64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf) - int64(1)) / i64(g.FiSectorSize)) 40726 40727 zGarbage = crash_malloc(tls, g.FiSectorSize) 40728 if zGarbage != 0 { 40729 var i sqlite3_int64 40730 for i = sqlite3_int64(iFirst); rc == SQLITE_OK && i <= sqlite3_int64(iLast); i++ { 40731 sqlite3.Xsqlite3_randomness(tls, g.FiSectorSize, zGarbage) 40732 rc = writeDbFile(tls, 40733 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, zGarbage, int64(g.FiSectorSize), i*sqlite3_int64(g.FiSectorSize)) 40734 } 40735 crash_free(tls, zGarbage) 40736 } else { 40737 rc = SQLITE_NOMEM 40738 } 40739 40740 ppPtr = pWrite + 32 40741 break 40742 40743 } 40744 40745 default: 40746 } 40747 40748 if pWrite == pFinal { 40749 break 40750 } 40751 } 40752 40753 if rc == SQLITE_OK && isCrash != 0 { 40754 libc.Xexit(tls, -1) 40755 } 40756 40757 for pWrite = g.FpWriteList; pWrite != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 40758 } 40759 g.FpWriteListEnd = pWrite 40760 40761 return rc 40762 } 40763 40764 func writeListAppend(tls *libc.TLS, pFile uintptr, iOffset sqlite3_int64, zBuf uintptr, nBuf int32) int32 { 40765 var pNew uintptr 40766 40767 pNew = crash_malloc(tls, int32(uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf))) 40768 if pNew == uintptr(0) { 40769 libc.Xfprintf(tls, uintptr(unsafe.Pointer(&libc.X__sF))+2*152, ts+26365, 0) 40770 } 40771 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf)) 40772 (*WriteBuffer)(unsafe.Pointer(pNew)).FiOffset = iOffset 40773 (*WriteBuffer)(unsafe.Pointer(pNew)).FnBuf = nBuf 40774 (*WriteBuffer)(unsafe.Pointer(pNew)).FpFile = pFile 40775 if zBuf != 0 { 40776 (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf = pNew + 1*40 40777 libc.Xmemcpy(tls, (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf, zBuf, uint64(nBuf)) 40778 } 40779 40780 if g.FpWriteList != 0 { 40781 (*WriteBuffer)(unsafe.Pointer(g.FpWriteListEnd)).FpNext = pNew 40782 } else { 40783 g.FpWriteList = pNew 40784 } 40785 g.FpWriteListEnd = pNew 40786 40787 return SQLITE_OK 40788 } 40789 40790 func cfClose(tls *libc.TLS, pFile uintptr) int32 { 40791 var pCrash uintptr = pFile 40792 writeListSync(tls, pCrash, 0) 40793 sqlite3.Xsqlite3OsClose(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FpRealFile) 40794 return SQLITE_OK 40795 } 40796 40797 func cfRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 40798 var pCrash uintptr = pFile 40799 var nCopy int32 = func() int32 { 40800 if i64(iAmt) < (*CrashFile)(unsafe.Pointer(pCrash)).FiSize-iOfst { 40801 return int32(i64(iAmt)) 40802 } 40803 return int32((*CrashFile)(unsafe.Pointer(pCrash)).FiSize - iOfst) 40804 }() 40805 40806 if nCopy > 0 { 40807 libc.Xmemcpy(tls, zBuf, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), uint64(nCopy)) 40808 } 40809 40810 if nCopy < iAmt { 40811 return SQLITE_IOERR | int32(2)<<8 40812 } 40813 40814 return SQLITE_OK 40815 } 40816 40817 func cfWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 40818 var pCrash uintptr = pFile 40819 if sqlite_int64(iAmt)+iOfst > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 40820 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(sqlite_int64(iAmt) + iOfst)) 40821 } 40822 for (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > i64((*CrashFile)(unsafe.Pointer(pCrash)).FnData) { 40823 var zNew uintptr 40824 var nNew int32 = (*CrashFile)(unsafe.Pointer(pCrash)).FnData*2 + 4096 40825 zNew = crash_realloc(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData, nNew) 40826 if !(zNew != 0) { 40827 return SQLITE_NOMEM 40828 } 40829 libc.Xmemset(tls, zNew+uintptr((*CrashFile)(unsafe.Pointer(pCrash)).FnData), 0, uint64(nNew-(*CrashFile)(unsafe.Pointer(pCrash)).FnData)) 40830 (*CrashFile)(unsafe.Pointer(pCrash)).FnData = nNew 40831 (*CrashFile)(unsafe.Pointer(pCrash)).FzData = zNew 40832 } 40833 libc.Xmemcpy(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), zBuf, uint64(iAmt)) 40834 return writeListAppend(tls, pFile, iOfst, zBuf, iAmt) 40835 } 40836 40837 func cfTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 40838 var pCrash uintptr = pFile 40839 40840 if (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > size { 40841 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(size)) 40842 } 40843 return writeListAppend(tls, pFile, size, uintptr(0), 0) 40844 } 40845 40846 func cfSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 40847 var pCrash uintptr = pFile 40848 var isCrash int32 = 0 40849 40850 var zName uintptr = (*CrashFile)(unsafe.Pointer(pCrash)).FzName 40851 var zCrashFile uintptr = uintptr(unsafe.Pointer(&g)) + 28 40852 var nName int32 = int32(libc.Xstrlen(tls, zName)) 40853 var nCrashFile int32 = int32(libc.Xstrlen(tls, zCrashFile)) 40854 40855 if nCrashFile > 0 && int32(*(*int8)(unsafe.Pointer(zCrashFile + uintptr(nCrashFile-1)))) == '*' { 40856 nCrashFile-- 40857 if nName > nCrashFile { 40858 nName = nCrashFile 40859 } 40860 } 40861 40862 if nName == nCrashFile && 0 == libc.Xmemcmp(tls, zName, zCrashFile, uint64(nName)) { 40863 if libc.PreDecInt32(&g.FiCrash, 1) == 0 { 40864 isCrash = 1 40865 } 40866 } 40867 40868 return writeListSync(tls, pCrash, isCrash) 40869 } 40870 40871 func cfFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 40872 var pCrash uintptr = pFile 40873 *(*sqlite_int64)(unsafe.Pointer(pSize)) = (*CrashFile)(unsafe.Pointer(pCrash)).FiSize 40874 return SQLITE_OK 40875 } 40876 40877 func cfLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 40878 return sqlite3.Xsqlite3OsLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 40879 } 40880 40881 func cfUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 40882 return sqlite3.Xsqlite3OsUnlock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 40883 } 40884 40885 func cfCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 40886 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, pResOut) 40887 } 40888 40889 func cfFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 40890 if op == SQLITE_FCNTL_SIZE_HINT { 40891 var pCrash uintptr = pFile 40892 var nByte i64 = *(*i64)(unsafe.Pointer(pArg)) 40893 if nByte > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 40894 if SQLITE_OK == writeListAppend(tls, pFile, nByte, uintptr(0), 0) { 40895 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(nByte)) 40896 } 40897 } 40898 return SQLITE_OK 40899 } 40900 return sqlite3.Xsqlite3OsFileControl(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, op, pArg) 40901 } 40902 40903 func cfSectorSize(tls *libc.TLS, pFile uintptr) int32 { 40904 return g.FiSectorSize 40905 } 40906 40907 func cfDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 40908 return g.FiDeviceCharacteristics 40909 } 40910 40911 func cfShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 40912 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 40913 return (*struct { 40914 f func(*libc.TLS, uintptr, int32, int32, int32) int32 40915 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 40916 } 40917 40918 func cfShmBarrier(tls *libc.TLS, pFile uintptr) { 40919 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 40920 (*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) 40921 } 40922 40923 func cfShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 40924 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 40925 return (*struct { 40926 f func(*libc.TLS, uintptr, int32) int32 40927 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, delFlag) 40928 } 40929 40930 func cfShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, sz int32, w int32, pp uintptr) int32 { 40931 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 40932 return (*struct { 40933 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 40934 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iRegion, sz, w, pp) 40935 } 40936 40937 var CrashFileVtab = sqlite3_io_methods{ 40938 FiVersion: 2, 40939 FxClose: 0, 40940 FxRead: 0, 40941 FxWrite: 0, 40942 FxTruncate: 0, 40943 FxSync: 0, 40944 FxFileSize: 0, 40945 FxLock: 0, 40946 FxUnlock: 0, 40947 FxCheckReservedLock: 0, 40948 FxFileControl: 0, 40949 FxSectorSize: 0, 40950 FxDeviceCharacteristics: 0, 40951 FxShmMap: 0, 40952 FxShmLock: 0, 40953 FxShmBarrier: 0, 40954 FxShmUnmap: 0, 40955 } 40956 40957 type crashAppData = struct{ FpOrig uintptr } 40958 40959 func cfOpen(tls *libc.TLS, pCfVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 40960 bp := tls.Alloc(8) 40961 defer tls.Free(8) 40962 40963 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 40964 var rc int32 40965 var pWrapper uintptr = pFile 40966 var pReal uintptr = pWrapper + 1*56 40967 40968 libc.Xmemset(tls, pWrapper, 0, uint64(unsafe.Sizeof(CrashFile{}))) 40969 rc = sqlite3.Xsqlite3OsOpen(tls, pVfs, zName, pReal, flags, pOutFlags) 40970 40971 if rc == SQLITE_OK { 40972 (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod = uintptr(unsafe.Pointer(&CrashFileVtab)) 40973 (*CrashFile)(unsafe.Pointer(pWrapper)).FzName = zName 40974 (*CrashFile)(unsafe.Pointer(pWrapper)).FpRealFile = pReal 40975 rc = sqlite3.Xsqlite3OsFileSize(tls, pReal, bp) 40976 (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize = i64(int32(*(*i64)(unsafe.Pointer(bp)))) 40977 (*CrashFile)(unsafe.Pointer(pWrapper)).Fflags = flags 40978 } 40979 if rc == SQLITE_OK { 40980 (*CrashFile)(unsafe.Pointer(pWrapper)).FnData = int32(int64(4096) + (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize) 40981 (*CrashFile)(unsafe.Pointer(pWrapper)).FzData = crash_malloc(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FnData) 40982 if (*CrashFile)(unsafe.Pointer(pWrapper)).FzData != 0 { 40983 var iOff i64 40984 40985 libc.Xmemset(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData, 0, uint64((*CrashFile)(unsafe.Pointer(pWrapper)).FnData)) 40986 for iOff = int64(0); iOff < (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize; iOff = iOff + int64(512) { 40987 var nRead int32 = int32((*CrashFile)(unsafe.Pointer(pWrapper)).FiSize - iOff) 40988 if nRead > 512 { 40989 nRead = 512 40990 } 40991 rc = sqlite3.Xsqlite3OsRead(tls, pReal, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData+uintptr(iOff), nRead, iOff) 40992 } 40993 } else { 40994 rc = SQLITE_NOMEM 40995 } 40996 } 40997 if rc != SQLITE_OK && (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod != 0 { 40998 sqlite3.Xsqlite3OsClose(tls, pFile) 40999 } 41000 return rc 41001 } 41002 41003 func cfDelete(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, dirSync int32) int32 { 41004 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41005 return (*struct { 41006 f func(*libc.TLS, uintptr, uintptr, int32) int32 41007 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDelete})).f(tls, pVfs, zPath, dirSync) 41008 } 41009 41010 func cfAccess(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 41011 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41012 return (*struct { 41013 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41014 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxAccess})).f(tls, pVfs, zPath, flags, pResOut) 41015 } 41016 41017 func cfFullPathname(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) int32 { 41018 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41019 return (*struct { 41020 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41021 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})).f(tls, pVfs, zPath, nPathOut, zPathOut) 41022 } 41023 41024 func cfDlOpen(tls *libc.TLS, pCfVfs uintptr, zPath uintptr) uintptr { 41025 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41026 return (*struct { 41027 f func(*libc.TLS, uintptr, uintptr) uintptr 41028 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlOpen})).f(tls, pVfs, zPath) 41029 } 41030 41031 func cfDlError(tls *libc.TLS, pCfVfs uintptr, nByte int32, zErrMsg uintptr) { 41032 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41033 (*struct { 41034 f func(*libc.TLS, uintptr, int32, uintptr) 41035 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlError})).f(tls, pVfs, nByte, zErrMsg) 41036 } 41037 41038 func cfDlSym(tls *libc.TLS, pCfVfs uintptr, pH uintptr, zSym uintptr) uintptr { 41039 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41040 return (*struct { 41041 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 41042 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlSym})).f(tls, pVfs, pH, zSym) 41043 } 41044 41045 func cfDlClose(tls *libc.TLS, pCfVfs uintptr, pHandle uintptr) { 41046 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41047 (*struct { 41048 f func(*libc.TLS, uintptr, uintptr) 41049 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlClose})).f(tls, pVfs, pHandle) 41050 } 41051 41052 func cfRandomness(tls *libc.TLS, pCfVfs uintptr, nByte int32, zBufOut uintptr) int32 { 41053 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41054 return (*struct { 41055 f func(*libc.TLS, uintptr, int32, uintptr) int32 41056 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxRandomness})).f(tls, pVfs, nByte, zBufOut) 41057 } 41058 41059 func cfSleep(tls *libc.TLS, pCfVfs uintptr, nMicro int32) int32 { 41060 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41061 return (*struct { 41062 f func(*libc.TLS, uintptr, int32) int32 41063 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSleep})).f(tls, pVfs, nMicro) 41064 } 41065 41066 func cfCurrentTime(tls *libc.TLS, pCfVfs uintptr, pTimeOut uintptr) int32 { 41067 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41068 return (*struct { 41069 f func(*libc.TLS, uintptr, uintptr) int32 41070 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTime})).f(tls, pVfs, pTimeOut) 41071 } 41072 41073 func cfGetLastError(tls *libc.TLS, pCfVfs uintptr, n int32, z uintptr) int32 { 41074 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41075 return (*struct { 41076 f func(*libc.TLS, uintptr, int32, uintptr) int32 41077 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetLastError})).f(tls, pVfs, n, z) 41078 } 41079 41080 func processDevSymArgs(tls *libc.TLS, interp uintptr, objc int32, objv uintptr, piDeviceChar uintptr, piSectorSize uintptr) int32 { 41081 bp := tls.Alloc(316) 41082 defer tls.Free(316) 41083 41084 *(*[14]DeviceFlag)(unsafe.Pointer(bp + 88)) = [14]DeviceFlag{ 41085 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 41086 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 41087 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 41088 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 41089 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 41090 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 41091 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 41092 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 41093 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 41094 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 41095 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 41096 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 41097 {FzName: ts + 26529, FiValue: SQLITE_IOCAP_BATCH_ATOMIC}, 41098 {}, 41099 } 41100 var i int32 41101 var iDc int32 = 0 41102 *(*int32)(unsafe.Pointer(bp + 68)) = 0 41103 var setSectorsize int32 = 0 41104 var setDeviceChar int32 = 0 41105 41106 for i = 0; i < objc; i = i + 2 { 41107 var zOpt uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+64) 41108 41109 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) && 41110 (*(*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) { 41111 tcl.XTcl_AppendResult(tls, interp, 41112 libc.VaList(bp, ts+26571, zOpt, 41113 ts+26585, 0)) 41114 return TCL_ERROR 41115 } 41116 if i == objc-1 { 41117 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26633, zOpt, ts+11945, 0)) 41118 return TCL_ERROR 41119 } 41120 41121 if int32(*(*int8)(unsafe.Pointer(zOpt + 1))) == 's' { 41122 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+68) != 0 { 41123 return TCL_ERROR 41124 } 41125 setSectorsize = 1 41126 } else { 41127 var j int32 41128 41129 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+72, bp+80) != 0 { 41130 return TCL_ERROR 41131 } 41132 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 72)); j++ { 41133 var rc int32 41134 41135 var pFlag uintptr = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(j)*8))) 41136 (*Tcl_Obj)(unsafe.Pointer(pFlag)).FrefCount++ 41137 tcl.XTcl_UtfToLower(tls, tcl.XTcl_GetString(tls, pFlag)) 41138 41139 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 41140 interp, pFlag, bp+88, int32(unsafe.Sizeof(DeviceFlag{})), ts+26664, 0, bp+312) 41141 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 41142 var _objPtr uintptr = pFlag 41143 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 41144 tcl.XTclFreeObj(tls, _objPtr) 41145 } 41146 } 41147 if rc != 0 { 41148 return TCL_ERROR 41149 } 41150 41151 iDc = iDc | (*DeviceFlag)(unsafe.Pointer(bp+88+uintptr(*(*int32)(unsafe.Pointer(bp + 312)))*16)).FiValue 41152 } 41153 setDeviceChar = 1 41154 } 41155 } 41156 41157 if setDeviceChar != 0 { 41158 *(*int32)(unsafe.Pointer(piDeviceChar)) = iDc 41159 } 41160 if setSectorsize != 0 { 41161 *(*int32)(unsafe.Pointer(piSectorSize)) = *(*int32)(unsafe.Pointer(bp + 68)) 41162 } 41163 41164 return TCL_OK 41165 } 41166 41167 type DeviceFlag = struct { 41168 FzName uintptr 41169 FiValue int32 41170 F__ccgo_pad1 [4]byte 41171 } 41172 41173 func crashNowCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41174 if objc != 1 { 41175 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41176 return TCL_ERROR 41177 } 41178 writeListSync(tls, uintptr(0), 1) 41179 41180 return TCL_OK 41181 } 41182 41183 func crashEnableCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41184 bp := tls.Alloc(8) 41185 defer tls.Free(8) 41186 41187 *(*int32)(unsafe.Pointer(bp + 4)) = 0 41188 41189 if objc != 2 && objc != 3 { 41190 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26677) 41191 return TCL_ERROR 41192 } 41193 41194 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 41195 return TCL_ERROR 41196 } 41197 if objc == 3 && tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 41198 return TCL_ERROR 41199 } 41200 41201 if *(*int32)(unsafe.Pointer(bp)) != 0 && crashVfs.FpAppData != 0 || !(*(*int32)(unsafe.Pointer(bp)) != 0) && !(int32(crashVfs.FpAppData) != 0) { 41202 return TCL_OK 41203 } 41204 41205 if crashVfs.FpAppData == uintptr(0) { 41206 var pOriginalVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 41207 crashVfs.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FmxPathname 41208 crashVfs.FpAppData = pOriginalVfs 41209 crashVfs.FszOsFile = int32(uint64(unsafe.Sizeof(CrashFile{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FszOsFile)) 41210 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&crashVfs)), *(*int32)(unsafe.Pointer(bp + 4))) 41211 } else { 41212 crashVfs.FpAppData = uintptr(0) 41213 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&crashVfs))) 41214 } 41215 41216 return TCL_OK 41217 } 41218 41219 var crashVfs = sqlite3_vfs{ 41220 FiVersion: 2, 41221 FzName: ts + 26694, 41222 FxOpen: 0, 41223 FxDelete: 0, 41224 FxAccess: 0, 41225 FxFullPathname: 0, 41226 FxDlOpen: 0, 41227 FxDlError: 0, 41228 FxDlSym: 0, 41229 FxDlClose: 0, 41230 FxRandomness: 0, 41231 FxSleep: 0, 41232 FxCurrentTime: 0, 41233 FxGetLastError: 0, 41234 } 41235 41236 func crashParamsObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41237 bp := tls.Alloc(48) 41238 defer tls.Free(48) 41239 41240 var zCrashFile uintptr 41241 41242 *(*int32)(unsafe.Pointer(bp + 40)) = -1 41243 *(*int32)(unsafe.Pointer(bp + 44)) = -1 41244 41245 if !(objc < 3) { 41246 goto __1 41247 } 41248 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26700) 41249 goto error 41250 __1: 41251 ; 41252 zCrashFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+32) 41253 if !(uint64(*(*int32)(unsafe.Pointer(bp + 32))) >= uint64(unsafe.Sizeof([500]int8{}))) { 41254 goto __2 41255 } 41256 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26726, zCrashFile, ts+11945, 0)) 41257 goto error 41258 __2: 41259 ; 41260 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+36) != 0) { 41261 goto __3 41262 } 41263 goto error 41264 __3: 41265 ; 41266 if !(processDevSymArgs(tls, interp, objc-3, objv+1*8, bp+40, bp+44) != 0) { 41267 goto __4 41268 } 41269 return TCL_ERROR 41270 __4: 41271 ; 41272 if !(*(*int32)(unsafe.Pointer(bp + 40)) >= 0) { 41273 goto __5 41274 } 41275 g.FiDeviceCharacteristics = *(*int32)(unsafe.Pointer(bp + 40)) 41276 __5: 41277 ; 41278 if !(*(*int32)(unsafe.Pointer(bp + 44)) >= 0) { 41279 goto __6 41280 } 41281 g.FiSectorSize = *(*int32)(unsafe.Pointer(bp + 44)) 41282 __6: 41283 ; 41284 g.FiCrash = *(*int32)(unsafe.Pointer(bp + 36)) 41285 libc.Xmemcpy(tls, uintptr(unsafe.Pointer(&g))+28, zCrashFile, uint64(*(*int32)(unsafe.Pointer(bp + 32))+1)) 41286 sqlite3CrashTestEnable = 1 41287 return TCL_OK 41288 41289 error: 41290 return TCL_ERROR 41291 } 41292 41293 func devSymObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41294 bp := tls.Alloc(8) 41295 defer tls.Free(8) 41296 41297 *(*int32)(unsafe.Pointer(bp)) = -1 41298 *(*int32)(unsafe.Pointer(bp + 4)) = -1 41299 41300 if processDevSymArgs(tls, interp, objc-1, objv+1*8, bp, bp+4) != 0 { 41301 return TCL_ERROR 41302 } 41303 devsym_register(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 41304 41305 return TCL_OK 41306 } 41307 41308 func writeCrashObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41309 bp := tls.Alloc(4) 41310 defer tls.Free(4) 41311 41312 *(*int32)(unsafe.Pointer(bp)) = 0 41313 41314 if objc != 2 { 41315 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26750) 41316 return TCL_ERROR 41317 } 41318 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 41319 return TCL_ERROR 41320 } 41321 41322 devsym_crash_on_write(tls, *(*int32)(unsafe.Pointer(bp))) 41323 return TCL_OK 41324 } 41325 41326 func dsUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41327 if objc != 1 { 41328 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41329 return TCL_ERROR 41330 } 41331 41332 devsym_unregister(tls) 41333 return TCL_OK 41334 } 41335 41336 func jtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41337 bp := tls.Alloc(48) 41338 defer tls.Free(48) 41339 41340 var zParent uintptr = uintptr(0) 41341 41342 if objc != 2 && objc != 3 { 41343 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26757) 41344 return TCL_ERROR 41345 } 41346 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 41347 if objc == 3 { 41348 if libc.Xstrcmp(tls, zParent, ts+26779) != 0 { 41349 tcl.XTcl_AppendResult(tls, interp, 41350 libc.VaList(bp, ts+11851, zParent, ts+26788, 0)) 41351 return TCL_ERROR 41352 } 41353 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41354 } 41355 41356 if !(int32(*(*int8)(unsafe.Pointer(zParent))) != 0) { 41357 zParent = uintptr(0) 41358 } 41359 if jt_register(tls, zParent, libc.Bool32(objc == 3)) != 0 { 41360 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26808, 0)) 41361 return TCL_ERROR 41362 } 41363 41364 return TCL_OK 41365 } 41366 41367 func jtUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41368 if objc != 1 { 41369 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41370 return TCL_ERROR 41371 } 41372 41373 jt_unregister(tls) 41374 return TCL_OK 41375 } 41376 41377 func Sqlitetest6_Init(tls *libc.TLS, interp uintptr) int32 { 41378 tcl.XTcl_CreateObjCommand(tls, interp, ts+26829, *(*uintptr)(unsafe.Pointer(&struct { 41379 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41380 }{crashEnableCmd})), uintptr(0), uintptr(0)) 41381 tcl.XTcl_CreateObjCommand(tls, interp, ts+26850, *(*uintptr)(unsafe.Pointer(&struct { 41382 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41383 }{crashParamsObjCmd})), uintptr(0), uintptr(0)) 41384 tcl.XTcl_CreateObjCommand(tls, interp, ts+26870, *(*uintptr)(unsafe.Pointer(&struct { 41385 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41386 }{crashNowCmd})), uintptr(0), uintptr(0)) 41387 tcl.XTcl_CreateObjCommand(tls, interp, ts+26888, *(*uintptr)(unsafe.Pointer(&struct { 41388 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41389 }{devSymObjCmd})), uintptr(0), uintptr(0)) 41390 tcl.XTcl_CreateObjCommand(tls, interp, ts+26912, *(*uintptr)(unsafe.Pointer(&struct { 41391 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41392 }{writeCrashObjCmd})), uintptr(0), uintptr(0)) 41393 tcl.XTcl_CreateObjCommand(tls, interp, ts+26935, *(*uintptr)(unsafe.Pointer(&struct { 41394 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41395 }{dsUnregisterObjCmd})), uintptr(0), uintptr(0)) 41396 tcl.XTcl_CreateObjCommand(tls, interp, ts+26953, *(*uintptr)(unsafe.Pointer(&struct { 41397 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41398 }{jtObjCmd})), uintptr(0), uintptr(0)) 41399 tcl.XTcl_CreateObjCommand(tls, interp, ts+26969, *(*uintptr)(unsafe.Pointer(&struct { 41400 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41401 }{jtUnregisterObjCmd})), uintptr(0), uintptr(0)) 41402 return TCL_OK 41403 } 41404 41405 type Thread1 = struct { 41406 FzFilename uintptr 41407 FxOp uintptr 41408 FzArg uintptr 41409 Fopnum int32 41410 Fbusy int32 41411 Fcompleted int32 41412 F__ccgo_pad1 [4]byte 41413 Fdb uintptr 41414 FpStmt uintptr 41415 FzErr uintptr 41416 FzStaticErr uintptr 41417 Frc int32 41418 Fargc int32 41419 Fargv [100]uintptr 41420 Fcolv [100]uintptr 41421 FnServer int32 41422 F__ccgo_pad2 [4]byte 41423 } 41424 41425 var threadset1 [26]Thread1 41426 41427 func client_main(tls *libc.TLS, pArg uintptr) uintptr { 41428 var p uintptr = pArg 41429 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 41430 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 41431 } 41432 sqlite3_client_open(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename, p+40) 41433 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) { 41434 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread1)(unsafe.Pointer(p)).Fdb)) 41435 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 41436 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 41437 } 41438 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41439 (*Thread1)(unsafe.Pointer(p)).Fcompleted = 1 41440 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 41441 libc.Xsched_yield(tls) 41442 } 41443 for (*Thread1)(unsafe.Pointer(p)).FxOp != 0 { 41444 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 41445 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 41446 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 41447 } 41448 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread1)(unsafe.Pointer(p)).FxOp})).f(tls, p) 41449 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 41450 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 41451 libc.Xsched_yield(tls) 41452 } 41453 } 41454 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 41455 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41456 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41457 } 41458 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 41459 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 41460 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 41461 } 41462 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 41463 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 41464 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 41465 } 41466 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 41467 sqlite3.Xsqlite3_thread_cleanup(tls) 41468 return uintptr(0) 41469 } 41470 41471 func parse_client_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 41472 bp := tls.Alloc(16) 41473 defer tls.Free(16) 41474 41475 if zArg == uintptr(0) || int32(*(*int8)(unsafe.Pointer(zArg))) == 0 || int32(*(*int8)(unsafe.Pointer(zArg + 1))) != 0 || !(libc.Xisupper(tls, int32(uint8(*(*int8)(unsafe.Pointer(zArg))))) != 0) { 41476 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 41477 return -1 41478 } 41479 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 41480 } 41481 41482 func tcl_client_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41483 bp := tls.Alloc(96) 41484 defer tls.Free(96) 41485 41486 var i int32 41487 41488 var rc int32 41489 41490 if argc != 3 { 41491 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41492 ts+25780, 0)) 41493 return TCL_ERROR 41494 } 41495 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41496 if i < 0 { 41497 return TCL_ERROR 41498 } 41499 if threadset1[i].Fbusy != 0 { 41500 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 41501 return TCL_ERROR 41502 } 41503 threadset1[i].Fbusy = 1 41504 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 41505 threadset1[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 41506 threadset1[i].Fopnum = 1 41507 threadset1[i].Fcompleted = 0 41508 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 41509 f func(*libc.TLS, uintptr) uintptr 41510 }{client_main})), uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41511 if rc != 0 { 41512 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 41513 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 41514 threadset1[i].Fbusy = 0 41515 return TCL_ERROR 41516 } 41517 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 41518 if threadset1[i].FnServer == 0 { 41519 threadset1[i].FnServer = 1 41520 sqlite3_server_start2(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688+1680) 41521 } 41522 return TCL_OK 41523 } 41524 41525 func client_wait(tls *libc.TLS, p uintptr) { 41526 for (*Thread1)(unsafe.Pointer(p)).Fopnum > (*Thread1)(unsafe.Pointer(p)).Fcompleted { 41527 libc.Xsched_yield(tls) 41528 } 41529 } 41530 41531 func tcl_client_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41532 bp := tls.Alloc(48) 41533 defer tls.Free(48) 41534 41535 var i int32 41536 41537 if argc != 2 { 41538 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41539 ts+25849, 0)) 41540 return TCL_ERROR 41541 } 41542 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41543 if i < 0 { 41544 return TCL_ERROR 41545 } 41546 if !(threadset1[i].Fbusy != 0) { 41547 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41548 return TCL_ERROR 41549 } 41550 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41551 return TCL_OK 41552 } 41553 41554 func stop_thread(tls *libc.TLS, p uintptr) { 41555 client_wait(tls, p) 41556 (*Thread1)(unsafe.Pointer(p)).FxOp = uintptr(0) 41557 (*Thread1)(unsafe.Pointer(p)).Fopnum++ 41558 client_wait(tls, p) 41559 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzArg) 41560 (*Thread1)(unsafe.Pointer(p)).FzArg = uintptr(0) 41561 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename) 41562 (*Thread1)(unsafe.Pointer(p)).FzFilename = uintptr(0) 41563 (*Thread1)(unsafe.Pointer(p)).Fbusy = 0 41564 } 41565 41566 func tcl_client_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41567 bp := tls.Alloc(48) 41568 defer tls.Free(48) 41569 41570 var i int32 41571 41572 if argc != 2 { 41573 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41574 ts+25849, 0)) 41575 return TCL_ERROR 41576 } 41577 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 41578 for i = 0; i < N_THREAD; i++ { 41579 if threadset1[i].Fbusy != 0 { 41580 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41581 } 41582 } 41583 } else { 41584 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41585 if i < 0 { 41586 return TCL_ERROR 41587 } 41588 if !(threadset1[i].Fbusy != 0) { 41589 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41590 return TCL_ERROR 41591 } 41592 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41593 } 41594 41595 for i = 0; i < N_THREAD && threadset1[i].Fbusy == 0; i++ { 41596 } 41597 if i >= N_THREAD { 41598 sqlite3_server_stop(tls) 41599 for 1 != 0 { 41600 for i = 0; i < N_THREAD && threadset1[i].FnServer == 0; i++ { 41601 } 41602 if i == N_THREAD { 41603 break 41604 } 41605 libc.Xsched_yield(tls) 41606 } 41607 } 41608 return TCL_OK 41609 } 41610 41611 func tcl_client_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41612 bp := tls.Alloc(172) 41613 defer tls.Free(172) 41614 41615 var i int32 41616 41617 if argc != 2 { 41618 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41619 ts+25849, 0)) 41620 return TCL_ERROR 41621 } 41622 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41623 if i < 0 { 41624 return TCL_ERROR 41625 } 41626 if !(threadset1[i].Fbusy != 0) { 41627 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41628 return TCL_ERROR 41629 } 41630 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41631 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset1[i].Fargc)) 41632 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 41633 return TCL_OK 41634 } 41635 41636 func tcl_client_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41637 bp := tls.Alloc(84) 41638 defer tls.Free(84) 41639 41640 var i int32 41641 41642 if argc != 3 { 41643 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41644 ts+25868, 0)) 41645 return TCL_ERROR 41646 } 41647 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41648 if i < 0 { 41649 return TCL_ERROR 41650 } 41651 if !(threadset1[i].Fbusy != 0) { 41652 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41653 return TCL_ERROR 41654 } 41655 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 41656 return TCL_ERROR 41657 } 41658 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41659 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 41660 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 41661 return TCL_ERROR 41662 } 41663 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)) 41664 return TCL_OK 41665 } 41666 41667 func tcl_client_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41668 bp := tls.Alloc(84) 41669 defer tls.Free(84) 41670 41671 var i int32 41672 41673 if argc != 3 { 41674 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41675 ts+25868, 0)) 41676 return TCL_ERROR 41677 } 41678 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41679 if i < 0 { 41680 return TCL_ERROR 41681 } 41682 if !(threadset1[i].Fbusy != 0) { 41683 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41684 return TCL_ERROR 41685 } 41686 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 41687 return TCL_ERROR 41688 } 41689 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41690 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 41691 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 41692 return TCL_ERROR 41693 } 41694 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)) 41695 return TCL_OK 41696 } 41697 41698 func tcl_client_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41699 bp := tls.Alloc(64) 41700 defer tls.Free(64) 41701 41702 var i int32 41703 var zName uintptr 41704 41705 if argc != 2 { 41706 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41707 ts+25849, 0)) 41708 return TCL_ERROR 41709 } 41710 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41711 if i < 0 { 41712 return TCL_ERROR 41713 } 41714 if !(threadset1[i].Fbusy != 0) { 41715 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41716 return TCL_ERROR 41717 } 41718 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41719 zName = sqlite3.Xsqlite3ErrName(tls, threadset1[i].Frc) 41720 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 41721 return TCL_OK 41722 } 41723 41724 func tcl_client_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41725 bp := tls.Alloc(64) 41726 defer tls.Free(64) 41727 41728 var i int32 41729 41730 if argc != 2 { 41731 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41732 ts+25849, 0)) 41733 return TCL_ERROR 41734 } 41735 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41736 if i < 0 { 41737 return TCL_ERROR 41738 } 41739 if !(threadset1[i].Fbusy != 0) { 41740 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41741 return TCL_ERROR 41742 } 41743 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41744 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset1[i].FzErr, 0)) 41745 return TCL_OK 41746 } 41747 41748 func do_compile1(tls *libc.TLS, p uintptr) { 41749 if (*Thread1)(unsafe.Pointer(p)).Fdb == uintptr(0) { 41750 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 41751 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41752 return 41753 } 41754 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 41755 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41756 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41757 } 41758 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_prepare(tls, (*Thread1)(unsafe.Pointer(p)).Fdb, (*Thread1)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 41759 } 41760 41761 func tcl_client_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41762 bp := tls.Alloc(56) 41763 defer tls.Free(56) 41764 41765 var i int32 41766 if argc != 3 { 41767 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41768 ts+25921, 0)) 41769 return TCL_ERROR 41770 } 41771 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41772 if i < 0 { 41773 return TCL_ERROR 41774 } 41775 if !(threadset1[i].Fbusy != 0) { 41776 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41777 return TCL_ERROR 41778 } 41779 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41780 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile1})) 41781 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 41782 threadset1[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 41783 threadset1[i].Fopnum++ 41784 return TCL_OK 41785 } 41786 41787 func do_step1(tls *libc.TLS, p uintptr) { 41788 var i int32 41789 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41790 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41791 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41792 return 41793 } 41794 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_step(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41795 if (*Thread1)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 41796 (*Thread1)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41797 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt); i++ { 41798 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 41799 } 41800 for i = 0; i < (*Thread1)(unsafe.Pointer(p)).Fargc; i++ { 41801 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 41802 } 41803 } 41804 } 41805 41806 func tcl_client_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41807 bp := tls.Alloc(48) 41808 defer tls.Free(48) 41809 41810 var i int32 41811 if argc != 2 { 41812 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41813 ts+25958, 0)) 41814 return TCL_ERROR 41815 } 41816 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41817 if i < 0 { 41818 return TCL_ERROR 41819 } 41820 if !(threadset1[i].Fbusy != 0) { 41821 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41822 return TCL_ERROR 41823 } 41824 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41825 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step1})) 41826 threadset1[i].Fopnum++ 41827 return TCL_OK 41828 } 41829 41830 func do_finalize1(tls *libc.TLS, p uintptr) { 41831 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41832 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41833 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41834 return 41835 } 41836 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41837 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41838 } 41839 41840 func tcl_client_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41841 bp := tls.Alloc(48) 41842 defer tls.Free(48) 41843 41844 var i int32 41845 if argc != 2 { 41846 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41847 ts+25958, 0)) 41848 return TCL_ERROR 41849 } 41850 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41851 if i < 0 { 41852 return TCL_ERROR 41853 } 41854 if !(threadset1[i].Fbusy != 0) { 41855 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41856 return TCL_ERROR 41857 } 41858 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41859 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize1})) 41860 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 41861 threadset1[i].FzArg = uintptr(0) 41862 threadset1[i].Fopnum++ 41863 return TCL_OK 41864 } 41865 41866 func do_reset(tls *libc.TLS, p uintptr) { 41867 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41868 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41869 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41870 return 41871 } 41872 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_reset(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41873 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41874 } 41875 41876 func tcl_client_reset(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41877 bp := tls.Alloc(48) 41878 defer tls.Free(48) 41879 41880 var i int32 41881 if argc != 2 { 41882 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41883 ts+25958, 0)) 41884 return TCL_ERROR 41885 } 41886 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41887 if i < 0 { 41888 return TCL_ERROR 41889 } 41890 if !(threadset1[i].Fbusy != 0) { 41891 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41892 return TCL_ERROR 41893 } 41894 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41895 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_reset})) 41896 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 41897 threadset1[i].FzArg = uintptr(0) 41898 threadset1[i].Fopnum++ 41899 return TCL_OK 41900 } 41901 41902 func tcl_client_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41903 bp := tls.Alloc(64) 41904 defer tls.Free(64) 41905 41906 var i int32 41907 var j int32 41908 var temp uintptr 41909 if argc != 3 { 41910 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41911 ts+25963, 0)) 41912 return TCL_ERROR 41913 } 41914 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41915 if i < 0 { 41916 return TCL_ERROR 41917 } 41918 if !(threadset1[i].Fbusy != 0) { 41919 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41920 return TCL_ERROR 41921 } 41922 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41923 j = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 41924 if j < 0 { 41925 return TCL_ERROR 41926 } 41927 if !(threadset1[j].Fbusy != 0) { 41928 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 41929 return TCL_ERROR 41930 } 41931 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(j)*1688) 41932 temp = threadset1[i].Fdb 41933 threadset1[i].Fdb = threadset1[j].Fdb 41934 threadset1[j].Fdb = temp 41935 return TCL_OK 41936 } 41937 41938 func Sqlitetest7_Init(tls *libc.TLS, interp uintptr) int32 { 41939 var i int32 41940 41941 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd6))/uint64(unsafe.Sizeof(struct { 41942 FzName uintptr 41943 FxProc uintptr 41944 }{})); i++ { 41945 tcl.XTcl_CreateCommand(tls, interp, aCmd6[i].FzName, aCmd6[i].FxProc, uintptr(0), uintptr(0)) 41946 } 41947 return TCL_OK 41948 } 41949 41950 var aCmd6 = [13]struct { 41951 FzName uintptr 41952 FxProc uintptr 41953 }{ 41954 {FzName: ts + 26987, FxProc: 0}, 41955 {FzName: ts + 27001, FxProc: 0}, 41956 {FzName: ts + 27013, FxProc: 0}, 41957 {FzName: ts + 27025, FxProc: 0}, 41958 {FzName: ts + 27037, FxProc: 0}, 41959 {FzName: ts + 27049, FxProc: 0}, 41960 {FzName: ts + 27064, FxProc: 0}, 41961 {FzName: ts + 27078, FxProc: 0}, 41962 {FzName: ts + 27091, FxProc: 0}, 41963 {FzName: ts + 27106, FxProc: 0}, 41964 {FzName: ts + 27118, FxProc: 0}, 41965 {FzName: ts + 27131, FxProc: 0}, 41966 {FzName: ts + 27147, FxProc: 0}, 41967 } 41968 41969 type echo_vtab1 = struct { 41970 Fbase sqlite3_vtab 41971 Finterp uintptr 41972 Fdb uintptr 41973 FisPattern int32 41974 FinTransaction int32 41975 FzThis uintptr 41976 FzTableName uintptr 41977 FzLogName uintptr 41978 FnCol int32 41979 F__ccgo_pad1 [4]byte 41980 FaIndex uintptr 41981 FaCol uintptr 41982 } 41983 41984 type echo_vtab = echo_vtab1 41985 type echo_cursor1 = struct { 41986 Fbase sqlite3_vtab_cursor 41987 FpStmt uintptr 41988 } 41989 41990 type echo_cursor = echo_cursor1 41991 41992 func simulateVtabError(tls *libc.TLS, p uintptr, zMethod uintptr) int32 { 41993 bp := tls.Alloc(152) 41994 defer tls.Free(152) 41995 41996 var zErr uintptr 41997 41998 *(*int8)(unsafe.Pointer(bp + 24 + 127)) = int8(0) 41999 sqlite3.Xsqlite3_snprintf(tls, 127, bp+24, ts+27159, libc.VaList(bp, zMethod, (*echo_vtab)(unsafe.Pointer(p)).FzTableName)) 42000 zErr = tcl.XTcl_GetVar2(tls, (*echo_vtab)(unsafe.Pointer(p)).Finterp, bp+24, uintptr(0), TCL_GLOBAL_ONLY) 42001 if zErr != 0 { 42002 (*echo_vtab)(unsafe.Pointer(p)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+16, zErr)) 42003 } 42004 return libc.Bool32(zErr != uintptr(0)) 42005 } 42006 42007 func dequoteString(tls *libc.TLS, z uintptr) { 42008 var quote int32 42009 var i int32 42010 var j int32 42011 if z == uintptr(0) { 42012 return 42013 } 42014 quote = int32(*(*int8)(unsafe.Pointer(z))) 42015 switch quote { 42016 case '\'': 42017 break 42018 case '"': 42019 break 42020 case '`': 42021 break 42022 case '[': 42023 quote = ']' 42024 break 42025 default: 42026 return 42027 } 42028 i = 1 42029 j = 0 42030 for ; *(*int8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 42031 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == quote { 42032 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i+1)))) == quote { 42033 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(quote) 42034 i++ 42035 } else { 42036 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(0) 42037 break 42038 } 42039 } else { 42040 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 42041 } 42042 } 42043 } 42044 42045 func getColumnNames(tls *libc.TLS, db uintptr, zTab uintptr, paCol uintptr, pnCol uintptr) int32 { 42046 bp := tls.Alloc(24) 42047 defer tls.Free(24) 42048 42049 var aCol uintptr 42050 var zSql uintptr 42051 42052 var rc int32 42053 var nCol int32 42054 var zName uintptr 42055 var ii int32 42056 var nBytes int32 42057 var zSpace uintptr 42058 aCol = uintptr(0) 42059 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42060 rc = SQLITE_OK 42061 nCol = 0 42062 42063 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27203, libc.VaList(bp, zTab)) 42064 if !!(zSql != 0) { 42065 goto __1 42066 } 42067 rc = SQLITE_NOMEM 42068 goto out 42069 __1: 42070 ; 42071 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42072 sqlite3.Xsqlite3_free(tls, zSql) 42073 42074 if !(rc == SQLITE_OK) { 42075 goto __2 42076 } 42077 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42078 42079 nBytes = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(nCol)) 42080 ii = 0 42081 __3: 42082 if !(ii < nCol) { 42083 goto __5 42084 } 42085 zName = sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii) 42086 if !!(zName != 0) { 42087 goto __6 42088 } 42089 rc = SQLITE_NOMEM 42090 goto out 42091 __6: 42092 ; 42093 nBytes = nBytes + (int32(libc.Xstrlen(tls, zName)) + 1) 42094 goto __4 42095 __4: 42096 ii++ 42097 goto __3 42098 goto __5 42099 __5: 42100 ; 42101 aCol = sqlite3.Xsqlite3MallocZero(tls, uint64(nBytes)) 42102 if !!(aCol != 0) { 42103 goto __7 42104 } 42105 rc = SQLITE_NOMEM 42106 goto out 42107 __7: 42108 ; 42109 zSpace = aCol + uintptr(nCol)*8 42110 ii = 0 42111 __8: 42112 if !(ii < nCol) { 42113 goto __10 42114 } 42115 *(*uintptr)(unsafe.Pointer(aCol + uintptr(ii)*8)) = zSpace 42116 sqlite3.Xsqlite3_snprintf(tls, nBytes, zSpace, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii))) 42117 zSpace += uintptr(int32(libc.Xstrlen(tls, zSpace)) + 1) 42118 goto __9 42119 __9: 42120 ii++ 42121 goto __8 42122 goto __10 42123 __10: 42124 ; 42125 __2: 42126 ; 42127 *(*uintptr)(unsafe.Pointer(paCol)) = aCol 42128 *(*int32)(unsafe.Pointer(pnCol)) = nCol 42129 42130 out: 42131 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42132 return rc 42133 } 42134 42135 func getIndexArray(tls *libc.TLS, db uintptr, zTab uintptr, nCol int32, paIndex uintptr) int32 { 42136 bp := tls.Alloc(32) 42137 defer tls.Free(32) 42138 42139 var aIndex uintptr 42140 var rc int32 42141 var zSql uintptr 42142 var cid int32 42143 var zIdx uintptr 42144 42145 var rc2 int32 42146 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42147 aIndex = uintptr(0) 42148 42149 aIndex = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(nCol)) 42150 if !!(aIndex != 0) { 42151 goto __1 42152 } 42153 rc = SQLITE_NOMEM 42154 goto get_index_array_out 42155 __1: 42156 ; 42157 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27220, libc.VaList(bp, zTab)) 42158 if !!(zSql != 0) { 42159 goto __2 42160 } 42161 rc = SQLITE_NOMEM 42162 goto get_index_array_out 42163 __2: 42164 ; 42165 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42166 sqlite3.Xsqlite3_free(tls, zSql) 42167 42168 __3: 42169 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW) { 42170 goto __4 42171 } 42172 zIdx = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 42173 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 42174 if !(zIdx == uintptr(0)) { 42175 goto __5 42176 } 42177 goto __3 42178 __5: 42179 ; 42180 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27242, libc.VaList(bp+8, zIdx)) 42181 if !!(zSql != 0) { 42182 goto __6 42183 } 42184 rc = SQLITE_NOMEM 42185 goto get_index_array_out 42186 __6: 42187 ; 42188 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+24, uintptr(0)) 42189 sqlite3.Xsqlite3_free(tls, zSql) 42190 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW) { 42191 goto __7 42192 } 42193 cid = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 42194 42195 *(*int32)(unsafe.Pointer(aIndex + uintptr(cid)*4)) = 1 42196 __7: 42197 ; 42198 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0) { 42199 goto __8 42200 } 42201 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 42202 __8: 42203 ; 42204 if !(rc != SQLITE_OK) { 42205 goto __9 42206 } 42207 goto get_index_array_out 42208 __9: 42209 ; 42210 goto __3 42211 __4: 42212 ; 42213 get_index_array_out: 42214 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { 42215 goto __10 42216 } 42217 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42218 if !(rc == SQLITE_OK) { 42219 goto __11 42220 } 42221 rc = rc2 42222 __11: 42223 ; 42224 __10: 42225 ; 42226 if !(rc != SQLITE_OK) { 42227 goto __12 42228 } 42229 sqlite3.Xsqlite3_free(tls, aIndex) 42230 aIndex = uintptr(0) 42231 __12: 42232 ; 42233 *(*uintptr)(unsafe.Pointer(paIndex)) = aIndex 42234 return rc 42235 } 42236 42237 func appendToEchoModule(tls *libc.TLS, interp uintptr, zArg uintptr) { 42238 var flags int32 = TCL_APPEND_VALUE | TCL_LIST_ELEMENT | TCL_GLOBAL_ONLY 42239 tcl.XTcl_SetVar2(tls, interp, ts+27264, uintptr(0), func() uintptr { 42240 if zArg != 0 { 42241 return zArg 42242 } 42243 return ts + 584 42244 }(), flags) 42245 } 42246 42247 func echoDeclareVtab(tls *libc.TLS, pVtab uintptr, db uintptr) int32 { 42248 bp := tls.Alloc(8) 42249 defer tls.Free(8) 42250 42251 var rc int32 = SQLITE_OK 42252 42253 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 { 42254 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 42255 rc = sqlite3.Xsqlite3_prepare(tls, db, 42256 ts+27276, 42257 -1, bp, uintptr(0)) 42258 if rc == SQLITE_OK { 42259 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, -1, uintptr(0)) 42260 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) == SQLITE_ROW { 42261 var rc2 int32 42262 var zCreateTable uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 42263 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 42264 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 42265 if rc == SQLITE_OK { 42266 rc = rc2 42267 } 42268 } else { 42269 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 42270 if rc == SQLITE_OK { 42271 rc = SQLITE_ERROR 42272 } 42273 } 42274 if rc == SQLITE_OK { 42275 rc = getColumnNames(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, pVtab+88, pVtab+72) 42276 } 42277 if rc == SQLITE_OK { 42278 rc = getIndexArray(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, (*echo_vtab)(unsafe.Pointer(pVtab)).FnCol, pVtab+80) 42279 } 42280 } 42281 } 42282 42283 return rc 42284 } 42285 42286 func echoDestructor(tls *libc.TLS, pVtab uintptr) int32 { 42287 var p uintptr = pVtab 42288 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaIndex) 42289 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaCol) 42290 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis) 42291 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzTableName) 42292 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzLogName) 42293 sqlite3.Xsqlite3_free(tls, p) 42294 return 0 42295 } 42296 42297 type EchoModule1 = struct { 42298 Finterp uintptr 42299 Fdb uintptr 42300 } 42301 42302 type EchoModule = EchoModule1 42303 42304 func echoConstructor(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42305 bp := tls.Alloc(32) 42306 defer tls.Free(32) 42307 42308 var rc int32 42309 var i int32 42310 var pVtab uintptr 42311 42312 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_vtab{}))) 42313 if !(pVtab != 0) { 42314 return SQLITE_NOMEM 42315 } 42316 (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp = (*EchoModule)(unsafe.Pointer(pAux)).Finterp 42317 (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb = db 42318 42319 (*echo_vtab)(unsafe.Pointer(pVtab)).FzThis = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42320 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzThis) != 0) { 42321 echoDestructor(tls, pVtab) 42322 return SQLITE_NOMEM 42323 } 42324 42325 if argc > 3 { 42326 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 42327 dequoteString(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 42328 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 && int32(*(*int8)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName))) == '*' { 42329 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)) 42330 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 42331 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = z 42332 (*echo_vtab)(unsafe.Pointer(pVtab)).FisPattern = 1 42333 } 42334 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) != 0) { 42335 echoDestructor(tls, pVtab) 42336 return SQLITE_NOMEM 42337 } 42338 } 42339 42340 for i = 0; i < argc; i++ { 42341 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 42342 } 42343 42344 rc = echoDeclareVtab(tls, pVtab, db) 42345 if rc != SQLITE_OK { 42346 echoDestructor(tls, pVtab) 42347 return rc 42348 } 42349 42350 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 42351 return SQLITE_OK 42352 } 42353 42354 func echoCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42355 bp := tls.Alloc(24) 42356 defer tls.Free(24) 42357 42358 var rc int32 = SQLITE_OK 42359 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27345) 42360 rc = echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 42361 42362 if rc == SQLITE_OK && argc == 5 { 42363 var zSql uintptr 42364 var pVtab uintptr = *(*uintptr)(unsafe.Pointer(ppVtab)) 42365 (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) 42366 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27353, libc.VaList(bp+8, (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName)) 42367 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 42368 sqlite3.Xsqlite3_free(tls, zSql) 42369 if rc != SQLITE_OK { 42370 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, sqlite3.Xsqlite3_errmsg(tls, db))) 42371 } 42372 } 42373 42374 if *(*uintptr)(unsafe.Pointer(ppVtab)) != 0 && rc != SQLITE_OK { 42375 echoDestructor(tls, *(*uintptr)(unsafe.Pointer(ppVtab))) 42376 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 42377 } 42378 42379 if rc == SQLITE_OK { 42380 (*echo_vtab)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppVtab)))).FinTransaction = 1 42381 } 42382 42383 return rc 42384 } 42385 42386 func echoConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42387 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27377) 42388 return echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 42389 } 42390 42391 func echoDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 42392 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27386) 42393 return echoDestructor(tls, pVtab) 42394 } 42395 42396 func echoDestroy(tls *libc.TLS, pVtab uintptr) int32 { 42397 bp := tls.Alloc(8) 42398 defer tls.Free(8) 42399 42400 var rc int32 = SQLITE_OK 42401 var p uintptr = pVtab 42402 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27398) 42403 42404 if p != 0 && (*echo_vtab)(unsafe.Pointer(p)).FzLogName != 0 { 42405 var zSql uintptr 42406 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27407, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzLogName)) 42407 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 42408 sqlite3.Xsqlite3_free(tls, zSql) 42409 } 42410 42411 if rc == SQLITE_OK { 42412 rc = echoDestructor(tls, pVtab) 42413 } 42414 return rc 42415 } 42416 42417 func echoOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 42418 var pCur uintptr 42419 if simulateVtabError(tls, pVTab, ts+27421) != 0 { 42420 return SQLITE_ERROR 42421 } 42422 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_cursor{}))) 42423 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 42424 return func() int32 { 42425 if pCur != 0 { 42426 return SQLITE_OK 42427 } 42428 return SQLITE_NOMEM 42429 }() 42430 } 42431 42432 func echoClose(tls *libc.TLS, cur uintptr) int32 { 42433 var rc int32 42434 var pCur uintptr = cur 42435 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt 42436 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 42437 sqlite3.Xsqlite3_free(tls, pCur) 42438 rc = sqlite3.Xsqlite3_finalize(tls, pStmt) 42439 return rc 42440 } 42441 42442 func echoEof(tls *libc.TLS, cur uintptr) int32 { 42443 return func() int32 { 42444 if (*echo_cursor)(unsafe.Pointer(cur)).FpStmt != 0 { 42445 return 0 42446 } 42447 return 1 42448 }() 42449 } 42450 42451 func echoNext(tls *libc.TLS, cur uintptr) int32 { 42452 var rc int32 = SQLITE_OK 42453 var pCur uintptr = cur 42454 42455 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27427) != 0 { 42456 return SQLITE_ERROR 42457 } 42458 42459 if (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt != 0 { 42460 rc = sqlite3.Xsqlite3_step(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 42461 if rc == SQLITE_ROW { 42462 rc = SQLITE_OK 42463 } else { 42464 rc = sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 42465 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 42466 } 42467 } 42468 42469 return rc 42470 } 42471 42472 func echoColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 42473 var iCol int32 = i + 1 42474 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 42475 42476 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27433) != 0 { 42477 return SQLITE_ERROR 42478 } 42479 42480 if !(pStmt != 0) { 42481 sqlite3.Xsqlite3_result_null(tls, ctx) 42482 } else { 42483 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, pStmt, iCol)) 42484 } 42485 return SQLITE_OK 42486 } 42487 42488 func echoRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 42489 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 42490 42491 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+2304) != 0 { 42492 return SQLITE_ERROR 42493 } 42494 42495 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 42496 return SQLITE_OK 42497 } 42498 42499 func hashString(tls *libc.TLS, zString uintptr) int32 { 42500 var val u32 = u32(0) 42501 var ii int32 42502 for ii = 0; *(*int8)(unsafe.Pointer(zString + uintptr(ii))) != 0; ii++ { 42503 val = val<<3 + u32(int32(*(*int8)(unsafe.Pointer(zString + uintptr(ii))))) 42504 } 42505 return int32(val & u32(0x7fffffff)) 42506 } 42507 42508 func echoFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 42509 var rc int32 42510 var i int32 42511 42512 var pCur uintptr = pVtabCursor 42513 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 42514 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 42515 42516 if simulateVtabError(tls, pVtab, ts+27441) != 0 { 42517 return SQLITE_ERROR 42518 } 42519 42520 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27441) 42521 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, idxStr) 42522 for i = 0; i < argc; i++ { 42523 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 42524 } 42525 42526 sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 42527 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 42528 42529 rc = sqlite3.Xsqlite3_prepare(tls, db, idxStr, -1, pCur+8, uintptr(0)) 42530 42531 for i = 0; rc == SQLITE_OK && i < argc; i++ { 42532 rc = sqlite3.Xsqlite3_bind_value(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt, i+1, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 42533 } 42534 42535 if rc == SQLITE_OK { 42536 rc = echoNext(tls, pVtabCursor) 42537 } 42538 42539 return rc 42540 } 42541 42542 func string_concat(tls *libc.TLS, pzStr uintptr, zAppend uintptr, doFree int32, pRc uintptr) { 42543 bp := tls.Alloc(24) 42544 defer tls.Free(24) 42545 42546 var zIn uintptr = *(*uintptr)(unsafe.Pointer(pzStr)) 42547 if !(zAppend != 0) && doFree != 0 && *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 42548 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 42549 } 42550 if *(*int32)(unsafe.Pointer(pRc)) != SQLITE_OK { 42551 sqlite3.Xsqlite3_free(tls, zIn) 42552 zIn = uintptr(0) 42553 } else { 42554 if zIn != 0 { 42555 var zTemp uintptr = zIn 42556 zIn = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp, zIn, zAppend)) 42557 sqlite3.Xsqlite3_free(tls, zTemp) 42558 } else { 42559 zIn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zAppend)) 42560 } 42561 if !(zIn != 0) { 42562 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 42563 } 42564 } 42565 *(*uintptr)(unsafe.Pointer(pzStr)) = zIn 42566 if doFree != 0 { 42567 sqlite3.Xsqlite3_free(tls, zAppend) 42568 } 42569 } 42570 42571 func echoSelectList(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) uintptr { 42572 bp := tls.Alloc(24) 42573 defer tls.Free(24) 42574 42575 var zRet uintptr = uintptr(0) 42576 if sqlite3.Xsqlite3_libversion_number(tls) < 3010000 { 42577 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27449, 0) 42578 } else { 42579 var i int32 42580 for i = 0; i < (*echo_vtab)(unsafe.Pointer(pTab)).FnCol; i++ { 42581 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed&(uint64(1)<<func() int32 { 42582 if i >= 63 { 42583 return 63 42584 } 42585 return i 42586 }()) != 0 { 42587 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27453, libc.VaList(bp, zRet, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pTab)).FaCol + uintptr(i)*8)))) 42588 } else { 42589 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27460, libc.VaList(bp+16, zRet)) 42590 } 42591 if !(zRet != 0) { 42592 break 42593 } 42594 } 42595 } 42596 return zRet 42597 } 42598 42599 func echoBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 42600 bp := tls.Alloc(100) 42601 defer tls.Free(100) 42602 42603 var ii int32 42604 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 42605 var zCol uintptr = uintptr(0) 42606 var zNew uintptr 42607 var nArg int32 = 0 42608 var zSep uintptr = ts + 9392 42609 var pVtab uintptr = tab 42610 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 42611 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 42612 42613 var nRow int32 = 0 42614 var useIdx int32 = 0 42615 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 42616 var useCost int32 = 0 42617 var cost float64 = float64(0) 42618 var isIgnoreUsable int32 = 0 42619 if tcl.XTcl_GetVar2(tls, interp, ts+27469, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 42620 isIgnoreUsable = 1 42621 } 42622 42623 if simulateVtabError(tls, pVtab, ts+27495) != 0 { 42624 return SQLITE_ERROR 42625 } 42626 42627 if tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 42628 cost = libc.Xatof(tls, tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY)) 42629 useCost = 1 42630 } else { 42631 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27523, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42632 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 42633 return SQLITE_NOMEM 42634 } 42635 *(*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)) 42636 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 42637 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 42638 return *(*int32)(unsafe.Pointer(bp + 96)) 42639 } 42640 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 42641 nRow = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 42642 *(*int32)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 42643 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 42644 return *(*int32)(unsafe.Pointer(bp + 96)) 42645 } 42646 } 42647 42648 zCol = echoSelectList(tls, pVtab, pIdxInfo) 42649 if !(zCol != 0) { 42650 return SQLITE_NOMEM 42651 } 42652 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27547, libc.VaList(bp+8, zCol, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42653 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 42654 return SQLITE_NOMEM 42655 } 42656 42657 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 42658 var pConstraint uintptr 42659 var pUsage uintptr 42660 var iCol int32 42661 42662 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 42663 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 42664 42665 if !(isIgnoreUsable != 0) && !(int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) != 0) { 42666 continue 42667 } 42668 42669 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn 42670 if iCol < 0 || *(*int32)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaIndex + uintptr(iCol)*4)) != 0 { 42671 var zNewCol uintptr 42672 if iCol >= 0 { 42673 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 42674 } else { 42675 zNewCol = ts + 6427 42676 } 42677 var zOp uintptr = uintptr(0) 42678 useIdx = 1 42679 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) { 42680 case SQLITE_INDEX_CONSTRAINT_EQ: 42681 zOp = ts + 27570 42682 break 42683 fallthrough 42684 case SQLITE_INDEX_CONSTRAINT_LT: 42685 zOp = ts + 27572 42686 break 42687 fallthrough 42688 case SQLITE_INDEX_CONSTRAINT_GT: 42689 zOp = ts + 27574 42690 break 42691 fallthrough 42692 case SQLITE_INDEX_CONSTRAINT_LE: 42693 zOp = ts + 27576 42694 break 42695 fallthrough 42696 case SQLITE_INDEX_CONSTRAINT_GE: 42697 zOp = ts + 27579 42698 break 42699 fallthrough 42700 case SQLITE_INDEX_CONSTRAINT_MATCH: 42701 zOp = ts + 27582 42702 break 42703 fallthrough 42704 case SQLITE_INDEX_CONSTRAINT_LIKE: 42705 zOp = ts + 27587 42706 break 42707 fallthrough 42708 case SQLITE_INDEX_CONSTRAINT_GLOB: 42709 zOp = ts + 27592 42710 break 42711 fallthrough 42712 case SQLITE_INDEX_CONSTRAINT_REGEXP: 42713 zOp = ts + 6831 42714 break 42715 } 42716 if zOp != 0 { 42717 if int32(*(*int8)(unsafe.Pointer(zOp))) == 'L' { 42718 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27597, 42719 libc.VaList(bp+24, zSep, zNewCol)) 42720 } else { 42721 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27632, libc.VaList(bp+40, zSep, zNewCol, zOp)) 42722 } 42723 string_concat(tls, bp+88, zNew, 1, bp+96) 42724 zSep = ts + 9419 42725 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&nArg, 1) 42726 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 42727 } 42728 } 42729 } 42730 42731 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) { 42732 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn 42733 var zNewCol uintptr 42734 if iCol >= 0 { 42735 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 42736 } else { 42737 zNewCol = ts + 6427 42738 } 42739 var zDir uintptr 42740 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 42741 zDir = ts + 27644 42742 } else { 42743 zDir = ts + 27649 42744 } 42745 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27653, libc.VaList(bp+64, zNewCol, zDir)) 42746 string_concat(tls, bp+88, zNew, 1, bp+96) 42747 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 42748 } 42749 42750 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27495) 42751 42752 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(bp + 88))) 42753 42754 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 42755 return *(*int32)(unsafe.Pointer(bp + 96)) 42756 } 42757 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = hashString(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 42758 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = *(*uintptr)(unsafe.Pointer(bp + 88)) 42759 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 42760 if useCost != 0 { 42761 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = cost 42762 } else if useIdx != 0 { 42763 for ii = 0; uint64(ii) < uint64(unsafe.Sizeof(int32(0)))*uint64(8)-uint64(1); ii++ { 42764 if nRow&(int32(1)<<ii) != 0 { 42765 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(ii) 42766 } 42767 } 42768 } else { 42769 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(nRow) 42770 } 42771 return *(*int32)(unsafe.Pointer(bp + 96)) 42772 } 42773 42774 func echoUpdate(tls *libc.TLS, tab uintptr, nData int32, apData uintptr, pRowid uintptr) int32 { 42775 bp := tls.Alloc(136) 42776 defer tls.Free(136) 42777 42778 var pVtab uintptr = tab 42779 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 42780 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 42781 42782 *(*uintptr)(unsafe.Pointer(bp + 128)) = uintptr(0) 42783 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 42784 var bindArgZero int32 = 0 42785 var bindArgOne int32 = 0 42786 var i int32 42787 42788 if simulateVtabError(tls, pVtab, ts+27669) != 0 { 42789 return SQLITE_ERROR 42790 } 42791 42792 if nData > 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 42793 var zSep uintptr = ts + 27677 42794 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27682, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42795 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 42796 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 42797 } 42798 42799 bindArgOne = libc.Bool32(*(*uintptr)(unsafe.Pointer(apData + 1*8)) != 0 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER) 42800 bindArgZero = 1 42801 42802 if bindArgOne != 0 { 42803 string_concat(tls, bp+96, ts+27692, 0, bp+104) 42804 zSep = ts + 4758 42805 } 42806 for i = 2; i < nData; i++ { 42807 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) == uintptr(0) { 42808 continue 42809 } 42810 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, 42811 ts+27707, libc.VaList(bp+8, zSep, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(i-2)*8)), i)), 1, bp+104) 42812 zSep = ts + 4758 42813 } 42814 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, ts+27717, libc.VaList(bp+32, nData)), 1, bp+104) 42815 } else if nData == 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 42816 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27734, libc.VaList(bp+40, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42817 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 42818 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 42819 } 42820 bindArgZero = 1 42821 } else if nData > 2 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_NULL { 42822 var ii int32 42823 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 42824 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 42825 42826 *(*uintptr)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_mprintf(tls, ts+27766, libc.VaList(bp+48, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42827 if !(*(*uintptr)(unsafe.Pointer(bp + 112)) != 0) { 42828 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 42829 } 42830 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER { 42831 bindArgOne = 1 42832 *(*uintptr)(unsafe.Pointer(bp + 120)) = sqlite3.Xsqlite3_mprintf(tls, ts+3405, 0) 42833 string_concat(tls, bp+112, ts+6427, 0, bp+104) 42834 } 42835 42836 for ii = 2; ii < nData; ii++ { 42837 string_concat(tls, bp+112, 42838 sqlite3.Xsqlite3_mprintf(tls, ts+27783, libc.VaList(bp+56, func() uintptr { 42839 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 42840 return ts + 97 42841 } 42842 return ts + 584 42843 }(), *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(ii-2)*8)))), 1, bp+104) 42844 string_concat(tls, bp+120, 42845 sqlite3.Xsqlite3_mprintf(tls, ts+27788, libc.VaList(bp+72, func() uintptr { 42846 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 42847 return ts + 97 42848 } 42849 return ts + 584 42850 }(), ii)), 1, bp+104) 42851 } 42852 42853 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 112)), 1, bp+104) 42854 string_concat(tls, bp+96, ts+27794, 0, bp+104) 42855 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 120)), 1, bp+104) 42856 string_concat(tls, bp+96, ts+585, 0, bp+104) 42857 } else { 42858 return SQLITE_ERROR 42859 } 42860 42861 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 42862 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_prepare(tls, db, *(*uintptr)(unsafe.Pointer(bp + 96)), -1, bp+128, uintptr(0)) 42863 } 42864 42865 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 96))) 42866 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 42867 if bindArgZero != 0 { 42868 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), nData, *(*uintptr)(unsafe.Pointer(apData))) 42869 } 42870 if bindArgOne != 0 { 42871 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), 1, *(*uintptr)(unsafe.Pointer(apData + 1*8))) 42872 } 42873 for i = 2; i < nData && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK; i++ { 42874 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) != 0 { 42875 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), i, *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8))) 42876 } 42877 } 42878 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 42879 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 42880 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 42881 } else { 42882 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 42883 } 42884 } 42885 42886 if pRowid != 0 && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 42887 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 42888 } 42889 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 42890 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+88, sqlite3.Xsqlite3_errmsg(tls, db))) 42891 } 42892 42893 return *(*int32)(unsafe.Pointer(bp + 104)) 42894 } 42895 42896 func echoTransactionCall(tls *libc.TLS, tab uintptr, zCall uintptr) int32 { 42897 bp := tls.Alloc(8) 42898 defer tls.Free(8) 42899 42900 var z uintptr 42901 var pVtab uintptr = tab 42902 z = sqlite3.Xsqlite3_mprintf(tls, ts+27804, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42903 if z == uintptr(0) { 42904 return SQLITE_NOMEM 42905 } 42906 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, zCall) 42907 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, z) 42908 sqlite3.Xsqlite3_free(tls, z) 42909 return SQLITE_OK 42910 } 42911 42912 func echoBegin(tls *libc.TLS, tab uintptr) int32 { 42913 var rc int32 42914 var pVtab uintptr = tab 42915 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 42916 var zVal uintptr 42917 42918 if simulateVtabError(tls, pVtab, ts+27813) != 0 { 42919 return SQLITE_ERROR 42920 } 42921 42922 rc = echoTransactionCall(tls, tab, ts+27813) 42923 42924 if rc == SQLITE_OK { 42925 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27820, uintptr(0), TCL_GLOBAL_ONLY) 42926 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 42927 rc = SQLITE_ERROR 42928 } 42929 } 42930 if rc == SQLITE_OK { 42931 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 1 42932 } 42933 return rc 42934 } 42935 42936 func echoSync(tls *libc.TLS, tab uintptr) int32 { 42937 var rc int32 42938 var pVtab uintptr = tab 42939 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 42940 var zVal uintptr 42941 42942 if simulateVtabError(tls, pVtab, ts+27843) != 0 { 42943 return SQLITE_ERROR 42944 } 42945 42946 rc = echoTransactionCall(tls, tab, ts+27843) 42947 42948 if rc == SQLITE_OK { 42949 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27849, uintptr(0), TCL_GLOBAL_ONLY) 42950 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 42951 rc = -1 42952 } 42953 } 42954 return rc 42955 } 42956 42957 func echoCommit(tls *libc.TLS, tab uintptr) int32 { 42958 var pVtab uintptr = tab 42959 var rc int32 42960 42961 if simulateVtabError(tls, pVtab, ts+27871) != 0 { 42962 return SQLITE_ERROR 42963 } 42964 42965 sqlite3.Xsqlite3BeginBenignMalloc(tls) 42966 rc = echoTransactionCall(tls, tab, ts+27871) 42967 sqlite3.Xsqlite3EndBenignMalloc(tls) 42968 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 42969 return rc 42970 } 42971 42972 func echoRollback(tls *libc.TLS, tab uintptr) int32 { 42973 var rc int32 42974 var pVtab uintptr = tab 42975 42976 rc = echoTransactionCall(tls, tab, ts+27879) 42977 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 42978 return rc 42979 } 42980 42981 func overloadedGlobFunction(tls *libc.TLS, pContext uintptr, nArg int32, apArg uintptr) { 42982 bp := tls.Alloc(216) 42983 defer tls.Free(216) 42984 42985 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pContext) 42986 42987 var i int32 42988 var rc int32 42989 tcl.XTcl_DStringInit(tls, bp) 42990 tcl.XTcl_DStringAppendElement(tls, bp, ts+27889) 42991 for i = 0; i < nArg; i++ { 42992 tcl.XTcl_DStringAppendElement(tls, bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)))) 42993 } 42994 rc = tcl.XTcl_Eval(tls, interp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 42995 tcl.XTcl_DStringFree(tls, bp) 42996 if rc != 0 { 42997 sqlite3.Xsqlite3_result_error(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), -1) 42998 } else { 42999 sqlite3.Xsqlite3_result_text(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), 43000 -1, libc.UintptrFromInt32(-1)) 43001 } 43002 tcl.XTcl_ResetResult(tls, interp) 43003 } 43004 43005 func echoFindFunction(tls *libc.TLS, vtab uintptr, nArg int32, zFuncName uintptr, pxFunc uintptr, ppArg uintptr) int32 { 43006 bp := tls.Alloc(64) 43007 defer tls.Free(64) 43008 43009 var pVtab uintptr = vtab 43010 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43011 43012 if libc.Xstrcmp(tls, zFuncName, ts+27592) != 0 { 43013 return 0 43014 } 43015 if tcl.XTcl_GetCommandInfo(tls, interp, ts+27889, bp) == 0 { 43016 return 0 43017 } 43018 *(*uintptr)(unsafe.Pointer(pxFunc)) = *(*uintptr)(unsafe.Pointer(&struct { 43019 f func(*libc.TLS, uintptr, int32, uintptr) 43020 }{overloadedGlobFunction})) 43021 *(*uintptr)(unsafe.Pointer(ppArg)) = interp 43022 return 1 43023 } 43024 43025 func echoRename(tls *libc.TLS, vtab uintptr, zNewName uintptr) int32 { 43026 bp := tls.Alloc(24) 43027 defer tls.Free(24) 43028 43029 var rc int32 = SQLITE_OK 43030 var p uintptr = vtab 43031 43032 if simulateVtabError(tls, p, ts+27910) != 0 { 43033 return SQLITE_ERROR 43034 } 43035 43036 if (*echo_vtab)(unsafe.Pointer(p)).FisPattern != 0 { 43037 var nThis int32 = int32(libc.Xstrlen(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis)) 43038 var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27918, 43039 libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzTableName, zNewName, (*echo_vtab)(unsafe.Pointer(p)).FzTableName+uintptr(nThis))) 43040 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 43041 sqlite3.Xsqlite3_free(tls, zSql) 43042 } 43043 43044 return rc 43045 } 43046 43047 func echoSavepoint(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43048 return SQLITE_OK 43049 } 43050 43051 func echoRelease(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43052 return SQLITE_OK 43053 } 43054 43055 func echoRollbackTo(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43056 return SQLITE_OK 43057 } 43058 43059 var echoModule = sqlite3_module{ 43060 FiVersion: 1, 43061 FxCreate: 0, 43062 FxConnect: 0, 43063 FxBestIndex: 0, 43064 FxDisconnect: 0, 43065 FxDestroy: 0, 43066 FxOpen: 0, 43067 FxClose: 0, 43068 FxFilter: 0, 43069 FxNext: 0, 43070 FxEof: 0, 43071 FxColumn: 0, 43072 FxRowid: 0, 43073 FxUpdate: 0, 43074 FxBegin: 0, 43075 FxSync: 0, 43076 FxCommit: 0, 43077 FxRollback: 0, 43078 FxFindFunction: 0, 43079 FxRename: 0, 43080 } 43081 43082 var echoModuleV2 = sqlite3_module{ 43083 FiVersion: 2, 43084 FxCreate: 0, 43085 FxConnect: 0, 43086 FxBestIndex: 0, 43087 FxDisconnect: 0, 43088 FxDestroy: 0, 43089 FxOpen: 0, 43090 FxClose: 0, 43091 FxFilter: 0, 43092 FxNext: 0, 43093 FxEof: 0, 43094 FxColumn: 0, 43095 FxRowid: 0, 43096 FxUpdate: 0, 43097 FxBegin: 0, 43098 FxSync: 0, 43099 FxCommit: 0, 43100 FxRollback: 0, 43101 FxFindFunction: 0, 43102 FxRename: 0, 43103 FxSavepoint: 0, 43104 FxRelease: 0, 43105 FxRollbackTo: 0, 43106 } 43107 43108 func moduleDestroy(tls *libc.TLS, p uintptr) { 43109 var pMod uintptr = p 43110 sqlite3.Xsqlite3_create_function(tls, (*EchoModule)(unsafe.Pointer(pMod)).Fdb, ts+27948, 43111 SQLITE_ANY, 1, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 43112 sqlite3.Xsqlite3_free(tls, p) 43113 } 43114 43115 func register_echo_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43116 bp := tls.Alloc(8) 43117 defer tls.Free(8) 43118 43119 var rc int32 43120 43121 var pMod uintptr 43122 if objc != 2 { 43123 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 43124 return TCL_ERROR 43125 } 43126 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 43127 return TCL_ERROR 43128 } 43129 43130 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43131 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43132 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43133 rc = sqlite3.Xsqlite3_create_module_v2(tls, 43134 *(*uintptr)(unsafe.Pointer(bp)), ts+27986, uintptr(unsafe.Pointer(&echoModule)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43135 43136 if rc == SQLITE_OK { 43137 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43138 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43139 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43140 rc = sqlite3.Xsqlite3_create_module_v2(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+27991, 43141 uintptr(unsafe.Pointer(&echoModuleV2)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43142 } 43143 43144 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43145 return TCL_OK 43146 } 43147 43148 func declare_vtab(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43149 bp := tls.Alloc(8) 43150 defer tls.Free(8) 43151 43152 var rc int32 43153 if objc != 3 { 43154 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 43155 return TCL_ERROR 43156 } 43157 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 43158 return TCL_ERROR 43159 } 43160 rc = sqlite3.Xsqlite3_declare_vtab(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 43161 if rc != SQLITE_OK { 43162 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 43163 return TCL_ERROR 43164 } 43165 return TCL_OK 43166 } 43167 43168 func Sqlitetest8_Init(tls *libc.TLS, interp uintptr) int32 { 43169 var i int32 43170 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd2))/uint64(unsafe.Sizeof(struct { 43171 FzName uintptr 43172 FxProc uintptr 43173 FclientData uintptr 43174 }{})); i++ { 43175 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd2[i].FzName, 43176 aObjCmd2[i].FxProc, aObjCmd2[i].FclientData, uintptr(0)) 43177 } 43178 return TCL_OK 43179 } 43180 43181 var aObjCmd2 = [2]struct { 43182 FzName uintptr 43183 FxProc uintptr 43184 FclientData uintptr 43185 }{ 43186 {FzName: ts + 27999, FxProc: 0}, 43187 {FzName: ts + 28020, FxProc: 0}, 43188 } 43189 43190 func c_collation_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43191 bp := tls.Alloc(32) 43192 defer tls.Free(32) 43193 43194 var zErrFunction uintptr 43195 43196 var rc int32 43197 zErrFunction = ts + 28041 43198 if !(objc != 1) { 43199 goto __1 43200 } 43201 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43202 return TCL_ERROR 43203 __1: 43204 ; 43205 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 43206 if !(rc != SQLITE_OK) { 43207 goto __2 43208 } 43209 zErrFunction = ts + 21460 43210 goto error_out 43211 __2: 43212 ; 43213 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), ts+13402, 456, uintptr(0), uintptr(0)) 43214 if !(rc != SQLITE_MISUSE) { 43215 goto __3 43216 } 43217 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43218 zErrFunction = ts + 28045 43219 goto error_out 43220 __3: 43221 ; 43222 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43223 return TCL_OK 43224 43225 error_out: 43226 tcl.XTcl_ResetResult(tls, interp) 43227 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43228 return TCL_ERROR 43229 } 43230 43231 func c_realloc_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43232 bp := tls.Alloc(24) 43233 defer tls.Free(24) 43234 43235 var p uintptr 43236 var zErrFunction uintptr 43237 zErrFunction = ts + 28041 43238 43239 if !(objc != 1) { 43240 goto __1 43241 } 43242 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43243 return TCL_ERROR 43244 __1: 43245 ; 43246 p = sqlite3.Xsqlite3_malloc(tls, 5) 43247 if !!(p != 0) { 43248 goto __2 43249 } 43250 zErrFunction = ts + 28095 43251 goto error_out 43252 __2: 43253 ; 43254 p = sqlite3.Xsqlite3_realloc(tls, p, -1) 43255 if !(p != 0) { 43256 goto __3 43257 } 43258 zErrFunction = ts + 28110 43259 goto error_out 43260 __3: 43261 ; 43262 return TCL_OK 43263 43264 error_out: 43265 tcl.XTcl_ResetResult(tls, interp) 43266 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43267 return TCL_ERROR 43268 } 43269 43270 func c_misuse_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43271 bp := tls.Alloc(40) 43272 defer tls.Free(40) 43273 43274 var zErrFunction uintptr 43275 43276 var rc int32 43277 zErrFunction = ts + 28041 43278 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 43279 43280 if !(objc != 1) { 43281 goto __1 43282 } 43283 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43284 return TCL_ERROR 43285 __1: 43286 ; 43287 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 43288 if !(rc != SQLITE_OK) { 43289 goto __2 43290 } 43291 zErrFunction = ts + 21460 43292 goto error_out 43293 __2: 43294 ; 43295 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43296 43297 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43298 if !(rc != SQLITE_MISUSE) { 43299 goto __3 43300 } 43301 zErrFunction = ts + 21366 43302 goto error_out 43303 __3: 43304 ; 43305 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43306 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43307 if !(rc != SQLITE_MISUSE) { 43308 goto __4 43309 } 43310 zErrFunction = ts + 21541 43311 goto error_out 43312 __4: 43313 ; 43314 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43315 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43316 if !(rc != SQLITE_MISUSE) { 43317 goto __5 43318 } 43319 zErrFunction = ts + 21575 43320 goto error_out 43321 __5: 43322 ; 43323 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43324 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43325 if !(rc != SQLITE_MISUSE) { 43326 goto __6 43327 } 43328 zErrFunction = ts + 21557 43329 goto error_out 43330 __6: 43331 ; 43332 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43333 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43334 if !(rc != SQLITE_MISUSE) { 43335 goto __7 43336 } 43337 zErrFunction = ts + 21637 43338 goto error_out 43339 __7: 43340 ; 43341 return TCL_OK 43342 43343 error_out: 43344 tcl.XTcl_ResetResult(tls, interp) 43345 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43346 return TCL_ERROR 43347 } 43348 43349 func Sqlitetest9_Init(tls *libc.TLS, interp uintptr) int32 { 43350 var i int32 43351 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd3))/uint64(unsafe.Sizeof(struct { 43352 FzName uintptr 43353 FxProc uintptr 43354 FclientData uintptr 43355 }{})); i++ { 43356 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd3[i].FzName, 43357 aObjCmd3[i].FxProc, aObjCmd3[i].FclientData, uintptr(0)) 43358 } 43359 return TCL_OK 43360 } 43361 43362 var aObjCmd3 = [3]struct { 43363 FzName uintptr 43364 FxProc uintptr 43365 FclientData uintptr 43366 }{ 43367 {FzName: ts + 28126, FxProc: 0}, 43368 {FzName: ts + 28140, FxProc: 0}, 43369 {FzName: ts + 28155, FxProc: 0}, 43370 } 43371 43372 func Sqlitetestasync_Init(tls *libc.TLS, interp uintptr) int32 { 43373 return TCL_OK 43374 } 43375 43376 func resetAutoExtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 43377 sqlite3.Xsqlite3_reset_auto_extension(tls) 43378 return SQLITE_OK 43379 } 43380 43381 func Sqlitetest_autoext_Init(tls *libc.TLS, interp uintptr) int32 { 43382 tcl.XTcl_CreateObjCommand(tls, interp, ts+28172, 43383 *(*uintptr)(unsafe.Pointer(&struct { 43384 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 43385 }{resetAutoExtObjCmd})), uintptr(0), uintptr(0)) 43386 return TCL_OK 43387 } 43388 43389 func backupTestCmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43390 bp := tls.Alloc(196) 43391 defer tls.Free(196) 43392 43393 *(*[5]BackupSubCommand)(unsafe.Pointer(bp)) = [5]BackupSubCommand{ 43394 {FzCmd: ts + 9485, FnArg: 1, FzArg: ts + 28201}, 43395 {FzCmd: ts + 28207, FeCmd: uint32(1), FzArg: ts + 584}, 43396 {FzCmd: ts + 28214, FeCmd: uint32(2), FzArg: ts + 584}, 43397 {FzCmd: ts + 28224, FeCmd: uint32(3), FzArg: ts + 584}, 43398 {}, 43399 } 43400 43401 var p uintptr = clientData 43402 43403 var rc int32 43404 43405 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 43406 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(BackupSubCommand{})), ts+11691, 0, bp+120) 43407 if rc != TCL_OK { 43408 return rc 43409 } 43410 if objc != 2+(*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FnArg { 43411 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FzArg) 43412 return TCL_ERROR 43413 } 43414 43415 switch (*BackupSubCommand)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FeCmd { 43416 case uint32(1): 43417 { 43418 var zCmdName uintptr 43419 43420 zCmdName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))) 43421 tcl.XTcl_GetCommandInfo(tls, interp, zCmdName, bp+128) 43422 (*Tcl_CmdInfo)(unsafe.Pointer(bp + 128)).FdeleteProc = uintptr(0) 43423 tcl.XTcl_SetCommandInfo(tls, interp, zCmdName, bp+128) 43424 tcl.XTcl_DeleteCommand(tls, interp, zCmdName) 43425 43426 rc = sqlite3.Xsqlite3_backup_finish(tls, p) 43427 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43428 break 43429 43430 } 43431 43432 case uint32(0): 43433 { 43434 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+192) { 43435 return TCL_ERROR 43436 } 43437 rc = sqlite3.Xsqlite3_backup_step(tls, p, *(*int32)(unsafe.Pointer(bp + 192))) 43438 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43439 break 43440 43441 } 43442 43443 case uint32(2): 43444 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_remaining(tls, p))) 43445 break 43446 43447 case uint32(3): 43448 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_pagecount(tls, p))) 43449 break 43450 } 43451 43452 return TCL_OK 43453 } 43454 43455 type BackupSubCommand = struct { 43456 FzCmd uintptr 43457 FeCmd uint32 43458 FnArg int32 43459 FzArg uintptr 43460 } 43461 43462 func backupTestFinish(tls *libc.TLS, clientData ClientData) { 43463 var pBackup uintptr = clientData 43464 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 43465 } 43466 43467 func backupTestInit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43468 bp := tls.Alloc(32) 43469 defer tls.Free(32) 43470 43471 var pBackup uintptr 43472 43473 var zDestName uintptr 43474 var zSrcName uintptr 43475 var zCmd uintptr 43476 43477 if objc != 6 { 43478 tcl.XTcl_WrongNumArgs(tls, 43479 interp, 1, objv, ts+28234) 43480 return TCL_ERROR 43481 } 43482 43483 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 43484 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+16) 43485 zDestName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 43486 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))), bp+24) 43487 zSrcName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 43488 43489 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDestName, *(*uintptr)(unsafe.Pointer(bp + 24)), zSrcName) 43490 if !(pBackup != 0) { 43491 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28280, 0)) 43492 return TCL_ERROR 43493 } 43494 43495 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 43496 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 43497 }{backupTestCmd})), pBackup, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{backupTestFinish}))) 43498 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 43499 return TCL_OK 43500 } 43501 43502 func Sqlitetestbackup_Init(tls *libc.TLS, interp uintptr) int32 { 43503 tcl.XTcl_CreateObjCommand(tls, interp, ts+28309, *(*uintptr)(unsafe.Pointer(&struct { 43504 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 43505 }{backupTestInit})), uintptr(0), uintptr(0)) 43506 return TCL_OK 43507 } 43508 43509 type tcl_vtab1 = struct { 43510 Fbase sqlite3_vtab 43511 Finterp uintptr 43512 FpCmd uintptr 43513 Fdb uintptr 43514 } 43515 43516 type tcl_vtab = tcl_vtab1 43517 type tcl_cursor1 = struct { 43518 Fbase sqlite3_vtab_cursor 43519 FpStmt uintptr 43520 } 43521 43522 type tcl_cursor = tcl_cursor1 43523 43524 func tclDequote(tls *libc.TLS, z uintptr) { 43525 var q int8 = *(*int8)(unsafe.Pointer(z)) 43526 43527 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 43528 var iIn int32 = 1 43529 var iOut int32 = 0 43530 if int32(q) == '[' { 43531 q = int8(']') 43532 } 43533 43534 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 43535 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 43536 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 43537 iIn++ 43538 break 43539 } else { 43540 iIn = iIn + 2 43541 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 43542 } 43543 } else { 43544 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 43545 } 43546 } 43547 43548 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 43549 } 43550 } 43551 43552 func tclConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43553 bp := tls.Alloc(8) 43554 defer tls.Free(8) 43555 43556 var interp uintptr = pAux 43557 var pTab uintptr = uintptr(0) 43558 var zCmd uintptr = uintptr(0) 43559 var pScript uintptr = uintptr(0) 43560 var rc int32 = SQLITE_OK 43561 43562 if argc != 4 { 43563 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 43564 return SQLITE_ERROR 43565 } 43566 43567 zCmd = sqlite3.Xsqlite3_malloc64(tls, libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 43568 pTab = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(tcl_vtab{}))) 43569 if zCmd != 0 && pTab != 0 { 43570 libc.Xmemcpy(tls, zCmd, *(*uintptr)(unsafe.Pointer(argv + 3*8)), libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 43571 tclDequote(tls, zCmd) 43572 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(tcl_vtab{}))) 43573 43574 (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd = tcl.XTcl_NewStringObj(tls, zCmd, -1) 43575 (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp = interp 43576 (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb = db 43577 (*Tcl_Obj)(unsafe.Pointer((*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd)).FrefCount++ 43578 43579 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 43580 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 43581 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27377, -1)) 43582 43583 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 43584 if rc != TCL_OK { 43585 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetStringResult(tls, interp))) 43586 rc = SQLITE_ERROR 43587 } else { 43588 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, tcl.XTcl_GetStringResult(tls, interp)) 43589 } 43590 43591 if rc != SQLITE_OK { 43592 sqlite3.Xsqlite3_free(tls, pTab) 43593 pTab = uintptr(0) 43594 } 43595 } else { 43596 rc = SQLITE_NOMEM 43597 } 43598 43599 sqlite3.Xsqlite3_free(tls, zCmd) 43600 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 43601 return rc 43602 } 43603 43604 func tclDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 43605 var pTab uintptr = pVtab 43606 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 43607 var _objPtr uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd 43608 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43609 tcl.XTclFreeObj(tls, _objPtr) 43610 } 43611 } 43612 sqlite3.Xsqlite3_free(tls, pTab) 43613 return SQLITE_OK 43614 } 43615 43616 func tclOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 43617 var pCur uintptr 43618 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(tcl_cursor{}))) 43619 if pCur == uintptr(0) { 43620 return SQLITE_NOMEM 43621 } 43622 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(tcl_cursor{}))) 43623 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 43624 return SQLITE_OK 43625 } 43626 43627 func tclClose(tls *libc.TLS, cur uintptr) int32 { 43628 var pCur uintptr = cur 43629 if pCur != 0 { 43630 sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCur)).FpStmt) 43631 sqlite3.Xsqlite3_free(tls, pCur) 43632 } 43633 return SQLITE_OK 43634 } 43635 43636 func tclNext(tls *libc.TLS, pVtabCursor uintptr) int32 { 43637 bp := tls.Alloc(8) 43638 defer tls.Free(8) 43639 43640 var pCsr uintptr = pVtabCursor 43641 if (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt != 0 { 43642 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 43643 var rc int32 = sqlite3.Xsqlite3_step(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 43644 if rc != SQLITE_ROW { 43645 var zErr uintptr 43646 rc = sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 43647 (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 43648 if rc != SQLITE_OK { 43649 zErr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 43650 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 43651 } 43652 } 43653 } 43654 return SQLITE_OK 43655 } 43656 43657 func tclFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 43658 bp := tls.Alloc(56) 43659 defer tls.Free(56) 43660 43661 var pCsr uintptr = pVtabCursor 43662 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 43663 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 43664 var pScript uintptr 43665 var pArg uintptr 43666 var ii int32 43667 var rc int32 43668 43669 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 43670 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 43671 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27441, -1)) 43672 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewIntObj(tls, idxNum)) 43673 if idxStr != 0 { 43674 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, idxStr, -1)) 43675 } else { 43676 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 43677 } 43678 43679 pArg = tcl.XTcl_NewObj(tls) 43680 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 43681 for ii = 0; ii < argc; ii++ { 43682 var zVal uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8))) 43683 var pVal uintptr 43684 if zVal == uintptr(0) { 43685 pVal = tcl.XTcl_NewObj(tls) 43686 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) { 43687 var pVal2 uintptr = uintptr(0) 43688 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 43689 if zVal != 0 { 43690 pVal2 = tcl.XTcl_NewStringObj(tls, zVal, -1) 43691 } else { 43692 pVal2 = tcl.XTcl_NewObj(tls) 43693 } 43694 tcl.XTcl_ListObjAppendElement(tls, interp, pVal, pVal2) 43695 } 43696 } else { 43697 pVal = tcl.XTcl_NewStringObj(tls, zVal, -1) 43698 } 43699 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pVal) 43700 } 43701 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pArg) 43702 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 43703 var _objPtr uintptr = pArg 43704 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43705 tcl.XTclFreeObj(tls, _objPtr) 43706 } 43707 } 43708 43709 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 43710 if rc != TCL_OK { 43711 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 43712 rc = SQLITE_ERROR 43713 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 43714 } else { 43715 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 43716 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 43717 43718 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+40, bp+48) 43719 if rc != TCL_OK { 43720 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 43721 rc = SQLITE_ERROR 43722 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 43723 } else { 43724 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 40)); ii = ii + 2 { 43725 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii)*8))) 43726 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii+1)*8)) 43727 if sqlite3.Xsqlite3_stricmp(tls, ts+1947, zCmd) == 0 { 43728 var zSql uintptr = tcl.XTcl_GetString(tls, p) 43729 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 43730 if rc != SQLITE_OK { 43731 var zErr uintptr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 43732 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+16, zErr)) 43733 } 43734 } else { 43735 rc = SQLITE_ERROR 43736 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+24, zCmd)) 43737 } 43738 } 43739 } 43740 } 43741 43742 if rc == SQLITE_OK { 43743 rc = tclNext(tls, pVtabCursor) 43744 } 43745 return rc 43746 } 43747 43748 func tclColumn(tls *libc.TLS, pVtabCursor uintptr, ctx uintptr, i int32) int32 { 43749 var pCsr uintptr = pVtabCursor 43750 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 43751 return SQLITE_OK 43752 } 43753 43754 func tclRowid(tls *libc.TLS, pVtabCursor uintptr, pRowid uintptr) int32 { 43755 var pCsr uintptr = pVtabCursor 43756 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, 0) 43757 return SQLITE_OK 43758 } 43759 43760 func tclEof(tls *libc.TLS, pVtabCursor uintptr) int32 { 43761 var pCsr uintptr = pVtabCursor 43762 return libc.Bool32((*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 43763 } 43764 43765 func testBestIndexObjConstraints(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 43766 var ii int32 43767 var pRes uintptr = tcl.XTcl_NewObj(tls) 43768 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 43769 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 43770 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 43771 var pElem uintptr = tcl.XTcl_NewObj(tls) 43772 var zOp uintptr = ts + 3405 43773 43774 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 43775 43776 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) { 43777 case SQLITE_INDEX_CONSTRAINT_EQ: 43778 zOp = ts + 28365 43779 break 43780 case SQLITE_INDEX_CONSTRAINT_GT: 43781 zOp = ts + 28368 43782 break 43783 case SQLITE_INDEX_CONSTRAINT_LE: 43784 zOp = ts + 28371 43785 break 43786 case SQLITE_INDEX_CONSTRAINT_LT: 43787 zOp = ts + 28374 43788 break 43789 case SQLITE_INDEX_CONSTRAINT_GE: 43790 zOp = ts + 28377 43791 break 43792 case SQLITE_INDEX_CONSTRAINT_MATCH: 43793 zOp = ts + 28380 43794 break 43795 case SQLITE_INDEX_CONSTRAINT_LIKE: 43796 zOp = ts + 27587 43797 break 43798 case SQLITE_INDEX_CONSTRAINT_GLOB: 43799 zOp = ts + 27592 43800 break 43801 case SQLITE_INDEX_CONSTRAINT_REGEXP: 43802 zOp = ts + 6831 43803 break 43804 case SQLITE_INDEX_CONSTRAINT_NE: 43805 zOp = ts + 28386 43806 break 43807 case SQLITE_INDEX_CONSTRAINT_ISNOT: 43808 zOp = ts + 28389 43809 break 43810 case SQLITE_INDEX_CONSTRAINT_ISNOTNULL: 43811 zOp = ts + 28395 43812 break 43813 case SQLITE_INDEX_CONSTRAINT_ISNULL: 43814 zOp = ts + 28405 43815 break 43816 case SQLITE_INDEX_CONSTRAINT_IS: 43817 zOp = ts + 5851 43818 break 43819 case SQLITE_INDEX_CONSTRAINT_LIMIT: 43820 zOp = ts + 28412 43821 break 43822 case SQLITE_INDEX_CONSTRAINT_OFFSET: 43823 zOp = ts + 28418 43824 break 43825 } 43826 43827 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+6194, -1)) 43828 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, zOp, -1)) 43829 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 43830 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)) 43831 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28432, -1)) 43832 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable))) 43833 43834 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 43835 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 43836 var _objPtr uintptr = pElem 43837 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43838 tcl.XTclFreeObj(tls, _objPtr) 43839 } 43840 } 43841 } 43842 43843 tcl.XTcl_SetObjResult(tls, interp, pRes) 43844 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 43845 var _objPtr uintptr = pRes 43846 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43847 tcl.XTclFreeObj(tls, _objPtr) 43848 } 43849 } 43850 } 43851 43852 func testBestIndexObjOrderby(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 43853 var ii int32 43854 var pRes uintptr = tcl.XTcl_NewObj(tls) 43855 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 43856 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; ii++ { 43857 var pOrder uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(ii)*8 43858 var pElem uintptr = tcl.XTcl_NewObj(tls) 43859 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 43860 43861 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 43862 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).FiColumn)) 43863 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28439, -1)) 43864 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).Fdesc))) 43865 43866 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 43867 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 43868 var _objPtr uintptr = pElem 43869 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43870 tcl.XTclFreeObj(tls, _objPtr) 43871 } 43872 } 43873 } 43874 43875 tcl.XTcl_SetObjResult(tls, interp, pRes) 43876 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 43877 var _objPtr uintptr = pRes 43878 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43879 tcl.XTclFreeObj(tls, _objPtr) 43880 } 43881 } 43882 } 43883 43884 func testBestIndexObj(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43885 bp := tls.Alloc(80) 43886 defer tls.Free(80) 43887 43888 *(*[7]uintptr)(unsafe.Pointer(bp)) = [7]uintptr{ 43889 ts + 28444, 43890 ts + 28456, 43891 ts + 28464, 43892 ts + 28469, 43893 ts + 28478, 43894 ts + 28481, 43895 uintptr(0), 43896 } 43897 43898 var pIdxInfo uintptr = clientData 43899 43900 if objc < 2 { 43901 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 43902 return TCL_ERROR 43903 } 43904 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+56) != 0 { 43905 return TCL_ERROR 43906 } 43907 43908 if *(*int32)(unsafe.Pointer(bp + 56)) < 4 && objc != 2 { 43909 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 43910 return TCL_ERROR 43911 } 43912 if *(*int32)(unsafe.Pointer(bp + 56)) == 4 && objc != 4 { 43913 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28491) 43914 return TCL_ERROR 43915 } 43916 if *(*int32)(unsafe.Pointer(bp + 56)) == 5 && objc != 3 && objc != 4 { 43917 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28505) 43918 return TCL_ERROR 43919 } 43920 43921 switch *(*int32)(unsafe.Pointer(bp + 56)) { 43922 case 0: 43923 testBestIndexObjConstraints(tls, interp, pIdxInfo) 43924 break 43925 43926 case 1: 43927 testBestIndexObjOrderby(tls, interp, pIdxInfo) 43928 break 43929 43930 case 2: 43931 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 43932 break 43933 43934 case 3: 43935 { 43936 var bDistinct int32 = sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo) 43937 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bDistinct)) 43938 break 43939 43940 } 43941 43942 case 4: 43943 { 43944 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+60) != 0 || 43945 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 43946 return TCL_ERROR 43947 } 43948 tcl.XTcl_SetObjResult(tls, interp, 43949 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_vtab_in(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 60)), *(*int32)(unsafe.Pointer(bp + 64))))) 43950 break 43951 43952 } 43953 43954 case 5: 43955 { 43956 *(*int32)(unsafe.Pointer(bp + 68)) = 0 43957 var rc int32 43958 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 43959 var zVal uintptr = ts + 584 43960 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+68) != 0 { 43961 return TCL_ERROR 43962 } 43963 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 43964 if rc != SQLITE_OK && rc != SQLITE_NOTFOUND { 43965 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 43966 return TCL_ERROR 43967 } 43968 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 43969 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 43970 } else if objc == 4 { 43971 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 43972 } 43973 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zVal, -1)) 43974 break 43975 43976 } 43977 } 43978 43979 return TCL_OK 43980 } 43981 43982 func tclBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 43983 bp := tls.Alloc(108) 43984 defer tls.Free(108) 43985 43986 var pTab uintptr = tab 43987 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 43988 var rc int32 = SQLITE_OK 43989 43990 var pScript uintptr 43991 43992 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 43993 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 43994 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27495, -1)) 43995 43996 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([24]int8{})), bp+56, ts+28521, libc.VaList(bp, libc.PostIncInt32(&iNext, 1))) 43997 tcl.XTcl_CreateObjCommand(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(&struct { 43998 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 43999 }{testBestIndexObj})), pIdxInfo, uintptr(0)) 44000 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+56, -1)) 44001 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44002 tcl.XTcl_DeleteCommand(tls, interp, bp+56) 44003 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44004 var _objPtr uintptr = pScript 44005 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44006 tcl.XTclFreeObj(tls, _objPtr) 44007 } 44008 } 44009 44010 if rc != TCL_OK { 44011 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44012 rc = SQLITE_ERROR 44013 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44014 } else { 44015 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44016 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 44017 44018 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) 44019 if rc != TCL_OK { 44020 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44021 rc = SQLITE_ERROR 44022 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zErr)) 44023 } else { 44024 var ii int32 44025 var iArgv int32 = 1 44026 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 80)); ii = ii + 2 { 44027 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii)*8))) 44028 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii+1)*8)) 44029 if sqlite3.Xsqlite3_stricmp(tls, ts+28533, zCmd) == 0 { 44030 rc = tcl.XTcl_GetDoubleFromObj(tls, interp, p, pIdxInfo+64) 44031 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28456, zCmd) == 0 { 44032 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+60) 44033 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28538, zCmd) == 0 { 44034 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+40) 44035 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28545, zCmd) == 0 { 44036 sqlite3.Xsqlite3_free(tls, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr) 44037 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+24, tcl.XTcl_GetString(tls, p))) 44038 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 44039 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28552, zCmd) == 0 { 44040 *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) = int64(0) 44041 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, p, bp+96) 44042 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = sqlite3_int64(tRowcnt(*(*Tcl_WideInt)(unsafe.Pointer(bp + 96)))) 44043 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28557, zCmd) == 0 || 44044 sqlite3.Xsqlite3_stricmp(tls, ts+28561, zCmd) == 0 { 44045 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, bp+104) 44046 if rc == SQLITE_OK { 44047 if *(*int32)(unsafe.Pointer(bp + 104)) < 0 || *(*int32)(unsafe.Pointer(bp + 104)) >= (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint { 44048 rc = SQLITE_ERROR 44049 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28566, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 104)))) 44050 } else { 44051 var bOmit int32 = libc.Bool32(int32(*(*int8)(unsafe.Pointer(zCmd))) == 'o' || int32(*(*int8)(unsafe.Pointer(zCmd))) == 'O') 44052 (*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) 44053 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).Fomit = uint8(bOmit) 44054 } 44055 } 44056 } else { 44057 rc = SQLITE_ERROR 44058 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+40, zCmd)) 44059 } 44060 if rc != SQLITE_OK && (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg == uintptr(0) { 44061 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44062 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, zErr)) 44063 } 44064 } 44065 } 44066 } 44067 44068 return rc 44069 } 44070 44071 var iNext int32 = 43 44072 44073 var tclModule = sqlite3_module{ 44074 FxCreate: 0, 44075 FxConnect: 0, 44076 FxBestIndex: 0, 44077 FxDisconnect: 0, 44078 FxDestroy: 0, 44079 FxOpen: 0, 44080 FxClose: 0, 44081 FxFilter: 0, 44082 FxNext: 0, 44083 FxEof: 0, 44084 FxColumn: 0, 44085 FxRowid: 0, 44086 } 44087 44088 func register_tcl_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44089 bp := tls.Alloc(8) 44090 defer tls.Free(8) 44091 44092 if objc != 2 { 44093 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 44094 return TCL_ERROR 44095 } 44096 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 44097 return TCL_ERROR 44098 } 44099 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+28581, uintptr(unsafe.Pointer(&tclModule)), interp) 44100 return TCL_OK 44101 } 44102 44103 func Sqlitetesttcl_Init(tls *libc.TLS, interp uintptr) int32 { 44104 var i int32 44105 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd4))/uint64(unsafe.Sizeof(struct { 44106 FzName uintptr 44107 FxProc uintptr 44108 FclientData uintptr 44109 }{})); i++ { 44110 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd4[i].FzName, 44111 aObjCmd4[i].FxProc, aObjCmd4[i].FclientData, uintptr(0)) 44112 } 44113 return TCL_OK 44114 } 44115 44116 var aObjCmd4 = [1]struct { 44117 FzName uintptr 44118 FxProc uintptr 44119 FclientData uintptr 44120 }{ 44121 {FzName: ts + 28585, FxProc: 0}, 44122 } 44123 44124 func ptrToText(tls *libc.TLS, p uintptr) uintptr { 44125 bp := tls.Alloc(8) 44126 defer tls.Free(8) 44127 44128 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof(buf))-uint64(1)), uintptr(unsafe.Pointer(&buf)), ts+9889, libc.VaList(bp, p)) 44129 return uintptr(unsafe.Pointer(&buf)) 44130 } 44131 44132 var buf [100]int8 44133 44134 func blobHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 44135 bp := tls.Alloc(8) 44136 defer tls.Free(8) 44137 44138 var z uintptr 44139 44140 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44141 if *(*int32)(unsafe.Pointer(bp)) == 0 { 44142 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 44143 } else if *(*int32)(unsafe.Pointer(bp)) > 9 && 0 == libc.Xmemcmp(tls, ts+28605, z, uint64(9)) { 44144 var channel Tcl_Channel 44145 var instanceData ClientData 44146 44147 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 44148 if !(channel != 0) { 44149 return TCL_ERROR 44150 } 44151 44152 tcl.XTcl_Flush(tls, channel) 44153 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 44154 44155 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 44156 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 44157 } else { 44158 *(*uintptr)(unsafe.Pointer(ppBlob)) = sqlite3TestTextToPtr(tls, z) 44159 } 44160 44161 return TCL_OK 44162 } 44163 44164 func blobStringFromObj(tls *libc.TLS, pObj uintptr) uintptr { 44165 bp := tls.Alloc(4) 44166 defer tls.Free(4) 44167 44168 var z uintptr 44169 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44170 return func() uintptr { 44171 if *(*int32)(unsafe.Pointer(bp)) != 0 { 44172 return z 44173 } 44174 return uintptr(0) 44175 }() 44176 } 44177 44178 func test_blob_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44179 bp := tls.Alloc(40) 44180 defer tls.Free(40) 44181 44182 var zDb uintptr 44183 var zTable uintptr 44184 var zColumn uintptr 44185 44186 var zVarname uintptr 44187 44188 *(*uintptr)(unsafe.Pointer(bp + 32)) = bp 44189 var rc int32 44190 44191 if objc != 8 { 44192 var zUsage uintptr = ts + 28615 44193 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zUsage) 44194 return TCL_ERROR 44195 } 44196 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 44197 return TCL_ERROR 44198 } 44199 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 44200 zTable = blobStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 44201 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 44202 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+16) != 0 { 44203 return TCL_ERROR 44204 } 44205 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp) != 0 { 44206 return TCL_ERROR 44207 } 44208 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 7*8)), bp+24) 44209 44210 if *(*int32)(unsafe.Pointer(bp + 24)) > 0 { 44211 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) 44212 tcl.XTcl_SetVar2(tls, interp, zVarname, uintptr(0), ptrToText(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0) 44213 } else { 44214 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)) 44215 } 44216 44217 if rc == SQLITE_OK { 44218 tcl.XTcl_ResetResult(tls, interp) 44219 } else { 44220 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44221 return TCL_ERROR 44222 } 44223 return TCL_OK 44224 } 44225 44226 func test_blob_close(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44227 bp := tls.Alloc(8) 44228 defer tls.Free(8) 44229 44230 var rc int32 44231 44232 if objc != 2 { 44233 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 44234 return TCL_ERROR 44235 } 44236 44237 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44238 return TCL_ERROR 44239 } 44240 rc = sqlite3.Xsqlite3_blob_close(tls, *(*uintptr)(unsafe.Pointer(bp))) 44241 44242 if rc != 0 { 44243 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44244 } else { 44245 tcl.XTcl_ResetResult(tls, interp) 44246 } 44247 return TCL_OK 44248 } 44249 44250 func test_blob_bytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44251 bp := tls.Alloc(8) 44252 defer tls.Free(8) 44253 44254 var nByte int32 44255 44256 if objc != 2 { 44257 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 44258 return TCL_ERROR 44259 } 44260 44261 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44262 return TCL_ERROR 44263 } 44264 nByte = sqlite3.Xsqlite3_blob_bytes(tls, *(*uintptr)(unsafe.Pointer(bp))) 44265 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nByte)) 44266 44267 return TCL_OK 44268 } 44269 44270 func test_blob_read(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44271 bp := tls.Alloc(32) 44272 defer tls.Free(32) 44273 44274 var zBuf uintptr = uintptr(0) 44275 var rc int32 44276 44277 if objc != 4 { 44278 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28667) 44279 return TCL_ERROR 44280 } 44281 44282 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 44283 return TCL_ERROR 44284 } 44285 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) || 44286 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) { 44287 return TCL_ERROR 44288 } 44289 44290 if *(*int32)(unsafe.Pointer(bp + 28)) > 0 { 44291 zBuf = tcl.XTcl_AttemptAlloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 44292 if zBuf == uintptr(0) { 44293 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28684, 0)) 44294 return TCL_ERROR 44295 } 44296 } 44297 rc = sqlite3.Xsqlite3_blob_read(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zBuf, *(*int32)(unsafe.Pointer(bp + 28)), *(*int32)(unsafe.Pointer(bp + 24))) 44298 if rc == SQLITE_OK { 44299 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zBuf, *(*int32)(unsafe.Pointer(bp + 28)))) 44300 } else { 44301 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44302 } 44303 tcl.XTcl_Free(tls, zBuf) 44304 44305 return func() int32 { 44306 if rc == SQLITE_OK { 44307 return TCL_OK 44308 } 44309 return TCL_ERROR 44310 }() 44311 } 44312 44313 func test_blob_write(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44314 bp := tls.Alloc(16) 44315 defer tls.Free(16) 44316 44317 var rc int32 44318 var zBuf uintptr 44319 44320 if objc != 4 && objc != 5 { 44321 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28745) 44322 return TCL_ERROR 44323 } 44324 44325 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44326 return TCL_ERROR 44327 } 44328 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) { 44329 return TCL_ERROR 44330 } 44331 44332 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) 44333 if objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+12) != 0 { 44334 return TCL_ERROR 44335 } 44336 rc = sqlite3.Xsqlite3_blob_write(tls, *(*uintptr)(unsafe.Pointer(bp)), zBuf, *(*int32)(unsafe.Pointer(bp + 12)), *(*int32)(unsafe.Pointer(bp + 8))) 44337 if rc != SQLITE_OK { 44338 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44339 } 44340 44341 return func() int32 { 44342 if rc == SQLITE_OK { 44343 return TCL_OK 44344 } 44345 return TCL_ERROR 44346 }() 44347 } 44348 44349 func Sqlitetest_blob_Init(tls *libc.TLS, interp uintptr) int32 { 44350 var i int32 44351 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd5))/uint64(unsafe.Sizeof(struct { 44352 FzName uintptr 44353 FxProc uintptr 44354 }{})); i++ { 44355 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd5[i].FzName, aObjCmd5[i].FxProc, uintptr(0), uintptr(0)) 44356 } 44357 return TCL_OK 44358 } 44359 44360 var aObjCmd5 = [5]struct { 44361 FzName uintptr 44362 FxProc uintptr 44363 }{ 44364 {FzName: ts + 28772, FxProc: 0}, 44365 {FzName: ts + 28790, FxProc: 0}, 44366 {FzName: ts + 28809, FxProc: 0}, 44367 {FzName: ts + 28828, FxProc: 0}, 44368 {FzName: ts + 28846, FxProc: 0}, 44369 } 44370 44371 func sqlite3BtreeSharedCacheReport(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44372 var pBt uintptr 44373 var pRet uintptr = tcl.XTcl_NewObj(tls) 44374 for pBt = sqlite3.Xsqlite3SharedCacheList; pBt != 0; pBt = (*BtShared)(unsafe.Pointer(pBt)).FpNext { 44375 var zFile uintptr = sqlite3.Xsqlite3PagerFilename(tls, (*BtShared)(unsafe.Pointer(pBt)).FpPager, 1) 44376 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, zFile, -1)) 44377 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, (*BtShared)(unsafe.Pointer(pBt)).FnRef)) 44378 } 44379 tcl.XTcl_SetObjResult(tls, interp, pRet) 44380 return TCL_OK 44381 } 44382 44383 func sqlite3BtreeCursorList(tls *libc.TLS, p uintptr) { 44384 } 44385 44386 func set_options(tls *libc.TLS, interp uintptr) { 44387 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28880, ts+14193, 44388 TCL_GLOBAL_ONLY) 44389 44390 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28899, ts+14193, TCL_GLOBAL_ONLY) 44391 44392 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28907, ts+14193, TCL_GLOBAL_ONLY) 44393 44394 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28925, ts+28938, TCL_GLOBAL_ONLY) 44395 44396 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28942, ts+28949, TCL_GLOBAL_ONLY) 44397 44398 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28951, ts+14193, TCL_GLOBAL_ONLY) 44399 44400 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28963, ts+14193, TCL_GLOBAL_ONLY) 44401 44402 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28969, ts+14193, TCL_GLOBAL_ONLY) 44403 44404 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28991, ts+14193, TCL_GLOBAL_ONLY) 44405 44406 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29003, ts+28949, TCL_GLOBAL_ONLY) 44407 44408 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29011, ts+28949, TCL_GLOBAL_ONLY) 44409 44410 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29015, ts+28949, TCL_GLOBAL_ONLY) 44411 44412 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29040, ts+14193, TCL_GLOBAL_ONLY) 44413 44414 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29045, 44415 ts+29060, TCL_GLOBAL_ONLY) 44416 44417 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29062, ts+14193, TCL_GLOBAL_ONLY) 44418 44419 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29071, ts+14193, TCL_GLOBAL_ONLY) 44420 44421 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29081, ts+14193, TCL_GLOBAL_ONLY) 44422 44423 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29093, ts+14193, TCL_GLOBAL_ONLY) 44424 44425 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13460, ts+28949, TCL_GLOBAL_ONLY) 44426 44427 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29107, ts+28949, TCL_GLOBAL_ONLY) 44428 44429 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29115, ts+14193, TCL_GLOBAL_ONLY) 44430 44431 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29120, ts+14193, TCL_GLOBAL_ONLY) 44432 44433 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29125, ts+28949, TCL_GLOBAL_ONLY) 44434 44435 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13580, ts+28949, TCL_GLOBAL_ONLY) 44436 44437 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29141, ts+28949, TCL_GLOBAL_ONLY) 44438 44439 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29150, ts+28949, TCL_GLOBAL_ONLY) 44440 44441 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29156, ts+28949, TCL_GLOBAL_ONLY) 44442 44443 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29167, ts+28949, TCL_GLOBAL_ONLY) 44444 44445 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+1957, ts+28949, TCL_GLOBAL_ONLY) 44446 44447 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29178, ts+14193, TCL_GLOBAL_ONLY) 44448 44449 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29188, ts+14193, TCL_GLOBAL_ONLY) 44450 44451 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29200, ts+28949, TCL_GLOBAL_ONLY) 44452 44453 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29208, ts+28949, TCL_GLOBAL_ONLY) 44454 44455 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29214, ts+14193, TCL_GLOBAL_ONLY) 44456 44457 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29224, ts+14193, TCL_GLOBAL_ONLY) 44458 44459 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10121, ts+28949, TCL_GLOBAL_ONLY) 44460 44461 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29241, ts+28949, TCL_GLOBAL_ONLY) 44462 44463 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29246, ts+28949, TCL_GLOBAL_ONLY) 44464 44465 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13044, ts+28949, TCL_GLOBAL_ONLY) 44466 44467 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29254, ts+28949, TCL_GLOBAL_ONLY) 44468 44469 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29264, ts+28949, TCL_GLOBAL_ONLY) 44470 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29275, 44471 ts+14193, TCL_GLOBAL_ONLY) 44472 44473 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29294, ts+28949, TCL_GLOBAL_ONLY) 44474 44475 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29306, ts+28949, TCL_GLOBAL_ONLY) 44476 44477 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29319, ts+28949, TCL_GLOBAL_ONLY) 44478 44479 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29327, ts+28949, TCL_GLOBAL_ONLY) 44480 44481 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29332, ts+28949, TCL_GLOBAL_ONLY) 44482 44483 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29338, ts+28949, TCL_GLOBAL_ONLY) 44484 44485 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29342, ts+28949, TCL_GLOBAL_ONLY) 44486 44487 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29357, ts+14193, 44488 TCL_GLOBAL_ONLY) 44489 44490 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29377, ts+28949, TCL_GLOBAL_ONLY) 44491 44492 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13439, ts+28949, TCL_GLOBAL_ONLY) 44493 44494 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29397, ts+28949, TCL_GLOBAL_ONLY) 44495 44496 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29406, ts+28949, TCL_GLOBAL_ONLY) 44497 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29415, ts+28949, TCL_GLOBAL_ONLY) 44498 44499 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29425, ts+28949, TCL_GLOBAL_ONLY) 44500 44501 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29434, ts+28949, TCL_GLOBAL_ONLY) 44502 44503 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29443, ts+28949, TCL_GLOBAL_ONLY) 44504 44505 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29454, ts+28949, TCL_GLOBAL_ONLY) 44506 44507 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+4974, ts+28949, TCL_GLOBAL_ONLY) 44508 44509 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29461, ts+28949, TCL_GLOBAL_ONLY) 44510 44511 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29475, ts+28949, TCL_GLOBAL_ONLY) 44512 44513 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29486, ts+14193, TCL_GLOBAL_ONLY) 44514 44515 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29491, ts+14193, TCL_GLOBAL_ONLY) 44516 44517 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29496, ts+14193, TCL_GLOBAL_ONLY) 44518 44519 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29501, ts+28949, TCL_GLOBAL_ONLY) 44520 44521 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29506, ts+14193, TCL_GLOBAL_ONLY) 44522 44523 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29519, ts+28949, TCL_GLOBAL_ONLY) 44524 44525 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29533, ts+28949, TCL_GLOBAL_ONLY) 44526 44527 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29542, ts+14193, TCL_GLOBAL_ONLY) 44528 44529 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29546, ts+14193, TCL_GLOBAL_ONLY) 44530 44531 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10868, ts+28949, TCL_GLOBAL_ONLY) 44532 44533 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29561, ts+28949, TCL_GLOBAL_ONLY) 44534 44535 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29573, ts+14193, TCL_GLOBAL_ONLY) 44536 44537 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29586, ts+28949, TCL_GLOBAL_ONLY) 44538 44539 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29595, ts+14193, TCL_GLOBAL_ONLY) 44540 44541 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29604, ts+28949, TCL_GLOBAL_ONLY) 44542 44543 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29614, ts+28949, TCL_GLOBAL_ONLY) 44544 44545 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29624, 44546 func() uintptr { 44547 if uint64(unsafe.Sizeof(float64(0))) > uint64(unsafe.Sizeof(float64(0))) { 44548 return ts + 28949 44549 } 44550 return ts + 14193 44551 }(), 44552 TCL_GLOBAL_ONLY) 44553 44554 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29636, ts+28949, TCL_GLOBAL_ONLY) 44555 44556 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29645, ts+28949, TCL_GLOBAL_ONLY) 44557 44558 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29658, ts+28949, TCL_GLOBAL_ONLY) 44559 44560 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29668, ts+14193, TCL_GLOBAL_ONLY) 44561 44562 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29678, ts+28949, TCL_GLOBAL_ONLY) 44563 44564 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29685, ts+28949, TCL_GLOBAL_ONLY) 44565 44566 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29689, ts+28949, TCL_GLOBAL_ONLY) 44567 44568 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29703, ts+28949, TCL_GLOBAL_ONLY) 44569 44570 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+9564, ts+28949, TCL_GLOBAL_ONLY) 44571 44572 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29710, ts+28949, TCL_GLOBAL_ONLY) 44573 44574 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29718, ts+28949, TCL_GLOBAL_ONLY) 44575 44576 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29724, ts+14193, TCL_GLOBAL_ONLY) 44577 44578 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29739, ts+28949, TCL_GLOBAL_ONLY) 44579 44580 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29754, ts+28949, TCL_GLOBAL_ONLY) 44581 44582 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29769, ts+28949, TCL_GLOBAL_ONLY) 44583 44584 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+18810, ts+28949, TCL_GLOBAL_ONLY) 44585 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29777, ts+28949, TCL_GLOBAL_ONLY) 44586 44587 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29786, ts+14193, TCL_GLOBAL_ONLY) 44588 44589 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29797, ts+14193, TCL_GLOBAL_ONLY) 44590 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29816, ts+14193, TCL_GLOBAL_ONLY) 44591 44592 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29837, ts+28949, TCL_GLOBAL_ONLY) 44593 44594 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29850, ts+28949, TCL_GLOBAL_ONLY) 44595 44596 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29859, ts+28949, TCL_GLOBAL_ONLY) 44597 44598 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29866, 44599 func() uintptr { 44600 if 1 != 0 { 44601 return ts + 28949 44602 } 44603 return ts + 14193 44604 }(), TCL_GLOBAL_ONLY) 44605 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29877, 44606 func() uintptr { 44607 if SQLITE_THREADSAFE == 1 { 44608 return ts + 28949 44609 } 44610 return ts + 14193 44611 }(), TCL_GLOBAL_ONLY) 44612 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29889, 44613 func() uintptr { 44614 if SQLITE_THREADSAFE == 2 { 44615 return ts + 28949 44616 } 44617 return ts + 14193 44618 }(), TCL_GLOBAL_ONLY) 44619 44620 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29901, ts+28949, TCL_GLOBAL_ONLY) 44621 44622 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13665, ts+28949, TCL_GLOBAL_ONLY) 44623 44624 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29908, ts+28949, TCL_GLOBAL_ONLY) 44625 44626 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29916, ts+28949, TCL_GLOBAL_ONLY) 44627 44628 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+15733, ts+28949, TCL_GLOBAL_ONLY) 44629 44630 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29929, ts+28949, TCL_GLOBAL_ONLY) 44631 44632 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29936, ts+28949, TCL_GLOBAL_ONLY) 44633 44634 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29941, ts+28949, TCL_GLOBAL_ONLY) 44635 44636 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29946, ts+28949, TCL_GLOBAL_ONLY) 44637 44638 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29950, ts+28949, TCL_GLOBAL_ONLY) 44639 44640 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29954, ts+14193, TCL_GLOBAL_ONLY) 44641 44642 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13692, ts+28949, TCL_GLOBAL_ONLY) 44643 44644 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29974, ts+14193, TCL_GLOBAL_ONLY) 44645 44646 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29993, ts+14193, TCL_GLOBAL_ONLY) 44647 44648 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30007, ts+14193, TCL_GLOBAL_ONLY) 44649 44650 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30016, ts+14193, TCL_GLOBAL_ONLY) 44651 44652 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30040, ts+14193, TCL_GLOBAL_ONLY) 44653 44654 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30061, ts+14193, TCL_GLOBAL_ONLY) 44655 44656 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30068, ts+14193, TCL_GLOBAL_ONLY) 44657 44658 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30081, ts+14193, TCL_GLOBAL_ONLY) 44659 44660 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30091, ts+28949, TCL_GLOBAL_ONLY) 44661 44662 { 44663 tcl.XTcl_LinkVar(tls, interp, ts+30102, uintptr(unsafe.Pointer(&cv_MAX_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44664 } 44665 44666 { 44667 tcl.XTcl_LinkVar(tls, interp, ts+30120, uintptr(unsafe.Pointer(&cv_MAX_COLUMN)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44668 } 44669 44670 { 44671 tcl.XTcl_LinkVar(tls, interp, ts+30138, uintptr(unsafe.Pointer(&cv_MAX_SQL_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44672 } 44673 44674 { 44675 tcl.XTcl_LinkVar(tls, interp, ts+30160, uintptr(unsafe.Pointer(&cv_MAX_EXPR_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44676 } 44677 44678 { 44679 tcl.XTcl_LinkVar(tls, interp, ts+30182, uintptr(unsafe.Pointer(&cv_MAX_COMPOUND_SELECT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44680 } 44681 44682 { 44683 tcl.XTcl_LinkVar(tls, interp, ts+30209, uintptr(unsafe.Pointer(&cv_MAX_VDBE_OP)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44684 } 44685 44686 { 44687 tcl.XTcl_LinkVar(tls, interp, ts+30228, uintptr(unsafe.Pointer(&cv_MAX_FUNCTION_ARG)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44688 } 44689 44690 { 44691 tcl.XTcl_LinkVar(tls, interp, ts+30252, uintptr(unsafe.Pointer(&cv_MAX_VARIABLE_NUMBER)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44692 } 44693 44694 { 44695 tcl.XTcl_LinkVar(tls, interp, ts+30279, uintptr(unsafe.Pointer(&cv_MAX_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44696 } 44697 44698 { 44699 tcl.XTcl_LinkVar(tls, interp, ts+30300, uintptr(unsafe.Pointer(&cv_MAX_PAGE_COUNT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44700 } 44701 44702 { 44703 tcl.XTcl_LinkVar(tls, interp, ts+30322, uintptr(unsafe.Pointer(&cv_MAX_LIKE_PATTERN_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44704 } 44705 44706 { 44707 tcl.XTcl_LinkVar(tls, interp, ts+30353, uintptr(unsafe.Pointer(&cv_MAX_TRIGGER_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44708 } 44709 44710 { 44711 tcl.XTcl_LinkVar(tls, interp, ts+30378, uintptr(unsafe.Pointer(&cv_DEFAULT_CACHE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44712 } 44713 44714 { 44715 tcl.XTcl_LinkVar(tls, interp, ts+30404, uintptr(unsafe.Pointer(&cv_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44716 } 44717 44718 { 44719 tcl.XTcl_LinkVar(tls, interp, ts+30429, uintptr(unsafe.Pointer(&cv_DEFAULT_FILE_FORMAT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44720 } 44721 44722 { 44723 tcl.XTcl_LinkVar(tls, interp, ts+30456, uintptr(unsafe.Pointer(&cv_DEFAULT_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44724 } 44725 44726 { 44727 tcl.XTcl_LinkVar(tls, interp, ts+30483, uintptr(unsafe.Pointer(&cv_DEFAULT_WAL_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44728 } 44729 44730 { 44731 tcl.XTcl_LinkVar(tls, interp, ts+30514, uintptr(unsafe.Pointer(&cv_MAX_ATTACHED)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44732 } 44733 44734 { 44735 tcl.XTcl_LinkVar(tls, interp, ts+30534, uintptr(unsafe.Pointer(&cv_MAX_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44736 } 44737 44738 { 44739 tcl.XTcl_LinkVar(tls, interp, ts+30563, uintptr(unsafe.Pointer(&cv_MAX_WORKER_THREADS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44740 } 44741 44742 { 44743 tcl.XTcl_LinkVar(tls, interp, ts+30589, uintptr(unsafe.Pointer(&cv_TEMP_STORE)), 44744 TCL_LINK_INT|TCL_LINK_READ_ONLY) 44745 44746 } 44747 44748 { 44749 tcl.XTcl_LinkVar(tls, interp, ts+30600, uintptr(unsafe.Pointer(&cv___GNUC__)), 44750 TCL_LINK_INT|TCL_LINK_READ_ONLY) 44751 44752 } 44753 } 44754 44755 var cv_MAX_LENGTH int32 = SQLITE_MAX_LENGTH 44756 var cv_MAX_COLUMN int32 = SQLITE_MAX_COLUMN 44757 var cv_MAX_SQL_LENGTH int32 = SQLITE_MAX_SQL_LENGTH 44758 var cv_MAX_EXPR_DEPTH int32 = SQLITE_MAX_EXPR_DEPTH 44759 var cv_MAX_COMPOUND_SELECT int32 = SQLITE_MAX_COMPOUND_SELECT 44760 var cv_MAX_VDBE_OP int32 = SQLITE_MAX_VDBE_OP 44761 var cv_MAX_FUNCTION_ARG int32 = SQLITE_MAX_FUNCTION_ARG 44762 var cv_MAX_VARIABLE_NUMBER int32 = SQLITE_MAX_VARIABLE_NUMBER 44763 var cv_MAX_PAGE_SIZE int32 = SQLITE_MAX_PAGE_SIZE 44764 var cv_MAX_PAGE_COUNT int32 = SQLITE_MAX_PAGE_COUNT 44765 var cv_MAX_LIKE_PATTERN_LENGTH int32 = SQLITE_MAX_LIKE_PATTERN_LENGTH 44766 var cv_MAX_TRIGGER_DEPTH int32 = SQLITE_MAX_TRIGGER_DEPTH 44767 var cv_DEFAULT_CACHE_SIZE int32 = -2000 44768 var cv_DEFAULT_PAGE_SIZE int32 = SQLITE_DEFAULT_PAGE_SIZE 44769 var cv_DEFAULT_FILE_FORMAT int32 = SQLITE_DEFAULT_FILE_FORMAT 44770 var cv_DEFAULT_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 44771 var cv_DEFAULT_WAL_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 44772 var cv_MAX_ATTACHED int32 = SQLITE_MAX_ATTACHED 44773 var cv_MAX_DEFAULT_PAGE_SIZE int32 = SQLITE_MAX_DEFAULT_PAGE_SIZE 44774 var cv_MAX_WORKER_THREADS int32 = SQLITE_MAX_WORKER_THREADS 44775 var cv_TEMP_STORE int32 = SQLITE_TEMP_STORE 44776 var cv___GNUC__ int32 = 1 44777 44778 func Sqliteconfig_Init(tls *libc.TLS, interp uintptr) int32 { 44779 set_options(tls, interp) 44780 return TCL_OK 44781 } 44782 44783 func sqlite3Delete83Name(tls *libc.TLS, z uintptr) { 44784 var i int32 44785 var sz int32 44786 sz = int32(libc.Xstrlen(tls, z)) 44787 for i = sz - 1; i > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '/' && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '.'; i-- { 44788 } 44789 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == '.' && sz > i+4 { 44790 libc.Xmemmove(tls, z+uintptr(i+1), z+uintptr(sz-3), uint64(4)) 44791 } 44792 } 44793 44794 func sqlite3DeleteUnlinkIfExists(tls *libc.TLS, pVfs uintptr, zFile uintptr, pbExists uintptr) int32 { 44795 var rc int32 = SQLITE_ERROR 44796 44797 rc = libc.Xaccess(tls, zFile, F_OK) 44798 if rc != 0 { 44799 if *(*int32)(unsafe.Pointer(libc.X__errno(tls))) == ENOENT { 44800 if pbExists != 0 { 44801 *(*int32)(unsafe.Pointer(pbExists)) = 0 44802 } 44803 rc = SQLITE_OK 44804 } 44805 } else { 44806 if pbExists != 0 { 44807 *(*int32)(unsafe.Pointer(pbExists)) = 1 44808 } 44809 rc = libc.Xunlink(tls, zFile) 44810 } 44811 return rc 44812 } 44813 44814 func sqlite3_delete_database(tls *libc.TLS, zFile uintptr) int32 { 44815 bp := tls.Alloc(156) 44816 defer tls.Free(156) 44817 44818 var zBuf uintptr 44819 var nBuf int32 44820 var rc int32 = 0 44821 var i int32 44822 44823 *(*[4]uintptr)(unsafe.Pointer(bp + 24)) = [4]uintptr{ts, ts + 30609, ts + 30620, ts + 30627} 44824 44825 *(*[6]MFile)(unsafe.Pointer(bp + 56)) = [6]MFile{ 44826 {FzFmt: ts + 30634}, 44827 {FzFmt: ts + 30641}, 44828 {FzFmt: ts + 30656}, 44829 {FzFmt: ts + 30634, Fb83: 1}, 44830 {FzFmt: ts + 30641, FiOffset: SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET, Fb83: 1}, 44831 {FzFmt: ts + 30656, FiOffset: SQLITE_MULTIPLEX_WAL_8_3_OFFSET, Fb83: 1}, 44832 } 44833 44834 var pVfs uintptr = uintptr(0) 44835 44836 nBuf = int32(libc.Xstrlen(tls, zFile)) + 100 44837 zBuf = sqlite3.Xsqlite3_malloc(tls, nBuf) 44838 if zBuf == uintptr(0) { 44839 return SQLITE_NOMEM 44840 } 44841 44842 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([4]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 44843 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, *(*uintptr)(unsafe.Pointer(bp + 24 + uintptr(i)*8)), libc.VaList(bp, zFile)) 44844 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 44845 if rc == 0 && i != 0 { 44846 sqlite3Delete83Name(tls, zBuf) 44847 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 44848 } 44849 } 44850 44851 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([6]MFile{}))/uint64(unsafe.Sizeof(MFile{})); i++ { 44852 var p uintptr = bp + 56 + uintptr(i)*16 44853 var iChunk int32 44854 for iChunk = 1; iChunk <= MX_CHUNK_NUMBER; iChunk++ { 44855 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, (*MFile)(unsafe.Pointer(p)).FzFmt, libc.VaList(bp+8, zFile, iChunk+(*MFile)(unsafe.Pointer(p)).FiOffset)) 44856 if (*MFile)(unsafe.Pointer(p)).Fb83 != 0 { 44857 sqlite3Delete83Name(tls, zBuf) 44858 } 44859 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, bp+152) 44860 if *(*int32)(unsafe.Pointer(bp + 152)) == 0 || rc != 0 { 44861 break 44862 } 44863 } 44864 } 44865 44866 sqlite3.Xsqlite3_free(tls, zBuf) 44867 return func() int32 { 44868 if rc != 0 { 44869 return SQLITE_ERROR 44870 } 44871 return SQLITE_OK 44872 }() 44873 } 44874 44875 type MFile = struct { 44876 FzFmt uintptr 44877 FiOffset int32 44878 Fb83 int32 44879 } 44880 44881 func Sqlitetest_demovfs_Init(tls *libc.TLS, interp uintptr) int32 { 44882 return TCL_OK 44883 } 44884 44885 type devsym_file1 = struct { 44886 Fbase sqlite3_file 44887 FpReal uintptr 44888 } 44889 44890 type devsym_file = devsym_file1 44891 44892 type DevsymGlobal = struct { 44893 FpVfs uintptr 44894 FiDeviceChar int32 44895 FiSectorSize int32 44896 FnWriteCrash int32 44897 F__ccgo_pad1 [4]byte 44898 } 44899 44900 var g1 = DevsymGlobal{FiSectorSize: 512} 44901 44902 func devsymClose(tls *libc.TLS, pFile uintptr) int32 { 44903 var p uintptr = pFile 44904 sqlite3.Xsqlite3OsClose(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 44905 return SQLITE_OK 44906 } 44907 44908 func devsymRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 44909 var p uintptr = pFile 44910 return sqlite3.Xsqlite3OsRead(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 44911 } 44912 44913 func devsymWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 44914 var p uintptr = pFile 44915 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 44916 } 44917 44918 func devsymTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 44919 var p uintptr = pFile 44920 return sqlite3.Xsqlite3OsTruncate(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, size) 44921 } 44922 44923 func devsymSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 44924 var p uintptr = pFile 44925 return sqlite3.Xsqlite3OsSync(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags) 44926 } 44927 44928 func devsymFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 44929 var p uintptr = pFile 44930 return sqlite3.Xsqlite3OsFileSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pSize) 44931 } 44932 44933 func devsymLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 44934 var p uintptr = pFile 44935 return sqlite3.Xsqlite3OsLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 44936 } 44937 44938 func devsymUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 44939 var p uintptr = pFile 44940 return sqlite3.Xsqlite3OsUnlock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 44941 } 44942 44943 func devsymCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 44944 var p uintptr = pFile 44945 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pResOut) 44946 } 44947 44948 func devsymFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 44949 var p uintptr = pFile 44950 return sqlite3.Xsqlite3OsFileControl(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, op, pArg) 44951 } 44952 44953 func devsymSectorSize(tls *libc.TLS, pFile uintptr) int32 { 44954 return g1.FiSectorSize 44955 } 44956 44957 func devsymDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 44958 return g1.FiDeviceChar 44959 } 44960 44961 func devsymShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 44962 var p uintptr = pFile 44963 return (*struct { 44964 f func(*libc.TLS, uintptr, int32, int32, int32) int32 44965 })(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) 44966 } 44967 44968 func devsymShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 44969 var p uintptr = pFile 44970 return (*struct { 44971 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 44972 })(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) 44973 } 44974 44975 func devsymShmBarrier(tls *libc.TLS, pFile uintptr) { 44976 var p uintptr = pFile 44977 (*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) 44978 } 44979 44980 func devsymShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 44981 var p uintptr = pFile 44982 return (*struct { 44983 f func(*libc.TLS, uintptr, int32) int32 44984 })(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) 44985 } 44986 44987 func devsymOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 44988 var rc int32 44989 var p uintptr = pFile 44990 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 44991 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 44992 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 44993 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&devsym_io_methods)) 44994 } 44995 return rc 44996 } 44997 44998 var devsym_io_methods = sqlite3_io_methods{ 44999 FiVersion: 2, 45000 FxClose: 0, 45001 FxRead: 0, 45002 FxWrite: 0, 45003 FxTruncate: 0, 45004 FxSync: 0, 45005 FxFileSize: 0, 45006 FxLock: 0, 45007 FxUnlock: 0, 45008 FxCheckReservedLock: 0, 45009 FxFileControl: 0, 45010 FxSectorSize: 0, 45011 FxDeviceCharacteristics: 0, 45012 FxShmMap: 0, 45013 FxShmLock: 0, 45014 FxShmBarrier: 0, 45015 FxShmUnmap: 0, 45016 } 45017 45018 func devsymDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 45019 return sqlite3.Xsqlite3OsDelete(tls, g1.FpVfs, zPath, dirSync) 45020 } 45021 45022 func devsymAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 45023 return sqlite3.Xsqlite3OsAccess(tls, g1.FpVfs, zPath, flags, pResOut) 45024 } 45025 45026 func devsymFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 45027 return sqlite3.Xsqlite3OsFullPathname(tls, g1.FpVfs, zPath, nOut, zOut) 45028 } 45029 45030 func devsymRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 45031 return sqlite3.Xsqlite3OsRandomness(tls, g1.FpVfs, nByte, zBufOut) 45032 } 45033 45034 func devsymSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 45035 return sqlite3.Xsqlite3OsSleep(tls, g1.FpVfs, nMicro) 45036 } 45037 45038 func devsymCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 45039 return (*struct { 45040 f func(*libc.TLS, uintptr, uintptr) int32 45041 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FxCurrentTime})).f(tls, g1.FpVfs, pTimeOut) 45042 } 45043 45044 func writecrashSectorSize(tls *libc.TLS, pFile uintptr) int32 { 45045 var p uintptr = pFile 45046 return sqlite3.Xsqlite3OsSectorSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45047 } 45048 45049 func writecrashDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 45050 var p uintptr = pFile 45051 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45052 } 45053 45054 func writecrashWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45055 var p uintptr = pFile 45056 if g1.FnWriteCrash > 0 { 45057 g1.FnWriteCrash-- 45058 if g1.FnWriteCrash == 0 { 45059 libc.Xabort(tls) 45060 } 45061 } 45062 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45063 } 45064 45065 func writecrashOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45066 var rc int32 45067 var p uintptr = pFile 45068 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 45069 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45070 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45071 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&writecrash_io_methods)) 45072 } 45073 return rc 45074 } 45075 45076 var writecrash_io_methods = sqlite3_io_methods{ 45077 FiVersion: 2, 45078 FxClose: 0, 45079 FxRead: 0, 45080 FxWrite: 0, 45081 FxTruncate: 0, 45082 FxSync: 0, 45083 FxFileSize: 0, 45084 FxLock: 0, 45085 FxUnlock: 0, 45086 FxCheckReservedLock: 0, 45087 FxFileControl: 0, 45088 FxSectorSize: 0, 45089 FxDeviceCharacteristics: 0, 45090 FxShmMap: 0, 45091 FxShmLock: 0, 45092 FxShmBarrier: 0, 45093 FxShmUnmap: 0, 45094 } 45095 45096 var devsym_vfs = sqlite3_vfs{ 45097 FiVersion: 2, 45098 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45099 FmxPathname: DEVSYM_MAX_PATHNAME, 45100 FzName: ts + 30667, 45101 FxOpen: 0, 45102 FxDelete: 0, 45103 FxAccess: 0, 45104 FxFullPathname: 0, 45105 FxRandomness: 0, 45106 FxSleep: 0, 45107 FxCurrentTime: 0, 45108 } 45109 45110 var writecrash_vfs = sqlite3_vfs{ 45111 FiVersion: 2, 45112 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45113 FmxPathname: DEVSYM_MAX_PATHNAME, 45114 FzName: ts + 30674, 45115 FxOpen: 0, 45116 FxDelete: 0, 45117 FxAccess: 0, 45118 FxFullPathname: 0, 45119 FxRandomness: 0, 45120 FxSleep: 0, 45121 FxCurrentTime: 0, 45122 } 45123 45124 func devsym_register(tls *libc.TLS, iDeviceChar int32, iSectorSize int32) { 45125 if g1.FpVfs == uintptr(0) { 45126 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45127 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45128 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45129 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45130 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45131 } 45132 if iDeviceChar >= 0 { 45133 g1.FiDeviceChar = iDeviceChar 45134 } else { 45135 g1.FiDeviceChar = 0 45136 } 45137 if iSectorSize >= 0 { 45138 g1.FiSectorSize = iSectorSize 45139 } else { 45140 g1.FiSectorSize = 512 45141 } 45142 } 45143 45144 func devsym_unregister(tls *libc.TLS) { 45145 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&devsym_vfs))) 45146 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&writecrash_vfs))) 45147 g1.FpVfs = uintptr(0) 45148 g1.FiDeviceChar = 0 45149 g1.FiSectorSize = 0 45150 } 45151 45152 func devsym_crash_on_write(tls *libc.TLS, nWrite int32) { 45153 if g1.FpVfs == uintptr(0) { 45154 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45155 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45156 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45157 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45158 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45159 } 45160 g1.FnWriteCrash = nWrite 45161 } 45162 45163 type Tcl_StatBuf = stat 45164 45165 type fs_vtab1 = struct { 45166 Fbase sqlite3_vtab 45167 Fdb uintptr 45168 FzDb uintptr 45169 FzTbl uintptr 45170 } 45171 45172 type fs_vtab = fs_vtab1 45173 type fs_cursor1 = struct { 45174 Fbase sqlite3_vtab_cursor 45175 FpStmt uintptr 45176 FzBuf uintptr 45177 FnBuf int32 45178 FnAlloc int32 45179 } 45180 45181 type fs_cursor = fs_cursor1 45182 45183 type FsdirVtab1 = struct{ Fbase sqlite3_vtab } 45184 45185 type FsdirVtab = FsdirVtab1 45186 type FsdirCsr1 = struct { 45187 Fbase sqlite3_vtab_cursor 45188 FzDir uintptr 45189 FpDir uintptr 45190 FiRowid sqlite3_int64 45191 FpEntry uintptr 45192 } 45193 45194 type FsdirCsr = FsdirCsr1 45195 45196 func fsdirConnect1(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45197 var pTab uintptr 45198 45199 if argc != 3 { 45200 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45201 return SQLITE_ERROR 45202 } 45203 45204 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FsdirVtab{}))) 45205 if !(pTab != 0) { 45206 return SQLITE_NOMEM 45207 } 45208 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FsdirVtab{}))) 45209 45210 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 45211 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30685) 45212 45213 return SQLITE_OK 45214 } 45215 45216 func fsdirDisconnect1(tls *libc.TLS, pVtab uintptr) int32 { 45217 sqlite3.Xsqlite3_free(tls, pVtab) 45218 return SQLITE_OK 45219 } 45220 45221 func fsdirBestIndex1(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45222 var ii int32 45223 45224 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 45225 45226 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45227 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45228 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 { 45229 var pUsage uintptr 45230 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45231 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 45232 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45233 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 45234 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 45235 break 45236 } 45237 } 45238 45239 return SQLITE_OK 45240 } 45241 45242 func fsdirOpen1(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45243 var pCur uintptr 45244 45245 pCur = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(FsdirCsr{}))+uint64(256))) 45246 if pCur == uintptr(0) { 45247 return SQLITE_NOMEM 45248 } 45249 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FsdirCsr{}))) 45250 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45251 return SQLITE_OK 45252 } 45253 45254 func fsdirClose1(tls *libc.TLS, cur uintptr) int32 { 45255 var pCur uintptr = cur 45256 if (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir != 0 { 45257 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir) 45258 } 45259 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FzDir) 45260 sqlite3.Xsqlite3_free(tls, pCur) 45261 return SQLITE_OK 45262 } 45263 45264 func fsdirNext1(tls *libc.TLS, cur uintptr) int32 { 45265 var pCsr uintptr = cur 45266 45267 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 45268 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry = libc.Xreaddir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45269 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry == uintptr(0) { 45270 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45271 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 45272 } 45273 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid++ 45274 } 45275 45276 return SQLITE_OK 45277 } 45278 45279 func fsdirFilter1(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 45280 var pCsr uintptr = pVtabCursor 45281 var zDir uintptr 45282 var nDir int32 45283 45284 if idxNum != 1 || argc != 1 { 45285 return SQLITE_ERROR 45286 } 45287 45288 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 45289 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 45290 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 45291 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45292 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 45293 } 45294 45295 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 45296 nDir = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 45297 (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir = sqlite3.Xsqlite3_malloc(tls, nDir+1) 45298 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir == uintptr(0) { 45299 return SQLITE_NOMEM 45300 } 45301 libc.Xmemcpy(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, zDir, uint64(nDir+1)) 45302 45303 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = libc.Xopendir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 45304 return fsdirNext1(tls, pVtabCursor) 45305 } 45306 45307 func fsdirEof1(tls *libc.TLS, cur uintptr) int32 { 45308 var pCsr uintptr = cur 45309 return libc.Bool32((*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir == uintptr(0)) 45310 } 45311 45312 func fsdirColumn1(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 45313 var pCsr uintptr = cur 45314 switch i { 45315 case 0: 45316 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, -1, uintptr(0)) 45317 break 45318 45319 case 1: 45320 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry+24, -1, libc.UintptrFromInt32(-1)) 45321 break 45322 45323 default: 45324 } 45325 45326 return SQLITE_OK 45327 } 45328 45329 func fsdirRowid1(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 45330 var pCsr uintptr = cur 45331 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid 45332 return SQLITE_OK 45333 } 45334 45335 type FstreeVtab1 = struct { 45336 Fbase sqlite3_vtab 45337 Fdb uintptr 45338 } 45339 45340 type FstreeVtab = FstreeVtab1 45341 type FstreeCsr1 = struct { 45342 Fbase sqlite3_vtab_cursor 45343 FpStmt uintptr 45344 Ffd int32 45345 F__ccgo_pad1 [4]byte 45346 } 45347 45348 type FstreeCsr = FstreeCsr1 45349 45350 func fstreeConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45351 var pTab uintptr 45352 45353 if argc != 3 { 45354 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45355 return SQLITE_ERROR 45356 } 45357 45358 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeVtab{}))) 45359 if !(pTab != 0) { 45360 return SQLITE_NOMEM 45361 } 45362 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FstreeVtab{}))) 45363 (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb = db 45364 45365 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 45366 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30714) 45367 45368 return SQLITE_OK 45369 } 45370 45371 func fstreeDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 45372 sqlite3.Xsqlite3_free(tls, pVtab) 45373 return SQLITE_OK 45374 } 45375 45376 func fstreeBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45377 var ii int32 45378 45379 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45380 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45381 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 || 45382 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE || 45383 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 45384 var pUsage uintptr 45385 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45386 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) 45387 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45388 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100000.0 45389 return SQLITE_OK 45390 } 45391 } 45392 45393 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 45394 return SQLITE_OK 45395 } 45396 45397 func fstreeOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45398 var pCur uintptr 45399 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeCsr{}))) 45400 if pCur == uintptr(0) { 45401 return SQLITE_NOMEM 45402 } 45403 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FstreeCsr{}))) 45404 (*FstreeCsr)(unsafe.Pointer(pCur)).Ffd = -1 45405 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45406 return SQLITE_OK 45407 } 45408 45409 func fstreeCloseFd(tls *libc.TLS, pCsr uintptr) { 45410 if (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd >= 0 { 45411 libc.Xclose(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd) 45412 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = -1 45413 } 45414 } 45415 45416 func fstreeClose(tls *libc.TLS, cur uintptr) int32 { 45417 var pCsr uintptr = cur 45418 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45419 fstreeCloseFd(tls, pCsr) 45420 sqlite3.Xsqlite3_free(tls, pCsr) 45421 return SQLITE_OK 45422 } 45423 45424 func fstreeNext(tls *libc.TLS, cur uintptr) int32 { 45425 var pCsr uintptr = cur 45426 var rc int32 45427 45428 fstreeCloseFd(tls, pCsr) 45429 rc = sqlite3.Xsqlite3_step(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45430 if rc != SQLITE_ROW { 45431 rc = sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45432 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 45433 } else { 45434 rc = SQLITE_OK 45435 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = libc.Xopen(tls, sqlite3.Xsqlite3_column_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0), O_RDONLY, 0) 45436 } 45437 45438 return rc 45439 } 45440 45441 func fstreeFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 45442 bp := tls.Alloc(2) 45443 defer tls.Free(2) 45444 45445 var pCsr uintptr = pVtabCursor 45446 var pTab uintptr = (*FstreeCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 45447 var rc int32 45448 var zSql uintptr = ts + 30750 45449 var zRoot uintptr 45450 var nRoot int32 45451 var zPrefix uintptr 45452 var nPrefix int32 45453 var zDir uintptr 45454 var nDir int32 45455 *(*[2]int8)(unsafe.Pointer(bp)) = [2]int8{int8(0), int8(0)} 45456 45457 zRoot = ts + 30982 45458 nRoot = 1 45459 zPrefix = ts + 584 45460 nPrefix = 0 45461 45462 zDir = zRoot 45463 nDir = nRoot 45464 45465 fstreeCloseFd(tls, pCsr) 45466 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45467 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 45468 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 45469 if rc != SQLITE_OK { 45470 return rc 45471 } 45472 45473 if idxNum != 0 { 45474 var zQuery uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 45475 switch idxNum { 45476 case SQLITE_INDEX_CONSTRAINT_GLOB: 45477 *(*int8)(unsafe.Pointer(bp)) = int8('*') 45478 *(*int8)(unsafe.Pointer(bp + 1)) = int8('?') 45479 break 45480 fallthrough 45481 case SQLITE_INDEX_CONSTRAINT_LIKE: 45482 *(*int8)(unsafe.Pointer(bp)) = int8('_') 45483 *(*int8)(unsafe.Pointer(bp + 1)) = int8('%') 45484 break 45485 } 45486 45487 if sqlite3.Xsqlite3_strnicmp(tls, zQuery, zPrefix, nPrefix) == 0 { 45488 var i int32 45489 for i = nPrefix; *(*int8)(unsafe.Pointer(zQuery + uintptr(i))) != 0; i++ { 45490 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))) { 45491 break 45492 } 45493 if int32(*(*int8)(unsafe.Pointer(zQuery + uintptr(i)))) == '/' { 45494 nDir = i 45495 } 45496 } 45497 zDir = zQuery 45498 } 45499 } 45500 if nDir == 0 { 45501 nDir = 1 45502 } 45503 45504 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 1, zDir, nDir, libc.UintptrFromInt32(-1)) 45505 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 2, zRoot, nRoot, libc.UintptrFromInt32(-1)) 45506 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 3, zPrefix, nPrefix, libc.UintptrFromInt32(-1)) 45507 45508 return fstreeNext(tls, pVtabCursor) 45509 } 45510 45511 func fstreeEof(tls *libc.TLS, cur uintptr) int32 { 45512 var pCsr uintptr = cur 45513 return libc.Bool32((*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 45514 } 45515 45516 func fstreeColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 45517 bp := tls.Alloc(128) 45518 defer tls.Free(128) 45519 45520 var pCsr uintptr = cur 45521 if i == 0 { 45522 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0)) 45523 } else { 45524 libc.Xfstat(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, bp) 45525 45526 if (*stat)(unsafe.Pointer(bp)).Fst_mode&mode_t(0170000) == mode_t(0100000) { 45527 if i == 1 { 45528 sqlite3.Xsqlite3_result_int64(tls, ctx, (*stat)(unsafe.Pointer(bp)).Fst_size) 45529 } else { 45530 var nRead int32 45531 var aBuf uintptr = sqlite3.Xsqlite3_malloc(tls, int32((*stat)(unsafe.Pointer(bp)).Fst_mode+mode_t(1))) 45532 if !(aBuf != 0) { 45533 return SQLITE_NOMEM 45534 } 45535 nRead = int32(libc.Xread(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, aBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_mode))) 45536 if mode_t(nRead) != (*stat)(unsafe.Pointer(bp)).Fst_mode { 45537 return SQLITE_IOERR 45538 } 45539 sqlite3.Xsqlite3_result_blob(tls, ctx, aBuf, nRead, libc.UintptrFromInt32(-1)) 45540 sqlite3.Xsqlite3_free(tls, aBuf) 45541 } 45542 } 45543 } 45544 45545 return SQLITE_OK 45546 } 45547 45548 func fstreeRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 45549 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 45550 return SQLITE_OK 45551 } 45552 45553 func fsConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45554 var pVtab uintptr 45555 var nByte int32 45556 var zTbl uintptr 45557 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 45558 45559 if argc != 4 { 45560 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45561 return SQLITE_ERROR 45562 } 45563 zTbl = *(*uintptr)(unsafe.Pointer(argv + 3*8)) 45564 45565 nByte = int32(uint64(unsafe.Sizeof(fs_vtab{})) + uint64(int32(libc.Xstrlen(tls, zTbl))) + uint64(1) + uint64(int32(libc.Xstrlen(tls, zDb))) + uint64(1)) 45566 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(nByte)) 45567 if !(pVtab != 0) { 45568 return SQLITE_NOMEM 45569 } 45570 45571 (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl = pVtab + 1*48 45572 (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb = (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl + uintptr(libc.Xstrlen(tls, zTbl)+uint64(1)) 45573 (*fs_vtab)(unsafe.Pointer(pVtab)).Fdb = db 45574 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl, zTbl, libc.Xstrlen(tls, zTbl)) 45575 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb, zDb, libc.Xstrlen(tls, zDb)) 45576 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 45577 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30984) 45578 45579 return SQLITE_OK 45580 } 45581 45582 func fsDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 45583 sqlite3.Xsqlite3_free(tls, pVtab) 45584 return SQLITE_OK 45585 } 45586 45587 func fsOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45588 var pCur uintptr 45589 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(fs_cursor{}))) 45590 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45591 return SQLITE_OK 45592 } 45593 45594 func fsClose(tls *libc.TLS, cur uintptr) int32 { 45595 var pCur uintptr = cur 45596 sqlite3.Xsqlite3_finalize(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 45597 sqlite3.Xsqlite3_free(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf) 45598 sqlite3.Xsqlite3_free(tls, pCur) 45599 return SQLITE_OK 45600 } 45601 45602 func fsNext(tls *libc.TLS, cur uintptr) int32 { 45603 var pCur uintptr = cur 45604 var rc int32 45605 45606 rc = sqlite3.Xsqlite3_step(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 45607 if rc == SQLITE_ROW || rc == SQLITE_DONE { 45608 rc = SQLITE_OK 45609 } 45610 45611 return rc 45612 } 45613 45614 func fsFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 45615 bp := tls.Alloc(32) 45616 defer tls.Free(32) 45617 45618 var rc int32 45619 var pCur uintptr = pVtabCursor 45620 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 45621 45622 if idxNum == 1 { 45623 var zStmt uintptr = sqlite3.Xsqlite3_mprintf(tls, 45624 ts+31021, libc.VaList(bp, (*fs_vtab)(unsafe.Pointer(p)).FzDb, (*fs_vtab)(unsafe.Pointer(p)).FzTbl)) 45625 if !(zStmt != 0) { 45626 return SQLITE_NOMEM 45627 } 45628 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 45629 sqlite3.Xsqlite3_free(tls, zStmt) 45630 if rc == SQLITE_OK { 45631 sqlite3.Xsqlite3_bind_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1, *(*uintptr)(unsafe.Pointer(argv))) 45632 } 45633 } else { 45634 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)) 45635 if !(zStmt != 0) { 45636 return SQLITE_NOMEM 45637 } 45638 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 45639 sqlite3.Xsqlite3_free(tls, zStmt) 45640 } 45641 45642 if rc == SQLITE_OK { 45643 rc = fsNext(tls, pVtabCursor) 45644 } 45645 return rc 45646 } 45647 45648 func fsColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 45649 bp := tls.Alloc(128) 45650 defer tls.Free(128) 45651 45652 var pCur uintptr = cur 45653 45654 if i == 0 { 45655 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0)) 45656 } else { 45657 var zFile uintptr = sqlite3.Xsqlite3_column_text(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1) 45658 45659 var fd int32 45660 var n int32 45661 fd = libc.Xopen(tls, zFile, O_RDONLY, 0) 45662 if fd < 0 { 45663 return SQLITE_IOERR 45664 } 45665 libc.Xfstat(tls, fd, bp) 45666 45667 if (*stat)(unsafe.Pointer(bp)).Fst_size >= off_t((*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc) { 45668 var nNew sqlite3_int64 = (*stat)(unsafe.Pointer(bp)).Fst_size * int64(2) 45669 var zNew uintptr 45670 if nNew < int64(1024) { 45671 nNew = int64(1024) 45672 } 45673 45674 zNew = sqlite3.Xsqlite3Realloc(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64(nNew)) 45675 if zNew == uintptr(0) { 45676 libc.Xclose(tls, fd) 45677 return SQLITE_NOMEM 45678 } 45679 (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf = zNew 45680 (*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc = int32(nNew) 45681 } 45682 45683 n = int32(libc.Xread(tls, fd, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_size))) 45684 libc.Xclose(tls, fd) 45685 if off_t(n) != (*stat)(unsafe.Pointer(bp)).Fst_size { 45686 return SQLITE_ERROR 45687 } 45688 (*fs_cursor)(unsafe.Pointer(pCur)).FnBuf = int32((*stat)(unsafe.Pointer(bp)).Fst_size) 45689 *(*int8)(unsafe.Pointer((*fs_cursor)(unsafe.Pointer(pCur)).FzBuf + uintptr((*fs_cursor)(unsafe.Pointer(pCur)).FnBuf))) = int8(0) 45690 45691 sqlite3.Xsqlite3_result_text(tls, ctx, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 45692 } 45693 return SQLITE_OK 45694 } 45695 45696 func fsRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 45697 var pCur uintptr = cur 45698 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0) 45699 return SQLITE_OK 45700 } 45701 45702 func fsEof(tls *libc.TLS, cur uintptr) int32 { 45703 var pCur uintptr = cur 45704 return libc.Bool32(sqlite3.Xsqlite3_data_count(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) == 0) 45705 } 45706 45707 func fsBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45708 var ii int32 45709 45710 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45711 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45712 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn < 0 && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 45713 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 45714 var pUsage uintptr 45715 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45716 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 45717 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45718 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 45719 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 45720 break 45721 } 45722 } 45723 45724 return SQLITE_OK 45725 } 45726 45727 var fsModule = sqlite3_module{ 45728 FxCreate: 0, 45729 FxConnect: 0, 45730 FxBestIndex: 0, 45731 FxDisconnect: 0, 45732 FxDestroy: 0, 45733 FxOpen: 0, 45734 FxClose: 0, 45735 FxFilter: 0, 45736 FxNext: 0, 45737 FxEof: 0, 45738 FxColumn: 0, 45739 FxRowid: 0, 45740 } 45741 45742 var fsdirModule = sqlite3_module{ 45743 FxCreate: 0, 45744 FxConnect: 0, 45745 FxBestIndex: 0, 45746 FxDisconnect: 0, 45747 FxDestroy: 0, 45748 FxOpen: 0, 45749 FxClose: 0, 45750 FxFilter: 0, 45751 FxNext: 0, 45752 FxEof: 0, 45753 FxColumn: 0, 45754 FxRowid: 0, 45755 } 45756 45757 var fstreeModule = sqlite3_module{ 45758 FxCreate: 0, 45759 FxConnect: 0, 45760 FxBestIndex: 0, 45761 FxDisconnect: 0, 45762 FxDestroy: 0, 45763 FxOpen: 0, 45764 FxClose: 0, 45765 FxFilter: 0, 45766 FxNext: 0, 45767 FxEof: 0, 45768 FxColumn: 0, 45769 FxRowid: 0, 45770 } 45771 45772 func register_fs_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45773 bp := tls.Alloc(8) 45774 defer tls.Free(8) 45775 45776 if objc != 2 { 45777 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 45778 return TCL_ERROR 45779 } 45780 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 45781 return TCL_ERROR 45782 } 45783 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31055, uintptr(unsafe.Pointer(&fsModule)), interp) 45784 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+5325, uintptr(unsafe.Pointer(&fsdirModule)), uintptr(0)) 45785 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31058, uintptr(unsafe.Pointer(&fstreeModule)), uintptr(0)) 45786 return TCL_OK 45787 } 45788 45789 func Sqlitetestfs_Init(tls *libc.TLS, interp uintptr) int32 { 45790 var i int32 45791 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd6))/uint64(unsafe.Sizeof(struct { 45792 FzName uintptr 45793 FxProc uintptr 45794 FclientData uintptr 45795 }{})); i++ { 45796 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd6[i].FzName, 45797 aObjCmd6[i].FxProc, aObjCmd6[i].FclientData, uintptr(0)) 45798 } 45799 return TCL_OK 45800 } 45801 45802 var aObjCmd6 = [1]struct { 45803 FzName uintptr 45804 FxProc uintptr 45805 FclientData uintptr 45806 }{ 45807 {FzName: ts + 31065, FxProc: 0}, 45808 } 45809 45810 func testContextMalloc(tls *libc.TLS, context uintptr, nByte int32) uintptr { 45811 var z uintptr = sqlite3.Xsqlite3_malloc(tls, nByte) 45812 if !(z != 0) && nByte > 0 { 45813 sqlite3.Xsqlite3_result_error_nomem(tls, context) 45814 } 45815 return z 45816 } 45817 45818 func randStr(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 45819 bp := tls.Alloc(1004) 45820 defer tls.Free(1004) 45821 45822 var iMin int32 45823 var iMax int32 45824 var n int32 45825 45826 var i int32 45827 45828 iMin = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 45829 if iMin < 0 { 45830 iMin = 0 45831 } 45832 if uint64(iMin) >= uint64(unsafe.Sizeof([1000]uint8{})) { 45833 iMin = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 45834 } 45835 iMax = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 45836 if iMax < iMin { 45837 iMax = iMin 45838 } 45839 if uint64(iMax) >= uint64(unsafe.Sizeof([1000]uint8{})) { 45840 iMax = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 45841 } 45842 n = iMin 45843 if iMax > iMin { 45844 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 45845 *(*int32)(unsafe.Pointer(bp)) &= 0x7fffffff 45846 n = n + *(*int32)(unsafe.Pointer(bp))%(iMax+1-iMin) 45847 } 45848 45849 sqlite3.Xsqlite3_randomness(tls, n, bp+4) 45850 for i = 0; i < n; i++ { 45851 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))) = zSrc[uint64(*(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))))%(uint64(unsafe.Sizeof(zSrc))-uint64(1))] 45852 } 45853 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(n))) = uint8(0) 45854 sqlite3.Xsqlite3_result_text(tls, context, bp+4, n, libc.UintptrFromInt32(-1)) 45855 } 45856 45857 var zSrc = *(*[79]uint8)(unsafe.Pointer(ts + 31084)) 45858 45859 var test_destructor_count_var int32 = 0 45860 45861 func destructor(tls *libc.TLS, p uintptr) { 45862 var zVal uintptr = p 45863 45864 zVal-- 45865 sqlite3.Xsqlite3_free(tls, zVal) 45866 test_destructor_count_var-- 45867 } 45868 45869 func test_destructor(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45870 var zVal uintptr 45871 var len int32 45872 45873 test_destructor_count_var++ 45874 45875 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 45876 return 45877 } 45878 len = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 45879 zVal = testContextMalloc(tls, pCtx, len+3) 45880 if !(zVal != 0) { 45881 return 45882 } 45883 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 45884 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 45885 zVal++ 45886 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 45887 sqlite3.Xsqlite3_result_text(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 45888 } 45889 45890 func test_destructor16(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45891 var zVal uintptr 45892 var len int32 45893 45894 test_destructor_count_var++ 45895 45896 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 45897 return 45898 } 45899 len = sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 45900 zVal = testContextMalloc(tls, pCtx, len+3) 45901 if !(zVal != 0) { 45902 return 45903 } 45904 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 45905 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 45906 zVal++ 45907 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 45908 sqlite3.Xsqlite3_result_text16(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 45909 } 45910 45911 func test_destructor_count(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45912 sqlite3.Xsqlite3_result_int(tls, pCtx, test_destructor_count_var) 45913 } 45914 45915 func test_agg_errmsg16_step(tls *libc.TLS, a uintptr, b int32, c uintptr) { 45916 } 45917 45918 func test_agg_errmsg16_final(tls *libc.TLS, ctx uintptr) { 45919 var z uintptr 45920 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 45921 sqlite3.Xsqlite3_aggregate_context(tls, ctx, 2048) 45922 z = sqlite3.Xsqlite3_errmsg16(tls, db) 45923 sqlite3.Xsqlite3_result_text16(tls, ctx, z, -1, libc.UintptrFromInt32(-1)) 45924 } 45925 45926 func free_test_auxdata(tls *libc.TLS, p uintptr) { 45927 sqlite3.Xsqlite3_free(tls, p) 45928 } 45929 45930 func test_auxdata(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45931 var i int32 45932 var zRet uintptr = testContextMalloc(tls, pCtx, nArg*2) 45933 if !(zRet != 0) { 45934 return 45935 } 45936 libc.Xmemset(tls, zRet, 0, uint64(nArg*2)) 45937 for i = 0; i < nArg; i++ { 45938 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 45939 if z != 0 { 45940 var n int32 45941 var zAux uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, i) 45942 if zAux != 0 { 45943 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('1') 45944 45945 } else { 45946 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('0') 45947 } 45948 n = int32(libc.Xstrlen(tls, z)) + 1 45949 zAux = testContextMalloc(tls, pCtx, n) 45950 if zAux != 0 { 45951 libc.Xmemcpy(tls, zAux, z, uint64(n)) 45952 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, i, zAux, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 45953 } 45954 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2+1))) = int8(' ') 45955 } 45956 } 45957 sqlite3.Xsqlite3_result_text(tls, pCtx, zRet, 2*nArg-1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 45958 } 45959 45960 func test_error(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45961 sqlite3.Xsqlite3_result_error(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1) 45962 if nArg == 2 { 45963 sqlite3.Xsqlite3_result_error_code(tls, pCtx, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 45964 } 45965 } 45966 45967 func counterFunc(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45968 var pCounter uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, 0) 45969 if pCounter == uintptr(0) { 45970 pCounter = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(int32(0)))) 45971 if pCounter == uintptr(0) { 45972 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 45973 return 45974 } 45975 *(*int32)(unsafe.Pointer(pCounter)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 45976 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, 0, pCounter, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 45977 } else { 45978 *(*int32)(unsafe.Pointer(pCounter))++ 45979 } 45980 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(pCounter))) 45981 } 45982 45983 func test_isolation(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45984 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 45985 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 45986 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 45987 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 45988 sqlite3.Xsqlite3_result_value(tls, pCtx, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 45989 } 45990 45991 func test_eval(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45992 bp := tls.Alloc(16) 45993 defer tls.Free(16) 45994 45995 var rc int32 45996 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, pCtx) 45997 var zSql uintptr 45998 45999 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46000 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 46001 if rc == SQLITE_OK { 46002 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46003 if rc == SQLITE_ROW { 46004 sqlite3.Xsqlite3_result_value(tls, pCtx, sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0)) 46005 } 46006 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46007 } 46008 if rc != 0 { 46009 var zErr uintptr 46010 46011 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+31163, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 46012 sqlite3.Xsqlite3_result_text(tls, pCtx, zErr, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46013 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 46014 } 46015 } 46016 46017 func testHexChar(tls *libc.TLS, c int8) int32 { 46018 if int32(c) >= '0' && int32(c) <= '9' { 46019 return int32(c) - '0' 46020 } else if int32(c) >= 'a' && int32(c) <= 'f' { 46021 return int32(c) - 'a' + 10 46022 } else if int32(c) >= 'A' && int32(c) <= 'F' { 46023 return int32(c) - 'A' + 10 46024 } 46025 return 0 46026 } 46027 46028 func testHexToBin(tls *libc.TLS, zIn uintptr, zOut uintptr) { 46029 for *(*int8)(unsafe.Pointer(zIn)) != 0 && *(*int8)(unsafe.Pointer(zIn + 1)) != 0 { 46030 *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zOut, 1))) = int8(testHexChar(tls, *(*int8)(unsafe.Pointer(zIn)))<<4 + testHexChar(tls, *(*int8)(unsafe.Pointer(zIn + 1)))) 46031 zIn += uintptr(2) 46032 } 46033 } 46034 46035 func testHexToUtf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46036 var n int32 46037 var zIn uintptr 46038 var zOut uintptr 46039 46040 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46041 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46042 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46043 if zOut == uintptr(0) { 46044 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46045 } else { 46046 testHexToBin(tls, zIn, zOut) 46047 sqlite3.Xsqlite3_result_text16be(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46048 } 46049 } 46050 46051 func testHexToUtf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46052 var n int32 46053 var zIn uintptr 46054 var zOut uintptr 46055 46056 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46057 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46058 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46059 if zOut == uintptr(0) { 46060 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46061 } else { 46062 testHexToBin(tls, zIn, zOut) 46063 sqlite3.Xsqlite3_result_text(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46064 } 46065 } 46066 46067 func testHexToUtf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46068 var n int32 46069 var zIn uintptr 46070 var zOut uintptr 46071 46072 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46073 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46074 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46075 if zOut == uintptr(0) { 46076 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46077 } else { 46078 testHexToBin(tls, zIn, zOut) 46079 sqlite3.Xsqlite3_result_text16le(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46080 } 46081 } 46082 46083 func real2hex(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46084 bp := tls.Alloc(28) 46085 defer tls.Free(28) 46086 46087 var i int32 46088 var bigEndian int32 46089 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(1) 46090 bigEndian = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(bp))) == 0) 46091 *(*float64)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 46092 for i = 0; i < 8; i++ { 46093 if bigEndian != 0 { 46094 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 46095 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 46096 } else { 46097 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 46098 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 46099 } 46100 } 46101 *(*int8)(unsafe.Pointer(bp + 8 + 16)) = int8(0) 46102 sqlite3.Xsqlite3_result_text(tls, context, bp+8, -1, libc.UintptrFromInt32(-1)) 46103 } 46104 46105 func test_extract(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46106 bp := tls.Alloc(72) 46107 defer tls.Free(72) 46108 46109 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 46110 var pRec uintptr 46111 var pEndHdr uintptr 46112 var pHdr uintptr 46113 var pBody uintptr 46114 46115 var iIdx int32 46116 var iCurrent int32 = 0 46117 46118 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 46119 iIdx = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 46120 46121 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp)) 46122 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp)))) 46123 46124 for iCurrent = 0; pHdr < pEndHdr && iCurrent <= iIdx; iCurrent++ { 46125 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(Mem{}))) 46126 (*Mem)(unsafe.Pointer(bp + 8)).Fdb = db 46127 (*Mem)(unsafe.Pointer(bp + 8)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 46128 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+64)) 46129 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 64))), bp+8) 46130 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 64))))) 46131 46132 if iCurrent == iIdx { 46133 sqlite3.Xsqlite3_result_value(tls, context, bp+8) 46134 } 46135 46136 if (*Mem)(unsafe.Pointer(bp+8)).FszMalloc != 0 { 46137 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+8)).FzMalloc) 46138 } 46139 } 46140 } 46141 46142 func test_decode(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46143 bp := tls.Alloc(123) 46144 defer tls.Free(123) 46145 46146 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 46147 var pRec uintptr 46148 var pEndHdr uintptr 46149 var pHdr uintptr 46150 var pBody uintptr 46151 46152 var pRet uintptr 46153 46154 pRet = tcl.XTcl_NewObj(tls) 46155 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 46156 46157 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 46158 46159 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp+32)) 46160 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp + 32)))) 46161 for pHdr < pEndHdr { 46162 var pVal uintptr = uintptr(0) 46163 46164 libc.Xmemset(tls, bp+40, 0, uint64(unsafe.Sizeof(Mem{}))) 46165 (*Mem)(unsafe.Pointer(bp + 40)).Fdb = db 46166 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 46167 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+96)) 46168 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 96))), bp+40) 46169 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 96))))) 46170 46171 switch sqlite3.Xsqlite3_value_type(tls, bp+40) { 46172 case SQLITE_TEXT: 46173 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, bp+40), -1) 46174 break 46175 46176 case SQLITE_BLOB: 46177 { 46178 *(*[16]int8)(unsafe.Pointer(bp + 107)) = [16]int8{ 46179 int8('0'), int8('1'), int8('2'), int8('3'), int8('4'), int8('5'), int8('6'), int8('7'), 46180 int8('8'), int8('9'), int8('a'), int8('b'), int8('c'), int8('d'), int8('e'), int8('f'), 46181 } 46182 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, bp+40) 46183 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, bp+40) 46184 var i int32 46185 pVal = tcl.XTcl_NewStringObj(tls, ts+6334, -1) 46186 for i = 0; i < n; i++ { 46187 *(*int8)(unsafe.Pointer(bp + 104)) = *(*int8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))>>4&0x0F))) 46188 *(*int8)(unsafe.Pointer(bp + 104 + 1)) = *(*int8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))&0x0F))) 46189 *(*int8)(unsafe.Pointer(bp + 104 + 2)) = int8(0) 46190 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp, bp+104, 0)) 46191 } 46192 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp+16, ts+5624, 0)) 46193 break 46194 46195 } 46196 46197 case SQLITE_FLOAT: 46198 pVal = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, bp+40)) 46199 break 46200 46201 case SQLITE_INTEGER: 46202 pVal = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, bp+40)) 46203 break 46204 46205 case SQLITE_NULL: 46206 pVal = tcl.XTcl_NewStringObj(tls, ts+5846, -1) 46207 break 46208 46209 default: 46210 } 46211 46212 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, pVal) 46213 46214 if (*Mem)(unsafe.Pointer(bp+40)).FszMalloc != 0 { 46215 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+40)).FzMalloc) 46216 } 46217 } 46218 46219 sqlite3.Xsqlite3_result_text(tls, context, tcl.XTcl_GetString(tls, pRet), -1, libc.UintptrFromInt32(-1)) 46220 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 46221 var _objPtr uintptr = pRet 46222 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 46223 tcl.XTclFreeObj(tls, _objPtr) 46224 } 46225 } 46226 } 46227 46228 func test_zeroblob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46229 var nZero int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46230 sqlite3.Xsqlite3_result_zeroblob(tls, context, nZero) 46231 } 46232 46233 func test_getsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46234 sqlite3.Xsqlite3_result_int(tls, context, int32(sqlite3.Xsqlite3_value_subtype(tls, *(*uintptr)(unsafe.Pointer(argv))))) 46235 } 46236 46237 func test_frombind(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46238 var m sqlite3_uint64 = uint64(0) 46239 var i int32 46240 for i = 0; i < argc && i < 63; i++ { 46241 if sqlite3.Xsqlite3_value_frombind(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) != 0 { 46242 m = m | uint64(1)<<i 46243 } 46244 } 46245 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3_int64(m)) 46246 } 46247 46248 func test_setsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46249 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv))) 46250 sqlite3.Xsqlite3_result_subtype(tls, context, uint32(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 46251 } 46252 46253 func registerTestFunctions(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 46254 var i int32 46255 46256 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aFuncs))/uint64(unsafe.Sizeof(struct { 46257 FzName uintptr 46258 FnArg int8 46259 F__ccgo_pad1 [3]byte 46260 FeTextRep uint32 46261 FxFunc uintptr 46262 }{})); i++ { 46263 sqlite3.Xsqlite3_create_function(tls, db, aFuncs[i].FzName, int32(aFuncs[i].FnArg), 46264 int32(aFuncs[i].FeTextRep), uintptr(0), aFuncs[i].FxFunc, uintptr(0), uintptr(0)) 46265 } 46266 46267 sqlite3.Xsqlite3_create_function(tls, db, ts+31211, 0, SQLITE_ANY, uintptr(0), uintptr(0), 46268 *(*uintptr)(unsafe.Pointer(&struct { 46269 f func(*libc.TLS, uintptr, int32, uintptr) 46270 }{test_agg_errmsg16_step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_agg_errmsg16_final}))) 46271 46272 return SQLITE_OK 46273 } 46274 46275 var aFuncs = [20]struct { 46276 FzName uintptr 46277 FnArg int8 46278 F__ccgo_pad1 [3]byte 46279 FeTextRep uint32 46280 FxFunc uintptr 46281 }{ 46282 {FzName: ts + 31229, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46283 {FzName: ts + 31237, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46284 {FzName: ts + 31253, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46285 {FzName: ts + 31271, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46286 {FzName: ts + 31286, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46287 {FzName: ts + 31301, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46288 {FzName: ts + 31313, FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46289 {FzName: ts + 31335, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46290 {FzName: ts + 31348, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46291 {FzName: ts + 31348, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46292 {FzName: ts + 31359, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46293 {FzName: ts + 31369, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46294 {FzName: ts + 31384, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46295 {FzName: ts + 31397, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46296 {FzName: ts + 31406, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46297 {FzName: ts + 31418, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46298 {FzName: ts + 31431, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8 | SQLITE_DETERMINISTIC), FxFunc: 0}, 46299 {FzName: ts + 31445, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46300 {FzName: ts + 31461, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46301 {FzName: ts + 31477, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46302 } 46303 46304 func autoinstall_test_funcs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46305 var rc int32 = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46306 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46307 }{registerTestFunctions}))) 46308 if rc == SQLITE_OK { 46309 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46310 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46311 }{Md5_Register}))) 46312 } 46313 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 46314 return TCL_OK 46315 } 46316 46317 func tStep(tls *libc.TLS, a uintptr, b int32, c uintptr) { 46318 } 46319 46320 func tFinal(tls *libc.TLS, a uintptr) { 46321 } 46322 46323 func abuse_create_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46324 bp := tls.Alloc(24) 46325 defer tls.Free(24) 46326 46327 var rc int32 46328 var mxArg int32 46329 46330 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0) { 46331 goto __1 46332 } 46333 return TCL_ERROR 46334 __1: 46335 ; 46336 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46337 f func(*libc.TLS, uintptr, int32, uintptr) 46338 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 46339 f func(*libc.TLS, uintptr, int32, uintptr) 46340 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 46341 if !(rc != SQLITE_MISUSE) { 46342 goto __2 46343 } 46344 goto abuse_err 46345 __2: 46346 ; 46347 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46348 f func(*libc.TLS, uintptr, int32, uintptr) 46349 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 46350 f func(*libc.TLS, uintptr, int32, uintptr) 46351 }{tStep})), uintptr(0)) 46352 if !(rc != SQLITE_MISUSE) { 46353 goto __3 46354 } 46355 goto abuse_err 46356 __3: 46357 ; 46358 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46359 f func(*libc.TLS, uintptr, int32, uintptr) 46360 }{tStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 46361 if !(rc != SQLITE_MISUSE) { 46362 goto __4 46363 } 46364 goto abuse_err 46365 __4: 46366 ; 46367 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}))) 46368 if !(rc != SQLITE_MISUSE) { 46369 goto __5 46370 } 46371 goto abuse_err 46372 __5: 46373 ; 46374 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46375 f func(*libc.TLS, uintptr, int32, uintptr) 46376 }{tStep})), uintptr(0)) 46377 if !(rc != SQLITE_MISUSE) { 46378 goto __6 46379 } 46380 goto abuse_err 46381 __6: 46382 ; 46383 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, -2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46384 f func(*libc.TLS, uintptr, int32, uintptr) 46385 }{tStep})), uintptr(0), uintptr(0)) 46386 if !(rc != SQLITE_MISUSE) { 46387 goto __7 46388 } 46389 goto abuse_err 46390 __7: 46391 ; 46392 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 128, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46393 f func(*libc.TLS, uintptr, int32, uintptr) 46394 }{tStep})), uintptr(0), uintptr(0)) 46395 if !(rc != SQLITE_MISUSE) { 46396 goto __8 46397 } 46398 goto abuse_err 46399 __8: 46400 ; 46401 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 46402 ts+31494, 46403 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46404 f func(*libc.TLS, uintptr, int32, uintptr) 46405 }{tStep})), uintptr(0), uintptr(0)) 46406 if !(rc != SQLITE_MISUSE) { 46407 goto __9 46408 } 46409 goto abuse_err 46410 __9: 46411 ; 46412 sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, 10000) 46413 mxArg = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, -1) 46414 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 46415 ts+31751, 46416 mxArg, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46417 f func(*libc.TLS, uintptr, int32, uintptr) 46418 }{tStep})), uintptr(0), uintptr(0)) 46419 if !(rc != SQLITE_OK) { 46420 goto __10 46421 } 46422 goto abuse_err 46423 __10: 46424 ; 46425 return TCL_OK 46426 46427 abuse_err: 46428 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32007, 46429 uintptr(0))) 46430 return TCL_ERROR 46431 } 46432 46433 func rankfunc(tls *libc.TLS, pCtx uintptr, nVal int32, apVal uintptr) { 46434 var aMatchinfo uintptr 46435 var nMatchinfo int32 46436 var nCol int32 46437 var nPhrase int32 46438 var iPhrase int32 46439 var score float64 46440 var nHitCount int32 46441 var nGlobalHitCount int32 46442 var weight float64 46443 var iCol int32 46444 46445 var aPhraseinfo uintptr 46446 nCol = 0 46447 nPhrase = 0 46448 score = 0.0 46449 46450 if !(nVal < 1) { 46451 goto __1 46452 } 46453 goto wrong_number_args 46454 __1: 46455 ; 46456 aMatchinfo = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal))) 46457 nMatchinfo = int32(uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal)))) / uint64(unsafe.Sizeof(int32(0)))) 46458 if !(nMatchinfo >= 2) { 46459 goto __2 46460 } 46461 nPhrase = *(*int32)(unsafe.Pointer(aMatchinfo)) 46462 nCol = *(*int32)(unsafe.Pointer(aMatchinfo + 1*4)) 46463 __2: 46464 ; 46465 if !(nMatchinfo != 2+3*nCol*nPhrase) { 46466 goto __3 46467 } 46468 sqlite3.Xsqlite3_result_error(tls, pCtx, 46469 ts+32050, -1) 46470 return 46471 __3: 46472 ; 46473 if !(nVal != 1+nCol) { 46474 goto __4 46475 } 46476 goto wrong_number_args 46477 __4: 46478 ; 46479 iPhrase = 0 46480 __5: 46481 if !(iPhrase < nPhrase) { 46482 goto __7 46483 } 46484 46485 aPhraseinfo = aMatchinfo + uintptr(2+iPhrase*nCol*3)*4 46486 iCol = 0 46487 __8: 46488 if !(iCol < nCol) { 46489 goto __10 46490 } 46491 nHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol)*4)) 46492 nGlobalHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol+1)*4)) 46493 weight = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(iCol+1)*8))) 46494 if !(nHitCount > 0) { 46495 goto __11 46496 } 46497 score = score + float64(nHitCount)/float64(nGlobalHitCount)*weight 46498 __11: 46499 ; 46500 goto __9 46501 __9: 46502 iCol++ 46503 goto __8 46504 goto __10 46505 __10: 46506 ; 46507 goto __6 46508 __6: 46509 iPhrase++ 46510 goto __5 46511 goto __7 46512 __7: 46513 ; 46514 sqlite3.Xsqlite3_result_double(tls, pCtx, score) 46515 return 46516 46517 wrong_number_args: 46518 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+32099, -1) 46519 } 46520 46521 func install_fts3_rank_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46522 bp := tls.Alloc(8) 46523 defer tls.Free(8) 46524 46525 if objc != 2 { 46526 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 46527 return TCL_ERROR 46528 } 46529 46530 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 46531 return TCL_ERROR 46532 } 46533 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+32144, -1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46534 f func(*libc.TLS, uintptr, int32, uintptr) 46535 }{rankfunc})), uintptr(0), uintptr(0)) 46536 return TCL_OK 46537 } 46538 46539 func Sqlitetest_func_Init(tls *libc.TLS, interp uintptr) int32 { 46540 var i int32 46541 46542 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd7))/uint64(unsafe.Sizeof(struct { 46543 FzName uintptr 46544 FxProc uintptr 46545 }{})); i++ { 46546 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd7[i].FzName, aObjCmd7[i].FxProc, uintptr(0), uintptr(0)) 46547 } 46548 sqlite3.Xsqlite3_initialize(tls) 46549 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46550 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46551 }{registerTestFunctions}))) 46552 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46553 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46554 }{Md5_Register}))) 46555 return TCL_OK 46556 } 46557 46558 var aObjCmd7 = [3]struct { 46559 FzName uintptr 46560 FxProc uintptr 46561 }{ 46562 {FzName: ts + 32149, FxProc: 0}, 46563 {FzName: ts + 32176, FxProc: 0}, 46564 {FzName: ts + 32198, FxProc: 0}, 46565 } 46566 46567 func sqlite3TestBinToHex(tls *libc.TLS, zBuf uintptr, N int32) { 46568 bp := tls.Alloc(17) 46569 defer tls.Free(17) 46570 46571 *(*[17]uint8)(unsafe.Pointer(bp)) = *(*[17]uint8)(unsafe.Pointer(ts + 32225)) 46572 var i int32 46573 var j int32 46574 var c uint8 46575 i = N * 2 46576 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = uint8(0) 46577 for j = N - 1; j >= 0; j-- { 46578 c = *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) 46579 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)&0xf))) 46580 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)>>4))) 46581 } 46582 46583 } 46584 46585 func sqlite3TestHexToBin(tls *libc.TLS, zIn uintptr, N int32, aOut uintptr) int32 { 46586 bp := tls.Alloc(256) 46587 defer tls.Free(256) 46588 46589 *(*[256]uint8)(unsafe.Pointer(bp)) = [256]uint8{ 46590 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), 46591 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), 46592 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), 46593 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), 46594 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), 46595 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), 46596 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), 46597 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), 46598 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), 46599 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), 46600 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), 46601 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), 46602 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), 46603 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), 46604 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), 46605 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), 46606 } 46607 var i int32 46608 var j int32 46609 var hi int32 = 1 46610 var c uint8 46611 46612 for i = libc.AssignInt32(&j, 0); i < N; i++ { 46613 c = *(*uint8)(unsafe.Pointer(bp + uintptr(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))))) 46614 if int32(c) == 0 { 46615 continue 46616 } 46617 if hi != 0 { 46618 *(*uint8)(unsafe.Pointer(aOut + uintptr(j))) = uint8((int32(c) - 1) << 4) 46619 hi = 0 46620 } else { 46621 *(*uint8)(unsafe.Pointer(aOut + uintptr(libc.PostIncInt32(&j, 1)))) |= uint8(int32(c) - 1) 46622 hi = 1 46623 } 46624 } 46625 return j 46626 } 46627 46628 func hexio_read(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46629 bp := tls.Alloc(48) 46630 defer tls.Free(48) 46631 46632 var got int32 46633 var zFile uintptr 46634 var zBuf uintptr 46635 var in uintptr 46636 46637 if objc != 4 { 46638 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32242) 46639 return TCL_ERROR 46640 } 46641 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 46642 return TCL_ERROR 46643 } 46644 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 46645 return TCL_ERROR 46646 } 46647 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 46648 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 44))*2+1) 46649 if zBuf == uintptr(0) { 46650 return TCL_ERROR 46651 } 46652 in = libc.Xfopen(tls, zFile, ts+4402) 46653 if in == uintptr(0) { 46654 in = libc.Xfopen(tls, zFile, ts+32262) 46655 } 46656 if in == uintptr(0) { 46657 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32264, zFile, 0)) 46658 return TCL_ERROR 46659 } 46660 libc.Xfseek(tls, in, int64(*(*int32)(unsafe.Pointer(bp + 40))), SEEK_SET) 46661 got = int32(libc.Xfread(tls, zBuf, uint64(1), uint64(*(*int32)(unsafe.Pointer(bp + 44))), in)) 46662 libc.Xfclose(tls, in) 46663 if got < 0 { 46664 got = 0 46665 } 46666 sqlite3TestBinToHex(tls, zBuf, got) 46667 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zBuf, 0)) 46668 sqlite3.Xsqlite3_free(tls, zBuf) 46669 return TCL_OK 46670 } 46671 46672 func hexio_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46673 bp := tls.Alloc(32) 46674 defer tls.Free(32) 46675 46676 var nOut int32 46677 var written int32 46678 var zFile uintptr 46679 var zIn uintptr 46680 var aOut uintptr 46681 var out uintptr 46682 46683 if objc != 4 { 46684 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32288) 46685 return TCL_ERROR 46686 } 46687 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 46688 return TCL_ERROR 46689 } 46690 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 46691 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) 46692 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp + 28))/2) 46693 if aOut == uintptr(0) { 46694 return TCL_ERROR 46695 } 46696 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp + 28)), aOut) 46697 out = libc.Xfopen(tls, zFile, ts+32312) 46698 if out == uintptr(0) { 46699 out = libc.Xfopen(tls, zFile, ts+32316) 46700 } 46701 if out == uintptr(0) { 46702 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32319, zFile, 0)) 46703 return TCL_ERROR 46704 } 46705 libc.Xfseek(tls, out, int64(*(*int32)(unsafe.Pointer(bp + 24))), SEEK_SET) 46706 written = int32(libc.Xfwrite(tls, aOut, uint64(1), uint64(nOut), out)) 46707 sqlite3.Xsqlite3_free(tls, aOut) 46708 libc.Xfclose(tls, out) 46709 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, written)) 46710 return TCL_OK 46711 } 46712 46713 func hexio_get_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46714 bp := tls.Alloc(8) 46715 defer tls.Free(8) 46716 46717 var val int32 46718 46719 var nOut int32 46720 var zIn uintptr 46721 var aOut uintptr 46722 46723 if objc != 2 { 46724 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32344) 46725 return TCL_ERROR 46726 } 46727 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 46728 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp))/2) 46729 if aOut == uintptr(0) { 46730 return TCL_ERROR 46731 } 46732 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp)), aOut) 46733 if nOut >= 4 { 46734 libc.Xmemcpy(tls, bp+4, aOut, uint64(4)) 46735 } else { 46736 libc.Xmemset(tls, bp+4, 0, uint64(unsafe.Sizeof([4]uint8{}))) 46737 libc.Xmemcpy(tls, bp+4+uintptr(4-nOut), aOut, uint64(nOut)) 46738 } 46739 sqlite3.Xsqlite3_free(tls, aOut) 46740 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))) 46741 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, val)) 46742 return TCL_OK 46743 } 46744 46745 func hexio_render_int16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46746 bp := tls.Alloc(14) 46747 defer tls.Free(14) 46748 46749 if objc != 2 { 46750 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 46751 return TCL_ERROR 46752 } 46753 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 46754 return TCL_ERROR 46755 } 46756 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 46757 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp))) 46758 sqlite3TestBinToHex(tls, bp+4, 2) 46759 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 4)) 46760 return TCL_OK 46761 } 46762 46763 func hexio_render_int32(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46764 bp := tls.Alloc(14) 46765 defer tls.Free(14) 46766 46767 if objc != 2 { 46768 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 46769 return TCL_ERROR 46770 } 46771 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 46772 return TCL_ERROR 46773 } 46774 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 24) 46775 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 16) 46776 *(*uint8)(unsafe.Pointer(bp + 4 + 2)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 46777 *(*uint8)(unsafe.Pointer(bp + 4 + 3)) = uint8(*(*int32)(unsafe.Pointer(bp))) 46778 sqlite3TestBinToHex(tls, bp+4, 4) 46779 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 8)) 46780 return TCL_OK 46781 } 46782 46783 func utf8_to_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46784 bp := tls.Alloc(16) 46785 defer tls.Free(16) 46786 46787 tcl.XTcl_AppendResult(tls, interp, 46788 libc.VaList(bp, ts+32352, 0)) 46789 return TCL_ERROR 46790 } 46791 46792 func getFts3Varint(tls *libc.TLS, p uintptr, v uintptr) int32 { 46793 var q uintptr = p 46794 var x sqlite_uint64 = uint64(0) 46795 var y sqlite_uint64 = uint64(1) 46796 for int32(*(*uint8)(unsafe.Pointer(q)))&0x80 == 0x80 { 46797 x = x + y*sqlite_uint64(int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))))&0x7f) 46798 y <<= 7 46799 } 46800 x = x + y*sqlite_uint64(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1)))) 46801 *(*sqlite_int64)(unsafe.Pointer(v)) = sqlite_int64(x) 46802 return int32((int64(q) - int64(p)) / 1) 46803 } 46804 46805 func putFts3Varint(tls *libc.TLS, p uintptr, v sqlite_int64) int32 { 46806 var q uintptr = p 46807 var vu sqlite_uint64 = sqlite_uint64(v) 46808 for __ccgo := true; __ccgo; __ccgo = vu != uint64(0) { 46809 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))) = uint8(vu&uint64(0x7f) | uint64(0x80)) 46810 vu >>= 7 46811 } 46812 *(*uint8)(unsafe.Pointer(q + libc.UintptrFromInt32(-1))) &= uint8(0x7f) 46813 46814 return int32((int64(q) - int64(p)) / 1) 46815 } 46816 46817 func read_fts3varint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46818 bp := tls.Alloc(16) 46819 defer tls.Free(16) 46820 46821 var zBlob uintptr 46822 46823 var nVal int32 46824 46825 if objc != 3 { 46826 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32406) 46827 return TCL_ERROR 46828 } 46829 zBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 46830 46831 nVal = getFts3Varint(tls, zBlob, bp+8) 46832 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))), 0) 46833 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nVal)) 46834 return TCL_OK 46835 } 46836 46837 func make_fts3record(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46838 bp := tls.Alloc(28) 46839 defer tls.Free(28) 46840 46841 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 46842 *(*int32)(unsafe.Pointer(bp)) = 0 46843 var aOut uintptr = uintptr(0) 46844 var nOut int32 = 0 46845 var nAlloc int32 = 0 46846 var i int32 46847 46848 if objc != 2 { 46849 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32419) 46850 return TCL_ERROR 46851 } 46852 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 46853 return TCL_ERROR 46854 } 46855 46856 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 46857 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+16) { 46858 if nOut+10 > nAlloc { 46859 var nNew int32 46860 if nAlloc != 0 { 46861 nNew = nAlloc * 2 46862 } else { 46863 nNew = 128 46864 } 46865 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 46866 if aNew == uintptr(0) { 46867 sqlite3.Xsqlite3_free(tls, aOut) 46868 return TCL_ERROR 46869 } 46870 aOut = aNew 46871 nAlloc = nNew 46872 } 46873 nOut = nOut + putFts3Varint(tls, aOut+uintptr(nOut), *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 46874 } else { 46875 *(*int32)(unsafe.Pointer(bp + 24)) = 0 46876 var zVal uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+24) 46877 for nOut+*(*int32)(unsafe.Pointer(bp + 24)) > nAlloc { 46878 var nNew int32 46879 if nAlloc != 0 { 46880 nNew = nAlloc * 2 46881 } else { 46882 nNew = 128 46883 } 46884 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 46885 if aNew == uintptr(0) { 46886 sqlite3.Xsqlite3_free(tls, aOut) 46887 return TCL_ERROR 46888 } 46889 aOut = aNew 46890 nAlloc = nNew 46891 } 46892 libc.Xmemcpy(tls, aOut+uintptr(nOut), zVal, uint64(*(*int32)(unsafe.Pointer(bp + 24)))) 46893 nOut = nOut + *(*int32)(unsafe.Pointer(bp + 24)) 46894 } 46895 } 46896 46897 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, aOut, nOut)) 46898 sqlite3.Xsqlite3_free(tls, aOut) 46899 return TCL_OK 46900 } 46901 46902 func Sqlitetest_hexio_Init(tls *libc.TLS, interp uintptr) int32 { 46903 var i int32 46904 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd8))/uint64(unsafe.Sizeof(struct { 46905 FzName uintptr 46906 FxProc uintptr 46907 }{})); i++ { 46908 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd8[i].FzName, aObjCmd8[i].FxProc, uintptr(0), uintptr(0)) 46909 } 46910 return TCL_OK 46911 } 46912 46913 var aObjCmd8 = [8]struct { 46914 FzName uintptr 46915 FxProc uintptr 46916 }{ 46917 {FzName: ts + 32424, FxProc: 0}, 46918 {FzName: ts + 32435, FxProc: 0}, 46919 {FzName: ts + 32447, FxProc: 0}, 46920 {FzName: ts + 32461, FxProc: 0}, 46921 {FzName: ts + 32480, FxProc: 0}, 46922 {FzName: ts + 32499, FxProc: 0}, 46923 {FzName: ts + 32512, FxProc: 0}, 46924 {FzName: ts + 32528, FxProc: 0}, 46925 } 46926 46927 type Wrapped = struct { 46928 Fpcache sqlite3_pcache_methods2 46929 Fmem sqlite3_mem_methods 46930 Fmutex sqlite3_mutex_methods 46931 Fmem_init int32 46932 Fmem_fail int32 46933 Fmutex_init int32 46934 Fmutex_fail int32 46935 Fpcache_init int32 46936 Fpcache_fail int32 46937 } 46938 46939 var wrapped Wrapped 46940 46941 func wrMemInit(tls *libc.TLS, pAppData uintptr) int32 { 46942 var rc int32 46943 if wrapped.Fmem_fail != 0 { 46944 rc = SQLITE_ERROR 46945 } else { 46946 rc = (*struct { 46947 f func(*libc.TLS, uintptr) int32 46948 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxInit})).f(tls, wrapped.Fmem.FpAppData) 46949 } 46950 if rc == SQLITE_OK { 46951 wrapped.Fmem_init = 1 46952 } 46953 return rc 46954 } 46955 46956 func wrMemShutdown(tls *libc.TLS, pAppData uintptr) { 46957 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxShutdown})).f(tls, wrapped.Fmem.FpAppData) 46958 wrapped.Fmem_init = 0 46959 } 46960 46961 func wrMemMalloc(tls *libc.TLS, n int32) uintptr { 46962 return (*struct { 46963 f func(*libc.TLS, int32) uintptr 46964 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxMalloc})).f(tls, n) 46965 } 46966 46967 func wrMemFree(tls *libc.TLS, p uintptr) { 46968 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxFree})).f(tls, p) 46969 } 46970 46971 func wrMemRealloc(tls *libc.TLS, p uintptr, n int32) uintptr { 46972 return (*struct { 46973 f func(*libc.TLS, uintptr, int32) uintptr 46974 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRealloc})).f(tls, p, n) 46975 } 46976 46977 func wrMemSize(tls *libc.TLS, p uintptr) int32 { 46978 return (*struct { 46979 f func(*libc.TLS, uintptr) int32 46980 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxSize})).f(tls, p) 46981 } 46982 46983 func wrMemRoundup(tls *libc.TLS, n int32) int32 { 46984 return (*struct{ f func(*libc.TLS, int32) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRoundup})).f(tls, n) 46985 } 46986 46987 func wrMutexInit(tls *libc.TLS) int32 { 46988 var rc int32 46989 if wrapped.Fmutex_fail != 0 { 46990 rc = SQLITE_ERROR 46991 } else { 46992 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexInit})).f(tls) 46993 } 46994 if rc == SQLITE_OK { 46995 wrapped.Fmutex_init = 1 46996 } 46997 return rc 46998 } 46999 47000 func wrMutexEnd(tls *libc.TLS) int32 { 47001 (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnd})).f(tls) 47002 wrapped.Fmutex_init = 0 47003 return SQLITE_OK 47004 } 47005 47006 func wrMutexAlloc(tls *libc.TLS, e int32) uintptr { 47007 return (*struct { 47008 f func(*libc.TLS, int32) uintptr 47009 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexAlloc})).f(tls, e) 47010 } 47011 47012 func wrMutexFree(tls *libc.TLS, p uintptr) { 47013 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexFree})).f(tls, p) 47014 } 47015 47016 func wrMutexEnter(tls *libc.TLS, p uintptr) { 47017 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnter})).f(tls, p) 47018 } 47019 47020 func wrMutexTry(tls *libc.TLS, p uintptr) int32 { 47021 return (*struct { 47022 f func(*libc.TLS, uintptr) int32 47023 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexTry})).f(tls, p) 47024 } 47025 47026 func wrMutexLeave(tls *libc.TLS, p uintptr) { 47027 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexLeave})).f(tls, p) 47028 } 47029 47030 func wrMutexHeld(tls *libc.TLS, p uintptr) int32 { 47031 return (*struct { 47032 f func(*libc.TLS, uintptr) int32 47033 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexHeld})).f(tls, p) 47034 } 47035 47036 func wrMutexNotheld(tls *libc.TLS, p uintptr) int32 { 47037 return (*struct { 47038 f func(*libc.TLS, uintptr) int32 47039 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexNotheld})).f(tls, p) 47040 } 47041 47042 func wrPCacheInit(tls *libc.TLS, pArg uintptr) int32 { 47043 var rc int32 47044 if wrapped.Fpcache_fail != 0 { 47045 rc = SQLITE_ERROR 47046 } else { 47047 rc = (*struct { 47048 f func(*libc.TLS, uintptr) int32 47049 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxInit})).f(tls, wrapped.Fpcache.FpArg) 47050 } 47051 if rc == SQLITE_OK { 47052 wrapped.Fpcache_init = 1 47053 } 47054 return rc 47055 } 47056 47057 func wrPCacheShutdown(tls *libc.TLS, pArg uintptr) { 47058 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxShutdown})).f(tls, wrapped.Fpcache.FpArg) 47059 wrapped.Fpcache_init = 0 47060 } 47061 47062 func wrPCacheCreate(tls *libc.TLS, a int32, b int32, c int32) uintptr { 47063 return (*struct { 47064 f func(*libc.TLS, int32, int32, int32) uintptr 47065 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCreate})).f(tls, a, b, c) 47066 } 47067 47068 func wrPCacheCachesize(tls *libc.TLS, p uintptr, n int32) { 47069 (*struct { 47070 f func(*libc.TLS, uintptr, int32) 47071 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCachesize})).f(tls, p, n) 47072 } 47073 47074 func wrPCachePagecount(tls *libc.TLS, p uintptr) int32 { 47075 return (*struct { 47076 f func(*libc.TLS, uintptr) int32 47077 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxPagecount})).f(tls, p) 47078 } 47079 47080 func wrPCacheFetch(tls *libc.TLS, p uintptr, a uint32, b int32) uintptr { 47081 return (*struct { 47082 f func(*libc.TLS, uintptr, uint32, int32) uintptr 47083 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxFetch})).f(tls, p, a, b) 47084 } 47085 47086 func wrPCacheUnpin(tls *libc.TLS, p uintptr, a uintptr, b int32) { 47087 (*struct { 47088 f func(*libc.TLS, uintptr, uintptr, int32) 47089 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxUnpin})).f(tls, p, a, b) 47090 } 47091 47092 func wrPCacheRekey(tls *libc.TLS, p uintptr, a uintptr, b uint32, c uint32) { 47093 (*struct { 47094 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 47095 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxRekey})).f(tls, p, a, b, c) 47096 } 47097 47098 func wrPCacheTruncate(tls *libc.TLS, p uintptr, a uint32) { 47099 (*struct { 47100 f func(*libc.TLS, uintptr, uint32) 47101 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxTruncate})).f(tls, p, a) 47102 } 47103 47104 func wrPCacheDestroy(tls *libc.TLS, p uintptr) { 47105 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxDestroy})).f(tls, p) 47106 } 47107 47108 func installInitWrappers(tls *libc.TLS) { 47109 bp := tls.Alloc(288) 47110 defer tls.Free(288) 47111 47112 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 48)) = sqlite3_mutex_methods{ 47113 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 { 47114 f func(*libc.TLS, int32) uintptr 47115 }{wrMutexAlloc})), 47116 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 { 47117 f func(*libc.TLS, uintptr) int32 47118 }{wrMutexTry})), 47119 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexLeave})), FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 47120 f func(*libc.TLS, uintptr) int32 47121 }{wrMutexHeld})), FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 47122 f func(*libc.TLS, uintptr) int32 47123 }{wrMutexNotheld})), 47124 } 47125 *(*sqlite3_pcache_methods2)(unsafe.Pointer(bp + 184)) = sqlite3_pcache_methods2{ 47126 FiVersion: 1, 47127 FxInit: *(*uintptr)(unsafe.Pointer(&struct { 47128 f func(*libc.TLS, uintptr) int32 47129 }{wrPCacheInit})), FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheShutdown})), FxCreate: *(*uintptr)(unsafe.Pointer(&struct { 47130 f func(*libc.TLS, int32, int32, int32) uintptr 47131 }{wrPCacheCreate})), 47132 FxCachesize: *(*uintptr)(unsafe.Pointer(&struct { 47133 f func(*libc.TLS, uintptr, int32) 47134 }{wrPCacheCachesize})), FxPagecount: *(*uintptr)(unsafe.Pointer(&struct { 47135 f func(*libc.TLS, uintptr) int32 47136 }{wrPCachePagecount})), FxFetch: *(*uintptr)(unsafe.Pointer(&struct { 47137 f func(*libc.TLS, uintptr, uint32, int32) uintptr 47138 }{wrPCacheFetch})), 47139 FxUnpin: *(*uintptr)(unsafe.Pointer(&struct { 47140 f func(*libc.TLS, uintptr, uintptr, int32) 47141 }{wrPCacheUnpin})), FxRekey: *(*uintptr)(unsafe.Pointer(&struct { 47142 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 47143 }{wrPCacheRekey})), FxTruncate: *(*uintptr)(unsafe.Pointer(&struct { 47144 f func(*libc.TLS, uintptr, uint32) 47145 }{wrPCacheTruncate})), 47146 FxDestroy: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheDestroy})), 47147 } 47148 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 120)) = sqlite3_mem_methods{ 47149 FxMalloc: *(*uintptr)(unsafe.Pointer(&struct { 47150 f func(*libc.TLS, int32) uintptr 47151 }{wrMemMalloc})), FxFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemFree})), FxRealloc: *(*uintptr)(unsafe.Pointer(&struct { 47152 f func(*libc.TLS, uintptr, int32) uintptr 47153 }{wrMemRealloc})), 47154 FxSize: *(*uintptr)(unsafe.Pointer(&struct { 47155 f func(*libc.TLS, uintptr) int32 47156 }{wrMemSize})), FxRoundup: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{wrMemRoundup})), FxInit: *(*uintptr)(unsafe.Pointer(&struct { 47157 f func(*libc.TLS, uintptr) int32 47158 }{wrMemInit})), 47159 FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemShutdown})), 47160 } 47161 47162 libc.Xmemset(tls, uintptr(unsafe.Pointer(&wrapped)), 0, uint64(unsafe.Sizeof(wrapped))) 47163 47164 sqlite3.Xsqlite3_shutdown(tls) 47165 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 47166 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 47167 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 47168 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+24, bp+48)) 47169 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+120)) 47170 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+40, bp+184)) 47171 } 47172 47173 func init_wrapper_install(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47174 bp := tls.Alloc(24) 47175 defer tls.Free(24) 47176 47177 var i int32 47178 installInitWrappers(tls) 47179 for i = 1; i < objc; i++ { 47180 var z uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 47181 if libc.Xstrcmp(tls, z, ts+32544) == 0 { 47182 wrapped.Fmem_fail = 1 47183 } else if libc.Xstrcmp(tls, z, ts+29150) == 0 { 47184 wrapped.Fmutex_fail = 1 47185 } else if libc.Xstrcmp(tls, z, ts+32548) == 0 { 47186 wrapped.Fpcache_fail = 1 47187 } else { 47188 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32555, z, ts+11945)) 47189 return TCL_ERROR 47190 } 47191 } 47192 return TCL_OK 47193 } 47194 47195 func init_wrapper_uninstall(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47196 bp := tls.Alloc(24) 47197 defer tls.Free(24) 47198 47199 if objc != 1 { 47200 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47201 return TCL_ERROR 47202 } 47203 47204 sqlite3.Xsqlite3_shutdown(tls) 47205 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 47206 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 47207 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 47208 return TCL_OK 47209 } 47210 47211 func init_wrapper_clear(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47212 if objc != 1 { 47213 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47214 return TCL_ERROR 47215 } 47216 47217 wrapped.Fmem_fail = 0 47218 wrapped.Fmutex_fail = 0 47219 wrapped.Fpcache_fail = 0 47220 return TCL_OK 47221 } 47222 47223 func init_wrapper_query(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47224 var pRet uintptr 47225 47226 if objc != 1 { 47227 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47228 return TCL_ERROR 47229 } 47230 47231 pRet = tcl.XTcl_NewObj(tls) 47232 if wrapped.Fmutex_init != 0 { 47233 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+29150, -1)) 47234 } 47235 if wrapped.Fmem_init != 0 { 47236 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32544, -1)) 47237 } 47238 if wrapped.Fpcache_init != 0 { 47239 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32548, -1)) 47240 } 47241 47242 tcl.XTcl_SetObjResult(tls, interp, pRet) 47243 return TCL_OK 47244 } 47245 47246 func Sqlitetest_init_Init(tls *libc.TLS, interp uintptr) int32 { 47247 var i int32 47248 47249 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd9))/uint64(unsafe.Sizeof(struct { 47250 FzName uintptr 47251 FxProc uintptr 47252 }{})); i++ { 47253 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd9[i].FzName, aObjCmd9[i].FxProc, uintptr(0), uintptr(0)) 47254 } 47255 47256 return TCL_OK 47257 } 47258 47259 var aObjCmd9 = [4]struct { 47260 FzName uintptr 47261 FxProc uintptr 47262 }{ 47263 {FzName: ts + 32575, FxProc: 0}, 47264 {FzName: ts + 32596, FxProc: 0}, 47265 {FzName: ts + 32615, FxProc: 0}, 47266 {FzName: ts + 32638, FxProc: 0}, 47267 } 47268 47269 type sqlite3_intarray1 = struct { 47270 Fn int32 47271 F__ccgo_pad1 [4]byte 47272 Fa uintptr 47273 FxFree uintptr 47274 } 47275 47276 type sqlite3_intarray = sqlite3_intarray1 47277 47278 type intarray_vtab1 = struct { 47279 Fbase sqlite3_vtab 47280 FpContent uintptr 47281 } 47282 47283 type intarray_vtab = intarray_vtab1 47284 type intarray_cursor1 = struct { 47285 Fbase sqlite3_vtab_cursor 47286 Fi int32 47287 F__ccgo_pad1 [4]byte 47288 } 47289 47290 type intarray_cursor = intarray_cursor1 47291 47292 func intarrayFree(tls *libc.TLS, p uintptr) { 47293 if (*sqlite3_intarray)(unsafe.Pointer(p)).FxFree != 0 { 47294 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(p)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(p)).Fa) 47295 } 47296 sqlite3.Xsqlite3_free(tls, p) 47297 } 47298 47299 func intarrayDestroy(tls *libc.TLS, p uintptr) int32 { 47300 var pVtab uintptr = p 47301 sqlite3.Xsqlite3_free(tls, pVtab) 47302 return 0 47303 } 47304 47305 func intarrayCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 47306 var rc int32 = SQLITE_NOMEM 47307 var pVtab uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_vtab{}))) 47308 47309 if pVtab != 0 { 47310 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(intarray_vtab{}))) 47311 (*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent = pAux 47312 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+32657) 47313 } 47314 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 47315 return rc 47316 } 47317 47318 func intarrayOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 47319 var rc int32 = SQLITE_NOMEM 47320 var pCur uintptr 47321 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_cursor{}))) 47322 if pCur != 0 { 47323 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(intarray_cursor{}))) 47324 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 47325 rc = SQLITE_OK 47326 } 47327 return rc 47328 } 47329 47330 func intarrayClose(tls *libc.TLS, cur uintptr) int32 { 47331 var pCur uintptr = cur 47332 sqlite3.Xsqlite3_free(tls, pCur) 47333 return SQLITE_OK 47334 } 47335 47336 func intarrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 47337 var pCur uintptr = cur 47338 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 47339 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 { 47340 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))) 47341 } 47342 return SQLITE_OK 47343 } 47344 47345 func intarrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 47346 var pCur uintptr = cur 47347 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*intarray_cursor)(unsafe.Pointer(pCur)).Fi) 47348 return SQLITE_OK 47349 } 47350 47351 func intarrayEof(tls *libc.TLS, cur uintptr) int32 { 47352 var pCur uintptr = cur 47353 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 47354 return libc.Bool32((*intarray_cursor)(unsafe.Pointer(pCur)).Fi >= (*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fn) 47355 } 47356 47357 func intarrayNext(tls *libc.TLS, cur uintptr) int32 { 47358 var pCur uintptr = cur 47359 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi++ 47360 return SQLITE_OK 47361 } 47362 47363 func intarrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 47364 var pCur uintptr = pVtabCursor 47365 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi = 0 47366 return SQLITE_OK 47367 } 47368 47369 func intarrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 47370 return SQLITE_OK 47371 } 47372 47373 var intarrayModule = sqlite3_module{ 47374 FxCreate: 0, 47375 FxConnect: 0, 47376 FxBestIndex: 0, 47377 FxDisconnect: 0, 47378 FxDestroy: 0, 47379 FxOpen: 0, 47380 FxClose: 0, 47381 FxFilter: 0, 47382 FxNext: 0, 47383 FxEof: 0, 47384 FxColumn: 0, 47385 FxRowid: 0, 47386 } 47387 47388 func sqlite3_intarray_create(tls *libc.TLS, db uintptr, zName uintptr, ppReturn uintptr) int32 { 47389 bp := tls.Alloc(16) 47390 defer tls.Free(16) 47391 47392 var rc int32 = SQLITE_OK 47393 var p uintptr 47394 47395 *(*uintptr)(unsafe.Pointer(ppReturn)) = libc.AssignUintptr(&p, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_intarray{})))) 47396 if p == uintptr(0) { 47397 return SQLITE_NOMEM 47398 } 47399 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(sqlite3_intarray{}))) 47400 rc = sqlite3.Xsqlite3_create_module_v2(tls, db, zName, uintptr(unsafe.Pointer(&intarrayModule)), p, 47401 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{intarrayFree}))) 47402 if rc == SQLITE_OK { 47403 var zSql uintptr 47404 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+32699, 47405 libc.VaList(bp, zName, zName)) 47406 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 47407 sqlite3.Xsqlite3_free(tls, zSql) 47408 } 47409 return rc 47410 } 47411 47412 func sqlite3_intarray_bind(tls *libc.TLS, pIntArray uintptr, nElements int32, aElements uintptr, xFree uintptr) int32 { 47413 if (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree != 0 { 47414 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa) 47415 } 47416 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fn = nElements 47417 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa = aElements 47418 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree = xFree 47419 return SQLITE_OK 47420 } 47421 47422 func test_intarray_create(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47423 bp := tls.Alloc(148) 47424 defer tls.Free(148) 47425 47426 var zName uintptr 47427 47428 var rc int32 = SQLITE_OK 47429 47430 if objc != 3 { 47431 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 47432 return TCL_ERROR 47433 } 47434 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 47435 return TCL_ERROR 47436 } 47437 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 47438 rc = sqlite3_intarray_create(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, bp+40) 47439 if rc != SQLITE_OK { 47440 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 47441 return TCL_ERROR 47442 } 47443 sqlite3TestMakePointerStr(tls, interp, bp+48, *(*uintptr)(unsafe.Pointer(bp + 40))) 47444 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, bp+48, uintptr(0))) 47445 return TCL_OK 47446 } 47447 47448 func test_intarray_bind(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47449 bp := tls.Alloc(40) 47450 defer tls.Free(40) 47451 47452 var pArray uintptr 47453 var rc int32 = SQLITE_OK 47454 var i int32 47455 var n int32 47456 var a uintptr 47457 47458 if objc < 2 { 47459 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32737) 47460 return TCL_ERROR 47461 } 47462 pArray = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 47463 n = objc - 2 47464 a = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(n)) 47465 if a == uintptr(0) { 47466 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32746, uintptr(0))) 47467 return TCL_ERROR 47468 } 47469 for i = 0; i < n; i++ { 47470 *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) = int64(0) 47471 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + uintptr(i+2)*8)), bp+32) 47472 *(*sqlite3_int64)(unsafe.Pointer(a + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) 47473 } 47474 rc = sqlite3_intarray_bind(tls, pArray, n, a, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47475 if rc != SQLITE_OK { 47476 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 47477 return TCL_ERROR 47478 } 47479 return TCL_OK 47480 } 47481 47482 func Sqlitetestintarray_Init(tls *libc.TLS, interp uintptr) int32 { 47483 var i int32 47484 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd10))/uint64(unsafe.Sizeof(struct { 47485 FzName uintptr 47486 FxProc uintptr 47487 FclientData uintptr 47488 }{})); i++ { 47489 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd10[i].FzName, 47490 aObjCmd10[i].FxProc, aObjCmd10[i].FclientData, uintptr(0)) 47491 } 47492 return TCL_OK 47493 } 47494 47495 var aObjCmd10 = [2]struct { 47496 FzName uintptr 47497 FxProc uintptr 47498 FclientData uintptr 47499 }{ 47500 {FzName: ts + 32759, FxProc: 0}, 47501 {FzName: ts + 32783, FxProc: 0}, 47502 } 47503 47504 type jt_file1 = struct { 47505 Fbase sqlite3_file 47506 FzName uintptr 47507 Fflags int32 47508 FeLock int32 47509 FnPage u32 47510 FnPagesize u32 47511 FpWritable uintptr 47512 FaCksum uintptr 47513 FnSync int32 47514 F__ccgo_pad1 [4]byte 47515 FiMaxOff sqlite3_int64 47516 FpNext uintptr 47517 FpReal uintptr 47518 } 47519 47520 type jt_file = jt_file1 47521 47522 var jt_vfs = sqlite3_vfs{ 47523 FiVersion: 2, 47524 FszOsFile: int32(unsafe.Sizeof(jt_file{})), 47525 FmxPathname: JT_MAX_PATHNAME, 47526 FzName: ts + 32805, 47527 FxOpen: 0, 47528 FxDelete: 0, 47529 FxAccess: 0, 47530 FxFullPathname: 0, 47531 FxDlOpen: 0, 47532 FxDlError: 0, 47533 FxDlSym: 0, 47534 FxDlClose: 0, 47535 FxRandomness: 0, 47536 FxSleep: 0, 47537 FxCurrentTime: 0, 47538 FxGetLastError: 0, 47539 FxCurrentTimeInt64: 0, 47540 } 47541 47542 var jt_io_methods = sqlite3_io_methods{ 47543 FiVersion: 1, 47544 FxClose: 0, 47545 FxRead: 0, 47546 FxWrite: 0, 47547 FxTruncate: 0, 47548 FxSync: 0, 47549 FxFileSize: 0, 47550 FxLock: 0, 47551 FxUnlock: 0, 47552 FxCheckReservedLock: 0, 47553 FxFileControl: 0, 47554 FxSectorSize: 0, 47555 FxDeviceCharacteristics: 0, 47556 } 47557 47558 type JtGlobal = struct { 47559 FpVfs uintptr 47560 FpList uintptr 47561 } 47562 47563 var g2 = JtGlobal{} 47564 47565 func enterJtMutex(tls *libc.TLS) { 47566 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 47567 } 47568 47569 func leaveJtMutex(tls *libc.TLS) { 47570 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 47571 } 47572 47573 func stop_ioerr_simulation(tls *libc.TLS, piSave uintptr, piSave2 uintptr) { 47574 *(*int32)(unsafe.Pointer(piSave)) = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 47575 *(*int32)(unsafe.Pointer(piSave2)) = sqlite3.Xsqlite3_io_error_hit 47576 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(-1)) 47577 sqlite3.Xsqlite3_io_error_hit = 0 47578 } 47579 47580 func start_ioerr_simulation(tls *libc.TLS, iSave int32, iSave2 int32) { 47581 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, iSave) 47582 sqlite3.Xsqlite3_io_error_hit = iSave2 47583 } 47584 47585 func closeTransaction(tls *libc.TLS, p uintptr) { 47586 sqlite3.Xsqlite3BitvecDestroy(tls, (*jt_file)(unsafe.Pointer(p)).FpWritable) 47587 sqlite3.Xsqlite3_free(tls, (*jt_file)(unsafe.Pointer(p)).FaCksum) 47588 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 47589 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 47590 (*jt_file)(unsafe.Pointer(p)).FnSync = 0 47591 } 47592 47593 func jtClose(tls *libc.TLS, pFile uintptr) int32 { 47594 var pp uintptr 47595 var p uintptr = pFile 47596 47597 closeTransaction(tls, p) 47598 enterJtMutex(tls) 47599 if (*jt_file)(unsafe.Pointer(p)).FzName != 0 { 47600 for pp = uintptr(unsafe.Pointer(&g2)) + 8; *(*uintptr)(unsafe.Pointer(pp)) != p; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 47601 } 47602 *(*uintptr)(unsafe.Pointer(pp)) = (*jt_file)(unsafe.Pointer(p)).FpNext 47603 } 47604 leaveJtMutex(tls) 47605 sqlite3.Xsqlite3OsClose(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 47606 return SQLITE_OK 47607 } 47608 47609 func jtRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 47610 var p uintptr = pFile 47611 return sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 47612 } 47613 47614 func locateDatabaseHandle(tls *libc.TLS, zJournal uintptr, noLock int32) uintptr { 47615 var pMain uintptr = uintptr(0) 47616 enterJtMutex(tls) 47617 for pMain = g2.FpList; pMain != 0; pMain = (*jt_file)(unsafe.Pointer(pMain)).FpNext { 47618 var nName int32 = int32(libc.Xstrlen(tls, zJournal) - libc.Xstrlen(tls, ts+32808)) 47619 if (*jt_file)(unsafe.Pointer(pMain)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && 47620 int32(libc.Xstrlen(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName)) == nName && 47621 0 == libc.Xmemcmp(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName, zJournal, uint64(nName)) && 47622 ((*jt_file)(unsafe.Pointer(pMain)).FeLock >= SQLITE_LOCK_RESERVED || noLock != 0) { 47623 break 47624 } 47625 } 47626 leaveJtMutex(tls) 47627 return pMain 47628 } 47629 47630 func decodeUint32(tls *libc.TLS, z uintptr) u32 { 47631 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)))) 47632 } 47633 47634 func genCksum(tls *libc.TLS, z uintptr, n int32) u32 { 47635 var i int32 47636 var cksum u32 = u32(0) 47637 for i = 0; i < n; i++ { 47638 cksum = cksum + u32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) + cksum<<3 47639 } 47640 return cksum 47641 } 47642 47643 func decodeJournalHdr(tls *libc.TLS, zBuf uintptr, pnRec uintptr, pnPage uintptr, pnSector uintptr, pnPagesize uintptr) int32 { 47644 bp := tls.Alloc(8) 47645 defer tls.Free(8) 47646 47647 *(*[8]uint8)(unsafe.Pointer(bp)) = [8]uint8{uint8(0xd9), uint8(0xd5), uint8(0x05), uint8(0xf9), uint8(0x20), uint8(0xa1), uint8(0x63), uint8(0xd7)} 47648 if libc.Xmemcmp(tls, bp, zBuf, uint64(8)) != 0 { 47649 return SQLITE_ERROR 47650 } 47651 if pnRec != 0 { 47652 *(*u32)(unsafe.Pointer(pnRec)) = decodeUint32(tls, zBuf+8) 47653 } 47654 if pnPage != 0 { 47655 *(*u32)(unsafe.Pointer(pnPage)) = decodeUint32(tls, zBuf+16) 47656 } 47657 if pnSector != 0 { 47658 *(*u32)(unsafe.Pointer(pnSector)) = decodeUint32(tls, zBuf+20) 47659 } 47660 if pnPagesize != 0 { 47661 *(*u32)(unsafe.Pointer(pnPagesize)) = decodeUint32(tls, zBuf+24) 47662 } 47663 return SQLITE_OK 47664 } 47665 47666 func openTransaction(tls *libc.TLS, pMain uintptr, pJournal uintptr) int32 { 47667 bp := tls.Alloc(8) 47668 defer tls.Free(8) 47669 47670 var aData uintptr 47671 var p uintptr = (*jt_file)(unsafe.Pointer(pMain)).FpReal 47672 var rc int32 = SQLITE_OK 47673 47674 closeTransaction(tls, pMain) 47675 aData = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 47676 (*jt_file)(unsafe.Pointer(pMain)).FpWritable = sqlite3.Xsqlite3BitvecCreate(tls, (*jt_file)(unsafe.Pointer(pMain)).FnPage) 47677 (*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)))) 47678 (*jt_file)(unsafe.Pointer(pJournal)).FiMaxOff = int64(0) 47679 47680 if !(int32((*jt_file)(unsafe.Pointer(pMain)).FpWritable) != 0) || !(int32((*jt_file)(unsafe.Pointer(pMain)).FaCksum) != 0) || !(aData != 0) { 47681 rc = SQLITE_IOERR | int32(12)<<8 47682 } else if (*jt_file)(unsafe.Pointer(pMain)).FnPage > u32(0) { 47683 var iTrunk u32 47684 47685 stop_ioerr_simulation(tls, bp, bp+4) 47686 47687 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), int64(0)) 47688 if rc == SQLITE_OK { 47689 var nDbsize u32 = decodeUint32(tls, aData+28) 47690 if nDbsize > u32(0) && libc.Xmemcmp(tls, aData+24, aData+92, uint64(4)) == 0 { 47691 var iPg u32 47692 for iPg = nDbsize + u32(1); iPg <= (*jt_file)(unsafe.Pointer(pMain)).FnPage; iPg++ { 47693 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, iPg) 47694 } 47695 } 47696 } 47697 iTrunk = decodeUint32(tls, aData+32) 47698 for rc == SQLITE_OK && iTrunk > u32(0) { 47699 var nLeaf u32 47700 var iLeaf u32 47701 var iOff sqlite3_int64 = i64(iTrunk-u32(1)) * i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 47702 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 47703 nLeaf = decodeUint32(tls, aData+4) 47704 for iLeaf = u32(0); rc == SQLITE_OK && iLeaf < nLeaf; iLeaf++ { 47705 var pgno u32 = decodeUint32(tls, aData+uintptr(u32(8)+u32(4)*iLeaf)) 47706 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 47707 } 47708 iTrunk = decodeUint32(tls, aData) 47709 } 47710 47711 if rc == SQLITE_OK { 47712 var ii int32 47713 for ii = 0; rc == SQLITE_OK && ii < int32((*jt_file)(unsafe.Pointer(pMain)).FnPage); ii++ { 47714 var iOff i64 = i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) * i64(ii) 47715 if iOff == i64(sqlite3.Xsqlite3PendingByte) { 47716 continue 47717 } 47718 rc = sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(pMain)).FpReal, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 47719 *(*u32)(unsafe.Pointer((*jt_file)(unsafe.Pointer(pMain)).FaCksum + uintptr(ii)*4)) = genCksum(tls, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 47720 if ii+1 == int32((*jt_file)(unsafe.Pointer(pMain)).FnPage) && rc == SQLITE_IOERR|int32(2)<<8 { 47721 rc = SQLITE_OK 47722 } 47723 } 47724 } 47725 47726 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 47727 } 47728 47729 sqlite3.Xsqlite3_free(tls, aData) 47730 return rc 47731 } 47732 47733 func readJournalFile(tls *libc.TLS, p uintptr, pMain uintptr) int32 { 47734 bp := tls.Alloc(52) 47735 defer tls.Free(52) 47736 47737 var rc int32 47738 47739 var pReal uintptr 47740 var iOff sqlite3_int64 47741 var iSize sqlite3_int64 47742 var aPage uintptr 47743 47744 var cksum u32 47745 _ = cksum 47746 var pgno u32 47747 47748 var ii u32 47749 rc = SQLITE_OK 47750 pReal = (*jt_file)(unsafe.Pointer(p)).FpReal 47751 iOff = int64(0) 47752 iSize = (*jt_file)(unsafe.Pointer(p)).FiMaxOff 47753 47754 aPage = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 47755 if !!(aPage != 0) { 47756 goto __1 47757 } 47758 return SQLITE_IOERR | int32(12)<<8 47759 __1: 47760 ; 47761 stop_ioerr_simulation(tls, bp, bp+4) 47762 47763 __2: 47764 if !(rc == SQLITE_OK && iOff < iSize) { 47765 goto __3 47766 } 47767 47768 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 47769 if !(rc != SQLITE_OK || 47770 decodeJournalHdr(tls, bp+8, bp+36, bp+40, bp+44, bp+48) != 0) { 47771 goto __4 47772 } 47773 goto finish_rjf 47774 __4: 47775 ; 47776 iOff = iOff + sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) 47777 47778 if !(*(*u32)(unsafe.Pointer(bp + 36)) == u32(0)) { 47779 goto __5 47780 } 47781 47782 if !(iSize >= iOff+sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44)))) { 47783 goto __6 47784 } 47785 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 47786 if !(rc != SQLITE_OK || 0 == decodeJournalHdr(tls, bp+8, uintptr(0), uintptr(0), uintptr(0), uintptr(0))) { 47787 goto __7 47788 } 47789 goto __2 47790 __7: 47791 ; 47792 __6: 47793 ; 47794 *(*u32)(unsafe.Pointer(bp + 36)) = u32((iSize - iOff) / sqlite3_int64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize+u32(8))) 47795 __5: 47796 ; 47797 ii = u32(0) 47798 __8: 47799 if !(rc == SQLITE_OK && ii < *(*u32)(unsafe.Pointer(bp + 36)) && iOff < iSize) { 47800 goto __10 47801 } 47802 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 4, iOff) 47803 if !(rc == SQLITE_OK) { 47804 goto __11 47805 } 47806 pgno = decodeUint32(tls, bp+8) 47807 if !(pgno > u32(0) && pgno <= (*jt_file)(unsafe.Pointer(pMain)).FnPage) { 47808 goto __12 47809 } 47810 if !(0 == sqlite3.Xsqlite3BitvecTest(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno)) { 47811 goto __13 47812 } 47813 rc = sqlite3.Xsqlite3OsRead(tls, pReal, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff+int64(4)) 47814 if !(rc == SQLITE_OK) { 47815 goto __14 47816 } 47817 cksum = genCksum(tls, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 47818 47819 __14: 47820 ; 47821 __13: 47822 ; 47823 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 47824 __12: 47825 ; 47826 iOff = iOff + sqlite3_int64(u32(8)+(*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 47827 __11: 47828 ; 47829 goto __9 47830 __9: 47831 ii++ 47832 goto __8 47833 goto __10 47834 __10: 47835 ; 47836 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))) 47837 goto __2 47838 __3: 47839 ; 47840 finish_rjf: 47841 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 47842 sqlite3.Xsqlite3_free(tls, aPage) 47843 if !(rc == SQLITE_IOERR|int32(2)<<8) { 47844 goto __15 47845 } 47846 rc = SQLITE_OK 47847 __15: 47848 ; 47849 return rc 47850 } 47851 47852 func jtWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 47853 var rc int32 47854 var p uintptr = pFile 47855 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 47856 if iOfst == int64(0) { 47857 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 47858 47859 if iAmt == 28 { 47860 closeTransaction(tls, pMain) 47861 } else if iAmt != 12 { 47862 var z uintptr = zBuf 47863 (*jt_file)(unsafe.Pointer(pMain)).FnPage = decodeUint32(tls, z+16) 47864 (*jt_file)(unsafe.Pointer(pMain)).FnPagesize = decodeUint32(tls, z+24) 47865 if SQLITE_OK != libc.AssignInt32(&rc, openTransaction(tls, pMain, p)) { 47866 return rc 47867 } 47868 } 47869 } 47870 if (*jt_file)(unsafe.Pointer(p)).FiMaxOff < iOfst+sqlite_int64(iAmt) { 47871 (*jt_file)(unsafe.Pointer(p)).FiMaxOff = iOfst + sqlite_int64(iAmt) 47872 } 47873 } 47874 47875 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 47876 if iAmt < int32((*jt_file)(unsafe.Pointer(p)).FnPagesize) && 47877 (*jt_file)(unsafe.Pointer(p)).FnPagesize%u32(iAmt) == u32(0) && 47878 iOfst >= sqlite_int64(sqlite3.Xsqlite3PendingByte+512) && 47879 iOfst+sqlite_int64(iAmt) <= sqlite_int64(u32(sqlite3.Xsqlite3PendingByte)+(*jt_file)(unsafe.Pointer(p)).FnPagesize) { 47880 } else { 47881 var pgno u32 = u32(iOfst/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)) 47882 _ = pgno 47883 47884 } 47885 } 47886 47887 rc = sqlite3.Xsqlite3OsWrite(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 47888 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && iAmt == 12 { 47889 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 47890 var rc2 int32 = readJournalFile(tls, p, pMain) 47891 if rc == SQLITE_OK { 47892 rc = rc2 47893 } 47894 } 47895 return rc 47896 } 47897 47898 func jtTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 47899 var p uintptr = pFile 47900 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && size == int64(0) { 47901 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 47902 closeTransaction(tls, pMain) 47903 } 47904 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 47905 var pgno u32 47906 var locking_page u32 = u32(sqlite3.Xsqlite3PendingByte)/(*jt_file)(unsafe.Pointer(p)).FnPagesize + u32(1) 47907 _ = locking_page 47908 for pgno = u32(size/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)); pgno <= (*jt_file)(unsafe.Pointer(p)).FnPage; pgno++ { 47909 } 47910 } 47911 return sqlite3.Xsqlite3OsTruncate(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, size) 47912 } 47913 47914 func jtSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 47915 var p uintptr = pFile 47916 47917 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 47918 var rc int32 47919 var pMain uintptr 47920 47921 pMain = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 47922 47923 if pMain != 0 && (*jt_file)(unsafe.Pointer(pMain)).FpWritable != 0 { 47924 (*jt_file)(unsafe.Pointer(pMain)).FnSync++ 47925 rc = readJournalFile(tls, p, pMain) 47926 if rc != SQLITE_OK { 47927 return rc 47928 } 47929 } 47930 } 47931 47932 return sqlite3.Xsqlite3OsSync(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, flags) 47933 } 47934 47935 func jtFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 47936 var p uintptr = pFile 47937 return sqlite3.Xsqlite3OsFileSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pSize) 47938 } 47939 47940 func jtLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 47941 var rc int32 47942 var p uintptr = pFile 47943 rc = sqlite3.Xsqlite3OsLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 47944 if rc == SQLITE_OK && eLock > (*jt_file)(unsafe.Pointer(p)).FeLock { 47945 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 47946 } 47947 return rc 47948 } 47949 47950 func jtUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 47951 var rc int32 47952 var p uintptr = pFile 47953 rc = sqlite3.Xsqlite3OsUnlock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 47954 if rc == SQLITE_OK && eLock < (*jt_file)(unsafe.Pointer(p)).FeLock { 47955 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 47956 } 47957 return rc 47958 } 47959 47960 func jtCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 47961 var p uintptr = pFile 47962 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pResOut) 47963 } 47964 47965 func jtFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 47966 var p uintptr = pFile 47967 return (*struct { 47968 f func(*libc.TLS, uintptr, int32, uintptr) int32 47969 })(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) 47970 } 47971 47972 func jtSectorSize(tls *libc.TLS, pFile uintptr) int32 { 47973 var p uintptr = pFile 47974 return sqlite3.Xsqlite3OsSectorSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 47975 } 47976 47977 func jtDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 47978 var p uintptr = pFile 47979 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 47980 } 47981 47982 func jtOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 47983 var rc int32 47984 var p uintptr = pFile 47985 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 47986 (*jt_file)(unsafe.Pointer(p)).FpReal = p + 1*80 47987 (*sqlite3_file)(unsafe.Pointer((*jt_file)(unsafe.Pointer(p)).FpReal)).FpMethods = uintptr(0) 47988 rc = sqlite3.Xsqlite3OsOpen(tls, g2.FpVfs, zName, (*jt_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 47989 47990 if rc == SQLITE_OK { 47991 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&jt_io_methods)) 47992 (*jt_file)(unsafe.Pointer(p)).FeLock = 0 47993 (*jt_file)(unsafe.Pointer(p)).FzName = zName 47994 (*jt_file)(unsafe.Pointer(p)).Fflags = flags 47995 (*jt_file)(unsafe.Pointer(p)).FpNext = uintptr(0) 47996 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 47997 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 47998 enterJtMutex(tls) 47999 if zName != 0 { 48000 (*jt_file)(unsafe.Pointer(p)).FpNext = g2.FpList 48001 g2.FpList = p 48002 } 48003 leaveJtMutex(tls) 48004 } 48005 return rc 48006 } 48007 48008 func jtDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 48009 var nPath int32 = int32(libc.Xstrlen(tls, zPath)) 48010 if nPath > 8 && 0 == libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nPath-8)) { 48011 var pMain uintptr = locateDatabaseHandle(tls, zPath, 0) 48012 if pMain != 0 { 48013 closeTransaction(tls, pMain) 48014 } 48015 } 48016 48017 return sqlite3.Xsqlite3OsDelete(tls, g2.FpVfs, zPath, dirSync) 48018 } 48019 48020 func jtAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 48021 return sqlite3.Xsqlite3OsAccess(tls, g2.FpVfs, zPath, flags, pResOut) 48022 } 48023 48024 func jtFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 48025 return sqlite3.Xsqlite3OsFullPathname(tls, g2.FpVfs, zPath, nOut, zOut) 48026 } 48027 48028 func jtDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 48029 return (*struct { 48030 f func(*libc.TLS, uintptr, uintptr) uintptr 48031 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlOpen})).f(tls, g2.FpVfs, zPath) 48032 } 48033 48034 func jtDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 48035 (*struct { 48036 f func(*libc.TLS, uintptr, int32, uintptr) 48037 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlError})).f(tls, g2.FpVfs, nByte, zErrMsg) 48038 } 48039 48040 func jtDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 48041 return (*struct { 48042 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 48043 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlSym})).f(tls, g2.FpVfs, p, zSym) 48044 } 48045 48046 func jtDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 48047 (*struct { 48048 f func(*libc.TLS, uintptr, uintptr) 48049 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlClose})).f(tls, g2.FpVfs, pHandle) 48050 } 48051 48052 func jtRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 48053 return sqlite3.Xsqlite3OsRandomness(tls, g2.FpVfs, nByte, zBufOut) 48054 } 48055 48056 func jtSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 48057 return sqlite3.Xsqlite3OsSleep(tls, g2.FpVfs, nMicro) 48058 } 48059 48060 func jtCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48061 return (*struct { 48062 f func(*libc.TLS, uintptr, uintptr) int32 48063 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTime})).f(tls, g2.FpVfs, pTimeOut) 48064 } 48065 48066 func jtCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48067 return (*struct { 48068 f func(*libc.TLS, uintptr, uintptr) int32 48069 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64})).f(tls, g2.FpVfs, pTimeOut) 48070 } 48071 48072 func jtGetLastError(tls *libc.TLS, pVfs uintptr, n int32, z uintptr) int32 { 48073 return (*struct { 48074 f func(*libc.TLS, uintptr, int32, uintptr) int32 48075 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxGetLastError})).f(tls, g2.FpVfs, n, z) 48076 } 48077 48078 func jt_register(tls *libc.TLS, zWrap uintptr, isDefault int32) int32 { 48079 g2.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, zWrap) 48080 if g2.FpVfs == uintptr(0) { 48081 return SQLITE_ERROR 48082 } 48083 jt_vfs.FszOsFile = int32(uint64(unsafe.Sizeof(jt_file{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FszOsFile)) 48084 if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FiVersion == 1 { 48085 jt_vfs.FiVersion = 1 48086 } else if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64 == uintptr(0) { 48087 jt_vfs.FxCurrentTimeInt64 = uintptr(0) 48088 } 48089 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&jt_vfs)), isDefault) 48090 return SQLITE_OK 48091 } 48092 48093 func jt_unregister(tls *libc.TLS) { 48094 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&jt_vfs))) 48095 } 48096 48097 type MemFault = struct { 48098 FiCountdown int32 48099 FnRepeat int32 48100 FnBenign int32 48101 FnFail int32 48102 FnOkBefore int32 48103 FnOkAfter int32 48104 Fenable u8 48105 F__ccgo_pad1 [3]byte 48106 FisInstalled int32 48107 FisBenignMode int32 48108 F__ccgo_pad2 [4]byte 48109 Fm sqlite3_mem_methods 48110 } 48111 48112 var memfault MemFault 48113 48114 func sqlite3Fault(tls *libc.TLS) { 48115 cnt1++ 48116 } 48117 48118 var cnt1 int32 = 0 48119 48120 func sqlite3FirstFault(tls *libc.TLS) { 48121 cnt2++ 48122 } 48123 48124 var cnt2 int32 = 0 48125 48126 func faultsimStep(tls *libc.TLS) int32 { 48127 if !(int32(memfault.Fenable) != 0) { 48128 memfault.FnOkAfter++ 48129 return 0 48130 } 48131 if memfault.FiCountdown > 0 { 48132 memfault.FiCountdown-- 48133 memfault.FnOkBefore++ 48134 return 0 48135 } 48136 if memfault.FnFail == 0 { 48137 sqlite3FirstFault(tls) 48138 } 48139 sqlite3Fault(tls) 48140 memfault.FnFail++ 48141 if memfault.FisBenignMode > 0 { 48142 memfault.FnBenign++ 48143 } 48144 memfault.FnRepeat-- 48145 if memfault.FnRepeat <= 0 { 48146 memfault.Fenable = u8(0) 48147 } 48148 return 1 48149 } 48150 48151 func faultsimMalloc(tls *libc.TLS, n int32) uintptr { 48152 var p uintptr = uintptr(0) 48153 if !(faultsimStep(tls) != 0) { 48154 p = (*struct { 48155 f func(*libc.TLS, int32) uintptr 48156 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxMalloc})).f(tls, n) 48157 } 48158 return p 48159 } 48160 48161 func faultsimRealloc(tls *libc.TLS, pOld uintptr, n int32) uintptr { 48162 var p uintptr = uintptr(0) 48163 if !(faultsimStep(tls) != 0) { 48164 p = (*struct { 48165 f func(*libc.TLS, uintptr, int32) uintptr 48166 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxRealloc})).f(tls, pOld, n) 48167 } 48168 return p 48169 } 48170 48171 func faultsimConfig(tls *libc.TLS, nDelay int32, nRepeat int32) { 48172 memfault.FiCountdown = nDelay 48173 memfault.FnRepeat = nRepeat 48174 memfault.FnBenign = 0 48175 memfault.FnFail = 0 48176 memfault.FnOkBefore = 0 48177 memfault.FnOkAfter = 0 48178 memfault.Fenable = u8(libc.Bool32(nDelay >= 0)) 48179 48180 memfault.FisBenignMode = 0 48181 } 48182 48183 func faultsimFailures(tls *libc.TLS) int32 { 48184 return memfault.FnFail 48185 } 48186 48187 func faultsimBenignFailures(tls *libc.TLS) int32 { 48188 return memfault.FnBenign 48189 } 48190 48191 func faultsimPending(tls *libc.TLS) int32 { 48192 if memfault.Fenable != 0 { 48193 return memfault.FiCountdown 48194 } else { 48195 return -1 48196 } 48197 return int32(0) 48198 } 48199 48200 func faultsimBeginBenign(tls *libc.TLS) { 48201 memfault.FisBenignMode++ 48202 } 48203 48204 func faultsimEndBenign(tls *libc.TLS) { 48205 memfault.FisBenignMode-- 48206 } 48207 48208 func faultsimInstall(tls *libc.TLS, install int32) int32 { 48209 bp := tls.Alloc(200) 48210 defer tls.Free(200) 48211 48212 var rc int32 48213 48214 install = func() int32 { 48215 if install != 0 { 48216 return 1 48217 } 48218 return 0 48219 }() 48220 48221 if install == memfault.FisInstalled { 48222 return SQLITE_ERROR 48223 } 48224 48225 if install != 0 { 48226 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp, uintptr(unsafe.Pointer(&memfault))+40)) 48227 48228 if rc == SQLITE_OK { 48229 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)) = memfault.Fm 48230 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxMalloc = *(*uintptr)(unsafe.Pointer(&struct { 48231 f func(*libc.TLS, int32) uintptr 48232 }{faultsimMalloc})) 48233 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxRealloc = *(*uintptr)(unsafe.Pointer(&struct { 48234 f func(*libc.TLS, uintptr, int32) uintptr 48235 }{faultsimRealloc})) 48236 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, bp+72)) 48237 } 48238 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 48239 libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimBeginBenign})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimEndBenign})))) 48240 } else { 48241 libc.Xmemset(tls, bp+136, 0, uint64(unsafe.Sizeof(sqlite3_mem_methods{}))) 48242 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+136)) 48243 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+40, bp+136)) 48244 48245 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+48, uintptr(unsafe.Pointer(&memfault))+40)) 48246 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 48247 libc.VaList(bp+56, uintptr(0), uintptr(0))) 48248 } 48249 48250 if rc == SQLITE_OK { 48251 memfault.FisInstalled = 1 48252 } 48253 return rc 48254 } 48255 48256 func pointerToText(tls *libc.TLS, p uintptr, z uintptr) { 48257 bp := tls.Alloc(20) 48258 defer tls.Free(20) 48259 *(*uintptr)(unsafe.Pointer(bp + 8)) = p 48260 48261 var i int32 48262 var k int32 48263 48264 if *(*uintptr)(unsafe.Pointer(bp + 8)) == uintptr(0) { 48265 libc.Xstrcpy(tls, z, ts+14193) 48266 return 48267 } 48268 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48269 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 48270 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48271 libc.Xmemcpy(tls, bp+16, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 48272 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = sqlite3_uint64(*(*uint32)(unsafe.Pointer(bp + 16))) 48273 } else { 48274 } 48275 i = 0 48276 k = int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) - uint64(1)) 48277 __1: 48278 if !(uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2)) { 48279 goto __3 48280 } 48281 { 48282 *(*int8)(unsafe.Pointer(z + uintptr(k))) = zHex[*(*sqlite3_uint64)(unsafe.Pointer(bp))&uint64(0xf)] 48283 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 4 48284 48285 } 48286 goto __2 48287 __2: 48288 i++ 48289 k-- 48290 goto __1 48291 goto __3 48292 __3: 48293 ; 48294 *(*int8)(unsafe.Pointer(z + 16)) = int8(0) 48295 } 48296 48297 var zHex = *(*[17]int8)(unsafe.Pointer(ts + 31194)) 48298 48299 func hexToInt(tls *libc.TLS, h int32) int32 { 48300 if h >= '0' && h <= '9' { 48301 return h - '0' 48302 } else if h >= 'a' && h <= 'f' { 48303 return h - 'a' + 10 48304 } else { 48305 return -1 48306 } 48307 return int32(0) 48308 } 48309 48310 func textToPointer(tls *libc.TLS, z uintptr, pp uintptr) int32 { 48311 bp := tls.Alloc(12) 48312 defer tls.Free(12) 48313 48314 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(0) 48315 var i int32 48316 48317 for i = 0; uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) && *(*int8)(unsafe.Pointer(z)) != 0; i++ { 48318 var v int32 48319 v = hexToInt(tls, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) 48320 if v < 0 { 48321 return TCL_ERROR 48322 } 48323 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = *(*sqlite3_uint64)(unsafe.Pointer(bp))*uint64(16) + sqlite3_uint64(v) 48324 } 48325 if int32(*(*int8)(unsafe.Pointer(z))) != 0 { 48326 return TCL_ERROR 48327 } 48328 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48329 libc.Xmemcpy(tls, pp, bp, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 48330 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48331 *(*uint32)(unsafe.Pointer(bp + 8)) = uint32(*(*sqlite3_uint64)(unsafe.Pointer(bp))) 48332 libc.Xmemcpy(tls, pp, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 48333 } else { 48334 } 48335 return TCL_OK 48336 } 48337 48338 func test_malloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48339 bp := tls.Alloc(120) 48340 defer tls.Free(120) 48341 48342 var p uintptr 48343 48344 if objc != 2 { 48345 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32817) 48346 return TCL_ERROR 48347 } 48348 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 48349 return TCL_ERROR 48350 } 48351 p = sqlite3.Xsqlite3_malloc(tls, int32(uint32(*(*int32)(unsafe.Pointer(bp + 16))))) 48352 pointerToText(tls, p, bp+20) 48353 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+20, uintptr(0))) 48354 return TCL_OK 48355 } 48356 48357 func test_realloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48358 bp := tls.Alloc(156) 48359 defer tls.Free(156) 48360 48361 var p uintptr 48362 48363 if objc != 3 { 48364 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32824) 48365 return TCL_ERROR 48366 } 48367 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 48368 return TCL_ERROR 48369 } 48370 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 48371 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48372 return TCL_ERROR 48373 } 48374 p = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), int32(uint32(*(*int32)(unsafe.Pointer(bp + 40))))) 48375 pointerToText(tls, p, bp+56) 48376 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+56, uintptr(0))) 48377 return TCL_OK 48378 } 48379 48380 func test_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48381 bp := tls.Alloc(32) 48382 defer tls.Free(32) 48383 48384 if objc != 2 { 48385 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32851) 48386 return TCL_ERROR 48387 } 48388 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 48389 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48390 return TCL_ERROR 48391 } 48392 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 48393 return TCL_OK 48394 } 48395 48396 func test_memset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48397 bp := tls.Alloc(172) 48398 defer tls.Free(172) 48399 48400 var i int32 48401 var zHex uintptr 48402 var zOut uintptr 48403 48404 if objc != 4 { 48405 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32857) 48406 return TCL_ERROR 48407 } 48408 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 48409 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48410 return TCL_ERROR 48411 } 48412 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 48413 return TCL_ERROR 48414 } 48415 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 48416 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 48417 return TCL_ERROR 48418 } 48419 zHex = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+68) 48420 if uint64(*(*int32)(unsafe.Pointer(bp + 68))) > uint64(unsafe.Sizeof([100]int8{}))*uint64(2) { 48421 *(*int32)(unsafe.Pointer(bp + 68)) = int32(uint64(unsafe.Sizeof([100]int8{})) * uint64(2)) 48422 } 48423 *(*int32)(unsafe.Pointer(bp + 68)) = sqlite3TestHexToBin(tls, zHex, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 48424 if *(*int32)(unsafe.Pointer(bp + 68)) == 0 { 48425 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+32896, uintptr(0))) 48426 return TCL_ERROR 48427 } 48428 zOut = *(*uintptr)(unsafe.Pointer(bp + 56)) 48429 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 48430 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i%*(*int32)(unsafe.Pointer(bp + 68))))) 48431 } 48432 return TCL_OK 48433 } 48434 48435 func test_memget(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48436 bp := tls.Alloc(168) 48437 defer tls.Free(168) 48438 48439 var n int32 48440 var zBin uintptr 48441 48442 if objc != 3 { 48443 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32904) 48444 return TCL_ERROR 48445 } 48446 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 48447 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48448 return TCL_ERROR 48449 } 48450 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 48451 return TCL_ERROR 48452 } 48453 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 48454 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 48455 return TCL_ERROR 48456 } 48457 zBin = *(*uintptr)(unsafe.Pointer(bp + 56)) 48458 for *(*int32)(unsafe.Pointer(bp + 64)) > 0 { 48459 if uint64(*(*int32)(unsafe.Pointer(bp + 64))) > (uint64(unsafe.Sizeof([100]int8{}))-uint64(1))/uint64(2) { 48460 n = int32((uint64(unsafe.Sizeof([100]int8{})) - uint64(1)) / uint64(2)) 48461 } else { 48462 n = *(*int32)(unsafe.Pointer(bp + 64)) 48463 } 48464 libc.Xmemcpy(tls, bp+68, zBin, uint64(n)) 48465 zBin += uintptr(n) 48466 *(*int32)(unsafe.Pointer(bp + 64)) -= n 48467 sqlite3TestBinToHex(tls, bp+68, n) 48468 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+68, uintptr(0))) 48469 } 48470 return TCL_OK 48471 } 48472 48473 func test_memory_used(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48474 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_used(tls))) 48475 return TCL_OK 48476 } 48477 48478 func test_memory_highwater(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48479 bp := tls.Alloc(4) 48480 defer tls.Free(4) 48481 48482 *(*int32)(unsafe.Pointer(bp)) = 0 48483 if objc != 1 && objc != 2 { 48484 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32917) 48485 return TCL_ERROR 48486 } 48487 if objc == 2 { 48488 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 48489 return TCL_ERROR 48490 } 48491 } 48492 tcl.XTcl_SetObjResult(tls, interp, 48493 tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_highwater(tls, *(*int32)(unsafe.Pointer(bp))))) 48494 return TCL_OK 48495 } 48496 48497 func test_memdebug_backtrace(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48498 bp := tls.Alloc(4) 48499 defer tls.Free(4) 48500 48501 if objc != 2 { 48502 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32925) 48503 return TCL_ERROR 48504 } 48505 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 48506 return TCL_ERROR 48507 } 48508 return TCL_OK 48509 } 48510 48511 func test_memdebug_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48512 if objc != 2 { 48513 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 48514 return TCL_ERROR 48515 } 48516 return TCL_OK 48517 } 48518 48519 func test_memdebug_malloc_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48520 var nMalloc int32 = -1 48521 if objc != 1 { 48522 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48523 return TCL_ERROR 48524 } 48525 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nMalloc)) 48526 return TCL_OK 48527 } 48528 48529 func test_memdebug_fail(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48530 bp := tls.Alloc(36) 48531 defer tls.Free(36) 48532 48533 var ii int32 48534 48535 *(*int32)(unsafe.Pointer(bp + 32)) = 1 48536 var pBenignCnt uintptr = uintptr(0) 48537 var nBenign int32 48538 var nFail int32 = 0 48539 48540 if objc < 2 { 48541 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32939) 48542 return TCL_ERROR 48543 } 48544 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24) != 0 { 48545 return TCL_ERROR 48546 } 48547 48548 for ii = 2; ii < objc; ii = ii + 2 { 48549 var zOption uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii)*8)), bp+28) 48550 var zErr uintptr = uintptr(0) 48551 48552 if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32957, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 48553 if ii == objc-1 { 48554 zErr = ts + 12638 48555 } else { 48556 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)), bp+32) != 0 { 48557 return TCL_ERROR 48558 } 48559 } 48560 } else if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32965, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 48561 if ii == objc-1 { 48562 zErr = ts + 12638 48563 } else { 48564 pBenignCnt = *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)) 48565 } 48566 } else { 48567 zErr = ts + 12444 48568 } 48569 48570 if zErr != 0 { 48571 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErr, zOption, 0)) 48572 return TCL_ERROR 48573 } 48574 } 48575 48576 nBenign = faultsimBenignFailures(tls) 48577 nFail = faultsimFailures(tls) 48578 faultsimConfig(tls, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32))) 48579 48580 if pBenignCnt != 0 { 48581 tcl.XTcl_ObjSetVar2(tls, interp, pBenignCnt, uintptr(0), tcl.XTcl_NewIntObj(tls, nBenign), 0) 48582 } 48583 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nFail)) 48584 return TCL_OK 48585 } 48586 48587 func test_memdebug_pending(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48588 var nPending int32 48589 if objc != 1 { 48590 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48591 return TCL_ERROR 48592 } 48593 nPending = faultsimPending(tls) 48594 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPending)) 48595 return TCL_OK 48596 } 48597 48598 var sqlite3_memdebug_title_count int32 = 0 48599 48600 func test_memdebug_settitle(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48601 sqlite3_memdebug_title_count++ 48602 if objc != 2 { 48603 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32976) 48604 return TCL_ERROR 48605 } 48606 return TCL_OK 48607 } 48608 48609 var aMallocLog Tcl_HashTable 48610 var mallocLogEnabled int32 = 0 48611 48612 type MallocLog1 = struct { 48613 FnCall int32 48614 FnByte int32 48615 } 48616 48617 type MallocLog = MallocLog1 48618 48619 func test_memdebug_log_clear(tls *libc.TLS) { 48620 bp := tls.Alloc(24) 48621 defer tls.Free(24) 48622 48623 var pEntry uintptr 48624 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp) { 48625 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 48626 tcl.XTcl_Free(tls, pLog) 48627 } 48628 tcl.XTcl_DeleteHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog))) 48629 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 48630 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 48631 return uint64(1) 48632 } 48633 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 48634 }())) 48635 } 48636 48637 func test_memdebug_log(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48638 bp := tls.Alloc(128) 48639 defer tls.Free(128) 48640 48641 if !(isInit != 0) { 48642 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 48643 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 48644 return uint64(1) 48645 } 48646 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 48647 }())) 48648 isInit = 1 48649 } 48650 48651 if objc < 2 { 48652 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 48653 } 48654 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 { 48655 return TCL_ERROR 48656 } 48657 48658 switch uint32(*(*int32)(unsafe.Pointer(bp))) { 48659 case uint32(0): 48660 mallocLogEnabled = 1 48661 break 48662 case uint32(1): 48663 mallocLogEnabled = 0 48664 break 48665 case uint32(2): 48666 { 48667 var pEntry uintptr 48668 var pRet uintptr = tcl.XTcl_NewObj(tls) 48669 48670 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp+8); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp+8) { 48671 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 48672 var aKey uintptr = func() uintptr { 48673 if (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == 1 || (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == -1 { 48674 return *(*uintptr)(unsafe.Pointer(pEntry + 32)) 48675 } 48676 return pEntry + 32 48677 }() 48678 var ii int32 48679 48680 *(*uintptr)(unsafe.Pointer(bp + 32)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnCall) 48681 *(*uintptr)(unsafe.Pointer(bp + 32 + 1*8)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnByte) 48682 for ii = 0; ii < MALLOC_LOG_FRAMES; ii++ { 48683 *(*uintptr)(unsafe.Pointer(bp + 32 + uintptr(ii+2)*8)) = tcl.XTcl_NewWideIntObj(tls, *(*Tcl_WideInt)(unsafe.Pointer(aKey + uintptr(ii)*8))) 48684 } 48685 48686 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, 48687 tcl.XTcl_NewListObj(tls, MALLOC_LOG_FRAMES+2, bp+32)) 48688 } 48689 48690 tcl.XTcl_SetObjResult(tls, interp, pRet) 48691 break 48692 48693 } 48694 case uint32(3): 48695 { 48696 test_memdebug_log_clear(tls) 48697 break 48698 48699 } 48700 48701 case uint32(4): 48702 { 48703 break 48704 48705 } 48706 } 48707 48708 return TCL_OK 48709 } 48710 48711 var isInit int32 = 0 48712 var MB_strs = [5]uintptr{ts + 32998, ts + 33004, ts + 33009, ts + 33014, ts + 33020} 48713 48714 func test_config_pagecache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48715 bp := tls.Alloc(56) 48716 defer tls.Free(56) 48717 48718 var pRes uintptr 48719 if objc != 3 { 48720 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33025) 48721 return TCL_ERROR 48722 } 48723 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+48) != 0 { 48724 return TCL_ERROR 48725 } 48726 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+52) != 0 { 48727 return TCL_ERROR 48728 } 48729 libc.Xfree(tls, buf1) 48730 buf1 = uintptr(0) 48731 48732 pRes = tcl.XTcl_NewObj(tls) 48733 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszPage)) 48734 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnPage)) 48735 tcl.XTcl_SetObjResult(tls, interp, pRes) 48736 48737 if *(*int32)(unsafe.Pointer(bp + 48)) < 0 { 48738 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp, uintptr(0), 0, 0)) 48739 } else { 48740 buf1 = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 48))**(*int32)(unsafe.Pointer(bp + 52)))) 48741 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp+24, buf1, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 48742 } 48743 return TCL_OK 48744 } 48745 48746 var buf1 uintptr = uintptr(0) 48747 48748 func test_alt_pcache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48749 bp := tls.Alloc(32) 48750 defer tls.Free(32) 48751 48752 *(*int32)(unsafe.Pointer(bp + 20)) = 0 48753 *(*int32)(unsafe.Pointer(bp + 24)) = 0 48754 *(*int32)(unsafe.Pointer(bp + 28)) = 0 48755 if objc < 2 || objc > 5 { 48756 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 48757 ts+33032) 48758 return TCL_ERROR 48759 } 48760 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 48761 return TCL_ERROR 48762 } 48763 if objc >= 3 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 48764 return TCL_ERROR 48765 } 48766 if objc >= 4 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 48767 return TCL_ERROR 48768 } 48769 if objc >= 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 48770 return TCL_ERROR 48771 } 48772 if *(*int32)(unsafe.Pointer(bp + 20)) < 0 || *(*int32)(unsafe.Pointer(bp + 20)) > 100 { 48773 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33079, 48774 uintptr(0))) 48775 return TCL_ERROR 48776 } 48777 installTestPCache(tls, *(*int32)(unsafe.Pointer(bp + 16)), uint32(*(*int32)(unsafe.Pointer(bp + 20))), uint32(*(*int32)(unsafe.Pointer(bp + 24))), 48778 uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 48779 return TCL_OK 48780 } 48781 48782 func test_config_memstatus(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48783 bp := tls.Alloc(12) 48784 defer tls.Free(12) 48785 48786 var rc int32 48787 if objc != 2 { 48788 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 48789 return TCL_ERROR 48790 } 48791 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 48792 return TCL_ERROR 48793 } 48794 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MEMSTATUS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 48795 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 48796 return TCL_OK 48797 } 48798 48799 func test_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48800 bp := tls.Alloc(24) 48801 defer tls.Free(24) 48802 48803 var pRet uintptr 48804 if objc != 3 { 48805 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33122) 48806 return TCL_ERROR 48807 } 48808 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 48809 return TCL_ERROR 48810 } 48811 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 48812 return TCL_ERROR 48813 } 48814 pRet = tcl.XTcl_NewObj(tls) 48815 tcl.XTcl_ListObjAppendElement(tls, 48816 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszLookaside)) 48817 tcl.XTcl_ListObjAppendElement(tls, 48818 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnLookaside)) 48819 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOOKASIDE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 20)))) 48820 tcl.XTcl_SetObjResult(tls, interp, pRet) 48821 return TCL_OK 48822 } 48823 48824 func test_db_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48825 bp := tls.Alloc(84) 48826 defer tls.Free(84) 48827 48828 var rc int32 48829 48830 if objc != 5 { 48831 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33133) 48832 return TCL_ERROR 48833 } 48834 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 48835 return TCL_ERROR 48836 } 48837 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 48838 return TCL_ERROR 48839 } 48840 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) != 0 { 48841 return TCL_ERROR 48842 } 48843 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 48844 return TCL_ERROR 48845 } 48846 if *(*int32)(unsafe.Pointer(bp + 72)) == 0 { 48847 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)))) 48848 } 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{})) { 48849 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)))) 48850 } else { 48851 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+33150, uintptr(0))) 48852 return TCL_ERROR 48853 } 48854 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 48855 return TCL_OK 48856 } 48857 48858 var azBuf [2][10000]int8 48859 48860 func test_config_heap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48861 bp := tls.Alloc(56) 48862 defer tls.Free(56) 48863 48864 var rc int32 48865 48866 var aArg uintptr = objv + 1*8 48867 var nArg int32 = objc - 1 48868 48869 if nArg != 2 { 48870 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33188) 48871 return TCL_ERROR 48872 } 48873 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+48) != 0 { 48874 return TCL_ERROR 48875 } 48876 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg + 1*8)), bp+52) != 0 { 48877 return TCL_ERROR 48878 } 48879 48880 if *(*int32)(unsafe.Pointer(bp + 48)) == 0 { 48881 libc.Xfree(tls, zBuf) 48882 zBuf = uintptr(0) 48883 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp, uintptr(0), 0, 0)) 48884 } else { 48885 zBuf = libc.Xrealloc(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp + 48)))) 48886 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp+24, zBuf, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 48887 } 48888 48889 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 48890 return TCL_OK 48891 } 48892 48893 var zBuf uintptr 48894 48895 func test_config_heap_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48896 bp := tls.Alloc(12) 48897 defer tls.Free(12) 48898 48899 var rc int32 48900 48901 var aArg uintptr = objv + 1*8 48902 var nArg int32 = objc - 1 48903 48904 if nArg != 1 { 48905 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 48906 return TCL_ERROR 48907 } 48908 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+8) != 0 { 48909 return TCL_ERROR 48910 } 48911 48912 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_WIN32_HEAPSIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 48913 48914 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 48915 return TCL_OK 48916 } 48917 48918 func test_config_error(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48919 bp := tls.Alloc(40) 48920 defer tls.Free(40) 48921 48922 if objc != 2 && objc != 1 { 48923 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33204) 48924 return TCL_ERROR 48925 } 48926 if objc == 2 { 48927 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 48928 return TCL_ERROR 48929 } 48930 if sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 99999, 0) != SQLITE_ERROR { 48931 tcl.XTcl_AppendResult(tls, interp, 48932 libc.VaList(bp, ts+33209, 48933 uintptr(0))) 48934 return TCL_ERROR 48935 } 48936 } else { 48937 if sqlite3.Xsqlite3_config(tls, 99999, 0) != SQLITE_ERROR { 48938 tcl.XTcl_AppendResult(tls, interp, 48939 libc.VaList(bp+16, ts+33267, 48940 uintptr(0))) 48941 return TCL_ERROR 48942 } 48943 } 48944 return TCL_OK 48945 } 48946 48947 func test_config_uri(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48948 bp := tls.Alloc(12) 48949 defer tls.Free(12) 48950 48951 var rc int32 48952 48953 if objc != 2 { 48954 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 48955 return TCL_ERROR 48956 } 48957 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 48958 return TCL_ERROR 48959 } 48960 48961 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_URI, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 48962 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 48963 48964 return TCL_OK 48965 } 48966 48967 func test_config_cis(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48968 bp := tls.Alloc(12) 48969 defer tls.Free(12) 48970 48971 var rc int32 48972 48973 if objc != 2 { 48974 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 48975 return TCL_ERROR 48976 } 48977 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 48978 return TCL_ERROR 48979 } 48980 48981 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_COVERING_INDEX_SCAN, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 48982 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 48983 48984 return TCL_OK 48985 } 48986 48987 func test_config_pmasz(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48988 bp := tls.Alloc(12) 48989 defer tls.Free(12) 48990 48991 var rc int32 48992 48993 if objc != 2 { 48994 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 48995 return TCL_ERROR 48996 } 48997 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 48998 return TCL_ERROR 48999 } 49000 49001 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PMASZ, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49002 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49003 49004 return TCL_OK 49005 } 49006 49007 func test_dump_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49008 if objc != 2 { 49009 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49010 return TCL_ERROR 49011 } 49012 49013 switch int32(clientData) { 49014 case 3: 49015 { 49016 } 49017 fallthrough 49018 case 5: 49019 { 49020 } 49021 } 49022 return TCL_OK 49023 } 49024 49025 func test_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49026 bp := tls.Alloc(16) 49027 defer tls.Free(16) 49028 49029 var rc int32 49030 49031 var i int32 49032 *(*int32)(unsafe.Pointer(bp)) = 0 49033 49034 var zOpName uintptr 49035 var pResult uintptr 49036 if objc != 3 { 49037 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33318) 49038 return TCL_ERROR 49039 } 49040 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 49041 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 49042 FzName uintptr 49043 Fop int32 49044 F__ccgo_pad1 [4]byte 49045 }{}))); i++ { 49046 if libc.Xstrcmp(tls, aOp1[i].FzName, zOpName) == 0 { 49047 *(*int32)(unsafe.Pointer(bp)) = aOp1[i].Fop 49048 break 49049 } 49050 } 49051 if i >= int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 49052 FzName uintptr 49053 Fop int32 49054 F__ccgo_pad1 [4]byte 49055 }{}))) { 49056 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49057 return TCL_ERROR 49058 } 49059 } 49060 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 49061 return TCL_ERROR 49062 } 49063 *(*int32)(unsafe.Pointer(bp + 8)) = 0 49064 *(*int32)(unsafe.Pointer(bp + 12)) = 0 49065 rc = sqlite3.Xsqlite3_status(tls, *(*int32)(unsafe.Pointer(bp)), bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 4))) 49066 pResult = tcl.XTcl_NewObj(tls) 49067 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 49068 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 49069 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 49070 tcl.XTcl_SetObjResult(tls, interp, pResult) 49071 return TCL_OK 49072 } 49073 49074 var aOp1 = [10]struct { 49075 FzName uintptr 49076 Fop int32 49077 F__ccgo_pad1 [4]byte 49078 }{ 49079 {FzName: ts + 33338}, 49080 {FzName: ts + 33364, Fop: SQLITE_STATUS_MALLOC_SIZE}, 49081 {FzName: ts + 33390, Fop: SQLITE_STATUS_PAGECACHE_USED}, 49082 {FzName: ts + 33419, Fop: SQLITE_STATUS_PAGECACHE_OVERFLOW}, 49083 {FzName: ts + 33452, Fop: SQLITE_STATUS_PAGECACHE_SIZE}, 49084 {FzName: ts + 33481, Fop: SQLITE_STATUS_SCRATCH_USED}, 49085 {FzName: ts + 33508, Fop: SQLITE_STATUS_SCRATCH_OVERFLOW}, 49086 {FzName: ts + 33539, Fop: SQLITE_STATUS_SCRATCH_SIZE}, 49087 {FzName: ts + 33566, Fop: SQLITE_STATUS_PARSER_STACK}, 49088 {FzName: ts + 33593, Fop: SQLITE_STATUS_MALLOC_COUNT}, 49089 } 49090 49091 func test_db_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49092 bp := tls.Alloc(24) 49093 defer tls.Free(24) 49094 49095 var rc int32 49096 49097 var i int32 49098 *(*int32)(unsafe.Pointer(bp + 8)) = 0 49099 49100 var zOpName uintptr 49101 49102 var pResult uintptr 49103 if objc != 4 { 49104 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33620) 49105 return TCL_ERROR 49106 } 49107 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 49108 return TCL_ERROR 49109 } 49110 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 49111 if libc.Xmemcmp(tls, zOpName, ts+33643, uint64(7)) == 0 { 49112 zOpName += uintptr(7) 49113 } 49114 if libc.Xmemcmp(tls, zOpName, ts+33651, uint64(9)) == 0 { 49115 zOpName += uintptr(9) 49116 } 49117 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 49118 FzName uintptr 49119 Fop int32 49120 F__ccgo_pad1 [4]byte 49121 }{}))); i++ { 49122 if libc.Xstrcmp(tls, aOp2[i].FzName, zOpName) == 0 { 49123 *(*int32)(unsafe.Pointer(bp + 8)) = aOp2[i].Fop 49124 break 49125 } 49126 } 49127 if i >= int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 49128 FzName uintptr 49129 Fop int32 49130 F__ccgo_pad1 [4]byte 49131 }{}))) { 49132 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 49133 return TCL_ERROR 49134 } 49135 } 49136 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 49137 return TCL_ERROR 49138 } 49139 *(*int32)(unsafe.Pointer(bp + 16)) = 0 49140 *(*int32)(unsafe.Pointer(bp + 20)) = 0 49141 rc = sqlite3.Xsqlite3_db_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+16, bp+20, *(*int32)(unsafe.Pointer(bp + 12))) 49142 pResult = tcl.XTcl_NewObj(tls) 49143 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 49144 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 49145 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 20)))) 49146 tcl.XTcl_SetObjResult(tls, interp, pResult) 49147 return TCL_OK 49148 } 49149 49150 var aOp2 = [13]struct { 49151 FzName uintptr 49152 Fop int32 49153 F__ccgo_pad1 [4]byte 49154 }{ 49155 {FzName: ts + 33661}, 49156 {FzName: ts + 33676, Fop: SQLITE_DBSTATUS_CACHE_USED}, 49157 {FzName: ts + 33687, Fop: SQLITE_DBSTATUS_SCHEMA_USED}, 49158 {FzName: ts + 33699, Fop: SQLITE_DBSTATUS_STMT_USED}, 49159 {FzName: ts + 33709, Fop: SQLITE_DBSTATUS_LOOKASIDE_HIT}, 49160 {FzName: ts + 33723, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE}, 49161 {FzName: ts + 33743, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL}, 49162 {FzName: ts + 33763, Fop: SQLITE_DBSTATUS_CACHE_HIT}, 49163 {FzName: ts + 33773, Fop: SQLITE_DBSTATUS_CACHE_MISS}, 49164 {FzName: ts + 33784, Fop: SQLITE_DBSTATUS_CACHE_WRITE}, 49165 {FzName: ts + 33796, Fop: SQLITE_DBSTATUS_DEFERRED_FKS}, 49166 {FzName: ts + 33809, Fop: SQLITE_DBSTATUS_CACHE_USED_SHARED}, 49167 {FzName: ts + 33827, Fop: SQLITE_DBSTATUS_CACHE_SPILL}, 49168 } 49169 49170 func test_install_malloc_faultsim(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49171 bp := tls.Alloc(4) 49172 defer tls.Free(4) 49173 49174 var rc int32 49175 49176 if objc != 2 { 49177 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 49178 return TCL_ERROR 49179 } 49180 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) { 49181 return TCL_ERROR 49182 } 49183 rc = faultsimInstall(tls, *(*int32)(unsafe.Pointer(bp))) 49184 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49185 return TCL_OK 49186 } 49187 49188 func test_install_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49189 var rc int32 = SQLITE_MISUSE 49190 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49191 return TCL_OK 49192 } 49193 49194 func test_vfs_oom_test(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49195 bp := tls.Alloc(4) 49196 defer tls.Free(4) 49197 49198 if objc > 2 { 49199 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33839) 49200 return TCL_ERROR 49201 } else if objc == 2 { 49202 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49203 return TCL_ERROR 49204 } 49205 sqlite3.Xsqlite3_memdebug_vfs_oom_test = *(*int32)(unsafe.Pointer(bp)) 49206 } 49207 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_memdebug_vfs_oom_test)) 49208 return TCL_OK 49209 } 49210 49211 func Sqlitetest_malloc_Init(tls *libc.TLS, interp uintptr) int32 { 49212 var i int32 49213 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd11))/uint64(unsafe.Sizeof(struct { 49214 FzName uintptr 49215 FxProc uintptr 49216 FclientData int32 49217 F__ccgo_pad1 [4]byte 49218 }{})); i++ { 49219 var c ClientData = uintptr(intptr_t(aObjCmd11[i].FclientData)) 49220 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd11[i].FzName, aObjCmd11[i].FxProc, c, uintptr(0)) 49221 } 49222 return TCL_OK 49223 } 49224 49225 var aObjCmd11 = [32]struct { 49226 FzName uintptr 49227 FxProc uintptr 49228 FclientData int32 49229 F__ccgo_pad1 [4]byte 49230 }{ 49231 {FzName: ts + 28095, FxProc: 0}, 49232 {FzName: ts + 28110, FxProc: 0}, 49233 {FzName: ts + 33849, FxProc: 0}, 49234 {FzName: ts + 33862, FxProc: 0}, 49235 {FzName: ts + 33869, FxProc: 0}, 49236 {FzName: ts + 33876, FxProc: 0}, 49237 {FzName: ts + 33896, FxProc: 0}, 49238 {FzName: ts + 33921, FxProc: 0}, 49239 {FzName: ts + 33948, FxProc: 0}, 49240 {FzName: ts + 33970, FxProc: 0}, 49241 {FzName: ts + 33992, FxProc: 0}, 49242 {FzName: ts + 34017, FxProc: 0}, 49243 {FzName: ts + 34043, FxProc: 0}, 49244 {FzName: ts + 34073, FxProc: 0}, 49245 {FzName: ts + 34094, FxProc: 0}, 49246 {FzName: ts + 34119, FxProc: 0}, 49247 {FzName: ts + 34145, FxProc: 0}, 49248 {FzName: ts + 34160, FxProc: 0}, 49249 {FzName: ts + 34178, FxProc: 0}, 49250 {FzName: ts + 34202, FxProc: 0}, 49251 {FzName: ts + 34222, FxProc: 0}, 49252 {FzName: ts + 34247, FxProc: 0}, 49253 {FzName: ts + 34272, FxProc: 0}, 49254 {FzName: ts + 34297, FxProc: 0}, 49255 {FzName: ts + 34318, FxProc: 0}, 49256 {FzName: ts + 34337, FxProc: 0}, 49257 {FzName: ts + 34356, FxProc: 0}, 49258 {FzName: ts + 34377, FxProc: 0}, 49259 {FzName: ts + 34405, FxProc: 0, FclientData: 3}, 49260 {FzName: ts + 34426, FxProc: 0, FclientData: 5}, 49261 {FzName: ts + 34447, FxProc: 0}, 49262 {FzName: ts + 34471, FxProc: 0}, 49263 } 49264 49265 type MD5Context1 = struct { 49266 FisInit int32 49267 Fbuf [4]uint32 49268 Fbits [2]uint32 49269 Fin [64]uint8 49270 } 49271 49272 type MD5Context = MD5Context1 49273 49274 func byteReverse(tls *libc.TLS, buf uintptr, longs uint32) { 49275 var t uint32 49276 for __ccgo := true; __ccgo; __ccgo = libc.PreDecUint32(&longs, 1) != 0 { 49277 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)))) 49278 *(*uint32)(unsafe.Pointer(buf)) = t 49279 buf += uintptr(4) 49280 } 49281 } 49282 49283 func MD5Transform(tls *libc.TLS, buf uintptr, in uintptr) { 49284 var a uint32 49285 var b uint32 49286 var c uint32 49287 var d uint32 49288 49289 a = *(*uint32)(unsafe.Pointer(buf)) 49290 b = *(*uint32)(unsafe.Pointer(buf + 1*4)) 49291 c = *(*uint32)(unsafe.Pointer(buf + 2*4)) 49292 d = *(*uint32)(unsafe.Pointer(buf + 3*4)) 49293 49294 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xd76aa478) 49295 a = a<<7 | a>>(32-7) 49296 a = a + b 49297 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xe8c7b756) 49298 d = d<<12 | d>>(32-12) 49299 d = d + a 49300 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x242070db)) 49301 c = c<<17 | c>>(32-17) 49302 c = c + d 49303 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xc1bdceee) 49304 b = b<<22 | b>>(32-22) 49305 b = b + c 49306 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf57c0faf) 49307 a = a<<7 | a>>(32-7) 49308 a = a + b 49309 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + uint32(0x4787c62a)) 49310 d = d<<12 | d>>(32-12) 49311 d = d + a 49312 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa8304613) 49313 c = c<<17 | c>>(32-17) 49314 c = c + d 49315 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xfd469501) 49316 b = b<<22 | b>>(32-22) 49317 b = b + c 49318 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x698098d8)) 49319 a = a<<7 | a>>(32-7) 49320 a = a + b 49321 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0x8b44f7af) 49322 d = d<<12 | d>>(32-12) 49323 d = d + a 49324 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffff5bb1) 49325 c = c<<17 | c>>(32-17) 49326 c = c + d 49327 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0x895cd7be) 49328 b = b<<22 | b>>(32-22) 49329 b = b + c 49330 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x6b901122)) 49331 a = a<<7 | a>>(32-7) 49332 a = a + b 49333 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xfd987193) 49334 d = d<<12 | d>>(32-12) 49335 d = d + a 49336 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xa679438e) 49337 c = c<<17 | c>>(32-17) 49338 c = c + d 49339 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x49b40821)) 49340 b = b<<22 | b>>(32-22) 49341 b = b + c 49342 49343 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xf61e2562) 49344 a = a<<5 | a>>(32-5) 49345 a = a + b 49346 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xc040b340) 49347 d = d<<9 | d>>(32-9) 49348 d = d + a 49349 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x265e5a51)) 49350 c = c<<14 | c>>(32-14) 49351 c = c + d 49352 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xe9b6c7aa) 49353 b = b<<20 | b>>(32-20) 49354 b = b + c 49355 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xd62f105d) 49356 a = a<<5 | a>>(32-5) 49357 a = a + b 49358 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + uint32(0x02441453)) 49359 d = d<<9 | d>>(32-9) 49360 d = d + a 49361 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xd8a1e681) 49362 c = c<<14 | c>>(32-14) 49363 c = c + d 49364 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xe7d3fbc8) 49365 b = b<<20 | b>>(32-20) 49366 b = b + c 49367 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + uint32(0x21e1cde6)) 49368 a = a<<5 | a>>(32-5) 49369 a = a + b 49370 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xc33707d6) 49371 d = d<<9 | d>>(32-9) 49372 d = d + a 49373 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xf4d50d87) 49374 c = c<<14 | c>>(32-14) 49375 c = c + d 49376 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x455a14ed)) 49377 b = b<<20 | b>>(32-20) 49378 b = b + c 49379 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xa9e3e905) 49380 a = a<<5 | a>>(32-5) 49381 a = a + b 49382 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xfcefa3f8) 49383 d = d<<9 | d>>(32-9) 49384 d = d + a 49385 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x676f02d9)) 49386 c = c<<14 | c>>(32-14) 49387 c = c + d 49388 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0x8d2a4c8a) 49389 b = b<<20 | b>>(32-20) 49390 b = b + c 49391 49392 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfffa3942) 49393 a = a<<4 | a>>(32-4) 49394 a = a + b 49395 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 8*4)) + 0x8771f681) 49396 d = d<<11 | d>>(32-11) 49397 d = d + a 49398 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x6d9d6122)) 49399 c = c<<16 | c>>(32-16) 49400 c = c + d 49401 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xfde5380c) 49402 b = b<<23 | b>>(32-23) 49403 b = b + c 49404 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xa4beea44) 49405 a = a<<4 | a>>(32-4) 49406 a = a + b 49407 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 4*4)) + uint32(0x4bdecfa9)) 49408 d = d<<11 | d>>(32-11) 49409 d = d + a 49410 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xf6bb4b60) 49411 c = c<<16 | c>>(32-16) 49412 c = c + d 49413 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xbebfbc70) 49414 b = b<<23 | b>>(32-23) 49415 b = b + c 49416 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x289b7ec6)) 49417 a = a<<4 | a>>(32-4) 49418 a = a + b 49419 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in)) + 0xeaa127fa) 49420 d = d<<11 | d>>(32-11) 49421 d = d + a 49422 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xd4ef3085) 49423 c = c<<16 | c>>(32-16) 49424 c = c + d 49425 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 6*4)) + uint32(0x04881d05)) 49426 b = b<<23 | b>>(32-23) 49427 b = b + c 49428 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xd9d4d039) 49429 a = a<<4 | a>>(32-4) 49430 a = a + b 49431 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0xe6db99e5) 49432 d = d<<11 | d>>(32-11) 49433 d = d + a 49434 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x1fa27cf8)) 49435 c = c<<16 | c>>(32-16) 49436 c = c + d 49437 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xc4ac5665) 49438 b = b<<23 | b>>(32-23) 49439 b = b + c 49440 49441 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in)) + 0xf4292244) 49442 a = a<<6 | a>>(32-6) 49443 a = a + b 49444 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x432aff97)) 49445 d = d<<10 | d>>(32-10) 49446 d = d + a 49447 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xab9423a7) 49448 c = c<<15 | c>>(32-15) 49449 c = c + d 49450 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfc93a039) 49451 b = b<<21 | b>>(32-21) 49452 b = b + c 49453 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x655b59c3)) 49454 a = a<<6 | a>>(32-6) 49455 a = a + b 49456 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0x8f0ccc92) 49457 d = d<<10 | d>>(32-10) 49458 d = d + a 49459 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffeff47d) 49460 c = c<<15 | c>>(32-15) 49461 c = c + d 49462 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0x85845dd1) 49463 b = b<<21 | b>>(32-21) 49464 b = b + c 49465 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x6fa87e4f)) 49466 a = a<<6 | a>>(32-6) 49467 a = a + b 49468 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xfe2ce6e0) 49469 d = d<<10 | d>>(32-10) 49470 d = d + a 49471 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa3014314) 49472 c = c<<15 | c>>(32-15) 49473 c = c + d 49474 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x4e0811a1)) 49475 b = b<<21 | b>>(32-21) 49476 b = b + c 49477 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf7537e82) 49478 a = a<<6 | a>>(32-6) 49479 a = a + b 49480 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0xbd3af235) 49481 d = d<<10 | d>>(32-10) 49482 d = d + a 49483 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x2ad7d2bb)) 49484 c = c<<15 | c>>(32-15) 49485 c = c + d 49486 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xeb86d391) 49487 b = b<<21 | b>>(32-21) 49488 b = b + c 49489 49490 *(*uint32)(unsafe.Pointer(buf)) += a 49491 *(*uint32)(unsafe.Pointer(buf + 1*4)) += b 49492 *(*uint32)(unsafe.Pointer(buf + 2*4)) += c 49493 *(*uint32)(unsafe.Pointer(buf + 3*4)) += d 49494 } 49495 49496 func MD5Init(tls *libc.TLS, ctx uintptr) { 49497 (*MD5Context)(unsafe.Pointer(ctx)).FisInit = 1 49498 *(*uint32)(unsafe.Pointer(ctx + 4)) = uint32(0x67452301) 49499 *(*uint32)(unsafe.Pointer(ctx + 4 + 1*4)) = 0xefcdab89 49500 *(*uint32)(unsafe.Pointer(ctx + 4 + 2*4)) = 0x98badcfe 49501 *(*uint32)(unsafe.Pointer(ctx + 4 + 3*4)) = uint32(0x10325476) 49502 *(*uint32)(unsafe.Pointer(ctx + 20)) = uint32(0) 49503 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) = uint32(0) 49504 } 49505 49506 func MD5Update(tls *libc.TLS, ctx uintptr, buf uintptr, len uint32) { 49507 var t uint32 49508 49509 t = *(*uint32)(unsafe.Pointer(ctx + 20)) 49510 if libc.AssignPtrUint32(ctx+20, t+len<<3) < t { 49511 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4))++ 49512 } 49513 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) += len >> 29 49514 49515 t = t >> 3 & uint32(0x3f) 49516 49517 if t != 0 { 49518 var p uintptr = ctx + 28 + uintptr(t) 49519 49520 t = uint32(64) - t 49521 if len < t { 49522 libc.Xmemcpy(tls, p, buf, uint64(len)) 49523 return 49524 } 49525 libc.Xmemcpy(tls, p, buf, uint64(t)) 49526 byteReverse(tls, ctx+28, uint32(16)) 49527 MD5Transform(tls, ctx+4, ctx+28) 49528 buf += uintptr(t) 49529 len = len - t 49530 } 49531 49532 for len >= uint32(64) { 49533 libc.Xmemcpy(tls, ctx+28, buf, uint64(64)) 49534 byteReverse(tls, ctx+28, uint32(16)) 49535 MD5Transform(tls, ctx+4, ctx+28) 49536 buf += uintptr(64) 49537 len = len - uint32(64) 49538 } 49539 49540 libc.Xmemcpy(tls, ctx+28, buf, uint64(len)) 49541 } 49542 49543 func MD5Final(tls *libc.TLS, digest uintptr, ctx uintptr) { 49544 var count uint32 49545 var p uintptr 49546 49547 count = *(*uint32)(unsafe.Pointer(ctx + 20)) >> 3 & uint32(0x3F) 49548 49549 p = ctx + 28 + uintptr(count) 49550 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&p, 1))) = uint8(0x80) 49551 49552 count = uint32(64-1) - count 49553 49554 if count < uint32(8) { 49555 libc.Xmemset(tls, p, 0, uint64(count)) 49556 byteReverse(tls, ctx+28, uint32(16)) 49557 MD5Transform(tls, ctx+4, ctx+28) 49558 49559 libc.Xmemset(tls, ctx+28, 0, uint64(56)) 49560 } else { 49561 libc.Xmemset(tls, p, 0, uint64(count-uint32(8))) 49562 } 49563 byteReverse(tls, ctx+28, uint32(14)) 49564 49565 libc.Xmemcpy(tls, ctx+28+uintptr(14*4), ctx+20, uint64(8)) 49566 49567 MD5Transform(tls, ctx+4, ctx+28) 49568 byteReverse(tls, ctx+4, uint32(4)) 49569 libc.Xmemcpy(tls, digest, ctx+4, uint64(16)) 49570 } 49571 49572 func MD5DigestToBase16(tls *libc.TLS, digest uintptr, zBuf uintptr) { 49573 var i int32 49574 var j int32 49575 49576 for j = libc.AssignInt32(&i, 0); i < 16; i++ { 49577 var a int32 = int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i)))) 49578 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a>>4&0xf] 49579 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a&0xf] 49580 } 49581 *(*int8)(unsafe.Pointer(zBuf + uintptr(j))) = int8(0) 49582 } 49583 49584 var zEncode = *(*[17]int8)(unsafe.Pointer(ts + 31194)) 49585 49586 func MD5DigestToBase10x8(tls *libc.TLS, digest uintptr, zDigest uintptr) { 49587 bp := tls.Alloc(8) 49588 defer tls.Free(8) 49589 49590 var i int32 49591 var j int32 49592 var x uint32 49593 for i = libc.AssignInt32(&j, 0); i < 16; i = i + 2 { 49594 x = uint32(int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i))))*256 + int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i+1))))) 49595 if i > 0 { 49596 *(*int8)(unsafe.Pointer(zDigest + uintptr(libc.PostIncInt32(&j, 1)))) = int8('-') 49597 } 49598 sqlite3.Xsqlite3_snprintf(tls, 50-j, zDigest+uintptr(j), ts+34501, libc.VaList(bp, x)) 49599 j = j + 5 49600 } 49601 *(*int8)(unsafe.Pointer(zDigest + uintptr(j))) = int8(0) 49602 } 49603 49604 func md5_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 49605 bp := tls.Alloc(206) 49606 defer tls.Free(206) 49607 49608 var converter uintptr 49609 49610 if argc != 2 { 49611 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 49612 ts+15307, uintptr(0))) 49613 return TCL_ERROR 49614 } 49615 MD5Init(tls, bp+48) 49616 MD5Update(tls, bp+48, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 49617 MD5Final(tls, bp+140, bp+48) 49618 converter = cd 49619 (*struct { 49620 f func(*libc.TLS, uintptr, uintptr) 49621 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+140, bp+156) 49622 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+156, uintptr(0))) 49623 return TCL_OK 49624 } 49625 49626 func md5file_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 49627 bp := tls.Alloc(10428) 49628 defer tls.Free(10428) 49629 49630 var in uintptr 49631 var ofst int32 49632 var amt int32 49633 49634 var converter uintptr 49635 49636 if argc != 2 && argc != 4 { 49637 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 49638 ts+34506, uintptr(0))) 49639 return TCL_ERROR 49640 } 49641 if argc == 4 { 49642 ofst = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 49643 amt = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 49644 } else { 49645 ofst = 0 49646 amt = 2147483647 49647 } 49648 in = libc.Xfopen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4402) 49649 if in == uintptr(0) { 49650 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+34530, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 49651 ts+34552, uintptr(0))) 49652 return TCL_ERROR 49653 } 49654 libc.Xfseek(tls, in, int64(ofst), SEEK_SET) 49655 MD5Init(tls, bp+80) 49656 for amt > 0 { 49657 var n int32 49658 n = int32(libc.Xfread(tls, bp+172, uint64(1), func() uint64 { 49659 if uint64(unsafe.Sizeof([10240]int8{})) <= uint64(amt) { 49660 return uint64(unsafe.Sizeof([10240]int8{})) 49661 } 49662 return uint64(amt) 49663 }(), in)) 49664 if n <= 0 { 49665 break 49666 } 49667 MD5Update(tls, bp+80, bp+172, uint32(n)) 49668 amt = amt - n 49669 } 49670 libc.Xfclose(tls, in) 49671 MD5Final(tls, bp+10412, bp+80) 49672 converter = cd 49673 (*struct { 49674 f func(*libc.TLS, uintptr, uintptr) 49675 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+10412, bp+172) 49676 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+172, uintptr(0))) 49677 return TCL_OK 49678 } 49679 49680 func Md5_Init(tls *libc.TLS, interp uintptr) int32 { 49681 tcl.XTcl_CreateCommand(tls, interp, ts+34566, *(*uintptr)(unsafe.Pointer(&struct { 49682 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49683 }{md5_cmd})), 49684 *(*uintptr)(unsafe.Pointer(&struct { 49685 f func(*libc.TLS, uintptr, uintptr) 49686 }{MD5DigestToBase16})), uintptr(0)) 49687 tcl.XTcl_CreateCommand(tls, interp, ts+34570, *(*uintptr)(unsafe.Pointer(&struct { 49688 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49689 }{md5_cmd})), 49690 *(*uintptr)(unsafe.Pointer(&struct { 49691 f func(*libc.TLS, uintptr, uintptr) 49692 }{MD5DigestToBase10x8})), uintptr(0)) 49693 tcl.XTcl_CreateCommand(tls, interp, ts+34579, *(*uintptr)(unsafe.Pointer(&struct { 49694 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49695 }{md5file_cmd})), 49696 *(*uintptr)(unsafe.Pointer(&struct { 49697 f func(*libc.TLS, uintptr, uintptr) 49698 }{MD5DigestToBase16})), uintptr(0)) 49699 tcl.XTcl_CreateCommand(tls, interp, ts+34587, *(*uintptr)(unsafe.Pointer(&struct { 49700 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49701 }{md5file_cmd})), 49702 *(*uintptr)(unsafe.Pointer(&struct { 49703 f func(*libc.TLS, uintptr, uintptr) 49704 }{MD5DigestToBase10x8})), uintptr(0)) 49705 return TCL_OK 49706 } 49707 49708 func md5step(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49709 var p uintptr 49710 var i int32 49711 if argc < 1 { 49712 return 49713 } 49714 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 49715 if p == uintptr(0) { 49716 return 49717 } 49718 if !((*MD5Context)(unsafe.Pointer(p)).FisInit != 0) { 49719 MD5Init(tls, p) 49720 } 49721 for i = 0; i < argc; i++ { 49722 var zData uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 49723 if zData != 0 { 49724 MD5Update(tls, p, zData, uint32(int32(libc.Xstrlen(tls, zData)))) 49725 } 49726 } 49727 } 49728 49729 func md5finalize(tls *libc.TLS, context uintptr) { 49730 bp := tls.Alloc(49) 49731 defer tls.Free(49) 49732 49733 var p uintptr 49734 49735 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 49736 MD5Final(tls, bp, p) 49737 MD5DigestToBase16(tls, bp, bp+16) 49738 sqlite3.Xsqlite3_result_text(tls, context, bp+16, -1, libc.UintptrFromInt32(-1)) 49739 } 49740 49741 func Md5_Register(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 49742 var rc int32 = sqlite3.Xsqlite3_create_function(tls, db, ts+34600, -1, SQLITE_UTF8, uintptr(0), uintptr(0), 49743 *(*uintptr)(unsafe.Pointer(&struct { 49744 f func(*libc.TLS, uintptr, int32, uintptr) 49745 }{md5step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{md5finalize}))) 49746 sqlite3.Xsqlite3_overload_function(tls, db, ts+34600, -1) 49747 return rc 49748 } 49749 49750 type multiplexGroup1 = struct { 49751 FaReal uintptr 49752 FnReal int32 49753 F__ccgo_pad1 [4]byte 49754 FzName uintptr 49755 FnName int32 49756 Fflags int32 49757 FszChunk uint32 49758 FbEnabled uint8 49759 FbTruncate uint8 49760 F__ccgo_pad2 [2]byte 49761 } 49762 49763 type multiplexGroup = multiplexGroup1 49764 type multiplexConn1 = struct { 49765 Fbase sqlite3_file 49766 FpGroup uintptr 49767 } 49768 49769 type multiplexConn = multiplexConn1 49770 49771 type multiplexReal = struct { 49772 Fp uintptr 49773 Fz uintptr 49774 } 49775 49776 var gMultiplex struct { 49777 FpOrigVfs uintptr 49778 FsThisVfs sqlite3_vfs 49779 FsIoMethodsV1 sqlite3_io_methods 49780 FsIoMethodsV2 sqlite3_io_methods 49781 FisInitialized int32 49782 F__ccgo_pad1 [4]byte 49783 } 49784 49785 func multiplexStrlen30(tls *libc.TLS, z uintptr) int32 { 49786 var z2 uintptr = z 49787 if z == uintptr(0) { 49788 return 0 49789 } 49790 for *(*int8)(unsafe.Pointer(z2)) != 0 { 49791 z2++ 49792 } 49793 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 49794 } 49795 49796 func multiplexFilename(tls *libc.TLS, zBase uintptr, nBase int32, flags int32, iChunk int32, zOut uintptr) { 49797 bp := tls.Alloc(8) 49798 defer tls.Free(8) 49799 49800 var n int32 = nBase 49801 libc.Xmemcpy(tls, zOut, zBase, uint64(n+1)) 49802 if iChunk != 0 && iChunk <= MX_CHUNK_NUMBER { 49803 sqlite3.Xsqlite3_snprintf(tls, 4, zOut+uintptr(n), ts+34607, libc.VaList(bp, iChunk)) 49804 n = n + 3 49805 } 49806 49807 *(*int8)(unsafe.Pointer(zOut + uintptr(n+1))) = int8(0) 49808 } 49809 49810 func multiplexSubFilename(tls *libc.TLS, pGroup uintptr, iChunk int32) int32 { 49811 if iChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal { 49812 var p uintptr 49813 p = sqlite3.Xsqlite3_realloc64(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal, uint64(iChunk+1)*uint64(unsafe.Sizeof(multiplexReal{}))) 49814 if p == uintptr(0) { 49815 return SQLITE_NOMEM 49816 } 49817 libc.Xmemset(tls, p+uintptr((*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))*uint64(iChunk+1-(*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)) 49818 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = p 49819 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = iChunk + 1 49820 } 49821 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 49822 var z uintptr 49823 var n int32 = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName 49824 z = sqlite3.Xsqlite3_malloc64(tls, uint64(n+5)) 49825 if z == uintptr(0) { 49826 return SQLITE_NOMEM 49827 } 49828 multiplexFilename(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName, (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags, iChunk, z) 49829 (*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)) 49830 sqlite3.Xsqlite3_free(tls, z) 49831 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 49832 return SQLITE_NOMEM 49833 } 49834 } 49835 return SQLITE_OK 49836 } 49837 49838 func multiplexSubOpen(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr, pOutFlags uintptr, createFlag int32) uintptr { 49839 bp := tls.Alloc(20) 49840 defer tls.Free(20) 49841 49842 var pSubOpen uintptr = uintptr(0) 49843 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 49844 49845 *(*int32)(unsafe.Pointer(rc)) = multiplexSubFilename(tls, pGroup, iChunk) 49846 if *(*int32)(unsafe.Pointer(rc)) == SQLITE_OK && libc.AssignUintptr(&pSubOpen, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) == uintptr(0) { 49847 var flags int32 49848 49849 flags = (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags 49850 if createFlag != 0 { 49851 flags = flags | SQLITE_OPEN_CREATE 49852 } else if iChunk == 0 { 49853 } else if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 49854 return uintptr(0) 49855 } else { 49856 *(*int32)(unsafe.Pointer(rc)) = (*struct { 49857 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49858 })(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, 49859 SQLITE_ACCESS_EXISTS, bp+16) 49860 if *(*int32)(unsafe.Pointer(rc)) != 0 || !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) { 49861 if *(*int32)(unsafe.Pointer(rc)) != 0 { 49862 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34612, 49863 libc.VaList(bp, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 49864 } 49865 return uintptr(0) 49866 } 49867 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 49868 } 49869 pSubOpen = sqlite3.Xsqlite3_malloc64(tls, uint64((*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FszOsFile)) 49870 if pSubOpen == uintptr(0) { 49871 *(*int32)(unsafe.Pointer(rc)) = SQLITE_IOERR | int32(12)<<8 49872 return uintptr(0) 49873 } 49874 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = pSubOpen 49875 *(*int32)(unsafe.Pointer(rc)) = (*struct { 49876 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 49877 })(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, 49878 flags, pOutFlags) 49879 if *(*int32)(unsafe.Pointer(rc)) != SQLITE_OK { 49880 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34646, 49881 libc.VaList(bp+8, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 49882 sqlite3.Xsqlite3_free(tls, pSubOpen) 49883 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = uintptr(0) 49884 return uintptr(0) 49885 } 49886 } 49887 return pSubOpen 49888 } 49889 49890 func multiplexSubSize(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr) sqlite3_int64 { 49891 bp := tls.Alloc(8) 49892 defer tls.Free(8) 49893 49894 var pSub uintptr 49895 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 49896 49897 if *(*int32)(unsafe.Pointer(rc)) != 0 { 49898 return int64(0) 49899 } 49900 pSub = multiplexSubOpen(tls, pGroup, iChunk, rc, uintptr(0), 0) 49901 if pSub == uintptr(0) { 49902 return int64(0) 49903 } 49904 *(*int32)(unsafe.Pointer(rc)) = (*struct { 49905 f func(*libc.TLS, uintptr, uintptr) int32 49906 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSub)).FpMethods)).FxFileSize})).f(tls, pSub, bp) 49907 return *(*sqlite3_int64)(unsafe.Pointer(bp)) 49908 } 49909 49910 func multiplexControlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49911 bp := tls.Alloc(4) 49912 defer tls.Free(4) 49913 49914 var rc int32 = SQLITE_OK 49915 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 49916 var op int32 = 0 49917 49918 if !(db != 0) || argc != 2 { 49919 rc = SQLITE_ERROR 49920 } else { 49921 op = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 49922 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 49923 49924 switch op { 49925 case 1: 49926 op = MULTIPLEX_CTRL_ENABLE 49927 break 49928 fallthrough 49929 case 2: 49930 op = MULTIPLEX_CTRL_SET_CHUNK_SIZE 49931 break 49932 fallthrough 49933 case 3: 49934 op = MULTIPLEX_CTRL_SET_MAX_CHUNKS 49935 break 49936 fallthrough 49937 default: 49938 rc = SQLITE_NOTFOUND 49939 break 49940 } 49941 } 49942 if rc == SQLITE_OK { 49943 rc = sqlite3.Xsqlite3_file_control(tls, db, uintptr(0), op, bp) 49944 } 49945 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 49946 } 49947 49948 func multiplexFuncInit(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 49949 var rc int32 49950 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+34678, 2, SQLITE_ANY, 49951 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49952 f func(*libc.TLS, uintptr, int32, uintptr) 49953 }{multiplexControlFunc})), uintptr(0), uintptr(0)) 49954 return rc 49955 } 49956 49957 func multiplexSubClose(tls *libc.TLS, pGroup uintptr, iChunk int32, pOrigVfs uintptr) { 49958 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp 49959 if pSubOpen != 0 { 49960 (*struct { 49961 f func(*libc.TLS, uintptr) int32 49962 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 49963 if pOrigVfs != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz != 0 { 49964 (*struct { 49965 f func(*libc.TLS, uintptr, uintptr, int32) int32 49966 })(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) 49967 } 49968 sqlite3.Xsqlite3_free(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) 49969 } 49970 sqlite3.Xsqlite3_free_filename(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz) 49971 libc.Xmemset(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))) 49972 } 49973 49974 func multiplexFreeComponents(tls *libc.TLS, pGroup uintptr) { 49975 var i int32 49976 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 49977 multiplexSubClose(tls, pGroup, i, uintptr(0)) 49978 } 49979 sqlite3.Xsqlite3_free(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal) 49980 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = uintptr(0) 49981 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = 0 49982 } 49983 49984 func multiplexOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 49985 bp := tls.Alloc(20) 49986 defer tls.Free(20) 49987 49988 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 49989 var pMultiplexOpen uintptr 49990 var pGroup uintptr = uintptr(0) 49991 var pSubOpen uintptr = uintptr(0) 49992 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 49993 var nName int32 = 0 49994 var sz int32 = 0 49995 var zToFree uintptr = uintptr(0) 49996 49997 _ = pVfs 49998 libc.Xmemset(tls, pConn, 0, uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile)) 49999 50000 pMultiplexOpen = pConn 50001 50002 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50003 if zName != 0 { 50004 nName = multiplexStrlen30(tls, zName) 50005 } else { 50006 nName = 0 50007 } 50008 sz = int32(uint64(unsafe.Sizeof(multiplexGroup{})) + 50009 uint64(nName) + uint64(1)) 50010 pGroup = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 50011 if pGroup == uintptr(0) { 50012 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 50013 } 50014 } 50015 50016 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50017 var zUri uintptr 50018 if flags&SQLITE_OPEN_URI != 0 { 50019 zUri = zName 50020 } else { 50021 zUri = uintptr(0) 50022 } 50023 50024 libc.Xmemset(tls, pGroup, 0, uint64(sz)) 50025 (*multiplexConn)(unsafe.Pointer(pMultiplexOpen)).FpGroup = pGroup 50026 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = libc.Uint8(libc.Uint8FromInt32(-1)) 50027 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(sqlite3.Xsqlite3_uri_boolean(tls, zUri, ts+18304, 50028 libc.Bool32(flags&SQLITE_OPEN_MAIN_DB == 0))) 50029 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(sqlite3.Xsqlite3_uri_int64(tls, zUri, ts+34696, 50030 int64(SQLITE_MULTIPLEX_CHUNK_SIZE)))) 50031 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = ((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk + uint32(0xffff)) & libc.Uint32FromInt32(libc.CplInt32(0xffff)) 50032 if zName != 0 { 50033 var p uintptr = pGroup + 1*40 50034 (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName = p 50035 libc.Xmemcpy(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, zName, uint64(nName+1)) 50036 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName = nName 50037 } 50038 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 50039 for uint32(sqlite3.Xsqlite3PendingByte)%(*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk-uint32(65536) { 50040 *(*uint32)(unsafe.Pointer(pGroup + 32)) += uint32(65536) 50041 } 50042 } 50043 (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags = flags & libc.CplInt32(SQLITE_OPEN_URI) 50044 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, 1) 50045 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50046 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp, pOutFlags, 0) 50047 if pSubOpen == uintptr(0) && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50048 *(*int32)(unsafe.Pointer(bp)) = SQLITE_CANTOPEN 50049 } 50050 } 50051 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50052 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50053 f func(*libc.TLS, uintptr, uintptr) int32 50054 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp+8) 50055 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && zName != 0 { 50056 if flags&SQLITE_OPEN_SUPER_JOURNAL != 0 { 50057 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 50058 } else if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 50059 if flags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 50060 var iChunk int32 = 1 50061 for __ccgo := true; __ccgo; __ccgo = *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 50062 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50063 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50064 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, 50065 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, SQLITE_ACCESS_EXISTS, bp+16) 50066 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 50067 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50068 f func(*libc.TLS, uintptr, uintptr, int32) int32 50069 })(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) 50070 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50071 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, libc.PreIncInt32(&iChunk, 1)) 50072 } 50073 } 50074 } 50075 } 50076 } else { 50077 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50078 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50079 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+1*16)).Fz, 50080 SQLITE_ACCESS_EXISTS, bp+16) 50081 *(*int32)(unsafe.Pointer(bp + 16)) = libc.Bool32(multiplexSubSize(tls, pGroup, 1, bp) > int64(0)) 50082 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) && 50083 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) != sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 50084 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)))) 50085 } 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) { 50086 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 50087 } 50088 } 50089 } 50090 } 50091 50092 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50093 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 50094 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 176 50095 } else { 50096 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 328 50097 } 50098 } else { 50099 multiplexFreeComponents(tls, pGroup) 50100 sqlite3.Xsqlite3_free(tls, pGroup) 50101 } 50102 } 50103 sqlite3.Xsqlite3_free(tls, zToFree) 50104 return *(*int32)(unsafe.Pointer(bp)) 50105 } 50106 50107 func multiplexDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 50108 bp := tls.Alloc(4) 50109 defer tls.Free(4) 50110 50111 var rc int32 50112 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50113 rc = (*struct { 50114 f func(*libc.TLS, uintptr, uintptr, int32) int32 50115 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 50116 if rc == SQLITE_OK { 50117 var nName int32 = int32(libc.Xstrlen(tls, zName)) 50118 var z uintptr 50119 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nName+5)) 50120 if z == uintptr(0) { 50121 rc = SQLITE_IOERR | int32(12)<<8 50122 } else { 50123 var iChunk int32 = 0 50124 50125 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 50126 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreIncInt32(&iChunk, 1), z) 50127 rc = (*struct { 50128 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50129 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 50130 } 50131 for rc == SQLITE_OK && iChunk > 1 { 50132 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreDecInt32(&iChunk, 1), z) 50133 rc = (*struct { 50134 f func(*libc.TLS, uintptr, uintptr, int32) int32 50135 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 50136 } 50137 if rc == SQLITE_OK { 50138 iChunk = 0 50139 for __ccgo1 := true; __ccgo1; __ccgo1 = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 50140 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreIncInt32(&iChunk, 1), z) 50141 rc = (*struct { 50142 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50143 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 50144 } 50145 for rc == SQLITE_OK && iChunk > 1 { 50146 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreDecInt32(&iChunk, 1), z) 50147 rc = (*struct { 50148 f func(*libc.TLS, uintptr, uintptr, int32) int32 50149 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 50150 } 50151 } 50152 } 50153 sqlite3.Xsqlite3_free(tls, z) 50154 } 50155 return rc 50156 } 50157 50158 func multiplexAccess(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 50159 return (*struct { 50160 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50161 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxAccess})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 50162 } 50163 50164 func multiplexFullPathname(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 50165 return (*struct { 50166 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50167 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxFullPathname})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 50168 } 50169 50170 func multiplexDlOpen(tls *libc.TLS, a uintptr, b uintptr) uintptr { 50171 return (*struct { 50172 f func(*libc.TLS, uintptr, uintptr) uintptr 50173 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlOpen})).f(tls, gMultiplex.FpOrigVfs, b) 50174 } 50175 50176 func multiplexDlError(tls *libc.TLS, a uintptr, b int32, c uintptr) { 50177 (*struct { 50178 f func(*libc.TLS, uintptr, int32, uintptr) 50179 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlError})).f(tls, gMultiplex.FpOrigVfs, b, c) 50180 } 50181 50182 func multiplexDlSym(tls *libc.TLS, a uintptr, b uintptr, c uintptr) uintptr { 50183 return (*struct { 50184 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 50185 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlSym})).f(tls, gMultiplex.FpOrigVfs, b, c) 50186 } 50187 50188 func multiplexDlClose(tls *libc.TLS, a uintptr, b uintptr) { 50189 (*struct { 50190 f func(*libc.TLS, uintptr, uintptr) 50191 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlClose})).f(tls, gMultiplex.FpOrigVfs, b) 50192 } 50193 50194 func multiplexRandomness(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 50195 return (*struct { 50196 f func(*libc.TLS, uintptr, int32, uintptr) int32 50197 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxRandomness})).f(tls, gMultiplex.FpOrigVfs, b, c) 50198 } 50199 50200 func multiplexSleep(tls *libc.TLS, a uintptr, b int32) int32 { 50201 return (*struct { 50202 f func(*libc.TLS, uintptr, int32) int32 50203 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxSleep})).f(tls, gMultiplex.FpOrigVfs, b) 50204 } 50205 50206 func multiplexCurrentTime(tls *libc.TLS, a uintptr, b uintptr) int32 { 50207 return (*struct { 50208 f func(*libc.TLS, uintptr, uintptr) int32 50209 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTime})).f(tls, gMultiplex.FpOrigVfs, b) 50210 } 50211 50212 func multiplexGetLastError(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 50213 if (*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError != 0 { 50214 return (*struct { 50215 f func(*libc.TLS, uintptr, int32, uintptr) int32 50216 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError})).f(tls, gMultiplex.FpOrigVfs, b, c) 50217 } else { 50218 return 0 50219 } 50220 return int32(0) 50221 } 50222 50223 func multiplexCurrentTimeInt64(tls *libc.TLS, a uintptr, b uintptr) int32 { 50224 return (*struct { 50225 f func(*libc.TLS, uintptr, uintptr) int32 50226 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTimeInt64})).f(tls, gMultiplex.FpOrigVfs, b) 50227 } 50228 50229 func multiplexClose(tls *libc.TLS, pConn uintptr) int32 { 50230 var p uintptr = pConn 50231 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50232 var rc int32 = SQLITE_OK 50233 multiplexFreeComponents(tls, pGroup) 50234 sqlite3.Xsqlite3_free(tls, pGroup) 50235 return rc 50236 } 50237 50238 func multiplexRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 50239 bp := tls.Alloc(4) 50240 defer tls.Free(4) 50241 50242 var p uintptr = pConn 50243 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50244 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50245 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50246 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50247 if pSubOpen == uintptr(0) { 50248 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 50249 } else { 50250 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50251 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50252 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 50253 } 50254 } else { 50255 for iAmt > 0 { 50256 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50257 var pSubOpen uintptr 50258 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 50259 if pSubOpen != 0 { 50260 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 50261 if extra < 0 { 50262 extra = 0 50263 } 50264 iAmt = iAmt - extra 50265 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50266 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50267 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, 50268 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50269 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 50270 break 50271 } 50272 pBuf = pBuf + uintptr(iAmt) 50273 iOfst = iOfst + sqlite3_int64(iAmt) 50274 iAmt = extra 50275 } else { 50276 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 50277 break 50278 } 50279 } 50280 } 50281 50282 return *(*int32)(unsafe.Pointer(bp)) 50283 } 50284 50285 func multiplexWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 50286 bp := tls.Alloc(4) 50287 defer tls.Free(4) 50288 50289 var p uintptr = pConn 50290 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50291 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50292 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50293 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50294 if pSubOpen == uintptr(0) { 50295 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(3)<<8 50296 } else { 50297 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50298 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50299 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 50300 } 50301 } else { 50302 for *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && iAmt > 0 { 50303 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50304 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 50305 if pSubOpen != 0 { 50306 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 50307 if extra < 0 { 50308 extra = 0 50309 } 50310 iAmt = iAmt - extra 50311 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50312 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50313 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, 50314 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50315 pBuf = pBuf + uintptr(iAmt) 50316 iOfst = iOfst + sqlite3_int64(iAmt) 50317 iAmt = extra 50318 } 50319 } 50320 } 50321 return *(*int32)(unsafe.Pointer(bp)) 50322 } 50323 50324 func multiplexTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 50325 bp := tls.Alloc(4) 50326 defer tls.Free(4) 50327 50328 var p uintptr = pConn 50329 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50330 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50331 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50332 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50333 if pSubOpen == uintptr(0) { 50334 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 50335 } else { 50336 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50337 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50338 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 50339 } 50340 } else { 50341 var i int32 50342 var iBaseGroup int32 = int32(size / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50343 var pSubOpen uintptr 50344 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50345 50346 for i = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal - 1; i > iBaseGroup && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i-- { 50347 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 50348 multiplexSubClose(tls, pGroup, i, pOrigVfs) 50349 } else { 50350 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 0) 50351 if pSubOpen != 0 { 50352 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50353 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50354 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, int64(0)) 50355 } 50356 } 50357 } 50358 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50359 pSubOpen = multiplexSubOpen(tls, pGroup, iBaseGroup, bp, uintptr(0), 0) 50360 if pSubOpen != 0 { 50361 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50362 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50363 })(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)) 50364 } 50365 } 50366 if *(*int32)(unsafe.Pointer(bp)) != 0 { 50367 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 50368 } 50369 } 50370 return *(*int32)(unsafe.Pointer(bp)) 50371 } 50372 50373 func multiplexSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 50374 var p uintptr = pConn 50375 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50376 var rc int32 = SQLITE_OK 50377 var i int32 50378 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 50379 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(i)*16)).Fp 50380 if pSubOpen != 0 { 50381 var rc2 int32 = (*struct { 50382 f func(*libc.TLS, uintptr, int32) int32 50383 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 50384 if rc2 != SQLITE_OK { 50385 rc = rc2 50386 } 50387 } 50388 } 50389 return rc 50390 } 50391 50392 func multiplexFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 50393 bp := tls.Alloc(4) 50394 defer tls.Free(4) 50395 50396 var p uintptr = pConn 50397 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50398 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50399 var i int32 50400 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50401 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50402 if pSubOpen == uintptr(0) { 50403 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(7)<<8 50404 } else { 50405 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50406 f func(*libc.TLS, uintptr, uintptr) int32 50407 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, pSize) 50408 } 50409 } else { 50410 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = int64(0) 50411 for i = 0; *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i++ { 50412 var sz sqlite3_int64 = multiplexSubSize(tls, pGroup, i, bp) 50413 if sz == int64(0) { 50414 break 50415 } 50416 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = sqlite3_int64(i)*sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) + sz 50417 } 50418 } 50419 return *(*int32)(unsafe.Pointer(bp)) 50420 } 50421 50422 func multiplexLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 50423 bp := tls.Alloc(4) 50424 defer tls.Free(4) 50425 50426 var p uintptr = pConn 50427 50428 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50429 if pSubOpen != 0 { 50430 return (*struct { 50431 f func(*libc.TLS, uintptr, int32) int32 50432 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 50433 } 50434 return SQLITE_BUSY 50435 } 50436 50437 func multiplexUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 50438 bp := tls.Alloc(4) 50439 defer tls.Free(4) 50440 50441 var p uintptr = pConn 50442 50443 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50444 if pSubOpen != 0 { 50445 return (*struct { 50446 f func(*libc.TLS, uintptr, int32) int32 50447 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 50448 } 50449 return SQLITE_IOERR | int32(8)<<8 50450 } 50451 50452 func multiplexCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 50453 bp := tls.Alloc(4) 50454 defer tls.Free(4) 50455 50456 var p uintptr = pConn 50457 50458 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50459 if pSubOpen != 0 { 50460 return (*struct { 50461 f func(*libc.TLS, uintptr, uintptr) int32 50462 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 50463 } 50464 return SQLITE_IOERR | int32(14)<<8 50465 } 50466 50467 func multiplexFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 50468 bp := tls.Alloc(44) 50469 defer tls.Free(44) 50470 50471 var p uintptr = pConn 50472 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50473 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 50474 var pSubOpen uintptr 50475 50476 if !(gMultiplex.FisInitialized != 0) { 50477 return SQLITE_MISUSE 50478 } 50479 switch op { 50480 case MULTIPLEX_CTRL_ENABLE: 50481 if pArg != 0 { 50482 var bEnabled int32 = *(*int32)(unsafe.Pointer(pArg)) 50483 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(bEnabled) 50484 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50485 } 50486 break 50487 case MULTIPLEX_CTRL_SET_CHUNK_SIZE: 50488 if pArg != 0 { 50489 var szChunk uint32 = *(*uint32)(unsafe.Pointer(pArg)) 50490 if szChunk < uint32(1) { 50491 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_MISUSE 50492 } else { 50493 szChunk = szChunk + uint32(MAX_PAGE_SIZE-1) 50494 szChunk = szChunk & libc.Uint32FromInt32(libc.CplInt32(MAX_PAGE_SIZE-1)) 50495 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = szChunk 50496 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50497 } 50498 } 50499 break 50500 case MULTIPLEX_CTRL_SET_MAX_CHUNKS: 50501 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50502 break 50503 case SQLITE_FCNTL_SIZE_HINT: 50504 fallthrough 50505 case SQLITE_FCNTL_CHUNK_SIZE: 50506 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50507 break 50508 case SQLITE_FCNTL_PRAGMA: 50509 { 50510 var aFcntl uintptr = pArg 50511 50512 if *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)) != 0 && sqlite3.Xsqlite3_strnicmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34706, 10) == 0 { 50513 *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) = int64(0) 50514 multiplexFileSize(tls, pConn, bp+32) 50515 50516 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34717) == 0 { 50517 if *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(aFcntl + 2*8)))) != 0 { 50518 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4178) == 0 || 50519 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+28949) == 0 { 50520 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(1) 50521 } else if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4542) == 0 || 50522 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+14193) == 0 { 50523 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(0) 50524 } 50525 } 50526 50527 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, func() uintptr { 50528 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 50529 return ts + 4178 50530 } 50531 return ts + 4542 50532 }(), 0) 50533 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50534 break 50535 } 50536 50537 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34736) == 0 { 50538 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, libc.Bool32(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0))) 50539 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50540 break 50541 } 50542 50543 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34754) == 0 && 50544 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 50545 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+17791, libc.VaList(bp+8, (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50546 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50547 break 50548 } 50549 50550 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34774) == 0 { 50551 var n int32 = 0 50552 var ii int32 50553 for ii = 0; ii < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; ii++ { 50554 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(ii)*16)).Fp != uintptr(0) { 50555 n++ 50556 } 50557 } 50558 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+16, n)) 50559 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50560 break 50561 } 50562 } 50563 50564 } 50565 fallthrough 50566 default: 50567 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp+40, uintptr(0), 0) 50568 if pSubOpen != 0 { 50569 *(*int32)(unsafe.Pointer(bp + 40)) = (*struct { 50570 f func(*libc.TLS, uintptr, int32, uintptr) int32 50571 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 50572 if op == SQLITE_FCNTL_VFSNAME && *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 50573 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+34794, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(pArg)))) 50574 } 50575 } 50576 break 50577 } 50578 return *(*int32)(unsafe.Pointer(bp + 40)) 50579 } 50580 50581 func multiplexSectorSize(tls *libc.TLS, pConn uintptr) int32 { 50582 bp := tls.Alloc(4) 50583 defer tls.Free(4) 50584 50585 var p uintptr = pConn 50586 50587 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50588 if pSubOpen != 0 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize != 0 { 50589 return (*struct { 50590 f func(*libc.TLS, uintptr) int32 50591 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 50592 } 50593 return DEFAULT_SECTOR_SIZE 50594 } 50595 50596 func multiplexDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 50597 bp := tls.Alloc(4) 50598 defer tls.Free(4) 50599 50600 var p uintptr = pConn 50601 50602 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50603 if pSubOpen != 0 { 50604 return (*struct { 50605 f func(*libc.TLS, uintptr) int32 50606 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 50607 } 50608 return 0 50609 } 50610 50611 func multiplexShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 50612 bp := tls.Alloc(4) 50613 defer tls.Free(4) 50614 50615 var p uintptr = pConn 50616 50617 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50618 if pSubOpen != 0 { 50619 return (*struct { 50620 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 50621 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 50622 } 50623 return SQLITE_IOERR 50624 } 50625 50626 func multiplexShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 50627 bp := tls.Alloc(4) 50628 defer tls.Free(4) 50629 50630 var p uintptr = pConn 50631 50632 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50633 if pSubOpen != 0 { 50634 return (*struct { 50635 f func(*libc.TLS, uintptr, int32, int32, int32) int32 50636 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 50637 } 50638 return SQLITE_BUSY 50639 } 50640 50641 func multiplexShmBarrier(tls *libc.TLS, pConn uintptr) { 50642 bp := tls.Alloc(4) 50643 defer tls.Free(4) 50644 50645 var p uintptr = pConn 50646 50647 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50648 if pSubOpen != 0 { 50649 (*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) 50650 } 50651 } 50652 50653 func multiplexShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 50654 bp := tls.Alloc(4) 50655 defer tls.Free(4) 50656 50657 var p uintptr = pConn 50658 50659 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50660 if pSubOpen != 0 { 50661 return (*struct { 50662 f func(*libc.TLS, uintptr, int32) int32 50663 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 50664 } 50665 return SQLITE_OK 50666 } 50667 50668 func sqlite3_multiplex_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 50669 var pOrigVfs uintptr 50670 if gMultiplex.FisInitialized != 0 { 50671 return SQLITE_MISUSE 50672 } 50673 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 50674 if pOrigVfs == uintptr(0) { 50675 return SQLITE_ERROR 50676 } 50677 50678 gMultiplex.FisInitialized = 1 50679 gMultiplex.FpOrigVfs = pOrigVfs 50680 gMultiplex.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 50681 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gMultiplex)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(multiplexConn{}))) 50682 gMultiplex.FsThisVfs.FzName = ts + 34807 50683 gMultiplex.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 50684 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 50685 }{multiplexOpen})) 50686 gMultiplex.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 50687 f func(*libc.TLS, uintptr, uintptr, int32) int32 50688 }{multiplexDelete})) 50689 gMultiplex.FsThisVfs.FxAccess = *(*uintptr)(unsafe.Pointer(&struct { 50690 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50691 }{multiplexAccess})) 50692 gMultiplex.FsThisVfs.FxFullPathname = *(*uintptr)(unsafe.Pointer(&struct { 50693 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50694 }{multiplexFullPathname})) 50695 gMultiplex.FsThisVfs.FxDlOpen = *(*uintptr)(unsafe.Pointer(&struct { 50696 f func(*libc.TLS, uintptr, uintptr) uintptr 50697 }{multiplexDlOpen})) 50698 gMultiplex.FsThisVfs.FxDlError = *(*uintptr)(unsafe.Pointer(&struct { 50699 f func(*libc.TLS, uintptr, int32, uintptr) 50700 }{multiplexDlError})) 50701 gMultiplex.FsThisVfs.FxDlSym = *(*uintptr)(unsafe.Pointer(&struct { 50702 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 50703 }{multiplexDlSym})) 50704 gMultiplex.FsThisVfs.FxDlClose = *(*uintptr)(unsafe.Pointer(&struct { 50705 f func(*libc.TLS, uintptr, uintptr) 50706 }{multiplexDlClose})) 50707 gMultiplex.FsThisVfs.FxRandomness = *(*uintptr)(unsafe.Pointer(&struct { 50708 f func(*libc.TLS, uintptr, int32, uintptr) int32 50709 }{multiplexRandomness})) 50710 gMultiplex.FsThisVfs.FxSleep = *(*uintptr)(unsafe.Pointer(&struct { 50711 f func(*libc.TLS, uintptr, int32) int32 50712 }{multiplexSleep})) 50713 gMultiplex.FsThisVfs.FxCurrentTime = *(*uintptr)(unsafe.Pointer(&struct { 50714 f func(*libc.TLS, uintptr, uintptr) int32 50715 }{multiplexCurrentTime})) 50716 gMultiplex.FsThisVfs.FxGetLastError = *(*uintptr)(unsafe.Pointer(&struct { 50717 f func(*libc.TLS, uintptr, int32, uintptr) int32 50718 }{multiplexGetLastError})) 50719 gMultiplex.FsThisVfs.FxCurrentTimeInt64 = *(*uintptr)(unsafe.Pointer(&struct { 50720 f func(*libc.TLS, uintptr, uintptr) int32 50721 }{multiplexCurrentTimeInt64})) 50722 50723 gMultiplex.FsIoMethodsV1.FiVersion = 1 50724 gMultiplex.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 50725 f func(*libc.TLS, uintptr) int32 50726 }{multiplexClose})) 50727 gMultiplex.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 50728 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50729 }{multiplexRead})) 50730 gMultiplex.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 50731 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50732 }{multiplexWrite})) 50733 gMultiplex.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 50734 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50735 }{multiplexTruncate})) 50736 gMultiplex.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 50737 f func(*libc.TLS, uintptr, int32) int32 50738 }{multiplexSync})) 50739 gMultiplex.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 50740 f func(*libc.TLS, uintptr, uintptr) int32 50741 }{multiplexFileSize})) 50742 gMultiplex.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 50743 f func(*libc.TLS, uintptr, int32) int32 50744 }{multiplexLock})) 50745 gMultiplex.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 50746 f func(*libc.TLS, uintptr, int32) int32 50747 }{multiplexUnlock})) 50748 gMultiplex.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 50749 f func(*libc.TLS, uintptr, uintptr) int32 50750 }{multiplexCheckReservedLock})) 50751 gMultiplex.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 50752 f func(*libc.TLS, uintptr, int32, uintptr) int32 50753 }{multiplexFileControl})) 50754 gMultiplex.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 50755 f func(*libc.TLS, uintptr) int32 50756 }{multiplexSectorSize})) 50757 gMultiplex.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 50758 f func(*libc.TLS, uintptr) int32 50759 }{multiplexDeviceCharacteristics})) 50760 gMultiplex.FsIoMethodsV2 = gMultiplex.FsIoMethodsV1 50761 gMultiplex.FsIoMethodsV2.FiVersion = 2 50762 gMultiplex.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 50763 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 50764 }{multiplexShmMap})) 50765 gMultiplex.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 50766 f func(*libc.TLS, uintptr, int32, int32, int32) int32 50767 }{multiplexShmLock})) 50768 gMultiplex.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{multiplexShmBarrier})) 50769 gMultiplex.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 50770 f func(*libc.TLS, uintptr, int32) int32 50771 }{multiplexShmUnmap})) 50772 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gMultiplex))+8, makeDefault) 50773 50774 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 50775 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 50776 }{multiplexFuncInit}))) 50777 50778 return SQLITE_OK 50779 } 50780 50781 func sqlite3_multiplex_shutdown(tls *libc.TLS, eForce int32) int32 { 50782 var rc int32 = SQLITE_OK 50783 if gMultiplex.FisInitialized == 0 { 50784 return SQLITE_MISUSE 50785 } 50786 gMultiplex.FisInitialized = 0 50787 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gMultiplex))+8) 50788 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gMultiplex)), 0, uint64(unsafe.Sizeof(gMultiplex))) 50789 return rc 50790 } 50791 50792 func test_multiplex_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50793 bp := tls.Alloc(4) 50794 defer tls.Free(4) 50795 50796 var zName uintptr 50797 50798 var rc int32 50799 50800 _ = clientData 50801 50802 if objc != 3 { 50803 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 50804 return TCL_ERROR 50805 } 50806 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 50807 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 50808 return TCL_ERROR 50809 } 50810 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 50811 zName = uintptr(0) 50812 } 50813 50814 rc = sqlite3_multiplex_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 50815 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 50816 50817 return TCL_OK 50818 } 50819 50820 func test_multiplex_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50821 var rc int32 50822 50823 _ = clientData 50824 50825 if objc == 2 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+34834) != 0 { 50826 objc = 3 50827 } 50828 if objc != 1 && objc != 2 { 50829 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34841) 50830 return TCL_ERROR 50831 } 50832 50833 rc = sqlite3_multiplex_shutdown(tls, libc.Bool32(objc == 2)) 50834 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 50835 50836 return TCL_OK 50837 } 50838 50839 func test_multiplex_control(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 50840 bp := tls.Alloc(176) 50841 defer tls.Free(176) 50842 50843 var rc int32 50844 50845 var db uintptr 50846 *(*int32)(unsafe.Pointer(bp + 172)) = 0 50847 var pArg uintptr = uintptr(0) 50848 50849 *(*[4]struct { 50850 FzName uintptr 50851 Fop int32 50852 Fargtype int32 50853 })(unsafe.Pointer(bp + 104)) = [4]struct { 50854 FzName uintptr 50855 Fop int32 50856 Fargtype int32 50857 }{ 50858 {FzName: ts + 10145, Fop: MULTIPLEX_CTRL_ENABLE, Fargtype: 1}, 50859 {FzName: ts + 34850, Fop: MULTIPLEX_CTRL_SET_CHUNK_SIZE, Fargtype: 1}, 50860 {FzName: ts + 34861, Fop: MULTIPLEX_CTRL_SET_MAX_CHUNKS, Fargtype: 1}, 50861 {}, 50862 } 50863 50864 if objc != 5 { 50865 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34872) 50866 return TCL_ERROR 50867 } 50868 50869 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) { 50870 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+34908, 0)) 50871 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+11945, 0)) 50872 return TCL_ERROR 50873 } else { 50874 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 40)).FobjClientData)) 50875 } 50876 50877 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 50878 interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+104, int32(unsafe.Sizeof(struct { 50879 FzName uintptr 50880 Fop int32 50881 Fargtype int32 50882 }{})), ts+2014, 0, bp+168) 50883 if rc != TCL_OK { 50884 return rc 50885 } 50886 50887 switch (*struct { 50888 FzName uintptr 50889 Fop int32 50890 Fargtype int32 50891 })(unsafe.Pointer(bp + 104 + uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fargtype { 50892 case 1: 50893 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+172) != 0 { 50894 return TCL_ERROR 50895 } 50896 pArg = bp + 172 50897 break 50898 default: 50899 tcl.XTcl_WrongNumArgs(tls, interp, 4, objv, ts+2523) 50900 return TCL_ERROR 50901 } 50902 50903 rc = sqlite3.Xsqlite3_file_control(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), (*struct { 50904 FzName uintptr 50905 Fop int32 50906 Fargtype int32 50907 })(unsafe.Pointer(bp+104+uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fop, pArg) 50908 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 50909 if rc == SQLITE_OK { 50910 return TCL_OK 50911 } 50912 return TCL_ERROR 50913 } 50914 50915 func Sqlitemultiplex_Init(tls *libc.TLS, interp uintptr) int32 { 50916 var i int32 50917 50918 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd7))/uint64(unsafe.Sizeof(struct { 50919 FzName uintptr 50920 FxProc uintptr 50921 }{})); i++ { 50922 tcl.XTcl_CreateObjCommand(tls, interp, aCmd7[i].FzName, aCmd7[i].FxProc, uintptr(0), uintptr(0)) 50923 } 50924 50925 return TCL_OK 50926 } 50927 50928 var aCmd7 = [3]struct { 50929 FzName uintptr 50930 FxProc uintptr 50931 }{ 50932 {FzName: ts + 34940, FxProc: 0}, 50933 {FzName: ts + 34969, FxProc: 0}, 50934 {FzName: ts + 34996, FxProc: 0}, 50935 } 50936 50937 type sqlite3_mutex = sqlite3_mutex1 50938 50939 var aName = [15]uintptr{ 50940 ts + 35022, ts + 35027, ts + 35037, ts + 35049, 50941 ts + 35060, ts + 35072, ts + 35084, ts + 35095, 50942 ts + 35107, ts + 35119, ts + 35131, ts + 35143, 50943 ts + 35155, ts + 35167, uintptr(0), 50944 } 50945 50946 type test_mutex_globals = struct { 50947 FisInstalled int32 50948 FdisableInit int32 50949 FdisableTry int32 50950 FisInit int32 50951 Fm sqlite3_mutex_methods 50952 FaCounter [14]int32 50953 FaStatic [12]sqlite3_mutex 50954 } 50955 50956 var g3 = test_mutex_globals{} 50957 50958 func counterMutexHeld(tls *libc.TLS, p uintptr) int32 { 50959 return (*struct { 50960 f func(*libc.TLS, uintptr) int32 50961 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexHeld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 50962 } 50963 50964 func counterMutexNotheld(tls *libc.TLS, p uintptr) int32 { 50965 return (*struct { 50966 f func(*libc.TLS, uintptr) int32 50967 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexNotheld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 50968 } 50969 50970 func counterMutexInit(tls *libc.TLS) int32 { 50971 var rc int32 50972 if g3.FdisableInit != 0 { 50973 return g3.FdisableInit 50974 } 50975 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexInit})).f(tls) 50976 g3.FisInit = 1 50977 return rc 50978 } 50979 50980 func counterMutexEnd(tls *libc.TLS) int32 { 50981 g3.FisInit = 0 50982 return (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnd})).f(tls) 50983 } 50984 50985 func counterMutexAlloc(tls *libc.TLS, eType int32) uintptr { 50986 var pReal uintptr 50987 var pRet uintptr = uintptr(0) 50988 50989 pReal = (*struct { 50990 f func(*libc.TLS, int32) uintptr 50991 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexAlloc})).f(tls, eType) 50992 if !(pReal != 0) { 50993 return uintptr(0) 50994 } 50995 50996 if eType == SQLITE_MUTEX_FAST || eType == SQLITE_MUTEX_RECURSIVE { 50997 pRet = libc.Xmalloc(tls, uint64(unsafe.Sizeof(sqlite3_mutex{}))) 50998 } else { 50999 var eStaticType int32 = eType - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_RECURSIVE + 1))) 51000 51001 pRet = uintptr(unsafe.Pointer(&g3)) + 144 + uintptr(eStaticType)*16 51002 } 51003 51004 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FeType = eType 51005 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FpReal = pReal 51006 return pRet 51007 } 51008 51009 func counterMutexFree(tls *libc.TLS, p uintptr) { 51010 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexFree})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51011 if (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_FAST || (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_RECURSIVE { 51012 libc.Xfree(tls, p) 51013 } 51014 } 51015 51016 func counterMutexEnter(tls *libc.TLS, p uintptr) { 51017 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51018 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnter})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51019 } 51020 51021 func counterMutexTry(tls *libc.TLS, p uintptr) int32 { 51022 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51023 if g3.FdisableTry != 0 { 51024 return SQLITE_BUSY 51025 } 51026 return (*struct { 51027 f func(*libc.TLS, uintptr) int32 51028 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexTry})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51029 } 51030 51031 func counterMutexLeave(tls *libc.TLS, p uintptr) { 51032 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexLeave})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51033 } 51034 51035 func test_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51036 var rc int32 51037 51038 if objc != 1 { 51039 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51040 return TCL_ERROR 51041 } 51042 51043 rc = sqlite3.Xsqlite3_shutdown(tls) 51044 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51045 return TCL_OK 51046 } 51047 51048 func test_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51049 var rc int32 51050 51051 if objc != 1 { 51052 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51053 return TCL_ERROR 51054 } 51055 51056 rc = sqlite3.Xsqlite3_initialize(tls) 51057 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51058 return TCL_OK 51059 } 51060 51061 func test_install_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51062 bp := tls.Alloc(136) 51063 defer tls.Free(136) 51064 51065 var rc int32 = SQLITE_OK 51066 51067 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 64)) = sqlite3_mutex_methods{ 51068 FxMutexInit: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexInit})), 51069 FxMutexEnd: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexEnd})), 51070 FxMutexAlloc: *(*uintptr)(unsafe.Pointer(&struct { 51071 f func(*libc.TLS, int32) uintptr 51072 }{counterMutexAlloc})), 51073 FxMutexFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexFree})), 51074 FxMutexEnter: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexEnter})), 51075 FxMutexTry: *(*uintptr)(unsafe.Pointer(&struct { 51076 f func(*libc.TLS, uintptr) int32 51077 }{counterMutexTry})), 51078 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexLeave})), 51079 FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 51080 f func(*libc.TLS, uintptr) int32 51081 }{counterMutexHeld})), 51082 FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 51083 f func(*libc.TLS, uintptr) int32 51084 }{counterMutexNotheld})), 51085 } 51086 51087 if objc != 2 { 51088 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 51089 return TCL_ERROR 51090 } 51091 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+56) { 51092 return TCL_ERROR 51093 } 51094 51095 if *(*int32)(unsafe.Pointer(bp + 56)) == g3.FisInstalled { 51096 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35179, 0)) 51097 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, func() uintptr { 51098 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 51099 return ts + 35199 51100 } 51101 return ts + 35217 51102 }(), 0)) 51103 return TCL_ERROR 51104 } 51105 51106 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 51107 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp+32, uintptr(unsafe.Pointer(&g3))+16)) 51108 if rc == SQLITE_OK { 51109 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+40, bp+64)) 51110 } 51111 g3.FdisableTry = 0 51112 } else { 51113 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+48, uintptr(unsafe.Pointer(&g3))+16)) 51114 libc.Xmemset(tls, uintptr(unsafe.Pointer(&g3))+16, 0, uint64(unsafe.Sizeof(sqlite3_mutex_methods{}))) 51115 } 51116 51117 if rc == SQLITE_OK { 51118 g3.FisInstalled = *(*int32)(unsafe.Pointer(bp + 56)) 51119 } 51120 51121 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51122 return TCL_OK 51123 } 51124 51125 func test_read_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51126 var pRet uintptr 51127 var ii int32 51128 51129 if objc != 1 { 51130 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51131 return TCL_ERROR 51132 } 51133 51134 pRet = tcl.XTcl_NewObj(tls) 51135 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 51136 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 51137 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, aName[ii], -1)) 51138 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)))) 51139 } 51140 tcl.XTcl_SetObjResult(tls, interp, pRet) 51141 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 51142 var _objPtr uintptr = pRet 51143 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 51144 tcl.XTclFreeObj(tls, _objPtr) 51145 } 51146 } 51147 51148 return TCL_OK 51149 } 51150 51151 func test_clear_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51152 var ii int32 51153 51154 if objc != 1 { 51155 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51156 return TCL_ERROR 51157 } 51158 51159 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 51160 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)) = 0 51161 } 51162 return TCL_OK 51163 } 51164 51165 func test_alloc_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51166 bp := tls.Alloc(124) 51167 defer tls.Free(124) 51168 51169 var p uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 51170 51171 sqlite3.Xsqlite3_mutex_free(tls, p) 51172 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+9889, libc.VaList(bp, p)) 51173 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, uintptr(0))) 51174 return TCL_OK 51175 } 51176 51177 func test_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51178 bp := tls.Alloc(68) 51179 defer tls.Free(68) 51180 51181 *(*[4]ConfigOption)(unsafe.Pointer(bp)) = [4]ConfigOption{ 51182 {FzName: ts + 35231, FiValue: SQLITE_CONFIG_SINGLETHREAD}, 51183 {FzName: ts + 35244, FiValue: SQLITE_CONFIG_MULTITHREAD}, 51184 {FzName: ts + 35256, FiValue: SQLITE_CONFIG_SERIALIZED}, 51185 {}, 51186 } 51187 var s int32 = int32(unsafe.Sizeof(ConfigOption{})) 51188 51189 var rc int32 51190 51191 if objc != 2 { 51192 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51193 return TCL_ERROR 51194 } 51195 51196 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, s, ts+17631, 0, bp+64) != 0 { 51197 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+64) != 0 { 51198 return TCL_ERROR 51199 } 51200 } else { 51201 *(*int32)(unsafe.Pointer(bp + 64)) = (*ConfigOption)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 64)))*16)).FiValue 51202 } 51203 51204 rc = sqlite3.Xsqlite3_config(tls, *(*int32)(unsafe.Pointer(bp + 64)), 0) 51205 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51206 return TCL_OK 51207 } 51208 51209 type ConfigOption = struct { 51210 FzName uintptr 51211 FiValue int32 51212 F__ccgo_pad1 [4]byte 51213 } 51214 51215 func getDbPointer1(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 51216 bp := tls.Alloc(64) 51217 defer tls.Free(64) 51218 51219 var db uintptr 51220 51221 var zCmd uintptr = tcl.XTcl_GetString(tls, pObj) 51222 if tcl.XTcl_GetCommandInfo(tls, pInterp, zCmd, bp) != 0 { 51223 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)) 51224 } else { 51225 db = sqlite3TestTextToPtr(tls, zCmd) 51226 } 51227 51228 return db 51229 } 51230 51231 func getStaticMutexPointer(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 51232 bp := tls.Alloc(4) 51233 defer tls.Free(4) 51234 51235 if tcl.XTcl_GetIndexFromObjStruct(tls, pInterp, pObj, uintptr(unsafe.Pointer(&aName)), int32(unsafe.Sizeof(uintptr(0))), ts+35267, 0, bp) != 0 { 51236 return uintptr(0) 51237 } 51238 51239 return counterMutexAlloc(tls, *(*int32)(unsafe.Pointer(bp))) 51240 } 51241 51242 func test_enter_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51243 var pMutex uintptr 51244 if objc != 2 { 51245 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 51246 return TCL_ERROR 51247 } 51248 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51249 if !(pMutex != 0) { 51250 return TCL_ERROR 51251 } 51252 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 51253 return TCL_OK 51254 } 51255 51256 func test_leave_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51257 var pMutex uintptr 51258 if objc != 2 { 51259 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 51260 return TCL_ERROR 51261 } 51262 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51263 if !(pMutex != 0) { 51264 return TCL_ERROR 51265 } 51266 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 51267 return TCL_OK 51268 } 51269 51270 func test_enter_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51271 var db uintptr 51272 if objc != 2 { 51273 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 51274 return TCL_ERROR 51275 } 51276 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51277 if !(db != 0) { 51278 return TCL_ERROR 51279 } 51280 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 51281 return TCL_OK 51282 } 51283 51284 func test_leave_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51285 var db uintptr 51286 if objc != 2 { 51287 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 51288 return TCL_ERROR 51289 } 51290 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51291 if !(db != 0) { 51292 return TCL_ERROR 51293 } 51294 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 51295 return TCL_OK 51296 } 51297 51298 func Sqlitetest_mutex_Init(tls *libc.TLS, interp uintptr) int32 { 51299 var i int32 51300 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd8))/uint64(unsafe.Sizeof(struct { 51301 FzName uintptr 51302 FxProc uintptr 51303 }{})); i++ { 51304 tcl.XTcl_CreateObjCommand(tls, interp, aCmd8[i].FzName, aCmd8[i].FxProc, uintptr(0), uintptr(0)) 51305 } 51306 51307 tcl.XTcl_LinkVar(tls, interp, ts+35278, 51308 uintptr(unsafe.Pointer(&g3))+4, TCL_LINK_INT) 51309 tcl.XTcl_LinkVar(tls, interp, ts+35297, 51310 uintptr(unsafe.Pointer(&g3))+8, TCL_LINK_INT) 51311 return SQLITE_OK 51312 } 51313 51314 var aCmd8 = [11]struct { 51315 FzName uintptr 51316 FxProc uintptr 51317 }{ 51318 {FzName: ts + 35315, FxProc: 0}, 51319 {FzName: ts + 35332, FxProc: 0}, 51320 {FzName: ts + 35351, FxProc: 0}, 51321 {FzName: ts + 35366, FxProc: 0}, 51322 {FzName: ts + 35385, FxProc: 0}, 51323 {FzName: ts + 35404, FxProc: 0}, 51324 {FzName: ts + 35419, FxProc: 0}, 51325 {FzName: ts + 35434, FxProc: 0}, 51326 {FzName: ts + 35454, FxProc: 0}, 51327 {FzName: ts + 35477, FxProc: 0}, 51328 {FzName: ts + 35497, FxProc: 0}, 51329 } 51330 51331 type fs_real_file1 = struct { 51332 FpFile uintptr 51333 FzName uintptr 51334 FnDatabase int32 51335 FnJournal int32 51336 FnBlob int32 51337 FnRef int32 51338 FpNext uintptr 51339 FppThis uintptr 51340 } 51341 51342 type fs_real_file = fs_real_file1 51343 51344 type fs_file1 = struct { 51345 Fbase sqlite3_file 51346 FeType int32 51347 F__ccgo_pad1 [4]byte 51348 FpReal uintptr 51349 } 51350 51351 type fs_file = fs_file1 51352 51353 type tmp_file1 = struct { 51354 Fbase sqlite3_file 51355 FnSize int32 51356 FnAlloc int32 51357 FzAlloc uintptr 51358 } 51359 51360 type tmp_file = tmp_file1 51361 51362 type fs_vfs_t1 = struct { 51363 Fbase sqlite3_vfs 51364 FpFileList uintptr 51365 FpParent uintptr 51366 } 51367 51368 type fs_vfs_t = fs_vfs_t1 51369 51370 var fs_vfs = fs_vfs_t{ 51371 Fbase: sqlite3_vfs{ 51372 FiVersion: 1, 51373 FzName: ts + 31055, 51374 FxOpen: 0, 51375 FxDelete: 0, 51376 FxAccess: 0, 51377 FxFullPathname: 0, 51378 FxDlOpen: 0, 51379 FxDlError: 0, 51380 FxDlSym: 0, 51381 FxDlClose: 0, 51382 FxRandomness: 0, 51383 FxSleep: 0, 51384 FxCurrentTime: 0, 51385 }, 51386 } 51387 51388 var fs_io_methods = sqlite3_io_methods{ 51389 FiVersion: 1, 51390 FxClose: 0, 51391 FxRead: 0, 51392 FxWrite: 0, 51393 FxTruncate: 0, 51394 FxSync: 0, 51395 FxFileSize: 0, 51396 FxLock: 0, 51397 FxUnlock: 0, 51398 FxCheckReservedLock: 0, 51399 FxFileControl: 0, 51400 FxSectorSize: 0, 51401 FxDeviceCharacteristics: 0, 51402 } 51403 51404 var tmp_io_methods = sqlite3_io_methods{ 51405 FiVersion: 1, 51406 FxClose: 0, 51407 FxRead: 0, 51408 FxWrite: 0, 51409 FxTruncate: 0, 51410 FxSync: 0, 51411 FxFileSize: 0, 51412 FxLock: 0, 51413 FxUnlock: 0, 51414 FxCheckReservedLock: 0, 51415 FxFileControl: 0, 51416 FxSectorSize: 0, 51417 FxDeviceCharacteristics: 0, 51418 } 51419 51420 func tmpClose(tls *libc.TLS, pFile uintptr) int32 { 51421 var pTmp uintptr = pFile 51422 sqlite3.Xsqlite3_free(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc) 51423 return SQLITE_OK 51424 } 51425 51426 func tmpRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51427 var pTmp uintptr = pFile 51428 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) { 51429 return SQLITE_IOERR | int32(2)<<8 51430 } 51431 libc.Xmemcpy(tls, zBuf, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), uint64(iAmt)) 51432 return SQLITE_OK 51433 } 51434 51435 func tmpWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51436 var pTmp uintptr = pFile 51437 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc) { 51438 var nNew int32 = int32(int64(2) * (sqlite_int64(iAmt) + iOfst + sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc))) 51439 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc, nNew) 51440 if !(zNew != 0) { 51441 return SQLITE_NOMEM 51442 } 51443 (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc = zNew 51444 (*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc = nNew 51445 } 51446 libc.Xmemcpy(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), zBuf, uint64(iAmt)) 51447 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 51448 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) > iOfst+sqlite_int64(iAmt) { 51449 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 51450 } 51451 return int32(iOfst + sqlite_int64(iAmt)) 51452 }() 51453 return SQLITE_OK 51454 } 51455 51456 func tmpTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 51457 var pTmp uintptr = pFile 51458 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 51459 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) < size { 51460 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 51461 } 51462 return int32(size) 51463 }() 51464 return SQLITE_OK 51465 } 51466 51467 func tmpSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 51468 return SQLITE_OK 51469 } 51470 51471 func tmpFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 51472 var pTmp uintptr = pFile 51473 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) 51474 return SQLITE_OK 51475 } 51476 51477 func tmpLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51478 return SQLITE_OK 51479 } 51480 51481 func tmpUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51482 return SQLITE_OK 51483 } 51484 51485 func tmpCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 51486 *(*int32)(unsafe.Pointer(pResOut)) = 0 51487 return SQLITE_OK 51488 } 51489 51490 func tmpFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 51491 return SQLITE_OK 51492 } 51493 51494 func tmpSectorSize(tls *libc.TLS, pFile uintptr) int32 { 51495 return 0 51496 } 51497 51498 func tmpDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 51499 return 0 51500 } 51501 51502 func fsClose1(tls *libc.TLS, pFile uintptr) int32 { 51503 var rc int32 = SQLITE_OK 51504 var p uintptr = pFile 51505 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51506 51507 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef-- 51508 51509 if (*fs_real_file)(unsafe.Pointer(pReal)).FnRef == 0 { 51510 *(*uintptr)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FppThis)) = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 51511 if (*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0 { 51512 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = (*fs_real_file)(unsafe.Pointer(pReal)).FppThis 51513 } 51514 rc = (*struct { 51515 f func(*libc.TLS, uintptr) int32 51516 })(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) 51517 sqlite3.Xsqlite3_free(tls, pReal) 51518 } 51519 51520 return rc 51521 } 51522 51523 func fsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51524 var rc int32 = SQLITE_OK 51525 var p uintptr = pFile 51526 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51527 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51528 51529 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) || 51530 (*fs_file)(unsafe.Pointer(p)).FeType == JOURNAL_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 51531 rc = SQLITE_IOERR | int32(2)<<8 51532 } else if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51533 rc = (*struct { 51534 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51535 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxRead})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 51536 } else { 51537 var iRem int32 = iAmt 51538 var iBuf int32 = 0 51539 var ii int32 = int32(iOfst) 51540 for iRem > 0 && rc == SQLITE_OK { 51541 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 51542 var iRealAmt int32 = func() int32 { 51543 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 51544 return iRem 51545 } 51546 return BLOCKSIZE - iRealOff%BLOCKSIZE 51547 }() 51548 51549 rc = (*struct { 51550 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51551 })(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)) 51552 ii = ii + iRealAmt 51553 iBuf = iBuf + iRealAmt 51554 iRem = iRem - iRealAmt 51555 } 51556 } 51557 51558 return rc 51559 } 51560 51561 func fsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51562 var rc int32 = SQLITE_OK 51563 var p uintptr = pFile 51564 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51565 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51566 51567 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51568 if sqlite_int64(iAmt)+iOfst+int64(BLOCKSIZE) > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-(*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 51569 rc = SQLITE_FULL 51570 } else { 51571 rc = (*struct { 51572 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51573 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 51574 if rc == SQLITE_OK { 51575 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 51576 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) > sqlite_int64(iAmt)+iOfst { 51577 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 51578 } 51579 return int32(sqlite_int64(iAmt) + iOfst) 51580 }() 51581 } 51582 } 51583 } else { 51584 var iRem int32 = iAmt 51585 var iBuf int32 = 0 51586 var ii int32 = int32(iOfst) 51587 for iRem > 0 && rc == SQLITE_OK { 51588 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 51589 var iRealAmt int32 = func() int32 { 51590 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 51591 return iRem 51592 } 51593 return BLOCKSIZE - iRealOff%BLOCKSIZE 51594 }() 51595 51596 if iRealOff < (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase+BLOCKSIZE { 51597 rc = SQLITE_FULL 51598 } else { 51599 rc = (*struct { 51600 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51601 })(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)) 51602 ii = ii + iRealAmt 51603 iBuf = iBuf + iRealAmt 51604 iRem = iRem - iRealAmt 51605 } 51606 } 51607 if rc == SQLITE_OK { 51608 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 51609 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) > sqlite_int64(iAmt)+iOfst { 51610 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 51611 } 51612 return int32(sqlite_int64(iAmt) + iOfst) 51613 }() 51614 } 51615 } 51616 51617 return rc 51618 } 51619 51620 func fsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 51621 var p uintptr = pFile 51622 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51623 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51624 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 51625 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) < size { 51626 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 51627 } 51628 return int32(size) 51629 }() 51630 } else { 51631 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 51632 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) < size { 51633 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 51634 } 51635 return int32(size) 51636 }() 51637 } 51638 return SQLITE_OK 51639 } 51640 51641 func fsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 51642 bp := tls.Alloc(4) 51643 defer tls.Free(4) 51644 51645 var p uintptr = pFile 51646 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51647 var pRealFile uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51648 var rc int32 = SQLITE_OK 51649 51650 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51651 *(*uint8)(unsafe.Pointer(bp)) = uint8(uint32((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) & 0xFF000000 >> 24) 51652 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x00FF0000 >> 16) 51653 *(*uint8)(unsafe.Pointer(bp + 2)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x0000FF00 >> 8) 51654 *(*uint8)(unsafe.Pointer(bp + 3)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x000000FF) 51655 rc = (*struct { 51656 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51657 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, bp, 4, int64(0)) 51658 } 51659 if rc == SQLITE_OK { 51660 rc = (*struct { 51661 f func(*libc.TLS, uintptr, int32) int32 51662 })(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)) 51663 } 51664 51665 return rc 51666 } 51667 51668 func fsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 51669 var p uintptr = pFile 51670 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51671 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51672 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) 51673 } else { 51674 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) 51675 } 51676 return SQLITE_OK 51677 } 51678 51679 func fsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51680 return SQLITE_OK 51681 } 51682 51683 func fsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51684 return SQLITE_OK 51685 } 51686 51687 func fsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 51688 *(*int32)(unsafe.Pointer(pResOut)) = 0 51689 return SQLITE_OK 51690 } 51691 51692 func fsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 51693 if op == SQLITE_FCNTL_PRAGMA { 51694 return SQLITE_NOTFOUND 51695 } 51696 return SQLITE_OK 51697 } 51698 51699 func fsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 51700 return BLOCKSIZE 51701 } 51702 51703 func fsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 51704 return 0 51705 } 51706 51707 func fsOpen1(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 51708 bp := tls.Alloc(12) 51709 defer tls.Free(12) 51710 51711 var pFsVfs uintptr 51712 var p uintptr 51713 var pReal uintptr 51714 var eType int32 51715 var nName int32 51716 var rc int32 51717 var p2 uintptr 51718 51719 var real_flags int32 51720 51721 var pRealFile uintptr 51722 var pParent uintptr 51723 pFsVfs = pVfs 51724 p = pFile 51725 pReal = uintptr(0) 51726 rc = SQLITE_OK 51727 51728 if !(0 == flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL)) { 51729 goto __1 51730 } 51731 p2 = pFile 51732 libc.Xmemset(tls, p2, 0, uint64(unsafe.Sizeof(tmp_file{}))) 51733 (*tmp_file)(unsafe.Pointer(p2)).Fbase.FpMethods = uintptr(unsafe.Pointer(&tmp_io_methods)) 51734 return SQLITE_OK 51735 __1: 51736 ; 51737 eType = func() int32 { 51738 if flags&SQLITE_OPEN_MAIN_DB != 0 { 51739 return DATABASE_FILE 51740 } 51741 return JOURNAL_FILE 51742 }() 51743 (*fs_file)(unsafe.Pointer(p)).Fbase.FpMethods = uintptr(unsafe.Pointer(&fs_io_methods)) 51744 (*fs_file)(unsafe.Pointer(p)).FeType = eType 51745 51746 nName = int32(libc.Xstrlen(tls, zName)) - func() int32 { 51747 if eType == JOURNAL_FILE { 51748 return 8 51749 } 51750 return 0 51751 }() 51752 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 51753 __2: 51754 if !(pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zName, uint64(nName)) != 0) { 51755 goto __4 51756 } 51757 goto __3 51758 __3: 51759 pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 51760 goto __2 51761 goto __4 51762 __4: 51763 ; 51764 if !!(pReal != 0) { 51765 goto __5 51766 } 51767 real_flags = flags&libc.CplInt32(SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB 51768 pParent = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpParent 51769 51770 pReal = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile))) 51771 if !!(pReal != 0) { 51772 goto __6 51773 } 51774 rc = SQLITE_NOMEM 51775 goto open_out 51776 __6: 51777 ; 51778 libc.Xmemset(tls, pReal, 0, uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile)) 51779 (*fs_real_file)(unsafe.Pointer(pReal)).FzName = zName 51780 (*fs_real_file)(unsafe.Pointer(pReal)).FpFile = pReal + 1*48 51781 51782 rc = (*struct { 51783 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 51784 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zName, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile, real_flags, pOutFlags) 51785 if !(rc != SQLITE_OK) { 51786 goto __7 51787 } 51788 goto open_out 51789 __7: 51790 ; 51791 pRealFile = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51792 51793 rc = (*struct { 51794 f func(*libc.TLS, uintptr, uintptr) int32 51795 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxFileSize})).f(tls, pRealFile, bp) 51796 if !(rc != SQLITE_OK) { 51797 goto __8 51798 } 51799 goto open_out 51800 __8: 51801 ; 51802 if !(*(*sqlite3_int64)(unsafe.Pointer(bp)) == int64(0)) { 51803 goto __9 51804 } 51805 rc = (*struct { 51806 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51807 })(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)) 51808 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = BLOBSIZE 51809 goto __10 51810 __9: 51811 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = int32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 51812 rc = (*struct { 51813 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51814 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxRead})).f(tls, pRealFile, bp+8, 4, int64(0)) 51815 (*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))) 51816 if !(rc == SQLITE_OK) { 51817 goto __11 51818 } 51819 rc = (*struct { 51820 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51821 })(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)) 51822 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) { 51823 goto __12 51824 } 51825 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob 51826 __12: 51827 ; 51828 __11: 51829 ; 51830 __10: 51831 ; 51832 if !(rc == SQLITE_OK) { 51833 goto __13 51834 } 51835 (*fs_real_file)(unsafe.Pointer(pReal)).FpNext = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 51836 if !((*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0) { 51837 goto __14 51838 } 51839 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = pReal + 32 51840 __14: 51841 ; 51842 (*fs_real_file)(unsafe.Pointer(pReal)).FppThis = pFsVfs + 168 51843 (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList = pReal 51844 __13: 51845 ; 51846 __5: 51847 ; 51848 open_out: 51849 if !(pReal != 0) { 51850 goto __15 51851 } 51852 if !(rc == SQLITE_OK) { 51853 goto __16 51854 } 51855 (*fs_file)(unsafe.Pointer(p)).FpReal = pReal 51856 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef++ 51857 goto __17 51858 __16: 51859 if !((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods != 0) { 51860 goto __18 51861 } 51862 (*struct { 51863 f func(*libc.TLS, uintptr) int32 51864 })(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) 51865 __18: 51866 ; 51867 sqlite3.Xsqlite3_free(tls, pReal) 51868 __17: 51869 ; 51870 __15: 51871 ; 51872 return rc 51873 } 51874 51875 func fsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 51876 var rc int32 = SQLITE_OK 51877 var pFsVfs uintptr = pVfs 51878 var pReal uintptr 51879 var pF uintptr 51880 var nName int32 = int32(libc.Xstrlen(tls, zPath)) - 8 51881 51882 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 51883 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 { 51884 } 51885 if pReal != 0 { 51886 pF = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51887 rc = (*struct { 51888 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51889 })(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)) 51890 if rc == SQLITE_OK { 51891 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = 0 51892 } 51893 } 51894 return rc 51895 } 51896 51897 func fsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 51898 var pFsVfs uintptr = pVfs 51899 var pReal uintptr 51900 var isJournal int32 = 0 51901 var nName int32 = int32(libc.Xstrlen(tls, zPath)) 51902 51903 if flags != SQLITE_ACCESS_EXISTS { 51904 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51905 return (*struct { 51906 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51907 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxAccess})).f(tls, pParent, zPath, flags, pResOut) 51908 } 51909 51910 if nName > 8 && libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nName-8)) == 0 { 51911 nName = nName - 8 51912 isJournal = 1 51913 } 51914 51915 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 51916 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 { 51917 } 51918 51919 *(*int32)(unsafe.Pointer(pResOut)) = libc.Bool32(pReal != 0 && (!(isJournal != 0) || (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal > 0)) 51920 return SQLITE_OK 51921 } 51922 51923 func fsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 51924 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51925 return (*struct { 51926 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51927 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zPath, nOut, zOut) 51928 } 51929 51930 func fsDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 51931 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51932 return (*struct { 51933 f func(*libc.TLS, uintptr, uintptr) uintptr 51934 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlOpen})).f(tls, pParent, zPath) 51935 } 51936 51937 func fsDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 51938 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51939 (*struct { 51940 f func(*libc.TLS, uintptr, int32, uintptr) 51941 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlError})).f(tls, pParent, nByte, zErrMsg) 51942 } 51943 51944 func fsDlSym(tls *libc.TLS, pVfs uintptr, pH uintptr, zSym uintptr) uintptr { 51945 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51946 return (*struct { 51947 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51948 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlSym})).f(tls, pParent, pH, zSym) 51949 } 51950 51951 func fsDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 51952 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51953 (*struct { 51954 f func(*libc.TLS, uintptr, uintptr) 51955 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlClose})).f(tls, pParent, pHandle) 51956 } 51957 51958 func fsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 51959 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51960 return (*struct { 51961 f func(*libc.TLS, uintptr, int32, uintptr) int32 51962 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxRandomness})).f(tls, pParent, nByte, zBufOut) 51963 } 51964 51965 func fsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 51966 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51967 return (*struct { 51968 f func(*libc.TLS, uintptr, int32) int32 51969 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxSleep})).f(tls, pParent, nMicro) 51970 } 51971 51972 func fsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 51973 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51974 return (*struct { 51975 f func(*libc.TLS, uintptr, uintptr) int32 51976 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxCurrentTime})).f(tls, pParent, pTimeOut) 51977 } 51978 51979 func fs_register(tls *libc.TLS) int32 { 51980 if fs_vfs.FpParent != 0 { 51981 return SQLITE_OK 51982 } 51983 fs_vfs.FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 51984 fs_vfs.Fbase.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(fs_vfs.FpParent)).FmxPathname 51985 fs_vfs.Fbase.FszOsFile = func() int32 { 51986 if uint64(unsafe.Sizeof(tmp_file{})) > uint64(unsafe.Sizeof(fs_file{})) { 51987 return int32(unsafe.Sizeof(tmp_file{})) 51988 } 51989 return int32(unsafe.Sizeof(fs_file{})) 51990 }() 51991 return sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&fs_vfs)), 0) 51992 } 51993 51994 func SqlitetestOnefile_Init(tls *libc.TLS) int32 { 51995 return fs_register(tls) 51996 } 51997 51998 type VfslogVfs1 = struct { 51999 Fbase sqlite3_vfs 52000 FpVfs uintptr 52001 FiNextFileId int32 52002 F__ccgo_pad1 [4]byte 52003 FpLog uintptr 52004 FiOffset sqlite3_int64 52005 FnBuf int32 52006 FaBuf [8192]int8 52007 F__ccgo_pad2 [4]byte 52008 } 52009 52010 type VfslogVfs = VfslogVfs1 52011 type VfslogFile1 = struct { 52012 Fbase sqlite3_file 52013 FpReal uintptr 52014 FpVfslog uintptr 52015 FiFileId int32 52016 F__ccgo_pad1 [4]byte 52017 } 52018 52019 type VfslogFile = VfslogFile1 52020 52021 var vfslog_vfs = sqlite3_vfs{ 52022 FiVersion: 1, 52023 FszOsFile: int32(unsafe.Sizeof(VfslogFile{})), 52024 FmxPathname: INST_MAX_PATHNAME, 52025 FxOpen: 0, 52026 FxDelete: 0, 52027 FxAccess: 0, 52028 FxFullPathname: 0, 52029 FxDlOpen: 0, 52030 FxDlError: 0, 52031 FxDlSym: 0, 52032 FxDlClose: 0, 52033 FxRandomness: 0, 52034 FxSleep: 0, 52035 FxCurrentTime: 0, 52036 FxGetLastError: 0, 52037 FxCurrentTimeInt64: 0, 52038 } 52039 52040 var vfslog_io_methods = sqlite3_io_methods{ 52041 FiVersion: 2, 52042 FxClose: 0, 52043 FxRead: 0, 52044 FxWrite: 0, 52045 FxTruncate: 0, 52046 FxSync: 0, 52047 FxFileSize: 0, 52048 FxLock: 0, 52049 FxUnlock: 0, 52050 FxCheckReservedLock: 0, 52051 FxFileControl: 0, 52052 FxSectorSize: 0, 52053 FxDeviceCharacteristics: 0, 52054 FxShmMap: 0, 52055 FxShmLock: 0, 52056 FxShmBarrier: 0, 52057 FxShmUnmap: 0, 52058 } 52059 52060 func vfslog_time(tls *libc.TLS) sqlite3_uint64 { 52061 bp := tls.Alloc(16) 52062 defer tls.Free(16) 52063 52064 libc.Xgettimeofday(tls, bp, uintptr(0)) 52065 return sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_usec) + sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_sec)*uint64(1000000) 52066 } 52067 52068 func vfslogClose(tls *libc.TLS, pFile uintptr) int32 { 52069 var t sqlite3_uint64 52070 var rc int32 = SQLITE_OK 52071 var p uintptr = pFile 52072 52073 t = vfslog_time(tls) 52074 if (*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 52075 rc = (*struct { 52076 f func(*libc.TLS, uintptr) int32 52077 })(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) 52078 } 52079 t = vfslog_time(tls) - t 52080 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CLOSE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52081 return rc 52082 } 52083 52084 func vfslogRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52085 var rc int32 52086 var t sqlite3_uint64 52087 var p uintptr = pFile 52088 t = vfslog_time(tls) 52089 rc = (*struct { 52090 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52091 })(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) 52092 t = vfslog_time(tls) - t 52093 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_READ, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 52094 return rc 52095 } 52096 52097 func vfslogWrite(tls *libc.TLS, pFile uintptr, z uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52098 var rc int32 52099 var t sqlite3_uint64 52100 var p uintptr = pFile 52101 t = vfslog_time(tls) 52102 rc = (*struct { 52103 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52104 })(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) 52105 t = vfslog_time(tls) - t 52106 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_WRITE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 52107 return rc 52108 } 52109 52110 func vfslogTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52111 var rc int32 52112 var t sqlite3_uint64 52113 var p uintptr = pFile 52114 t = vfslog_time(tls) 52115 rc = (*struct { 52116 f func(*libc.TLS, uintptr, sqlite3_int64) int32 52117 })(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) 52118 t = vfslog_time(tls) - t 52119 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_TRUNCATE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, int32(size)) 52120 return rc 52121 } 52122 52123 func vfslogSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52124 var rc int32 52125 var t sqlite3_uint64 52126 var p uintptr = pFile 52127 t = vfslog_time(tls) 52128 rc = (*struct { 52129 f func(*libc.TLS, uintptr, int32) int32 52130 })(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) 52131 t = vfslog_time(tls) - t 52132 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SYNC, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, flags, 0) 52133 return rc 52134 } 52135 52136 func vfslogFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52137 var rc int32 52138 var t sqlite3_uint64 52139 var p uintptr = pFile 52140 t = vfslog_time(tls) 52141 rc = (*struct { 52142 f func(*libc.TLS, uintptr, uintptr) int32 52143 })(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) 52144 t = vfslog_time(tls) - t 52145 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)))) 52146 return rc 52147 } 52148 52149 func vfslogLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52150 var rc int32 52151 var t sqlite3_uint64 52152 var p uintptr = pFile 52153 t = vfslog_time(tls) 52154 rc = (*struct { 52155 f func(*libc.TLS, uintptr, int32) int32 52156 })(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) 52157 t = vfslog_time(tls) - t 52158 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_LOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 52159 return rc 52160 } 52161 52162 func vfslogUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52163 var rc int32 52164 var t sqlite3_uint64 52165 var p uintptr = pFile 52166 t = vfslog_time(tls) 52167 rc = (*struct { 52168 f func(*libc.TLS, uintptr, int32) int32 52169 })(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) 52170 t = vfslog_time(tls) - t 52171 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_UNLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 52172 return rc 52173 } 52174 52175 func vfslogCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52176 var rc int32 52177 var t sqlite3_uint64 52178 var p uintptr = pFile 52179 t = vfslog_time(tls) 52180 rc = (*struct { 52181 f func(*libc.TLS, uintptr, uintptr) int32 52182 })(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) 52183 t = vfslog_time(tls) - t 52184 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CHECKRESERVEDLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, *(*int32)(unsafe.Pointer(pResOut)), 0) 52185 return rc 52186 } 52187 52188 func vfslogFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52189 bp := tls.Alloc(8) 52190 defer tls.Free(8) 52191 52192 var p uintptr = pFile 52193 var rc int32 = (*struct { 52194 f func(*libc.TLS, uintptr, int32, uintptr) int32 52195 })(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) 52196 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 52197 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35525, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 52198 } 52199 return rc 52200 } 52201 52202 func vfslogSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52203 var rc int32 52204 var t sqlite3_uint64 52205 var p uintptr = pFile 52206 t = vfslog_time(tls) 52207 rc = (*struct { 52208 f func(*libc.TLS, uintptr) int32 52209 })(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) 52210 t = vfslog_time(tls) - t 52211 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SECTORSIZE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52212 return rc 52213 } 52214 52215 func vfslogDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52216 var rc int32 52217 var t sqlite3_uint64 52218 var p uintptr = pFile 52219 t = vfslog_time(tls) 52220 rc = (*struct { 52221 f func(*libc.TLS, uintptr) int32 52222 })(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) 52223 t = vfslog_time(tls) - t 52224 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_DEVCHAR, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52225 return rc 52226 } 52227 52228 func vfslogShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 52229 var rc int32 52230 var t sqlite3_uint64 52231 var p uintptr = pFile 52232 t = vfslog_time(tls) 52233 rc = (*struct { 52234 f func(*libc.TLS, uintptr, int32, int32, int32) int32 52235 })(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) 52236 t = vfslog_time(tls) - t 52237 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52238 return rc 52239 } 52240 52241 func vfslogShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 52242 var rc int32 52243 var t sqlite3_uint64 52244 var p uintptr = pFile 52245 t = vfslog_time(tls) 52246 rc = (*struct { 52247 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 52248 })(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) 52249 t = vfslog_time(tls) - t 52250 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52251 return rc 52252 } 52253 52254 func vfslogShmBarrier(tls *libc.TLS, pFile uintptr) { 52255 var t sqlite3_uint64 52256 var p uintptr = pFile 52257 t = vfslog_time(tls) 52258 (*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) 52259 t = vfslog_time(tls) - t 52260 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMBARRIER, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), SQLITE_OK, 0, 0) 52261 } 52262 52263 func vfslogShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 52264 var rc int32 52265 var t sqlite3_uint64 52266 var p uintptr = pFile 52267 t = vfslog_time(tls) 52268 rc = (*struct { 52269 f func(*libc.TLS, uintptr, int32) int32 52270 })(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) 52271 t = vfslog_time(tls) - t 52272 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMUNMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52273 return rc 52274 } 52275 52276 func vfslogOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 52277 var rc int32 52278 var t sqlite3_uint64 52279 var p uintptr = pFile 52280 var pLog uintptr = pVfs 52281 52282 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&vfslog_io_methods)) 52283 (*VfslogFile)(unsafe.Pointer(p)).FpReal = p + 1*32 52284 (*VfslogFile)(unsafe.Pointer(p)).FpVfslog = pVfs 52285 (*VfslogFile)(unsafe.Pointer(p)).FiFileId = libc.PreIncInt32(&(*VfslogVfs)(unsafe.Pointer(pLog)).FiNextFileId, 1) 52286 52287 t = vfslog_time(tls) 52288 rc = (*struct { 52289 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52290 })(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) 52291 t = vfslog_time(tls) - t 52292 52293 vfslog_call(tls, pVfs, OS_OPEN, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52294 vfslog_string(tls, pVfs, zName) 52295 return rc 52296 } 52297 52298 func vfslogDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 52299 var rc int32 52300 var t sqlite3_uint64 52301 t = vfslog_time(tls) 52302 rc = (*struct { 52303 f func(*libc.TLS, uintptr, uintptr, int32) int32 52304 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDelete})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, dirSync) 52305 t = vfslog_time(tls) - t 52306 vfslog_call(tls, pVfs, OS_DELETE, 0, int64(t), rc, dirSync, 0) 52307 vfslog_string(tls, pVfs, zPath) 52308 return rc 52309 } 52310 52311 func vfslogAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 52312 var rc int32 52313 var t sqlite3_uint64 52314 t = vfslog_time(tls) 52315 rc = (*struct { 52316 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52317 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxAccess})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, flags, pResOut) 52318 t = vfslog_time(tls) - t 52319 vfslog_call(tls, pVfs, OS_ACCESS, 0, int64(t), rc, flags, *(*int32)(unsafe.Pointer(pResOut))) 52320 vfslog_string(tls, pVfs, zPath) 52321 return rc 52322 } 52323 52324 func vfslogFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 52325 return (*struct { 52326 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52327 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxFullPathname})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, nOut, zOut) 52328 } 52329 52330 func vfslogDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 52331 return (*struct { 52332 f func(*libc.TLS, uintptr, uintptr) uintptr 52333 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlOpen})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath) 52334 } 52335 52336 func vfslogDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 52337 (*struct { 52338 f func(*libc.TLS, uintptr, int32, uintptr) 52339 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zErrMsg) 52340 } 52341 52342 func vfslogDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 52343 return (*struct { 52344 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 52345 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlSym})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p, zSym) 52346 } 52347 52348 func vfslogDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 52349 (*struct { 52350 f func(*libc.TLS, uintptr, uintptr) 52351 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlClose})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pHandle) 52352 } 52353 52354 func vfslogRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 52355 return (*struct { 52356 f func(*libc.TLS, uintptr, int32, uintptr) int32 52357 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxRandomness})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zBufOut) 52358 } 52359 52360 func vfslogSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 52361 return (*struct { 52362 f func(*libc.TLS, uintptr, int32) int32 52363 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxSleep})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nMicro) 52364 } 52365 52366 func vfslogCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 52367 return (*struct { 52368 f func(*libc.TLS, uintptr, uintptr) int32 52369 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTime})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pTimeOut) 52370 } 52371 52372 func vfslogGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 52373 return (*struct { 52374 f func(*libc.TLS, uintptr, int32, uintptr) int32 52375 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxGetLastError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, a, b) 52376 } 52377 52378 func vfslogCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 52379 return (*struct { 52380 f func(*libc.TLS, uintptr, uintptr) int32 52381 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTimeInt64})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p) 52382 } 52383 52384 func vfslog_flush(tls *libc.TLS, p uintptr) { 52385 var pending int32 = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 52386 var persist int32 = sqlite3.Xsqlite3_io_error_persist 52387 var diskfull int32 = sqlite3.Xsqlite3_diskfull_pending 52388 52389 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(0)) 52390 sqlite3.Xsqlite3_io_error_persist = 0 52391 sqlite3.Xsqlite3_diskfull_pending = 0 52392 52393 if (*VfslogVfs)(unsafe.Pointer(p)).FnBuf != 0 { 52394 (*struct { 52395 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52396 })(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) 52397 *(*sqlite3_int64)(unsafe.Pointer(p + 192)) += sqlite3_int64((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 52398 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 0 52399 } 52400 52401 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, pending) 52402 sqlite3.Xsqlite3_io_error_persist = persist 52403 sqlite3.Xsqlite3_diskfull_pending = diskfull 52404 } 52405 52406 func put32bits(tls *libc.TLS, p uintptr, v uint32) { 52407 *(*uint8)(unsafe.Pointer(p)) = uint8(v >> 24) 52408 *(*uint8)(unsafe.Pointer(p + 1)) = uint8(v >> 16) 52409 *(*uint8)(unsafe.Pointer(p + 2)) = uint8(v >> 8) 52410 *(*uint8)(unsafe.Pointer(p + 3)) = uint8(v) 52411 } 52412 52413 func vfslog_call(tls *libc.TLS, pVfs uintptr, eEvent int32, iFileid int32, nClick sqlite3_int64, return_code int32, size int32, offset int32) { 52414 var p uintptr = pVfs 52415 var zRec uintptr 52416 if uint64(24+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]int8{})) { 52417 vfslog_flush(tls, p) 52418 } 52419 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 52420 put32bits(tls, zRec, uint32(eEvent)) 52421 put32bits(tls, zRec+4, uint32(iFileid)) 52422 put32bits(tls, zRec+8, uint32(nClick&int64(0xffff))) 52423 put32bits(tls, zRec+12, uint32(return_code)) 52424 put32bits(tls, zRec+16, uint32(size)) 52425 put32bits(tls, zRec+20, uint32(offset)) 52426 *(*int32)(unsafe.Pointer(p + 200)) += 24 52427 } 52428 52429 func vfslog_string(tls *libc.TLS, pVfs uintptr, zStr uintptr) { 52430 var p uintptr = pVfs 52431 var zRec uintptr 52432 var nStr int32 52433 if zStr != 0 { 52434 nStr = int32(libc.Xstrlen(tls, zStr)) 52435 } else { 52436 nStr = 0 52437 } 52438 if uint64(4+nStr+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]int8{})) { 52439 vfslog_flush(tls, p) 52440 } 52441 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 52442 put32bits(tls, zRec, uint32(nStr)) 52443 if zStr != 0 { 52444 libc.Xmemcpy(tls, zRec+4, zStr, uint64(nStr)) 52445 } 52446 *(*int32)(unsafe.Pointer(p + 200)) += 4 + nStr 52447 } 52448 52449 func vfslog_finalize(tls *libc.TLS, p uintptr) { 52450 if (*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods != 0 { 52451 vfslog_flush(tls, p) 52452 (*struct { 52453 f func(*libc.TLS, uintptr) int32 52454 })(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) 52455 } 52456 sqlite3.Xsqlite3_free(tls, p) 52457 } 52458 52459 func sqlite3_vfslog_finalize(tls *libc.TLS, zVfs uintptr) int32 { 52460 var pVfs uintptr 52461 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 52462 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 52463 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52464 }{vfslogOpen})) { 52465 return SQLITE_ERROR 52466 } 52467 sqlite3.Xsqlite3_vfs_unregister(tls, pVfs) 52468 vfslog_finalize(tls, pVfs) 52469 return SQLITE_OK 52470 } 52471 52472 func sqlite3_vfslog_new(tls *libc.TLS, zVfs uintptr, zParentVfs uintptr, zLog uintptr) int32 { 52473 bp := tls.Alloc(4) 52474 defer tls.Free(4) 52475 52476 var p uintptr 52477 var pParent uintptr 52478 var nByte int32 52479 52480 var rc int32 52481 var zFile uintptr 52482 var nVfs int32 52483 52484 pParent = sqlite3.Xsqlite3_vfs_find(tls, zParentVfs) 52485 if !(pParent != 0) { 52486 return SQLITE_ERROR 52487 } 52488 52489 nVfs = int32(libc.Xstrlen(tls, zVfs)) 52490 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)) 52491 p = sqlite3.Xsqlite3_malloc(tls, nByte) 52492 libc.Xmemset(tls, p, 0, uint64(nByte)) 52493 52494 (*VfslogVfs)(unsafe.Pointer(p)).FpVfs = pParent 52495 (*VfslogVfs)(unsafe.Pointer(p)).FpLog = p + 1*8400 52496 libc.Xmemcpy(tls, p, uintptr(unsafe.Pointer(&vfslog_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 52497 (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName = (*VfslogVfs)(unsafe.Pointer(p)).FpLog + uintptr((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) 52498 *(*int32)(unsafe.Pointer(p + 4)) += (*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile 52499 libc.Xmemcpy(tls, (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName, zVfs, uint64(nVfs)) 52500 52501 zFile = (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName + uintptr(nVfs+1) 52502 (*struct { 52503 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52504 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zLog, (*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname, zFile) 52505 52506 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SUPER_JOURNAL 52507 (*struct { 52508 f func(*libc.TLS, uintptr, uintptr, int32) int32 52509 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDelete})).f(tls, pParent, zFile, 0) 52510 rc = (*struct { 52511 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52512 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zFile, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, *(*int32)(unsafe.Pointer(bp)), bp) 52513 if rc == SQLITE_OK { 52514 libc.Xmemcpy(tls, p+204, ts+35535, uint64(20)) 52515 (*VfslogVfs)(unsafe.Pointer(p)).FiOffset = int64(0) 52516 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 20 52517 rc = sqlite3.Xsqlite3_vfs_register(tls, p, 1) 52518 } 52519 if rc != 0 { 52520 vfslog_finalize(tls, p) 52521 } 52522 return rc 52523 } 52524 52525 func sqlite3_vfslog_annotate(tls *libc.TLS, zVfs uintptr, zMsg uintptr) int32 { 52526 var pVfs uintptr 52527 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 52528 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 52529 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52530 }{vfslogOpen})) { 52531 return SQLITE_ERROR 52532 } 52533 vfslog_call(tls, pVfs, OS_ANNOTATE, 0, int64(0), 0, 0, 0) 52534 vfslog_string(tls, pVfs, zMsg) 52535 return SQLITE_OK 52536 } 52537 52538 func vfslog_eventname(tls *libc.TLS, eEvent int32) uintptr { 52539 var zEvent uintptr = uintptr(0) 52540 52541 switch eEvent { 52542 case OS_CLOSE: 52543 zEvent = ts + 35556 52544 break 52545 case OS_READ: 52546 zEvent = ts + 35563 52547 break 52548 case OS_WRITE: 52549 zEvent = ts + 35569 52550 break 52551 case OS_TRUNCATE: 52552 zEvent = ts + 35576 52553 break 52554 case OS_SYNC: 52555 zEvent = ts + 27843 52556 break 52557 case OS_FILESIZE: 52558 zEvent = ts + 35586 52559 break 52560 case OS_LOCK: 52561 zEvent = ts + 35596 52562 break 52563 case OS_UNLOCK: 52564 zEvent = ts + 35602 52565 break 52566 case OS_CHECKRESERVEDLOCK: 52567 zEvent = ts + 35610 52568 break 52569 case OS_FILECONTROL: 52570 zEvent = ts + 35624 52571 break 52572 case OS_SECTORSIZE: 52573 zEvent = ts + 35637 52574 break 52575 case OS_DEVCHAR: 52576 zEvent = ts + 35649 52577 break 52578 case OS_OPEN: 52579 zEvent = ts + 27421 52580 break 52581 case OS_DELETE: 52582 zEvent = ts + 35661 52583 break 52584 case OS_ACCESS: 52585 zEvent = ts + 35669 52586 break 52587 case OS_FULLPATHNAME: 52588 zEvent = ts + 35677 52589 break 52590 case OS_RANDOMNESS: 52591 zEvent = ts + 35691 52592 break 52593 case OS_SLEEP: 52594 zEvent = ts + 35703 52595 break 52596 case OS_CURRENTTIME: 52597 zEvent = ts + 35710 52598 break 52599 52600 case OS_SHMUNMAP: 52601 zEvent = ts + 35723 52602 break 52603 case OS_SHMLOCK: 52604 zEvent = ts + 35733 52605 break 52606 case OS_SHMBARRIER: 52607 zEvent = ts + 35742 52608 break 52609 case OS_SHMMAP: 52610 zEvent = ts + 35754 52611 break 52612 52613 case OS_ANNOTATE: 52614 zEvent = ts + 35762 52615 break 52616 } 52617 52618 return zEvent 52619 } 52620 52621 type VfslogVtab1 = struct { 52622 Fbase sqlite3_vtab 52623 FpFd uintptr 52624 FnByte sqlite3_int64 52625 FzFile uintptr 52626 } 52627 52628 type VfslogVtab = VfslogVtab1 52629 type VfslogCsr1 = struct { 52630 Fbase sqlite3_vtab_cursor 52631 FiRowid sqlite3_int64 52632 FiOffset sqlite3_int64 52633 FzTransient uintptr 52634 FnFile int32 52635 F__ccgo_pad1 [4]byte 52636 FazFile uintptr 52637 FaBuf [1024]uint8 52638 } 52639 52640 type VfslogCsr = VfslogCsr1 52641 52642 func get32bits(tls *libc.TLS, p uintptr) uint32 { 52643 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)))) 52644 } 52645 52646 func dequote(tls *libc.TLS, z uintptr) { 52647 var quote int8 52648 quote = *(*int8)(unsafe.Pointer(z)) 52649 if int32(quote) == '[' || int32(quote) == '\'' || int32(quote) == '"' || int32(quote) == '`' { 52650 var iIn int32 = 1 52651 var iOut int32 = 0 52652 if int32(quote) == '[' { 52653 quote = int8(']') 52654 } 52655 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 52656 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(quote) { 52657 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(quote) { 52658 break 52659 } 52660 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = quote 52661 iIn = iIn + 2 52662 } else { 52663 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 52664 } 52665 } 52666 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 52667 } 52668 } 52669 52670 func vlogConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 52671 bp := tls.Alloc(12) 52672 defer tls.Free(12) 52673 52674 var pVfs uintptr 52675 52676 var p uintptr 52677 var rc int32 52678 var nByte int32 52679 var zFile uintptr 52680 52681 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 52682 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 52683 nByte = int32(uint64(unsafe.Sizeof(VfslogVtab{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname)) 52684 p = sqlite3.Xsqlite3_malloc(tls, nByte) 52685 if p == uintptr(0) { 52686 return SQLITE_NOMEM 52687 } 52688 libc.Xmemset(tls, p, 0, uint64(nByte)) 52689 52690 (*VfslogVtab)(unsafe.Pointer(p)).FpFd = p + 1*48 52691 (*VfslogVtab)(unsafe.Pointer(p)).FzFile = (*VfslogVtab)(unsafe.Pointer(p)).FpFd + uintptr((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) 52692 52693 zFile = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 52694 if !(zFile != 0) { 52695 sqlite3.Xsqlite3_free(tls, p) 52696 return SQLITE_NOMEM 52697 } 52698 dequote(tls, zFile) 52699 (*struct { 52700 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52701 })(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) 52702 sqlite3.Xsqlite3_free(tls, zFile) 52703 52704 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL 52705 rc = (*struct { 52706 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52707 })(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) 52708 52709 if rc == SQLITE_OK { 52710 (*struct { 52711 f func(*libc.TLS, uintptr, uintptr) int32 52712 })(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) 52713 sqlite3.Xsqlite3_declare_vtab(tls, db, 52714 ts+35773) 52715 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 52716 } else { 52717 sqlite3.Xsqlite3_free(tls, p) 52718 } 52719 52720 return rc 52721 } 52722 52723 func vlogBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 52724 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 52725 return SQLITE_OK 52726 } 52727 52728 func vlogDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 52729 var p uintptr = pVtab 52730 if (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods != 0 { 52731 (*struct { 52732 f func(*libc.TLS, uintptr) int32 52733 })(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) 52734 (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods = uintptr(0) 52735 } 52736 sqlite3.Xsqlite3_free(tls, p) 52737 return SQLITE_OK 52738 } 52739 52740 func vlogOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 52741 var pCsr uintptr 52742 52743 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(VfslogCsr{}))) 52744 if !(pCsr != 0) { 52745 return SQLITE_NOMEM 52746 } 52747 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(VfslogCsr{}))) 52748 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 52749 return SQLITE_OK 52750 } 52751 52752 func vlogClose(tls *libc.TLS, pCursor uintptr) int32 { 52753 var p uintptr = pCursor 52754 var i int32 52755 for i = 0; i < (*VfslogCsr)(unsafe.Pointer(p)).FnFile; i++ { 52756 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(p)).FazFile + uintptr(i)*8))) 52757 } 52758 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FazFile) 52759 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FzTransient) 52760 sqlite3.Xsqlite3_free(tls, p) 52761 return SQLITE_OK 52762 } 52763 52764 func vlogNext(tls *libc.TLS, pCursor uintptr) int32 { 52765 bp := tls.Alloc(4) 52766 defer tls.Free(4) 52767 52768 var pCsr uintptr = pCursor 52769 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 52770 var rc int32 = SQLITE_OK 52771 var nRead int32 52772 52773 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient) 52774 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = uintptr(0) 52775 52776 nRead = 24 52777 if (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead) <= (*VfslogVtab)(unsafe.Pointer(p)).FnByte { 52778 var eEvent int32 52779 rc = (*struct { 52780 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52781 })(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) 52782 52783 eEvent = int32(get32bits(tls, pCsr+48)) 52784 if rc == SQLITE_OK && 52785 (eEvent == OS_OPEN || eEvent == OS_DELETE || eEvent == OS_ACCESS) { 52786 rc = (*struct { 52787 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52788 })(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)) 52789 nRead = nRead + 4 52790 if rc == SQLITE_OK { 52791 var nStr int32 = int32(get32bits(tls, bp)) 52792 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, nStr+1) 52793 rc = (*struct { 52794 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52795 })(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)) 52796 *(*int8)(unsafe.Pointer(zStr + uintptr(nStr))) = int8(0) 52797 nRead = nRead + nStr 52798 52799 if eEvent == OS_OPEN { 52800 var iFileid int32 = int32(get32bits(tls, pCsr+48+4)) 52801 if iFileid >= (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile { 52802 var nNew int32 = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(iFileid+1)) 52803 (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile = sqlite3.Xsqlite3_realloc(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile, nNew) 52804 nNew = int32(uint64(nNew) - uint64(unsafe.Sizeof(uintptr(0)))*uint64((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)) 52805 libc.Xmemset(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile+uintptr((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)*8, 0, uint64(nNew)) 52806 (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile = iFileid + 1 52807 } 52808 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8))) 52809 *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8)) = zStr 52810 } else { 52811 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = zStr 52812 } 52813 } 52814 } 52815 } 52816 52817 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 8)) += int64(1) 52818 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 16)) += sqlite3_int64(nRead) 52819 return rc 52820 } 52821 52822 func vlogEof(tls *libc.TLS, pCursor uintptr) int32 { 52823 var pCsr uintptr = pCursor 52824 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 52825 return libc.Bool32((*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset >= (*VfslogVtab)(unsafe.Pointer(p)).FnByte) 52826 } 52827 52828 func vlogFilter(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 52829 var pCsr uintptr = pCursor 52830 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 52831 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset = int64(20) 52832 return vlogNext(tls, pCursor) 52833 } 52834 52835 func vlogColumn(tls *libc.TLS, pCursor uintptr, ctx uintptr, i int32) int32 { 52836 var val uint32 52837 var pCsr uintptr = pCursor 52838 52839 val = get32bits(tls, pCsr+48+uintptr(4*i)) 52840 52841 switch i { 52842 case 0: 52843 { 52844 sqlite3.Xsqlite3_result_text(tls, ctx, vfslog_eventname(tls, int32(val)), -1, uintptr(0)) 52845 break 52846 52847 } 52848 case 1: 52849 { 52850 var zStr uintptr = (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient 52851 if val != uint32(0) && val < uint32((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile) { 52852 zStr = *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(val)*8)) 52853 } 52854 sqlite3.Xsqlite3_result_text(tls, ctx, zStr, -1, libc.UintptrFromInt32(-1)) 52855 break 52856 52857 } 52858 default: 52859 sqlite3.Xsqlite3_result_int(tls, ctx, int32(val)) 52860 break 52861 } 52862 52863 return SQLITE_OK 52864 } 52865 52866 func vlogRowid(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 52867 var pCsr uintptr = pCursor 52868 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid 52869 return SQLITE_OK 52870 } 52871 52872 func sqlite3_vfslog_register(tls *libc.TLS, db uintptr) int32 { 52873 sqlite3.Xsqlite3_create_module(tls, db, ts+35828, uintptr(unsafe.Pointer(&vfslog_module)), uintptr(0)) 52874 return SQLITE_OK 52875 } 52876 52877 var vfslog_module = sqlite3_module{ 52878 FxCreate: 0, 52879 FxConnect: 0, 52880 FxBestIndex: 0, 52881 FxDisconnect: 0, 52882 FxDestroy: 0, 52883 FxOpen: 0, 52884 FxClose: 0, 52885 FxFilter: 0, 52886 FxNext: 0, 52887 FxEof: 0, 52888 FxColumn: 0, 52889 FxRowid: 0, 52890 } 52891 52892 func test_vfslog(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52893 bp := tls.Alloc(144) 52894 defer tls.Free(144) 52895 52896 var db uintptr 52897 52898 var rc int32 = SQLITE_ERROR 52899 52900 if objc < 2 { 52901 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 52902 return TCL_ERROR 52903 } 52904 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 { 52905 return TCL_ERROR 52906 } 52907 52908 switch uint32(*(*int32)(unsafe.Pointer(bp + 72))) { 52909 case uint32(0): 52910 { 52911 var zVfs uintptr 52912 var zMsg uintptr 52913 if objc != 4 { 52914 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+35835) 52915 return TCL_ERROR 52916 } 52917 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52918 zMsg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 52919 rc = sqlite3_vfslog_annotate(tls, zVfs, zMsg) 52920 if rc != SQLITE_OK { 52921 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35839, 0)) 52922 return TCL_ERROR 52923 } 52924 break 52925 52926 } 52927 case uint32(1): 52928 { 52929 var zVfs uintptr 52930 if objc != 3 { 52931 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35835) 52932 return TCL_ERROR 52933 } 52934 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52935 rc = sqlite3_vfslog_finalize(tls, zVfs) 52936 if rc != SQLITE_OK { 52937 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+35839, 0)) 52938 return TCL_ERROR 52939 } 52940 break 52941 52942 } 52943 52944 case uint32(2): 52945 { 52946 var zVfs uintptr 52947 var zParent uintptr 52948 var zLog uintptr 52949 if objc != 5 { 52950 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35846) 52951 return TCL_ERROR 52952 } 52953 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52954 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 52955 zLog = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 52956 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 52957 zParent = uintptr(0) 52958 } 52959 rc = sqlite3_vfslog_new(tls, zVfs, zParent, zLog) 52960 if rc != SQLITE_OK { 52961 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+35839, 0)) 52962 return TCL_ERROR 52963 } 52964 break 52965 52966 } 52967 52968 case uint32(3): 52969 { 52970 var zDb uintptr 52971 if objc != 3 { 52972 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 52973 return TCL_ERROR 52974 } 52975 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52976 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+80) != 0 { 52977 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 80)).FobjClientData)).Fdb 52978 rc = sqlite3_vfslog_register(tls, db) 52979 } 52980 if rc != SQLITE_OK { 52981 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+35865, zDb, uintptr(0))) 52982 return TCL_ERROR 52983 } 52984 break 52985 52986 } 52987 } 52988 52989 return TCL_OK 52990 } 52991 52992 var strs = [5]uintptr{ts + 35886, ts + 35895, ts + 14009, ts + 35904, uintptr(0)} 52993 52994 func SqlitetestOsinst_Init(tls *libc.TLS, interp uintptr) int32 { 52995 tcl.XTcl_CreateObjCommand(tls, interp, ts+35828, *(*uintptr)(unsafe.Pointer(&struct { 52996 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52997 }{test_vfslog})), uintptr(0), uintptr(0)) 52998 return TCL_OK 52999 } 53000 53001 type testpcacheGlobalType1 = struct { 53002 FpDummy uintptr 53003 FnInstance int32 53004 FdiscardChance uint32 53005 FprngSeed uint32 53006 FhighStress uint32 53007 } 53008 53009 type testpcacheGlobalType = testpcacheGlobalType1 53010 53011 var testpcacheGlobal testpcacheGlobalType 53012 53013 func testpcacheInit(tls *libc.TLS, pArg uintptr) int32 { 53014 testpcacheGlobal.FpDummy = sqlite3.Xsqlite3_malloc(tls, 10) 53015 if testpcacheGlobal.FpDummy == uintptr(0) { 53016 return SQLITE_NOMEM 53017 } 53018 return SQLITE_OK 53019 } 53020 53021 func testpcacheShutdown(tls *libc.TLS, pArg uintptr) { 53022 sqlite3.Xsqlite3_free(tls, testpcacheGlobal.FpDummy) 53023 testpcacheGlobal.FpDummy = uintptr(0) 53024 } 53025 53026 type testpcache1 = struct { 53027 FszPage int32 53028 FszExtra int32 53029 FbPurgeable int32 53030 FnFree int32 53031 FnPinned int32 53032 FiRand uint32 53033 FiMagic uint32 53034 F__ccgo_pad1 [4]byte 53035 Fa [217]struct { 53036 Fpage sqlite3_pcache_page 53037 Fkey uint32 53038 FisPinned int32 53039 } 53040 } 53041 53042 type testpcache = testpcache1 53043 type testpcachePage = struct { 53044 Fpage sqlite3_pcache_page 53045 Fkey uint32 53046 FisPinned int32 53047 } 53048 53049 func testpcacheRandom(tls *libc.TLS, p uintptr) uint32 { 53050 var x uint32 = uint32(0) 53051 var i int32 53052 for i = 0; i < 4; i++ { 53053 (*testpcache)(unsafe.Pointer(p)).FiRand = (*testpcache)(unsafe.Pointer(p)).FiRand*uint32(69069) + uint32(5) 53054 x = x<<8 | (*testpcache)(unsafe.Pointer(p)).FiRand>>16&uint32(0xff) 53055 } 53056 return x 53057 } 53058 53059 func testpcacheCreate(tls *libc.TLS, szPage int32, szExtra int32, bPurgeable int32) uintptr { 53060 var nMem int32 53061 var x uintptr 53062 var p uintptr 53063 var i int32 53064 53065 szPage = (szPage + 7) & libc.CplInt32(7) 53066 nMem = int32(uint64(unsafe.Sizeof(testpcache{})) + uint64(TESTPCACHE_NPAGE*(szPage+szExtra))) 53067 p = sqlite3.Xsqlite3_malloc(tls, nMem) 53068 if p == uintptr(0) { 53069 return uintptr(0) 53070 } 53071 x = p + 1*5240 53072 (*testpcache)(unsafe.Pointer(p)).FszPage = szPage 53073 (*testpcache)(unsafe.Pointer(p)).FszExtra = szExtra 53074 (*testpcache)(unsafe.Pointer(p)).FnFree = TESTPCACHE_NPAGE 53075 (*testpcache)(unsafe.Pointer(p)).FnPinned = 0 53076 (*testpcache)(unsafe.Pointer(p)).FiRand = testpcacheGlobal.FprngSeed 53077 (*testpcache)(unsafe.Pointer(p)).FbPurgeable = bPurgeable 53078 (*testpcache)(unsafe.Pointer(p)).FiMagic = uint32(TESTPCACHE_VALID) 53079 i = 0 53080 __1: 53081 if !(i < TESTPCACHE_NPAGE) { 53082 goto __3 53083 } 53084 { 53085 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53086 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 53087 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpBuf = x 53088 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpExtra = x + uintptr(szPage) 53089 53090 } 53091 goto __2 53092 __2: 53093 i++ 53094 x += uintptr(szPage + szExtra) 53095 goto __1 53096 goto __3 53097 __3: 53098 ; 53099 testpcacheGlobal.FnInstance++ 53100 return p 53101 } 53102 53103 func testpcacheCachesize(tls *libc.TLS, pCache uintptr, newSize int32) { 53104 var p uintptr = pCache 53105 _ = p 53106 53107 } 53108 53109 func testpcachePagecount(tls *libc.TLS, pCache uintptr) int32 { 53110 var p uintptr = pCache 53111 53112 return TESTPCACHE_NPAGE - (*testpcache)(unsafe.Pointer(p)).FnFree 53113 } 53114 53115 func testpcacheFetch(tls *libc.TLS, pCache uintptr, key uint32, createFlag int32) uintptr { 53116 var p uintptr = pCache 53117 var i int32 53118 var j int32 53119 53120 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53121 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == key { 53122 if !((*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0) { 53123 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53124 53125 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 1 53126 } 53127 return p + 32 + uintptr(i)*24 53128 } 53129 } 53130 53131 if createFlag == 0 { 53132 return uintptr(0) 53133 } 53134 53135 if (*testpcache)(unsafe.Pointer(p)).FnPinned == TESTPCACHE_NPAGE { 53136 return uintptr(0) 53137 } 53138 53139 if (*testpcache)(unsafe.Pointer(p)).FnPinned >= TESTPCACHE_NPAGE-TESTPCACHE_RESERVE && createFlag < 2 { 53140 return uintptr(0) 53141 } 53142 53143 if testpcacheGlobal.FhighStress != 0 && createFlag < 2 { 53144 return uintptr(0) 53145 } 53146 53147 if (*testpcache)(unsafe.Pointer(p)).FnFree > TESTPCACHE_RESERVE || createFlag == 2 && (*testpcache)(unsafe.Pointer(p)).FnFree > 0 { 53148 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 53149 i = 0 53150 __1: 53151 if !(i < TESTPCACHE_NPAGE) { 53152 goto __3 53153 } 53154 { 53155 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey == uint32(0) { 53156 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 53157 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 53158 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 53159 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 53160 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53161 (*testpcache)(unsafe.Pointer(p)).FnFree-- 53162 53163 return p + 32 + uintptr(j)*24 53164 } 53165 53166 } 53167 goto __2 53168 __2: 53169 i++ 53170 j = (j + 1) % TESTPCACHE_NPAGE 53171 goto __1 53172 goto __3 53173 __3: 53174 } 53175 53176 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable == 0 { 53177 return uintptr(0) 53178 } 53179 53180 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 53181 i = 0 53182 __4: 53183 if !(i < TESTPCACHE_NPAGE) { 53184 goto __6 53185 } 53186 { 53187 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey > uint32(0) && (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).FisPinned == 0 { 53188 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 53189 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 53190 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 53191 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 53192 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53193 53194 return p + 32 + uintptr(j)*24 53195 } 53196 53197 } 53198 goto __5 53199 __5: 53200 i++ 53201 j = (j + 1) % TESTPCACHE_NPAGE 53202 goto __4 53203 goto __6 53204 __6: 53205 ; 53206 return uintptr(0) 53207 } 53208 53209 func testpcacheUnpin(tls *libc.TLS, pCache uintptr, pOldPage uintptr, discard int32) { 53210 var p uintptr = pCache 53211 var i int32 53212 53213 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable != 0 && 53214 uint32(100)-testpcacheGlobal.FdiscardChance <= testpcacheRandom(tls, p)%uint32(100) { 53215 discard = 1 53216 } 53217 53218 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53219 if p+32+uintptr(i)*24 == pOldPage { 53220 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 53221 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 53222 53223 if discard != 0 { 53224 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53225 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53226 53227 } 53228 return 53229 } 53230 } 53231 53232 } 53233 53234 func testpcacheRekey(tls *libc.TLS, pCache uintptr, pOldPage uintptr, oldKey uint32, newKey uint32) { 53235 var p uintptr = pCache 53236 var i int32 53237 53238 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53239 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == newKey { 53240 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53241 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53242 53243 break 53244 } 53245 } 53246 53247 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53248 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == oldKey { 53249 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = newKey 53250 return 53251 } 53252 } 53253 53254 } 53255 53256 func testpcacheTruncate(tls *libc.TLS, pCache uintptr, iLimit uint32) { 53257 var p uintptr = pCache 53258 var i uint32 53259 53260 for i = uint32(0); i < uint32(TESTPCACHE_NPAGE); i++ { 53261 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey >= iLimit { 53262 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53263 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0 { 53264 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 53265 53266 } 53267 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53268 53269 } 53270 } 53271 } 53272 53273 func testpcacheDestroy(tls *libc.TLS, pCache uintptr) { 53274 var p uintptr = pCache 53275 53276 (*testpcache)(unsafe.Pointer(p)).FiMagic = TESTPCACHE_CLEAR 53277 sqlite3.Xsqlite3_free(tls, p) 53278 testpcacheGlobal.FnInstance-- 53279 } 53280 53281 func installTestPCache(tls *libc.TLS, installFlag int32, discardChance uint32, prngSeed uint32, highStress uint32) { 53282 bp := tls.Alloc(24) 53283 defer tls.Free(24) 53284 53285 testpcacheGlobal.FdiscardChance = discardChance 53286 testpcacheGlobal.FprngSeed = prngSeed ^ prngSeed<<16 53287 testpcacheGlobal.FhighStress = highStress 53288 if installFlag != isInstalled { 53289 if installFlag != 0 { 53290 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp, uintptr(unsafe.Pointer(&defaultPcache)))) 53291 53292 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+8, uintptr(unsafe.Pointer(&testPcache)))) 53293 } else { 53294 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&defaultPcache)))) 53295 } 53296 isInstalled = installFlag 53297 } 53298 } 53299 53300 var testPcache = sqlite3_pcache_methods2{ 53301 FiVersion: 1, 53302 FpArg: 0, 53303 FxInit: 0, 53304 FxShutdown: 0, 53305 FxCreate: 0, 53306 FxCachesize: 0, 53307 FxPagecount: 0, 53308 FxFetch: 0, 53309 FxUnpin: 0, 53310 FxRekey: 0, 53311 FxTruncate: 0, 53312 FxDestroy: 0, 53313 } 53314 var defaultPcache sqlite3_pcache_methods2 53315 var isInstalled int32 = 0 53316 53317 type quota_FILE1 = struct { 53318 Ff uintptr 53319 FiOfst sqlite3_int64 53320 FpFile uintptr 53321 } 53322 53323 type quota_FILE = quota_FILE1 53324 53325 type quotaGroup1 = struct { 53326 FzPattern uintptr 53327 FiLimit sqlite3_int64 53328 FiSize sqlite3_int64 53329 FxCallback uintptr 53330 FpArg uintptr 53331 FxDestroy uintptr 53332 FpNext uintptr 53333 FppPrev uintptr 53334 FpFiles uintptr 53335 } 53336 53337 type quotaGroup = quotaGroup1 53338 type quotaConn1 = struct { 53339 Fbase sqlite3_file 53340 FpFile uintptr 53341 } 53342 53343 type quotaConn = quotaConn1 53344 type quotaFile1 = struct { 53345 FzFilename uintptr 53346 FpGroup uintptr 53347 FiSize sqlite3_int64 53348 FnRef int32 53349 FdeleteOnClose int32 53350 FpNext uintptr 53351 FppPrev uintptr 53352 } 53353 53354 type quotaFile = quotaFile1 53355 53356 var gQuota struct { 53357 FpOrigVfs uintptr 53358 FsThisVfs sqlite3_vfs 53359 FsIoMethodsV1 sqlite3_io_methods 53360 FsIoMethodsV2 sqlite3_io_methods 53361 FisInitialized int32 53362 F__ccgo_pad1 [4]byte 53363 FpMutex uintptr 53364 FpGroup uintptr 53365 } 53366 53367 func quotaEnter(tls *libc.TLS) { 53368 sqlite3.Xsqlite3_mutex_enter(tls, gQuota.FpMutex) 53369 } 53370 53371 func quotaLeave(tls *libc.TLS) { 53372 sqlite3.Xsqlite3_mutex_leave(tls, gQuota.FpMutex) 53373 } 53374 53375 func quotaGroupOpenFileCount(tls *libc.TLS, pGroup uintptr) int32 { 53376 var N int32 = 0 53377 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 53378 for pFile != 0 { 53379 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 53380 N++ 53381 } 53382 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 53383 } 53384 return N 53385 } 53386 53387 func quotaRemoveFile(tls *libc.TLS, pFile uintptr) { 53388 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53389 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 53390 *(*uintptr)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FppPrev)) = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 53391 if (*quotaFile)(unsafe.Pointer(pFile)).FpNext != 0 { 53392 (*quotaFile)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpNext)).FppPrev = (*quotaFile)(unsafe.Pointer(pFile)).FppPrev 53393 } 53394 sqlite3.Xsqlite3_free(tls, pFile) 53395 } 53396 53397 func quotaRemoveAllFiles(tls *libc.TLS, pGroup uintptr) { 53398 for (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 53399 quotaRemoveFile(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles) 53400 } 53401 } 53402 53403 func quotaGroupDeref(tls *libc.TLS, pGroup uintptr) { 53404 if (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit == int64(0) && quotaGroupOpenFileCount(tls, pGroup) == 0 { 53405 quotaRemoveAllFiles(tls, pGroup) 53406 *(*uintptr)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev)) = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 53407 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext != 0 { 53408 (*quotaGroup)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpNext)).FppPrev = (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev 53409 } 53410 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 { 53411 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 53412 } 53413 sqlite3.Xsqlite3_free(tls, pGroup) 53414 } 53415 } 53416 53417 func quotaStrglob(tls *libc.TLS, zGlob uintptr, z uintptr) int32 { 53418 var c int32 53419 var c2 int32 53420 var cx int32 53421 var invert int32 53422 var seen int32 53423 53424 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) != 0 { 53425 if c == '*' { 53426 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) == '*' || c == '?' { 53427 if c == '?' && int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 53428 return 0 53429 } 53430 } 53431 if c == 0 { 53432 return 1 53433 } else if c == '[' { 53434 for *(*int8)(unsafe.Pointer(z)) != 0 && quotaStrglob(tls, zGlob-uintptr(1), z) == 0 { 53435 z++ 53436 } 53437 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) != 0) 53438 } 53439 if c == '/' { 53440 cx = '\\' 53441 } else { 53442 cx = c 53443 } 53444 for libc.AssignInt32(&c2, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) != 0 { 53445 for c2 != c && c2 != cx { 53446 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 53447 if c2 == 0 { 53448 return 0 53449 } 53450 } 53451 if quotaStrglob(tls, zGlob, z) != 0 { 53452 return 1 53453 } 53454 } 53455 return 0 53456 } else if c == '?' { 53457 if int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 53458 return 0 53459 } 53460 } else if c == '[' { 53461 var prior_c int32 = 0 53462 seen = 0 53463 invert = 0 53464 c = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 53465 if c == 0 { 53466 return 0 53467 } 53468 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53469 if c2 == '^' { 53470 invert = 1 53471 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53472 } 53473 if c2 == ']' { 53474 if c == ']' { 53475 seen = 1 53476 } 53477 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53478 } 53479 for c2 != 0 && c2 != ']' { 53480 if c2 == '-' && int32(*(*int8)(unsafe.Pointer(zGlob))) != ']' && int32(*(*int8)(unsafe.Pointer(zGlob))) != 0 && prior_c > 0 { 53481 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53482 if c >= prior_c && c <= c2 { 53483 seen = 1 53484 } 53485 prior_c = 0 53486 } else { 53487 if c == c2 { 53488 seen = 1 53489 } 53490 prior_c = c2 53491 } 53492 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53493 } 53494 if c2 == 0 || seen^invert == 0 { 53495 return 0 53496 } 53497 } else if c == '/' { 53498 if int32(*(*int8)(unsafe.Pointer(z))) != '/' && int32(*(*int8)(unsafe.Pointer(z))) != '\\' { 53499 return 0 53500 } 53501 z++ 53502 } else { 53503 if c != int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) { 53504 return 0 53505 } 53506 } 53507 } 53508 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) == 0) 53509 } 53510 53511 func quotaGroupFind(tls *libc.TLS, zFilename uintptr) uintptr { 53512 var p uintptr 53513 for p = gQuota.FpGroup; p != 0 && quotaStrglob(tls, (*quotaGroup)(unsafe.Pointer(p)).FzPattern, zFilename) == 0; p = (*quotaGroup)(unsafe.Pointer(p)).FpNext { 53514 } 53515 return p 53516 } 53517 53518 func quotaSubOpen(tls *libc.TLS, pConn uintptr) uintptr { 53519 var p uintptr = pConn 53520 return p + 1*16 53521 } 53522 53523 func quotaFindFile(tls *libc.TLS, pGroup uintptr, zName uintptr, createFlag int32) uintptr { 53524 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 53525 for pFile != 0 && libc.Xstrcmp(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName) != 0 { 53526 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 53527 } 53528 if pFile == uintptr(0) && createFlag != 0 { 53529 var nName int32 = int32(libc.Xstrlen(tls, zName) & uint64(0x3fffffff)) 53530 pFile = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaFile{}))+uint64(nName)+uint64(1))) 53531 if pFile != 0 { 53532 libc.Xmemset(tls, pFile, 0, uint64(unsafe.Sizeof(quotaFile{}))) 53533 (*quotaFile)(unsafe.Pointer(pFile)).FzFilename = pFile + 1*48 53534 libc.Xmemcpy(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName, uint64(nName+1)) 53535 (*quotaFile)(unsafe.Pointer(pFile)).FpNext = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 53536 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 53537 (*quotaFile)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles)).FppPrev = pFile + 32 53538 } 53539 (*quotaFile)(unsafe.Pointer(pFile)).FppPrev = pGroup + 64 53540 (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles = pFile 53541 (*quotaFile)(unsafe.Pointer(pFile)).FpGroup = pGroup 53542 } 53543 } 53544 return pFile 53545 } 53546 53547 func quota_utf8_to_mbcs(tls *libc.TLS, zUtf8 uintptr) uintptr { 53548 return zUtf8 53549 } 53550 53551 func quota_mbcs_free(tls *libc.TLS, zOld uintptr) { 53552 } 53553 53554 func quotaOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 53555 var rc int32 53556 var pQuotaOpen uintptr 53557 var pFile uintptr 53558 var pGroup uintptr 53559 var pSubOpen uintptr 53560 var pOrigVfs uintptr = gQuota.FpOrigVfs 53561 53562 if flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0 { 53563 return (*struct { 53564 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53565 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 53566 } 53567 53568 quotaEnter(tls) 53569 pGroup = quotaGroupFind(tls, zName) 53570 if pGroup == uintptr(0) { 53571 rc = (*struct { 53572 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53573 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 53574 } else { 53575 pQuotaOpen = pConn 53576 pSubOpen = quotaSubOpen(tls, pConn) 53577 rc = (*struct { 53578 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53579 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pSubOpen, flags, pOutFlags) 53580 if rc == SQLITE_OK { 53581 pFile = quotaFindFile(tls, pGroup, zName, 1) 53582 if pFile == uintptr(0) { 53583 quotaLeave(tls) 53584 (*struct { 53585 f func(*libc.TLS, uintptr) int32 53586 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 53587 return SQLITE_NOMEM 53588 } 53589 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = libc.Bool32(flags&SQLITE_OPEN_DELETEONCLOSE != 0) 53590 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 53591 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).FpFile = pFile 53592 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 53593 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 176 53594 } else { 53595 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 328 53596 } 53597 } 53598 } 53599 quotaLeave(tls) 53600 return rc 53601 } 53602 53603 func quotaDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 53604 var rc int32 53605 var pFile uintptr 53606 var pGroup uintptr 53607 var pOrigVfs uintptr = gQuota.FpOrigVfs 53608 53609 rc = (*struct { 53610 f func(*libc.TLS, uintptr, uintptr, int32) int32 53611 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 53612 53613 if rc == SQLITE_OK { 53614 quotaEnter(tls) 53615 pGroup = quotaGroupFind(tls, zName) 53616 if pGroup != 0 { 53617 pFile = quotaFindFile(tls, pGroup, zName, 0) 53618 if pFile != 0 { 53619 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 53620 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 53621 } else { 53622 quotaRemoveFile(tls, pFile) 53623 quotaGroupDeref(tls, pGroup) 53624 } 53625 } 53626 } 53627 quotaLeave(tls) 53628 } 53629 return rc 53630 } 53631 53632 func quotaClose(tls *libc.TLS, pConn uintptr) int32 { 53633 var p uintptr = pConn 53634 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 53635 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53636 var rc int32 53637 rc = (*struct { 53638 f func(*libc.TLS, uintptr) int32 53639 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 53640 quotaEnter(tls) 53641 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 53642 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 53643 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53644 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 53645 (*struct { 53646 f func(*libc.TLS, uintptr, uintptr, int32) int32 53647 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 53648 quotaRemoveFile(tls, pFile) 53649 } 53650 quotaGroupDeref(tls, pGroup) 53651 } 53652 quotaLeave(tls) 53653 return rc 53654 } 53655 53656 func quotaRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 53657 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53658 return (*struct { 53659 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53660 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 53661 } 53662 53663 func quotaWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 53664 var p uintptr = pConn 53665 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53666 var iEnd sqlite3_int64 = iOfst + sqlite3_int64(iAmt) 53667 var pGroup uintptr 53668 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 53669 var szNew sqlite3_int64 53670 53671 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 53672 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53673 quotaEnter(tls) 53674 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 53675 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 53676 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 53677 (*struct { 53678 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 53679 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 53680 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 53681 } 53682 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 53683 quotaLeave(tls) 53684 return SQLITE_FULL 53685 } 53686 } 53687 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 53688 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 53689 quotaLeave(tls) 53690 } 53691 return (*struct { 53692 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53693 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 53694 } 53695 53696 func quotaTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 53697 var p uintptr = pConn 53698 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53699 var rc int32 = (*struct { 53700 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53701 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 53702 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 53703 var pGroup uintptr 53704 if rc == SQLITE_OK { 53705 quotaEnter(tls) 53706 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53707 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 53708 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = size 53709 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += size 53710 quotaLeave(tls) 53711 } 53712 return rc 53713 } 53714 53715 func quotaSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 53716 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53717 return (*struct { 53718 f func(*libc.TLS, uintptr, int32) int32 53719 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 53720 } 53721 53722 func quotaFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 53723 bp := tls.Alloc(8) 53724 defer tls.Free(8) 53725 53726 var p uintptr = pConn 53727 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53728 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 53729 var pGroup uintptr 53730 53731 var rc int32 53732 53733 rc = (*struct { 53734 f func(*libc.TLS, uintptr, uintptr) int32 53735 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp) 53736 if rc == SQLITE_OK { 53737 quotaEnter(tls) 53738 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53739 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 53740 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = *(*sqlite3_int64)(unsafe.Pointer(bp)) 53741 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += *(*sqlite3_int64)(unsafe.Pointer(bp)) 53742 quotaLeave(tls) 53743 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = *(*sqlite3_int64)(unsafe.Pointer(bp)) 53744 } 53745 return rc 53746 } 53747 53748 func quotaLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 53749 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53750 return (*struct { 53751 f func(*libc.TLS, uintptr, int32) int32 53752 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 53753 } 53754 53755 func quotaUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 53756 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53757 return (*struct { 53758 f func(*libc.TLS, uintptr, int32) int32 53759 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 53760 } 53761 53762 func quotaCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 53763 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53764 return (*struct { 53765 f func(*libc.TLS, uintptr, uintptr) int32 53766 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 53767 } 53768 53769 func quotaFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 53770 bp := tls.Alloc(8) 53771 defer tls.Free(8) 53772 53773 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53774 var rc int32 = (*struct { 53775 f func(*libc.TLS, uintptr, int32, uintptr) int32 53776 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 53777 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 53778 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35913, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 53779 } 53780 return rc 53781 } 53782 53783 func quotaSectorSize(tls *libc.TLS, pConn uintptr) int32 { 53784 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53785 return (*struct { 53786 f func(*libc.TLS, uintptr) int32 53787 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 53788 } 53789 53790 func quotaDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 53791 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53792 return (*struct { 53793 f func(*libc.TLS, uintptr) int32 53794 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 53795 } 53796 53797 func quotaShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 53798 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53799 return (*struct { 53800 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 53801 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 53802 } 53803 53804 func quotaShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 53805 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53806 return (*struct { 53807 f func(*libc.TLS, uintptr, int32, int32, int32) int32 53808 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 53809 } 53810 53811 func quotaShmBarrier(tls *libc.TLS, pConn uintptr) { 53812 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53813 (*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) 53814 } 53815 53816 func quotaShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 53817 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53818 return (*struct { 53819 f func(*libc.TLS, uintptr, int32) int32 53820 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 53821 } 53822 53823 func sqlite3_quota_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 53824 var pOrigVfs uintptr 53825 if gQuota.FisInitialized != 0 { 53826 return SQLITE_MISUSE 53827 } 53828 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 53829 if pOrigVfs == uintptr(0) { 53830 return SQLITE_ERROR 53831 } 53832 53833 gQuota.FpMutex = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 53834 if !(int32(gQuota.FpMutex) != 0) { 53835 return SQLITE_NOMEM 53836 } 53837 gQuota.FisInitialized = 1 53838 gQuota.FpOrigVfs = pOrigVfs 53839 gQuota.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 53840 gQuota.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 53841 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53842 }{quotaOpen})) 53843 gQuota.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 53844 f func(*libc.TLS, uintptr, uintptr, int32) int32 53845 }{quotaDelete})) 53846 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gQuota)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(quotaConn{}))) 53847 gQuota.FsThisVfs.FzName = ts + 35922 53848 gQuota.FsIoMethodsV1.FiVersion = 1 53849 gQuota.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 53850 f func(*libc.TLS, uintptr) int32 53851 }{quotaClose})) 53852 gQuota.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 53853 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53854 }{quotaRead})) 53855 gQuota.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 53856 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53857 }{quotaWrite})) 53858 gQuota.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 53859 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53860 }{quotaTruncate})) 53861 gQuota.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 53862 f func(*libc.TLS, uintptr, int32) int32 53863 }{quotaSync})) 53864 gQuota.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 53865 f func(*libc.TLS, uintptr, uintptr) int32 53866 }{quotaFileSize})) 53867 gQuota.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 53868 f func(*libc.TLS, uintptr, int32) int32 53869 }{quotaLock})) 53870 gQuota.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 53871 f func(*libc.TLS, uintptr, int32) int32 53872 }{quotaUnlock})) 53873 gQuota.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 53874 f func(*libc.TLS, uintptr, uintptr) int32 53875 }{quotaCheckReservedLock})) 53876 gQuota.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 53877 f func(*libc.TLS, uintptr, int32, uintptr) int32 53878 }{quotaFileControl})) 53879 gQuota.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 53880 f func(*libc.TLS, uintptr) int32 53881 }{quotaSectorSize})) 53882 gQuota.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 53883 f func(*libc.TLS, uintptr) int32 53884 }{quotaDeviceCharacteristics})) 53885 gQuota.FsIoMethodsV2 = gQuota.FsIoMethodsV1 53886 gQuota.FsIoMethodsV2.FiVersion = 2 53887 gQuota.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 53888 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 53889 }{quotaShmMap})) 53890 gQuota.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 53891 f func(*libc.TLS, uintptr, int32, int32, int32) int32 53892 }{quotaShmLock})) 53893 gQuota.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{quotaShmBarrier})) 53894 gQuota.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 53895 f func(*libc.TLS, uintptr, int32) int32 53896 }{quotaShmUnmap})) 53897 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gQuota))+8, makeDefault) 53898 return SQLITE_OK 53899 } 53900 53901 func sqlite3_quota_shutdown(tls *libc.TLS) int32 { 53902 var pGroup uintptr 53903 if gQuota.FisInitialized == 0 { 53904 return SQLITE_MISUSE 53905 } 53906 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 53907 if quotaGroupOpenFileCount(tls, pGroup) > 0 { 53908 return SQLITE_MISUSE 53909 } 53910 } 53911 for gQuota.FpGroup != 0 { 53912 pGroup = gQuota.FpGroup 53913 gQuota.FpGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 53914 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = int64(0) 53915 53916 quotaGroupDeref(tls, pGroup) 53917 } 53918 gQuota.FisInitialized = 0 53919 sqlite3.Xsqlite3_mutex_free(tls, gQuota.FpMutex) 53920 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gQuota))+8) 53921 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gQuota)), 0, uint64(unsafe.Sizeof(gQuota))) 53922 return SQLITE_OK 53923 } 53924 53925 func sqlite3_quota_set(tls *libc.TLS, zPattern uintptr, iLimit sqlite3_int64, xCallback uintptr, pArg uintptr, xDestroy uintptr) int32 { 53926 var pGroup uintptr 53927 quotaEnter(tls) 53928 pGroup = gQuota.FpGroup 53929 for pGroup != 0 && libc.Xstrcmp(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern) != 0 { 53930 pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 53931 } 53932 if pGroup == uintptr(0) { 53933 var nPattern int32 = int32(libc.Xstrlen(tls, zPattern) & uint64(0x3fffffff)) 53934 if iLimit <= int64(0) { 53935 quotaLeave(tls) 53936 return SQLITE_OK 53937 } 53938 pGroup = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaGroup{}))+uint64(nPattern)+uint64(1))) 53939 if pGroup == uintptr(0) { 53940 quotaLeave(tls) 53941 return SQLITE_NOMEM 53942 } 53943 libc.Xmemset(tls, pGroup, 0, uint64(unsafe.Sizeof(quotaGroup{}))) 53944 (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern = pGroup + 1*72 53945 libc.Xmemcpy(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern, uint64(nPattern+1)) 53946 if gQuota.FpGroup != 0 { 53947 (*quotaGroup)(unsafe.Pointer(gQuota.FpGroup)).FppPrev = pGroup + 48 53948 } 53949 (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext = gQuota.FpGroup 53950 (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev = uintptr(unsafe.Pointer(&gQuota)) + 496 53951 gQuota.FpGroup = pGroup 53952 } 53953 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = iLimit 53954 (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback = xCallback 53955 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 && (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg != pArg { 53956 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 53957 } 53958 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg = pArg 53959 (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy = xDestroy 53960 quotaGroupDeref(tls, pGroup) 53961 quotaLeave(tls) 53962 return SQLITE_OK 53963 } 53964 53965 func sqlite3_quota_file(tls *libc.TLS, zFilename uintptr) int32 { 53966 bp := tls.Alloc(16) 53967 defer tls.Free(16) 53968 53969 var zFull uintptr = uintptr(0) 53970 var fd uintptr 53971 var rc int32 53972 *(*int32)(unsafe.Pointer(bp)) = 0 53973 53974 var nAlloc int32 = gQuota.FsThisVfs.FszOsFile + gQuota.FsThisVfs.FmxPathname + 2 53975 53976 fd = sqlite3.Xsqlite3_malloc(tls, nAlloc) 53977 if fd == uintptr(0) { 53978 rc = SQLITE_NOMEM 53979 } else { 53980 zFull = fd + uintptr(gQuota.FsThisVfs.FszOsFile) 53981 rc = (*struct { 53982 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53983 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 53984 gQuota.FsThisVfs.FmxPathname+1, zFull) 53985 } 53986 53987 if rc == SQLITE_OK { 53988 *(*int8)(unsafe.Pointer(zFull + uintptr(libc.Xstrlen(tls, zFull)+uint64(1)))) = int8(0) 53989 rc = quotaOpen(tls, uintptr(unsafe.Pointer(&gQuota))+8, zFull, fd, 53990 SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_DB, bp) 53991 if rc == SQLITE_OK { 53992 (*struct { 53993 f func(*libc.TLS, uintptr, uintptr) int32 53994 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxFileSize})).f(tls, fd, bp+8) 53995 (*struct { 53996 f func(*libc.TLS, uintptr) int32 53997 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxClose})).f(tls, fd) 53998 } else if rc == SQLITE_CANTOPEN { 53999 var pGroup uintptr 54000 var pFile uintptr 54001 quotaEnter(tls) 54002 pGroup = quotaGroupFind(tls, zFull) 54003 if pGroup != 0 { 54004 pFile = quotaFindFile(tls, pGroup, zFull, 0) 54005 if pFile != 0 { 54006 quotaRemoveFile(tls, pFile) 54007 } 54008 } 54009 quotaLeave(tls) 54010 } 54011 } 54012 54013 sqlite3.Xsqlite3_free(tls, fd) 54014 return rc 54015 } 54016 54017 func sqlite3_quota_fopen(tls *libc.TLS, zFilename uintptr, zMode uintptr) uintptr { 54018 var p uintptr 54019 var zFull uintptr 54020 var zFullTranslated uintptr 54021 var rc int32 54022 var pGroup uintptr 54023 var pFile uintptr 54024 p = uintptr(0) 54025 zFull = uintptr(0) 54026 zFullTranslated = uintptr(0) 54027 54028 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 54029 if !(zFull == uintptr(0)) { 54030 goto __1 54031 } 54032 return uintptr(0) 54033 __1: 54034 ; 54035 rc = (*struct { 54036 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54037 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54038 gQuota.FsThisVfs.FmxPathname+1, zFull) 54039 if !(rc != 0) { 54040 goto __2 54041 } 54042 goto quota_fopen_error 54043 __2: 54044 ; 54045 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(quota_FILE{}))) 54046 if !(p == uintptr(0)) { 54047 goto __3 54048 } 54049 goto quota_fopen_error 54050 __3: 54051 ; 54052 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(quota_FILE{}))) 54053 zFullTranslated = quota_utf8_to_mbcs(tls, zFull) 54054 if !(zFullTranslated == uintptr(0)) { 54055 goto __4 54056 } 54057 goto quota_fopen_error 54058 __4: 54059 ; 54060 (*quota_FILE)(unsafe.Pointer(p)).Ff = libc.Xfopen(tls, zFullTranslated, zMode) 54061 if !((*quota_FILE)(unsafe.Pointer(p)).Ff == uintptr(0)) { 54062 goto __5 54063 } 54064 goto quota_fopen_error 54065 __5: 54066 ; 54067 quotaEnter(tls) 54068 pGroup = quotaGroupFind(tls, zFull) 54069 if !(pGroup != 0) { 54070 goto __6 54071 } 54072 pFile = quotaFindFile(tls, pGroup, zFull, 1) 54073 if !(pFile == uintptr(0)) { 54074 goto __7 54075 } 54076 quotaLeave(tls) 54077 goto quota_fopen_error 54078 __7: 54079 ; 54080 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 54081 (*quota_FILE)(unsafe.Pointer(p)).FpFile = pFile 54082 __6: 54083 ; 54084 quotaLeave(tls) 54085 sqlite3.Xsqlite3_free(tls, zFull) 54086 return p 54087 54088 quota_fopen_error: 54089 quota_mbcs_free(tls, zFullTranslated) 54090 sqlite3.Xsqlite3_free(tls, zFull) 54091 if !(p != 0 && (*quota_FILE)(unsafe.Pointer(p)).Ff != 0) { 54092 goto __8 54093 } 54094 libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54095 __8: 54096 ; 54097 sqlite3.Xsqlite3_free(tls, p) 54098 return uintptr(0) 54099 } 54100 54101 func sqlite3_quota_fread(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 54102 return libc.Xfread(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54103 } 54104 54105 func sqlite3_quota_fwrite(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 54106 var iOfst sqlite3_int64 54107 var iEnd sqlite3_int64 54108 var szNew sqlite3_int64 54109 var pFile uintptr 54110 var rc size_t 54111 54112 iOfst = libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54113 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 54114 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54115 if pFile != 0 && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 54116 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54117 quotaEnter(tls) 54118 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54119 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54120 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 54121 (*struct { 54122 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54123 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 54124 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54125 } 54126 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54127 iEnd = (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit - (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize + (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54128 nmemb = uint64(iEnd-iOfst) / size 54129 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 54130 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54131 } 54132 } 54133 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 54134 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 54135 quotaLeave(tls) 54136 } else { 54137 pFile = uintptr(0) 54138 } 54139 rc = libc.Xfwrite(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54140 54141 if rc < nmemb && pFile != 0 { 54142 var nWritten size_t = rc 54143 var iNewEnd sqlite3_int64 = sqlite3_int64(uint64(iOfst) + size*nWritten) 54144 if iNewEnd < iEnd { 54145 iNewEnd = iEnd 54146 } 54147 quotaEnter(tls) 54148 *(*sqlite3_int64)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpGroup + 16)) += iNewEnd - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54149 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iNewEnd 54150 quotaLeave(tls) 54151 } 54152 return rc 54153 } 54154 54155 func sqlite3_quota_fclose(tls *libc.TLS, p uintptr) int32 { 54156 var rc int32 54157 var pFile uintptr 54158 rc = libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54159 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54160 if pFile != 0 { 54161 quotaEnter(tls) 54162 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 54163 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 54164 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54165 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 54166 (*struct { 54167 f func(*libc.TLS, uintptr, uintptr, int32) int32 54168 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54169 quotaRemoveFile(tls, pFile) 54170 } 54171 quotaGroupDeref(tls, pGroup) 54172 } 54173 quotaLeave(tls) 54174 } 54175 sqlite3.Xsqlite3_free(tls, p) 54176 return rc 54177 } 54178 54179 func sqlite3_quota_fflush(tls *libc.TLS, p uintptr, doFsync int32) int32 { 54180 var rc int32 54181 rc = libc.Xfflush(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54182 if rc == 0 && doFsync != 0 { 54183 rc = libc.Xfsync(tls, func() int32 { 54184 if !(libc.X__isthreaded != 0) { 54185 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54186 } 54187 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54188 }()) 54189 } 54190 return libc.Bool32(rc != 0) 54191 } 54192 54193 func sqlite3_quota_fseek(tls *libc.TLS, p uintptr, offset int64, whence int32) int32 { 54194 return libc.Xfseek(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff, offset, whence) 54195 } 54196 54197 func sqlite3_quota_rewind(tls *libc.TLS, p uintptr) { 54198 libc.Xrewind(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54199 } 54200 54201 func sqlite3_quota_ftell(tls *libc.TLS, p uintptr) int64 { 54202 return libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54203 } 54204 54205 func sqlite3_quota_ferror(tls *libc.TLS, p uintptr) int32 { 54206 return func() int32 { 54207 if !(libc.X__isthreaded != 0) { 54208 return libc.Bool32(int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_flags)&0x0040 != 0) 54209 } 54210 return libc.Xferror(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54211 }() 54212 } 54213 54214 func sqlite3_quota_ftruncate(tls *libc.TLS, p uintptr, szNew sqlite3_int64) int32 { 54215 var pFile uintptr = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54216 var rc int32 54217 if libc.AssignUintptr(&pFile, (*quota_FILE)(unsafe.Pointer(p)).FpFile) != uintptr(0) && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 54218 var pGroup uintptr 54219 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 54220 return -1 54221 } 54222 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54223 quotaEnter(tls) 54224 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54225 quotaLeave(tls) 54226 } 54227 rc = libc.Xftruncate(tls, func() int32 { 54228 if !(libc.X__isthreaded != 0) { 54229 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54230 } 54231 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54232 }(), szNew) 54233 if pFile != 0 && rc == 0 { 54234 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54235 quotaEnter(tls) 54236 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54237 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = szNew 54238 quotaLeave(tls) 54239 } 54240 return rc 54241 } 54242 54243 func sqlite3_quota_file_mtime(tls *libc.TLS, p uintptr, pTime uintptr) int32 { 54244 bp := tls.Alloc(128) 54245 defer tls.Free(128) 54246 54247 var rc int32 54248 54249 rc = libc.Xfstat(tls, func() int32 { 54250 if !(libc.X__isthreaded != 0) { 54251 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54252 } 54253 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54254 }(), bp) 54255 if rc == 0 { 54256 *(*time_t)(unsafe.Pointer(pTime)) = (*stat)(unsafe.Pointer(bp)).Fst_mtim.Ftv_sec 54257 } 54258 return rc 54259 } 54260 54261 func sqlite3_quota_file_truesize(tls *libc.TLS, p uintptr) sqlite3_int64 { 54262 bp := tls.Alloc(128) 54263 defer tls.Free(128) 54264 54265 var rc int32 54266 54267 rc = libc.Xfstat(tls, func() int32 { 54268 if !(libc.X__isthreaded != 0) { 54269 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54270 } 54271 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54272 }(), bp) 54273 if rc == 0 { 54274 return (*stat)(unsafe.Pointer(bp)).Fst_size 54275 } 54276 return int64(-1) 54277 } 54278 54279 func sqlite3_quota_file_size(tls *libc.TLS, p uintptr) sqlite3_int64 { 54280 if (*quota_FILE)(unsafe.Pointer(p)).FpFile != 0 { 54281 return (*quotaFile)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).FpFile)).FiSize 54282 } 54283 return int64(-1) 54284 } 54285 54286 func sqlite3_quota_file_available(tls *libc.TLS, p uintptr) int64 { 54287 var f uintptr = (*quota_FILE)(unsafe.Pointer(p)).Ff 54288 var pos1 int64 54289 var pos2 int64 54290 var rc int32 54291 pos1 = libc.Xftell(tls, f) 54292 if pos1 < int64(0) { 54293 return int64(-1) 54294 } 54295 rc = libc.Xfseek(tls, f, int64(0), SEEK_END) 54296 if rc != 0 { 54297 return int64(-1) 54298 } 54299 pos2 = libc.Xftell(tls, f) 54300 if pos2 < int64(0) { 54301 return int64(-1) 54302 } 54303 rc = libc.Xfseek(tls, f, pos1, SEEK_SET) 54304 if rc != 0 { 54305 return int64(-1) 54306 } 54307 return pos2 - pos1 54308 } 54309 54310 func sqlite3_quota_remove(tls *libc.TLS, zFilename uintptr) int32 { 54311 var zFull uintptr 54312 var nFull size_t 54313 var rc int32 54314 var pGroup uintptr 54315 var pFile uintptr 54316 var pNextFile uintptr 54317 var diff int32 54318 var c int8 54319 54320 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 54321 if zFull == uintptr(0) { 54322 return SQLITE_NOMEM 54323 } 54324 rc = (*struct { 54325 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54326 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54327 gQuota.FsThisVfs.FmxPathname+1, zFull) 54328 if rc != 0 { 54329 sqlite3.Xsqlite3_free(tls, zFull) 54330 return rc 54331 } 54332 54333 nFull = libc.Xstrlen(tls, zFull) 54334 if nFull > uint64(0) && (int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '/' || int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '\\') { 54335 nFull-- 54336 *(*int8)(unsafe.Pointer(zFull + uintptr(nFull))) = int8(0) 54337 } 54338 54339 quotaEnter(tls) 54340 pGroup = quotaGroupFind(tls, zFull) 54341 if pGroup != 0 { 54342 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0 && rc == SQLITE_OK; pFile = pNextFile { 54343 pNextFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54344 diff = libc.Xstrncmp(tls, zFull, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, nFull) 54345 if diff == 0 && (int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FzFilename + uintptr(nFull))))) == 0 || int32(c) == '/' || int32(c) == '\\') { 54346 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54347 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 54348 } else { 54349 rc = (*struct { 54350 f func(*libc.TLS, uintptr, uintptr, int32) int32 54351 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54352 quotaRemoveFile(tls, pFile) 54353 quotaGroupDeref(tls, pGroup) 54354 } 54355 } 54356 } 54357 } 54358 quotaLeave(tls) 54359 sqlite3.Xsqlite3_free(tls, zFull) 54360 return rc 54361 } 54362 54363 type TclQuotaCallback1 = struct { 54364 Finterp uintptr 54365 FpScript uintptr 54366 } 54367 54368 type TclQuotaCallback = TclQuotaCallback1 54369 54370 func tclQuotaCallback(tls *libc.TLS, zFilename uintptr, piLimit uintptr, iSize sqlite3_int64, pArg uintptr) { 54371 bp := tls.Alloc(16) 54372 defer tls.Free(16) 54373 54374 var p uintptr 54375 var pEval uintptr 54376 var pVarname uintptr 54377 54378 var rc int32 54379 54380 p = pArg 54381 if p == uintptr(0) { 54382 return 54383 } 54384 54385 pVarname = tcl.XTcl_NewStringObj(tls, ts+35928, -1) 54386 (*Tcl_Obj)(unsafe.Pointer(pVarname)).FrefCount++ 54387 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(uint32(0))), bp) 54388 tcl.XTcl_AppendObjToObj(tls, pVarname, tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer(bp))&uint32(0x7FFFFFFF)))) 54389 tcl.XTcl_ObjSetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(piLimit))), 0) 54390 54391 pEval = tcl.XTcl_DuplicateObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript) 54392 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 54393 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zFilename, -1)) 54394 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pVarname) 54395 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewWideIntObj(tls, iSize)) 54396 rc = tcl.XTcl_EvalObjEx(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 54397 54398 if rc == TCL_OK { 54399 var pLimit uintptr = tcl.XTcl_ObjGetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), 0) 54400 rc = tcl.XTcl_GetWideIntFromObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pLimit, bp+8) 54401 *(*sqlite3_int64)(unsafe.Pointer(piLimit)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) 54402 tcl.XTcl_UnsetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetString(tls, pVarname), uintptr(0), 0) 54403 } 54404 54405 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 54406 var _objPtr uintptr = pEval 54407 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 54408 tcl.XTclFreeObj(tls, _objPtr) 54409 } 54410 } 54411 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 54412 var _objPtr uintptr = pVarname 54413 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 54414 tcl.XTclFreeObj(tls, _objPtr) 54415 } 54416 } 54417 if rc != TCL_OK { 54418 tcl.XTcl_BackgroundError(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp) 54419 } 54420 } 54421 54422 func tclCallbackDestructor(tls *libc.TLS, pObj uintptr) { 54423 var p uintptr = pObj 54424 if p != 0 { 54425 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 54426 var _objPtr uintptr = (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript 54427 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 54428 tcl.XTclFreeObj(tls, _objPtr) 54429 } 54430 } 54431 sqlite3.Xsqlite3_free(tls, p) 54432 } 54433 } 54434 54435 func test_quota_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54436 bp := tls.Alloc(4) 54437 defer tls.Free(4) 54438 54439 var zName uintptr 54440 54441 var rc int32 54442 54443 if objc != 3 { 54444 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 54445 return TCL_ERROR 54446 } 54447 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54448 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54449 return TCL_ERROR 54450 } 54451 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 54452 zName = uintptr(0) 54453 } 54454 54455 rc = sqlite3_quota_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 54456 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54457 54458 return TCL_OK 54459 } 54460 54461 func test_quota_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54462 var rc int32 54463 54464 if objc != 1 { 54465 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 54466 return TCL_ERROR 54467 } 54468 54469 rc = sqlite3_quota_shutdown(tls) 54470 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54471 54472 return TCL_OK 54473 } 54474 54475 func test_quota_set(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54476 bp := tls.Alloc(12) 54477 defer tls.Free(12) 54478 54479 var zPattern uintptr 54480 54481 var pScript uintptr 54482 var rc int32 54483 var p uintptr 54484 54485 var xDestroy uintptr 54486 var xCallback uintptr 54487 54488 if objc != 4 { 54489 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35939) 54490 return TCL_ERROR 54491 } 54492 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54493 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54494 return TCL_ERROR 54495 } 54496 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 54497 tcl.XTcl_GetStringFromObj(tls, pScript, bp+8) 54498 54499 if *(*int32)(unsafe.Pointer(bp + 8)) > 0 { 54500 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TclQuotaCallback{}))) 54501 if !(p != 0) { 54502 tcl.XTcl_SetResult(tls, interp, ts+32746, uintptr(0)) 54503 return TCL_OK 54504 } 54505 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TclQuotaCallback{}))) 54506 (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp = interp 54507 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 54508 (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript = pScript 54509 xDestroy = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tclCallbackDestructor})) 54510 xCallback = *(*uintptr)(unsafe.Pointer(&struct { 54511 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54512 }{tclQuotaCallback})) 54513 } else { 54514 p = uintptr(0) 54515 xDestroy = uintptr(0) 54516 xCallback = uintptr(0) 54517 } 54518 54519 rc = sqlite3_quota_set(tls, zPattern, *(*Tcl_WideInt)(unsafe.Pointer(bp)), xCallback, p, xDestroy) 54520 54521 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54522 return TCL_OK 54523 } 54524 54525 func test_quota_file(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54526 var zFilename uintptr 54527 var rc int32 54528 54529 if objc != 2 { 54530 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 54531 return TCL_ERROR 54532 } 54533 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54534 54535 rc = sqlite3_quota_file(tls, zFilename) 54536 54537 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54538 return TCL_OK 54539 } 54540 54541 func test_quota_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54542 bp := tls.Alloc(1008) 54543 defer tls.Free(1008) 54544 54545 var pResult uintptr 54546 var pGroupTerm uintptr 54547 var pFileTerm uintptr 54548 var pGroup uintptr 54549 var pFile uintptr 54550 54551 pResult = tcl.XTcl_NewObj(tls) 54552 quotaEnter(tls) 54553 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 54554 pGroupTerm = tcl.XTcl_NewObj(tls) 54555 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 54556 tcl.XTcl_NewStringObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, -1)) 54557 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 54558 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit)) 54559 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 54560 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize)) 54561 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0; pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext { 54562 var i int32 54563 54564 pFileTerm = tcl.XTcl_NewObj(tls) 54565 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+8, ts, libc.VaList(bp, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename)) 54566 for i = 0; *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) != 0; i++ { 54567 if int32(*(*int8)(unsafe.Pointer(bp + 8 + uintptr(i)))) == '\\' { 54568 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8('/') 54569 } 54570 } 54571 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 54572 tcl.XTcl_NewStringObj(tls, bp+8, -1)) 54573 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 54574 tcl.XTcl_NewWideIntObj(tls, (*quotaFile)(unsafe.Pointer(pFile)).FiSize)) 54575 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 54576 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FnRef))) 54577 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 54578 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose))) 54579 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, pFileTerm) 54580 } 54581 tcl.XTcl_ListObjAppendElement(tls, interp, pResult, pGroupTerm) 54582 } 54583 quotaLeave(tls) 54584 tcl.XTcl_SetObjResult(tls, interp, pResult) 54585 return TCL_OK 54586 } 54587 54588 func test_quota_fopen(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54589 bp := tls.Alloc(58) 54590 defer tls.Free(58) 54591 54592 var zFilename uintptr 54593 var zMode uintptr 54594 var p uintptr 54595 54596 if objc != 3 { 54597 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35960) 54598 return TCL_ERROR 54599 } 54600 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54601 zMode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 54602 p = sqlite3_quota_fopen(tls, zFilename, zMode) 54603 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+8, ts+9889, libc.VaList(bp, p)) 54604 tcl.XTcl_SetResult(tls, interp, bp+8, uintptr(1)) 54605 return TCL_OK 54606 } 54607 54608 func test_quota_fread(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54609 bp := tls.Alloc(8) 54610 defer tls.Free(8) 54611 54612 var p uintptr 54613 var zBuf uintptr 54614 54615 var got size_t 54616 54617 if objc != 4 { 54618 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35974) 54619 return TCL_ERROR 54620 } 54621 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54622 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54623 return TCL_ERROR 54624 } 54625 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 54626 return TCL_ERROR 54627 } 54628 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp))**(*int32)(unsafe.Pointer(bp + 4))+1) 54629 if zBuf == uintptr(0) { 54630 tcl.XTcl_SetResult(tls, interp, ts+2069, uintptr(0)) 54631 return TCL_ERROR 54632 } 54633 got = sqlite3_quota_fread(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 54634 *(*int8)(unsafe.Pointer(zBuf + uintptr(got*size_t(*(*int32)(unsafe.Pointer(bp)))))) = int8(0) 54635 tcl.XTcl_SetResult(tls, interp, zBuf, uintptr(1)) 54636 sqlite3.Xsqlite3_free(tls, zBuf) 54637 return TCL_OK 54638 } 54639 54640 func test_quota_fwrite(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54641 bp := tls.Alloc(8) 54642 defer tls.Free(8) 54643 54644 var p uintptr 54645 var zBuf uintptr 54646 54647 var got size_t 54648 54649 if objc != 5 { 54650 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35992) 54651 return TCL_ERROR 54652 } 54653 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54654 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54655 return TCL_ERROR 54656 } 54657 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 54658 return TCL_ERROR 54659 } 54660 zBuf = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 54661 got = sqlite3_quota_fwrite(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 54662 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(got))) 54663 return TCL_OK 54664 } 54665 54666 func test_quota_fclose(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54667 var p uintptr 54668 var rc int32 54669 54670 if objc != 2 { 54671 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54672 return TCL_ERROR 54673 } 54674 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54675 rc = sqlite3_quota_fclose(tls, p) 54676 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54677 return TCL_OK 54678 } 54679 54680 func test_quota_fflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54681 bp := tls.Alloc(4) 54682 defer tls.Free(4) 54683 54684 var p uintptr 54685 var rc int32 54686 *(*int32)(unsafe.Pointer(bp)) = 0 54687 54688 if objc != 2 && objc != 3 { 54689 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36018) 54690 return TCL_ERROR 54691 } 54692 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54693 if objc == 3 { 54694 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54695 return TCL_ERROR 54696 } 54697 } 54698 rc = sqlite3_quota_fflush(tls, p, *(*int32)(unsafe.Pointer(bp))) 54699 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54700 return TCL_OK 54701 } 54702 54703 func test_quota_fseek(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54704 bp := tls.Alloc(20) 54705 defer tls.Free(20) 54706 54707 var p uintptr 54708 54709 var zWhence uintptr 54710 var whence int32 54711 var rc int32 54712 54713 if objc != 4 { 54714 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36036) 54715 return TCL_ERROR 54716 } 54717 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54718 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 54719 return TCL_ERROR 54720 } 54721 zWhence = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 54722 if libc.Xstrcmp(tls, zWhence, ts+36057) == 0 { 54723 whence = SEEK_SET 54724 } else if libc.Xstrcmp(tls, zWhence, ts+36066) == 0 { 54725 whence = SEEK_CUR 54726 } else if libc.Xstrcmp(tls, zWhence, ts+36075) == 0 { 54727 whence = SEEK_END 54728 } else { 54729 tcl.XTcl_AppendResult(tls, interp, 54730 libc.VaList(bp, ts+36084, uintptr(0))) 54731 return TCL_ERROR 54732 } 54733 rc = sqlite3_quota_fseek(tls, p, int64(*(*int32)(unsafe.Pointer(bp + 16))), whence) 54734 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54735 return TCL_OK 54736 } 54737 54738 func test_quota_rewind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54739 var p uintptr 54740 if objc != 2 { 54741 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54742 return TCL_ERROR 54743 } 54744 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54745 sqlite3_quota_rewind(tls, p) 54746 return TCL_OK 54747 } 54748 54749 func test_quota_ftell(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54750 var p uintptr 54751 var x sqlite3_int64 54752 if objc != 2 { 54753 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54754 return TCL_ERROR 54755 } 54756 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54757 x = sqlite3_quota_ftell(tls, p) 54758 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 54759 return TCL_OK 54760 } 54761 54762 func test_quota_ftruncate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54763 bp := tls.Alloc(8) 54764 defer tls.Free(8) 54765 54766 var p uintptr 54767 var x sqlite3_int64 54768 54769 var rc int32 54770 if objc != 3 { 54771 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36133) 54772 return TCL_ERROR 54773 } 54774 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54775 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54776 return TCL_ERROR 54777 } 54778 x = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 54779 rc = sqlite3_quota_ftruncate(tls, p, x) 54780 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54781 return TCL_OK 54782 } 54783 54784 func test_quota_file_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54785 var p uintptr 54786 var x sqlite3_int64 54787 if objc != 2 { 54788 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54789 return TCL_ERROR 54790 } 54791 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54792 x = sqlite3_quota_file_size(tls, p) 54793 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 54794 return TCL_OK 54795 } 54796 54797 func test_quota_file_truesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54798 var p uintptr 54799 var x sqlite3_int64 54800 if objc != 2 { 54801 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54802 return TCL_ERROR 54803 } 54804 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54805 x = sqlite3_quota_file_truesize(tls, p) 54806 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 54807 return TCL_OK 54808 } 54809 54810 func test_quota_file_mtime(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54811 bp := tls.Alloc(8) 54812 defer tls.Free(8) 54813 54814 var p uintptr 54815 54816 if objc != 2 { 54817 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54818 return TCL_ERROR 54819 } 54820 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54821 *(*time_t)(unsafe.Pointer(bp)) = int64(0) 54822 sqlite3_quota_file_mtime(tls, p, bp) 54823 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*time_t)(unsafe.Pointer(bp)))) 54824 return TCL_OK 54825 } 54826 54827 func test_quota_remove(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54828 var zFilename uintptr 54829 var rc int32 54830 if objc != 2 { 54831 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 54832 return TCL_ERROR 54833 } 54834 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54835 rc = sqlite3_quota_remove(tls, zFilename) 54836 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54837 return TCL_OK 54838 } 54839 54840 func test_quota_glob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54841 var zPattern uintptr 54842 var zText uintptr 54843 var rc int32 54844 if objc != 3 { 54845 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36145) 54846 return TCL_ERROR 54847 } 54848 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54849 zText = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 54850 rc = quotaStrglob(tls, zPattern, zText) 54851 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54852 return TCL_OK 54853 } 54854 54855 func test_quota_file_available(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54856 var p uintptr 54857 var x sqlite3_int64 54858 if objc != 2 { 54859 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54860 return TCL_ERROR 54861 } 54862 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54863 x = sqlite3_quota_file_available(tls, p) 54864 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 54865 return TCL_OK 54866 } 54867 54868 func test_quota_ferror(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54869 var p uintptr 54870 var x int32 54871 if objc != 2 { 54872 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54873 return TCL_ERROR 54874 } 54875 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54876 x = sqlite3_quota_ferror(tls, p) 54877 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, x)) 54878 return TCL_OK 54879 } 54880 54881 func Sqlitequota_Init(tls *libc.TLS, interp uintptr) int32 { 54882 var i int32 54883 54884 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd9))/uint64(unsafe.Sizeof(struct { 54885 FzName uintptr 54886 FxProc uintptr 54887 }{})); i++ { 54888 tcl.XTcl_CreateObjCommand(tls, interp, aCmd9[i].FzName, aCmd9[i].FxProc, uintptr(0), uintptr(0)) 54889 } 54890 54891 return TCL_OK 54892 } 54893 54894 var aCmd9 = [21]struct { 54895 FzName uintptr 54896 FxProc uintptr 54897 }{ 54898 {FzName: ts + 36158, FxProc: 0}, 54899 {FzName: ts + 36183, FxProc: 0}, 54900 {FzName: ts + 36206, FxProc: 0}, 54901 {FzName: ts + 36224, FxProc: 0}, 54902 {FzName: ts + 36243, FxProc: 0}, 54903 {FzName: ts + 36262, FxProc: 0}, 54904 {FzName: ts + 36282, FxProc: 0}, 54905 {FzName: ts + 36302, FxProc: 0}, 54906 {FzName: ts + 36323, FxProc: 0}, 54907 {FzName: ts + 36344, FxProc: 0}, 54908 {FzName: ts + 36365, FxProc: 0}, 54909 {FzName: ts + 36385, FxProc: 0}, 54910 {FzName: ts + 36406, FxProc: 0}, 54911 {FzName: ts + 36426, FxProc: 0}, 54912 {FzName: ts + 36450, FxProc: 0}, 54913 {FzName: ts + 36474, FxProc: 0}, 54914 {FzName: ts + 36502, FxProc: 0}, 54915 {FzName: ts + 36527, FxProc: 0}, 54916 {FzName: ts + 36548, FxProc: 0}, 54917 {FzName: ts + 36567, FxProc: 0}, 54918 {FzName: ts + 36596, FxProc: 0}, 54919 } 54920 54921 type Circle1 = struct { 54922 FaBox [2]struct { 54923 Fxmin float64 54924 Fxmax float64 54925 Fymin float64 54926 Fymax float64 54927 } 54928 Fcenterx float64 54929 Fcentery float64 54930 Fradius float64 54931 FmxArea float64 54932 FeScoreType int32 54933 F__ccgo_pad1 [4]byte 54934 } 54935 54936 type Circle = Circle1 54937 type Box = struct { 54938 Fxmin float64 54939 Fxmax float64 54940 Fymin float64 54941 Fymax float64 54942 } 54943 54944 func circle_del(tls *libc.TLS, p uintptr) { 54945 sqlite3.Xsqlite3_free(tls, p) 54946 } 54947 54948 func circle_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 54949 var i int32 54950 var pCircle uintptr 54951 var xmin float64 54952 var xmax float64 54953 var ymin float64 54954 var ymax float64 54955 54956 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) 54957 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) 54958 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) 54959 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) 54960 pCircle = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 54961 if pCircle == uintptr(0) { 54962 if nCoord != 4 { 54963 return SQLITE_ERROR 54964 } 54965 54966 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 { 54967 return SQLITE_ERROR 54968 } 54969 54970 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 54971 if !(pCircle != 0) { 54972 return SQLITE_NOMEM 54973 } 54974 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 54975 54976 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 54977 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 54978 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 54979 54980 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 54981 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 54982 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 54983 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 54984 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 54985 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 54986 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 54987 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 54988 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = (xmax-xmin)*(ymax-ymin) + 1.0 54989 } 54990 54991 for i = 0; i < 4; i++ { 54992 var x float64 54993 if i&0x01 != 0 { 54994 x = xmax 54995 } else { 54996 x = xmin 54997 } 54998 var y float64 54999 if i&0x02 != 0 { 55000 y = ymax 55001 } else { 55002 y = ymin 55003 } 55004 var d2 float64 55005 55006 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55007 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55008 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55009 *(*int32)(unsafe.Pointer(pRes)) = 1 55010 return SQLITE_OK 55011 } 55012 } 55013 55014 for i = 0; i < 2; i++ { 55015 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55016 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55017 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55018 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55019 *(*int32)(unsafe.Pointer(pRes)) = 1 55020 return SQLITE_OK 55021 } 55022 } 55023 55024 *(*int32)(unsafe.Pointer(pRes)) = 0 55025 return SQLITE_OK 55026 } 55027 55028 func circle_query_func(tls *libc.TLS, p uintptr) int32 { 55029 var i int32 55030 var pCircle uintptr 55031 var xmin float64 55032 var xmax float64 55033 var ymin float64 55034 var ymax float64 55035 var nWithin int32 = 0 55036 55037 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55038 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55039 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55040 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55041 pCircle = (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FpUser 55042 if pCircle == uintptr(0) { 55043 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnCoord != 4 { 55044 return SQLITE_ERROR 55045 } 55046 55047 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 && (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 1 { 55048 return SQLITE_ERROR 55049 } 55050 55051 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 55052 if !(pCircle != 0) { 55053 return SQLITE_NOMEM 55054 } 55055 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 55056 55057 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam == 4 { 55058 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55059 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55060 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55061 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(*(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8))) 55062 } else { 55063 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FapSqlParam))) 55064 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = 0.0 55065 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = 0.0 55066 (*Circle)(unsafe.Pointer(pCircle)).Fradius = 0.0 55067 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = 0 55068 for z != 0 && *(*int8)(unsafe.Pointer(z)) != 0 { 55069 if int32(*(*int8)(unsafe.Pointer(z))) == 'r' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55070 (*Circle)(unsafe.Pointer(pCircle)).Fradius = libc.Xatof(tls, z+2) 55071 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'x' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55072 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = libc.Xatof(tls, z+2) 55073 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'y' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55074 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = libc.Xatof(tls, z+2) 55075 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'e' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55076 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(libc.Xatof(tls, z+2)) 55077 } else if int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 55078 z++ 55079 continue 55080 } 55081 for int32(*(*int8)(unsafe.Pointer(z))) != 0 && int32(*(*int8)(unsafe.Pointer(z))) != ' ' { 55082 z++ 55083 } 55084 for int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 55085 z++ 55086 } 55087 } 55088 } 55089 if (*Circle)(unsafe.Pointer(pCircle)).Fradius < 0.0 { 55090 sqlite3.Xsqlite3_free(tls, pCircle) 55091 return SQLITE_NOMEM 55092 } 55093 55094 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55095 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55096 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55097 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55098 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55099 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55100 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55101 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55102 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = float64(200.0) * 200.0 55103 } 55104 55105 for i = 0; i < 4; i++ { 55106 var x float64 55107 if i&0x01 != 0 { 55108 x = xmax 55109 } else { 55110 x = xmin 55111 } 55112 var y float64 55113 if i&0x02 != 0 { 55114 y = ymax 55115 } else { 55116 y = ymin 55117 } 55118 var d2 float64 55119 55120 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55121 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55122 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55123 nWithin++ 55124 } 55125 } 55126 55127 if nWithin == 0 { 55128 for i = 0; i < 2; i++ { 55129 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55130 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55131 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55132 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55133 nWithin = 1 55134 break 55135 } 55136 } 55137 } 55138 55139 if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 1 { 55140 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55141 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 2 { 55142 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55143 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 3 { 55144 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel == 1 { 55145 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 1.0 - (xmax-xmin)*(ymax-ymin)/(*Circle)(unsafe.Pointer(pCircle)).FmxArea 55146 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore < 0.01 { 55147 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.01 55148 } 55149 } else { 55150 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.0 55151 } 55152 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 4 { 55153 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55154 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 55155 nWithin = 0 55156 } 55157 } else { 55158 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55159 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 55160 nWithin = 0 55161 } 55162 } 55163 if nWithin == 0 { 55164 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 55165 } else if nWithin >= 4 { 55166 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55167 } else { 55168 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 55169 } 55170 return SQLITE_OK 55171 } 55172 55173 func bfs_query_func(tls *libc.TLS, p uintptr) int32 { 55174 var x0 float64 55175 var x1 float64 55176 var y0 float64 55177 var y1 float64 55178 var bx0 float64 55179 var bx1 float64 55180 var by0 float64 55181 var by1 float64 55182 55183 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 { 55184 return SQLITE_ERROR 55185 } 55186 x0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55187 x1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55188 y0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55189 y1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55190 bx0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55191 bx1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55192 by0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55193 by1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8)) 55194 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55195 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeParentWithin == FULLY_WITHIN { 55196 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55197 } else if x0 >= bx0 && x1 <= bx1 && y0 >= by0 && y1 <= by1 { 55198 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55199 } else if x1 >= bx0 && x0 <= bx1 && y1 >= by0 && y0 <= by1 { 55200 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 55201 } else { 55202 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 55203 } 55204 return SQLITE_OK 55205 } 55206 55207 type Cube1 = struct { 55208 Fx float64 55209 Fy float64 55210 Fz float64 55211 Fwidth float64 55212 Fheight float64 55213 Fdepth float64 55214 } 55215 55216 type Cube = Cube1 55217 55218 func cube_context_free(tls *libc.TLS, p uintptr) { 55219 sqlite3.Xsqlite3_free(tls, p) 55220 } 55221 55222 var gHere int32 = 42 55223 55224 func cube_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, piRes uintptr) int32 { 55225 var pCube uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 55226 55227 if pCube == uintptr(0) { 55228 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != 6 || nCoord != 6 || 55229 *(*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 { 55230 return SQLITE_ERROR 55231 } 55232 pCube = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Cube{}))) 55233 if !(pCube != 0) { 55234 return SQLITE_NOMEM 55235 } 55236 (*Cube)(unsafe.Pointer(pCube)).Fx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 55237 (*Cube)(unsafe.Pointer(pCube)).Fy = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 55238 (*Cube)(unsafe.Pointer(pCube)).Fz = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 55239 (*Cube)(unsafe.Pointer(pCube)).Fwidth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 3*8)) 55240 (*Cube)(unsafe.Pointer(pCube)).Fheight = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 4*8)) 55241 (*Cube)(unsafe.Pointer(pCube)).Fdepth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 5*8)) 55242 55243 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pCube 55244 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cube_context_free})) 55245 } 55246 55247 *(*int32)(unsafe.Pointer(piRes)) = 0 55248 if *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) <= (*Cube)(unsafe.Pointer(pCube)).Fx+(*Cube)(unsafe.Pointer(pCube)).Fwidth && 55249 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fx && 55250 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fy+(*Cube)(unsafe.Pointer(pCube)).Fheight && 55251 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fy && 55252 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 4*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fz+(*Cube)(unsafe.Pointer(pCube)).Fdepth && 55253 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 5*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fz { 55254 *(*int32)(unsafe.Pointer(piRes)) = 1 55255 } 55256 55257 return SQLITE_OK 55258 } 55259 55260 func register_cube_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55261 bp := tls.Alloc(8) 55262 defer tls.Free(8) 55263 55264 var rc int32 55265 55266 if objc != 2 { 55267 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55268 return TCL_ERROR 55269 } 55270 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 55271 return TCL_ERROR 55272 } 55273 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36617, *(*uintptr)(unsafe.Pointer(&struct { 55274 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 55275 }{cube_geom})), uintptr(unsafe.Pointer(&gHere))) 55276 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55277 return TCL_OK 55278 } 55279 55280 func register_circle_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55281 bp := tls.Alloc(8) 55282 defer tls.Free(8) 55283 55284 var rc int32 55285 55286 if objc != 2 { 55287 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55288 return TCL_ERROR 55289 } 55290 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 55291 return TCL_ERROR 55292 } 55293 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36622, *(*uintptr)(unsafe.Pointer(&struct { 55294 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 55295 }{circle_geom})), uintptr(0)) 55296 if rc == SQLITE_OK { 55297 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36629, 55298 *(*uintptr)(unsafe.Pointer(&struct { 55299 f func(*libc.TLS, uintptr) int32 55300 }{circle_query_func})), uintptr(0), uintptr(0)) 55301 } 55302 if rc == SQLITE_OK { 55303 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36637, 55304 *(*uintptr)(unsafe.Pointer(&struct { 55305 f func(*libc.TLS, uintptr) int32 55306 }{bfs_query_func})), uintptr(0), uintptr(0)) 55307 } 55308 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55309 return TCL_OK 55310 } 55311 55312 func Sqlitetestrtree_Init(tls *libc.TLS, interp uintptr) int32 { 55313 tcl.XTcl_CreateObjCommand(tls, interp, ts+36656, *(*uintptr)(unsafe.Pointer(&struct { 55314 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55315 }{register_cube_geom})), uintptr(0), uintptr(0)) 55316 tcl.XTcl_CreateObjCommand(tls, interp, ts+36675, *(*uintptr)(unsafe.Pointer(&struct { 55317 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55318 }{register_circle_geom})), uintptr(0), uintptr(0)) 55319 return TCL_OK 55320 } 55321 55322 type schema_vtab1 = struct { 55323 Fbase sqlite3_vtab 55324 Fdb uintptr 55325 } 55326 55327 type schema_vtab = schema_vtab1 55328 type schema_cursor1 = struct { 55329 Fbase sqlite3_vtab_cursor 55330 FpDbList uintptr 55331 FpTableList uintptr 55332 FpColumnList uintptr 55333 Frowid int32 55334 F__ccgo_pad1 [4]byte 55335 } 55336 55337 type schema_cursor = schema_cursor1 55338 55339 func schemaDestroy(tls *libc.TLS, pVtab uintptr) int32 { 55340 sqlite3.Xsqlite3_free(tls, pVtab) 55341 return 0 55342 } 55343 55344 func schemaCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 55345 var rc int32 = SQLITE_NOMEM 55346 var pVtab uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_vtab{}))) 55347 if pVtab != 0 { 55348 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(schema_vtab{}))) 55349 (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb = db 55350 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+36696) 55351 } 55352 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 55353 return rc 55354 } 55355 55356 func schemaOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 55357 var rc int32 = SQLITE_NOMEM 55358 var pCur uintptr 55359 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_cursor{}))) 55360 if pCur != 0 { 55361 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(schema_cursor{}))) 55362 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 55363 rc = SQLITE_OK 55364 } 55365 return rc 55366 } 55367 55368 func schemaClose(tls *libc.TLS, cur uintptr) int32 { 55369 var pCur uintptr = cur 55370 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList) 55371 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) 55372 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) 55373 sqlite3.Xsqlite3_free(tls, pCur) 55374 return SQLITE_OK 55375 } 55376 55377 func schemaColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 55378 var pCur uintptr = cur 55379 switch i { 55380 case 0: 55381 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1)) 55382 break 55383 case 1: 55384 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0)) 55385 break 55386 default: 55387 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList, i-2)) 55388 break 55389 } 55390 return SQLITE_OK 55391 } 55392 55393 func schemaRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 55394 var pCur uintptr = cur 55395 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*schema_cursor)(unsafe.Pointer(pCur)).Frowid) 55396 return SQLITE_OK 55397 } 55398 55399 func finalize(tls *libc.TLS, ppStmt uintptr) int32 { 55400 var rc int32 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(ppStmt))) 55401 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 55402 return rc 55403 } 55404 55405 func schemaEof(tls *libc.TLS, cur uintptr) int32 { 55406 var pCur uintptr = cur 55407 return func() int32 { 55408 if (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList != 0 { 55409 return 0 55410 } 55411 return 1 55412 }() 55413 } 55414 55415 func schemaNext(tls *libc.TLS, cur uintptr) int32 { 55416 bp := tls.Alloc(24) 55417 defer tls.Free(24) 55418 55419 var rc int32 55420 var pCur uintptr 55421 var pVtab uintptr 55422 var zSql uintptr 55423 var pDbList uintptr 55424 rc = SQLITE_OK 55425 pCur = cur 55426 pVtab = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 55427 zSql = uintptr(0) 55428 55429 __1: 55430 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList)) { 55431 goto __2 55432 } 55433 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+24))) { 55434 goto __3 55435 } 55436 goto next_exit 55437 __3: 55438 ; 55439 __4: 55440 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList)) { 55441 goto __5 55442 } 55443 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+16))) { 55444 goto __6 55445 } 55446 goto next_exit 55447 __6: 55448 ; 55449 __7: 55450 if !(SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList)) { 55451 goto __8 55452 } 55453 rc = finalize(tls, pCur+8) 55454 goto next_exit 55455 goto __7 55456 __8: 55457 ; 55458 if !(sqlite3.Xsqlite3_column_int(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 0) == 1) { 55459 goto __9 55460 } 55461 zSql = sqlite3.Xsqlite3_mprintf(tls, 55462 ts+36768, 0) 55463 goto __10 55464 __9: 55465 pDbList = (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList 55466 zSql = sqlite3.Xsqlite3_mprintf(tls, 55467 ts+36823, 55468 libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pDbList, 1))) 55469 __10: 55470 ; 55471 if !!(zSql != 0) { 55472 goto __11 55473 } 55474 rc = SQLITE_NOMEM 55475 goto next_exit 55476 __11: 55477 ; 55478 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+16, uintptr(0)) 55479 sqlite3.Xsqlite3_free(tls, zSql) 55480 if !(rc != SQLITE_OK) { 55481 goto __12 55482 } 55483 goto next_exit 55484 __12: 55485 ; 55486 goto __4 55487 __5: 55488 ; 55489 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+36876, 55490 libc.VaList(bp+8, sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1), 55491 sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0))) 55492 55493 if !!(zSql != 0) { 55494 goto __13 55495 } 55496 rc = SQLITE_NOMEM 55497 goto next_exit 55498 __13: 55499 ; 55500 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+24, uintptr(0)) 55501 sqlite3.Xsqlite3_free(tls, zSql) 55502 if !(rc != SQLITE_OK) { 55503 goto __14 55504 } 55505 goto next_exit 55506 __14: 55507 ; 55508 goto __1 55509 __2: 55510 ; 55511 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid++ 55512 55513 next_exit: 55514 return rc 55515 } 55516 55517 func schemaFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 55518 var rc int32 55519 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 55520 var pCur uintptr = pVtabCursor 55521 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid = 0 55522 finalize(tls, pCur+16) 55523 finalize(tls, pCur+24) 55524 finalize(tls, pCur+8) 55525 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, ts+36901, -1, pCur+8, uintptr(0)) 55526 return func() int32 { 55527 if rc == SQLITE_OK { 55528 return schemaNext(tls, pVtabCursor) 55529 } 55530 return rc 55531 }() 55532 } 55533 55534 func schemaBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 55535 return SQLITE_OK 55536 } 55537 55538 var schemaModule = sqlite3_module{ 55539 FxCreate: 0, 55540 FxConnect: 0, 55541 FxBestIndex: 0, 55542 FxDisconnect: 0, 55543 FxDestroy: 0, 55544 FxOpen: 0, 55545 FxClose: 0, 55546 FxFilter: 0, 55547 FxNext: 0, 55548 FxEof: 0, 55549 FxColumn: 0, 55550 FxRowid: 0, 55551 } 55552 55553 func register_schema_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 55554 bp := tls.Alloc(8) 55555 defer tls.Free(8) 55556 55557 if objc != 2 { 55558 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55559 return TCL_ERROR 55560 } 55561 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 55562 return TCL_ERROR 55563 } 55564 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+4808, uintptr(unsafe.Pointer(&schemaModule)), uintptr(0)) 55565 return TCL_OK 55566 } 55567 55568 func Sqlitetestschema_Init(tls *libc.TLS, interp uintptr) int32 { 55569 var i int32 55570 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd12))/uint64(unsafe.Sizeof(struct { 55571 FzName uintptr 55572 FxProc uintptr 55573 FclientData uintptr 55574 }{})); i++ { 55575 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd12[i].FzName, 55576 aObjCmd12[i].FxProc, aObjCmd12[i].FclientData, uintptr(0)) 55577 } 55578 return TCL_OK 55579 } 55580 55581 var aObjCmd12 = [1]struct { 55582 FzName uintptr 55583 FxProc uintptr 55584 FclientData uintptr 55585 }{ 55586 {FzName: ts + 36922, FxProc: 0}, 55587 } 55588 55589 type SqlMessage1 = struct { 55590 Fop int32 55591 F__ccgo_pad1 [4]byte 55592 FpDb uintptr 55593 FpStmt uintptr 55594 FerrCode int32 55595 F__ccgo_pad2 [4]byte 55596 FzIn uintptr 55597 FnByte int32 55598 F__ccgo_pad3 [4]byte 55599 FzOut uintptr 55600 FpNext uintptr 55601 FpPrev uintptr 55602 FclientMutex pthread_mutex_t 55603 FclientWakeup pthread_cond_t 55604 } 55605 55606 type SqlMessage = SqlMessage1 55607 55608 type ServerState = struct { 55609 FqueueMutex pthread_mutex_t 55610 FserverMutex pthread_mutex_t 55611 FserverWakeup pthread_cond_t 55612 FserverHalt int32 55613 F__ccgo_pad1 [4]byte 55614 FpQueueHead uintptr 55615 FpQueueTail uintptr 55616 } 55617 55618 var g4 = ServerState{} 55619 55620 func sendToServer(tls *libc.TLS, pMsg uintptr) { 55621 libc.Xpthread_mutex_init(tls, pMsg+72, uintptr(0)) 55622 libc.Xpthread_cond_init(tls, pMsg+80, uintptr(0)) 55623 55624 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 55625 (*SqlMessage)(unsafe.Pointer(pMsg)).FpNext = g4.FpQueueHead 55626 if g4.FpQueueHead == uintptr(0) { 55627 g4.FpQueueTail = pMsg 55628 } else { 55629 (*SqlMessage)(unsafe.Pointer(g4.FpQueueHead)).FpPrev = pMsg 55630 } 55631 (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev = uintptr(0) 55632 g4.FpQueueHead = pMsg 55633 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 55634 55635 libc.Xpthread_mutex_lock(tls, pMsg+72) 55636 libc.Xpthread_cond_signal(tls, uintptr(unsafe.Pointer(&g4))+16) 55637 for (*SqlMessage)(unsafe.Pointer(pMsg)).Fop != MSG_Done { 55638 libc.Xpthread_cond_wait(tls, pMsg+80, pMsg+72) 55639 } 55640 libc.Xpthread_mutex_unlock(tls, pMsg+72) 55641 55642 libc.Xpthread_mutex_destroy(tls, pMsg+72) 55643 libc.Xpthread_cond_destroy(tls, pMsg+80) 55644 } 55645 55646 func sqlite3_client_open(tls *libc.TLS, zDatabaseName uintptr, ppDb uintptr) int32 { 55647 bp := tls.Alloc(88) 55648 defer tls.Free(88) 55649 55650 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Open 55651 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zDatabaseName 55652 sendToServer(tls, bp) 55653 *(*uintptr)(unsafe.Pointer(ppDb)) = (*SqlMessage)(unsafe.Pointer(bp)).FpDb 55654 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55655 } 55656 55657 func sqlite3_client_prepare(tls *libc.TLS, pDb uintptr, zSql uintptr, nByte int32, ppStmt uintptr, pzTail uintptr) int32 { 55658 bp := tls.Alloc(88) 55659 defer tls.Free(88) 55660 55661 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Prepare 55662 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 55663 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zSql 55664 (*SqlMessage)(unsafe.Pointer(bp)).FnByte = nByte 55665 sendToServer(tls, bp) 55666 *(*uintptr)(unsafe.Pointer(ppStmt)) = (*SqlMessage)(unsafe.Pointer(bp)).FpStmt 55667 if pzTail != 0 { 55668 *(*uintptr)(unsafe.Pointer(pzTail)) = (*SqlMessage)(unsafe.Pointer(bp)).FzOut 55669 } 55670 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55671 } 55672 55673 func sqlite3_client_step(tls *libc.TLS, pStmt uintptr) int32 { 55674 bp := tls.Alloc(88) 55675 defer tls.Free(88) 55676 55677 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Step 55678 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 55679 sendToServer(tls, bp) 55680 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55681 } 55682 55683 func sqlite3_client_reset(tls *libc.TLS, pStmt uintptr) int32 { 55684 bp := tls.Alloc(88) 55685 defer tls.Free(88) 55686 55687 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Reset 55688 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 55689 sendToServer(tls, bp) 55690 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55691 } 55692 55693 func sqlite3_client_finalize(tls *libc.TLS, pStmt uintptr) int32 { 55694 bp := tls.Alloc(88) 55695 defer tls.Free(88) 55696 55697 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Finalize 55698 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 55699 sendToServer(tls, bp) 55700 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55701 } 55702 55703 func sqlite3_client_close(tls *libc.TLS, pDb uintptr) int32 { 55704 bp := tls.Alloc(88) 55705 defer tls.Free(88) 55706 55707 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Close 55708 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 55709 sendToServer(tls, bp) 55710 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55711 } 55712 55713 func sqlite3_server(tls *libc.TLS, NotUsed uintptr) uintptr { 55714 if libc.Xpthread_mutex_trylock(tls, uintptr(unsafe.Pointer(&g4))+8) != 0 { 55715 return uintptr(0) 55716 } 55717 sqlite3.Xsqlite3_enable_shared_cache(tls, 1) 55718 for !(g4.FserverHalt != 0) { 55719 var pMsg uintptr 55720 55721 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 55722 for g4.FpQueueTail == uintptr(0) && g4.FserverHalt == 0 { 55723 libc.Xpthread_cond_wait(tls, uintptr(unsafe.Pointer(&g4))+16, uintptr(unsafe.Pointer(&g4))) 55724 } 55725 pMsg = g4.FpQueueTail 55726 if pMsg != 0 { 55727 if (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev != 0 { 55728 (*SqlMessage)(unsafe.Pointer((*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev)).FpNext = uintptr(0) 55729 } else { 55730 g4.FpQueueHead = uintptr(0) 55731 } 55732 g4.FpQueueTail = (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev 55733 } 55734 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 55735 if pMsg == uintptr(0) { 55736 break 55737 } 55738 55739 libc.Xpthread_mutex_lock(tls, pMsg+72) 55740 switch (*SqlMessage)(unsafe.Pointer(pMsg)).Fop { 55741 case MSG_Open: 55742 { 55743 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_open(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, pMsg+8) 55744 break 55745 55746 } 55747 case MSG_Prepare: 55748 { 55749 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_prepare(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, (*SqlMessage)(unsafe.Pointer(pMsg)).FnByte, 55750 pMsg+16, pMsg+48) 55751 break 55752 55753 } 55754 case MSG_Step: 55755 { 55756 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_step(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 55757 break 55758 55759 } 55760 case MSG_Reset: 55761 { 55762 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_reset(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 55763 break 55764 55765 } 55766 case MSG_Finalize: 55767 { 55768 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_finalize(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 55769 break 55770 55771 } 55772 case MSG_Close: 55773 { 55774 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_close(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb) 55775 break 55776 55777 } 55778 } 55779 55780 (*SqlMessage)(unsafe.Pointer(pMsg)).Fop = MSG_Done 55781 libc.Xpthread_mutex_unlock(tls, pMsg+72) 55782 libc.Xpthread_cond_signal(tls, pMsg+80) 55783 } 55784 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+8) 55785 return uintptr(0) 55786 } 55787 55788 func sqlite3_server_start(tls *libc.TLS) { 55789 bp := tls.Alloc(8) 55790 defer tls.Free(8) 55791 55792 var rc int32 55793 g4.FserverHalt = 0 55794 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 55795 f func(*libc.TLS, uintptr) uintptr 55796 }{sqlite3_server})), uintptr(0)) 55797 if rc == 0 { 55798 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 55799 } 55800 } 55801 55802 func serverWrapper(tls *libc.TLS, pnDecr uintptr) uintptr { 55803 var p uintptr = sqlite3_server(tls, uintptr(0)) 55804 *(*int32)(unsafe.Pointer(pnDecr))-- 55805 return p 55806 } 55807 55808 func sqlite3_server_start2(tls *libc.TLS, pnDecr uintptr) { 55809 bp := tls.Alloc(8) 55810 defer tls.Free(8) 55811 55812 var rc int32 55813 g4.FserverHalt = 0 55814 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 55815 f func(*libc.TLS, uintptr) uintptr 55816 }{serverWrapper})), pnDecr) 55817 if rc == 0 { 55818 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 55819 } 55820 } 55821 55822 func sqlite3_server_stop(tls *libc.TLS) { 55823 g4.FserverHalt = 1 55824 libc.Xpthread_cond_broadcast(tls, uintptr(unsafe.Pointer(&g4))+16) 55825 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))+8) 55826 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+8) 55827 } 55828 55829 type SuperlockBusy1 = struct { 55830 FxBusy uintptr 55831 FpBusyArg uintptr 55832 FnBusy int32 55833 F__ccgo_pad1 [4]byte 55834 } 55835 55836 type SuperlockBusy = SuperlockBusy1 55837 55838 type Superlock1 = struct { 55839 Fdb uintptr 55840 FbWal int32 55841 F__ccgo_pad1 [4]byte 55842 } 55843 55844 type Superlock = Superlock1 55845 55846 func superlockBusyHandler(tls *libc.TLS, pCtx uintptr, UNUSED int32) int32 { 55847 var pBusy uintptr = pCtx 55848 if (*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy == uintptr(0) { 55849 return 0 55850 } 55851 return (*struct { 55852 f func(*libc.TLS, uintptr, int32) int32 55853 })(unsafe.Pointer(&struct{ uintptr }{(*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy})).f(tls, (*SuperlockBusy)(unsafe.Pointer(pBusy)).FpBusyArg, libc.PostIncInt32(&(*SuperlockBusy)(unsafe.Pointer(pBusy)).FnBusy, 1)) 55854 } 55855 55856 func superlockIsWal(tls *libc.TLS, pLock uintptr) int32 { 55857 bp := tls.Alloc(8) 55858 defer tls.Free(8) 55859 55860 var rc int32 55861 55862 rc = sqlite3.Xsqlite3_prepare(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+36945, -1, bp, uintptr(0)) 55863 if rc != SQLITE_OK { 55864 return rc 55865 } 55866 55867 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 0 55868 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 55869 var zMode uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 55870 if zMode != 0 && libc.Xstrlen(tls, zMode) == uint64(3) && sqlite3.Xsqlite3_strnicmp(tls, ts+29946, zMode, 3) == 0 { 55871 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 1 55872 } 55873 } 55874 55875 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 55876 } 55877 55878 func superlockShmLock(tls *libc.TLS, fd uintptr, idx int32, nByte int32, pBusy uintptr) int32 { 55879 var rc int32 55880 var xShmLock uintptr = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxShmLock 55881 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_BUSY && superlockBusyHandler(tls, pBusy, 0) != 0 { 55882 rc = (*struct { 55883 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55884 })(unsafe.Pointer(&struct{ uintptr }{xShmLock})).f(tls, fd, idx, nByte, SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) 55885 } 55886 return rc 55887 } 55888 55889 func superlockWalLock(tls *libc.TLS, db uintptr, pBusy uintptr) int32 { 55890 bp := tls.Alloc(16) 55891 defer tls.Free(16) 55892 55893 var rc int32 55894 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 55895 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 55896 55897 rc = sqlite3.Xsqlite3_file_control(tls, db, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 55898 if rc != SQLITE_OK { 55899 return rc 55900 } 55901 55902 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 2, 1, pBusy) 55903 if rc != SQLITE_OK { 55904 return rc 55905 } 55906 55907 rc = (*struct { 55908 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 55909 })(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) 55910 if rc != SQLITE_OK { 55911 return rc 55912 } 55913 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, uint64(32)) 55914 55915 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 3, SQLITE_SHM_NLOCK-3, pBusy) 55916 return rc 55917 } 55918 55919 func sqlite3demo_superunlock(tls *libc.TLS, pLock uintptr) { 55920 bp := tls.Alloc(8) 55921 defer tls.Free(8) 55922 55923 var p uintptr = pLock 55924 if (*Superlock)(unsafe.Pointer(p)).FbWal != 0 { 55925 var rc int32 55926 var flags int32 = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE 55927 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 55928 rc = sqlite3.Xsqlite3_file_control(tls, (*Superlock)(unsafe.Pointer(p)).Fdb, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 55929 if rc == SQLITE_OK { 55930 (*struct { 55931 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55932 })(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) 55933 (*struct { 55934 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55935 })(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) 55936 } 55937 } 55938 sqlite3.Xsqlite3_close(tls, (*Superlock)(unsafe.Pointer(p)).Fdb) 55939 sqlite3.Xsqlite3_free(tls, p) 55940 } 55941 55942 func sqlite3demo_superlock(tls *libc.TLS, zPath uintptr, zVfs uintptr, xBusy uintptr, pBusyArg uintptr, ppLock uintptr) int32 { 55943 bp := tls.Alloc(24) 55944 defer tls.Free(24) 55945 55946 *(*SuperlockBusy)(unsafe.Pointer(bp)) = SuperlockBusy{} 55947 var rc int32 55948 var pLock uintptr 55949 55950 pLock = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Superlock{}))) 55951 if !(pLock != 0) { 55952 return SQLITE_NOMEM 55953 } 55954 libc.Xmemset(tls, pLock, 0, uint64(unsafe.Sizeof(Superlock{}))) 55955 55956 rc = sqlite3.Xsqlite3_open_v2(tls, 55957 zPath, pLock, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs) 55958 55959 if rc == SQLITE_OK { 55960 (*SuperlockBusy)(unsafe.Pointer(bp)).FxBusy = xBusy 55961 (*SuperlockBusy)(unsafe.Pointer(bp)).FpBusyArg = pBusyArg 55962 sqlite3.Xsqlite3_busy_handler(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 55963 f func(*libc.TLS, uintptr, int32) int32 55964 }{superlockBusyHandler})), bp) 55965 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+13217, uintptr(0), uintptr(0), uintptr(0)) 55966 } 55967 55968 if rc == SQLITE_OK { 55969 if SQLITE_OK == libc.AssignInt32(&rc, superlockIsWal(tls, pLock)) && (*Superlock)(unsafe.Pointer(pLock)).FbWal != 0 { 55970 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+11628, uintptr(0), uintptr(0), uintptr(0)) 55971 if rc == SQLITE_OK { 55972 rc = superlockWalLock(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, bp) 55973 } 55974 } 55975 } 55976 55977 if rc != SQLITE_OK { 55978 sqlite3demo_superunlock(tls, pLock) 55979 *(*uintptr)(unsafe.Pointer(ppLock)) = uintptr(0) 55980 } else { 55981 *(*uintptr)(unsafe.Pointer(ppLock)) = pLock 55982 } 55983 55984 return rc 55985 } 55986 55987 type InterpAndScript1 = struct { 55988 Finterp uintptr 55989 FpScript uintptr 55990 } 55991 55992 type InterpAndScript = InterpAndScript1 55993 55994 func superunlock_del(tls *libc.TLS, cd ClientData) { 55995 sqlite3demo_superunlock(tls, cd) 55996 } 55997 55998 func superunlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 55999 if objc != 1 { 56000 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 56001 return TCL_ERROR 56002 } 56003 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 56004 return TCL_OK 56005 } 56006 56007 func superlock_busy(tls *libc.TLS, pCtx uintptr, nBusy int32) int32 { 56008 bp := tls.Alloc(4) 56009 defer tls.Free(4) 56010 56011 var p uintptr = pCtx 56012 var pEval uintptr 56013 *(*int32)(unsafe.Pointer(bp)) = 0 56014 56015 pEval = tcl.XTcl_DuplicateObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).FpScript) 56016 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 56017 tcl.XTcl_ListObjAppendElement(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, nBusy)) 56018 tcl.XTcl_EvalObjEx(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 56019 tcl.XTcl_GetIntFromObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp), bp) 56020 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56021 var _objPtr uintptr = pEval 56022 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56023 tcl.XTclFreeObj(tls, _objPtr) 56024 } 56025 } 56026 56027 return *(*int32)(unsafe.Pointer(bp)) 56028 } 56029 56030 func superlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56031 bp := tls.Alloc(40) 56032 defer tls.Free(40) 56033 56034 var zPath uintptr 56035 var zVfs uintptr = uintptr(0) 56036 *(*InterpAndScript)(unsafe.Pointer(bp + 16)) = InterpAndScript{} 56037 var xBusy uintptr = uintptr(0) 56038 var rc int32 56039 56040 if objc < 3 || objc > 5 { 56041 tcl.XTcl_WrongNumArgs(tls, 56042 interp, 1, objv, ts+36970) 56043 return TCL_ERROR 56044 } 56045 56046 zPath = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56047 56048 if objc > 3 { 56049 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 56050 if libc.Xstrlen(tls, zVfs) == uint64(0) { 56051 zVfs = uintptr(0) 56052 } 56053 } 56054 if objc > 4 { 56055 (*InterpAndScript)(unsafe.Pointer(bp + 16)).Finterp = interp 56056 (*InterpAndScript)(unsafe.Pointer(bp + 16)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 56057 xBusy = *(*uintptr)(unsafe.Pointer(&struct { 56058 f func(*libc.TLS, uintptr, int32) int32 56059 }{superlock_busy})) 56060 } 56061 56062 rc = sqlite3demo_superlock(tls, zPath, zVfs, xBusy, bp+16, bp+32) 56063 56064 if rc != SQLITE_OK { 56065 tcl.XTcl_ResetResult(tls, interp) 56066 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 56067 return TCL_ERROR 56068 } 56069 56070 tcl.XTcl_CreateObjCommand(tls, 56071 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 56072 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56073 }{superunlock_cmd})), *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{superunlock_del}))) 56074 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 56075 return TCL_OK 56076 } 56077 56078 func SqliteSuperlock_Init(tls *libc.TLS, interp uintptr) int32 { 56079 tcl.XTcl_CreateObjCommand(tls, interp, ts+37011, *(*uintptr)(unsafe.Pointer(&struct { 56080 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56081 }{superlock_cmd})), uintptr(0), uintptr(0)) 56082 return TCL_OK 56083 } 56084 56085 type TestSyscallGlobal = struct { 56086 FbPersist int32 56087 FnCount int32 56088 FnFail int32 56089 Fpgsz int32 56090 Forig_getpagesize sqlite3_syscall_ptr 56091 } 56092 56093 var gSyscall = TestSyscallGlobal{} 56094 56095 type TestSyscallArray = struct { 56096 FzName uintptr 56097 FxTest sqlite3_syscall_ptr 56098 FxOrig sqlite3_syscall_ptr 56099 Fdefault_errno int32 56100 Fcustom_errno int32 56101 } 56102 56103 var aSyscall = [19]TestSyscallArray{ 56104 {FzName: ts + 37033, FxTest: 0, Fdefault_errno: EACCES}, 56105 {FzName: ts + 9490, FxTest: 0}, 56106 {FzName: ts + 37038, FxTest: 0}, 56107 {FzName: ts + 37045, FxTest: 0}, 56108 {FzName: ts + 37052, FxTest: 0}, 56109 {FzName: ts + 37057, FxTest: 0}, 56110 {FzName: ts + 37063, FxTest: 0, Fdefault_errno: EIO}, 56111 {FzName: ts + 37073, FxTest: 0, Fdefault_errno: EACCES}, 56112 {FzName: ts + 25126, FxTest: 0}, 56113 {FzName: ts + 37079, FxTest: 0}, 56114 {FzName: ts + 37085, FxTest: 0}, 56115 {FzName: ts + 25131, FxTest: 0}, 56116 {FzName: ts + 37093, FxTest: 0}, 56117 {FzName: ts + 37100, FxTest: 0}, 56118 {FzName: ts + 37109, FxTest: 0}, 56119 {FzName: ts + 37116, FxTest: 0}, 56120 {FzName: ts + 29040, FxTest: 0}, 56121 {FzName: ts + 37126, FxTest: 0}, 56122 {}, 56123 } 56124 56125 func tsIsFail(tls *libc.TLS) int32 { 56126 gSyscall.FnCount-- 56127 if gSyscall.FnCount == 0 || gSyscall.FnFail != 0 && gSyscall.FbPersist != 0 { 56128 gSyscall.FnFail++ 56129 return 1 56130 } 56131 return 0 56132 } 56133 56134 func tsErrno(tls *libc.TLS, zFunc uintptr) int32 { 56135 var i int32 56136 var nFunc int32 = int32(libc.Xstrlen(tls, zFunc)) 56137 for i = 0; aSyscall[i].FzName != 0; i++ { 56138 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(nFunc) { 56139 continue 56140 } 56141 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(nFunc)) != 0 { 56142 continue 56143 } 56144 return aSyscall[i].Fcustom_errno 56145 } 56146 56147 return 0 56148 } 56149 56150 func tsIsFailErrno(tls *libc.TLS, zFunc uintptr) int32 { 56151 if tsIsFail(tls) != 0 { 56152 *(*int32)(unsafe.Pointer(libc.X__errno(tls))) = tsErrno(tls, zFunc) 56153 return 1 56154 } 56155 return 0 56156 } 56157 56158 func ts_open(tls *libc.TLS, zFile uintptr, flags int32, mode int32) int32 { 56159 if tsIsFailErrno(tls, ts+37033) != 0 { 56160 return -1 56161 } 56162 return (*(*func(*libc.TLS, uintptr, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16)))(tls, zFile, flags, mode) 56163 } 56164 56165 func ts_close(tls *libc.TLS, fd int32) int32 { 56166 if tsIsFail(tls) != 0 { 56167 (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 56168 return -1 56169 } 56170 return (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 56171 } 56172 56173 func ts_access(tls *libc.TLS, zPath uintptr, mode int32) int32 { 56174 if tsIsFail(tls) != 0 { 56175 return -1 56176 } 56177 return (*(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 2*32 + 16)))(tls, zPath, mode) 56178 } 56179 56180 func ts_getcwd(tls *libc.TLS, zPath uintptr, nPath size_t) uintptr { 56181 if tsIsFail(tls) != 0 { 56182 return uintptr(0) 56183 } 56184 return (*(*func(*libc.TLS, uintptr, size_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 3*32 + 16)))(tls, zPath, nPath) 56185 } 56186 56187 func ts_stat(tls *libc.TLS, zPath uintptr, p uintptr) int32 { 56188 if tsIsFail(tls) != 0 { 56189 return -1 56190 } 56191 return (*(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 4*32 + 16)))(tls, zPath, p) 56192 } 56193 56194 func ts_fstat(tls *libc.TLS, fd int32, p uintptr) int32 { 56195 if tsIsFailErrno(tls, ts+37057) != 0 { 56196 return -1 56197 } 56198 return (*(*func(*libc.TLS, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 5*32 + 16)))(tls, fd, p) 56199 } 56200 56201 func ts_ftruncate(tls *libc.TLS, fd int32, n off_t) int32 { 56202 if tsIsFailErrno(tls, ts+37063) != 0 { 56203 return -1 56204 } 56205 return (*(*func(*libc.TLS, int32, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 6*32 + 16)))(tls, fd, n) 56206 } 56207 56208 func ts_fcntl(tls *libc.TLS, fd int32, cmd int32, va uintptr) int32 { 56209 bp := tls.Alloc(8) 56210 defer tls.Free(8) 56211 56212 var ap va_list 56213 _ = ap 56214 var pArg uintptr 56215 if tsIsFailErrno(tls, ts+37073) != 0 { 56216 return -1 56217 } 56218 ap = va 56219 pArg = libc.VaUintptr(&ap) 56220 return (*(*func(*libc.TLS, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 7*32 + 16)))(tls, fd, cmd, libc.VaList(bp, pArg)) 56221 } 56222 56223 func ts_read(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 56224 if tsIsFailErrno(tls, ts+25126) != 0 { 56225 return -1 56226 } 56227 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8*32 + 16)))(tls, fd, aBuf, nBuf)) 56228 } 56229 56230 func ts_pread(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 56231 if tsIsFailErrno(tls, ts+37079) != 0 { 56232 return -1 56233 } 56234 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)) 56235 } 56236 56237 func ts_pread64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 56238 if tsIsFailErrno(tls, ts+37085) != 0 { 56239 return -1 56240 } 56241 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)) 56242 } 56243 56244 func ts_write(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 56245 if tsIsFailErrno(tls, ts+25131) != 0 { 56246 if tsErrno(tls, ts+25131) == EINTR { 56247 (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf/uint64(2)) 56248 } 56249 return -1 56250 } 56251 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf)) 56252 } 56253 56254 func ts_pwrite(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 56255 if tsIsFailErrno(tls, ts+37093) != 0 { 56256 return -1 56257 } 56258 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)) 56259 } 56260 56261 func ts_pwrite64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 56262 if tsIsFailErrno(tls, ts+37100) != 0 { 56263 return -1 56264 } 56265 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)) 56266 } 56267 56268 func ts_fchmod(tls *libc.TLS, fd int32, mode mode_t) int32 { 56269 if tsIsFail(tls) != 0 { 56270 return -1 56271 } 56272 return (*(*func(*libc.TLS, int32, mode_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 14*32 + 16)))(tls, fd, mode) 56273 } 56274 56275 func ts_fallocate(tls *libc.TLS, fd int32, off off_t, len off_t) int32 { 56276 if tsIsFail(tls) != 0 { 56277 return tsErrno(tls, ts+37116) 56278 } 56279 return (*(*func(*libc.TLS, int32, off_t, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 15*32 + 16)))(tls, fd, off, len) 56280 } 56281 56282 func ts_mmap(tls *libc.TLS, pAddr uintptr, nByte size_t, prot int32, flags int32, fd int32, iOff off_t) uintptr { 56283 if tsIsFailErrno(tls, ts+29040) != 0 { 56284 return libc.UintptrFromInt32(-1) 56285 } 56286 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) 56287 } 56288 56289 func ts_mremap(tls *libc.TLS, a uintptr, b size_t, c size_t, d int32, va uintptr) uintptr { 56290 bp := tls.Alloc(8) 56291 defer tls.Free(8) 56292 56293 var ap va_list 56294 _ = ap 56295 var pArg uintptr 56296 if tsIsFailErrno(tls, ts+37126) != 0 { 56297 return libc.UintptrFromInt32(-1) 56298 } 56299 ap = va 56300 pArg = libc.VaUintptr(&ap) 56301 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)) 56302 } 56303 56304 func test_syscall_install(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56305 bp := tls.Alloc(20) 56306 defer tls.Free(20) 56307 56308 var pVfs uintptr 56309 56310 var i int32 56311 56312 if objc != 3 { 56313 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37133) 56314 return TCL_ERROR 56315 } 56316 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp, bp+8) != 0 { 56317 return TCL_ERROR 56318 } 56319 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56320 56321 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 56322 var rc int32 = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56323 *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp+16) 56324 if rc != 0 { 56325 return rc 56326 } 56327 if aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig == uintptr(0) { 56328 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig = (*struct { 56329 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 56330 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FzName) 56331 (*struct { 56332 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56333 })(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) 56334 } 56335 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fcustom_errno = aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fdefault_errno 56336 } 56337 56338 return TCL_OK 56339 } 56340 56341 func test_syscall_uninstall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56342 var pVfs uintptr 56343 var i int32 56344 56345 if objc != 2 { 56346 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56347 return TCL_ERROR 56348 } 56349 56350 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56351 for i = 0; aSyscall[i].FzName != 0; i++ { 56352 if aSyscall[i].FxOrig != 0 { 56353 (*struct { 56354 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56355 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[i].FzName, uintptr(0)) 56356 aSyscall[i].FxOrig = uintptr(0) 56357 } 56358 } 56359 return TCL_OK 56360 } 56361 56362 func test_syscall_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56363 bp := tls.Alloc(4) 56364 defer tls.Free(4) 56365 56366 var pVfs uintptr 56367 var i int32 56368 var rc int32 56369 56370 if objc != 2 && objc != 3 { 56371 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56372 return TCL_ERROR 56373 } 56374 56375 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56376 if objc == 2 { 56377 rc = (*struct { 56378 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56379 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, uintptr(0), uintptr(0)) 56380 for i = 0; aSyscall[i].FzName != 0; i++ { 56381 aSyscall[i].FxOrig = uintptr(0) 56382 } 56383 } else { 56384 var zFunc uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) 56385 rc = (*struct { 56386 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56387 })(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)) 56388 for i = 0; rc == SQLITE_OK && aSyscall[i].FzName != 0; i++ { 56389 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(*(*int32)(unsafe.Pointer(bp))) { 56390 continue 56391 } 56392 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(*(*int32)(unsafe.Pointer(bp)))) != 0 { 56393 continue 56394 } 56395 aSyscall[i].FxOrig = uintptr(0) 56396 } 56397 } 56398 if rc != SQLITE_OK { 56399 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 56400 return TCL_ERROR 56401 } 56402 56403 tcl.XTcl_ResetResult(tls, interp) 56404 return TCL_OK 56405 } 56406 56407 func test_syscall_exists(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56408 var pVfs uintptr 56409 var x sqlite3_syscall_ptr 56410 56411 if objc != 3 { 56412 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56413 return TCL_ERROR 56414 } 56415 56416 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56417 x = (*struct { 56418 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 56419 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 56420 56421 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(x != uintptr(0)) != 0))) 56422 return TCL_OK 56423 } 56424 56425 func test_syscall_fault(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56426 bp := tls.Alloc(8) 56427 defer tls.Free(8) 56428 56429 *(*int32)(unsafe.Pointer(bp)) = 0 56430 *(*int32)(unsafe.Pointer(bp + 4)) = 0 56431 56432 if objc != 2 && objc != 4 { 56433 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37158) 56434 return TCL_ERROR 56435 } 56436 56437 if objc == 4 { 56438 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 || 56439 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 56440 return TCL_ERROR 56441 } 56442 } 56443 56444 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, gSyscall.FnFail)) 56445 gSyscall.FnCount = *(*int32)(unsafe.Pointer(bp)) 56446 gSyscall.FbPersist = *(*int32)(unsafe.Pointer(bp + 4)) 56447 gSyscall.FnFail = 0 56448 return TCL_OK 56449 } 56450 56451 func test_syscall_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56452 bp := tls.Alloc(204) 56453 defer tls.Free(204) 56454 56455 var rc int32 56456 56457 *(*[12]Errno)(unsafe.Pointer(bp + 8)) = [12]Errno{ 56458 {Fz: ts + 37174, Fi: EACCES}, 56459 {Fz: ts + 37181, Fi: EINTR}, 56460 {Fz: ts + 37187, Fi: EIO}, 56461 {Fz: ts + 37191, Fi: EOVERFLOW}, 56462 {Fz: ts + 37201, Fi: ENOMEM}, 56463 {Fz: ts + 37208, Fi: EAGAIN}, 56464 {Fz: ts + 37215, Fi: ETIMEDOUT}, 56465 {Fz: ts + 37225, Fi: EBUSY}, 56466 {Fz: ts + 37231, Fi: EPERM}, 56467 {Fz: ts + 37237, Fi: EDEADLK}, 56468 {Fz: ts + 37245, Fi: ENOLCK}, 56469 {}, 56470 } 56471 56472 if objc != 4 { 56473 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37252) 56474 return TCL_ERROR 56475 } 56476 56477 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56478 *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp) 56479 if rc != TCL_OK { 56480 return rc 56481 } 56482 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56483 *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(Errno{})), ts+37266, 0, bp+200) 56484 if rc != TCL_OK { 56485 return rc 56486 } 56487 56488 aSyscall[*(*int32)(unsafe.Pointer(bp))].Fcustom_errno = (*Errno)(unsafe.Pointer(bp + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 200)))*16)).Fi 56489 return TCL_OK 56490 } 56491 56492 type Errno = struct { 56493 Fz uintptr 56494 Fi int32 56495 F__ccgo_pad1 [4]byte 56496 } 56497 56498 func test_syscall_list(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56499 var zSys uintptr 56500 var pVfs uintptr 56501 var pList uintptr 56502 56503 if objc != 2 { 56504 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56505 return TCL_ERROR 56506 } 56507 56508 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56509 pList = tcl.XTcl_NewObj(tls) 56510 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 56511 for zSys = (*struct { 56512 f func(*libc.TLS, uintptr, uintptr) uintptr 56513 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, uintptr(0)); zSys != uintptr(0); zSys = (*struct { 56514 f func(*libc.TLS, uintptr, uintptr) uintptr 56515 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, zSys) { 56516 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, zSys, -1)) 56517 } 56518 56519 tcl.XTcl_SetObjResult(tls, interp, pList) 56520 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56521 var _objPtr uintptr = pList 56522 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56523 tcl.XTclFreeObj(tls, _objPtr) 56524 } 56525 } 56526 return TCL_OK 56527 } 56528 56529 func test_syscall_defaultvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56530 var pVfs uintptr 56531 56532 if objc != 2 { 56533 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56534 return TCL_ERROR 56535 } 56536 56537 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56538 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 56539 return TCL_OK 56540 } 56541 56542 func ts_getpagesize(tls *libc.TLS) int32 { 56543 return gSyscall.Fpgsz 56544 } 56545 56546 func test_syscall_pagesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56547 bp := tls.Alloc(20) 56548 defer tls.Free(20) 56549 56550 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56551 56552 if objc != 3 { 56553 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37272) 56554 return TCL_ERROR 56555 } 56556 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 56557 return TCL_ERROR 56558 } 56559 56560 if *(*int32)(unsafe.Pointer(bp + 16)) < 0 { 56561 if gSyscall.Forig_getpagesize != 0 { 56562 (*struct { 56563 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56564 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, ts+37277, gSyscall.Forig_getpagesize) 56565 } 56566 } else { 56567 if *(*int32)(unsafe.Pointer(bp + 16)) < 512 || *(*int32)(unsafe.Pointer(bp + 16))&(*(*int32)(unsafe.Pointer(bp + 16))-1) != 0 { 56568 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37289, 0)) 56569 return TCL_ERROR 56570 } 56571 gSyscall.Forig_getpagesize = (*struct { 56572 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 56573 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, ts+37277) 56574 gSyscall.Fpgsz = *(*int32)(unsafe.Pointer(bp + 16)) 56575 (*struct { 56576 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56577 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, 56578 pVfs, ts+37277, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{ts_getpagesize}))) 56579 } 56580 56581 return TCL_OK 56582 } 56583 56584 func test_syscall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56585 bp := tls.Alloc(180) 56586 defer tls.Free(180) 56587 56588 *(*[10]SyscallCmd)(unsafe.Pointer(bp + 16)) = [10]SyscallCmd{ 56589 {FzName: ts + 37307, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56590 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56591 }{test_syscall_fault}))}, 56592 {FzName: ts + 37313, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56593 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56594 }{test_syscall_install}))}, 56595 {FzName: ts + 37321, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56596 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56597 }{test_syscall_uninstall}))}, 56598 {FzName: ts + 7933, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56599 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56600 }{test_syscall_reset}))}, 56601 {FzName: ts + 37266, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56602 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56603 }{test_syscall_errno}))}, 56604 {FzName: ts + 13516, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56605 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56606 }{test_syscall_exists}))}, 56607 {FzName: ts + 37331, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56608 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56609 }{test_syscall_list}))}, 56610 {FzName: ts + 37336, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56611 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56612 }{test_syscall_defaultvfs}))}, 56613 {FzName: ts + 37347, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56614 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56615 }{test_syscall_pagesize}))}, 56616 {}, 56617 } 56618 56619 var rc int32 56620 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56621 56622 if objc < 2 { 56623 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 56624 return TCL_ERROR 56625 } 56626 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion < 3 || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall == uintptr(0) { 56627 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37356, 0)) 56628 rc = TCL_ERROR 56629 } else { 56630 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56631 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, int32(unsafe.Sizeof(SyscallCmd{})), ts+2014, 0, bp+176) 56632 } 56633 if rc != TCL_OK { 56634 return rc 56635 } 56636 return (*struct { 56637 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56638 })(unsafe.Pointer(&struct{ uintptr }{(*SyscallCmd)(unsafe.Pointer(bp + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*16)).FxCmd})).f(tls, clientData, interp, objc, objv) 56639 } 56640 56641 type SyscallCmd = struct { 56642 FzName uintptr 56643 FxCmd uintptr 56644 } 56645 56646 func SqlitetestSyscall_Init(tls *libc.TLS, interp uintptr) int32 { 56647 bp := tls.Alloc(16) 56648 defer tls.Free(16) 56649 56650 *(*[1]SyscallCmd)(unsafe.Pointer(bp)) = [1]SyscallCmd{ 56651 {FzName: ts + 37392, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56652 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56653 }{test_syscall}))}, 56654 } 56655 var i int32 56656 56657 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]SyscallCmd{}))/uint64(unsafe.Sizeof(SyscallCmd{})); i++ { 56658 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)) 56659 } 56660 return TCL_OK 56661 } 56662 56663 func sqlite3TestInit(tls *libc.TLS, interp uintptr) uintptr { 56664 bp := tls.Alloc(80) 56665 defer tls.Free(80) 56666 56667 { 56668 libc.Xgetrlimit(tls, RLIMIT_CORE, bp) 56669 (*rlimit)(unsafe.Pointer(bp)).Frlim_cur = (*rlimit)(unsafe.Pointer(bp)).Frlim_max 56670 libc.Xsetrlimit(tls, RLIMIT_CORE, bp) 56671 56672 } 56673 56674 if tcl.XTcl_GetCommandInfo(tls, interp, ts+14267, bp+16) == 0 { 56675 Sqlite3_Init(tls, interp) 56676 } 56677 Md5_Init(tls, interp) 56678 Sqliteconfig_Init(tls, interp) 56679 Sqlitetest1_Init(tls, interp) 56680 Sqlitetest2_Init(tls, interp) 56681 Sqlitetest3_Init(tls, interp) 56682 Sqlitetest4_Init(tls, interp) 56683 Sqlitetest5_Init(tls, interp) 56684 Sqlitetest6_Init(tls, interp) 56685 Sqlitetest7_Init(tls, interp) 56686 Sqlitetest8_Init(tls, interp) 56687 Sqlitetest9_Init(tls, interp) 56688 Sqlitetestasync_Init(tls, interp) 56689 Sqlitetest_autoext_Init(tls, interp) 56690 Sqlitetest_blob_Init(tls, interp) 56691 Sqlitetest_demovfs_Init(tls, interp) 56692 Sqlitetest_func_Init(tls, interp) 56693 Sqlitetest_hexio_Init(tls, interp) 56694 Sqlitetest_init_Init(tls, interp) 56695 Sqlitetest_malloc_Init(tls, interp) 56696 Sqlitetest_mutex_Init(tls, interp) 56697 Sqlitetestschema_Init(tls, interp) 56698 Sqlitetesttclvar_Init(tls, interp) 56699 Sqlitetestfs_Init(tls, interp) 56700 SqlitetestThread_Init(tls, interp) 56701 SqlitetestOnefile_Init(tls) 56702 SqlitetestOsinst_Init(tls, interp) 56703 Sqlitetestbackup_Init(tls, interp) 56704 Sqlitetestintarray_Init(tls, interp) 56705 Sqlitetestvfs_Init(tls, interp) 56706 Sqlitetestrtree_Init(tls, interp) 56707 Sqlitetestrtreedoc_Init(tls, interp) 56708 Sqlitequota_Init(tls, interp) 56709 Sqlitemultiplex_Init(tls, interp) 56710 SqliteSuperlock_Init(tls, interp) 56711 SqlitetestSyscall_Init(tls, interp) 56712 TestSession_Init(tls, interp) 56713 Fts5tcl_Init(tls, interp) 56714 SqliteRbu_Init(tls, interp) 56715 Sqlitetesttcl_Init(tls, interp) 56716 56717 TestExpert_Init(tls, interp) 56718 Sqlitetest_window_Init(tls, interp) 56719 Sqlitetestvdbecov_Init(tls, interp) 56720 56721 tcl.XTcl_CreateObjCommand(tls, 56722 interp, ts+37405, *(*uintptr)(unsafe.Pointer(&struct { 56723 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56724 }{load_testfixture_extensions})), uintptr(0), uintptr(0)) 56725 return uintptr(0) 56726 } 56727 56728 func load_testfixture_extensions(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56729 var slave uintptr 56730 if objc != 2 { 56731 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+37433) 56732 return TCL_ERROR 56733 } 56734 56735 slave = tcl.XTcl_GetSlave(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56736 if !(slave != 0) { 56737 return TCL_ERROR 56738 } 56739 56740 sqlite3TestInit(tls, slave) 56741 return TCL_OK 56742 } 56743 56744 type tclvar_vtab1 = struct { 56745 Fbase sqlite3_vtab 56746 Finterp uintptr 56747 } 56748 56749 type tclvar_vtab = tclvar_vtab1 56750 type tclvar_cursor1 = struct { 56751 Fbase sqlite3_vtab_cursor 56752 FpList1 uintptr 56753 FpList2 uintptr 56754 Fi1 int32 56755 Fi2 int32 56756 } 56757 56758 type tclvar_cursor = tclvar_cursor1 56759 56760 func tclvarConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 56761 var pVtab uintptr 56762 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_vtab{}))) 56763 if pVtab == uintptr(0) { 56764 return SQLITE_NOMEM 56765 } 56766 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 56767 (*tclvar_vtab)(unsafe.Pointer(pVtab)).Finterp = pAux 56768 sqlite3.Xsqlite3_declare_vtab(tls, db, uintptr(unsafe.Pointer(&zSchema))) 56769 return SQLITE_OK 56770 } 56771 56772 var zSchema = *(*[100]int8)(unsafe.Pointer(ts + 37439)) 56773 56774 func tclvarDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 56775 sqlite3.Xsqlite3_free(tls, pVtab) 56776 return SQLITE_OK 56777 } 56778 56779 func tclvarOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 56780 var pCur uintptr 56781 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_cursor{}))) 56782 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 56783 return SQLITE_OK 56784 } 56785 56786 func tclvarClose(tls *libc.TLS, cur uintptr) int32 { 56787 var pCur uintptr = cur 56788 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 56789 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56790 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 56791 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56792 tcl.XTclFreeObj(tls, _objPtr) 56793 } 56794 } 56795 } 56796 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 56797 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 56798 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 56799 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56800 tcl.XTclFreeObj(tls, _objPtr) 56801 } 56802 } 56803 } 56804 sqlite3.Xsqlite3_free(tls, pCur) 56805 return SQLITE_OK 56806 } 56807 56808 func next2(tls *libc.TLS, interp uintptr, pCur uintptr, pObj uintptr) int32 { 56809 bp := tls.Alloc(4) 56810 defer tls.Free(4) 56811 56812 var p uintptr 56813 56814 if pObj != 0 { 56815 if !(int32((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) != 0) { 56816 p = tcl.XTcl_NewStringObj(tls, ts+37539, -1) 56817 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 56818 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, pObj) 56819 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 56820 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56821 var _objPtr uintptr = p 56822 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56823 tcl.XTclFreeObj(tls, _objPtr) 56824 } 56825 } 56826 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = tcl.XTcl_GetObjResult(tls, interp) 56827 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount++ 56828 56829 } else { 56830 *(*int32)(unsafe.Pointer(bp)) = 0 56831 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2++ 56832 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, bp) 56833 if (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 >= *(*int32)(unsafe.Pointer(bp)) { 56834 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 56835 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 56836 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56837 tcl.XTclFreeObj(tls, _objPtr) 56838 } 56839 } 56840 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 56841 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 56842 return 0 56843 } 56844 } 56845 } 56846 56847 return 1 56848 } 56849 56850 func tclvarNext(tls *libc.TLS, cur uintptr) int32 { 56851 bp := tls.Alloc(16) 56852 defer tls.Free(16) 56853 56854 *(*int32)(unsafe.Pointer(bp)) = 0 56855 var ok int32 = 0 56856 56857 var pCur uintptr = cur 56858 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 56859 56860 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, bp) 56861 for !(ok != 0) && (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 < *(*int32)(unsafe.Pointer(bp)) { 56862 tcl.XTcl_ListObjIndex(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+8) 56863 ok = next2(tls, interp, pCur, *(*uintptr)(unsafe.Pointer(bp + 8))) 56864 if !(ok != 0) { 56865 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1++ 56866 } 56867 } 56868 56869 return 0 56870 } 56871 56872 func tclvarFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 56873 var pCur uintptr = pVtabCursor 56874 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).Finterp 56875 var p uintptr = tcl.XTcl_NewStringObj(tls, ts+37551, -1) 56876 56877 var zEq uintptr = ts + 584 56878 var zMatch uintptr = ts + 584 56879 var zGlob uintptr = ts + 584 56880 var zRegexp uintptr = ts + 584 56881 var zLike uintptr = ts + 584 56882 var i int32 56883 56884 for i = 0; *(*int8)(unsafe.Pointer(idxStr + uintptr(i))) != 0; i++ { 56885 switch int32(*(*int8)(unsafe.Pointer(idxStr + uintptr(i)))) { 56886 case 'e': 56887 zEq = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56888 break 56889 case 'm': 56890 zMatch = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56891 break 56892 case 'g': 56893 zGlob = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56894 break 56895 case 'r': 56896 zRegexp = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56897 break 56898 case 'l': 56899 zLike = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56900 break 56901 default: 56902 } 56903 } 56904 56905 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 56906 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zEq, -1)) 56907 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zMatch, -1)) 56908 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zGlob, -1)) 56909 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zRegexp, -1)) 56910 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zLike, -1)) 56911 56912 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 56913 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 56914 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56915 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 56916 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56917 tcl.XTclFreeObj(tls, _objPtr) 56918 } 56919 } 56920 } 56921 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 56922 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 56923 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 56924 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56925 tcl.XTclFreeObj(tls, _objPtr) 56926 } 56927 } 56928 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 56929 } 56930 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 = 0 56931 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 56932 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 = tcl.XTcl_GetObjResult(tls, interp) 56933 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount++ 56934 56935 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 56936 var _objPtr uintptr = p 56937 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56938 tcl.XTclFreeObj(tls, _objPtr) 56939 } 56940 } 56941 return tclvarNext(tls, pVtabCursor) 56942 } 56943 56944 func tclvarColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 56945 bp := tls.Alloc(32) 56946 defer tls.Free(32) 56947 56948 var z1 uintptr 56949 var z2 uintptr = ts + 584 56950 var pCur uintptr = cur 56951 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 56952 56953 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+16) 56954 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2, bp+24) 56955 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 56956 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 56957 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 56958 } 56959 switch i { 56960 case 0: 56961 { 56962 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 56963 break 56964 56965 } 56966 case 1: 56967 { 56968 sqlite3.Xsqlite3_result_text(tls, ctx, z2, -1, libc.UintptrFromInt32(-1)) 56969 break 56970 56971 } 56972 case 2: 56973 { 56974 var pVal uintptr = tcl.XTcl_GetVar2Ex(tls, interp, z1, func() uintptr { 56975 if *(*int8)(unsafe.Pointer(z2)) != 0 { 56976 return z2 56977 } 56978 return uintptr(0) 56979 }(), TCL_GLOBAL_ONLY) 56980 sqlite3.Xsqlite3_result_text(tls, ctx, tcl.XTcl_GetString(tls, pVal), -1, libc.UintptrFromInt32(-1)) 56981 break 56982 56983 } 56984 case 3: 56985 { 56986 var z3 uintptr 56987 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 56988 z3 = sqlite3.Xsqlite3_mprintf(tls, ts+37569, libc.VaList(bp, z1, z2)) 56989 sqlite3.Xsqlite3_result_text(tls, ctx, z3, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 56990 } else { 56991 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 56992 } 56993 break 56994 56995 } 56996 } 56997 return SQLITE_OK 56998 } 56999 57000 func tclvarRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 57001 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 57002 return SQLITE_OK 57003 } 57004 57005 func tclvarEof(tls *libc.TLS, cur uintptr) int32 { 57006 var pCur uintptr = cur 57007 return func() int32 { 57008 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57009 return 0 57010 } 57011 return 1 57012 }() 57013 } 57014 57015 func tclvarAddToIdxstr(tls *libc.TLS, zStr uintptr, x int8) int32 { 57016 var i int32 57017 for i = 0; *(*int8)(unsafe.Pointer(zStr + uintptr(i))) != 0; i++ { 57018 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) == int32(x) { 57019 return 1 57020 } 57021 } 57022 *(*int8)(unsafe.Pointer(zStr + uintptr(i))) = x 57023 *(*int8)(unsafe.Pointer(zStr + uintptr(i+1))) = int8(0) 57024 return 0 57025 } 57026 57027 func tclvarSetOmit(tls *libc.TLS, interp uintptr) int32 { 57028 bp := tls.Alloc(4) 57029 defer tls.Free(4) 57030 57031 var rc int32 57032 *(*int32)(unsafe.Pointer(bp)) = 0 57033 var pRes uintptr 57034 rc = tcl.XTcl_Eval(tls, interp, 57035 ts+37576) 57036 if rc == TCL_OK { 57037 pRes = tcl.XTcl_GetObjResult(tls, interp) 57038 rc = tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), pRes, bp) 57039 } 57040 return libc.Bool32(rc == TCL_OK && *(*int32)(unsafe.Pointer(bp)) != 0) 57041 } 57042 57043 func tclvarBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 57044 var pTab uintptr = tab 57045 var ii int32 57046 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, 32) 57047 var iStr int32 = 0 57048 57049 if zStr == uintptr(0) { 57050 return SQLITE_NOMEM 57051 } 57052 *(*int8)(unsafe.Pointer(zStr)) = int8(0) 57053 57054 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 57055 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 57056 var pUsage uintptr 57057 57058 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 57059 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 { 57060 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 57061 if 0 == tclvarAddToIdxstr(tls, zStr, int8('e')) { 57062 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57063 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 57064 } 57065 } 57066 57067 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 57068 if 0 == tclvarAddToIdxstr(tls, zStr, int8('m')) { 57069 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57070 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 57071 } 57072 } 57073 57074 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_GLOB && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57075 if 0 == tclvarAddToIdxstr(tls, zStr, int8('g')) { 57076 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57077 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57078 } 57079 } 57080 57081 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_REGEXP && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57082 if 0 == tclvarAddToIdxstr(tls, zStr, int8('r')) { 57083 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57084 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57085 } 57086 } 57087 57088 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57089 if 0 == tclvarAddToIdxstr(tls, zStr, int8('l')) { 57090 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57091 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57092 } 57093 } 57094 } 57095 } 57096 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = zStr 57097 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 57098 57099 return SQLITE_OK 57100 } 57101 57102 func tclvarUpdate(tls *libc.TLS, tab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 57103 var pTab uintptr = tab 57104 if argc == 1 { 57105 var zVar uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 57106 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zVar, uintptr(0), TCL_GLOBAL_ONLY) 57107 return SQLITE_OK 57108 } 57109 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 57110 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 57111 var zName uintptr 57112 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) != SQLITE_TEXT { 57113 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37637, 0) 57114 return SQLITE_ERROR 57115 } 57116 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 57117 if zValue != 0 { 57118 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 57119 } else { 57120 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), TCL_GLOBAL_ONLY) 57121 } 57122 return SQLITE_OK 57123 } 57124 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_TEXT && 57125 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_TEXT { 57126 var zOldName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 57127 var zNewName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 57128 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 57129 57130 if libc.Xstrcmp(tls, zOldName, zNewName) != 0 || zValue == uintptr(0) { 57131 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zOldName, uintptr(0), TCL_GLOBAL_ONLY) 57132 } 57133 if zValue != uintptr(0) { 57134 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zNewName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 57135 } 57136 return SQLITE_OK 57137 } 57138 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37672, 0) 57139 return SQLITE_ERROR 57140 } 57141 57142 var tclvarModule = sqlite3_module{ 57143 FxCreate: 0, 57144 FxConnect: 0, 57145 FxBestIndex: 0, 57146 FxDisconnect: 0, 57147 FxDestroy: 0, 57148 FxOpen: 0, 57149 FxClose: 0, 57150 FxFilter: 0, 57151 FxNext: 0, 57152 FxEof: 0, 57153 FxColumn: 0, 57154 FxRowid: 0, 57155 FxUpdate: 0, 57156 } 57157 57158 func register_tclvar_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57159 bp := tls.Alloc(8) 57160 defer tls.Free(8) 57161 57162 var rc int32 = TCL_OK 57163 57164 if objc != 2 { 57165 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 57166 return TCL_ERROR 57167 } 57168 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 57169 return TCL_ERROR 57170 } 57171 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+29859, uintptr(unsafe.Pointer(&tclvarModule)), interp) 57172 rc = tcl.XTcl_Eval(tls, interp, 57173 ts+37703) 57174 return rc 57175 } 57176 57177 func Sqlitetesttclvar_Init(tls *libc.TLS, interp uintptr) int32 { 57178 var i int32 57179 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd13))/uint64(unsafe.Sizeof(struct { 57180 FzName uintptr 57181 FxProc uintptr 57182 FclientData uintptr 57183 }{})); i++ { 57184 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd13[i].FzName, 57185 aObjCmd13[i].FxProc, aObjCmd13[i].FclientData, uintptr(0)) 57186 } 57187 return TCL_OK 57188 } 57189 57190 var aObjCmd13 = [1]struct { 57191 FzName uintptr 57192 FxProc uintptr 57193 FclientData uintptr 57194 }{ 57195 {FzName: ts + 38239, FxProc: 0}, 57196 } 57197 57198 type SqlThread1 = struct { 57199 Fparent Tcl_ThreadId 57200 Finterp uintptr 57201 FzScript uintptr 57202 FzVarname uintptr 57203 } 57204 57205 type SqlThread = SqlThread1 57206 57207 type EvalEvent1 = struct { 57208 Fbase Tcl_Event 57209 FzScript uintptr 57210 Finterp uintptr 57211 } 57212 57213 type EvalEvent = EvalEvent1 57214 57215 func tclScriptEvent(tls *libc.TLS, evPtr uintptr, flags int32) int32 { 57216 var rc int32 57217 var p uintptr = evPtr 57218 rc = tcl.XTcl_Eval(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp, (*EvalEvent)(unsafe.Pointer(p)).FzScript) 57219 if rc != TCL_OK { 57220 tcl.XTcl_BackgroundError(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp) 57221 } 57222 _ = flags 57223 return 1 57224 } 57225 57226 func postToParent(tls *libc.TLS, p uintptr, pScript uintptr) { 57227 bp := tls.Alloc(4) 57228 defer tls.Free(4) 57229 57230 var pEvent uintptr 57231 var zMsg uintptr 57232 57233 zMsg = tcl.XTcl_GetStringFromObj(tls, pScript, bp) 57234 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp)))+uint64(1))) 57235 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 57236 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 57237 f func(*libc.TLS, uintptr, int32) int32 57238 }{tclScriptEvent})) 57239 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 57240 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp))+1)) 57241 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 57242 57243 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 57244 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 57245 } 57246 57247 func tclScriptThread(tls *libc.TLS, pSqlThread ClientData) { 57248 var interp uintptr 57249 var pRes uintptr 57250 var pList uintptr 57251 var rc int32 57252 var p uintptr = pSqlThread 57253 57254 interp = tcl.XTcl_CreateInterp(tls) 57255 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 57256 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57257 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 57258 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 57259 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57260 }{sqlthread_proc})), pSqlThread, uintptr(0)) 57261 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 57262 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57263 }{blocking_step_proc})), uintptr(0), uintptr(0)) 57264 tcl.XTcl_CreateObjCommand(tls, interp, 57265 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 57266 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57267 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 57268 tcl.XTcl_CreateObjCommand(tls, interp, 57269 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 57270 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57271 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 57272 Sqlitetest1_Init(tls, interp) 57273 Sqlitetest_mutex_Init(tls, interp) 57274 Sqlite3_Init(tls, interp) 57275 57276 rc = tcl.XTcl_Eval(tls, interp, (*SqlThread)(unsafe.Pointer(p)).FzScript) 57277 pRes = tcl.XTcl_GetObjResult(tls, interp) 57278 pList = tcl.XTcl_NewObj(tls) 57279 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 57280 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 57281 57282 if rc != TCL_OK { 57283 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+9674, -1)) 57284 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 57285 postToParent(tls, p, pList) 57286 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57287 var _objPtr uintptr = pList 57288 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57289 tcl.XTclFreeObj(tls, _objPtr) 57290 } 57291 } 57292 pList = tcl.XTcl_NewObj(tls) 57293 } 57294 57295 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+38367, -1)) 57296 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, (*SqlThread)(unsafe.Pointer(p)).FzVarname, -1)) 57297 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 57298 postToParent(tls, p, pList) 57299 57300 tcl.XTcl_Free(tls, p) 57301 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57302 var _objPtr uintptr = pList 57303 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57304 tcl.XTclFreeObj(tls, _objPtr) 57305 } 57306 } 57307 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 57308 var _objPtr uintptr = pRes 57309 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57310 tcl.XTclFreeObj(tls, _objPtr) 57311 } 57312 } 57313 tcl.XTcl_DeleteInterp(tls, interp) 57314 for tcl.XTcl_DoOneEvent(tls, libc.CplInt32(int32(1)<<1)|int32(1)<<1) != 0 { 57315 } 57316 tcl.XTcl_ExitThread(tls, 0) 57317 57318 } 57319 57320 func sqlthread_spawn(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57321 bp := tls.Alloc(32) 57322 defer tls.Free(32) 57323 57324 var pNew uintptr 57325 var rc int32 57326 57327 var zVarname uintptr 57328 57329 var zScript uintptr 57330 57331 var nStack int32 = 0 57332 var flags int32 = 0000 57333 57334 _ = clientData 57335 _ = objc 57336 57337 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 57338 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+20) 57339 57340 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlThread{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(*(*int32)(unsafe.Pointer(bp + 20)))+uint64(2))) 57341 (*SqlThread)(unsafe.Pointer(pNew)).FzVarname = pNew + 1*32 57342 (*SqlThread)(unsafe.Pointer(pNew)).FzScript = (*SqlThread)(unsafe.Pointer(pNew)).FzVarname + uintptr(*(*int32)(unsafe.Pointer(bp + 16))+1) 57343 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzVarname, zVarname, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 57344 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 20))+1)) 57345 (*SqlThread)(unsafe.Pointer(pNew)).Fparent = tcl.XTcl_GetCurrentThread(tls) 57346 (*SqlThread)(unsafe.Pointer(pNew)).Finterp = interp 57347 57348 rc = tcl.XTcl_CreateThread(tls, bp+24, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{tclScriptThread})), pNew, nStack, flags) 57349 if rc != TCL_OK { 57350 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38371, 0)) 57351 tcl.XTcl_Free(tls, pNew) 57352 return TCL_ERROR 57353 } 57354 57355 return TCL_OK 57356 } 57357 57358 func sqlthread_parent(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57359 bp := tls.Alloc(20) 57360 defer tls.Free(20) 57361 57362 var pEvent uintptr 57363 var zMsg uintptr 57364 57365 var p uintptr = clientData 57366 57367 _ = objc 57368 57369 if p == uintptr(0) { 57370 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38399, 0)) 57371 return TCL_ERROR 57372 } 57373 57374 zMsg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 57375 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(1))) 57376 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 57377 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 57378 f func(*libc.TLS, uintptr, int32) int32 57379 }{tclScriptEvent})) 57380 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 57381 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 57382 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 57383 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 57384 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 57385 57386 return TCL_OK 57387 } 57388 57389 func xBusy(tls *libc.TLS, pArg uintptr, nBusy int32) int32 { 57390 _ = pArg 57391 _ = nBusy 57392 sqlite3.Xsqlite3_sleep(tls, 50) 57393 return 1 57394 } 57395 57396 func sqlthread_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57397 bp := tls.Alloc(124) 57398 defer tls.Free(124) 57399 57400 var zFilename uintptr 57401 57402 _ = clientData 57403 _ = objc 57404 57405 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 57406 sqlite3.Xsqlite3_open(tls, zFilename, bp+16) 57407 Md5_Register(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), uintptr(0), uintptr(0)) 57408 sqlite3.Xsqlite3_busy_handler(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(&struct { 57409 f func(*libc.TLS, uintptr, int32) int32 57410 }{xBusy})), uintptr(0)) 57411 57412 if sqlite3TestMakePointerStr(tls, interp, bp+24, *(*uintptr)(unsafe.Pointer(bp + 16))) != 0 { 57413 return TCL_ERROR 57414 } 57415 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+24, 0)) 57416 57417 return TCL_OK 57418 } 57419 57420 func sqlthread_id(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57421 var id Tcl_ThreadId = tcl.XTcl_GetCurrentThread(tls) 57422 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(id))) 57423 _ = clientData 57424 _ = objc 57425 _ = objv 57426 return TCL_OK 57427 } 57428 57429 func sqlthread_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57430 bp := tls.Alloc(164) 57431 defer tls.Free(164) 57432 57433 *(*[5]struct { 57434 FzName uintptr 57435 FxProc uintptr 57436 FnArg int32 57437 F__ccgo_pad1 [4]byte 57438 FzUsage uintptr 57439 })(unsafe.Pointer(bp)) = [5]struct { 57440 FzName uintptr 57441 FxProc uintptr 57442 FnArg int32 57443 F__ccgo_pad1 [4]byte 57444 FzUsage uintptr 57445 }{ 57446 {FzName: ts + 38416, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 57447 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57448 }{sqlthread_parent})), FnArg: 1, FzUsage: ts + 10187}, 57449 {FzName: ts + 38423, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 57450 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57451 }{sqlthread_spawn})), FnArg: 2, FzUsage: ts + 38429}, 57452 {FzName: ts + 37033, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 57453 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57454 }{sqlthread_open})), FnArg: 1, FzUsage: ts + 38444}, 57455 {FzName: ts + 38451, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 57456 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57457 }{sqlthread_id})), FzUsage: ts + 584}, 57458 {}, 57459 } 57460 var pSub uintptr 57461 var rc int32 57462 57463 if objc < 2 { 57464 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 57465 return TCL_ERROR 57466 } 57467 57468 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 57469 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(struct { 57470 FzName uintptr 57471 FxProc uintptr 57472 FnArg int32 57473 F__ccgo_pad1 [4]byte 57474 FzUsage uintptr 57475 }{})), ts+2014, 0, bp+160) 57476 if rc != TCL_OK { 57477 return rc 57478 } 57479 pSub = bp + uintptr(*(*int32)(unsafe.Pointer(bp + 160)))*32 57480 57481 if objc < (*struct { 57482 FzName uintptr 57483 FxProc uintptr 57484 FnArg int32 57485 F__ccgo_pad1 [4]byte 57486 FzUsage uintptr 57487 })(unsafe.Pointer(pSub)).FnArg+2 { 57488 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*struct { 57489 FzName uintptr 57490 FxProc uintptr 57491 FnArg int32 57492 F__ccgo_pad1 [4]byte 57493 FzUsage uintptr 57494 })(unsafe.Pointer(pSub)).FzUsage) 57495 return TCL_ERROR 57496 } 57497 57498 return (*struct { 57499 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57500 })(unsafe.Pointer(&struct{ uintptr }{(*struct { 57501 FzName uintptr 57502 FxProc uintptr 57503 FnArg int32 57504 F__ccgo_pad1 [4]byte 57505 FzUsage uintptr 57506 })(unsafe.Pointer(pSub)).FxProc})).f(tls, clientData, interp, objc, objv) 57507 } 57508 57509 func clock_seconds_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57510 bp := tls.Alloc(16) 57511 defer tls.Free(16) 57512 57513 tcl.XTcl_GetTime(tls, bp) 57514 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32((*Tcl_Time)(unsafe.Pointer(bp)).Fsec))) 57515 _ = clientData 57516 _ = objc 57517 _ = objv 57518 return TCL_OK 57519 } 57520 57521 type UnlockNotification1 = struct { 57522 Ffired int32 57523 F__ccgo_pad1 [4]byte 57524 Fcond pthread_cond_t 57525 Fmutex pthread_mutex_t 57526 } 57527 57528 type UnlockNotification = UnlockNotification1 57529 57530 func unlock_notify_cb(tls *libc.TLS, apArg uintptr, nArg int32) { 57531 var i int32 57532 for i = 0; i < nArg; i++ { 57533 var p uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 57534 libc.Xpthread_mutex_lock(tls, p+16) 57535 (*UnlockNotification)(unsafe.Pointer(p)).Ffired = 1 57536 libc.Xpthread_cond_signal(tls, p+8) 57537 libc.Xpthread_mutex_unlock(tls, p+16) 57538 } 57539 } 57540 57541 func wait_for_unlock_notify(tls *libc.TLS, db uintptr) int32 { 57542 bp := tls.Alloc(24) 57543 defer tls.Free(24) 57544 57545 var rc int32 57546 57547 (*UnlockNotification)(unsafe.Pointer(bp)).Ffired = 0 57548 libc.Xpthread_mutex_init(tls, bp+16, uintptr(0)) 57549 libc.Xpthread_cond_init(tls, bp+8, uintptr(0)) 57550 57551 rc = sqlite3.Xsqlite3_unlock_notify(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 57552 f func(*libc.TLS, uintptr, int32) 57553 }{unlock_notify_cb})), bp) 57554 57555 if rc == SQLITE_OK { 57556 libc.Xpthread_mutex_lock(tls, bp+16) 57557 if !((*UnlockNotification)(unsafe.Pointer(bp)).Ffired != 0) { 57558 libc.Xpthread_cond_wait(tls, bp+8, bp+16) 57559 } 57560 libc.Xpthread_mutex_unlock(tls, bp+16) 57561 } 57562 57563 libc.Xpthread_cond_destroy(tls, bp+8) 57564 libc.Xpthread_mutex_destroy(tls, bp+16) 57565 57566 return rc 57567 } 57568 57569 func sqlite3_blocking_step(tls *libc.TLS, pStmt uintptr) int32 { 57570 var rc int32 57571 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt)) { 57572 rc = wait_for_unlock_notify(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt)) 57573 if rc != SQLITE_OK { 57574 break 57575 } 57576 sqlite3.Xsqlite3_reset(tls, pStmt) 57577 } 57578 return rc 57579 } 57580 57581 func sqlite3_blocking_prepare_v2(tls *libc.TLS, db uintptr, zSql uintptr, nSql int32, ppStmt uintptr, pz uintptr) int32 { 57582 var rc int32 57583 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, nSql, ppStmt, pz)) { 57584 rc = wait_for_unlock_notify(tls, db) 57585 if rc != SQLITE_OK { 57586 break 57587 } 57588 } 57589 return rc 57590 } 57591 57592 func blocking_step_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57593 var pStmt uintptr 57594 var rc int32 57595 57596 if objc != 2 { 57597 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 57598 return TCL_ERROR 57599 } 57600 57601 pStmt = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 57602 rc = sqlite3_blocking_step(tls, pStmt) 57603 57604 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 57605 return TCL_OK 57606 } 57607 57608 func blocking_prepare_v2_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57609 bp := tls.Alloc(162) 57610 defer tls.Free(162) 57611 57612 var zSql uintptr 57613 57614 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 57615 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 57616 57617 var rc int32 57618 var isBlocking int32 = libc.BoolInt32(!(clientData == uintptr(0))) 57619 57620 if objc != 5 && objc != 4 { 57621 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 57622 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 57623 return TCL_ERROR 57624 } 57625 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 57626 return TCL_ERROR 57627 } 57628 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 57629 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 57630 return TCL_ERROR 57631 } 57632 57633 if isBlocking != 0 { 57634 rc = sqlite3_blocking_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 57635 } else { 57636 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 57637 } 57638 57639 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 57640 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 57641 *(*int32)(unsafe.Pointer(bp + 88)) = int32(int64(*(*int32)(unsafe.Pointer(bp + 88))) - (int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 57642 } 57643 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) 57644 } 57645 if rc != SQLITE_OK { 57646 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+38454, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc))) 57647 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 57648 return TCL_ERROR 57649 } 57650 57651 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 57652 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 57653 return TCL_ERROR 57654 } 57655 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 57656 } 57657 return TCL_OK 57658 } 57659 57660 func SqlitetestThread_Init(tls *libc.TLS, interp uintptr) int32 { 57661 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 57662 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57663 }{sqlthread_proc})), uintptr(0), uintptr(0)) 57664 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 57665 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57666 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 57667 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 57668 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57669 }{blocking_step_proc})), uintptr(0), uintptr(0)) 57670 tcl.XTcl_CreateObjCommand(tls, interp, 57671 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 57672 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57673 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 57674 tcl.XTcl_CreateObjCommand(tls, interp, 57675 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 57676 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57677 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 57678 return TCL_OK 57679 } 57680 57681 func Sqlitetestvdbecov_Init(tls *libc.TLS, interp uintptr) int32 { 57682 return TCL_OK 57683 } 57684 57685 type Testvfs1 = struct { 57686 FzName uintptr 57687 FpParent uintptr 57688 FpVfs uintptr 57689 Finterp uintptr 57690 FpScript uintptr 57691 FpBuffer uintptr 57692 FisNoshm int32 57693 FisFullshm int32 57694 Fmask int32 57695 Fioerr_err TestFaultInject 57696 Ffull_err TestFaultInject 57697 Fcantopen_err TestFaultInject 57698 FiDevchar int32 57699 FiSectorsize int32 57700 } 57701 57702 type Testvfs = Testvfs1 57703 type TestvfsBuffer1 = struct { 57704 FzFile uintptr 57705 Fpgsz int32 57706 F__ccgo_pad1 [4]byte 57707 FaPage [1024]uintptr 57708 FpFile uintptr 57709 FpNext uintptr 57710 } 57711 57712 type TestvfsBuffer = TestvfsBuffer1 57713 type TestvfsFile1 = struct { 57714 Fbase sqlite3_file 57715 FpFd uintptr 57716 } 57717 57718 type TestvfsFile = TestvfsFile1 57719 type TestvfsFd1 = struct { 57720 FpVfs uintptr 57721 FzFilename uintptr 57722 FpReal uintptr 57723 FpShmId uintptr 57724 FpShm uintptr 57725 Fexcllock u32 57726 Fsharedlock u32 57727 FpNext uintptr 57728 } 57729 57730 type TestvfsFd = TestvfsFd1 57731 57732 type TestFaultInject1 = struct { 57733 FiCnt int32 57734 FeFault int32 57735 FnFail int32 57736 } 57737 57738 type TestFaultInject = TestFaultInject1 57739 57740 var tvfs_io_methods = sqlite3_io_methods{ 57741 FiVersion: 3, 57742 FxClose: 0, 57743 FxRead: 0, 57744 FxWrite: 0, 57745 FxTruncate: 0, 57746 FxSync: 0, 57747 FxFileSize: 0, 57748 FxLock: 0, 57749 FxUnlock: 0, 57750 FxCheckReservedLock: 0, 57751 FxFileControl: 0, 57752 FxSectorSize: 0, 57753 FxDeviceCharacteristics: 0, 57754 FxShmMap: 0, 57755 FxShmLock: 0, 57756 FxShmBarrier: 0, 57757 FxShmUnmap: 0, 57758 FxFetch: 0, 57759 FxUnfetch: 0, 57760 } 57761 57762 func tvfsResultCode(tls *libc.TLS, p uintptr, pRc uintptr) int32 { 57763 bp := tls.Alloc(144) 57764 defer tls.Free(144) 57765 57766 *(*[9]errcode)(unsafe.Pointer(bp)) = [9]errcode{ 57767 {FzCode: ts + 2127}, 57768 {FeCode: SQLITE_ERROR, FzCode: ts + 2114}, 57769 {FeCode: SQLITE_IOERR, FzCode: ts + 38458}, 57770 {FeCode: SQLITE_LOCKED, FzCode: ts + 38471}, 57771 {FeCode: SQLITE_BUSY, FzCode: ts + 38485}, 57772 {FeCode: SQLITE_READONLY, FzCode: ts + 38497}, 57773 {FeCode: SQLITE_READONLY | int32(5)<<8, FzCode: ts + 38513}, 57774 {FeCode: SQLITE_NOTFOUND, FzCode: ts + 38538}, 57775 {FeCode: -1, FzCode: ts + 38554}, 57776 } 57777 var z uintptr 57778 var i int32 57779 57780 z = tcl.XTcl_GetStringResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 57781 for i = 0; i < int32(uint64(unsafe.Sizeof([9]errcode{}))/uint64(unsafe.Sizeof(errcode{}))); i++ { 57782 if 0 == libc.Xstrcmp(tls, z, (*errcode)(unsafe.Pointer(bp+uintptr(i)*16)).FzCode) { 57783 *(*int32)(unsafe.Pointer(pRc)) = (*errcode)(unsafe.Pointer(bp + uintptr(i)*16)).FeCode 57784 return 1 57785 } 57786 } 57787 57788 return 0 57789 } 57790 57791 type errcode = struct { 57792 FeCode int32 57793 F__ccgo_pad1 [4]byte 57794 FzCode uintptr 57795 } 57796 57797 func tvfsInjectFault(tls *libc.TLS, p uintptr) int32 { 57798 var ret int32 = 0 57799 if (*TestFaultInject)(unsafe.Pointer(p)).FeFault != 0 { 57800 (*TestFaultInject)(unsafe.Pointer(p)).FiCnt-- 57801 if (*TestFaultInject)(unsafe.Pointer(p)).FiCnt == 0 || (*TestFaultInject)(unsafe.Pointer(p)).FiCnt < 0 && (*TestFaultInject)(unsafe.Pointer(p)).FeFault == FAULT_INJECT_PERSISTENT { 57802 ret = 1 57803 (*TestFaultInject)(unsafe.Pointer(p)).FnFail++ 57804 } 57805 } 57806 return ret 57807 } 57808 57809 func tvfsInjectIoerr(tls *libc.TLS, p uintptr) int32 { 57810 return tvfsInjectFault(tls, p+60) 57811 } 57812 57813 func tvfsInjectFullerr(tls *libc.TLS, p uintptr) int32 { 57814 return tvfsInjectFault(tls, p+72) 57815 } 57816 57817 func tvfsInjectCantopenerr(tls *libc.TLS, p uintptr) int32 { 57818 return tvfsInjectFault(tls, p+84) 57819 } 57820 57821 func tvfsExecTcl(tls *libc.TLS, p uintptr, zMethod uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr, arg4 uintptr) { 57822 var rc int32 57823 var pEval uintptr 57824 57825 pEval = tcl.XTcl_DuplicateObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 57826 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 57827 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zMethod, -1)) 57828 if arg1 != 0 { 57829 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg1) 57830 } 57831 if arg2 != 0 { 57832 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg2) 57833 } 57834 if arg3 != 0 { 57835 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg3) 57836 } 57837 if arg4 != 0 { 57838 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg4) 57839 } 57840 57841 rc = tcl.XTcl_EvalObjEx(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 57842 if rc != TCL_OK { 57843 tcl.XTcl_BackgroundError(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 57844 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 57845 } 57846 } 57847 57848 func tvfsClose(tls *libc.TLS, pFile uintptr) int32 { 57849 var pTestfile uintptr = pFile 57850 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd 57851 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57852 57853 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CLOSE_MASK != 0 { 57854 tvfsExecTcl(tls, p, ts+35556, 57855 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 57856 } 57857 57858 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId != 0 { 57859 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57860 var _objPtr uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId 57861 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57862 tcl.XTclFreeObj(tls, _objPtr) 57863 } 57864 } 57865 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 57866 } 57867 if (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods != 0 { 57868 tcl.XTcl_Free(tls, (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods) 57869 } 57870 sqlite3.Xsqlite3OsClose(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 57871 tcl.XTcl_Free(tls, pFd) 57872 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = uintptr(0) 57873 return SQLITE_OK 57874 } 57875 57876 func tvfsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 57877 bp := tls.Alloc(4) 57878 defer tls.Free(4) 57879 57880 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 57881 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57882 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57883 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 { 57884 tvfsExecTcl(tls, p, ts+35563, 57885 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 57886 tvfsResultCode(tls, p, bp) 57887 } 57888 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 57889 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 57890 } 57891 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 57892 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsRead(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 57893 } 57894 return *(*int32)(unsafe.Pointer(bp)) 57895 } 57896 57897 func tvfsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 57898 bp := tls.Alloc(4) 57899 defer tls.Free(4) 57900 57901 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 57902 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57903 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57904 57905 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 { 57906 tvfsExecTcl(tls, p, ts+35569, 57907 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 57908 tcl.XTcl_NewWideIntObj(tls, iOfst), tcl.XTcl_NewIntObj(tls, iAmt)) 57909 tvfsResultCode(tls, p, bp) 57910 if *(*int32)(unsafe.Pointer(bp)) < 0 { 57911 return SQLITE_OK 57912 } 57913 } 57914 57915 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 57916 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 57917 } 57918 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 57919 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 57920 } 57921 57922 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 57923 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsWrite(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 57924 } 57925 return *(*int32)(unsafe.Pointer(bp)) 57926 } 57927 57928 func tvfsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 57929 bp := tls.Alloc(4) 57930 defer tls.Free(4) 57931 57932 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 57933 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57934 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57935 57936 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_TRUNCATE_MASK != 0 { 57937 tvfsExecTcl(tls, p, ts+35576, 57938 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 57939 tvfsResultCode(tls, p, bp) 57940 } 57941 57942 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 57943 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsTruncate(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, size) 57944 } 57945 return *(*int32)(unsafe.Pointer(bp)) 57946 } 57947 57948 func tvfsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 57949 bp := tls.Alloc(4) 57950 defer tls.Free(4) 57951 57952 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 57953 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57954 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57955 57956 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SYNC_MASK != 0 { 57957 var zFlags uintptr = uintptr(0) 57958 57959 switch flags { 57960 case SQLITE_SYNC_NORMAL: 57961 zFlags = ts + 16397 57962 break 57963 fallthrough 57964 case SQLITE_SYNC_FULL: 57965 zFlags = ts + 18291 57966 break 57967 fallthrough 57968 case SQLITE_SYNC_NORMAL | SQLITE_SYNC_DATAONLY: 57969 zFlags = ts + 38566 57970 break 57971 fallthrough 57972 case SQLITE_SYNC_FULL | SQLITE_SYNC_DATAONLY: 57973 zFlags = ts + 38582 57974 break 57975 fallthrough 57976 default: 57977 } 57978 57979 tvfsExecTcl(tls, p, ts+27843, 57980 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 57981 tcl.XTcl_NewStringObj(tls, zFlags, -1), uintptr(0)) 57982 tvfsResultCode(tls, p, bp) 57983 } 57984 57985 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 57986 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 57987 } 57988 57989 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 57990 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsSync(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, flags) 57991 } 57992 57993 return *(*int32)(unsafe.Pointer(bp)) 57994 } 57995 57996 func tvfsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 57997 var p uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57998 return sqlite3.Xsqlite3OsFileSize(tls, (*TestvfsFd)(unsafe.Pointer(p)).FpReal, pSize) 57999 } 58000 58001 func tvfsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58002 bp := tls.Alloc(38) 58003 defer tls.Free(38) 58004 58005 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58006 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58007 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_LOCK_MASK != 0 { 58008 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58009 tvfsExecTcl(tls, p, ts+35596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58010 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58011 } 58012 return sqlite3.Xsqlite3OsLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58013 } 58014 58015 func tvfsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58016 bp := tls.Alloc(38) 58017 defer tls.Free(38) 58018 58019 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58020 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58021 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_UNLOCK_MASK != 0 { 58022 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58023 tvfsExecTcl(tls, p, ts+35602, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58024 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58025 } 58026 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58027 return SQLITE_IOERR | int32(8)<<8 58028 } 58029 return sqlite3.Xsqlite3OsUnlock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58030 } 58031 58032 func tvfsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 58033 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58034 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58035 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CKLOCK_MASK != 0 { 58036 tvfsExecTcl(tls, p, ts+38596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58037 uintptr(0), uintptr(0), uintptr(0)) 58038 } 58039 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, pResOut) 58040 } 58041 58042 func tvfsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 58043 bp := tls.Alloc(68) 58044 defer tls.Free(68) 58045 58046 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58047 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58048 if op == SQLITE_FCNTL_PRAGMA { 58049 var argv uintptr = pArg 58050 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+9674) == 0 { 58051 var rc int32 = SQLITE_ERROR 58052 if *(*uintptr)(unsafe.Pointer(argv + 2*8)) != 0 { 58053 var z uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 58054 var x int32 = libc.Xatoi(tls, z) 58055 if x != 0 { 58056 rc = x 58057 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 58058 z++ 58059 } 58060 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x01 != 0 { 58061 z++ 58062 } 58063 } 58064 if *(*int8)(unsafe.Pointer(z)) != 0 { 58065 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, z)) 58066 } 58067 } 58068 return rc 58069 } 58070 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4794) == 0 { 58071 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 58072 return SQLITE_OK 58073 } 58074 } 58075 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FCNTL_MASK != 0 { 58076 *(*[3]Fcntl)(unsafe.Pointer(bp + 16)) = [3]Fcntl{ 58077 {FiFnctl: SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, FzFnctl: ts + 38615}, 58078 {FiFnctl: SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, FzFnctl: ts + 38634}, 58079 {FiFnctl: SQLITE_FCNTL_ZIPVFS, FzFnctl: ts + 38654}, 58080 } 58081 var i int32 58082 for i = 0; uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})); i++ { 58083 if op == (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FiFnctl { 58084 break 58085 } 58086 } 58087 if uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})) { 58088 *(*int32)(unsafe.Pointer(bp + 64)) = 0 58089 tvfsExecTcl(tls, p, ts+35624, 58090 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58091 tcl.XTcl_NewStringObj(tls, (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FzFnctl, -1), 58092 uintptr(0), uintptr(0)) 58093 tvfsResultCode(tls, p, bp+64) 58094 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 58095 return func() int32 { 58096 if *(*int32)(unsafe.Pointer(bp + 64)) < 0 { 58097 return SQLITE_OK 58098 } 58099 return *(*int32)(unsafe.Pointer(bp + 64)) 58100 }() 58101 } 58102 } 58103 } 58104 return sqlite3.Xsqlite3OsFileControl(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, op, pArg) 58105 } 58106 58107 type Fcntl = struct { 58108 FiFnctl int32 58109 F__ccgo_pad1 [4]byte 58110 FzFnctl uintptr 58111 } 58112 58113 func tvfsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 58114 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58115 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58116 if (*Testvfs)(unsafe.Pointer(p)).FiSectorsize >= 0 { 58117 return (*Testvfs)(unsafe.Pointer(p)).FiSectorsize 58118 } 58119 return sqlite3.Xsqlite3OsSectorSize(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58120 } 58121 58122 func tvfsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 58123 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58124 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58125 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar >= 0 { 58126 return (*Testvfs)(unsafe.Pointer(p)).FiDevchar 58127 } 58128 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58129 } 58130 58131 func tvfsOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 58132 bp := tls.Alloc(4) 58133 defer tls.Free(4) 58134 58135 var pTestfile uintptr = pFile 58136 var pFd uintptr 58137 var pId uintptr = uintptr(0) 58138 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58139 58140 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))) 58141 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)) 58142 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 58143 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 58144 (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename = zName 58145 (*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs = pVfs 58146 (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal = pFd + 1*56 58147 libc.Xmemset(tls, pTestfile, 0, uint64(unsafe.Sizeof(TestvfsFile{}))) 58148 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = pFd 58149 58150 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58151 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 { 58152 var pArg uintptr = tcl.XTcl_NewObj(tls) 58153 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 58154 if flags&SQLITE_OPEN_MAIN_DB != 0 { 58155 var z uintptr = zName + uintptr(libc.Xstrlen(tls, zName)+uint64(1)) 58156 for *(*int8)(unsafe.Pointer(z)) != 0 { 58157 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 58158 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 58159 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 58160 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 58161 } 58162 } 58163 tvfsExecTcl(tls, p, ts+27421, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), pArg, uintptr(0), uintptr(0)) 58164 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58165 var _objPtr uintptr = pArg 58166 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58167 tcl.XTclFreeObj(tls, _objPtr) 58168 } 58169 } 58170 if tvfsResultCode(tls, p, bp) != 0 { 58171 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58172 return *(*int32)(unsafe.Pointer(bp)) 58173 } 58174 } else { 58175 pId = tcl.XTcl_GetObjResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58176 } 58177 } 58178 58179 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58180 return SQLITE_IOERR 58181 } 58182 if tvfsInjectCantopenerr(tls, p) != 0 { 58183 return SQLITE_CANTOPEN 58184 } 58185 if tvfsInjectFullerr(tls, p) != 0 { 58186 return SQLITE_FULL 58187 } 58188 58189 if !(pId != 0) { 58190 pId = tcl.XTcl_NewStringObj(tls, ts+38661, -1) 58191 } 58192 (*Tcl_Obj)(unsafe.Pointer(pId)).FrefCount++ 58193 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = pId 58194 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58195 58196 *(*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) 58197 if (*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods != 0 { 58198 var pMethods uintptr 58199 var nByte int32 58200 58201 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 { 58202 nByte = int32(unsafe.Sizeof(sqlite3_io_methods{})) 58203 } else { 58204 nByte = int32(uintptr(0) + 104) 58205 } 58206 58207 pMethods = tcl.XTcl_Alloc(tls, uint32(nByte)) 58208 libc.Xmemcpy(tls, pMethods, uintptr(unsafe.Pointer(&tvfs_io_methods)), uint64(nByte)) 58209 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods)).FiVersion 58210 if (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion > (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion { 58211 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion 58212 } 58213 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 && (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FisNoshm != 0 { 58214 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmUnmap = uintptr(0) 58215 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmLock = uintptr(0) 58216 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmBarrier = uintptr(0) 58217 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmMap = uintptr(0) 58218 } 58219 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = pMethods 58220 } 58221 58222 return *(*int32)(unsafe.Pointer(bp)) 58223 } 58224 58225 func tvfsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 58226 bp := tls.Alloc(4) 58227 defer tls.Free(4) 58228 58229 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58230 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58231 58232 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_DELETE_MASK != 0 { 58233 tvfsExecTcl(tls, p, ts+35661, 58234 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewIntObj(tls, dirSync), uintptr(0), uintptr(0)) 58235 tvfsResultCode(tls, p, bp) 58236 } 58237 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58238 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsDelete(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, dirSync) 58239 } 58240 return *(*int32)(unsafe.Pointer(bp)) 58241 } 58242 58243 func tvfsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 58244 bp := tls.Alloc(4) 58245 defer tls.Free(4) 58246 58247 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58248 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_ACCESS_MASK != 0 { 58249 var zArg uintptr = uintptr(0) 58250 if flags == SQLITE_ACCESS_EXISTS { 58251 zArg = ts + 38666 58252 } 58253 if flags == SQLITE_ACCESS_READWRITE { 58254 zArg = ts + 38687 58255 } 58256 if flags == SQLITE_ACCESS_READ { 58257 zArg = ts + 38711 58258 } 58259 tvfsExecTcl(tls, p, ts+35669, 58260 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewStringObj(tls, zArg, -1), uintptr(0), uintptr(0)) 58261 if tvfsResultCode(tls, p, bp) != 0 { 58262 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58263 return *(*int32)(unsafe.Pointer(bp)) 58264 } 58265 } else { 58266 var interp uintptr = (*Testvfs)(unsafe.Pointer(p)).Finterp 58267 if TCL_OK == tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, interp), pResOut) { 58268 return SQLITE_OK 58269 } 58270 } 58271 } 58272 return sqlite3.Xsqlite3OsAccess(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, flags, pResOut) 58273 } 58274 58275 func tvfsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 58276 bp := tls.Alloc(4) 58277 defer tls.Free(4) 58278 58279 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58280 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FULLPATHNAME_MASK != 0 { 58281 tvfsExecTcl(tls, p, ts+35677, tcl.XTcl_NewStringObj(tls, zPath, -1), uintptr(0), uintptr(0), uintptr(0)) 58282 if tvfsResultCode(tls, p, bp) != 0 { 58283 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58284 return *(*int32)(unsafe.Pointer(bp)) 58285 } 58286 } 58287 } 58288 return sqlite3.Xsqlite3OsFullPathname(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, nOut, zOut) 58289 } 58290 58291 func tvfsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 58292 return sqlite3.Xsqlite3OsRandomness(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nByte, zBufOut) 58293 } 58294 58295 func tvfsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 58296 return sqlite3.Xsqlite3OsSleep(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nMicro) 58297 } 58298 58299 func tvfsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 58300 return (*struct { 58301 f func(*libc.TLS, uintptr, uintptr) int32 58302 })(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) 58303 } 58304 58305 func tvfsShmOpen(tls *libc.TLS, pFile uintptr) int32 { 58306 bp := tls.Alloc(4) 58307 defer tls.Free(4) 58308 58309 var p uintptr 58310 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58311 var pBuffer uintptr 58312 var pFd uintptr 58313 58314 pFd = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58315 p = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58316 58317 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58318 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 { 58319 tvfsExecTcl(tls, p, ts+38730, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), uintptr(0), uintptr(0), uintptr(0)) 58320 if tvfsResultCode(tls, p, bp) != 0 { 58321 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58322 return *(*int32)(unsafe.Pointer(bp)) 58323 } 58324 } 58325 } 58326 58327 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58328 return SQLITE_IOERR 58329 } 58330 58331 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 58332 if 0 == libc.Xstrcmp(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile) { 58333 break 58334 } 58335 } 58336 if !(pBuffer != 0) { 58337 var szName int32 = int32(libc.Xstrlen(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 58338 var nByte int32 = int32(uint64(unsafe.Sizeof(TestvfsBuffer{})) + uint64(szName) + uint64(1)) 58339 pBuffer = tcl.XTcl_Alloc(tls, uint32(nByte)) 58340 libc.Xmemset(tls, pBuffer, 0, uint64(nByte)) 58341 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile = pBuffer + 1*8224 58342 libc.Xmemcpy(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, uint64(szName+1)) 58343 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext = (*Testvfs)(unsafe.Pointer(p)).FpBuffer 58344 (*Testvfs)(unsafe.Pointer(p)).FpBuffer = pBuffer 58345 } 58346 58347 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile 58348 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile = pFd 58349 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = pBuffer 58350 return *(*int32)(unsafe.Pointer(bp)) 58351 } 58352 58353 func tvfsAllocPage(tls *libc.TLS, p uintptr, iPage int32, pgsz int32) { 58354 if *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) == uintptr(0) { 58355 *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) = tcl.XTcl_Alloc(tls, uint32(pgsz)) 58356 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)), 0, uint64(pgsz)) 58357 (*TestvfsBuffer)(unsafe.Pointer(p)).Fpgsz = pgsz 58358 } 58359 } 58360 58361 func tvfsShmMap(tls *libc.TLS, pFile uintptr, iPage int32, pgsz int32, isWrite int32, pp uintptr) int32 { 58362 bp := tls.Alloc(4) 58363 defer tls.Free(4) 58364 58365 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58366 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58367 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58368 58369 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58370 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58371 return (*struct { 58372 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 58373 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iPage, pgsz, isWrite, pp) 58374 } 58375 58376 if uintptr(0) == (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm { 58377 *(*int32)(unsafe.Pointer(bp)) = tvfsShmOpen(tls, pFile) 58378 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58379 return *(*int32)(unsafe.Pointer(bp)) 58380 } 58381 } 58382 58383 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 { 58384 var pArg uintptr = tcl.XTcl_NewObj(tls) 58385 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 58386 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, iPage)) 58387 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, pgsz)) 58388 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, isWrite)) 58389 tvfsExecTcl(tls, p, ts+35754, 58390 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, pArg, uintptr(0)) 58391 tvfsResultCode(tls, p, bp) 58392 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58393 var _objPtr uintptr = pArg 58394 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58395 tcl.XTclFreeObj(tls, _objPtr) 58396 } 58397 } 58398 } 58399 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58400 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58401 } 58402 58403 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && isWrite != 0 && !(int32(*(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8))) != 0) { 58404 tvfsAllocPage(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm, iPage, pgsz) 58405 } 58406 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK || *(*int32)(unsafe.Pointer(bp)) == SQLITE_READONLY { 58407 *(*uintptr)(unsafe.Pointer(pp)) = *(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8)) 58408 } 58409 58410 return *(*int32)(unsafe.Pointer(bp)) 58411 } 58412 58413 func tvfsShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 58414 bp := tls.Alloc(100) 58415 defer tls.Free(100) 58416 58417 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 58418 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58419 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58420 var nLock int32 58421 58422 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58423 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58424 return (*struct { 58425 f func(*libc.TLS, uintptr, int32, int32, int32) int32 58426 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 58427 } 58428 58429 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 { 58430 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+16, ts+17826, libc.VaList(bp, ofst, n)) 58431 nLock = int32(libc.Xstrlen(tls, bp+16)) 58432 if flags&SQLITE_SHM_LOCK != 0 { 58433 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38739) 58434 } else { 58435 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38745) 58436 } 58437 nLock = nLock + int32(libc.Xstrlen(tls, bp+16+uintptr(nLock))) 58438 if flags&SQLITE_SHM_SHARED != 0 { 58439 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38753) 58440 } else { 58441 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38761) 58442 } 58443 tvfsExecTcl(tls, p, ts+35733, 58444 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58445 tcl.XTcl_NewStringObj(tls, bp+16, -1), uintptr(0)) 58446 tvfsResultCode(tls, p, bp+96) 58447 } 58448 58449 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58450 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_IOERR 58451 } 58452 58453 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 58454 var isLock int32 = flags & SQLITE_SHM_LOCK 58455 var isExcl int32 = flags & SQLITE_SHM_EXCLUSIVE 58456 var mask u32 = u32((int32(1)<<n - 1) << ofst) 58457 if isLock != 0 { 58458 var p2 uintptr 58459 for p2 = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FpFile; p2 != 0; p2 = (*TestvfsFd)(unsafe.Pointer(p2)).FpNext { 58460 if p2 == pFd { 58461 continue 58462 } 58463 if (*TestvfsFd)(unsafe.Pointer(p2)).Fexcllock&mask != 0 || isExcl != 0 && (*TestvfsFd)(unsafe.Pointer(p2)).Fsharedlock&mask != 0 { 58464 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_BUSY 58465 break 58466 } 58467 } 58468 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 58469 if isExcl != 0 { 58470 *(*u32)(unsafe.Pointer(pFd + 40)) |= mask 58471 } 58472 if !(isExcl != 0) { 58473 *(*u32)(unsafe.Pointer(pFd + 44)) |= mask 58474 } 58475 } 58476 } else { 58477 if isExcl != 0 { 58478 *(*u32)(unsafe.Pointer(pFd + 40)) &= ^mask 58479 } 58480 if !(isExcl != 0) { 58481 *(*u32)(unsafe.Pointer(pFd + 44)) &= ^mask 58482 } 58483 } 58484 } 58485 58486 return *(*int32)(unsafe.Pointer(bp + 96)) 58487 } 58488 58489 func tvfsShmBarrier(tls *libc.TLS, pFile uintptr) { 58490 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58491 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58492 58493 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMBARRIER_MASK != 0 { 58494 var z uintptr 58495 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm != 0 { 58496 z = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile 58497 } else { 58498 z = ts + 584 58499 } 58500 tvfsExecTcl(tls, p, ts+35742, tcl.XTcl_NewStringObj(tls, z, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58501 } 58502 58503 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58504 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58505 (*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) 58506 return 58507 } 58508 } 58509 58510 func tvfsShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 58511 bp := tls.Alloc(4) 58512 defer tls.Free(4) 58513 58514 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58515 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58516 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58517 var pBuffer uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm 58518 var ppFd uintptr 58519 58520 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58521 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58522 return (*struct { 58523 f func(*libc.TLS, uintptr, int32) int32 58524 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, deleteFlag) 58525 } 58526 58527 if !(pBuffer != 0) { 58528 return SQLITE_OK 58529 } 58530 58531 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMCLOSE_MASK != 0 { 58532 tvfsExecTcl(tls, p, ts+35723, 58533 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58534 tvfsResultCode(tls, p, bp) 58535 } 58536 58537 for ppFd = pBuffer + 8208; *(*uintptr)(unsafe.Pointer(ppFd)) != pFd; ppFd = *(*uintptr)(unsafe.Pointer(ppFd)) + 48 { 58538 } 58539 58540 *(*uintptr)(unsafe.Pointer(ppFd)) = (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext 58541 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = uintptr(0) 58542 58543 if (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile == uintptr(0) { 58544 var i int32 58545 var pp uintptr 58546 for pp = p + 40; *(*uintptr)(unsafe.Pointer(pp)) != pBuffer; pp = *(*uintptr)(unsafe.Pointer(pp)) + 8216 { 58547 } 58548 *(*uintptr)(unsafe.Pointer(pp)) = (*TestvfsBuffer)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNext 58549 for i = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8)) != 0; i++ { 58550 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8))) 58551 } 58552 tcl.XTcl_Free(tls, pBuffer) 58553 } 58554 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 58555 58556 return *(*int32)(unsafe.Pointer(bp)) 58557 } 58558 58559 func tvfsFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 58560 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58561 return sqlite3.Xsqlite3OsFetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, iAmt, pp) 58562 } 58563 58564 func tvfsUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, p uintptr) int32 { 58565 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58566 return sqlite3.Xsqlite3OsUnfetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, p) 58567 } 58568 58569 func testvfs_obj_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58570 bp := tls.Alloc(568) 58571 defer tls.Free(568) 58572 58573 var p uintptr = cd 58574 *(*[10]TestvfsSubcmd)(unsafe.Pointer(bp + 96)) = [10]TestvfsSubcmd{ 58575 {FzName: ts + 38772}, 58576 {FzName: ts + 10138, FeCmd: uint32(1)}, 58577 {FzName: ts + 38776, FeCmd: uint32(2)}, 58578 {FzName: ts + 38783, FeCmd: uint32(3)}, 58579 {FzName: ts + 38789, FeCmd: uint32(7)}, 58580 {FzName: ts + 38797, FeCmd: uint32(8)}, 58581 {FzName: ts + 38809, FeCmd: uint32(4)}, 58582 {FzName: ts + 38816, FeCmd: uint32(5)}, 58583 {FzName: ts + 38824, FeCmd: uint32(6)}, 58584 {}, 58585 } 58586 58587 if objc < 2 { 58588 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 58589 return TCL_ERROR 58590 } 58591 if tcl.XTcl_GetIndexFromObjStruct(tls, 58592 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+96, int32(unsafe.Sizeof(TestvfsSubcmd{})), ts+38835, 0, bp+256) != 0 { 58593 return TCL_ERROR 58594 } 58595 tcl.XTcl_ResetResult(tls, interp) 58596 58597 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 58598 case uint32(0): 58599 { 58600 var pObj uintptr 58601 var rc int32 58602 var pBuffer uintptr 58603 var zName uintptr 58604 if objc != 3 && objc != 4 { 58605 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38846) 58606 return TCL_ERROR 58607 } 58608 zName = tcl.XTcl_Alloc(tls, uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname)) 58609 rc = (*struct { 58610 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58611 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FxFullPathname})).f(tls, 58612 (*Testvfs)(unsafe.Pointer(p)).FpParent, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 58613 (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname, zName) 58614 if rc != SQLITE_OK { 58615 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38859, 58616 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 58617 tcl.XTcl_Free(tls, zName) 58618 return TCL_ERROR 58619 } 58620 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 58621 if 0 == libc.Xstrcmp(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, zName) { 58622 break 58623 } 58624 } 58625 tcl.XTcl_Free(tls, zName) 58626 if !(pBuffer != 0) { 58627 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+38885, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 58628 return TCL_ERROR 58629 } 58630 if objc == 4 { 58631 var a uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+260) 58632 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 58633 if pgsz == 0 { 58634 pgsz = 65536 58635 } 58636 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256))*pgsz < *(*int32)(unsafe.Pointer(bp + 260)); *(*int32)(unsafe.Pointer(bp + 256))++ { 58637 var nByte int32 = pgsz 58638 tvfsAllocPage(tls, pBuffer, *(*int32)(unsafe.Pointer(bp + 256)), pgsz) 58639 if *(*int32)(unsafe.Pointer(bp + 260))-*(*int32)(unsafe.Pointer(bp + 256))*pgsz < pgsz { 58640 nByte = *(*int32)(unsafe.Pointer(bp + 260)) 58641 } 58642 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)) 58643 } 58644 } 58645 58646 pObj = tcl.XTcl_NewObj(tls) 58647 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))++ { 58648 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 58649 if pgsz == 0 { 58650 pgsz = 65536 58651 } 58652 tcl.XTcl_AppendObjToObj(tls, pObj, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), pgsz)) 58653 } 58654 tcl.XTcl_SetObjResult(tls, interp, pObj) 58655 break 58656 58657 } 58658 58659 case uint32(2): 58660 { 58661 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 58662 *(*int32)(unsafe.Pointer(bp + 264)) = 0 58663 var mask int32 = 0 58664 if objc != 3 { 58665 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+32419) 58666 return TCL_ERROR 58667 } 58668 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+264, bp+272) != 0 { 58669 return TCL_ERROR 58670 } 58671 tcl.XTcl_ResetResult(tls, interp) 58672 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256)) < *(*int32)(unsafe.Pointer(bp + 264)); *(*int32)(unsafe.Pointer(bp + 256))++ { 58673 var iMethod int32 58674 var zElem uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 272)) + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8))) 58675 for iMethod = 0; iMethod < int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))); iMethod++ { 58676 if libc.Xstrcmp(tls, zElem, vfsmethod[iMethod].FzName) == 0 { 58677 mask = mask | vfsmethod[iMethod].Fmask 58678 break 58679 } 58680 } 58681 if iMethod == int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))) { 58682 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+38900, zElem, 0)) 58683 return TCL_ERROR 58684 } 58685 } 58686 (*Testvfs)(unsafe.Pointer(p)).Fmask = mask 58687 break 58688 58689 } 58690 58691 case uint32(4): 58692 { 58693 if objc == 3 { 58694 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 58695 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58696 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 58697 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58698 tcl.XTclFreeObj(tls, _objPtr) 58699 } 58700 } 58701 (*Testvfs)(unsafe.Pointer(p)).FpScript = uintptr(0) 58702 } 58703 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+280) 58704 if *(*int32)(unsafe.Pointer(bp + 280)) > 0 { 58705 (*Testvfs)(unsafe.Pointer(p)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58706 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 58707 } 58708 } else if objc != 2 { 58709 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 58710 return TCL_ERROR 58711 } 58712 58713 tcl.XTcl_ResetResult(tls, interp) 58714 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 58715 tcl.XTcl_SetObjResult(tls, interp, (*Testvfs)(unsafe.Pointer(p)).FpScript) 58716 } 58717 58718 break 58719 58720 } 58721 58722 case uint32(8): 58723 fallthrough 58724 case uint32(3): 58725 fallthrough 58726 case uint32(7): 58727 { 58728 var pTest uintptr = uintptr(0) 58729 var iRet int32 58730 58731 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 58732 case uint32(3): 58733 pTest = p + 60 58734 break 58735 case uint32(7): 58736 pTest = p + 72 58737 break 58738 case uint32(8): 58739 pTest = p + 84 58740 break 58741 default: 58742 } 58743 iRet = (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail 58744 (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail = 0 58745 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = 0 58746 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = 0 58747 58748 if objc == 4 { 58749 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+284) || 58750 TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+288) { 58751 return TCL_ERROR 58752 } 58753 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = func() int32 { 58754 if *(*int32)(unsafe.Pointer(bp + 288)) != 0 { 58755 return FAULT_INJECT_PERSISTENT 58756 } 58757 return FAULT_INJECT_TRANSIENT 58758 }() 58759 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = *(*int32)(unsafe.Pointer(bp + 284)) 58760 } else if objc != 2 { 58761 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38917) 58762 return TCL_ERROR 58763 } 58764 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iRet)) 58765 break 58766 58767 } 58768 58769 case uint32(1): 58770 { 58771 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 58772 break 58773 58774 } 58775 58776 case uint32(5): 58777 { 58778 *(*[16]DeviceFlag)(unsafe.Pointer(bp + 304)) = [16]DeviceFlag{ 58779 {FzName: ts + 38931, FiValue: -1}, 58780 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 58781 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 58782 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 58783 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 58784 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 58785 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 58786 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 58787 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 58788 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 58789 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 58790 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 58791 {FzName: ts + 38939, FiValue: SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN}, 58792 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 58793 {FzName: ts + 38961, FiValue: SQLITE_IOCAP_IMMUTABLE}, 58794 {}, 58795 } 58796 var pRet uintptr 58797 var iFlag int32 58798 58799 if objc > 3 { 58800 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38971) 58801 return TCL_ERROR 58802 } 58803 if objc == 3 { 58804 var j int32 58805 var iNew int32 = 0 58806 *(*uintptr)(unsafe.Pointer(bp + 296)) = uintptr(0) 58807 *(*int32)(unsafe.Pointer(bp + 292)) = 0 58808 58809 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+292, bp+296) != 0 { 58810 return TCL_ERROR 58811 } 58812 58813 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 292)); j++ { 58814 *(*int32)(unsafe.Pointer(bp + 560)) = 0 58815 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(j)*8)), bp+304, 58816 int32(unsafe.Sizeof(DeviceFlag{})), ts+17631, 0, bp+560) != 0 { 58817 return TCL_ERROR 58818 } 58819 if (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue < 0 && *(*int32)(unsafe.Pointer(bp + 292)) > 1 { 58820 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+38983, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 58821 return TCL_ERROR 58822 } 58823 iNew = iNew | (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue 58824 } 58825 58826 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = iNew | 0x10000000 58827 } 58828 58829 pRet = tcl.XTcl_NewObj(tls) 58830 for iFlag = 0; uint64(iFlag) < uint64(unsafe.Sizeof([16]DeviceFlag{}))/uint64(unsafe.Sizeof(DeviceFlag{})); iFlag++ { 58831 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar&(*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FiValue != 0 { 58832 tcl.XTcl_ListObjAppendElement(tls, 58833 interp, pRet, tcl.XTcl_NewStringObj(tls, (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FzName, -1)) 58834 } 58835 } 58836 tcl.XTcl_SetObjResult(tls, interp, pRet) 58837 58838 break 58839 58840 } 58841 58842 case uint32(6): 58843 { 58844 if objc > 3 { 58845 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38995) 58846 return TCL_ERROR 58847 } 58848 if objc == 3 { 58849 *(*int32)(unsafe.Pointer(bp + 564)) = 0 58850 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+564) != 0 { 58851 return TCL_ERROR 58852 } 58853 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = *(*int32)(unsafe.Pointer(bp + 564)) 58854 } 58855 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*Testvfs)(unsafe.Pointer(p)).FiSectorsize)) 58856 break 58857 58858 } 58859 } 58860 58861 return TCL_OK 58862 } 58863 58864 type TestvfsSubcmd = struct { 58865 FzName uintptr 58866 FeCmd uint32 58867 F__ccgo_pad1 [4]byte 58868 } 58869 58870 type VfsMethod = struct { 58871 FzName uintptr 58872 Fmask int32 58873 F__ccgo_pad1 [4]byte 58874 } 58875 58876 var vfsmethod = [18]VfsMethod{ 58877 {FzName: ts + 38730, Fmask: TESTVFS_SHMOPEN_MASK}, 58878 {FzName: ts + 35733, Fmask: TESTVFS_SHMLOCK_MASK}, 58879 {FzName: ts + 35742, Fmask: TESTVFS_SHMBARRIER_MASK}, 58880 {FzName: ts + 35723, Fmask: TESTVFS_SHMCLOSE_MASK}, 58881 {FzName: ts + 35754, Fmask: TESTVFS_SHMMAP_MASK}, 58882 {FzName: ts + 27843, Fmask: TESTVFS_SYNC_MASK}, 58883 {FzName: ts + 35661, Fmask: TESTVFS_DELETE_MASK}, 58884 {FzName: ts + 35569, Fmask: TESTVFS_WRITE_MASK}, 58885 {FzName: ts + 35563, Fmask: TESTVFS_READ_MASK}, 58886 {FzName: ts + 35576, Fmask: TESTVFS_TRUNCATE_MASK}, 58887 {FzName: ts + 27421, Fmask: TESTVFS_OPEN_MASK}, 58888 {FzName: ts + 35556, Fmask: TESTVFS_CLOSE_MASK}, 58889 {FzName: ts + 35669, Fmask: TESTVFS_ACCESS_MASK}, 58890 {FzName: ts + 35677, Fmask: TESTVFS_FULLPATHNAME_MASK}, 58891 {FzName: ts + 35602, Fmask: TESTVFS_UNLOCK_MASK}, 58892 {FzName: ts + 35596, Fmask: TESTVFS_LOCK_MASK}, 58893 {FzName: ts + 38596, Fmask: TESTVFS_CKLOCK_MASK}, 58894 {FzName: ts + 35624, Fmask: TESTVFS_FCNTL_MASK}, 58895 } 58896 58897 func testvfs_obj_del(tls *libc.TLS, cd ClientData) { 58898 var p uintptr = cd 58899 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 58900 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58901 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 58902 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58903 tcl.XTclFreeObj(tls, _objPtr) 58904 } 58905 } 58906 } 58907 sqlite3.Xsqlite3_vfs_unregister(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 58908 libc.Xmemset(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs, 0, uint64(unsafe.Sizeof(sqlite3_vfs{}))) 58909 tcl.XTcl_Free(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 58910 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Testvfs{}))) 58911 tcl.XTcl_Free(tls, p) 58912 } 58913 58914 func testvfs_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58915 bp := tls.Alloc(28) 58916 defer tls.Free(28) 58917 58918 var p uintptr 58919 var pVfs uintptr 58920 var zVfs uintptr 58921 var nByte int32 58922 58923 var i int32 58924 58925 var zSwitch uintptr 58926 *(*int32)(unsafe.Pointer(bp + 4)) = 0 58927 *(*int32)(unsafe.Pointer(bp + 24)) = 0 58928 *(*int32)(unsafe.Pointer(bp + 8)) = 0 58929 *(*int32)(unsafe.Pointer(bp + 12)) = 0 58930 *(*int32)(unsafe.Pointer(bp + 16)) = -1 58931 *(*int32)(unsafe.Pointer(bp + 20)) = 3 58932 58933 if !(objc < 2 || 0 != objc%2) { 58934 goto __1 58935 } 58936 goto bad_args 58937 __1: 58938 ; 58939 i = 2 58940 __2: 58941 if !(i < objc) { 58942 goto __4 58943 } 58944 zSwitch = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp) 58945 58946 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39003, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 58947 goto __5 58948 } 58949 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+4) != 0) { 58950 goto __7 58951 } 58952 return TCL_ERROR 58953 __7: 58954 ; 58955 if !(*(*int32)(unsafe.Pointer(bp + 4)) != 0) { 58956 goto __8 58957 } 58958 *(*int32)(unsafe.Pointer(bp + 24)) = 0 58959 __8: 58960 ; 58961 goto __6 58962 __5: 58963 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+26779, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 58964 goto __9 58965 } 58966 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+8) != 0) { 58967 goto __11 58968 } 58969 return TCL_ERROR 58970 __11: 58971 ; 58972 goto __10 58973 __9: 58974 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39010, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 58975 goto __12 58976 } 58977 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+12) != 0) { 58978 goto __14 58979 } 58980 return TCL_ERROR 58981 __14: 58982 ; 58983 goto __13 58984 __12: 58985 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39020, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 58986 goto __15 58987 } 58988 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+16) != 0) { 58989 goto __17 58990 } 58991 return TCL_ERROR 58992 __17: 58993 ; 58994 goto __16 58995 __15: 58996 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39032, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 58997 goto __18 58998 } 58999 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+20) != 0) { 59000 goto __20 59001 } 59002 return TCL_ERROR 59003 __20: 59004 ; 59005 goto __19 59006 __18: 59007 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39042, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59008 goto __21 59009 } 59010 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+24) != 0) { 59011 goto __23 59012 } 59013 return TCL_ERROR 59014 __23: 59015 ; 59016 if !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { 59017 goto __24 59018 } 59019 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59020 __24: 59021 ; 59022 goto __22 59023 __21: 59024 goto bad_args 59025 __22: 59026 ; 59027 __19: 59028 ; 59029 __16: 59030 ; 59031 __13: 59032 ; 59033 __10: 59034 ; 59035 __6: 59036 ; 59037 goto __3 59038 __3: 59039 i = i + 2 59040 goto __2 59041 goto __4 59042 __4: 59043 ; 59044 if !(uint64(*(*int32)(unsafe.Pointer(bp + 12))) < uint64(unsafe.Sizeof(TestvfsFile{}))) { 59045 goto __25 59046 } 59047 *(*int32)(unsafe.Pointer(bp + 12)) = int32(unsafe.Sizeof(TestvfsFile{})) 59048 __25: 59049 ; 59050 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 59051 nByte = int32(uint64(unsafe.Sizeof(Testvfs{})) + uint64(int32(libc.Xstrlen(tls, zVfs))) + uint64(1)) 59052 p = tcl.XTcl_Alloc(tls, uint32(nByte)) 59053 libc.Xmemset(tls, p, 0, uint64(nByte)) 59054 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = -1 59055 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = -1 59056 59057 tcl.XTcl_CreateObjCommand(tls, interp, zVfs, *(*uintptr)(unsafe.Pointer(&struct { 59058 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59059 }{testvfs_obj_cmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{testvfs_obj_del}))) 59060 (*Testvfs)(unsafe.Pointer(p)).FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59061 (*Testvfs)(unsafe.Pointer(p)).Finterp = interp 59062 59063 (*Testvfs)(unsafe.Pointer(p)).FzName = p + 1*104 59064 libc.Xmemcpy(tls, (*Testvfs)(unsafe.Pointer(p)).FzName, zVfs, libc.Xstrlen(tls, zVfs)+uint64(1)) 59065 59066 pVfs = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(sqlite3_vfs{}))) 59067 libc.Xmemcpy(tls, pVfs, uintptr(unsafe.Pointer(&tvfs_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 59068 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData = p 59069 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion = *(*int32)(unsafe.Pointer(bp + 20)) 59070 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName = (*Testvfs)(unsafe.Pointer(p)).FzName 59071 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname 59072 if !(*(*int32)(unsafe.Pointer(bp + 16)) >= 0 && *(*int32)(unsafe.Pointer(bp + 16)) < (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname) { 59073 goto __26 59074 } 59075 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = *(*int32)(unsafe.Pointer(bp + 16)) 59076 __26: 59077 ; 59078 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile = *(*int32)(unsafe.Pointer(bp + 12)) 59079 (*Testvfs)(unsafe.Pointer(p)).FpVfs = pVfs 59080 (*Testvfs)(unsafe.Pointer(p)).FisNoshm = *(*int32)(unsafe.Pointer(bp + 4)) 59081 (*Testvfs)(unsafe.Pointer(p)).FisFullshm = *(*int32)(unsafe.Pointer(bp + 24)) 59082 (*Testvfs)(unsafe.Pointer(p)).Fmask = TESTVFS_ALL_MASK 59083 59084 sqlite3.Xsqlite3_vfs_register(tls, pVfs, *(*int32)(unsafe.Pointer(bp + 8))) 59085 59086 return TCL_OK 59087 59088 bad_args: 59089 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39051) 59090 return TCL_ERROR 59091 } 59092 59093 var tvfs_vfs = sqlite3_vfs{ 59094 FiVersion: 3, 59095 FxOpen: 0, 59096 FxDelete: 0, 59097 FxAccess: 0, 59098 FxFullPathname: 0, 59099 FxRandomness: 0, 59100 FxSleep: 0, 59101 FxCurrentTime: 0, 59102 } 59103 59104 func test_vfs_shmlock(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59105 bp := tls.Alloc(88) 59106 defer tls.Free(88) 59107 59108 *(*[3]uintptr)(unsafe.Pointer(bp + 8)) = [3]uintptr{ts + 39155, ts + 13978, uintptr(0)} 59109 *(*[3]uintptr)(unsafe.Pointer(bp + 40)) = [3]uintptr{ts + 39162, ts + 39167, uintptr(0)} 59110 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 59111 var rc int32 = SQLITE_OK 59112 var zDbname uintptr = uintptr(0) 59113 *(*int32)(unsafe.Pointer(bp + 32)) = 0 59114 *(*int32)(unsafe.Pointer(bp + 64)) = 0 59115 *(*int32)(unsafe.Pointer(bp + 68)) = 0 59116 *(*int32)(unsafe.Pointer(bp + 72)) = 0 59117 59118 if objc != 7 { 59119 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 59120 ts+39174) 59121 return TCL_ERROR 59122 } 59123 59124 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59125 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 59126 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+32) != 0 || 59127 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+64) != 0 || 59128 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+68) != 0 || 59129 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp+72) != 0 { 59130 return TCL_ERROR 59131 } 59132 59133 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+80) 59134 if *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 59135 return TCL_ERROR 59136 } 59137 rc = (*struct { 59138 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59139 })(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)), 59140 func() int32 { 59141 if *(*int32)(unsafe.Pointer(bp + 32)) == 0 { 59142 return SQLITE_SHM_SHARED 59143 } 59144 return SQLITE_SHM_EXCLUSIVE 59145 }()| 59146 func() int32 { 59147 if *(*int32)(unsafe.Pointer(bp + 64)) == 0 { 59148 return SQLITE_SHM_LOCK 59149 } 59150 return SQLITE_SHM_UNLOCK 59151 }()) 59152 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59153 return TCL_OK 59154 } 59155 59156 func test_vfs_set_readmark(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59157 bp := tls.Alloc(48) 59158 defer tls.Free(48) 59159 59160 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 59161 var rc int32 = SQLITE_OK 59162 var zDbname uintptr = uintptr(0) 59163 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59164 *(*int32)(unsafe.Pointer(bp + 28)) = -1 59165 59166 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 59167 var aShm uintptr 59168 var iOff int32 59169 59170 if objc != 4 && objc != 5 { 59171 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39230) 59172 return TCL_ERROR 59173 } 59174 59175 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59176 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 || 59177 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 || 59178 objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 59179 return TCL_ERROR 59180 } 59181 59182 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+32) 59183 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 59184 return TCL_ERROR 59185 } 59186 rc = (*struct { 59187 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 59188 })(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) 59189 if rc != SQLITE_OK { 59190 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59191 return TCL_ERROR 59192 } 59193 if *(*uintptr)(unsafe.Pointer(bp + 40)) == uintptr(0) { 59194 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+39253, 0)) 59195 return TCL_ERROR 59196 } 59197 aShm = *(*uintptr)(unsafe.Pointer(bp + 40)) 59198 iOff = 12*2 + 1 + *(*int32)(unsafe.Pointer(bp + 24)) 59199 59200 if objc == 5 { 59201 *(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 28))) 59202 } 59203 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(*(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4))))) 59204 59205 return TCL_OK 59206 } 59207 59208 func Sqlitetestvfs_Init(tls *libc.TLS, interp uintptr) int32 { 59209 tcl.XTcl_CreateObjCommand(tls, interp, ts+39277, *(*uintptr)(unsafe.Pointer(&struct { 59210 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59211 }{testvfs_cmd})), uintptr(0), uintptr(0)) 59212 tcl.XTcl_CreateObjCommand(tls, interp, ts+39285, *(*uintptr)(unsafe.Pointer(&struct { 59213 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59214 }{test_vfs_shmlock})), uintptr(0), uintptr(0)) 59215 tcl.XTcl_CreateObjCommand(tls, interp, ts+39297, *(*uintptr)(unsafe.Pointer(&struct { 59216 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59217 }{test_vfs_set_readmark})), uintptr(0), uintptr(0)) 59218 return TCL_OK 59219 } 59220 59221 type TestWindow1 = struct { 59222 FxStep uintptr 59223 FxFinal uintptr 59224 FxValue uintptr 59225 FxInverse uintptr 59226 Finterp uintptr 59227 } 59228 59229 type TestWindow = TestWindow1 59230 59231 type TestWindowCtx1 = struct{ FpVal uintptr } 59232 59233 type TestWindowCtx = TestWindowCtx1 59234 59235 func doTestWindowStep(tls *libc.TLS, bInverse int32, ctx uintptr, nArg int32, apArg uintptr) { 59236 var i int32 59237 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 59238 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 59239 if bInverse != 0 { 59240 return (*TestWindow)(unsafe.Pointer(p)).FxInverse 59241 } 59242 return (*TestWindow)(unsafe.Pointer(p)).FxStep 59243 }()) 59244 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 59245 59246 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59247 if pCtx != 0 { 59248 var zResult uintptr 59249 var rc int32 59250 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59251 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 59252 } else { 59253 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 59254 } 59255 for i = 0; i < nArg; i++ { 59256 var pArg uintptr 59257 pArg = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8))), -1) 59258 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, pArg) 59259 } 59260 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59261 if rc != TCL_OK { 59262 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 59263 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 59264 } else { 59265 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59266 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59267 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 59268 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59269 tcl.XTclFreeObj(tls, _objPtr) 59270 } 59271 } 59272 } 59273 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp)) 59274 (*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount++ 59275 } 59276 } 59277 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 59278 var _objPtr uintptr = pEval 59279 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59280 tcl.XTclFreeObj(tls, _objPtr) 59281 } 59282 } 59283 } 59284 59285 func doTestWindowFinalize(tls *libc.TLS, bValue int32, ctx uintptr) { 59286 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 59287 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 59288 if bValue != 0 { 59289 return (*TestWindow)(unsafe.Pointer(p)).FxValue 59290 } 59291 return (*TestWindow)(unsafe.Pointer(p)).FxFinal 59292 }()) 59293 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 59294 59295 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59296 if pCtx != 0 { 59297 var zResult uintptr 59298 var rc int32 59299 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59300 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 59301 } else { 59302 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 59303 } 59304 59305 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59306 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 59307 if rc != TCL_OK { 59308 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 59309 } else { 59310 sqlite3.Xsqlite3_result_text(tls, ctx, zResult, -1, libc.UintptrFromInt32(-1)) 59311 } 59312 59313 if bValue == 0 { 59314 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59315 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59316 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 59317 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59318 tcl.XTclFreeObj(tls, _objPtr) 59319 } 59320 } 59321 } 59322 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = uintptr(0) 59323 } 59324 } 59325 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 59326 var _objPtr uintptr = pEval 59327 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59328 tcl.XTclFreeObj(tls, _objPtr) 59329 } 59330 } 59331 } 59332 59333 func testWindowStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59334 doTestWindowStep(tls, 0, ctx, nArg, apArg) 59335 } 59336 59337 func testWindowInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59338 doTestWindowStep(tls, 1, ctx, nArg, apArg) 59339 } 59340 59341 func testWindowFinal(tls *libc.TLS, ctx uintptr) { 59342 doTestWindowFinalize(tls, 0, ctx) 59343 } 59344 59345 func testWindowValue(tls *libc.TLS, ctx uintptr) { 59346 doTestWindowFinalize(tls, 1, ctx) 59347 } 59348 59349 func testWindowDestroy(tls *libc.TLS, pCtx uintptr) { 59350 tcl.XTcl_Free(tls, pCtx) 59351 } 59352 59353 func test_create_window(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59354 bp := tls.Alloc(8) 59355 defer tls.Free(8) 59356 59357 var pNew uintptr 59358 59359 var zName uintptr 59360 var rc int32 59361 59362 if objc != 7 { 59363 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39314) 59364 return TCL_ERROR 59365 } 59366 59367 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 59368 return TCL_ERROR 59369 } 59370 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59371 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestWindow{}))) 59372 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(TestWindow{}))) 59373 (*TestWindow)(unsafe.Pointer(pNew)).FxStep = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 59374 (*TestWindow)(unsafe.Pointer(pNew)).FxFinal = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 59375 (*TestWindow)(unsafe.Pointer(pNew)).FxValue = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 59376 (*TestWindow)(unsafe.Pointer(pNew)).FxInverse = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8))) 59377 (*TestWindow)(unsafe.Pointer(pNew)).Finterp = interp 59378 59379 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxStep)).FrefCount++ 59380 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxFinal)).FrefCount++ 59381 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxValue)).FrefCount++ 59382 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxInverse)).FrefCount++ 59383 59384 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, -1, SQLITE_UTF8, pNew, 59385 *(*uintptr)(unsafe.Pointer(&struct { 59386 f func(*libc.TLS, uintptr, int32, uintptr) 59387 }{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 { 59388 f func(*libc.TLS, uintptr, int32, uintptr) 59389 }{testWindowInverse})), 59390 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowDestroy}))) 59391 if rc != SQLITE_OK { 59392 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59393 return TCL_ERROR 59394 } 59395 59396 return TCL_OK 59397 } 59398 59399 func test_create_window_misuse(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59400 bp := tls.Alloc(8) 59401 defer tls.Free(8) 59402 59403 var rc int32 59404 59405 if !(objc != 2) { 59406 goto __1 59407 } 59408 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 59409 return TCL_ERROR 59410 __1: 59411 ; 59412 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 59413 goto __2 59414 } 59415 return TCL_ERROR 59416 __2: 59417 ; 59418 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59419 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 { 59420 f func(*libc.TLS, uintptr, int32, uintptr) 59421 }{testWindowInverse})), 59422 uintptr(0)) 59423 if !(rc != SQLITE_MISUSE) { 59424 goto __3 59425 } 59426 goto error 59427 __3: 59428 ; 59429 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59430 *(*uintptr)(unsafe.Pointer(&struct { 59431 f func(*libc.TLS, uintptr, int32, uintptr) 59432 }{testWindowStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 59433 f func(*libc.TLS, uintptr, int32, uintptr) 59434 }{testWindowInverse})), 59435 uintptr(0)) 59436 if !(rc != SQLITE_MISUSE) { 59437 goto __4 59438 } 59439 goto error 59440 __4: 59441 ; 59442 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59443 *(*uintptr)(unsafe.Pointer(&struct { 59444 f func(*libc.TLS, uintptr, int32, uintptr) 59445 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 59446 f func(*libc.TLS, uintptr, int32, uintptr) 59447 }{testWindowInverse})), 59448 uintptr(0)) 59449 if !(rc != SQLITE_MISUSE) { 59450 goto __5 59451 } 59452 goto error 59453 __5: 59454 ; 59455 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59456 *(*uintptr)(unsafe.Pointer(&struct { 59457 f func(*libc.TLS, uintptr, int32, uintptr) 59458 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), uintptr(0), 59459 uintptr(0)) 59460 if !(rc != SQLITE_MISUSE) { 59461 goto __6 59462 } 59463 goto error 59464 __6: 59465 ; 59466 return TCL_OK 59467 59468 error: 59469 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, ts+39355, -1)) 59470 return TCL_ERROR 59471 } 59472 59473 func sumintStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59474 var pInt uintptr 59475 59476 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apArg))) != SQLITE_INTEGER { 59477 sqlite3.Xsqlite3_result_error(tls, ctx, ts+39373, -1) 59478 return 59479 } 59480 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 59481 if pInt != 0 { 59482 *(*sqlite3_int64)(unsafe.Pointer(pInt)) += sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 59483 } 59484 } 59485 59486 func sumintInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59487 var pInt uintptr 59488 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 59489 *(*sqlite3_int64)(unsafe.Pointer(pInt)) -= sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 59490 } 59491 59492 func sumintFinal(tls *libc.TLS, ctx uintptr) { 59493 var res sqlite3_int64 = int64(0) 59494 var pInt uintptr 59495 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 59496 if pInt != 0 { 59497 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 59498 } 59499 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 59500 } 59501 59502 func sumintValue(tls *libc.TLS, ctx uintptr) { 59503 var res sqlite3_int64 = int64(0) 59504 var pInt uintptr 59505 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 59506 if pInt != 0 { 59507 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 59508 } 59509 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 59510 } 59511 59512 func test_create_sumint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59513 bp := tls.Alloc(8) 59514 defer tls.Free(8) 59515 59516 var rc int32 59517 59518 if objc != 2 { 59519 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 59520 return TCL_ERROR 59521 } 59522 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 59523 return TCL_ERROR 59524 } 59525 59526 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39390, 1, SQLITE_UTF8, uintptr(0), 59527 *(*uintptr)(unsafe.Pointer(&struct { 59528 f func(*libc.TLS, uintptr, int32, uintptr) 59529 }{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 { 59530 f func(*libc.TLS, uintptr, int32, uintptr) 59531 }{sumintInverse})), 59532 uintptr(0)) 59533 59534 if rc != SQLITE_OK { 59535 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59536 return TCL_ERROR 59537 } 59538 return TCL_OK 59539 } 59540 59541 func test_override_sum(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59542 bp := tls.Alloc(8) 59543 defer tls.Free(8) 59544 59545 var rc int32 59546 59547 if objc != 2 { 59548 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 59549 return TCL_ERROR 59550 } 59551 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 59552 return TCL_ERROR 59553 } 59554 59555 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39397, -1, SQLITE_UTF8, uintptr(0), 59556 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 59557 f func(*libc.TLS, uintptr, int32, uintptr) 59558 }{sumintStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintFinal}))) 59559 59560 if rc != SQLITE_OK { 59561 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59562 return TCL_ERROR 59563 } 59564 return TCL_OK 59565 } 59566 59567 func Sqlitetest_window_Init(tls *libc.TLS, interp uintptr) int32 { 59568 var i int32 59569 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd14))/uint64(unsafe.Sizeof(struct { 59570 FzName uintptr 59571 FxProc uintptr 59572 FclientData int32 59573 F__ccgo_pad1 [4]byte 59574 }{})); i++ { 59575 var c ClientData = uintptr(intptr_t(aObjCmd14[i].FclientData)) 59576 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd14[i].FzName, aObjCmd14[i].FxProc, c, uintptr(0)) 59577 } 59578 return TCL_OK 59579 } 59580 59581 var aObjCmd14 = [4]struct { 59582 FzName uintptr 59583 FxProc uintptr 59584 FclientData int32 59585 F__ccgo_pad1 [4]byte 59586 }{ 59587 {FzName: ts + 39401, FxProc: 0}, 59588 {FzName: ts + 39432, FxProc: 0}, 59589 {FzName: ts + 39467, FxProc: 0}, 59590 {FzName: ts + 39486, FxProc: 0}, 59591 } 59592 59593 func init() { 59594 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 8)) = cfClose 59595 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 16)) = cfRead 59596 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 24)) = cfWrite 59597 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 32)) = cfTruncate 59598 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 40)) = cfSync 59599 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 48)) = cfFileSize 59600 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 56)) = cfLock 59601 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 64)) = cfUnlock 59602 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 72)) = cfCheckReservedLock 59603 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 80)) = cfFileControl 59604 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 88)) = cfSectorSize 59605 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 96)) = cfDeviceCharacteristics 59606 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 104)) = cfShmMap 59607 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 112)) = cfShmLock 59608 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 120)) = cfShmBarrier 59609 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 128)) = cfShmUnmap 59610 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 8)) = csvtabCreate 59611 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 16)) = csvtabConnect 59612 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 24)) = csvtabBestIndex 59613 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 32)) = csvtabDisconnect 59614 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 40)) = csvtabDisconnect 59615 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 48)) = csvtabOpen 59616 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 56)) = csvtabClose 59617 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 64)) = csvtabFilter 59618 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 72)) = csvtabNext 59619 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 80)) = csvtabEof 59620 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 88)) = csvtabColumn 59621 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 96)) = csvtabRowid 59622 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 8)) = csvtabCreate 59623 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 16)) = csvtabConnect 59624 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 24)) = csvtabBestIndex 59625 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 32)) = csvtabDisconnect 59626 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 40)) = csvtabDisconnect 59627 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 48)) = csvtabOpen 59628 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 56)) = csvtabClose 59629 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 64)) = csvtabFilter 59630 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 72)) = csvtabNext 59631 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 80)) = csvtabEof 59632 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 88)) = csvtabColumn 59633 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 96)) = csvtabRowid 59634 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 104)) = csvtabUpdate 59635 *(*func(*libc.TLS, ClientData, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 16)) = incrblobClose 59636 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 24)) = incrblobInput 59637 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 32)) = incrblobOutput 59638 *(*func(*libc.TLS, ClientData, int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 40)) = incrblobSeek 59639 *(*func(*libc.TLS, ClientData, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 64)) = incrblobWatch 59640 *(*func(*libc.TLS, ClientData, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 72)) = incrblobHandle 59641 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 8)) = f5tCreateTokenizer 59642 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 32)) = f5tTokenizerReturn 59643 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 56)) = f5tTokenize 59644 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 80)) = f5tCreateFunction 59645 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 104)) = f5tMayBeCorrupt 59646 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 128)) = f5tTokenHash 59647 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 152)) = f5tRegisterMatchinfo 59648 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 176)) = f5tRegisterTok 59649 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59650 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59651 }{db_enter})) 59652 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59653 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59654 }{db_leave})) 59655 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59656 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59657 }{sqlite3_mprintf_int})) 59658 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59659 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59660 }{sqlite3_mprintf_int64})) 59661 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59662 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59663 }{sqlite3_mprintf_long})) 59664 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59665 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59666 }{sqlite3_mprintf_str})) 59667 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59668 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59669 }{sqlite3_snprintf_str})) 59670 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59671 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59672 }{sqlite3_mprintf_stronly})) 59673 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59674 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59675 }{sqlite3_mprintf_double})) 59676 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59677 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59678 }{sqlite3_mprintf_scaled})) 59679 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59680 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59681 }{sqlite3_mprintf_hexdouble})) 59682 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59683 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59684 }{test_mprintf_z})) 59685 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59686 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59687 }{test_mprintf_n})) 59688 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 59689 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59690 }{test_snprintf_int})) 59691 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 59692 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59693 }{test_last_rowid})) 59694 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 59695 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59696 }{test_exec_printf})) 59697 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 59698 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59699 }{test_exec_hex})) 59700 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 59701 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59702 }{test_exec})) 59703 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 59704 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59705 }{test_exec_nr})) 59706 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 59707 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59708 }{test_get_table_printf})) 59709 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 59710 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59711 }{sqlite_test_close})) 59712 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 344)) = *(*uintptr)(unsafe.Pointer(&struct { 59713 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59714 }{sqlite_test_close_v2})) 59715 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 59716 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59717 }{test_create_function})) 59718 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 376)) = *(*uintptr)(unsafe.Pointer(&struct { 59719 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59720 }{test_create_aggregate})) 59721 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 59722 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59723 }{test_drop_modules})) 59724 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 408)) = *(*uintptr)(unsafe.Pointer(&struct { 59725 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59726 }{test_register_func})) 59727 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 59728 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59729 }{sqlite_abort})) 59730 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 440)) = *(*uintptr)(unsafe.Pointer(&struct { 59731 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59732 }{test_bind})) 59733 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 59734 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59735 }{test_breakpoint})) 59736 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 472)) = *(*uintptr)(unsafe.Pointer(&struct { 59737 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59738 }{test_key})) 59739 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 59740 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59741 }{test_rekey})) 59742 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 504)) = *(*uintptr)(unsafe.Pointer(&struct { 59743 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59744 }{test_interrupt})) 59745 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 59746 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59747 }{delete_function})) 59748 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 536)) = *(*uintptr)(unsafe.Pointer(&struct { 59749 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59750 }{delete_collation})) 59751 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 59752 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59753 }{get_autocommit})) 59754 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 568)) = *(*uintptr)(unsafe.Pointer(&struct { 59755 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59756 }{test_busy_timeout})) 59757 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 584)) = *(*uintptr)(unsafe.Pointer(&struct { 59758 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59759 }{test_printf})) 59760 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 600)) = *(*uintptr)(unsafe.Pointer(&struct { 59761 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59762 }{test_io_trace})) 59763 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 616)) = *(*uintptr)(unsafe.Pointer(&struct { 59764 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59765 }{clang_sanitize_address})) 59766 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59767 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59768 }{pager_open})) 59769 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59770 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59771 }{pager_close})) 59772 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59773 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59774 }{pager_commit})) 59775 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59776 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59777 }{pager_rollback})) 59778 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59779 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59780 }{pager_stmt_begin})) 59781 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59782 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59783 }{pager_stmt_commit})) 59784 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59785 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59786 }{pager_stmt_rollback})) 59787 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59788 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59789 }{pager_stats})) 59790 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59791 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59792 }{pager_pagecount})) 59793 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59794 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59795 }{page_get})) 59796 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59797 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59798 }{page_lookup})) 59799 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59800 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59801 }{page_unref})) 59802 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59803 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59804 }{page_read})) 59805 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 59806 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59807 }{page_write})) 59808 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 59809 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59810 }{page_number})) 59811 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 59812 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59813 }{pager_truncate})) 59814 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 59815 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59816 }{fake_big_file})) 59817 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 59818 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59819 }{testBitvecBuiltinTest})) 59820 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 59821 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59822 }{testPendingByte})) 59823 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 59824 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59825 }{faultInstallCmd})) 59826 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59827 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59828 }{btree_open})) 59829 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59830 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59831 }{btree_close})) 59832 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59833 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59834 }{btree_begin_transaction})) 59835 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59836 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59837 }{btree_pager_stats})) 59838 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59839 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59840 }{btree_cursor})) 59841 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59842 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59843 }{btree_close_cursor})) 59844 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59845 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59846 }{btree_next})) 59847 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59848 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59849 }{btree_eof})) 59850 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59851 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59852 }{btree_payload_size})) 59853 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59854 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59855 }{btree_first})) 59856 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59857 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59858 }{btree_varint_test})) 59859 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59860 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59861 }{btree_from_db})) 59862 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59863 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59864 }{btree_ismemdb})) 59865 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 59866 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59867 }{btree_set_cache_size})) 59868 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59869 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59870 }{tcl_thread_create})) 59871 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59872 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59873 }{tcl_thread_wait})) 59874 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59875 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59876 }{tcl_thread_halt})) 59877 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59878 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59879 }{tcl_thread_argc})) 59880 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59881 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59882 }{tcl_thread_argv})) 59883 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59884 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59885 }{tcl_thread_colname})) 59886 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59887 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59888 }{tcl_thread_result})) 59889 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59890 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59891 }{tcl_thread_error})) 59892 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59893 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59894 }{tcl_thread_compile})) 59895 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59896 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59897 }{tcl_thread_step})) 59898 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59899 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59900 }{tcl_thread_finalize})) 59901 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59902 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59903 }{tcl_thread_swap})) 59904 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59905 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59906 }{tcl_thread_db_get})) 59907 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 59908 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59909 }{tcl_thread_db_put})) 59910 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 59911 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59912 }{tcl_thread_stmt_get})) 59913 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59914 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59915 }{binarize})) 59916 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59917 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59918 }{test_value_overhead})) 59919 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59920 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59921 }{test_translate})) 59922 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59923 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59924 }{test_translate_selftest})) 59925 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59926 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59927 }{tcl_client_create})) 59928 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59929 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59930 }{tcl_client_wait})) 59931 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59932 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59933 }{tcl_client_halt})) 59934 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59935 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59936 }{tcl_client_argc})) 59937 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59938 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59939 }{tcl_client_argv})) 59940 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59941 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59942 }{tcl_client_colname})) 59943 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59944 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59945 }{tcl_client_result})) 59946 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59947 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59948 }{tcl_client_error})) 59949 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59950 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59951 }{tcl_client_compile})) 59952 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59953 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59954 }{tcl_client_step})) 59955 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59956 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59957 }{tcl_client_reset})) 59958 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59959 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59960 }{tcl_client_finalize})) 59961 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59962 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59963 }{tcl_client_swap})) 59964 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 8)) = test_multiplex_initialize 59965 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 24)) = test_multiplex_shutdown 59966 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 40)) = test_multiplex_control 59967 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59968 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59969 }{test_shutdown})) 59970 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59971 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59972 }{test_initialize})) 59973 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59974 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59975 }{test_config})) 59976 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59977 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59978 }{test_enter_static_mutex})) 59979 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59980 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59981 }{test_leave_static_mutex})) 59982 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59983 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59984 }{test_enter_db_mutex})) 59985 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59986 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59987 }{test_leave_db_mutex})) 59988 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59989 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59990 }{test_alloc_mutex})) 59991 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59992 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59993 }{test_install_mutex_counters})) 59994 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59995 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59996 }{test_read_mutex_counters})) 59997 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59998 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59999 }{test_clear_mutex_counters})) 60000 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 8)) = test_quota_initialize 60001 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 24)) = test_quota_shutdown 60002 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 40)) = test_quota_set 60003 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 56)) = test_quota_file 60004 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 72)) = test_quota_dump 60005 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 88)) = test_quota_fopen 60006 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 104)) = test_quota_fread 60007 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 120)) = test_quota_fwrite 60008 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 136)) = test_quota_fclose 60009 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 152)) = test_quota_fflush 60010 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 168)) = test_quota_fseek 60011 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 184)) = test_quota_rewind 60012 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 200)) = test_quota_ftell 60013 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 216)) = test_quota_ftruncate 60014 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 232)) = test_quota_file_size 60015 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 248)) = test_quota_file_truesize 60016 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 264)) = test_quota_file_mtime 60017 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 280)) = test_quota_remove 60018 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 296)) = test_quota_glob 60019 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 312)) = test_quota_file_available 60020 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 328)) = test_quota_ferror 60021 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 8)) = sqlite3_amatch_init 60022 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 24)) = sqlite3_appendvfs_init 60023 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 40)) = sqlite3_carray_init 60024 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 56)) = sqlite3_closure_init 60025 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 72)) = sqlite3_csv_init 60026 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 88)) = sqlite3_decimal_init 60027 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 104)) = sqlite3_eval_init 60028 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 120)) = sqlite3_explain_init 60029 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 136)) = sqlite3_fileio_init 60030 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 152)) = sqlite3_fuzzer_init 60031 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 168)) = sqlite3_ieee_init 60032 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 184)) = sqlite3_nextchar_init 60033 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 200)) = sqlite3_percentile_init 60034 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 216)) = sqlite3_prefixes_init 60035 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 232)) = sqlite3_qpvtab_init 60036 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 248)) = sqlite3_regexp_init 60037 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 264)) = sqlite3_remember_init 60038 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 280)) = sqlite3_series_init 60039 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 296)) = sqlite3_spellfix_init 60040 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 312)) = sqlite3_totype_init 60041 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 328)) = sqlite3_unionvtab_init 60042 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 344)) = sqlite3_wholenumber_init 60043 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 16)) = decimalFunc 60044 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 40)) = decimalCmpFunc 60045 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 64)) = decimalAddFunc 60046 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 88)) = decimalSubFunc 60047 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 112)) = decimalMulFunc 60048 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 16)) = ieee754func 60049 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 40)) = ieee754func 60050 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 64)) = ieee754func 60051 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 88)) = ieee754func 60052 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 112)) = ieee754func_to_blob 60053 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 136)) = ieee754func_from_blob 60054 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 16)) = randStr 60055 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 40)) = test_destructor 60056 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 64)) = test_destructor16 60057 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 88)) = testHexToUtf16be 60058 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 112)) = testHexToUtf16le 60059 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 136)) = testHexToUtf8 60060 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 160)) = test_destructor_count 60061 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 184)) = test_auxdata 60062 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 208)) = test_error 60063 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 232)) = test_error 60064 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 256)) = test_eval 60065 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 280)) = test_isolation 60066 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 304)) = counterFunc 60067 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 328)) = real2hex 60068 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 352)) = test_decode 60069 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 376)) = test_extract 60070 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 400)) = test_zeroblob 60071 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 424)) = test_getsubtype 60072 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 448)) = test_setsubtype 60073 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 472)) = test_frombind 60074 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 8)) = test_sqlite3rbu 60075 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 24)) = test_sqlite3rbu_vacuum 60076 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 40)) = test_sqlite3rbu_create_vfs 60077 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 56)) = test_sqlite3rbu_destroy_vfs 60078 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 72)) = test_sqlite3rbu_internal_test 60079 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 8)) = test_sqlite3_db_config 60080 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 32)) = test_sqlite3_txn_state 60081 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 56)) = test_bad_behavior 60082 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 64)) = uintptr(unsafe.Pointer(&iZero)) 60083 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 80)) = test_register_dbstat_vtab 60084 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 104)) = get_sqlite_pointer 60085 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 128)) = test_intarray_addr 60086 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 152)) = test_int64array_addr 60087 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 176)) = test_doublearray_addr 60088 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 200)) = test_textarray_addr 60089 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 224)) = test_bind_int 60090 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 248)) = test_bind_zeroblob 60091 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 272)) = test_bind_zeroblob64 60092 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 296)) = test_bind_int64 60093 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 320)) = test_bind_double 60094 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 344)) = test_bind_null 60095 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 368)) = test_bind_text 60096 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 392)) = test_bind_text16 60097 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 416)) = test_bind_blob 60098 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 440)) = test_bind_value_from_select 60099 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 464)) = test_bind_value_from_preupdate 60100 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 488)) = test_carray_bind 60101 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 512)) = test_bind_parameter_count 60102 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 536)) = test_bind_parameter_name 60103 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 560)) = test_bind_parameter_index 60104 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 584)) = test_clear_bindings 60105 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 608)) = test_sleep 60106 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 632)) = test_errcode 60107 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 656)) = test_ex_errcode 60108 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 680)) = test_errmsg 60109 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 704)) = test_error_offset 60110 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 728)) = test_errmsg16 60111 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 752)) = test_open 60112 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 776)) = test_open16 60113 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 800)) = test_open_v2 60114 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 824)) = test_complete16 60115 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 848)) = test_normalize 60116 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 872)) = test_prepare 60117 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 896)) = test_prepare16 60118 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 920)) = test_prepare_v2 60119 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 944)) = test_prepare_v3 60120 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 968)) = test_prepare_tkt3134 60121 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 992)) = test_prepare16_v2 60122 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1016)) = test_finalize 60123 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1040)) = test_stmt_status 60124 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1064)) = test_reset 60125 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1088)) = test_expired 60126 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1112)) = test_transfer_bind 60127 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1136)) = test_changes 60128 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1160)) = test_step 60129 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1184)) = test_sql 60130 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1208)) = test_ex_sql 60131 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1232)) = test_next_stmt 60132 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1256)) = test_stmt_readonly 60133 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1280)) = test_stmt_isexplain 60134 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1304)) = test_stmt_busy 60135 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1328)) = uses_stmt_journal 60136 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1352)) = test_release_memory 60137 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1376)) = test_db_release_memory 60138 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1400)) = test_db_cacheflush 60139 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1424)) = test_system_errno 60140 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1448)) = test_db_filename 60141 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1472)) = test_db_readonly 60142 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1496)) = test_soft_heap_limit 60143 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1520)) = test_soft_heap_limit 60144 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1544)) = test_hard_heap_limit 60145 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1568)) = test_thread_cleanup 60146 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1592)) = test_pager_refcounts 60147 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1616)) = test_load_extension 60148 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1640)) = test_enable_load 60149 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1664)) = test_extended_result_codes 60150 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1688)) = test_limit 60151 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1712)) = test_dbconfig_maindbname_icecube 60152 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1736)) = save_prng_state 60153 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1760)) = restore_prng_state 60154 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1784)) = reset_prng_state 60155 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1808)) = prng_seed 60156 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1832)) = extra_schema_checks 60157 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1856)) = database_never_corrupt 60158 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1880)) = database_may_be_corrupt 60159 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1904)) = optimization_control 60160 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1928)) = runAsObjProc 60161 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1952)) = test_column_count 60162 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1976)) = test_data_count 60163 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2000)) = test_column_type 60164 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2024)) = test_column_blob 60165 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2048)) = test_column_double 60166 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2072)) = test_column_int64 60167 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2096)) = test_stmt_utf8 60168 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2104)) = *(*uintptr)(unsafe.Pointer(&struct { 60169 f func(*libc.TLS, uintptr, int32) uintptr 60170 }{sqlite3.Xsqlite3_column_text})) 60171 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2120)) = test_stmt_utf8 60172 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2128)) = *(*uintptr)(unsafe.Pointer(&struct { 60173 f func(*libc.TLS, uintptr, int32) uintptr 60174 }{sqlite3.Xsqlite3_column_name})) 60175 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2144)) = test_stmt_int 60176 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2152)) = *(*uintptr)(unsafe.Pointer(&struct { 60177 f func(*libc.TLS, uintptr, int32) int32 60178 }{sqlite3.Xsqlite3_column_int})) 60179 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2168)) = test_stmt_int 60180 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2176)) = *(*uintptr)(unsafe.Pointer(&struct { 60181 f func(*libc.TLS, uintptr, int32) int32 60182 }{sqlite3.Xsqlite3_column_bytes})) 60183 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2192)) = test_stmt_utf8 60184 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2200)) = *(*uintptr)(unsafe.Pointer(&struct { 60185 f func(*libc.TLS, uintptr, int32) uintptr 60186 }{sqlite3.Xsqlite3_column_decltype})) 60187 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2216)) = test_stmt_utf8 60188 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2224)) = *(*uintptr)(unsafe.Pointer(&struct { 60189 f func(*libc.TLS, uintptr, int32) uintptr 60190 }{sqlite3.Xsqlite3_column_database_name})) 60191 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2240)) = test_stmt_utf8 60192 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2248)) = *(*uintptr)(unsafe.Pointer(&struct { 60193 f func(*libc.TLS, uintptr, int32) uintptr 60194 }{sqlite3.Xsqlite3_column_table_name})) 60195 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2264)) = test_stmt_utf8 60196 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2272)) = *(*uintptr)(unsafe.Pointer(&struct { 60197 f func(*libc.TLS, uintptr, int32) uintptr 60198 }{sqlite3.Xsqlite3_column_origin_name})) 60199 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2288)) = test_stmt_int 60200 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2296)) = *(*uintptr)(unsafe.Pointer(&struct { 60201 f func(*libc.TLS, uintptr, int32) int32 60202 }{sqlite3.Xsqlite3_column_bytes16})) 60203 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2312)) = test_stmt_utf16 60204 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2320)) = *(*uintptr)(unsafe.Pointer(&struct { 60205 f func(*libc.TLS, uintptr, int32) uintptr 60206 }{sqlite3.Xsqlite3_column_text16})) 60207 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2336)) = test_stmt_utf16 60208 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2344)) = *(*uintptr)(unsafe.Pointer(&struct { 60209 f func(*libc.TLS, uintptr, int32) uintptr 60210 }{sqlite3.Xsqlite3_column_name16})) 60211 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2360)) = add_alignment_test_collations 60212 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2384)) = test_stmt_utf16 60213 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2392)) = *(*uintptr)(unsafe.Pointer(&struct { 60214 f func(*libc.TLS, uintptr, int32) uintptr 60215 }{sqlite3.Xsqlite3_column_decltype16})) 60216 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2408)) = test_stmt_utf16 60217 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2416)) = *(*uintptr)(unsafe.Pointer(&struct { 60218 f func(*libc.TLS, uintptr, int32) uintptr 60219 }{sqlite3.Xsqlite3_column_database_name16})) 60220 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2432)) = test_stmt_utf16 60221 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2440)) = *(*uintptr)(unsafe.Pointer(&struct { 60222 f func(*libc.TLS, uintptr, int32) uintptr 60223 }{sqlite3.Xsqlite3_column_table_name16})) 60224 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2456)) = test_stmt_utf16 60225 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2464)) = *(*uintptr)(unsafe.Pointer(&struct { 60226 f func(*libc.TLS, uintptr, int32) uintptr 60227 }{sqlite3.Xsqlite3_column_origin_name16})) 60228 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2480)) = test_create_collation_v2 60229 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2504)) = test_global_recover 60230 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2528)) = working_64bit_int 60231 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2552)) = vfs_unlink_test 60232 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2576)) = vfs_initfail_test 60233 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2600)) = vfs_unregister_all 60234 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2624)) = vfs_reregister_all 60235 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2648)) = file_control_test 60236 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2672)) = file_control_lasterrno_test 60237 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2696)) = file_control_lockproxy_test 60238 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2720)) = file_control_chunksize_test 60239 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2744)) = file_control_sizehint_test 60240 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2768)) = file_control_data_version 60241 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2792)) = file_control_persist_wal 60242 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2816)) = file_control_powersafe_overwrite 60243 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2840)) = file_control_vfsname 60244 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2864)) = file_control_reservebytes 60245 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2888)) = file_control_tempfilename 60246 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2912)) = file_control_external_reader 60247 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2936)) = vfs_list 60248 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2960)) = test_create_function_v2 60249 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2984)) = test_collate 60250 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3008)) = test_collate_needed 60251 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3032)) = test_function 60252 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3056)) = test_utf16bin_collate 60253 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3080)) = test_errstr 60254 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3104)) = tcl_variable_type 60255 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3128)) = test_enable_shared 60256 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3152)) = sqlite3BtreeSharedCacheReport 60257 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3176)) = test_libversion_number 60258 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3200)) = test_table_column_metadata 60259 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3224)) = test_blob_reopen 60260 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3248)) = test_pcache_stats 60261 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3272)) = test_unlock_notify 60262 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3296)) = test_wal_checkpoint 60263 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3320)) = test_wal_checkpoint_v2 60264 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3344)) = test_wal_autocheckpoint 60265 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3368)) = test_sqlite3_log 60266 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3392)) = test_print_eqp 60267 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3416)) = test_test_control 60268 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3440)) = test_getrusage 60269 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3464)) = tclLoadStaticExtensionCmd 60270 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3488)) = sorter_test_fakeheap 60271 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3512)) = sorter_test_sort4_helper 60272 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3536)) = vfsCurrentTimeInt64 60273 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3560)) = test_snapshot_get 60274 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3584)) = test_snapshot_open 60275 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3608)) = test_snapshot_free 60276 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3632)) = test_snapshot_cmp 60277 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3656)) = test_snapshot_recover 60278 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3680)) = test_snapshot_get_blob 60279 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3704)) = test_snapshot_open_blob 60280 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3728)) = test_snapshot_cmp_blob 60281 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3752)) = test_delete_database 60282 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3776)) = test_atomic_batch_write 60283 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3800)) = test_mmap_warm 60284 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3824)) = test_config_sorterref 60285 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3848)) = test_autovacuum_pages 60286 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3872)) = test_decode_hexdb 60287 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3896)) = test_write_db 60288 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3920)) = test_register_cksumvfs 60289 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3944)) = test_unregister_cksumvfs 60290 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 8)) = test_intarray_create 60291 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 32)) = test_intarray_bind 60292 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 8)) = test_malloc 60293 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 32)) = test_realloc 60294 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 56)) = test_free 60295 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 80)) = test_memset 60296 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 104)) = test_memget 60297 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 128)) = test_memory_used 60298 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 152)) = test_memory_highwater 60299 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 176)) = test_memdebug_backtrace 60300 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 200)) = test_memdebug_dump 60301 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 224)) = test_memdebug_fail 60302 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 248)) = test_memdebug_pending 60303 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 272)) = test_memdebug_settitle 60304 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 296)) = test_memdebug_malloc_count 60305 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 320)) = test_memdebug_log 60306 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 344)) = test_config_pagecache 60307 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 368)) = test_alt_pcache 60308 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 392)) = test_status 60309 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 416)) = test_db_status 60310 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 440)) = test_install_malloc_faultsim 60311 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 464)) = test_config_heap 60312 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 488)) = test_config_heap_size 60313 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 512)) = test_config_memstatus 60314 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 536)) = test_config_lookaside 60315 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 560)) = test_config_error 60316 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 584)) = test_config_uri 60317 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 608)) = test_config_cis 60318 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 632)) = test_config_pmasz 60319 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 656)) = test_db_config_lookaside 60320 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 680)) = test_dump_memsys3 60321 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 704)) = test_dump_memsys3 60322 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 728)) = test_install_memsys3 60323 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 752)) = test_vfs_oom_test 60324 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd12)) + 8)) = register_schema_module 60325 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd13)) + 8)) = register_tclvar_module 60326 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 8)) = test_create_window 60327 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 32)) = test_create_window_misuse 60328 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 56)) = test_create_sumint 60329 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 80)) = test_override_sum 60330 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 8)) = register_echo_module 60331 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 32)) = declare_vtab 60332 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 8)) = c_misuse_test 60333 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 32)) = c_realloc_test 60334 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 56)) = c_collation_test 60335 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd4)) + 8)) = register_tcl_module 60336 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 8)) = test_blob_open 60337 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 24)) = test_blob_close 60338 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 40)) = test_blob_bytes 60339 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 56)) = test_blob_read 60340 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 72)) = test_blob_write 60341 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd6)) + 8)) = register_fs_module 60342 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 8)) = autoinstall_test_funcs 60343 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 24)) = abuse_create_function 60344 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 40)) = install_fts3_rank_function 60345 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 8)) = hexio_read 60346 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 24)) = hexio_write 60347 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 40)) = hexio_get_int 60348 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 56)) = hexio_render_int16 60349 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 72)) = hexio_render_int32 60350 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 88)) = utf8_to_utf8 60351 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 104)) = read_fts3varint 60352 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 120)) = make_fts3record 60353 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 8)) = init_wrapper_install 60354 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 24)) = init_wrapper_query 60355 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 40)) = init_wrapper_uninstall 60356 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 56)) = init_wrapper_clear 60357 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60358 f func(*libc.TLS, uintptr, int32, int32) int32 60359 }{ts_open})) 60360 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{ts_close})) 60361 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60362 f func(*libc.TLS, uintptr, int32) int32 60363 }{ts_access})) 60364 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60365 f func(*libc.TLS, uintptr, size_t) uintptr 60366 }{ts_getcwd})) 60367 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60368 f func(*libc.TLS, uintptr, uintptr) int32 60369 }{ts_stat})) 60370 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60371 f func(*libc.TLS, int32, uintptr) int32 60372 }{ts_fstat})) 60373 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60374 f func(*libc.TLS, int32, off_t) int32 60375 }{ts_ftruncate})) 60376 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60377 f func(*libc.TLS, int32, int32, uintptr) int32 60378 }{ts_fcntl})) 60379 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 60380 f func(*libc.TLS, int32, uintptr, size_t) int32 60381 }{ts_read})) 60382 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 60383 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 60384 }{ts_pread})) 60385 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 60386 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 60387 }{ts_pread64})) 60388 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 60389 f func(*libc.TLS, int32, uintptr, size_t) int32 60390 }{ts_write})) 60391 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 60392 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 60393 }{ts_pwrite})) 60394 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 60395 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 60396 }{ts_pwrite64})) 60397 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 60398 f func(*libc.TLS, int32, mode_t) int32 60399 }{ts_fchmod})) 60400 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 60401 f func(*libc.TLS, int32, off_t, off_t) int32 60402 }{ts_fallocate})) 60403 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 60404 f func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr 60405 }{ts_mmap})) 60406 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 60407 f func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr 60408 }{ts_mremap})) 60409 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 8)) = amatchConnect 60410 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 16)) = amatchConnect 60411 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 24)) = amatchBestIndex 60412 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 32)) = amatchDisconnect 60413 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 40)) = amatchDisconnect 60414 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 48)) = amatchOpen 60415 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 56)) = amatchClose 60416 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 64)) = amatchFilter 60417 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 72)) = amatchNext 60418 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 80)) = amatchEof 60419 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 88)) = amatchColumn 60420 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 96)) = amatchRowid 60421 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 104)) = amatchUpdate 60422 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 8)) = apndClose 60423 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 16)) = apndRead 60424 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 24)) = apndWrite 60425 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 32)) = apndTruncate 60426 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 40)) = apndSync 60427 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 48)) = apndFileSize 60428 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 56)) = apndLock 60429 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 64)) = apndUnlock 60430 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 72)) = apndCheckReservedLock 60431 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 80)) = apndFileControl 60432 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 88)) = apndSectorSize 60433 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 96)) = apndDeviceCharacteristics 60434 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 104)) = apndShmMap 60435 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 112)) = apndShmLock 60436 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 120)) = apndShmBarrier 60437 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 128)) = apndShmUnmap 60438 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 136)) = apndFetch 60439 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 144)) = apndUnfetch 60440 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 40)) = apndOpen 60441 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 48)) = apndDelete 60442 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 56)) = apndAccess 60443 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 64)) = apndFullPathname 60444 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 72)) = apndDlOpen 60445 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 80)) = apndDlError 60446 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 88)) = apndDlSym 60447 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 96)) = apndDlClose 60448 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 104)) = apndRandomness 60449 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 112)) = apndSleep 60450 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 120)) = apndCurrentTime 60451 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 128)) = apndGetLastError 60452 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 136)) = apndCurrentTimeInt64 60453 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 144)) = apndSetSystemCall 60454 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 152)) = apndGetSystemCall 60455 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 160)) = apndNextSystemCall 60456 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 16)) = carrayConnect 60457 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 24)) = carrayBestIndex 60458 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 32)) = carrayDisconnect 60459 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 48)) = carrayOpen 60460 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 56)) = carrayClose 60461 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 64)) = carrayFilter 60462 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 72)) = carrayNext 60463 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 80)) = carrayEof 60464 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 88)) = carrayColumn 60465 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 96)) = carrayRowid 60466 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 8)) = cksmClose 60467 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 16)) = cksmRead 60468 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 24)) = cksmWrite 60469 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 32)) = cksmTruncate 60470 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 40)) = cksmSync 60471 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 48)) = cksmFileSize 60472 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 56)) = cksmLock 60473 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 64)) = cksmUnlock 60474 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 72)) = cksmCheckReservedLock 60475 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 80)) = cksmFileControl 60476 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 88)) = cksmSectorSize 60477 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 96)) = cksmDeviceCharacteristics 60478 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 104)) = cksmShmMap 60479 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 112)) = cksmShmLock 60480 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 120)) = cksmShmBarrier 60481 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 128)) = cksmShmUnmap 60482 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 136)) = cksmFetch 60483 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 144)) = cksmUnfetch 60484 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 40)) = cksmOpen 60485 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 48)) = cksmDelete 60486 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 56)) = cksmAccess 60487 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 64)) = cksmFullPathname 60488 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 72)) = cksmDlOpen 60489 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 80)) = cksmDlError 60490 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 88)) = cksmDlSym 60491 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 96)) = cksmDlClose 60492 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 104)) = cksmRandomness 60493 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 112)) = cksmSleep 60494 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 120)) = cksmCurrentTime 60495 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 128)) = cksmGetLastError 60496 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 136)) = cksmCurrentTimeInt64 60497 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 144)) = cksmSetSystemCall 60498 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 152)) = cksmGetSystemCall 60499 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 160)) = cksmNextSystemCall 60500 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 8)) = closureConnect 60501 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 16)) = closureConnect 60502 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 24)) = closureBestIndex 60503 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 32)) = closureDisconnect 60504 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 40)) = closureDisconnect 60505 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 48)) = closureOpen 60506 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 56)) = closureClose 60507 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 64)) = closureFilter 60508 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 72)) = closureNext 60509 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 80)) = closureEof 60510 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 88)) = closureColumn 60511 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 96)) = closureRowid 60512 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 40)) = cfOpen 60513 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 48)) = cfDelete 60514 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 56)) = cfAccess 60515 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 64)) = cfFullPathname 60516 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 72)) = cfDlOpen 60517 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 80)) = cfDlError 60518 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 88)) = cfDlSym 60519 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 96)) = cfDlClose 60520 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 104)) = cfRandomness 60521 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 112)) = cfSleep 60522 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 120)) = cfCurrentTime 60523 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 128)) = cfGetLastError 60524 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 8)) = devsymClose 60525 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 16)) = devsymRead 60526 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 24)) = devsymWrite 60527 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 32)) = devsymTruncate 60528 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 40)) = devsymSync 60529 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 48)) = devsymFileSize 60530 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 56)) = devsymLock 60531 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 64)) = devsymUnlock 60532 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 72)) = devsymCheckReservedLock 60533 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 80)) = devsymFileControl 60534 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 88)) = devsymSectorSize 60535 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 96)) = devsymDeviceCharacteristics 60536 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 104)) = devsymShmMap 60537 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 112)) = devsymShmLock 60538 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 120)) = devsymShmBarrier 60539 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 128)) = devsymShmUnmap 60540 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 40)) = devsymOpen 60541 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 48)) = devsymDelete 60542 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 56)) = devsymAccess 60543 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 64)) = devsymFullPathname 60544 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 104)) = devsymRandomness 60545 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 112)) = devsymSleep 60546 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 120)) = devsymCurrentTime 60547 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 8)) = echoCreate 60548 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 16)) = echoConnect 60549 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 24)) = echoBestIndex 60550 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 32)) = echoDisconnect 60551 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 40)) = echoDestroy 60552 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 48)) = echoOpen 60553 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 56)) = echoClose 60554 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 64)) = echoFilter 60555 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 72)) = echoNext 60556 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 80)) = echoEof 60557 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 88)) = echoColumn 60558 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 96)) = echoRowid 60559 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 104)) = echoUpdate 60560 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 112)) = echoBegin 60561 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 120)) = echoSync 60562 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 128)) = echoCommit 60563 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 136)) = echoRollback 60564 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 144)) = echoFindFunction 60565 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 152)) = echoRename 60566 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 8)) = echoCreate 60567 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 16)) = echoConnect 60568 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 24)) = echoBestIndex 60569 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 32)) = echoDisconnect 60570 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 40)) = echoDestroy 60571 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 48)) = echoOpen 60572 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 56)) = echoClose 60573 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 64)) = echoFilter 60574 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 72)) = echoNext 60575 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 80)) = echoEof 60576 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 88)) = echoColumn 60577 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 96)) = echoRowid 60578 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 104)) = echoUpdate 60579 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 112)) = echoBegin 60580 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 120)) = echoSync 60581 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 128)) = echoCommit 60582 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 136)) = echoRollback 60583 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 144)) = echoFindFunction 60584 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 152)) = echoRename 60585 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 160)) = echoSavepoint 60586 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 168)) = echoRelease 60587 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 176)) = echoRollbackTo 60588 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 8)) = expertConnect 60589 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 16)) = expertConnect 60590 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 24)) = expertBestIndex 60591 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 32)) = expertDisconnect 60592 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 40)) = expertDisconnect 60593 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 48)) = expertOpen 60594 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 56)) = expertClose 60595 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 64)) = expertFilter 60596 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 72)) = expertNext 60597 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 80)) = expertEof 60598 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 88)) = expertColumn 60599 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 96)) = expertRowid 60600 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 104)) = expertUpdate 60601 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 16)) = explainConnect 60602 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 24)) = explainBestIndex 60603 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 32)) = explainDisconnect 60604 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 48)) = explainOpen 60605 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 56)) = explainClose 60606 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 64)) = explainFilter 60607 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 72)) = explainNext 60608 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 80)) = explainEof 60609 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 88)) = explainColumn 60610 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 96)) = explainRowid 60611 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 8)) = fsConnect 60612 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 16)) = fsConnect 60613 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 24)) = fsBestIndex 60614 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 32)) = fsDisconnect 60615 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 40)) = fsDisconnect 60616 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 48)) = fsOpen 60617 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 56)) = fsClose 60618 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 64)) = fsFilter 60619 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 72)) = fsNext 60620 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 80)) = fsEof 60621 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 88)) = fsColumn 60622 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 96)) = fsRowid 60623 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 8)) = fsClose1 60624 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 16)) = fsRead 60625 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 24)) = fsWrite 60626 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 32)) = fsTruncate 60627 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 40)) = fsSync 60628 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 48)) = fsFileSize 60629 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 56)) = fsLock 60630 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 64)) = fsUnlock 60631 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 72)) = fsCheckReservedLock 60632 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 80)) = fsFileControl 60633 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 88)) = fsSectorSize 60634 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 96)) = fsDeviceCharacteristics 60635 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 40)) = fsOpen1 60636 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 48)) = fsDelete 60637 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 56)) = fsAccess 60638 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 64)) = fsFullPathname 60639 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 72)) = fsDlOpen 60640 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 80)) = fsDlError 60641 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 88)) = fsDlSym 60642 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 96)) = fsDlClose 60643 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 104)) = fsRandomness 60644 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 112)) = fsSleep 60645 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 120)) = fsCurrentTime 60646 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 8)) = fsdirConnect1 60647 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 16)) = fsdirConnect1 60648 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 24)) = fsdirBestIndex1 60649 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 32)) = fsdirDisconnect1 60650 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 40)) = fsdirDisconnect1 60651 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 48)) = fsdirOpen1 60652 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 56)) = fsdirClose1 60653 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 64)) = fsdirFilter1 60654 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 72)) = fsdirNext1 60655 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 80)) = fsdirEof1 60656 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 88)) = fsdirColumn1 60657 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 96)) = fsdirRowid1 60658 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 16)) = fsdirConnect 60659 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 24)) = fsdirBestIndex 60660 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 32)) = fsdirDisconnect 60661 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 48)) = fsdirOpen 60662 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 56)) = fsdirClose 60663 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 64)) = fsdirFilter 60664 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 72)) = fsdirNext 60665 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 80)) = fsdirEof 60666 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 88)) = fsdirColumn 60667 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 96)) = fsdirRowid 60668 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 8)) = fstreeConnect 60669 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 16)) = fstreeConnect 60670 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 24)) = fstreeBestIndex 60671 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 32)) = fstreeDisconnect 60672 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 40)) = fstreeDisconnect 60673 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 48)) = fstreeOpen 60674 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 56)) = fstreeClose 60675 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 64)) = fstreeFilter 60676 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 72)) = fstreeNext 60677 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 80)) = fstreeEof 60678 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 88)) = fstreeColumn 60679 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 96)) = fstreeRowid 60680 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 8)) = fts5tokConnectMethod 60681 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 16)) = fts5tokConnectMethod 60682 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 24)) = fts5tokBestIndexMethod 60683 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 32)) = fts5tokDisconnectMethod 60684 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 40)) = fts5tokDisconnectMethod 60685 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 48)) = fts5tokOpenMethod 60686 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 56)) = fts5tokCloseMethod 60687 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 64)) = fts5tokFilterMethod 60688 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 72)) = fts5tokNextMethod 60689 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 80)) = fts5tokEofMethod 60690 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 88)) = fts5tokColumnMethod 60691 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 96)) = fts5tokRowidMethod 60692 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 8)) = fuzzerConnect 60693 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 16)) = fuzzerConnect 60694 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 24)) = fuzzerBestIndex 60695 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 32)) = fuzzerDisconnect 60696 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 40)) = fuzzerDisconnect 60697 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 48)) = fuzzerOpen 60698 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 56)) = fuzzerClose 60699 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 64)) = fuzzerFilter 60700 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 72)) = fuzzerNext 60701 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 80)) = fuzzerEof 60702 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 88)) = fuzzerColumn 60703 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 96)) = fuzzerRowid 60704 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 8)) = intarrayCreate 60705 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 16)) = intarrayCreate 60706 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 24)) = intarrayBestIndex 60707 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 32)) = intarrayDestroy 60708 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 40)) = intarrayDestroy 60709 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 48)) = intarrayOpen 60710 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 56)) = intarrayClose 60711 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 64)) = intarrayFilter 60712 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 72)) = intarrayNext 60713 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 80)) = intarrayEof 60714 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 88)) = intarrayColumn 60715 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 96)) = intarrayRowid 60716 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 8)) = jtClose 60717 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 16)) = jtRead 60718 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 24)) = jtWrite 60719 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 32)) = jtTruncate 60720 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 40)) = jtSync 60721 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 48)) = jtFileSize 60722 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 56)) = jtLock 60723 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 64)) = jtUnlock 60724 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 72)) = jtCheckReservedLock 60725 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 80)) = jtFileControl 60726 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 88)) = jtSectorSize 60727 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 96)) = jtDeviceCharacteristics 60728 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 40)) = jtOpen 60729 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 48)) = jtDelete 60730 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 56)) = jtAccess 60731 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 64)) = jtFullPathname 60732 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 72)) = jtDlOpen 60733 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 80)) = jtDlError 60734 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 88)) = jtDlSym 60735 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 96)) = jtDlClose 60736 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 104)) = jtRandomness 60737 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 112)) = jtSleep 60738 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 120)) = jtCurrentTime 60739 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 128)) = jtGetLastError 60740 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 136)) = jtCurrentTimeInt64 60741 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 16)) = prefixesConnect 60742 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 24)) = prefixesBestIndex 60743 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 32)) = prefixesDisconnect 60744 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 48)) = prefixesOpen 60745 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 56)) = prefixesClose 60746 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 64)) = prefixesFilter 60747 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 72)) = prefixesNext 60748 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 80)) = prefixesEof 60749 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 88)) = prefixesColumn 60750 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 96)) = prefixesRowid 60751 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&pzNeededCollation)) + 0)) = uintptr(unsafe.Pointer(&zNeededCollation)) 60752 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 16)) = qpvtabConnect 60753 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 24)) = qpvtabBestIndex 60754 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 32)) = qpvtabDisconnect 60755 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 48)) = qpvtabOpen 60756 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 56)) = qpvtabClose 60757 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 64)) = qpvtabFilter 60758 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 72)) = qpvtabNext 60759 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 80)) = qpvtabEof 60760 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 88)) = qpvtabColumn 60761 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 96)) = qpvtabRowid 60762 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 8)) = schemaCreate 60763 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 16)) = schemaCreate 60764 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 24)) = schemaBestIndex 60765 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 32)) = schemaDestroy 60766 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 40)) = schemaDestroy 60767 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 48)) = schemaOpen 60768 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 56)) = schemaClose 60769 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 64)) = schemaFilter 60770 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 72)) = schemaNext 60771 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 80)) = schemaEof 60772 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 88)) = schemaColumn 60773 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 96)) = schemaRowid 60774 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 16)) = seriesConnect 60775 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 24)) = seriesBestIndex 60776 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 32)) = seriesDisconnect 60777 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 48)) = seriesOpen 60778 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 56)) = seriesClose 60779 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 64)) = seriesFilter 60780 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 72)) = seriesNext 60781 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 80)) = seriesEof 60782 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 88)) = seriesColumn 60783 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 96)) = seriesRowid 60784 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 8)) = spellfix1Create 60785 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 16)) = spellfix1Connect 60786 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 24)) = spellfix1BestIndex 60787 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 32)) = spellfix1Disconnect 60788 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 40)) = spellfix1Destroy 60789 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 48)) = spellfix1Open 60790 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 56)) = spellfix1Close 60791 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 64)) = spellfix1Filter 60792 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 72)) = spellfix1Next 60793 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 80)) = spellfix1Eof 60794 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 88)) = spellfix1Column 60795 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 96)) = spellfix1Rowid 60796 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 104)) = spellfix1Update 60797 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 152)) = spellfix1Rename 60798 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 8)) = tclConnect 60799 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 16)) = tclConnect 60800 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 24)) = tclBestIndex 60801 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 32)) = tclDisconnect 60802 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 40)) = tclDisconnect 60803 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 48)) = tclOpen 60804 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 56)) = tclClose 60805 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 64)) = tclFilter 60806 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 72)) = tclNext 60807 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 80)) = tclEof 60808 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 88)) = tclColumn 60809 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 96)) = tclRowid 60810 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 8)) = tclvarConnect 60811 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 16)) = tclvarConnect 60812 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 24)) = tclvarBestIndex 60813 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 32)) = tclvarDisconnect 60814 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 40)) = tclvarDisconnect 60815 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 48)) = tclvarOpen 60816 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 56)) = tclvarClose 60817 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 64)) = tclvarFilter 60818 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 72)) = tclvarNext 60819 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 80)) = tclvarEof 60820 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 88)) = tclvarColumn 60821 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 96)) = tclvarRowid 60822 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 104)) = tclvarUpdate 60823 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 8)) = uintptr(unsafe.Pointer(&testpcacheGlobal)) 60824 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 16)) = testpcacheInit 60825 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 24)) = testpcacheShutdown 60826 *(*func(*libc.TLS, int32, int32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 32)) = testpcacheCreate 60827 *(*func(*libc.TLS, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 40)) = testpcacheCachesize 60828 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 48)) = testpcachePagecount 60829 *(*func(*libc.TLS, uintptr, uint32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 56)) = testpcacheFetch 60830 *(*func(*libc.TLS, uintptr, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 64)) = testpcacheUnpin 60831 *(*func(*libc.TLS, uintptr, uintptr, uint32, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 72)) = testpcacheRekey 60832 *(*func(*libc.TLS, uintptr, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 80)) = testpcacheTruncate 60833 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 88)) = testpcacheDestroy 60834 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 8)) = tmpClose 60835 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 16)) = tmpRead 60836 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 24)) = tmpWrite 60837 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 32)) = tmpTruncate 60838 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 40)) = tmpSync 60839 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 48)) = tmpFileSize 60840 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 56)) = tmpLock 60841 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 64)) = tmpUnlock 60842 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 72)) = tmpCheckReservedLock 60843 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 80)) = tmpFileControl 60844 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 88)) = tmpSectorSize 60845 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 96)) = tmpDeviceCharacteristics 60846 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 8)) = tvfsClose 60847 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 16)) = tvfsRead 60848 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 24)) = tvfsWrite 60849 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 32)) = tvfsTruncate 60850 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 40)) = tvfsSync 60851 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 48)) = tvfsFileSize 60852 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 56)) = tvfsLock 60853 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 64)) = tvfsUnlock 60854 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 72)) = tvfsCheckReservedLock 60855 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 80)) = tvfsFileControl 60856 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 88)) = tvfsSectorSize 60857 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 96)) = tvfsDeviceCharacteristics 60858 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 104)) = tvfsShmMap 60859 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 112)) = tvfsShmLock 60860 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 120)) = tvfsShmBarrier 60861 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 128)) = tvfsShmUnmap 60862 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 136)) = tvfsFetch 60863 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 144)) = tvfsUnfetch 60864 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 40)) = tvfsOpen 60865 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 48)) = tvfsDelete 60866 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 56)) = tvfsAccess 60867 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 64)) = tvfsFullPathname 60868 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 104)) = tvfsRandomness 60869 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 112)) = tvfsSleep 60870 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 120)) = tvfsCurrentTime 60871 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 8)) = unionConnect 60872 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 16)) = unionConnect 60873 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 24)) = unionBestIndex 60874 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 32)) = unionDisconnect 60875 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 40)) = unionDisconnect 60876 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 48)) = unionOpen 60877 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 56)) = unionClose 60878 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 64)) = unionFilter 60879 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 72)) = unionNext 60880 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 80)) = unionEof 60881 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 88)) = unionColumn 60882 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 96)) = unionRowid 60883 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 8)) = vfslogClose 60884 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 16)) = vfslogRead 60885 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 24)) = vfslogWrite 60886 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 32)) = vfslogTruncate 60887 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 40)) = vfslogSync 60888 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 48)) = vfslogFileSize 60889 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 56)) = vfslogLock 60890 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 64)) = vfslogUnlock 60891 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 72)) = vfslogCheckReservedLock 60892 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 80)) = vfslogFileControl 60893 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 88)) = vfslogSectorSize 60894 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 96)) = vfslogDeviceCharacteristics 60895 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 104)) = vfslogShmMap 60896 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 112)) = vfslogShmLock 60897 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 120)) = vfslogShmBarrier 60898 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 128)) = vfslogShmUnmap 60899 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 8)) = vlogConnect 60900 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 16)) = vlogConnect 60901 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 24)) = vlogBestIndex 60902 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 32)) = vlogDisconnect 60903 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 40)) = vlogDisconnect 60904 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 48)) = vlogOpen 60905 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 56)) = vlogClose 60906 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 64)) = vlogFilter 60907 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 72)) = vlogNext 60908 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 80)) = vlogEof 60909 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 88)) = vlogColumn 60910 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 96)) = vlogRowid 60911 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 40)) = vfslogOpen 60912 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 48)) = vfslogDelete 60913 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 56)) = vfslogAccess 60914 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 64)) = vfslogFullPathname 60915 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 72)) = vfslogDlOpen 60916 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 80)) = vfslogDlError 60917 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 88)) = vfslogDlSym 60918 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 96)) = vfslogDlClose 60919 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 104)) = vfslogRandomness 60920 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 112)) = vfslogSleep 60921 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 120)) = vfslogCurrentTime 60922 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 128)) = vfslogGetLastError 60923 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 136)) = vfslogCurrentTimeInt64 60924 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 8)) = wholenumberConnect 60925 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 16)) = wholenumberConnect 60926 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 24)) = wholenumberBestIndex 60927 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 32)) = wholenumberDisconnect 60928 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 40)) = wholenumberDisconnect 60929 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 48)) = wholenumberOpen 60930 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 56)) = wholenumberClose 60931 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 64)) = wholenumberFilter 60932 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 72)) = wholenumberNext 60933 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 80)) = wholenumberEof 60934 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 88)) = wholenumberColumn 60935 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 96)) = wholenumberRowid 60936 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 8)) = devsymClose 60937 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 16)) = devsymRead 60938 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 24)) = writecrashWrite 60939 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 32)) = devsymTruncate 60940 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 40)) = devsymSync 60941 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 48)) = devsymFileSize 60942 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 56)) = devsymLock 60943 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 64)) = devsymUnlock 60944 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 72)) = devsymCheckReservedLock 60945 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 80)) = devsymFileControl 60946 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 88)) = writecrashSectorSize 60947 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 96)) = writecrashDeviceCharacteristics 60948 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 104)) = devsymShmMap 60949 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 112)) = devsymShmLock 60950 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 120)) = devsymShmBarrier 60951 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 128)) = devsymShmUnmap 60952 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 40)) = writecrashOpen 60953 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 48)) = devsymDelete 60954 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 56)) = devsymAccess 60955 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 64)) = devsymFullPathname 60956 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 104)) = devsymRandomness 60957 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 112)) = devsymSleep 60958 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 120)) = devsymCurrentTime 60959 } 60960 60961 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\x00rowid32\x00casesensitivelike\x00configslower\x001.0\x00curdir\x001\x00win32malloc\x00debug\x00default_ckptfullfsync\x00direct_read\x00dirsync\x00lfs\x00pagecache_overflow_stats\x00mmap\x00worker_threads\x008\x00memdebug\x008_3_names\x00cursorhints\x00hiddencolumns\x00mathlib\x00mem3\x00mem5\x00offset_sql_func\x00snapshot\x00mutex\x00mutex_noop\x00altertable\x00api_armor\x00atomicwrite\x00geopoly\x00json1\x00has_codec\x00like_match_blobs\x00auth\x00autoinc\x00autoreset\x00autovacuum\x00default_autovacuum\x00between_opt\x00builtin_test\x00bloblit\x00cast\x00check\x00cte\x00columnmetadata\x00oversize_cell_check\x00compileoption_diags\x00compound\x00conflict\x00crashtest\x00datetime\x00decltype\x00deprecated\x00diskio\x00floatingpoint\x00foreignkey\x00fts1\x00fts2\x00fts3\x00fts5\x00fts3_unicode\x00fts4_deferred\x00gettable\x00icu\x00icu_collations\x00integrityck\x00legacyformat\x00like_opt\x00load_ext\x00localtime\x00lookaside\x00long_double\x00memorydb\x00memorymanage\x00mergesort\x00null_trim\x00or_opt\x00rbu\x00pager_pragmas\x00pragma\x00reindex\x00rtree\x00rtree_int_only\x00schema_pragmas\x00schema_version\x00session\x00stmtvtab\x00scanstatus\x00lock_proxy_pragmas\x00prefer_proxy_locking\x00shared_cache\x00subquery\x00tclvar\x00threadsafe\x00threadsafe1\x00threadsafe2\x00tempdb\x00trigger\x00truncate_opt\x00vacuum\x00view\x00vtab\x00wal\x00wsd\x00update_delete_limit\x00fast_secure_delete\x00secure_delete\x00userauth\x00multiplex_ext_overwrite\x00yytrackmaxstackdepth\x00sqllog\x00uri_00_error\x00normalize\x00windowfunc\x00SQLITE_MAX_LENGTH\x00SQLITE_MAX_COLUMN\x00SQLITE_MAX_SQL_LENGTH\x00SQLITE_MAX_EXPR_DEPTH\x00SQLITE_MAX_COMPOUND_SELECT\x00SQLITE_MAX_VDBE_OP\x00SQLITE_MAX_FUNCTION_ARG\x00SQLITE_MAX_VARIABLE_NUMBER\x00SQLITE_MAX_PAGE_SIZE\x00SQLITE_MAX_PAGE_COUNT\x00SQLITE_MAX_LIKE_PATTERN_LENGTH\x00SQLITE_MAX_TRIGGER_DEPTH\x00SQLITE_DEFAULT_CACHE_SIZE\x00SQLITE_DEFAULT_PAGE_SIZE\x00SQLITE_DEFAULT_FILE_FORMAT\x00SQLITE_DEFAULT_SYNCHRONOUS\x00SQLITE_DEFAULT_WAL_SYNCHRONOUS\x00SQLITE_MAX_ATTACHED\x00SQLITE_MAX_DEFAULT_PAGE_SIZE\x00SQLITE_MAX_WORKER_THREADS\x00TEMP_STORE\x00__GNUC__\x00%s-journal\x00%s-wal\x00%s-shm\x00%s%03d\x00%s-journal%03d\x00%s-wal%03d\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" 60962 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data