gitlab.com/CoiaPrant/sqlite3@v1.19.1/internal/testfixture/testfixture_openbsd_amd64.go (about) 1 // Code generated by 'ccgo -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_SERIES_CONSTRAINT_VERIFY=1 -DSQLITE_SERVER=1 -DTCLSH_INIT_PROC=sqlite3TestInit -D_HAVE_SQLITE_CONFIG_H -I/usr/local/include/tcl8.6 -export-defines "" -export-fields F -ignore-unsupported-alignment -trace-translation-units -volatile=sqlite3_io_error_pending,sqlite3_open_file_count,sqlite3_pager_readdb_count,sqlite3_pager_writedb_count,sqlite3_pager_writej_count,sqlite3_search_count,sqlite3_sort_count,saved_cnt -lgitlab.com/CoiaPrant/sqlite3/libtest -lmodernc.org/tcl/lib -lmodernc.org/z/lib -o internal/testfixture/testfixture_openbsd_amd64.go -Itestdata/sqlite-src-3390300/ext/async -Itestdata/sqlite-src-3390300/ext/fts3 -Itestdata/sqlite-src-3390300/ext/icu -Itestdata/sqlite-src-3390300/ext/rtree -Itestdata/sqlite-src-3390300/ext/session -Itestdata/sqlite-src-3390300/ext/userauth -Itestdata/sqlite-src-3390300/src -Itestdata/sqlite-amalgamation-3390300 -Itestdata/sqlite-src-3390300 -full-path-comments testdata/sqlite-src-3390300/ext/expert/sqlite3expert.c testdata/sqlite-src-3390300/ext/expert/test_expert.c testdata/sqlite-src-3390300/ext/fts3/fts3_term.c testdata/sqlite-src-3390300/ext/fts3/fts3_test.c testdata/sqlite-src-3390300/ext/fts5/fts5_tcl.c testdata/sqlite-src-3390300/ext/fts5/fts5_test_mi.c testdata/sqlite-src-3390300/ext/fts5/fts5_test_tok.c testdata/sqlite-src-3390300/ext/misc/appendvfs.c testdata/sqlite-src-3390300/ext/misc/amatch.c testdata/sqlite-src-3390300/ext/misc/carray.c testdata/sqlite-src-3390300/ext/misc/cksumvfs.c testdata/sqlite-src-3390300/ext/misc/closure.c testdata/sqlite-src-3390300/ext/misc/csv.c testdata/sqlite-src-3390300/ext/misc/decimal.c testdata/sqlite-src-3390300/ext/misc/eval.c testdata/sqlite-src-3390300/ext/misc/explain.c testdata/sqlite-src-3390300/ext/misc/fileio.c testdata/sqlite-src-3390300/ext/misc/fuzzer.c testdata/sqlite-src-3390300/ext/misc/ieee754.c testdata/sqlite-src-3390300/ext/misc/mmapwarm.c testdata/sqlite-src-3390300/ext/misc/nextchar.c testdata/sqlite-src-3390300/ext/misc/normalize.c testdata/sqlite-src-3390300/ext/misc/percentile.c testdata/sqlite-src-3390300/ext/misc/prefixes.c testdata/sqlite-src-3390300/ext/misc/qpvtab.c testdata/sqlite-src-3390300/ext/misc/regexp.c testdata/sqlite-src-3390300/ext/misc/remember.c testdata/sqlite-src-3390300/ext/misc/series.c testdata/sqlite-src-3390300/ext/misc/spellfix.c testdata/sqlite-src-3390300/ext/misc/totype.c testdata/sqlite-src-3390300/ext/misc/unionvtab.c testdata/sqlite-src-3390300/ext/misc/wholenumber.c testdata/sqlite-src-3390300/ext/rbu/test_rbu.c testdata/sqlite-src-3390300/ext/rtree/test_rtreedoc.c testdata/sqlite-src-3390300/ext/session/test_session.c testdata/sqlite-src-3390300/ext/userauth/userauth.c testdata/sqlite-src-3390300/src/tclsqlite.c testdata/sqlite-src-3390300/src/test1.c testdata/sqlite-src-3390300/src/test2.c testdata/sqlite-src-3390300/src/test3.c testdata/sqlite-src-3390300/src/test4.c testdata/sqlite-src-3390300/src/test5.c testdata/sqlite-src-3390300/src/test6.c testdata/sqlite-src-3390300/src/test7.c testdata/sqlite-src-3390300/src/test8.c testdata/sqlite-src-3390300/src/test9.c testdata/sqlite-src-3390300/src/test_async.c testdata/sqlite-src-3390300/src/test_autoext.c testdata/sqlite-src-3390300/src/test_backup.c testdata/sqlite-src-3390300/src/test_bestindex.c testdata/sqlite-src-3390300/src/test_blob.c testdata/sqlite-src-3390300/src/test_btree.c testdata/sqlite-src-3390300/src/test_config.c testdata/sqlite-src-3390300/src/test_delete.c testdata/sqlite-src-3390300/src/test_demovfs.c testdata/sqlite-src-3390300/src/test_devsym.c testdata/sqlite-src-3390300/src/test_fs.c testdata/sqlite-src-3390300/src/test_func.c testdata/sqlite-src-3390300/src/test_hexio.c testdata/sqlite-src-3390300/src/test_init.c testdata/sqlite-src-3390300/src/test_intarray.c testdata/sqlite-src-3390300/src/test_journal.c testdata/sqlite-src-3390300/src/test_malloc.c testdata/sqlite-src-3390300/src/test_md5.c testdata/sqlite-src-3390300/src/test_multiplex.c testdata/sqlite-src-3390300/src/test_mutex.c testdata/sqlite-src-3390300/src/test_onefile.c testdata/sqlite-src-3390300/src/test_osinst.c testdata/sqlite-src-3390300/src/test_pcache.c testdata/sqlite-src-3390300/src/test_quota.c testdata/sqlite-src-3390300/src/test_rtree.c testdata/sqlite-src-3390300/src/test_schema.c testdata/sqlite-src-3390300/src/test_server.c testdata/sqlite-src-3390300/src/test_superlock.c testdata/sqlite-src-3390300/src/test_syscall.c testdata/sqlite-src-3390300/src/test_tclsh.c testdata/sqlite-src-3390300/src/test_tclvar.c testdata/sqlite-src-3390300/src/test_thread.c testdata/sqlite-src-3390300/src/test_vdbecov.c testdata/sqlite-src-3390300/src/test_vfs.c testdata/sqlite-src-3390300/src/test_windirent.c testdata/sqlite-src-3390300/src/test_window.c testdata/sqlite-src-3390300/src/test_wsd.c -DNDEBUG -DHAVE_USLEEP -DLONGDOUBLE_TYPE=double -DSQLITE_CKSUMVFS_STATIC -DSQLITE_CORE -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_PAGE_SIZE=1024 -DSQLITE_ENABLE_BYTECODE_VTAB -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_DESERIALIZE -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_ENABLE_MEMORY_MANAGEMENT -DSQLITE_ENABLE_OFFSET_SQL_FUNC -DSQLITE_ENABLE_PREUPDATE_HOOK -DSQLITE_ENABLE_RBU -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_SNAPSHOT -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_MUTEX_APPDEF=1 -DSQLITE_MUTEX_NOOP -DSQLITE_SOUNDEX -DSQLITE_TEMP_STORE=1 -DSQLITE_TEST -DSQLITE_THREADSAFE=1', DO NOT EDIT. 2 3 package main 4 5 import ( 6 "math" 7 "reflect" 8 "sync/atomic" 9 "unsafe" 10 11 "modernc.org/libc" 12 "modernc.org/libc/sys/types" 13 "gitlab.com/CoiaPrant/sqlite3/libtest" 14 "modernc.org/tcl/lib" 15 ) 16 17 var _ = math.Pi 18 var _ reflect.Kind 19 var _ atomic.Value 20 var _ unsafe.Pointer 21 var _ *libc.TLS 22 var _ types.Size_t 23 24 func main() { libc.Start(main1) } 25 26 const ( 27 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 TOTYPE_BIGENDIAN = 0 1556 TOTYPE_LITTLEENDIAN = 1 1557 SWARMVTAB_MAX_OPEN = 9 1558 SQLITE_RBU_STATE_CHECKPOINT = 3 1559 SQLITE_RBU_STATE_DONE = 4 1560 SQLITE_RBU_STATE_ERROR = 5 1561 SQLITE_RBU_STATE_MOVE = 2 1562 SQLITE_RBU_STATE_OAL = 1 1563 X_SQLITE3RBU_H = 0 1564 BTREE_APPEND = 0x08 1565 BTREE_APPLICATION_ID = 8 1566 BTREE_AUTOVACUUM_FULL = 1 1567 BTREE_AUTOVACUUM_INCR = 2 1568 BTREE_AUTOVACUUM_NONE = 0 1569 BTREE_AUXDELETE = 0x04 1570 BTREE_BLOBKEY = 2 1571 BTREE_BULKLOAD = 0x00000001 1572 BTREE_DATA_VERSION = 15 1573 BTREE_DEFAULT_CACHE_SIZE = 3 1574 BTREE_FILE_FORMAT = 2 1575 BTREE_FORDELETE = 0x00000008 1576 BTREE_FREE_PAGE_COUNT = 0 1577 BTREE_HINT_RANGE = 0 1578 BTREE_INCR_VACUUM = 7 1579 BTREE_INTKEY = 1 1580 BTREE_LARGEST_ROOT_PAGE = 4 1581 BTREE_MEMORY = 2 1582 BTREE_OMIT_JOURNAL = 1 1583 BTREE_PREFORMAT = 0x80 1584 BTREE_SAVEPOSITION = 0x02 1585 BTREE_SCHEMA_VERSION = 1 1586 BTREE_SEEK_EQ = 0x00000002 1587 BTREE_SINGLE = 4 1588 BTREE_TEXT_ENCODING = 5 1589 BTREE_UNORDERED = 8 1590 BTREE_USER_VERSION = 6 1591 BTREE_WRCSR = 0x00000004 1592 COLFLAG_BUSY = 0x0100 1593 COLFLAG_GENERATED = 0x0060 1594 COLFLAG_HASCOLL = 0x0200 1595 COLFLAG_HASTYPE = 0x0004 1596 COLFLAG_HIDDEN = 0x0002 1597 COLFLAG_NOEXPAND = 0x0400 1598 COLFLAG_NOINSERT = 0x0062 1599 COLFLAG_NOTAVAIL = 0x0080 1600 COLFLAG_PRIMKEY = 0x0001 1601 COLFLAG_SORTERREF = 0x0010 1602 COLFLAG_STORED = 0x0040 1603 COLFLAG_UNIQUE = 0x0008 1604 COLFLAG_VIRTUAL = 0x0020 1605 COLNAME_COLUMN = 4 1606 COLNAME_DATABASE = 2 1607 COLNAME_DECLTYPE = 1 1608 COLNAME_N = 5 1609 COLNAME_NAME = 0 1610 COLNAME_TABLE = 3 1611 COLTYPE_ANY = 1 1612 COLTYPE_BLOB = 2 1613 COLTYPE_CUSTOM = 0 1614 COLTYPE_INT = 3 1615 COLTYPE_INTEGER = 4 1616 COLTYPE_REAL = 5 1617 COLTYPE_TEXT = 6 1618 DBFLAG_EncodingFixed = 0x0040 1619 DBFLAG_InternalFunc = 0x0020 1620 DBFLAG_PreferBuiltin = 0x0002 1621 DBFLAG_SchemaChange = 0x0001 1622 DBFLAG_SchemaKnownOk = 0x0010 1623 DBFLAG_Vacuum = 0x0004 1624 DBFLAG_VacuumInto = 0x0008 1625 DB_ResetWanted = 0x0008 1626 DB_SchemaLoaded = 0x0001 1627 DB_UnresetViews = 0x0002 1628 ENAME_NAME = 0 1629 ENAME_SPAN = 1 1630 ENAME_TAB = 2 1631 EP_Agg = 0x000010 1632 EP_CanBeNull = 0x200000 1633 EP_Collate = 0x000200 1634 EP_Commuted = 0x000400 1635 EP_ConstFunc = 0x100000 1636 EP_DblQuoted = 0x000080 1637 EP_Distinct = 0x000004 1638 EP_FixedCol = 0x000020 1639 EP_FromDDL = 0x40000000 1640 EP_HasFunc = 0x000008 1641 EP_IfNullRow = 0x040000 1642 EP_Immutable = 0x02 1643 EP_InfixFunc = 0x000100 1644 EP_InnerON = 0x000002 1645 EP_IntValue = 0x000800 1646 EP_IsFalse = 0x20000000 1647 EP_IsTrue = 0x10000000 1648 EP_Leaf = 0x800000 1649 EP_MemToken = 0x020000 1650 EP_NoReduce = 0x01 1651 EP_OuterON = 0x000001 1652 EP_Propagate = 4194824 1653 EP_Quoted = 0x4000000 1654 EP_Reduced = 0x004000 1655 EP_Skip = 0x002000 1656 EP_Static = 0x8000000 1657 EP_Subquery = 0x400000 1658 EP_Subrtn = 0x2000000 1659 EP_TokenOnly = 0x010000 1660 EP_Unlikely = 0x080000 1661 EP_VarSelect = 0x000040 1662 EP_Win = 0x008000 1663 EP_WinFunc = 0x1000000 1664 EP_xIsSelect = 0x001000 1665 EU4_EXPR = 2 1666 EU4_IDX = 1 1667 EU4_NONE = 0 1668 EXCLUSIVE_LOCK = 4 1669 EXPRDUP_REDUCE = 0x0001 1670 GCC_VERSION = 4002001 1671 HAVE_DLFCN_H = 1 1672 HAVE_FCHOWN = 1 1673 HAVE_FDATASYNC = 1 1674 HAVE_GMTIME_R = 1 1675 HAVE_INT16_T = 1 1676 HAVE_INT32_T = 1 1677 HAVE_INT64_T = 1 1678 HAVE_INT8_T = 1 1679 HAVE_INTPTR_T = 1 1680 HAVE_INTTYPES_H = 1 1681 HAVE_ISNAN = 1 1682 HAVE_LOCALTIME_R = 1 1683 HAVE_LSTAT = 1 1684 HAVE_MEMORY_H = 1 1685 HAVE_PREAD = 1 1686 HAVE_PWRITE = 1 1687 HAVE_READLINK = 1 1688 HAVE_STDINT_H = 1 1689 HAVE_STDLIB_H = 1 1690 HAVE_STRINGS_H = 1 1691 HAVE_STRING_H = 1 1692 HAVE_SYS_STAT_H = 1 1693 HAVE_SYS_TYPES_H = 1 1694 HAVE_UINT16_T = 1 1695 HAVE_UINT32_T = 1 1696 HAVE_UINT64_T = 1 1697 HAVE_UINT8_T = 1 1698 HAVE_UINTPTR_T = 1 1699 HAVE_UNISTD_H = 1 1700 HAVE_UTIME = 1 1701 INITFLAG_AlterAdd = 0x0003 1702 INITFLAG_AlterDrop = 0x0002 1703 INITFLAG_AlterMask = 0x0003 1704 INITFLAG_AlterRename = 0x0001 1705 INLINEFUNC_affinity = 4 1706 INLINEFUNC_coalesce = 0 1707 INLINEFUNC_expr_compare = 3 1708 INLINEFUNC_expr_implies_expr = 2 1709 INLINEFUNC_iif = 5 1710 INLINEFUNC_implies_nonnull_row = 1 1711 INLINEFUNC_sqlite_offset = 6 1712 INLINEFUNC_unlikely = 99 1713 INT16_MAX = 0x7fff 1714 INT16_MIN = -32768 1715 INT32_MAX = 0x7fffffff 1716 INT32_MIN = -2147483648 1717 INT64_MAX = 0x7fffffffffffffff 1718 INT64_MIN = -9223372036854775808 1719 INT8_MAX = 0x7f 1720 INT8_MIN = -128 1721 INTMAX_MAX = 9223372036854775807 1722 INTMAX_MIN = -9223372036854775808 1723 INTPTR_MAX = 0x7fffffffffffffff 1724 INTPTR_MIN = -9223372036854775808 1725 INT_FAST16_MAX = 2147483647 1726 INT_FAST16_MIN = -2147483648 1727 INT_FAST32_MAX = 2147483647 1728 INT_FAST32_MIN = -2147483648 1729 INT_FAST64_MAX = 9223372036854775807 1730 INT_FAST64_MIN = -9223372036854775808 1731 INT_FAST8_MAX = 2147483647 1732 INT_FAST8_MIN = -2147483648 1733 INT_LEAST16_MAX = 32767 1734 INT_LEAST16_MIN = -32768 1735 INT_LEAST32_MAX = 2147483647 1736 INT_LEAST32_MIN = -2147483648 1737 INT_LEAST64_MAX = 9223372036854775807 1738 INT_LEAST64_MIN = -9223372036854775808 1739 INT_LEAST8_MAX = 127 1740 INT_LEAST8_MIN = -128 1741 IN_INDEX_EPH = 2 1742 IN_INDEX_INDEX_ASC = 3 1743 IN_INDEX_INDEX_DESC = 4 1744 IN_INDEX_LOOP = 0x0004 1745 IN_INDEX_MEMBERSHIP = 0x0002 1746 IN_INDEX_NOOP = 5 1747 IN_INDEX_NOOP_OK = 0x0001 1748 IN_INDEX_ROWID = 1 1749 JT_CROSS = 0x02 1750 JT_ERROR = 0x80 1751 JT_INNER = 0x01 1752 JT_LEFT = 0x08 1753 JT_LTORJ = 0x40 1754 JT_NATURAL = 0x04 1755 JT_OUTER = 0x20 1756 JT_RIGHT = 0x10 1757 KEYINFO_ORDER_BIGNULL = 0x02 1758 KEYINFO_ORDER_DESC = 0x01 1759 LEGACY_SCHEMA_TABLE = "sqlite_master" 1760 LEGACY_TEMP_SCHEMA_TABLE = "sqlite_temp_master" 1761 LOCATE_NOERR = 0x02 1762 LOCATE_VIEW = 0x01 1763 LOOKASIDE_SMALL = 128 1764 LT_OBJDIR = ".libs/" 1765 M10d_Any = 1 1766 M10d_No = 2 1767 M10d_Yes = 0 1768 MEMTYPE_HEAP = 0x01 1769 MEMTYPE_LOOKASIDE = 0x02 1770 MEMTYPE_PCACHE = 0x04 1771 MSVC_VERSION = 0 1772 NC_AllowAgg = 0x000001 1773 NC_AllowWin = 0x004000 1774 NC_Complex = 0x002000 1775 NC_FromDDL = 0x040000 1776 NC_GenCol = 0x000008 1777 NC_HasAgg = 0x000010 1778 NC_HasWin = 0x008000 1779 NC_IdxExpr = 0x000020 1780 NC_InAggFunc = 0x020000 1781 NC_IsCheck = 0x000004 1782 NC_IsDDL = 0x010000 1783 NC_MinMaxAgg = 0x001000 1784 NC_NoSelect = 0x080000 1785 NC_OrderAgg = 0x8000000 1786 NC_PartIdx = 0x000002 1787 NC_SelfRef = 0x00002e 1788 NC_UAggInfo = 0x000100 1789 NC_UBaseReg = 0x000400 1790 NC_UEList = 0x000080 1791 NC_UUpsert = 0x000200 1792 NC_VarSelect = 0x000040 1793 NO_LOCK = 0 1794 OE_Abort = 2 1795 OE_Cascade = 10 1796 OE_Default = 11 1797 OE_Fail = 3 1798 OE_Ignore = 4 1799 OE_None = 0 1800 OE_Replace = 5 1801 OE_Restrict = 7 1802 OE_Rollback = 1 1803 OE_SetDflt = 9 1804 OE_SetNull = 8 1805 OE_Update = 6 1806 OMIT_TEMPDB = 0 1807 ONEPASS_MULTI = 2 1808 ONEPASS_OFF = 0 1809 ONEPASS_SINGLE = 1 1810 OPFLAG_APPEND = 0x08 1811 OPFLAG_AUXDELETE = 0x04 1812 OPFLAG_BULKCSR = 0x01 1813 OPFLAG_EPHEM = 0x01 1814 OPFLAG_FORDELETE = 0x08 1815 OPFLAG_ISNOOP = 0x40 1816 OPFLAG_ISUPDATE = 0x04 1817 OPFLAG_LASTROWID = 0x20 1818 OPFLAG_LENGTHARG = 0x40 1819 OPFLAG_NCHANGE = 0x01 1820 OPFLAG_NOCHNG = 0x01 1821 OPFLAG_NOCHNG_MAGIC = 0x6d 1822 OPFLAG_P2ISREG = 0x10 1823 OPFLAG_PERMUTE = 0x01 1824 OPFLAG_PREFORMAT = 0x80 1825 OPFLAG_SAVEPOSITION = 0x02 1826 OPFLAG_SEEKEQ = 0x02 1827 OPFLAG_TYPEOFARG = 0x80 1828 OPFLAG_USESEEKRESULT = 0x10 1829 OPFLG_IN1 = 0x02 1830 OPFLG_IN2 = 0x04 1831 OPFLG_IN3 = 0x08 1832 OPFLG_JUMP = 0x01 1833 OPFLG_OUT2 = 0x10 1834 OPFLG_OUT3 = 0x20 1835 OP_Abortable = 186 1836 OP_Add = 106 1837 OP_AddImm = 86 1838 OP_Affinity = 96 1839 OP_AggFinal = 165 1840 OP_AggInverse = 161 1841 OP_AggStep = 162 1842 OP_AggStep1 = 163 1843 OP_AggValue = 164 1844 OP_And = 44 1845 OP_AutoCommit = 1 1846 OP_BeginSubrtn = 74 1847 OP_BitAnd = 102 1848 OP_BitNot = 114 1849 OP_BitOr = 103 1850 OP_Blob = 77 1851 OP_Cast = 88 1852 OP_Checkpoint = 3 1853 OP_Clear = 145 1854 OP_Close = 122 1855 OP_ClrSubtype = 179 1856 OP_CollSeq = 85 1857 OP_Column = 94 1858 OP_ColumnsUsed = 123 1859 OP_Compare = 90 1860 OP_Concat = 111 1861 OP_Copy = 80 1862 OP_Count = 98 1863 OP_CreateBtree = 147 1864 OP_CursorHint = 182 1865 OP_CursorLock = 167 1866 OP_CursorUnlock = 168 1867 OP_DecrJumpZero = 60 1868 OP_DeferredSeek = 141 1869 OP_Delete = 130 1870 OP_Destroy = 144 1871 OP_Divide = 109 1872 OP_DropIndex = 152 1873 OP_DropTable = 151 1874 OP_DropTrigger = 154 1875 OP_ElseEq = 58 1876 OP_EndCoroutine = 68 1877 OP_Eq = 53 1878 OP_Expire = 166 1879 OP_Explain = 185 1880 OP_Filter = 63 1881 OP_FilterAdd = 180 1882 OP_FinishSeek = 143 1883 OP_FkCheck = 83 1884 OP_FkCounter = 158 1885 OP_FkIfZero = 48 1886 OP_Found = 28 1887 OP_Function = 66 1888 OP_Ge = 57 1889 OP_Gosub = 9 1890 OP_Goto = 8 1891 OP_Gt = 54 1892 OP_Halt = 70 1893 OP_HaltIfNull = 69 1894 OP_IdxDelete = 140 1895 OP_IdxGE = 42 1896 OP_IdxGT = 40 1897 OP_IdxInsert = 138 1898 OP_IdxLE = 39 1899 OP_IdxLT = 41 1900 OP_IdxRowid = 142 1901 OP_If = 15 1902 OP_IfNoHope = 25 1903 OP_IfNot = 16 1904 OP_IfNotOpen = 24 1905 OP_IfNotZero = 59 1906 OP_IfNullRow = 18 1907 OP_IfPos = 49 1908 OP_IfSmaller = 32 1909 OP_IncrVacuum = 61 1910 OP_Init = 64 1911 OP_InitCoroutine = 10 1912 OP_Insert = 128 1913 OP_Int64 = 72 1914 OP_IntCopy = 82 1915 OP_Integer = 71 1916 OP_IntegrityCk = 155 1917 OP_IsNull = 50 1918 OP_IsNullOrType = 17 1919 OP_IsTrue = 91 1920 OP_JournalMode = 4 1921 OP_Jump = 13 1922 OP_Last = 31 1923 OP_Le = 55 1924 OP_LoadAnalysis = 150 1925 OP_Lt = 56 1926 OP_MakeRecord = 97 1927 OP_MaxPgcnt = 178 1928 OP_MemMax = 159 1929 OP_Move = 79 1930 OP_Multiply = 108 1931 OP_MustBeInt = 12 1932 OP_Ne = 52 1933 OP_NewRowid = 127 1934 OP_Next = 38 1935 OP_NoConflict = 26 1936 OP_Noop = 184 1937 OP_Not = 19 1938 OP_NotExists = 30 1939 OP_NotFound = 27 1940 OP_NotNull = 51 1941 OP_Null = 75 1942 OP_NullRow = 136 1943 OP_Offset = 93 1944 OP_OffsetLimit = 160 1945 OP_Once = 14 1946 OP_OpenAutoindex = 116 1947 OP_OpenDup = 115 1948 OP_OpenEphemeral = 118 1949 OP_OpenPseudo = 121 1950 OP_OpenRead = 112 1951 OP_OpenWrite = 113 1952 OP_Or = 43 1953 OP_Pagecount = 177 1954 OP_Param = 157 1955 OP_ParseSchema = 149 1956 OP_Permutation = 89 1957 OP_Prev = 37 1958 OP_Program = 47 1959 OP_PureFunc = 65 1960 OP_ReadCookie = 99 1961 OP_Real = 153 1962 OP_RealAffinity = 87 1963 OP_ReleaseReg = 183 1964 OP_Remainder = 110 1965 OP_ReopenIdx = 101 1966 OP_ResetCount = 131 1967 OP_ResetSorter = 146 1968 OP_ResultRow = 84 1969 OP_Return = 67 1970 OP_Rewind = 35 1971 OP_RowCell = 129 1972 OP_RowData = 134 1973 OP_RowSetAdd = 156 1974 OP_RowSetRead = 45 1975 OP_RowSetTest = 46 1976 OP_Rowid = 135 1977 OP_SCopy = 81 1978 OP_Savepoint = 0 1979 OP_SeekEnd = 137 1980 OP_SeekGE = 22 1981 OP_SeekGT = 23 1982 OP_SeekHit = 125 1983 OP_SeekLE = 21 1984 OP_SeekLT = 20 1985 OP_SeekRowid = 29 1986 OP_SeekScan = 124 1987 OP_Sequence = 126 1988 OP_SequenceTest = 120 1989 OP_SetCookie = 100 1990 OP_ShiftLeft = 104 1991 OP_ShiftRight = 105 1992 OP_SoftNull = 76 1993 OP_Sort = 34 1994 OP_SorterCompare = 132 1995 OP_SorterData = 133 1996 OP_SorterInsert = 139 1997 OP_SorterNext = 36 1998 OP_SorterOpen = 119 1999 OP_SorterSort = 33 2000 OP_SqlExec = 148 2001 OP_String = 73 2002 OP_String8 = 117 2003 OP_Subtract = 107 2004 OP_TableLock = 169 2005 OP_Trace = 181 2006 OP_Transaction = 2 2007 OP_TypeCheck = 95 2008 OP_VBegin = 170 2009 OP_VColumn = 175 2010 OP_VCreate = 171 2011 OP_VDestroy = 172 2012 OP_VFilter = 6 2013 OP_VInitIn = 174 2014 OP_VNext = 62 2015 OP_VOpen = 173 2016 OP_VRename = 176 2017 OP_VUpdate = 7 2018 OP_Vacuum = 5 2019 OP_Variable = 78 2020 OP_Yield = 11 2021 OP_ZeroOrNull = 92 2022 OS_VXWORKS = 0 2023 P4_COLLSEQ = -2 2024 P4_DYNAMIC = -6 2025 P4_EXPR = -9 2026 P4_FREE_IF_LE = -6 2027 P4_FUNCCTX = -15 2028 P4_FUNCDEF = -7 2029 P4_INT32 = -3 2030 P4_INT64 = -13 2031 P4_INTARRAY = -14 2032 P4_KEYINFO = -8 2033 P4_MEM = -10 2034 P4_NOTUSED = 0 2035 P4_REAL = -12 2036 P4_STATIC = -1 2037 P4_SUBPROGRAM = -4 2038 P4_TABLE = -5 2039 P4_TRANSIENT = 0 2040 P4_VTAB = -11 2041 P5_ConstraintCheck = 3 2042 P5_ConstraintFK = 4 2043 P5_ConstraintNotNull = 1 2044 P5_ConstraintUnique = 2 2045 PACKAGE_BUGREPORT = "" 2046 PACKAGE_NAME = "sqlite" 2047 PACKAGE_STRING = "sqlite 3.39.3" 2048 PACKAGE_TARNAME = "sqlite" 2049 PACKAGE_VERSION = "3.39.3" 2050 PAGER_CACHESPILL = 0x20 2051 PAGER_CKPT_FULLFSYNC = 0x10 2052 PAGER_FLAGS_MASK = 0x38 2053 PAGER_FULLFSYNC = 0x08 2054 PAGER_GET_NOCONTENT = 0x01 2055 PAGER_GET_READONLY = 0x02 2056 PAGER_JOURNALMODE_DELETE = 0 2057 PAGER_JOURNALMODE_MEMORY = 4 2058 PAGER_JOURNALMODE_OFF = 2 2059 PAGER_JOURNALMODE_PERSIST = 1 2060 PAGER_JOURNALMODE_QUERY = -1 2061 PAGER_JOURNALMODE_TRUNCATE = 3 2062 PAGER_JOURNALMODE_WAL = 5 2063 PAGER_LOCKINGMODE_EXCLUSIVE = 1 2064 PAGER_LOCKINGMODE_NORMAL = 0 2065 PAGER_LOCKINGMODE_QUERY = -1 2066 PAGER_MEMORY = 0x0002 2067 PAGER_OMIT_JOURNAL = 0x0001 2068 PAGER_SYNCHRONOUS_EXTRA = 0x04 2069 PAGER_SYNCHRONOUS_FULL = 0x03 2070 PAGER_SYNCHRONOUS_MASK = 0x07 2071 PAGER_SYNCHRONOUS_NORMAL = 0x02 2072 PAGER_SYNCHRONOUS_OFF = 0x01 2073 PARSE_MODE_DECLARE_VTAB = 1 2074 PARSE_MODE_NORMAL = 0 2075 PARSE_MODE_RENAME = 2 2076 PARSE_MODE_UNMAP = 3 2077 PENDING_LOCK = 3 2078 PGHDR_CLEAN = 0x001 2079 PGHDR_DIRTY = 0x002 2080 PGHDR_DONT_WRITE = 0x010 2081 PGHDR_MMAP = 0x020 2082 PGHDR_NEED_SYNC = 0x008 2083 PGHDR_WAL_APPEND = 0x040 2084 PGHDR_WRITEABLE = 0x004 2085 PREFERRED_SCHEMA_TABLE = "sqlite_schema" 2086 PREFERRED_TEMP_SCHEMA_TABLE = "sqlite_temp_schema" 2087 PRIX16 = "X" 2088 PRIX32 = "X" 2089 PRIX64 = "llX" 2090 PRIX8 = "X" 2091 PRIXFAST16 = "X" 2092 PRIXFAST32 = "X" 2093 PRIXFAST64 = "llX" 2094 PRIXFAST8 = "X" 2095 PRIXLEAST16 = "X" 2096 PRIXLEAST32 = "X" 2097 PRIXLEAST64 = "llX" 2098 PRIXLEAST8 = "X" 2099 PRIXMAX = "jX" 2100 PRIXPTR = "lX" 2101 PRId16 = "d" 2102 PRId32 = "d" 2103 PRId64 = "lld" 2104 PRId8 = "d" 2105 PRIdFAST16 = "d" 2106 PRIdFAST32 = "d" 2107 PRIdFAST64 = "lld" 2108 PRIdFAST8 = "d" 2109 PRIdLEAST16 = "d" 2110 PRIdLEAST32 = "d" 2111 PRIdLEAST64 = "lld" 2112 PRIdLEAST8 = "d" 2113 PRIdMAX = "jd" 2114 PRIdPTR = "ld" 2115 PRIi16 = "i" 2116 PRIi32 = "i" 2117 PRIi64 = "lli" 2118 PRIi8 = "i" 2119 PRIiFAST16 = "i" 2120 PRIiFAST32 = "i" 2121 PRIiFAST64 = "lli" 2122 PRIiFAST8 = "i" 2123 PRIiLEAST16 = "i" 2124 PRIiLEAST32 = "i" 2125 PRIiLEAST64 = "lli" 2126 PRIiLEAST8 = "i" 2127 PRIiMAX = "ji" 2128 PRIiPTR = "li" 2129 PRIo16 = "o" 2130 PRIo32 = "o" 2131 PRIo64 = "llo" 2132 PRIo8 = "o" 2133 PRIoFAST16 = "o" 2134 PRIoFAST32 = "o" 2135 PRIoFAST64 = "llo" 2136 PRIoFAST8 = "o" 2137 PRIoLEAST16 = "o" 2138 PRIoLEAST32 = "o" 2139 PRIoLEAST64 = "llo" 2140 PRIoLEAST8 = "o" 2141 PRIoMAX = "jo" 2142 PRIoPTR = "lo" 2143 PRIu16 = "u" 2144 PRIu32 = "u" 2145 PRIu64 = "llu" 2146 PRIu8 = "u" 2147 PRIuFAST16 = "u" 2148 PRIuFAST32 = "u" 2149 PRIuFAST64 = "llu" 2150 PRIuFAST8 = "u" 2151 PRIuLEAST16 = "u" 2152 PRIuLEAST32 = "u" 2153 PRIuLEAST64 = "llu" 2154 PRIuLEAST8 = "u" 2155 PRIuMAX = "ju" 2156 PRIuPTR = "lu" 2157 PRIx16 = "x" 2158 PRIx32 = "x" 2159 PRIx64 = "llx" 2160 PRIx8 = "x" 2161 PRIxFAST16 = "x" 2162 PRIxFAST32 = "x" 2163 PRIxFAST64 = "llx" 2164 PRIxFAST8 = "x" 2165 PRIxLEAST16 = "x" 2166 PRIxLEAST32 = "x" 2167 PRIxLEAST64 = "llx" 2168 PRIxLEAST8 = "x" 2169 PRIxMAX = "jx" 2170 PRIxPTR = "lx" 2171 PTRDIFF_MAX = 9223372036854775807 2172 PTRDIFF_MIN = -9223372036854775808 2173 RESERVED_LOCK = 2 2174 SAVEPOINT_BEGIN = 0 2175 SAVEPOINT_RELEASE = 1 2176 SAVEPOINT_ROLLBACK = 2 2177 SCHEMA_ROOT = 1 2178 SCNd16 = "hd" 2179 SCNd32 = "d" 2180 SCNd64 = "lld" 2181 SCNd8 = "hhd" 2182 SCNdFAST16 = "d" 2183 SCNdFAST32 = "d" 2184 SCNdFAST64 = "lld" 2185 SCNdFAST8 = "d" 2186 SCNdLEAST16 = "hd" 2187 SCNdLEAST32 = "d" 2188 SCNdLEAST64 = "lld" 2189 SCNdLEAST8 = "hhd" 2190 SCNdMAX = "jd" 2191 SCNdPTR = "ld" 2192 SCNi16 = "hi" 2193 SCNi32 = "i" 2194 SCNi64 = "lli" 2195 SCNi8 = "hhi" 2196 SCNiFAST16 = "i" 2197 SCNiFAST32 = "i" 2198 SCNiFAST64 = "lli" 2199 SCNiFAST8 = "i" 2200 SCNiLEAST16 = "hi" 2201 SCNiLEAST32 = "i" 2202 SCNiLEAST64 = "lli" 2203 SCNiLEAST8 = "hhi" 2204 SCNiMAX = "ji" 2205 SCNiPTR = "li" 2206 SCNo16 = "ho" 2207 SCNo32 = "o" 2208 SCNo64 = "llo" 2209 SCNo8 = "hho" 2210 SCNoFAST16 = "o" 2211 SCNoFAST32 = "o" 2212 SCNoFAST64 = "llo" 2213 SCNoFAST8 = "o" 2214 SCNoLEAST16 = "ho" 2215 SCNoLEAST32 = "o" 2216 SCNoLEAST64 = "llo" 2217 SCNoLEAST8 = "hho" 2218 SCNoMAX = "jo" 2219 SCNoPTR = "lo" 2220 SCNu16 = "hu" 2221 SCNu32 = "u" 2222 SCNu64 = "llu" 2223 SCNu8 = "hhu" 2224 SCNuFAST16 = "u" 2225 SCNuFAST32 = "u" 2226 SCNuFAST64 = "llu" 2227 SCNuFAST8 = "u" 2228 SCNuLEAST16 = "hu" 2229 SCNuLEAST32 = "u" 2230 SCNuLEAST64 = "llu" 2231 SCNuLEAST8 = "hhu" 2232 SCNuMAX = "ju" 2233 SCNuPTR = "lu" 2234 SCNx16 = "hx" 2235 SCNx32 = "x" 2236 SCNx64 = "llx" 2237 SCNx8 = "hhx" 2238 SCNxFAST16 = "x" 2239 SCNxFAST32 = "x" 2240 SCNxFAST64 = "llx" 2241 SCNxFAST8 = "x" 2242 SCNxLEAST16 = "hx" 2243 SCNxLEAST32 = "x" 2244 SCNxLEAST64 = "llx" 2245 SCNxLEAST8 = "hhx" 2246 SCNxMAX = "jx" 2247 SCNxPTR = "lx" 2248 SF_Aggregate = 0x0000008 2249 SF_All = 0x0000002 2250 SF_ComplexResult = 0x0040000 2251 SF_Compound = 0x0000100 2252 SF_Converted = 0x0010000 2253 SF_CopyCte = 0x4000000 2254 SF_Distinct = 0x0000001 2255 SF_Expanded = 0x0000040 2256 SF_FixedLimit = 0x0004000 2257 SF_HasAgg = 0x0000010 2258 SF_HasTypeInfo = 0x0000080 2259 SF_IncludeHidden = 0x0020000 2260 SF_MaybeConvert = 0x0008000 2261 SF_MinMaxAgg = 0x0001000 2262 SF_MultiPart = 0x2000000 2263 SF_MultiValue = 0x0000400 2264 SF_NestedFrom = 0x0000800 2265 SF_NoopOrderBy = 0x0400000 2266 SF_OrderByReqd = 0x8000000 2267 SF_PushDown = 0x1000000 2268 SF_Recursive = 0x0002000 2269 SF_Resolved = 0x0000004 2270 SF_UFSrcCheck = 0x0800000 2271 SF_UsesEphemeral = 0x0000020 2272 SF_Values = 0x0000200 2273 SF_View = 0x0200000 2274 SF_WhereBegin = 0x0080000 2275 SF_WinRewrite = 0x0100000 2276 SHARED_LOCK = 1 2277 SHARED_SIZE = 510 2278 SIG_ATOMIC_MAX = 2147483647 2279 SIG_ATOMIC_MIN = -2147483648 2280 SIZE_MAX = 18446744073709551615 2281 SQLITECONFIG_H = 1 2282 SQLITEINT_H = 0 2283 SQLITE_AFF_BLOB = 0x41 2284 SQLITE_AFF_INTEGER = 0x44 2285 SQLITE_AFF_MASK = 0x47 2286 SQLITE_AFF_NONE = 0x40 2287 SQLITE_AFF_NUMERIC = 0x43 2288 SQLITE_AFF_REAL = 0x45 2289 SQLITE_AFF_TEXT = 0x42 2290 SQLITE_ASCII = 1 2291 SQLITE_ATOMIC_INTRINSICS = 0 2292 SQLITE_AllOpts = 0xffffffff 2293 SQLITE_AutoIndex = 0x00008000 2294 SQLITE_BIGENDIAN = 0 2295 SQLITE_BTREE_H = 0 2296 SQLITE_BYTEORDER = 1234 2297 SQLITE_BalancedMerge = 0x00200000 2298 SQLITE_BloomFilter = 0x00080000 2299 SQLITE_BloomPulldown = 0x00100000 2300 SQLITE_CacheSpill = 0x00000020 2301 SQLITE_CellSizeCk = 0x00200000 2302 SQLITE_CkptFullFSync = 0x00000010 2303 SQLITE_CountOfView = 0x00000200 2304 SQLITE_CoverIdxScan = 0x00000020 2305 SQLITE_CursorHints = 0x00000400 2306 SQLITE_DEFAULT_AUTOVACUUM = 0 2307 SQLITE_DEFAULT_CACHE_SIZE = -2000 2308 SQLITE_DEFAULT_FILE_FORMAT = 4 2309 SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT = -1 2310 SQLITE_DEFAULT_MMAP_SIZE = 0 2311 SQLITE_DEFAULT_PCACHE_INITSZ = 20 2312 SQLITE_DEFAULT_RECURSIVE_TRIGGERS = 0 2313 SQLITE_DEFAULT_SECTOR_SIZE = 4096 2314 SQLITE_DEFAULT_SORTERREF_SIZE = 0x7fffffff 2315 SQLITE_DEFAULT_SYNCHRONOUS = 2 2316 SQLITE_DEFAULT_WAL_AUTOCHECKPOINT = 1000 2317 SQLITE_DEFAULT_WAL_SYNCHRONOUS = 2 2318 SQLITE_DEFAULT_WORKER_THREADS = 0 2319 SQLITE_Defensive = 0x10000000 2320 SQLITE_DeferFKs = 0x00080000 2321 SQLITE_DistinctOpt = 0x00000010 2322 SQLITE_DqsDDL = 0x20000000 2323 SQLITE_DqsDML = 0x40000000 2324 SQLITE_ECEL_DUP = 0x01 2325 SQLITE_ECEL_FACTOR = 0x02 2326 SQLITE_ECEL_OMITREF = 0x08 2327 SQLITE_ECEL_REF = 0x04 2328 SQLITE_EnableQPSG = 0x00800000 2329 SQLITE_EnableTrigger = 0x00040000 2330 SQLITE_EnableView = 0x80000000 2331 SQLITE_FAULTINJECTOR_COUNT = 1 2332 SQLITE_FAULTINJECTOR_MALLOC = 0 2333 SQLITE_FCNTL_DB_UNCHANGED = 0xca093fa0 2334 SQLITE_FUNC_ANYORDER = 0x08000000 2335 SQLITE_FUNC_BUILTIN = 0x00800000 2336 SQLITE_FUNC_CASE = 0x0008 2337 SQLITE_FUNC_CONSTANT = 0x0800 2338 SQLITE_FUNC_COUNT = 0x0100 2339 SQLITE_FUNC_DIRECT = 0x00080000 2340 SQLITE_FUNC_ENCMASK = 0x0003 2341 SQLITE_FUNC_EPHEM = 0x0010 2342 SQLITE_FUNC_HASH_SZ = 23 2343 SQLITE_FUNC_INLINE = 0x00400000 2344 SQLITE_FUNC_INTERNAL = 0x00040000 2345 SQLITE_FUNC_LENGTH = 0x0040 2346 SQLITE_FUNC_LIKE = 0x0004 2347 SQLITE_FUNC_MINMAX = 0x1000 2348 SQLITE_FUNC_NEEDCOLL = 0x0020 2349 SQLITE_FUNC_SLOCHNG = 0x2000 2350 SQLITE_FUNC_SUBTYPE = 0x00100000 2351 SQLITE_FUNC_TEST = 0x4000 2352 SQLITE_FUNC_TYPEOF = 0x0080 2353 SQLITE_FUNC_UNLIKELY = 0x0400 2354 SQLITE_FUNC_UNSAFE = 0x00200000 2355 SQLITE_FUNC_WINDOW = 0x00010000 2356 SQLITE_FactorOutConst = 0x00000008 2357 SQLITE_FlttnUnionAll = 0x00800000 2358 SQLITE_ForeignKeys = 0x00004000 2359 SQLITE_Fts3Tokenizer = 0x00400000 2360 SQLITE_FullColNames = 0x00000004 2361 SQLITE_FullFSync = 0x00000008 2362 SQLITE_GroupByOrder = 0x00000004 2363 SQLITE_HASH_H = 0 2364 SQLITE_HAVE_C99_MATH_FUNCS = 1 2365 SQLITE_HAVE_OS_TRACE = 0 2366 SQLITE_IDXTYPE_APPDEF = 0 2367 SQLITE_IDXTYPE_IPK = 3 2368 SQLITE_IDXTYPE_PRIMARYKEY = 2 2369 SQLITE_IDXTYPE_UNIQUE = 1 2370 SQLITE_IOERR_NOMEM_BKPT = 3082 2371 SQLITE_IgnoreChecks = 0x00000200 2372 SQLITE_JUMPIFNULL = 0x10 2373 SQLITE_LITTLEENDIAN = 1 2374 SQLITE_LegacyAlter = 0x04000000 2375 SQLITE_LegacyFileFmt = 0x00000002 2376 SQLITE_LoadExtFunc = 0x00020000 2377 SQLITE_LoadExtension = 0x00010000 2378 SQLITE_MALLOC_SOFT_LIMIT = 1024 2379 SQLITE_MAX_ATTACHED = 10 2380 SQLITE_MAX_COLUMN = 2000 2381 SQLITE_MAX_COMPOUND_SELECT = 500 2382 SQLITE_MAX_DB = 12 2383 SQLITE_MAX_DEFAULT_PAGE_SIZE = 8192 2384 SQLITE_MAX_EXPR_DEPTH = 1000 2385 SQLITE_MAX_FILE_FORMAT = 4 2386 SQLITE_MAX_FUNCTION_ARG = 127 2387 SQLITE_MAX_LENGTH = 1000000000 2388 SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000 2389 SQLITE_MAX_MMAP_SIZE = 0 2390 SQLITE_MAX_PAGE_COUNT = 1073741823 2391 SQLITE_MAX_PAGE_SIZE = 65536 2392 SQLITE_MAX_PATHLEN = 1024 2393 SQLITE_MAX_SQL_LENGTH = 1000000000 2394 SQLITE_MAX_SYMLINK = 200 2395 SQLITE_MAX_TRIGGER_DEPTH = 1000 2396 SQLITE_MAX_VARIABLE_NUMBER = 32766 2397 SQLITE_MAX_VDBE_OP = 250000000 2398 SQLITE_MAX_WORKER_THREADS = 8 2399 SQLITE_MSVC_H = 0 2400 SQLITE_MUTEX_STATIC_TEMPDIR = 11 2401 SQLITE_MX_JUMP_OPCODE = 64 2402 SQLITE_MinMaxOpt = 0x00010000 2403 SQLITE_NEED_ERR_NAME = 0 2404 SQLITE_NOMEM_BKPT = 7 2405 SQLITE_NOTNULL = 0x90 2406 SQLITE_NTUNE = 6 2407 SQLITE_NULLEQ = 0x80 2408 SQLITE_N_BTREE_META = 16 2409 SQLITE_N_LIMIT = 12 2410 SQLITE_N_STDTYPE = 6 2411 SQLITE_NoCkptOnClose = 0x00000800 2412 SQLITE_NoSchemaError = 0x08000000 2413 SQLITE_NullCallback = 0x00000100 2414 SQLITE_OS_OTHER = 0 2415 SQLITE_OS_SETUP_H = 0 2416 SQLITE_OS_UNIX = 1 2417 SQLITE_OS_WIN = 0 2418 SQLITE_OmitNoopJoin = 0x00000100 2419 SQLITE_OmitOrderBy = 0x00040000 2420 SQLITE_OrderByIdxJoin = 0x00000040 2421 SQLITE_PAGER_H = 0 2422 SQLITE_POWERSAFE_OVERWRITE = 1 2423 SQLITE_PREPARE_MASK = 0x0f 2424 SQLITE_PREPARE_SAVESQL = 0x80 2425 SQLITE_PRINTF_INTERNAL = 0x01 2426 SQLITE_PRINTF_MALLOCED = 0x04 2427 SQLITE_PRINTF_SQLFUNC = 0x02 2428 SQLITE_PTRSIZE = 8 2429 SQLITE_PropagateConst = 0x00008000 2430 SQLITE_PushDown = 0x00001000 2431 SQLITE_QueryFlattener = 0x00000001 2432 SQLITE_QueryOnly = 0x00100000 2433 SQLITE_ReadUncommit = 0x00000400 2434 SQLITE_RecTriggers = 0x00002000 2435 SQLITE_ReleaseReg = 0x00400000 2436 SQLITE_ResetDatabase = 0x02000000 2437 SQLITE_ReverseOrder = 0x00001000 2438 SQLITE_SO_ASC = 0 2439 SQLITE_SO_DESC = 1 2440 SQLITE_SO_UNDEFINED = -1 2441 SQLITE_STATE_BUSY = 0x6d 2442 SQLITE_STATE_CLOSED = 0xce 2443 SQLITE_STATE_ERROR = 0xd5 2444 SQLITE_STATE_OPEN = 0x76 2445 SQLITE_STATE_SICK = 0xba 2446 SQLITE_STATE_ZOMBIE = 0xa7 2447 SQLITE_SYSTEM_MALLOC = 1 2448 SQLITE_SeekScan = 0x00020000 2449 SQLITE_ShortColNames = 0x00000040 2450 SQLITE_SimplifyJoin = 0x00002000 2451 SQLITE_SkipScan = 0x00004000 2452 SQLITE_Stat4 = 0x00000800 2453 SQLITE_TEMP_FILE_PREFIX = "etilqs_" 2454 SQLITE_TOKEN_KEYWORD = 0x2 2455 SQLITE_TOKEN_QUOTED = 0x1 2456 SQLITE_TRACE_LEGACY = 0x40 2457 SQLITE_TRACE_NONLEGACY_MASK = 0x0f 2458 SQLITE_TRACE_XPROFILE = 0x80 2459 SQLITE_Transitive = 0x00000080 2460 SQLITE_TriggerEQP = 0x01000000 2461 SQLITE_TrustedSchema = 0x00000080 2462 SQLITE_UTF16NATIVE = 2 2463 SQLITE_VDBE_H = 0 2464 SQLITE_VTABRISK_High = 2 2465 SQLITE_VTABRISK_Low = 0 2466 SQLITE_VTABRISK_Normal = 1 2467 SQLITE_WSD = 0 2468 SQLITE_WindowFunc = 0x00000002 2469 SQLITE_WriteSchema = 0x00000001 2470 SRT_Coroutine = 13 2471 SRT_Discard = 4 2472 SRT_DistFifo = 5 2473 SRT_DistQueue = 6 2474 SRT_EphemTab = 12 2475 SRT_Except = 2 2476 SRT_Exists = 3 2477 SRT_Fifo = 8 2478 SRT_Mem = 10 2479 SRT_Output = 9 2480 SRT_Queue = 7 2481 SRT_Set = 11 2482 SRT_Table = 14 2483 SRT_Union = 1 2484 SRT_Upfrom = 15 2485 STDC_HEADERS = 1 2486 TABTYP_NORM = 0 2487 TABTYP_VIEW = 2 2488 TABTYP_VTAB = 1 2489 TF_Autoincrement = 0x00000008 2490 TF_Ephemeral = 0x00004000 2491 TF_Eponymous = 0x00008000 2492 TF_HasGenerated = 0x00000060 2493 TF_HasHidden = 0x00000002 2494 TF_HasNotNull = 0x00000800 2495 TF_HasPrimaryKey = 0x00000004 2496 TF_HasStat1 = 0x00000010 2497 TF_HasStat4 = 0x00002000 2498 TF_HasStored = 0x00000040 2499 TF_HasVirtual = 0x00000020 2500 TF_NoVisibleRowid = 0x00000200 2501 TF_OOOHidden = 0x00000400 2502 TF_Readonly = 0x00000001 2503 TF_Shadow = 0x00001000 2504 TF_StatsUsed = 0x00000100 2505 TF_Strict = 0x00010000 2506 TF_WithoutRowid = 0x00000080 2507 TK_ABORT = 27 2508 TK_ACTION = 28 2509 TK_ADD = 163 2510 TK_AFTER = 29 2511 TK_AGG_COLUMN = 169 2512 TK_AGG_FUNCTION = 168 2513 TK_ALL = 135 2514 TK_ALTER = 162 2515 TK_ALWAYS = 96 2516 TK_ANALYZE = 30 2517 TK_AND = 44 2518 TK_ANY = 101 2519 TK_AS = 24 2520 TK_ASC = 31 2521 TK_ASTERISK = 180 2522 TK_ATTACH = 32 2523 TK_AUTOINCR = 126 2524 TK_BEFORE = 33 2525 TK_BEGIN = 5 2526 TK_BETWEEN = 48 2527 TK_BY = 34 2528 TK_CASCADE = 35 2529 TK_CASE = 157 2530 TK_CAST = 36 2531 TK_CHECK = 124 2532 TK_COLLATE = 113 2533 TK_COLUMN = 167 2534 TK_COLUMNKW = 60 2535 TK_COMMIT = 10 2536 TK_CONFLICT = 37 2537 TK_CONSTRAINT = 119 2538 TK_CREATE = 17 2539 TK_CTIME_KW = 100 2540 TK_CURRENT = 85 2541 TK_DATABASE = 38 2542 TK_DEFAULT = 120 2543 TK_DEFERRABLE = 131 2544 TK_DEFERRED = 7 2545 TK_DELETE = 128 2546 TK_DESC = 39 2547 TK_DETACH = 40 2548 TK_DISTINCT = 140 2549 TK_DO = 61 2550 TK_DROP = 133 2551 TK_EACH = 41 2552 TK_ELSE = 160 2553 TK_END = 11 2554 TK_ESCAPE = 58 2555 TK_EXCEPT = 136 2556 TK_EXCLUDE = 91 2557 TK_EXCLUSIVE = 9 2558 TK_EXISTS = 20 2559 TK_EXPLAIN = 2 2560 TK_FAIL = 42 2561 TK_FILTER = 166 2562 TK_FIRST = 83 2563 TK_FOLLOWING = 86 2564 TK_FOR = 62 2565 TK_FOREIGN = 132 2566 TK_FROM = 142 2567 TK_FUNCTION = 172 2568 TK_GENERATED = 95 2569 TK_GROUP = 146 2570 TK_GROUPS = 92 2571 TK_HAVING = 147 2572 TK_IF = 18 2573 TK_IF_NULL_ROW = 179 2574 TK_IGNORE = 63 2575 TK_IMMEDIATE = 8 2576 TK_IN = 49 2577 TK_INDEX = 161 2578 TK_INDEXED = 116 2579 TK_INITIALLY = 64 2580 TK_INSERT = 127 2581 TK_INSTEAD = 65 2582 TK_INTERSECT = 137 2583 TK_INTO = 151 2584 TK_IS = 45 2585 TK_ISNOT = 171 2586 TK_ISNULL = 50 2587 TK_JOIN = 143 2588 TK_JOIN_KW = 118 2589 TK_KEY = 67 2590 TK_LAST = 84 2591 TK_LIKE_KW = 47 2592 TK_LIMIT = 148 2593 TK_MATCH = 46 2594 TK_MATERIALIZED = 97 2595 TK_NO = 66 2596 TK_NOT = 19 2597 TK_NOTHING = 152 2598 TK_NOTNULL = 51 2599 TK_NULL = 121 2600 TK_NULLS = 82 2601 TK_OF = 68 2602 TK_OFFSET = 69 2603 TK_ON = 115 2604 TK_OR = 43 2605 TK_ORDER = 145 2606 TK_OTHERS = 93 2607 TK_OVER = 165 2608 TK_PARTITION = 87 2609 TK_PLAN = 4 2610 TK_PRAGMA = 70 2611 TK_PRECEDING = 88 2612 TK_PRIMARY = 122 2613 TK_PTR = 112 2614 TK_QUERY = 3 2615 TK_RAISE = 71 2616 TK_RANGE = 89 2617 TK_RECURSIVE = 72 2618 TK_REFERENCES = 125 2619 TK_REGISTER = 176 2620 TK_REINDEX = 98 2621 TK_RELEASE = 14 2622 TK_RENAME = 99 2623 TK_REPLACE = 73 2624 TK_RESTRICT = 74 2625 TK_RETURNING = 150 2626 TK_ROLLBACK = 12 2627 TK_ROW = 75 2628 TK_ROWS = 76 2629 TK_SAVEPOINT = 13 2630 TK_SELECT = 138 2631 TK_SELECT_COLUMN = 178 2632 TK_SET = 130 2633 TK_SPAN = 181 2634 TK_TABLE = 16 2635 TK_TEMP = 21 2636 TK_THEN = 159 2637 TK_TIES = 94 2638 TK_TO = 15 2639 TK_TRANSACTION = 6 2640 TK_TRIGGER = 77 2641 TK_TRUEFALSE = 170 2642 TK_TRUTH = 175 2643 TK_UMINUS = 173 2644 TK_UNBOUNDED = 90 2645 TK_UNION = 134 2646 TK_UNIQUE = 123 2647 TK_UPDATE = 129 2648 TK_UPLUS = 174 2649 TK_USING = 144 2650 TK_VACUUM = 78 2651 TK_VALUES = 139 2652 TK_VECTOR = 177 2653 TK_VIEW = 79 2654 TK_VIRTUAL = 80 2655 TK_WHEN = 158 2656 TK_WHERE = 149 2657 TK_WINDOW = 164 2658 TK_WITH = 81 2659 TK_WITHOUT = 26 2660 TREETRACE_ENABLED = 0 2661 TRIGGER_AFTER = 2 2662 TRIGGER_BEFORE = 1 2663 UINT16_MAX = 0xffff 2664 UINT32_MAX = 0xffffffff 2665 UINT64_MAX = 0xffffffffffffffff 2666 UINT8_MAX = 0xff 2667 UINTMAX_MAX = 18446744073709551615 2668 UINTPTR_MAX = 0xffffffffffffffff 2669 UINT_FAST16_MAX = 4294967295 2670 UINT_FAST32_MAX = 4294967295 2671 UINT_FAST64_MAX = 18446744073709551615 2672 UINT_FAST8_MAX = 4294967295 2673 UINT_LEAST16_MAX = 65535 2674 UINT_LEAST32_MAX = 4294967295 2675 UINT_LEAST64_MAX = 18446744073709551615 2676 UINT_LEAST8_MAX = 255 2677 WCHAR_MAX = 2147483647 2678 WCHAR_MIN = -2147483648 2679 WHERE_AGG_DISTINCT = 0x0400 2680 WHERE_DISTINCTBY = 0x0080 2681 WHERE_DISTINCT_NOOP = 0 2682 WHERE_DISTINCT_ORDERED = 2 2683 WHERE_DISTINCT_UNIQUE = 1 2684 WHERE_DISTINCT_UNORDERED = 3 2685 WHERE_DUPLICATES_OK = 0x0010 2686 WHERE_GROUPBY = 0x0040 2687 WHERE_ONEPASS_DESIRED = 0x0004 2688 WHERE_ONEPASS_MULTIROW = 0x0008 2689 WHERE_ORDERBY_LIMIT = 0x0800 2690 WHERE_ORDERBY_MAX = 0x0002 2691 WHERE_ORDERBY_MIN = 0x0001 2692 WHERE_ORDERBY_NORMAL = 0x0000 2693 WHERE_OR_SUBCLAUSE = 0x0020 2694 WHERE_RIGHT_JOIN = 0x1000 2695 WHERE_SORTBYGROUP = 0x0200 2696 WHERE_USE_LIMIT = 0x4000 2697 WHERE_WANT_DISTINCT = 0x0100 2698 WINT_MAX = 2147483647 2699 WINT_MIN = -2147483648 2700 WRC_Abort = 2 2701 WRC_Continue = 0 2702 WRC_Prune = 1 2703 XN_EXPR = -2 2704 XN_ROWID = -1 2705 X_BSD_SOURCE = 0 2706 X_GNU_SOURCE = 0 2707 X_INTTYPES_H_ = 0 2708 X_LARGEFILE_SOURCE = 1 2709 X_LARGE_FILE = 1 2710 X_MBSTATE_T_DEFINED_ = 0 2711 X_PTRDIFF_T_DEFINED_ = 0 2712 X_SQLITE_OS_H_ = 0 2713 X_STDDEF_H_ = 0 2714 X_SYS_STDINT_H_ = 0 2715 X_WINT_T_DEFINED_ = 0 2716 X_XOPEN_SOURCE = 600 2717 SESSION_STREAM_TCL_VAR = "sqlite3session_streams" 2718 BUS_ADRALN = 1 2719 BUS_ADRERR = 2 2720 BUS_OBJERR = 3 2721 CLD_CONTINUED = 6 2722 CLD_DUMPED = 3 2723 CLD_EXITED = 1 2724 CLD_KILLED = 2 2725 CLD_STOPPED = 5 2726 CLD_TRAPPED = 4 2727 EMT_TAGOVF = 1 2728 FPE_FLTDIV = 3 2729 FPE_FLTINV = 7 2730 FPE_FLTOVF = 4 2731 FPE_FLTRES = 6 2732 FPE_FLTSUB = 8 2733 FPE_FLTUND = 5 2734 FPE_INTDIV = 1 2735 FPE_INTOVF = 2 2736 ILL_BADSTK = 8 2737 ILL_COPROC = 7 2738 ILL_ILLADR = 3 2739 ILL_ILLOPC = 1 2740 ILL_ILLOPN = 2 2741 ILL_ILLTRP = 4 2742 ILL_PRVOPC = 5 2743 ILL_PRVREG = 6 2744 MAX_PREPARED_STMTS = 100 2745 MINSIGSTKSZ = 12288 2746 NSIG = 33 2747 NSIGBUS = 3 2748 NSIGCLD = 6 2749 NSIGEMT = 1 2750 NSIGFPE = 8 2751 NSIGILL = 8 2752 NSIGSEGV = 2 2753 NSIGTRAP = 2 2754 NUM_PREPARED_STMTS = 10 2755 SA_NOCLDSTOP = 0x0008 2756 SA_NOCLDWAIT = 0x0020 2757 SA_NODEFER = 0x0010 2758 SA_ONSTACK = 0x0001 2759 SA_RESETHAND = 0x0004 2760 SA_RESTART = 0x0002 2761 SA_SIGINFO = 0x0040 2762 SEGV_ACCERR = 2 2763 SEGV_MAPERR = 1 2764 SIGABRT = 6 2765 SIGALRM = 14 2766 SIGBUS = 10 2767 SIGCHLD = 20 2768 SIGCONT = 19 2769 SIGEMT = 7 2770 SIGFPE = 8 2771 SIGHUP = 1 2772 SIGILL = 4 2773 SIGINFO = 29 2774 SIGINT = 2 2775 SIGIO = 23 2776 SIGIOT = 6 2777 SIGKILL = 9 2778 SIGPIPE = 13 2779 SIGPROF = 27 2780 SIGQUIT = 3 2781 SIGSEGV = 11 2782 SIGSTKSZ = 28672 2783 SIGSTOP = 17 2784 SIGSYS = 12 2785 SIGTERM = 15 2786 SIGTHR = 32 2787 SIGTRAP = 5 2788 SIGTSTP = 18 2789 SIGTTIN = 21 2790 SIGTTOU = 22 2791 SIGURG = 16 2792 SIGUSR1 = 30 2793 SIGUSR2 = 31 2794 SIGVTALRM = 26 2795 SIGWINCH = 28 2796 SIGXCPU = 24 2797 SIGXFSZ = 25 2798 SIG_BLOCK = 1 2799 SIG_SETMASK = 3 2800 SIG_UNBLOCK = 2 2801 SI_LWP = -1 2802 SI_MAXSZ = 128 2803 SI_NOINFO = 32767 2804 SI_QUEUE = -2 2805 SI_TIMER = -3 2806 SI_USER = 0 2807 SQLITE_EVAL_WITHOUTNULLS = 0x00001 2808 SQLITE_TCL_NRE = 1 2809 SS_DISABLE = 0x0004 2810 SS_ONSTACK = 0x0001 2811 SV_INTERRUPT = 2 2812 SV_ONSTACK = 1 2813 SV_RESETHAND = 4 2814 TCLSH = 1 2815 TRAP_BRKPT = 1 2816 TRAP_TRACE = 2 2817 X_MACHINE_SIGNAL_H_ = 0 2818 X_NSIG = 33 2819 X_SYS_SIGINFO_H = 0 2820 X_SYS_SIGNAL_H_ = 0 2821 X_USER_SIGNAL_H = 0 2822 CACHE_STALE = 0 2823 CURTYPE_BTREE = 0 2824 CURTYPE_PSEUDO = 3 2825 CURTYPE_SORTER = 1 2826 CURTYPE_VTAB = 2 2827 MEM_AffMask = 0x003f 2828 MEM_Agg = 0x8000 2829 MEM_Blob = 0x0010 2830 MEM_Cleared = 0x0100 2831 MEM_Dyn = 0x1000 2832 MEM_Ephem = 0x4000 2833 MEM_FromBind = 0x0040 2834 MEM_Int = 0x0004 2835 MEM_IntReal = 0x0020 2836 MEM_Null = 0x0001 2837 MEM_Real = 0x0008 2838 MEM_Static = 0x2000 2839 MEM_Str = 0x0002 2840 MEM_Subtype = 0x0800 2841 MEM_Term = 0x0200 2842 MEM_TypeMask = 0x0dbf 2843 MEM_Undefined = 0x0000 2844 MEM_Zero = 0x0400 2845 PRIO_MAX = 20 2846 PRIO_MIN = -20 2847 PRIO_PGRP = 1 2848 PRIO_PROCESS = 0 2849 PRIO_USER = 2 2850 RLIMIT_CORE = 4 2851 RLIMIT_CPU = 0 2852 RLIMIT_DATA = 2 2853 RLIMIT_FSIZE = 1 2854 RLIMIT_MEMLOCK = 6 2855 RLIMIT_NOFILE = 8 2856 RLIMIT_NPROC = 7 2857 RLIMIT_RSS = 5 2858 RLIMIT_STACK = 3 2859 RLIM_NLIMITS = 9 2860 RUSAGE_CHILDREN = -1 2861 RUSAGE_SELF = 0 2862 RUSAGE_THREAD = 1 2863 SQLITE_ENABLE_LOCKING_STYLE = 0 2864 SQLITE_FRAME_MAGIC = 0x879fb71e 2865 SQLITE_MAX_SCHEMA_RETRY = 50 2866 SQLITE_VDBEINT_H = 0 2867 VDBE_DISPLAY_P4 = 1 2868 VDBE_HALT_STATE = 3 2869 VDBE_INIT_STATE = 0 2870 VDBE_READY_STATE = 1 2871 VDBE_RUN_STATE = 2 2872 X_SYS_RESOURCE_H_ = 0 2873 BTCF_AtLast = 0x08 2874 BTCF_Incrblob = 0x10 2875 BTCF_Multiple = 0x20 2876 BTCF_Pinned = 0x40 2877 BTCF_ValidNKey = 0x02 2878 BTCF_ValidOvfl = 0x04 2879 BTCF_WriteFlag = 0x01 2880 BTCURSOR_MAX_DEPTH = 20 2881 BTS_EXCLUSIVE = 0x0040 2882 BTS_FAST_SECURE = 0x000c 2883 BTS_INITIALLY_EMPTY = 0x0010 2884 BTS_NO_WAL = 0x0020 2885 BTS_OVERWRITE = 0x0008 2886 BTS_PAGESIZE_FIXED = 0x0002 2887 BTS_PENDING = 0x0080 2888 BTS_READ_ONLY = 0x0001 2889 BTS_SECURE_DELETE = 0x0004 2890 CURSOR_FAULT = 4 2891 CURSOR_INVALID = 1 2892 CURSOR_REQUIRESEEK = 3 2893 CURSOR_SKIPNEXT = 2 2894 CURSOR_VALID = 0 2895 PTF_INTKEY = 0x01 2896 PTF_LEAF = 0x08 2897 PTF_LEAFDATA = 0x04 2898 PTF_ZERODATA = 0x02 2899 PTRMAP_BTREE = 5 2900 PTRMAP_FREEPAGE = 2 2901 PTRMAP_OVERFLOW1 = 3 2902 PTRMAP_OVERFLOW2 = 4 2903 PTRMAP_ROOTPAGE = 1 2904 READ_LOCK = 1 2905 SQLITE_FILE_HEADER = "SQLite format 3" 2906 TRANS_NONE = 0 2907 TRANS_READ = 1 2908 TRANS_WRITE = 2 2909 WRITE_LOCK = 2 2910 ARG_MAX = 524288 2911 BC_BASE_MAX = 2147483647 2912 BC_DIM_MAX = 65535 2913 BC_SCALE_MAX = 2147483647 2914 BC_STRING_MAX = 2147483647 2915 CHAR_BIT = 8 2916 CHAR_MAX = 0x7f 2917 CHAR_MIN = -128 2918 CHILD_MAX = 80 2919 COLL_WEIGHTS_MAX = 2 2920 EXPR_NEST_MAX = 32 2921 GID_MAX = 4294967295 2922 HOST_NAME_MAX = 255 2923 INT_MAX = 0x7fffffff 2924 INT_MIN = -2147483648 2925 IOV_MAX = 1024 2926 LINE_MAX = 2048 2927 LINK_MAX = 32767 2928 LLONG_MAX = 0x7fffffffffffffff 2929 LLONG_MIN = -9223372036854775808 2930 LOGIN_NAME_MAX = 32 2931 LONG_BIT = 64 2932 LONG_MAX = 0x7fffffffffffffff 2933 LONG_MIN = -9223372036854775808 2934 MAX_CANON = 255 2935 MAX_INPUT = 255 2936 MB_LEN_MAX = 4 2937 NAME_MAX = 255 2938 NGROUPS_MAX = 16 2939 NL_ARGMAX = 9 2940 NL_LANGMAX = 14 2941 NL_MSGMAX = 32767 2942 NL_SETMAX = 255 2943 NL_TEXTMAX = 255 2944 NZERO = 20 2945 N_THREAD = 26 2946 OPEN_MAX = 64 2947 PATH_MAX = 1024 2948 PIPE_BUF = 512 2949 PTHREAD_BARRIER_SERIAL_THREAD = -1 2950 PTHREAD_CANCEL_ASYNCHRONOUS = 2 2951 PTHREAD_CANCEL_DEFERRED = 0 2952 PTHREAD_CANCEL_DISABLE = 1 2953 PTHREAD_CANCEL_ENABLE = 0 2954 PTHREAD_CREATE_DETACHED = 1 2955 PTHREAD_CREATE_JOINABLE = 0 2956 PTHREAD_DESTRUCTOR_ITERATIONS = 4 2957 PTHREAD_DETACHED = 0x1 2958 PTHREAD_DONE_INIT = 1 2959 PTHREAD_EXPLICIT_SCHED = 0 2960 PTHREAD_INHERIT_SCHED = 0x4 2961 PTHREAD_KEYS_MAX = 256 2962 PTHREAD_NEEDS_INIT = 0 2963 PTHREAD_NOFLOAT = 0x8 2964 PTHREAD_PRIO_INHERIT = 1 2965 PTHREAD_PRIO_NONE = 0 2966 PTHREAD_PRIO_PROTECT = 2 2967 PTHREAD_PROCESS_PRIVATE = 0 2968 PTHREAD_PROCESS_SHARED = 1 2969 PTHREAD_SCOPE_PROCESS = 0 2970 PTHREAD_SCOPE_SYSTEM = 0x2 2971 PTHREAD_STACK_MIN = 4096 2972 PTHREAD_THREADS_MAX = 18446744073709551615 2973 QUAD_MAX = 0x7fffffffffffffff 2974 QUAD_MIN = -9223372036854775808 2975 RE_DUP_MAX = 255 2976 SCHAR_MAX = 0x7f 2977 SCHAR_MIN = -128 2978 SCHED_FIFO = 1 2979 SCHED_OTHER = 2 2980 SCHED_RR = 3 2981 SEM_VALUE_MAX = 4294967295 2982 SHRT_MAX = 0x7fff 2983 SHRT_MIN = -32768 2984 SIZE_T_MAX = 18446744073709551615 2985 SSIZE_MAX = 9223372036854775807 2986 SYMLINK_MAX = 1024 2987 SYMLOOP_MAX = 32 2988 TTY_NAME_MAX = 260 2989 UCHAR_MAX = 0xff 2990 UID_MAX = 4294967295 2991 UINT_MAX = 0xffffffff 2992 ULLONG_MAX = 0xffffffffffffffff 2993 ULONG_MAX = 0xffffffffffffffff 2994 UQUAD_MAX = 0xffffffffffffffff 2995 USHRT_MAX = 0xffff 2996 WORD_BIT = 32 2997 X_LIMITS_H_ = 0 2998 X_MACHINE_LIMITS_H_ = 0 2999 X_MAXCOMLEN = 24 3000 X_POSIX2_BC_BASE_MAX = 99 3001 X_POSIX2_BC_DIM_MAX = 2048 3002 X_POSIX2_BC_SCALE_MAX = 99 3003 X_POSIX2_BC_STRING_MAX = 1000 3004 X_POSIX2_CHARCLASS_NAME_MAX = 14 3005 X_POSIX2_COLL_WEIGHTS_MAX = 2 3006 X_POSIX2_EXPR_NEST_MAX = 32 3007 X_POSIX2_LINE_MAX = 2048 3008 X_POSIX2_RE_DUP_MAX = 255 3009 X_POSIX_ARG_MAX = 4096 3010 X_POSIX_CHILD_MAX = 25 3011 X_POSIX_CLOCKRES_MIN = 20000000 3012 X_POSIX_HOST_NAME_MAX = 255 3013 X_POSIX_LINK_MAX = 8 3014 X_POSIX_LOGIN_NAME_MAX = 9 3015 X_POSIX_MAX_CANON = 255 3016 X_POSIX_MAX_INPUT = 255 3017 X_POSIX_NAME_MAX = 14 3018 X_POSIX_NGROUPS_MAX = 8 3019 X_POSIX_OPEN_MAX = 20 3020 X_POSIX_PATH_MAX = 256 3021 X_POSIX_PIPE_BUF = 512 3022 X_POSIX_RE_DUP_MAX = 255 3023 X_POSIX_SEM_NSEMS_MAX = 256 3024 X_POSIX_SEM_VALUE_MAX = 32767 3025 X_POSIX_SSIZE_MAX = 32767 3026 X_POSIX_STREAM_MAX = 8 3027 X_POSIX_SYMLINK_MAX = 255 3028 X_POSIX_SYMLOOP_MAX = 8 3029 X_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 3030 X_POSIX_THREAD_KEYS_MAX = 128 3031 X_POSIX_THREAD_THREADS_MAX = 4 3032 X_POSIX_TTY_NAME_MAX = 9 3033 X_POSIX_TZNAME_MAX = 6 3034 X_PTHREAD_H_ = 0 3035 X_SCHED_H_ = 0 3036 X_SYS_LIMITS_H_ = 0 3037 X_XOPEN_IOV_MAX = 16 3038 X_XOPEN_NAME_MAX = 255 3039 X_XOPEN_PATH_MAX = 1024 3040 TCL_THREADS = 0 3041 MX_CHUNK_NUMBER = 299 3042 SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET = 400 3043 SQLITE_MULTIPLEX_WAL_8_3_OFFSET = 700 3044 DEVSYM_MAX_PATHNAME = 512 3045 DEVSYM_VFS_NAME = "devsym" 3046 WRITECRASH_NAME = "writecrash" 3047 SQLITE_INTARRAY_H = 0 3048 JT_MAX_PATHNAME = 512 3049 JT_VFS_NAME = "jt" 3050 MALLOC_LOG_FRAMES = 10 3051 DEFAULT_SECTOR_SIZE = 0x1000 3052 MAX_PAGE_SIZE = 0x10000 3053 MULTIPLEX_CTRL_ENABLE = 214014 3054 MULTIPLEX_CTRL_SET_CHUNK_SIZE = 214015 3055 MULTIPLEX_CTRL_SET_MAX_CHUNKS = 214016 3056 SQLITE_MULTIPLEX_CHUNK_SIZE = 2147418112 3057 SQLITE_MULTIPLEX_MAX_CHUNKS = 12 3058 SQLITE_MULTIPLEX_VFS_NAME = "multiplex" 3059 SQLITE_TEST_MULTIPLEX_H = 0 3060 MAX_MUTEXES = 14 3061 STATIC_MUTEXES = 12 3062 BLOBSIZE = 10485760 3063 BLOCKSIZE = 512 3064 DATABASE_FILE = 1 3065 FS_VFS_NAME = "fs" 3066 JOURNAL_FILE = 2 3067 INST_MAX_PATHNAME = 512 3068 OS_ACCESS = 1 3069 OS_ANNOTATE = 28 3070 OS_CHECKRESERVEDLOCK = 2 3071 OS_CLOSE = 3 3072 OS_CURRENTTIME = 4 3073 OS_DELETE = 5 3074 OS_DEVCHAR = 6 3075 OS_FILECONTROL = 7 3076 OS_FILESIZE = 8 3077 OS_FULLPATHNAME = 9 3078 OS_LOCK = 11 3079 OS_NUMEVENTS = 29 3080 OS_OPEN = 12 3081 OS_RANDOMNESS = 13 3082 OS_READ = 14 3083 OS_SECTORSIZE = 15 3084 OS_SHMBARRIER = 26 3085 OS_SHMLOCK = 25 3086 OS_SHMMAP = 23 3087 OS_SHMUNMAP = 22 3088 OS_SLEEP = 16 3089 OS_SYNC = 17 3090 OS_TRUNCATE = 18 3091 OS_UNLOCK = 19 3092 OS_WRITE = 20 3093 VFSLOG_BUFFERSIZE = 8192 3094 TESTPCACHE_CLEAR = 0xd42670d4 3095 TESTPCACHE_NPAGE = 217 3096 TESTPCACHE_RESERVE = 17 3097 TESTPCACHE_VALID = 0x364585fd 3098 MSG_Close = 6 3099 MSG_Done = 7 3100 MSG_Finalize = 5 3101 MSG_Open = 1 3102 MSG_Prepare = 2 3103 MSG_Reset = 4 3104 MSG_Step = 3 3105 MADV_DONTNEED = 4 3106 MADV_FREE = 6 3107 MADV_NORMAL = 0 3108 MADV_RANDOM = 1 3109 MADV_SEQUENTIAL = 2 3110 MADV_SPACEAVAIL = 5 3111 MADV_WILLNEED = 3 3112 MAP_ANON = 0x1000 3113 MAP_ANONYMOUS = 4096 3114 MAP_CONCEAL = 0x8000 3115 MAP_COPY = 2 3116 MAP_FILE = 0 3117 MAP_FIXED = 0x0010 3118 MAP_FLAGMASK = 0xfff7 3119 MAP_HASSEMAPHORE = 0 3120 MAP_INHERIT = 0 3121 MAP_INHERIT_COPY = 1 3122 MAP_INHERIT_NONE = 2 3123 MAP_INHERIT_SHARE = 0 3124 MAP_INHERIT_ZERO = 3 3125 MAP_NOEXTEND = 0 3126 MAP_NORESERVE = 0 3127 MAP_PRIVATE = 0x0002 3128 MAP_RENAME = 0 3129 MAP_SHARED = 0x0001 3130 MAP_STACK = 0x4000 3131 MAP_TRYFIXED = 0 3132 MCL_CURRENT = 0x01 3133 MCL_FUTURE = 0x02 3134 MS_ASYNC = 0x01 3135 MS_INVALIDATE = 0x04 3136 MS_SYNC = 0x02 3137 POSIX_MADV_DONTNEED = 4 3138 POSIX_MADV_NORMAL = 0 3139 POSIX_MADV_RANDOM = 1 3140 POSIX_MADV_SEQUENTIAL = 2 3141 POSIX_MADV_WILLNEED = 3 3142 PROT_EXEC = 0x04 3143 PROT_NONE = 0x00 3144 PROT_READ = 0x01 3145 PROT_WRITE = 0x02 3146 TCLVAR_NAME_EQ = 101 3147 TCLVAR_NAME_MATCH = 109 3148 TCLVAR_VALUE_GLOB = 103 3149 TCLVAR_VALUE_LIKE = 108 3150 TCLVAR_VALUE_REGEXP = 114 3151 FAULT_INJECT_NONE = 0 3152 FAULT_INJECT_PERSISTENT = 2 3153 FAULT_INJECT_TRANSIENT = 1 3154 TESTVFS_ACCESS_MASK = 0x00004000 3155 TESTVFS_ALL_MASK = 0x001FFFFF 3156 TESTVFS_CKLOCK_MASK = 0x00080000 3157 TESTVFS_CLOSE_MASK = 0x00000800 3158 TESTVFS_DELETE_MASK = 0x00000400 3159 TESTVFS_FCNTL_MASK = 0x00100000 3160 TESTVFS_FULLPATHNAME_MASK = 0x00008000 3161 TESTVFS_LOCK_MASK = 0x00040000 3162 TESTVFS_MAX_ARGS = 12 3163 TESTVFS_MAX_PAGES = 1024 3164 TESTVFS_OPEN_MASK = 0x00000100 3165 TESTVFS_READ_MASK = 0x00010000 3166 TESTVFS_SHMBARRIER_MASK = 0x00000040 3167 TESTVFS_SHMCLOSE_MASK = 0x00000080 3168 TESTVFS_SHMLOCK_MASK = 0x00000010 3169 TESTVFS_SHMMAP_MASK = 0x00000020 3170 TESTVFS_SHMOPEN_MASK = 0x00000001 3171 TESTVFS_SYNC_MASK = 0x00000200 3172 TESTVFS_TRUNCATE_MASK = 0x00002000 3173 TESTVFS_UNLOCK_MASK = 0x00020000 3174 TESTVFS_WRITE_MASK = 0x00001000 3175 ) 3176 3177 const ( 3178 PTHREAD_MUTEX_ERRORCHECK = 1 3179 PTHREAD_MUTEX_RECURSIVE = 2 3180 PTHREAD_MUTEX_NORMAL = 3 3181 PTHREAD_MUTEX_STRICT_NP = 4 3182 PTHREAD_MUTEX_TYPE_MAX = 5 3183 ) 3184 3185 const ( 3186 TCL_QUEUE_TAIL = 0 3187 TCL_QUEUE_HEAD = 1 3188 TCL_QUEUE_MARK = 2 3189 ) 3190 3191 const ( 3192 TCL_PATH_ABSOLUTE = 0 3193 TCL_PATH_RELATIVE = 1 3194 TCL_PATH_VOLUME_RELATIVE = 2 3195 ) 3196 3197 const ( 3198 TCL_INT = 0 3199 TCL_DOUBLE = 1 3200 TCL_EITHER = 2 3201 TCL_WIDE_INT = 3 3202 ) 3203 3204 type ptrdiff_t = int64 3205 3206 type size_t = uint64 3207 3208 type wchar_t = int32 3209 3210 type va_list = uintptr 3211 3212 type sqlite32 = struct { 3213 FpVfs uintptr 3214 FpVdbe uintptr 3215 FpDfltColl uintptr 3216 Fmutex uintptr 3217 FaDb uintptr 3218 FnDb int32 3219 FmDbFlags u32 3220 Fflags u64 3221 FlastRowid i64 3222 FszMmap i64 3223 FnSchemaLock u32 3224 FopenFlags uint32 3225 FerrCode int32 3226 FerrByteOffset int32 3227 FerrMask int32 3228 FiSysErrno int32 3229 FdbOptFlags u32 3230 Fenc u8 3231 FautoCommit u8 3232 Ftemp_store u8 3233 FmallocFailed u8 3234 FbBenignMalloc u8 3235 FdfltLockMode u8 3236 FnextAutovac int8 3237 FsuppressErr u8 3238 FvtabOnConflict u8 3239 FisTransactionSavepoint u8 3240 FmTrace u8 3241 FnoSharedCache u8 3242 FnSqlExec u8 3243 FeOpenState u8 3244 F__ccgo_pad1 [2]byte 3245 FnextPagesize int32 3246 FnChange i64 3247 FnTotalChange i64 3248 FaLimit [12]int32 3249 FnMaxSorterMmap int32 3250 F__ccgo_pad2 [4]byte 3251 Finit struct { 3252 FnewTnum Pgno 3253 FiDb u8 3254 Fbusy u8 3255 F__ccgo_pad1 [2]byte 3256 ForphanTrigger uint8 3257 F__ccgo_pad2 [7]byte 3258 FazInit uintptr 3259 } 3260 FnVdbeActive int32 3261 FnVdbeRead int32 3262 FnVdbeWrite int32 3263 FnVdbeExec int32 3264 FnVDestroy int32 3265 FnExtension int32 3266 FaExtension uintptr 3267 Ftrace struct{ FxLegacy uintptr } 3268 FpTraceArg uintptr 3269 FxProfile uintptr 3270 FpProfileArg uintptr 3271 FpCommitArg uintptr 3272 FxCommitCallback uintptr 3273 FpRollbackArg uintptr 3274 FxRollbackCallback uintptr 3275 FpUpdateArg uintptr 3276 FxUpdateCallback uintptr 3277 FpAutovacPagesArg uintptr 3278 FxAutovacDestr uintptr 3279 FxAutovacPages uintptr 3280 FpParse uintptr 3281 FpPreUpdateArg uintptr 3282 FxPreUpdateCallback uintptr 3283 FpPreUpdate uintptr 3284 FxWalCallback uintptr 3285 FpWalArg uintptr 3286 FxCollNeeded uintptr 3287 FxCollNeeded16 uintptr 3288 FpCollNeededArg uintptr 3289 FpErr uintptr 3290 Fu1 struct { 3291 F__ccgo_pad1 [0]uint64 3292 FisInterrupted int32 3293 F__ccgo_pad2 [4]byte 3294 } 3295 Flookaside Lookaside 3296 FxAuth sqlite3_xauth 3297 FpAuthArg uintptr 3298 FxProgress uintptr 3299 FpProgressArg uintptr 3300 FnProgressOps uint32 3301 FnVTrans int32 3302 FaModule Hash 3303 FpVtabCtx uintptr 3304 FaVTrans uintptr 3305 FpDisconnect uintptr 3306 FaFunc Hash 3307 FaCollSeq Hash 3308 FbusyHandler BusyHandler 3309 FaDbStatic [2]Db 3310 FpSavepoint uintptr 3311 FnAnalysisLimit int32 3312 FbusyTimeout int32 3313 FnSavepoint int32 3314 FnStatement int32 3315 FnDeferredCons i64 3316 FnDeferredImmCons i64 3317 FpnBytesFreed uintptr 3318 FpBlockingConnection uintptr 3319 FpUnlockConnection uintptr 3320 FpUnlockArg uintptr 3321 FxUnlockNotify uintptr 3322 FpNextBlocked uintptr 3323 } 3324 3325 type sqlite_int64 = int64 3326 type sqlite_uint64 = uint64 3327 type sqlite3_int64 = sqlite_int64 3328 type sqlite3_uint64 = sqlite_uint64 3329 3330 type sqlite3_callback = uintptr 3331 3332 type sqlite3_file1 = struct{ FpMethods uintptr } 3333 3334 type sqlite3_file = sqlite3_file1 3335 type sqlite3_io_methods1 = struct { 3336 FiVersion int32 3337 F__ccgo_pad1 [4]byte 3338 FxClose uintptr 3339 FxRead uintptr 3340 FxWrite uintptr 3341 FxTruncate uintptr 3342 FxSync uintptr 3343 FxFileSize uintptr 3344 FxLock uintptr 3345 FxUnlock uintptr 3346 FxCheckReservedLock uintptr 3347 FxFileControl uintptr 3348 FxSectorSize uintptr 3349 FxDeviceCharacteristics uintptr 3350 FxShmMap uintptr 3351 FxShmLock uintptr 3352 FxShmBarrier uintptr 3353 FxShmUnmap uintptr 3354 FxFetch uintptr 3355 FxUnfetch uintptr 3356 } 3357 3358 type sqlite3_io_methods = sqlite3_io_methods1 3359 3360 type sqlite3_mutex1 = struct { 3361 FpReal uintptr 3362 FeType int32 3363 F__ccgo_pad1 [4]byte 3364 } 3365 3366 type sqlite3_api_routines1 = struct { 3367 Faggregate_context uintptr 3368 Faggregate_count uintptr 3369 Fbind_blob uintptr 3370 Fbind_double uintptr 3371 Fbind_int uintptr 3372 Fbind_int64 uintptr 3373 Fbind_null uintptr 3374 Fbind_parameter_count uintptr 3375 Fbind_parameter_index uintptr 3376 Fbind_parameter_name uintptr 3377 Fbind_text uintptr 3378 Fbind_text16 uintptr 3379 Fbind_value uintptr 3380 Fbusy_handler uintptr 3381 Fbusy_timeout uintptr 3382 Fchanges uintptr 3383 Fclose uintptr 3384 Fcollation_needed uintptr 3385 Fcollation_needed16 uintptr 3386 Fcolumn_blob uintptr 3387 Fcolumn_bytes uintptr 3388 Fcolumn_bytes16 uintptr 3389 Fcolumn_count uintptr 3390 Fcolumn_database_name uintptr 3391 Fcolumn_database_name16 uintptr 3392 Fcolumn_decltype uintptr 3393 Fcolumn_decltype16 uintptr 3394 Fcolumn_double uintptr 3395 Fcolumn_int uintptr 3396 Fcolumn_int64 uintptr 3397 Fcolumn_name uintptr 3398 Fcolumn_name16 uintptr 3399 Fcolumn_origin_name uintptr 3400 Fcolumn_origin_name16 uintptr 3401 Fcolumn_table_name uintptr 3402 Fcolumn_table_name16 uintptr 3403 Fcolumn_text uintptr 3404 Fcolumn_text16 uintptr 3405 Fcolumn_type uintptr 3406 Fcolumn_value uintptr 3407 Fcommit_hook uintptr 3408 Fcomplete uintptr 3409 Fcomplete16 uintptr 3410 Fcreate_collation uintptr 3411 Fcreate_collation16 uintptr 3412 Fcreate_function uintptr 3413 Fcreate_function16 uintptr 3414 Fcreate_module uintptr 3415 Fdata_count uintptr 3416 Fdb_handle uintptr 3417 Fdeclare_vtab uintptr 3418 Fenable_shared_cache uintptr 3419 Ferrcode uintptr 3420 Ferrmsg uintptr 3421 Ferrmsg16 uintptr 3422 Fexec uintptr 3423 Fexpired uintptr 3424 Ffinalize uintptr 3425 Ffree uintptr 3426 Ffree_table uintptr 3427 Fget_autocommit uintptr 3428 Fget_auxdata uintptr 3429 Fget_table uintptr 3430 Fglobal_recover uintptr 3431 Finterruptx uintptr 3432 Flast_insert_rowid uintptr 3433 Flibversion uintptr 3434 Flibversion_number uintptr 3435 Fmalloc uintptr 3436 Fmprintf uintptr 3437 Fopen uintptr 3438 Fopen16 uintptr 3439 Fprepare uintptr 3440 Fprepare16 uintptr 3441 Fprofile uintptr 3442 Fprogress_handler uintptr 3443 Frealloc uintptr 3444 Freset uintptr 3445 Fresult_blob uintptr 3446 Fresult_double uintptr 3447 Fresult_error uintptr 3448 Fresult_error16 uintptr 3449 Fresult_int uintptr 3450 Fresult_int64 uintptr 3451 Fresult_null uintptr 3452 Fresult_text uintptr 3453 Fresult_text16 uintptr 3454 Fresult_text16be uintptr 3455 Fresult_text16le uintptr 3456 Fresult_value uintptr 3457 Frollback_hook uintptr 3458 Fset_authorizer uintptr 3459 Fset_auxdata uintptr 3460 Fxsnprintf uintptr 3461 Fstep uintptr 3462 Ftable_column_metadata uintptr 3463 Fthread_cleanup uintptr 3464 Ftotal_changes uintptr 3465 Ftrace uintptr 3466 Ftransfer_bindings uintptr 3467 Fupdate_hook uintptr 3468 Fuser_data uintptr 3469 Fvalue_blob uintptr 3470 Fvalue_bytes uintptr 3471 Fvalue_bytes16 uintptr 3472 Fvalue_double uintptr 3473 Fvalue_int uintptr 3474 Fvalue_int64 uintptr 3475 Fvalue_numeric_type uintptr 3476 Fvalue_text uintptr 3477 Fvalue_text16 uintptr 3478 Fvalue_text16be uintptr 3479 Fvalue_text16le uintptr 3480 Fvalue_type uintptr 3481 Fvmprintf uintptr 3482 Foverload_function uintptr 3483 Fprepare_v2 uintptr 3484 Fprepare16_v2 uintptr 3485 Fclear_bindings uintptr 3486 Fcreate_module_v2 uintptr 3487 Fbind_zeroblob uintptr 3488 Fblob_bytes uintptr 3489 Fblob_close uintptr 3490 Fblob_open uintptr 3491 Fblob_read uintptr 3492 Fblob_write uintptr 3493 Fcreate_collation_v2 uintptr 3494 Ffile_control uintptr 3495 Fmemory_highwater uintptr 3496 Fmemory_used uintptr 3497 Fmutex_alloc uintptr 3498 Fmutex_enter uintptr 3499 Fmutex_free uintptr 3500 Fmutex_leave uintptr 3501 Fmutex_try uintptr 3502 Fopen_v2 uintptr 3503 Frelease_memory uintptr 3504 Fresult_error_nomem uintptr 3505 Fresult_error_toobig uintptr 3506 Fsleep uintptr 3507 Fsoft_heap_limit uintptr 3508 Fvfs_find uintptr 3509 Fvfs_register uintptr 3510 Fvfs_unregister uintptr 3511 Fxthreadsafe uintptr 3512 Fresult_zeroblob uintptr 3513 Fresult_error_code uintptr 3514 Ftest_control uintptr 3515 Frandomness uintptr 3516 Fcontext_db_handle uintptr 3517 Fextended_result_codes uintptr 3518 Flimit uintptr 3519 Fnext_stmt uintptr 3520 Fsql uintptr 3521 Fstatus uintptr 3522 Fbackup_finish uintptr 3523 Fbackup_init uintptr 3524 Fbackup_pagecount uintptr 3525 Fbackup_remaining uintptr 3526 Fbackup_step uintptr 3527 Fcompileoption_get uintptr 3528 Fcompileoption_used uintptr 3529 Fcreate_function_v2 uintptr 3530 Fdb_config uintptr 3531 Fdb_mutex uintptr 3532 Fdb_status uintptr 3533 Fextended_errcode uintptr 3534 Flog uintptr 3535 Fsoft_heap_limit64 uintptr 3536 Fsourceid uintptr 3537 Fstmt_status uintptr 3538 Fstrnicmp uintptr 3539 Funlock_notify uintptr 3540 Fwal_autocheckpoint uintptr 3541 Fwal_checkpoint uintptr 3542 Fwal_hook uintptr 3543 Fblob_reopen uintptr 3544 Fvtab_config uintptr 3545 Fvtab_on_conflict uintptr 3546 Fclose_v2 uintptr 3547 Fdb_filename uintptr 3548 Fdb_readonly uintptr 3549 Fdb_release_memory uintptr 3550 Ferrstr uintptr 3551 Fstmt_busy uintptr 3552 Fstmt_readonly uintptr 3553 Fstricmp uintptr 3554 Furi_boolean uintptr 3555 Furi_int64 uintptr 3556 Furi_parameter uintptr 3557 Fxvsnprintf uintptr 3558 Fwal_checkpoint_v2 uintptr 3559 Fauto_extension uintptr 3560 Fbind_blob64 uintptr 3561 Fbind_text64 uintptr 3562 Fcancel_auto_extension uintptr 3563 Fload_extension uintptr 3564 Fmalloc64 uintptr 3565 Fmsize uintptr 3566 Frealloc64 uintptr 3567 Freset_auto_extension uintptr 3568 Fresult_blob64 uintptr 3569 Fresult_text64 uintptr 3570 Fstrglob uintptr 3571 Fvalue_dup uintptr 3572 Fvalue_free uintptr 3573 Fresult_zeroblob64 uintptr 3574 Fbind_zeroblob64 uintptr 3575 Fvalue_subtype uintptr 3576 Fresult_subtype uintptr 3577 Fstatus64 uintptr 3578 Fstrlike uintptr 3579 Fdb_cacheflush uintptr 3580 Fsystem_errno uintptr 3581 Ftrace_v2 uintptr 3582 Fexpanded_sql uintptr 3583 Fset_last_insert_rowid uintptr 3584 Fprepare_v3 uintptr 3585 Fprepare16_v3 uintptr 3586 Fbind_pointer uintptr 3587 Fresult_pointer uintptr 3588 Fvalue_pointer uintptr 3589 Fvtab_nochange uintptr 3590 Fvalue_nochange uintptr 3591 Fvtab_collation uintptr 3592 Fkeyword_count uintptr 3593 Fkeyword_name uintptr 3594 Fkeyword_check uintptr 3595 Fstr_new uintptr 3596 Fstr_finish uintptr 3597 Fstr_appendf uintptr 3598 Fstr_vappendf uintptr 3599 Fstr_append uintptr 3600 Fstr_appendall uintptr 3601 Fstr_appendchar uintptr 3602 Fstr_reset uintptr 3603 Fstr_errcode uintptr 3604 Fstr_length uintptr 3605 Fstr_value uintptr 3606 Fcreate_window_function uintptr 3607 Fnormalized_sql uintptr 3608 Fstmt_isexplain uintptr 3609 Fvalue_frombind uintptr 3610 Fdrop_modules uintptr 3611 Fhard_heap_limit64 uintptr 3612 Furi_key uintptr 3613 Ffilename_database uintptr 3614 Ffilename_journal uintptr 3615 Ffilename_wal uintptr 3616 Fcreate_filename uintptr 3617 Ffree_filename uintptr 3618 Fdatabase_file_object uintptr 3619 Ftxn_state uintptr 3620 Fchanges64 uintptr 3621 Ftotal_changes64 uintptr 3622 Fautovacuum_pages uintptr 3623 Ferror_offset uintptr 3624 Fvtab_rhs_value uintptr 3625 Fvtab_distinct uintptr 3626 Fvtab_in uintptr 3627 Fvtab_in_first uintptr 3628 Fvtab_in_next uintptr 3629 Fdeserialize uintptr 3630 Fserialize uintptr 3631 Fdb_name uintptr 3632 } 3633 3634 type sqlite3_vfs1 = struct { 3635 FiVersion int32 3636 FszOsFile int32 3637 FmxPathname int32 3638 F__ccgo_pad1 [4]byte 3639 FpNext uintptr 3640 FzName uintptr 3641 FpAppData uintptr 3642 FxOpen uintptr 3643 FxDelete uintptr 3644 FxAccess uintptr 3645 FxFullPathname uintptr 3646 FxDlOpen uintptr 3647 FxDlError uintptr 3648 FxDlSym uintptr 3649 FxDlClose uintptr 3650 FxRandomness uintptr 3651 FxSleep uintptr 3652 FxCurrentTime uintptr 3653 FxGetLastError uintptr 3654 FxCurrentTimeInt64 uintptr 3655 FxSetSystemCall uintptr 3656 FxGetSystemCall uintptr 3657 FxNextSystemCall uintptr 3658 } 3659 3660 type sqlite3_vfs = sqlite3_vfs1 3661 type sqlite3_syscall_ptr = uintptr 3662 3663 type sqlite3_mem_methods1 = struct { 3664 FxMalloc uintptr 3665 FxFree uintptr 3666 FxRealloc uintptr 3667 FxSize uintptr 3668 FxRoundup uintptr 3669 FxInit uintptr 3670 FxShutdown uintptr 3671 FpAppData uintptr 3672 } 3673 3674 type sqlite3_mem_methods = sqlite3_mem_methods1 3675 3676 type sqlite3_value1 = struct { 3677 Fu struct{ Fr float64 } 3678 Fz uintptr 3679 Fn int32 3680 Fflags u16 3681 Fenc u8 3682 FeSubtype u8 3683 Fdb uintptr 3684 FszMalloc int32 3685 FuTemp u32 3686 FzMalloc uintptr 3687 FxDel uintptr 3688 } 3689 3690 type sqlite3_context1 = struct { 3691 FpOut uintptr 3692 FpFunc uintptr 3693 FpMem uintptr 3694 FpVdbe uintptr 3695 FiOp int32 3696 FisError int32 3697 Fenc u8 3698 FskipFlag u8 3699 Fargc u8 3700 F__ccgo_pad1 [5]byte 3701 Fargv [1]uintptr 3702 } 3703 3704 type sqlite3_destructor_type = uintptr 3705 3706 type sqlite3_vtab1 = struct { 3707 FpModule uintptr 3708 FnRef int32 3709 F__ccgo_pad1 [4]byte 3710 FzErrMsg uintptr 3711 } 3712 3713 type sqlite3_vtab = sqlite3_vtab1 3714 type sqlite3_index_info1 = struct { 3715 FnConstraint int32 3716 F__ccgo_pad1 [4]byte 3717 FaConstraint uintptr 3718 FnOrderBy int32 3719 F__ccgo_pad2 [4]byte 3720 FaOrderBy uintptr 3721 FaConstraintUsage uintptr 3722 FidxNum int32 3723 F__ccgo_pad3 [4]byte 3724 FidxStr uintptr 3725 FneedToFreeIdxStr int32 3726 ForderByConsumed int32 3727 FestimatedCost float64 3728 FestimatedRows sqlite3_int64 3729 FidxFlags int32 3730 F__ccgo_pad4 [4]byte 3731 FcolUsed sqlite3_uint64 3732 } 3733 3734 type sqlite3_index_info = sqlite3_index_info1 3735 type sqlite3_vtab_cursor1 = struct{ FpVtab uintptr } 3736 3737 type sqlite3_vtab_cursor = sqlite3_vtab_cursor1 3738 type sqlite3_module1 = struct { 3739 FiVersion int32 3740 F__ccgo_pad1 [4]byte 3741 FxCreate uintptr 3742 FxConnect uintptr 3743 FxBestIndex uintptr 3744 FxDisconnect uintptr 3745 FxDestroy uintptr 3746 FxOpen uintptr 3747 FxClose uintptr 3748 FxFilter uintptr 3749 FxNext uintptr 3750 FxEof uintptr 3751 FxColumn uintptr 3752 FxRowid uintptr 3753 FxUpdate uintptr 3754 FxBegin uintptr 3755 FxSync uintptr 3756 FxCommit uintptr 3757 FxRollback uintptr 3758 FxFindFunction uintptr 3759 FxRename uintptr 3760 FxSavepoint uintptr 3761 FxRelease uintptr 3762 FxRollbackTo uintptr 3763 FxShadowName uintptr 3764 } 3765 3766 type sqlite3_module = sqlite3_module1 3767 3768 type sqlite3_index_constraint = struct { 3769 FiColumn int32 3770 Fop uint8 3771 Fusable uint8 3772 F__ccgo_pad1 [2]byte 3773 FiTermOffset int32 3774 } 3775 3776 type sqlite3_index_orderby = struct { 3777 FiColumn int32 3778 Fdesc uint8 3779 F__ccgo_pad1 [3]byte 3780 } 3781 3782 type sqlite3_index_constraint_usage = struct { 3783 FargvIndex int32 3784 Fomit uint8 3785 F__ccgo_pad1 [3]byte 3786 } 3787 3788 type sqlite3_mutex_methods1 = struct { 3789 FxMutexInit uintptr 3790 FxMutexEnd uintptr 3791 FxMutexAlloc uintptr 3792 FxMutexFree uintptr 3793 FxMutexEnter uintptr 3794 FxMutexTry uintptr 3795 FxMutexLeave uintptr 3796 FxMutexHeld uintptr 3797 FxMutexNotheld uintptr 3798 } 3799 3800 type sqlite3_mutex_methods = sqlite3_mutex_methods1 3801 3802 type sqlite3_str1 = struct { 3803 Fdb uintptr 3804 FzText uintptr 3805 FnAlloc u32 3806 FmxAlloc u32 3807 FnChar u32 3808 FaccError u8 3809 FprintfFlags u8 3810 F__ccgo_pad1 [2]byte 3811 } 3812 3813 type sqlite3_pcache_page1 = struct { 3814 FpBuf uintptr 3815 FpExtra uintptr 3816 } 3817 3818 type sqlite3_pcache_page = sqlite3_pcache_page1 3819 3820 type sqlite3_pcache_methods21 = struct { 3821 FiVersion int32 3822 F__ccgo_pad1 [4]byte 3823 FpArg uintptr 3824 FxInit uintptr 3825 FxShutdown uintptr 3826 FxCreate uintptr 3827 FxCachesize uintptr 3828 FxPagecount uintptr 3829 FxFetch uintptr 3830 FxUnpin uintptr 3831 FxRekey uintptr 3832 FxTruncate uintptr 3833 FxDestroy uintptr 3834 FxShrink uintptr 3835 } 3836 3837 type sqlite3_pcache_methods2 = sqlite3_pcache_methods21 3838 3839 type sqlite3_pcache_methods1 = struct { 3840 FpArg uintptr 3841 FxInit uintptr 3842 FxShutdown uintptr 3843 FxCreate uintptr 3844 FxCachesize uintptr 3845 FxPagecount uintptr 3846 FxFetch uintptr 3847 FxUnpin uintptr 3848 FxRekey uintptr 3849 FxTruncate uintptr 3850 FxDestroy uintptr 3851 } 3852 3853 type sqlite3_pcache_methods = sqlite3_pcache_methods1 3854 3855 type sqlite3_snapshot1 = struct{ Fhidden [48]uint8 } 3856 3857 type sqlite3_snapshot = sqlite3_snapshot1 3858 3859 type sqlite3_rtree_geometry1 = struct { 3860 FpContext uintptr 3861 FnParam int32 3862 F__ccgo_pad1 [4]byte 3863 FaParam uintptr 3864 FpUser uintptr 3865 FxDelUser uintptr 3866 } 3867 3868 type sqlite3_rtree_geometry = sqlite3_rtree_geometry1 3869 type sqlite3_rtree_query_info1 = struct { 3870 FpContext uintptr 3871 FnParam int32 3872 F__ccgo_pad1 [4]byte 3873 FaParam uintptr 3874 FpUser uintptr 3875 FxDelUser uintptr 3876 FaCoord uintptr 3877 FanQueue uintptr 3878 FnCoord int32 3879 FiLevel int32 3880 FmxLevel int32 3881 F__ccgo_pad2 [4]byte 3882 FiRowid sqlite3_int64 3883 FrParentScore sqlite3_rtree_dbl 3884 FeParentWithin int32 3885 FeWithin int32 3886 FrScore sqlite3_rtree_dbl 3887 FapSqlParam uintptr 3888 } 3889 3890 type sqlite3_rtree_query_info = sqlite3_rtree_query_info1 3891 3892 type sqlite3_rtree_dbl = float64 3893 3894 type Fts5ExtensionApi1 = struct { 3895 FiVersion int32 3896 F__ccgo_pad1 [4]byte 3897 FxUserData uintptr 3898 FxColumnCount uintptr 3899 FxRowCount uintptr 3900 FxColumnTotalSize uintptr 3901 FxTokenize uintptr 3902 FxPhraseCount uintptr 3903 FxPhraseSize uintptr 3904 FxInstCount uintptr 3905 FxInst uintptr 3906 FxRowid uintptr 3907 FxColumnText uintptr 3908 FxColumnSize uintptr 3909 FxQueryPhrase uintptr 3910 FxSetAuxdata uintptr 3911 FxGetAuxdata uintptr 3912 FxPhraseFirst uintptr 3913 FxPhraseNext uintptr 3914 FxPhraseFirstColumn uintptr 3915 FxPhraseNextColumn uintptr 3916 } 3917 3918 type Fts5ExtensionApi = Fts5ExtensionApi1 3919 type Fts5PhraseIter1 = struct { 3920 Fa uintptr 3921 Fb uintptr 3922 } 3923 3924 type Fts5PhraseIter = Fts5PhraseIter1 3925 3926 type fts5_extension_function = uintptr 3927 type fts5_tokenizer1 = struct { 3928 FxCreate uintptr 3929 FxDelete uintptr 3930 FxTokenize uintptr 3931 } 3932 3933 type fts5_tokenizer = fts5_tokenizer1 3934 3935 type fts5_api1 = struct { 3936 FiVersion int32 3937 F__ccgo_pad1 [4]byte 3938 FxCreateTokenizer uintptr 3939 FxFindTokenizer uintptr 3940 FxCreateFunction uintptr 3941 } 3942 3943 type fts5_api = fts5_api1 3944 3945 type sqlite3expert1 = struct { 3946 FiSample int32 3947 F__ccgo_pad1 [4]byte 3948 Fdb uintptr 3949 Fdbm uintptr 3950 Fdbv uintptr 3951 FpTable uintptr 3952 FpScan uintptr 3953 FpWrite uintptr 3954 FpStatement uintptr 3955 FbRun int32 3956 F__ccgo_pad2 [4]byte 3957 FpzErrmsg uintptr 3958 Frc int32 3959 F__ccgo_pad3 [4]byte 3960 FhIdx IdxHash 3961 FzCandidates uintptr 3962 } 3963 3964 type sqlite3expert = sqlite3expert1 3965 3966 type locale_t = uintptr 3967 3968 type u_char = uint8 3969 type u_short = uint16 3970 type u_int = uint32 3971 type u_long = uint64 3972 3973 type unchar = uint8 3974 type ushort = uint16 3975 type uint = uint32 3976 type ulong = uint64 3977 3978 type cpuid_t = uint64 3979 type register_t = int64 3980 3981 type int8_t = int8 3982 3983 type uint8_t = uint8 3984 3985 type int16_t = int16 3986 3987 type uint16_t = uint16 3988 3989 type int32_t = int32 3990 3991 type uint32_t = uint32 3992 3993 type int64_t = int64 3994 3995 type uint64_t = uint64 3996 3997 type u_int8_t = uint8 3998 type u_int16_t = uint16 3999 type u_int32_t = uint32 4000 type u_int64_t = uint64 4001 4002 type quad_t = int64 4003 type u_quad_t = uint64 4004 4005 type vaddr_t = uint64 4006 type paddr_t = uint64 4007 type vsize_t = uint64 4008 type psize_t = uint64 4009 4010 type blkcnt_t = int64 4011 type blksize_t = int32 4012 type caddr_t = uintptr 4013 type daddr32_t = int32 4014 type daddr_t = int64 4015 type dev_t = int32 4016 type fixpt_t = uint32 4017 type gid_t = uint32 4018 type id_t = uint32 4019 type ino_t = uint64 4020 type key_t = int64 4021 type mode_t = uint32 4022 type nlink_t = uint32 4023 type rlim_t = uint64 4024 type segsz_t = int32 4025 type uid_t = uint32 4026 type useconds_t = uint32 4027 type suseconds_t = int64 4028 type fsblkcnt_t = uint64 4029 type fsfilcnt_t = uint64 4030 4031 type clock_t = int64 4032 4033 type clockid_t = int32 4034 4035 type pid_t = int32 4036 4037 type ssize_t = int64 4038 4039 type time_t = int64 4040 4041 type timer_t = int32 4042 4043 type off_t = int64 4044 4045 type fpos_t = off_t 4046 4047 type __sbuf = struct { 4048 F_base uintptr 4049 F_size int32 4050 F__ccgo_pad1 [4]byte 4051 } 4052 4053 type __sFILE = struct { 4054 F_p uintptr 4055 F_r int32 4056 F_w int32 4057 F_flags int16 4058 F_file int16 4059 F__ccgo_pad1 [4]byte 4060 F_bf struct { 4061 F_base uintptr 4062 F_size int32 4063 F__ccgo_pad1 [4]byte 4064 } 4065 F_lbfsize int32 4066 F__ccgo_pad2 [4]byte 4067 F_cookie uintptr 4068 F_close uintptr 4069 F_read uintptr 4070 F_seek uintptr 4071 F_write uintptr 4072 F_ext struct { 4073 F_base uintptr 4074 F_size int32 4075 F__ccgo_pad1 [4]byte 4076 } 4077 F_up uintptr 4078 F_ur int32 4079 F_ubuf [3]uint8 4080 F_nbuf [1]uint8 4081 F_lb struct { 4082 F_base uintptr 4083 F_size int32 4084 F__ccgo_pad1 [4]byte 4085 } 4086 F_blksize int32 4087 F__ccgo_pad3 [4]byte 4088 F_offset fpos_t 4089 } 4090 4091 type FILE = __sFILE 4092 4093 type i64 = sqlite3_int64 4094 type u64 = sqlite3_uint64 4095 4096 type IdxColumn1 = struct { 4097 FzName uintptr 4098 FzColl uintptr 4099 FiPk int32 4100 F__ccgo_pad1 [4]byte 4101 } 4102 4103 type IdxColumn = IdxColumn1 4104 type IdxConstraint1 = struct { 4105 FzColl uintptr 4106 FbRange int32 4107 FiCol int32 4108 FbFlag int32 4109 FbDesc int32 4110 FpNext uintptr 4111 FpLink uintptr 4112 } 4113 4114 type IdxConstraint = IdxConstraint1 4115 type IdxScan1 = struct { 4116 FpTab uintptr 4117 FiDb int32 4118 F__ccgo_pad1 [4]byte 4119 Fcovering i64 4120 FpOrder uintptr 4121 FpEq uintptr 4122 FpRange uintptr 4123 FpNextScan uintptr 4124 } 4125 4126 type IdxScan = IdxScan1 4127 type IdxStatement1 = struct { 4128 FiId int32 4129 F__ccgo_pad1 [4]byte 4130 FzSql uintptr 4131 FzIdx uintptr 4132 FzEQP uintptr 4133 FpNext uintptr 4134 } 4135 4136 type IdxStatement = IdxStatement1 4137 type IdxTable1 = struct { 4138 FnCol int32 4139 F__ccgo_pad1 [4]byte 4140 FzName uintptr 4141 FaCol uintptr 4142 FpNext uintptr 4143 } 4144 4145 type IdxTable = IdxTable1 4146 type IdxWrite1 = struct { 4147 FpTab uintptr 4148 FeOp int32 4149 F__ccgo_pad1 [4]byte 4150 FpNext uintptr 4151 } 4152 4153 type IdxWrite = IdxWrite1 4154 4155 type IdxHashEntry1 = struct { 4156 FzKey uintptr 4157 FzVal uintptr 4158 FzVal2 uintptr 4159 FpHashNext uintptr 4160 FpNext uintptr 4161 } 4162 4163 type IdxHashEntry = IdxHashEntry1 4164 type IdxHash1 = struct { 4165 FpFirst uintptr 4166 FaHash [1023]uintptr 4167 } 4168 4169 type IdxHash = IdxHash1 4170 4171 func idxMalloc(tls *libc.TLS, pRc uintptr, nByte int32) uintptr { 4172 var pRet uintptr 4173 4174 pRet = sqlite3.Xsqlite3_malloc(tls, nByte) 4175 if pRet != 0 { 4176 libc.Xmemset(tls, pRet, 0, uint64(nByte)) 4177 } else { 4178 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4179 } 4180 return pRet 4181 } 4182 4183 func idxHashInit(tls *libc.TLS, pHash uintptr) { 4184 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 4185 } 4186 4187 func idxHashClear(tls *libc.TLS, pHash uintptr) { 4188 var i int32 4189 for i = 0; i < IDX_HASH_SIZE; i++ { 4190 var pEntry uintptr 4191 var pNext uintptr 4192 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(i)*8)); pEntry != 0; pEntry = pNext { 4193 pNext = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext 4194 sqlite3.Xsqlite3_free(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2) 4195 sqlite3.Xsqlite3_free(tls, pEntry) 4196 } 4197 } 4198 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 4199 } 4200 4201 func idxHashString(tls *libc.TLS, z uintptr, n int32) int32 { 4202 var ret uint32 = uint32(0) 4203 var i int32 4204 for i = 0; i < n; i++ { 4205 ret = ret + (ret<<3 + uint32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))))) 4206 } 4207 return int32(ret % uint32(IDX_HASH_SIZE)) 4208 } 4209 4210 func idxHashAdd(tls *libc.TLS, pRc uintptr, pHash uintptr, zKey uintptr, zVal uintptr) int32 { 4211 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 4212 var iHash int32 = idxHashString(tls, zKey, nKey) 4213 var nVal int32 = func() int32 { 4214 if zVal != 0 { 4215 return int32(libc.Xstrlen(tls, zVal)) 4216 } 4217 return 0 4218 }() 4219 var pEntry uintptr 4220 4221 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4222 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 4223 return 1 4224 } 4225 } 4226 pEntry = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxHashEntry{}))+uint64(nKey)+uint64(1)+uint64(nVal)+uint64(1))) 4227 if pEntry != 0 { 4228 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey = pEntry + 1*40 4229 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) 4230 if zVal != 0 { 4231 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey + uintptr(nKey+1) 4232 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, zVal, uint64(nVal)) 4233 } 4234 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) 4235 *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) = pEntry 4236 4237 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext = (*IdxHash)(unsafe.Pointer(pHash)).FpFirst 4238 (*IdxHash)(unsafe.Pointer(pHash)).FpFirst = pEntry 4239 } 4240 return 0 4241 } 4242 4243 func idxHashFind(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4244 var iHash int32 4245 var pEntry uintptr 4246 if nKey < 0 { 4247 nKey = int32(libc.Xstrlen(tls, zKey)) 4248 } 4249 iHash = idxHashString(tls, zKey, nKey) 4250 4251 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4252 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 4253 return pEntry 4254 } 4255 } 4256 return uintptr(0) 4257 } 4258 4259 func idxHashSearch(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4260 var pEntry uintptr = idxHashFind(tls, pHash, zKey, nKey) 4261 if pEntry != 0 { 4262 return (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal 4263 } 4264 return uintptr(0) 4265 } 4266 4267 func idxNewConstraint(tls *libc.TLS, pRc uintptr, zColl uintptr) uintptr { 4268 var pNew uintptr 4269 var nColl int32 = int32(libc.Xstrlen(tls, zColl)) 4270 4271 pNew = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxConstraint{}))*uint64(nColl)+uint64(1))) 4272 if pNew != 0 { 4273 (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl = pNew + 1*40 4274 libc.Xmemcpy(tls, (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl, zColl, uint64(nColl+1)) 4275 } 4276 return pNew 4277 } 4278 4279 func idxDatabaseError(tls *libc.TLS, db uintptr, pzErrmsg uintptr) { 4280 bp := tls.Alloc(8) 4281 defer tls.Free(8) 4282 4283 *(*uintptr)(unsafe.Pointer(pzErrmsg)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 4284 } 4285 4286 func idxPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zSql uintptr) int32 { 4287 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, ppStmt, uintptr(0)) 4288 if rc != SQLITE_OK { 4289 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 4290 idxDatabaseError(tls, db, pzErrmsg) 4291 } 4292 return rc 4293 } 4294 4295 func idxPrintfPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zFmt uintptr, va uintptr) int32 { 4296 var ap va_list 4297 _ = ap 4298 var rc int32 4299 var zSql uintptr 4300 ap = va 4301 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 4302 if zSql == uintptr(0) { 4303 rc = SQLITE_NOMEM 4304 } else { 4305 rc = idxPrepareStmt(tls, db, ppStmt, pzErrmsg, zSql) 4306 sqlite3.Xsqlite3_free(tls, zSql) 4307 } 4308 _ = ap 4309 return rc 4310 } 4311 4312 type ExpertVtab1 = struct { 4313 Fbase sqlite3_vtab 4314 FpTab uintptr 4315 FpExpert uintptr 4316 } 4317 4318 type ExpertVtab = ExpertVtab1 4319 4320 type ExpertCsr1 = struct { 4321 Fbase sqlite3_vtab_cursor 4322 FpData uintptr 4323 } 4324 4325 type ExpertCsr = ExpertCsr1 4326 4327 func expertDequote(tls *libc.TLS, zIn uintptr) uintptr { 4328 var n int32 = int32(libc.Xstrlen(tls, zIn)) 4329 var zRet uintptr = sqlite3.Xsqlite3_malloc(tls, n) 4330 4331 if zRet != 0 { 4332 var iOut int32 = 0 4333 var iIn int32 = 0 4334 for iIn = 1; iIn < n-1; iIn++ { 4335 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == '\'' { 4336 iIn++ 4337 } 4338 *(*int8)(unsafe.Pointer(zRet + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 4339 } 4340 *(*int8)(unsafe.Pointer(zRet + uintptr(iOut))) = int8(0) 4341 } 4342 4343 return zRet 4344 } 4345 4346 func expertConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 4347 bp := tls.Alloc(4) 4348 defer tls.Free(4) 4349 4350 var pExpert uintptr = pAux 4351 var p uintptr = uintptr(0) 4352 4353 if argc != 4 { 4354 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3, 0) 4355 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 4356 } else { 4357 var zCreateTable uintptr = expertDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 4358 if zCreateTable != 0 { 4359 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 4360 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4361 p = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertVtab{}))) 4362 } 4363 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4364 (*ExpertVtab)(unsafe.Pointer(p)).FpExpert = pExpert 4365 (*ExpertVtab)(unsafe.Pointer(p)).FpTab = (*sqlite3expert)(unsafe.Pointer(pExpert)).FpTable 4366 4367 } 4368 sqlite3.Xsqlite3_free(tls, zCreateTable) 4369 } else { 4370 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 4371 } 4372 } 4373 4374 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 4375 return *(*int32)(unsafe.Pointer(bp)) 4376 } 4377 4378 func expertDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 4379 var p uintptr = pVtab 4380 sqlite3.Xsqlite3_free(tls, p) 4381 return SQLITE_OK 4382 } 4383 4384 func expertBestIndex(tls *libc.TLS, pVtab uintptr, pIdxInfo uintptr) int32 { 4385 bp := tls.Alloc(4) 4386 defer tls.Free(4) 4387 4388 var p uintptr = pVtab 4389 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4390 var n int32 = 0 4391 var pScan uintptr 4392 var opmask int32 = SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | SQLITE_INDEX_CONSTRAINT_LE 4393 4394 pScan = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxScan{}))) 4395 if pScan != 0 { 4396 var i int32 4397 4398 (*IdxScan)(unsafe.Pointer(pScan)).FpTab = (*ExpertVtab)(unsafe.Pointer(p)).FpTab 4399 (*IdxScan)(unsafe.Pointer(pScan)).FpNextScan = (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan 4400 (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan = pScan 4401 4402 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 4403 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 4404 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 4405 (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn >= 0 && 4406 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)*24)).FiPk == 0 && 4407 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop)&opmask != 0 { 4408 var pNew uintptr 4409 var zColl uintptr = sqlite3.Xsqlite3_vtab_collation(tls, pIdxInfo, i) 4410 pNew = idxNewConstraint(tls, bp, zColl) 4411 if pNew != 0 { 4412 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn 4413 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 4414 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpEq 4415 (*IdxScan)(unsafe.Pointer(pScan)).FpEq = pNew 4416 } else { 4417 (*IdxConstraint)(unsafe.Pointer(pNew)).FbRange = 1 4418 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpRange 4419 (*IdxScan)(unsafe.Pointer(pScan)).FpRange = pNew 4420 } 4421 } 4422 n++ 4423 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = n 4424 } 4425 } 4426 4427 for i = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy - 1; i >= 0; i-- { 4428 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 4429 if iCol >= 0 { 4430 var pNew uintptr = idxNewConstraint(tls, bp, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr(iCol)*24)).FzColl) 4431 if pNew != 0 { 4432 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = iCol 4433 (*IdxConstraint)(unsafe.Pointer(pNew)).FbDesc = int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).Fdesc) 4434 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4435 (*IdxConstraint)(unsafe.Pointer(pNew)).FpLink = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4436 (*IdxScan)(unsafe.Pointer(pScan)).FpOrder = pNew 4437 n++ 4438 } 4439 } 4440 } 4441 } 4442 4443 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000.0 / float64(n+1) 4444 return *(*int32)(unsafe.Pointer(bp)) 4445 } 4446 4447 func expertUpdate(tls *libc.TLS, pVtab uintptr, nData int32, azData uintptr, pRowid uintptr) int32 { 4448 _ = pVtab 4449 _ = nData 4450 _ = azData 4451 _ = pRowid 4452 return SQLITE_OK 4453 } 4454 4455 func expertOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 4456 bp := tls.Alloc(4) 4457 defer tls.Free(4) 4458 4459 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4460 var pCsr uintptr 4461 _ = pVTab 4462 pCsr = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertCsr{}))) 4463 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 4464 return *(*int32)(unsafe.Pointer(bp)) 4465 } 4466 4467 func expertClose(tls *libc.TLS, cur uintptr) int32 { 4468 var pCsr uintptr = cur 4469 sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4470 sqlite3.Xsqlite3_free(tls, pCsr) 4471 return SQLITE_OK 4472 } 4473 4474 func expertEof(tls *libc.TLS, cur uintptr) int32 { 4475 var pCsr uintptr = cur 4476 return libc.Bool32((*ExpertCsr)(unsafe.Pointer(pCsr)).FpData == uintptr(0)) 4477 } 4478 4479 func expertNext(tls *libc.TLS, cur uintptr) int32 { 4480 var pCsr uintptr = cur 4481 var rc int32 = SQLITE_OK 4482 4483 rc = sqlite3.Xsqlite3_step(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4484 if rc != SQLITE_ROW { 4485 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4486 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4487 } else { 4488 rc = SQLITE_OK 4489 } 4490 4491 return rc 4492 } 4493 4494 func expertRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 4495 _ = cur 4496 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 4497 return SQLITE_OK 4498 } 4499 4500 func expertColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 4501 var pCsr uintptr = cur 4502 var pVal uintptr 4503 pVal = sqlite3.Xsqlite3_column_value(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData, i) 4504 if pVal != 0 { 4505 sqlite3.Xsqlite3_result_value(tls, ctx, pVal) 4506 } 4507 return SQLITE_OK 4508 } 4509 4510 func expertFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 4511 bp := tls.Alloc(8) 4512 defer tls.Free(8) 4513 4514 var pCsr uintptr = cur 4515 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 4516 var pExpert uintptr = (*ExpertVtab)(unsafe.Pointer(pVtab)).FpExpert 4517 var rc int32 4518 4519 _ = idxNum 4520 _ = idxStr 4521 _ = argc 4522 _ = argv 4523 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4524 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4525 if rc == SQLITE_OK { 4526 rc = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pExpert)).Fdb, pCsr+8, pVtab+16, 4527 ts+19, libc.VaList(bp, (*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(pVtab)).FpTab)).FzName)) 4528 } 4529 4530 if rc == SQLITE_OK { 4531 rc = expertNext(tls, cur) 4532 } 4533 return rc 4534 } 4535 4536 func idxRegisterVtab(tls *libc.TLS, p uintptr) int32 { 4537 return sqlite3.Xsqlite3_create_module(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+56, uintptr(unsafe.Pointer(&expertModule)), p) 4538 } 4539 4540 var expertModule = sqlite3_module{ 4541 FiVersion: 2, 4542 FxCreate: 0, 4543 FxConnect: 0, 4544 FxBestIndex: 0, 4545 FxDisconnect: 0, 4546 FxDestroy: 0, 4547 FxOpen: 0, 4548 FxClose: 0, 4549 FxFilter: 0, 4550 FxNext: 0, 4551 FxEof: 0, 4552 FxColumn: 0, 4553 FxRowid: 0, 4554 FxUpdate: 0, 4555 } 4556 4557 func idxFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr) { 4558 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 4559 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 4560 *(*int32)(unsafe.Pointer(pRc)) = rc 4561 } 4562 } 4563 4564 func idxGetTableInfo(tls *libc.TLS, db uintptr, zTab uintptr, ppOut uintptr, pzErrmsg uintptr) int32 { 4565 bp := tls.Alloc(40) 4566 defer tls.Free(40) 4567 4568 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 4569 var nCol int32 = 0 4570 var nTab int32 4571 var nByte int32 4572 var pNew uintptr = uintptr(0) 4573 4574 var rc2 int32 4575 var pCsr uintptr = uintptr(0) 4576 var nPk int32 = 0 4577 4578 *(*uintptr)(unsafe.Pointer(ppOut)) = uintptr(0) 4579 if zTab == uintptr(0) { 4580 return SQLITE_ERROR 4581 } 4582 nTab = int32(libc.Xstrlen(tls, zTab)) 4583 nByte = int32(uint64(unsafe.Sizeof(IdxTable{})) + uint64(nTab) + uint64(1)) 4584 *(*int32)(unsafe.Pointer(bp + 24)) = idxPrintfPrepareStmt(tls, db, bp+8, pzErrmsg, ts+63, libc.VaList(bp, zTab)) 4585 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 4586 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 4587 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 4588 if zCol == uintptr(0) { 4589 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ERROR 4590 break 4591 } 4592 nByte = nByte + (1 + int32(libc.Xstrlen(tls, zCol))) 4593 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 4594 db, ts+85, zTab, zCol, uintptr(0), bp+16, uintptr(0), uintptr(0), uintptr(0)) 4595 if *(*uintptr)(unsafe.Pointer(bp + 16)) == uintptr(0) { 4596 *(*uintptr)(unsafe.Pointer(bp + 16)) = ts + 90 4597 } 4598 nByte = nByte + (1 + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 16))))) 4599 nCol++ 4600 nPk = nPk + libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) > 0) 4601 } 4602 rc2 = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 4603 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4604 *(*int32)(unsafe.Pointer(bp + 24)) = rc2 4605 } 4606 4607 nByte = int32(uint64(nByte) + uint64(unsafe.Sizeof(IdxColumn{}))*uint64(nCol)) 4608 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4609 pNew = idxMalloc(tls, bp+24, nByte) 4610 } 4611 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4612 (*IdxTable)(unsafe.Pointer(pNew)).FaCol = pNew + 1*32 4613 (*IdxTable)(unsafe.Pointer(pNew)).FnCol = nCol 4614 pCsr = (*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24 4615 } 4616 4617 nCol = 0 4618 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 4619 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 4620 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 4621 var nCopy int32 4622 if zCol == uintptr(0) { 4623 continue 4624 } 4625 nCopy = int32(libc.Xstrlen(tls, zCol)) + 1 4626 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzName = pCsr 4627 (*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) 4628 libc.Xmemcpy(tls, pCsr, zCol, uint64(nCopy)) 4629 pCsr += uintptr(nCopy) 4630 4631 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 4632 db, ts+85, zTab, zCol, uintptr(0), bp+32, uintptr(0), uintptr(0), uintptr(0)) 4633 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 4634 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 4635 *(*uintptr)(unsafe.Pointer(bp + 32)) = ts + 90 4636 } 4637 nCopy = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 32)))) + 1 4638 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzColl = pCsr 4639 libc.Xmemcpy(tls, pCsr, *(*uintptr)(unsafe.Pointer(bp + 32)), uint64(nCopy)) 4640 pCsr += uintptr(nCopy) 4641 } 4642 4643 nCol++ 4644 } 4645 idxFinalize(tls, bp+24, *(*uintptr)(unsafe.Pointer(bp + 8))) 4646 4647 if *(*int32)(unsafe.Pointer(bp + 24)) != SQLITE_OK { 4648 sqlite3.Xsqlite3_free(tls, pNew) 4649 pNew = uintptr(0) 4650 } else if pNew != uintptr(0) { 4651 (*IdxTable)(unsafe.Pointer(pNew)).FzName = pCsr 4652 if (*IdxTable)(unsafe.Pointer(pNew)).FzName != uintptr(0) { 4653 libc.Xmemcpy(tls, (*IdxTable)(unsafe.Pointer(pNew)).FzName, zTab, uint64(nTab+1)) 4654 } 4655 } 4656 4657 *(*uintptr)(unsafe.Pointer(ppOut)) = pNew 4658 return *(*int32)(unsafe.Pointer(bp + 24)) 4659 } 4660 4661 func idxAppendText(tls *libc.TLS, pRc uintptr, zIn uintptr, zFmt uintptr, va uintptr) uintptr { 4662 var ap va_list 4663 _ = ap 4664 var zAppend uintptr = uintptr(0) 4665 var zRet uintptr = uintptr(0) 4666 var nIn int32 4667 if zIn != 0 { 4668 nIn = int32(libc.Xstrlen(tls, zIn)) 4669 } else { 4670 nIn = 0 4671 } 4672 var nAppend int32 = 0 4673 ap = va 4674 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 4675 zAppend = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 4676 if zAppend != 0 { 4677 nAppend = int32(libc.Xstrlen(tls, zAppend)) 4678 zRet = sqlite3.Xsqlite3_malloc(tls, nIn+nAppend+1) 4679 } 4680 if zAppend != 0 && zRet != 0 { 4681 if nIn != 0 { 4682 libc.Xmemcpy(tls, zRet, zIn, uint64(nIn)) 4683 } 4684 libc.Xmemcpy(tls, zRet+uintptr(nIn), zAppend, uint64(nAppend+1)) 4685 } else { 4686 sqlite3.Xsqlite3_free(tls, zRet) 4687 zRet = uintptr(0) 4688 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4689 } 4690 sqlite3.Xsqlite3_free(tls, zAppend) 4691 sqlite3.Xsqlite3_free(tls, zIn) 4692 } 4693 _ = ap 4694 return zRet 4695 } 4696 4697 func idxIdentifierRequiresQuotes(tls *libc.TLS, zId uintptr) int32 { 4698 var i int32 4699 for i = 0; *(*int8)(unsafe.Pointer(zId + uintptr(i))) != 0; i++ { 4700 if !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) == '_') && 4701 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= '0' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= '9') && 4702 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'a' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'z') && 4703 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'A' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'Z') { 4704 return 1 4705 } 4706 } 4707 return 0 4708 } 4709 4710 func idxAppendColDefn(tls *libc.TLS, pRc uintptr, zIn uintptr, pTab uintptr, pCons uintptr) uintptr { 4711 bp := tls.Alloc(32) 4712 defer tls.Free(32) 4713 4714 var zRet uintptr = zIn 4715 var p uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FaCol + uintptr((*IdxConstraint)(unsafe.Pointer(pCons)).FiCol)*24 4716 if zRet != 0 { 4717 zRet = idxAppendText(tls, pRc, zRet, ts+97, 0) 4718 } 4719 4720 if idxIdentifierRequiresQuotes(tls, (*IdxColumn)(unsafe.Pointer(p)).FzName) != 0 { 4721 zRet = idxAppendText(tls, pRc, zRet, ts+100, libc.VaList(bp, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 4722 } else { 4723 zRet = idxAppendText(tls, pRc, zRet, ts, libc.VaList(bp+8, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 4724 } 4725 4726 if sqlite3.Xsqlite3_stricmp(tls, (*IdxColumn)(unsafe.Pointer(p)).FzColl, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 4727 if idxIdentifierRequiresQuotes(tls, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 4728 zRet = idxAppendText(tls, pRc, zRet, ts+103, libc.VaList(bp+16, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 4729 } else { 4730 zRet = idxAppendText(tls, pRc, zRet, ts+115, libc.VaList(bp+24, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 4731 } 4732 } 4733 4734 if (*IdxConstraint)(unsafe.Pointer(pCons)).FbDesc != 0 { 4735 zRet = idxAppendText(tls, pRc, zRet, ts+127, 0) 4736 } 4737 return zRet 4738 } 4739 4740 func idxFindCompatible(tls *libc.TLS, pRc uintptr, dbm uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 4741 bp := tls.Alloc(36) 4742 defer tls.Free(36) 4743 4744 var zTbl uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 4745 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 4746 var pIter uintptr 4747 var nEq int32 = 0 4748 4749 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4750 nEq++ 4751 } 4752 4753 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+16, uintptr(0), ts+133, libc.VaList(bp, zTbl)) 4754 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW { 4755 var bMatch int32 = 1 4756 var pT uintptr = pTail 4757 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 4758 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 4759 if zIdx == uintptr(0) { 4760 continue 4761 } 4762 4763 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4764 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 0 4765 } 4766 4767 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+24, uintptr(0), ts+154, libc.VaList(bp+8, zIdx)) 4768 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW { 4769 var iIdx int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 4770 var iCol int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 4771 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 4) 4772 4773 if iIdx < nEq { 4774 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 4775 if (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag != 0 { 4776 continue 4777 } 4778 if (*IdxConstraint)(unsafe.Pointer(pIter)).FiCol != iCol { 4779 continue 4780 } 4781 if sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pIter)).FzColl, zColl) != 0 { 4782 continue 4783 } 4784 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 1 4785 break 4786 } 4787 if pIter == uintptr(0) { 4788 bMatch = 0 4789 break 4790 } 4791 } else { 4792 if pT != 0 { 4793 if (*IdxConstraint)(unsafe.Pointer(pT)).FiCol != iCol || sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pT)).FzColl, zColl) != 0 { 4794 bMatch = 0 4795 break 4796 } 4797 pT = (*IdxConstraint)(unsafe.Pointer(pT)).FpLink 4798 } 4799 } 4800 } 4801 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 24))) 4802 4803 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && bMatch != 0 { 4804 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 4805 return 1 4806 } 4807 } 4808 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 16))) 4809 4810 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 32)) 4811 return 0 4812 } 4813 4814 func countNonzeros(tls *libc.TLS, pCount uintptr, nc int32, azResults uintptr, azColumns uintptr) int32 { 4815 _ = azColumns 4816 if nc > 0 && (int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults))))) != '0' || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults)) + 1))) != 0) { 4817 *(*int32)(unsafe.Pointer(pCount)) += 1 4818 } 4819 return 0 4820 } 4821 4822 func idxCreateFromCons(tls *libc.TLS, p uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 4823 bp := tls.Alloc(56) 4824 defer tls.Free(56) 4825 4826 var dbm uintptr = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 4827 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_OK 4828 if (pEq != 0 || pTail != 0) && 0 == idxFindCompatible(tls, bp+48, dbm, pScan, pEq, pTail) { 4829 var pTab uintptr = (*IdxScan)(unsafe.Pointer(pScan)).FpTab 4830 var zCols uintptr = uintptr(0) 4831 var zIdx uintptr = uintptr(0) 4832 var pCons uintptr 4833 var h uint32 = uint32(0) 4834 var zFmt uintptr 4835 4836 for pCons = pEq; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 4837 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 4838 } 4839 for pCons = pTail; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 4840 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 4841 } 4842 4843 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 4844 var zTable uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 4845 var quoteTable int32 = idxIdentifierRequiresQuotes(tls, zTable) 4846 var zName uintptr = uintptr(0) 4847 var collisions int32 = 0 4848 for __ccgo := true; __ccgo; __ccgo = collisions < 50 && zName != uintptr(0) { 4849 var zFind uintptr 4850 for *(*int32)(unsafe.Pointer(bp + 52)) = 0; *(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))) != 0; *(*int32)(unsafe.Pointer(bp + 52))++ { 4851 h = h + (h<<3 + uint32(*(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))))) 4852 } 4853 sqlite3.Xsqlite3_free(tls, zName) 4854 zName = sqlite3.Xsqlite3_mprintf(tls, ts+176, libc.VaList(bp, zTable, h)) 4855 if zName == uintptr(0) { 4856 break 4857 } 4858 4859 zFmt = ts + 188 4860 zFind = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+16, zName)) 4861 *(*int32)(unsafe.Pointer(bp + 52)) = 0 4862 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zFind, *(*uintptr)(unsafe.Pointer(&struct { 4863 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 4864 }{countNonzeros})), bp+52, uintptr(0)) 4865 4866 sqlite3.Xsqlite3_free(tls, zFind) 4867 if *(*int32)(unsafe.Pointer(bp + 52)) == 0 { 4868 collisions = 0 4869 break 4870 } 4871 collisions++ 4872 } 4873 if collisions != 0 { 4874 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 4875 } else if zName == uintptr(0) { 4876 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 4877 } else { 4878 if quoteTable != 0 { 4879 zFmt = ts + 274 4880 } else { 4881 zFmt = ts + 304 4882 } 4883 zIdx = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+24, zName, zTable, zCols)) 4884 if !(zIdx != 0) { 4885 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 4886 } else { 4887 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zIdx, uintptr(0), uintptr(0), (*sqlite3expert)(unsafe.Pointer(p)).FpzErrmsg) 4888 if *(*int32)(unsafe.Pointer(bp + 48)) != SQLITE_OK { 4889 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 4890 } else { 4891 idxHashAdd(tls, bp+48, p+88, zName, zIdx) 4892 } 4893 } 4894 sqlite3.Xsqlite3_free(tls, zName) 4895 sqlite3.Xsqlite3_free(tls, zIdx) 4896 } 4897 } 4898 4899 sqlite3.Xsqlite3_free(tls, zCols) 4900 } 4901 return *(*int32)(unsafe.Pointer(bp + 48)) 4902 } 4903 4904 func idxFindConstraint(tls *libc.TLS, pList uintptr, p uintptr) int32 { 4905 var pCmp uintptr 4906 for pCmp = pList; pCmp != 0; pCmp = (*IdxConstraint)(unsafe.Pointer(pCmp)).FpLink { 4907 if (*IdxConstraint)(unsafe.Pointer(p)).FiCol == (*IdxConstraint)(unsafe.Pointer(pCmp)).FiCol { 4908 return 1 4909 } 4910 } 4911 return 0 4912 } 4913 4914 func idxCreateFromWhere(tls *libc.TLS, p uintptr, pScan uintptr, pTail uintptr) int32 { 4915 var p1 uintptr = uintptr(0) 4916 var pCon uintptr 4917 var rc int32 4918 4919 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpEq; pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 4920 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 4921 (*IdxConstraint)(unsafe.Pointer(pCon)).FpLink = p1 4922 p1 = pCon 4923 } 4924 } 4925 4926 rc = idxCreateFromCons(tls, p, pScan, p1, pTail) 4927 4928 if pTail == uintptr(0) { 4929 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpRange; rc == SQLITE_OK && pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 4930 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 4931 rc = idxCreateFromCons(tls, p, pScan, p1, pCon) 4932 } 4933 } 4934 } 4935 4936 return rc 4937 } 4938 4939 func idxCreateCandidates(tls *libc.TLS, p uintptr) int32 { 4940 var rc int32 = SQLITE_OK 4941 var pIter uintptr 4942 4943 for pIter = (*sqlite3expert)(unsafe.Pointer(p)).FpScan; pIter != 0 && rc == SQLITE_OK; pIter = (*IdxScan)(unsafe.Pointer(pIter)).FpNextScan { 4944 rc = idxCreateFromWhere(tls, p, pIter, uintptr(0)) 4945 if rc == SQLITE_OK && (*IdxScan)(unsafe.Pointer(pIter)).FpOrder != 0 { 4946 rc = idxCreateFromWhere(tls, p, pIter, (*IdxScan)(unsafe.Pointer(pIter)).FpOrder) 4947 } 4948 } 4949 4950 return rc 4951 } 4952 4953 func idxConstraintFree(tls *libc.TLS, pConstraint uintptr) { 4954 var pNext uintptr 4955 var p uintptr 4956 4957 for p = pConstraint; p != 0; p = pNext { 4958 pNext = (*IdxConstraint)(unsafe.Pointer(p)).FpNext 4959 sqlite3.Xsqlite3_free(tls, p) 4960 } 4961 } 4962 4963 func idxScanFree(tls *libc.TLS, pScan uintptr, pLast uintptr) { 4964 var p uintptr 4965 var pNext uintptr 4966 for p = pScan; p != pLast; p = pNext { 4967 pNext = (*IdxScan)(unsafe.Pointer(p)).FpNextScan 4968 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpOrder) 4969 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpEq) 4970 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpRange) 4971 sqlite3.Xsqlite3_free(tls, p) 4972 } 4973 } 4974 4975 func idxStatementFree(tls *libc.TLS, pStatement uintptr, pLast uintptr) { 4976 var p uintptr 4977 var pNext uintptr 4978 for p = pStatement; p != pLast; p = pNext { 4979 pNext = (*IdxStatement)(unsafe.Pointer(p)).FpNext 4980 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzEQP) 4981 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzIdx) 4982 sqlite3.Xsqlite3_free(tls, p) 4983 } 4984 } 4985 4986 func idxTableFree(tls *libc.TLS, pTab uintptr) { 4987 var pIter uintptr 4988 var pNext uintptr 4989 for pIter = pTab; pIter != 0; pIter = pNext { 4990 pNext = (*IdxTable)(unsafe.Pointer(pIter)).FpNext 4991 sqlite3.Xsqlite3_free(tls, pIter) 4992 } 4993 } 4994 4995 func idxWriteFree(tls *libc.TLS, pTab uintptr) { 4996 var pIter uintptr 4997 var pNext uintptr 4998 for pIter = pTab; pIter != 0; pIter = pNext { 4999 pNext = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext 5000 sqlite3.Xsqlite3_free(tls, pIter) 5001 } 5002 } 5003 5004 func idxFindIndexes(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5005 bp := tls.Alloc(8228) 5006 defer tls.Free(8228) 5007 5008 var pStmt uintptr 5009 var dbm uintptr 5010 5011 var zSql uintptr 5012 var nIdx int32 5013 var zIdx uintptr 5014 5015 var zDetail uintptr 5016 var nDetail int32 5017 var i int32 5018 var pEntry uintptr 5019 5020 dbm = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5021 *(*int32)(unsafe.Pointer(bp + 8224)) = SQLITE_OK 5022 idxHashInit(tls, bp+24) 5023 5024 pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5025 __1: 5026 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && pStmt != 0) { 5027 goto __3 5028 } 5029 *(*uintptr)(unsafe.Pointer(bp + 8216)) = uintptr(0) 5030 idxHashClear(tls, bp+24) 5031 *(*int32)(unsafe.Pointer(bp + 8224)) = idxPrintfPrepareStmt(tls, dbm, bp+8216, pzErr, 5032 ts+330, libc.VaList(bp, (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql)) 5033 __4: 5034 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8216))) == SQLITE_ROW) { 5035 goto __5 5036 } 5037 5038 zDetail = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8216)), 3) 5039 5040 if !!(zDetail != 0) { 5041 goto __6 5042 } 5043 goto __4 5044 __6: 5045 ; 5046 nDetail = int32(libc.Xstrlen(tls, zDetail)) 5047 5048 i = 0 5049 __7: 5050 if !(i < nDetail) { 5051 goto __9 5052 } 5053 zIdx = uintptr(0) 5054 if !(i+13 < nDetail && libc.Xmemcmp(tls, zDetail+uintptr(i), ts+352, uint64(13)) == 0) { 5055 goto __10 5056 } 5057 zIdx = zDetail + uintptr(i+13) 5058 goto __11 5059 __10: 5060 if !(i+22 < nDetail && 5061 libc.Xmemcmp(tls, zDetail+uintptr(i), ts+366, uint64(22)) == 0) { 5062 goto __12 5063 } 5064 zIdx = zDetail + uintptr(i+22) 5065 __12: 5066 ; 5067 __11: 5068 ; 5069 if !(zIdx != 0) { 5070 goto __13 5071 } 5072 nIdx = 0 5073 __14: 5074 if !(int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != 0 && (int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != ' ' || int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx+1)))) != '(')) { 5075 goto __15 5076 } 5077 nIdx++ 5078 goto __14 5079 __15: 5080 ; 5081 zSql = idxHashSearch(tls, p+88, zIdx, nIdx) 5082 if !(zSql != 0) { 5083 goto __16 5084 } 5085 idxHashAdd(tls, bp+8224, bp+24, zSql, uintptr(0)) 5086 if !(*(*int32)(unsafe.Pointer(bp + 8224)) != 0) { 5087 goto __17 5088 } 5089 goto find_indexes_out 5090 __17: 5091 ; 5092 __16: 5093 ; 5094 goto __9 5095 __13: 5096 ; 5097 goto __8 5098 __8: 5099 i++ 5100 goto __7 5101 goto __9 5102 __9: 5103 ; 5104 if !(int32(*(*int8)(unsafe.Pointer(zDetail))) != '-') { 5105 goto __18 5106 } 5107 (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP = idxAppendText(tls, bp+8224, (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP, ts+389, libc.VaList(bp+8, zDetail)) 5108 __18: 5109 ; 5110 goto __4 5111 __5: 5112 ; 5113 pEntry = (*IdxHash)(unsafe.Pointer(bp + 24)).FpFirst 5114 __19: 5115 if !(pEntry != 0) { 5116 goto __21 5117 } 5118 (*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)) 5119 goto __20 5120 __20: 5121 pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext 5122 goto __19 5123 goto __21 5124 __21: 5125 ; 5126 idxFinalize(tls, bp+8224, *(*uintptr)(unsafe.Pointer(bp + 8216))) 5127 goto __2 5128 __2: 5129 pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext 5130 goto __1 5131 goto __3 5132 __3: 5133 ; 5134 find_indexes_out: 5135 idxHashClear(tls, bp+24) 5136 return *(*int32)(unsafe.Pointer(bp + 8224)) 5137 } 5138 5139 func idxAuthCallback(tls *libc.TLS, pCtx uintptr, eOp int32, z3 uintptr, z4 uintptr, zDb uintptr, zTrigger uintptr) int32 { 5140 bp := tls.Alloc(4) 5141 defer tls.Free(4) 5142 5143 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5144 _ = z4 5145 _ = zTrigger 5146 if eOp == SQLITE_INSERT || eOp == SQLITE_UPDATE || eOp == SQLITE_DELETE { 5147 if sqlite3.Xsqlite3_stricmp(tls, zDb, ts+85) == 0 { 5148 var p uintptr = pCtx 5149 var pTab uintptr 5150 for pTab = (*sqlite3expert)(unsafe.Pointer(p)).FpTable; pTab != 0; pTab = (*IdxTable)(unsafe.Pointer(pTab)).FpNext { 5151 if 0 == sqlite3.Xsqlite3_stricmp(tls, z3, (*IdxTable)(unsafe.Pointer(pTab)).FzName) { 5152 break 5153 } 5154 } 5155 if pTab != 0 { 5156 var pWrite uintptr 5157 for pWrite = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite; pWrite != 0; pWrite = (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext { 5158 if (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab == pTab && (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp == eOp { 5159 break 5160 } 5161 } 5162 if pWrite == uintptr(0) { 5163 pWrite = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxWrite{}))) 5164 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5165 (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab = pTab 5166 (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp = eOp 5167 (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5168 (*sqlite3expert)(unsafe.Pointer(p)).FpWrite = pWrite 5169 } 5170 } 5171 } 5172 } 5173 } 5174 return *(*int32)(unsafe.Pointer(bp)) 5175 } 5176 5177 func idxProcessOneTrigger(tls *libc.TLS, p uintptr, pWrite uintptr, pzErr uintptr) int32 { 5178 bp := tls.Alloc(104) 5179 defer tls.Free(104) 5180 5181 var pTab uintptr = (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab 5182 var zTab uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FzName 5183 var zSql uintptr = ts + 398 5184 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 5185 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_OK 5186 var zWrite uintptr = uintptr(0) 5187 5188 *(*int32)(unsafe.Pointer(bp + 88)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+80, pzErr, zSql, libc.VaList(bp, zTab, zTab)) 5189 for *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) { 5190 var zCreate uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 5191 if zCreate == uintptr(0) { 5192 continue 5193 } 5194 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zCreate, uintptr(0), uintptr(0), pzErr) 5195 } 5196 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 80))) 5197 5198 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5199 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+524, libc.VaList(bp+16, zTab, zInt)) 5200 if z == uintptr(0) { 5201 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 5202 } else { 5203 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, z, uintptr(0), uintptr(0), pzErr) 5204 sqlite3.Xsqlite3_free(tls, z) 5205 } 5206 } 5207 5208 switch (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp { 5209 case SQLITE_INSERT: 5210 { 5211 var i int32 5212 zWrite = idxAppendText(tls, bp+88, zWrite, ts+557, libc.VaList(bp+32, zInt)) 5213 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5214 zWrite = idxAppendText(tls, bp+88, zWrite, ts+580, libc.VaList(bp+40, func() uintptr { 5215 if i == 0 { 5216 return ts + 584 5217 } 5218 return ts + 97 5219 }())) 5220 } 5221 zWrite = idxAppendText(tls, bp+88, zWrite, ts+585, 0) 5222 break 5223 5224 } 5225 case SQLITE_UPDATE: 5226 { 5227 var i int32 5228 zWrite = idxAppendText(tls, bp+88, zWrite, ts+587, libc.VaList(bp+48, zInt)) 5229 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5230 zWrite = idxAppendText(tls, bp+88, zWrite, ts+602, libc.VaList(bp+56, func() uintptr { 5231 if i == 0 { 5232 return ts + 584 5233 } 5234 return ts + 97 5235 }(), 5236 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pTab)).FaCol+uintptr(i)*24)).FzName)) 5237 } 5238 break 5239 5240 } 5241 default: 5242 { 5243 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5244 zWrite = sqlite3.Xsqlite3_mprintf(tls, ts+609, libc.VaList(bp+72, zInt)) 5245 if zWrite == uintptr(0) { 5246 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 5247 } 5248 } 5249 5250 } 5251 } 5252 5253 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5254 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 5255 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zWrite, -1, bp+96, uintptr(0)) 5256 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 96))) 5257 if *(*int32)(unsafe.Pointer(bp + 88)) != SQLITE_OK { 5258 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 5259 } 5260 } 5261 sqlite3.Xsqlite3_free(tls, zWrite) 5262 5263 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5264 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zDrop, uintptr(0), uintptr(0), pzErr) 5265 } 5266 5267 return *(*int32)(unsafe.Pointer(bp + 88)) 5268 } 5269 5270 var zInt uintptr = ts + 624 5271 var zDrop uintptr = ts + 662 5272 5273 func idxProcessTriggers(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5274 var rc int32 = SQLITE_OK 5275 var pEnd uintptr = uintptr(0) 5276 var pFirst uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5277 5278 for rc == SQLITE_OK && pFirst != pEnd { 5279 var pIter uintptr 5280 for pIter = pFirst; rc == SQLITE_OK && pIter != pEnd; pIter = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext { 5281 rc = idxProcessOneTrigger(tls, p, pIter, pzErr) 5282 } 5283 pEnd = pFirst 5284 pFirst = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5285 } 5286 5287 return rc 5288 } 5289 5290 func idxCreateVtabSchema(tls *libc.TLS, p uintptr, pzErrmsg uintptr) int32 { 5291 bp := tls.Alloc(60) 5292 defer tls.Free(60) 5293 5294 *(*int32)(unsafe.Pointer(bp + 56)) = idxRegisterVtab(tls, p) 5295 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 5296 5297 *(*int32)(unsafe.Pointer(bp + 56)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+40, pzErrmsg, 5298 ts+711) 5299 for *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 5300 var zType uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 5301 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 5302 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 5303 5304 if zType == uintptr(0) || zName == uintptr(0) { 5305 continue 5306 } 5307 if int32(*(*int8)(unsafe.Pointer(zType))) == 'v' || int32(*(*int8)(unsafe.Pointer(zType + 1))) == 'r' { 5308 if zSql != 0 { 5309 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), pzErrmsg) 5310 } 5311 } else { 5312 *(*int32)(unsafe.Pointer(bp + 56)) = idxGetTableInfo(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, zName, bp+48, pzErrmsg) 5313 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 5314 var i int32 5315 var zInner uintptr = uintptr(0) 5316 var zOuter uintptr = uintptr(0) 5317 (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpTable 5318 (*sqlite3expert)(unsafe.Pointer(p)).FpTable = *(*uintptr)(unsafe.Pointer(bp + 48)) 5319 5320 zInner = idxAppendText(tls, bp+56, uintptr(0), ts+979, 0) 5321 for i = 0; i < (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FnCol; i++ { 5322 zInner = idxAppendText(tls, bp+56, zInner, ts+995, 5323 libc.VaList(bp, func() uintptr { 5324 if i == 0 { 5325 return ts + 584 5326 } 5327 return ts + 97 5328 }(), (*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)) 5329 } 5330 zInner = idxAppendText(tls, bp+56, zInner, ts+585, 0) 5331 5332 zOuter = idxAppendText(tls, bp+56, uintptr(0), 5333 ts+1011, libc.VaList(bp+24, zName, zInner)) 5334 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 5335 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zOuter, uintptr(0), uintptr(0), pzErrmsg) 5336 } 5337 sqlite3.Xsqlite3_free(tls, zInner) 5338 sqlite3.Xsqlite3_free(tls, zOuter) 5339 } 5340 } 5341 } 5342 idxFinalize(tls, bp+56, *(*uintptr)(unsafe.Pointer(bp + 40))) 5343 return *(*int32)(unsafe.Pointer(bp + 56)) 5344 } 5345 5346 type IdxSampleCtx = struct { 5347 FiTarget int32 5348 F__ccgo_pad1 [4]byte 5349 Ftarget float64 5350 FnRow float64 5351 FnRet float64 5352 } 5353 5354 func idxSampleFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5355 bp := tls.Alloc(2) 5356 defer tls.Free(2) 5357 5358 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5359 var bRet int32 5360 5361 _ = argv 5362 5363 if (*IdxSampleCtx)(unsafe.Pointer(p)).FnRow == 0.0 { 5364 bRet = 1 5365 } else { 5366 bRet = libc.Bool32((*IdxSampleCtx)(unsafe.Pointer(p)).FnRet/(*IdxSampleCtx)(unsafe.Pointer(p)).FnRow <= (*IdxSampleCtx)(unsafe.Pointer(p)).Ftarget) 5367 if bRet == 0 { 5368 sqlite3.Xsqlite3_randomness(tls, 2, bp) 5369 bRet = libc.Bool32(int32(*(*uint16)(unsafe.Pointer(bp)))%100 <= (*IdxSampleCtx)(unsafe.Pointer(p)).FiTarget) 5370 } 5371 } 5372 5373 sqlite3.Xsqlite3_result_int(tls, pCtx, bRet) 5374 *(*float64)(unsafe.Pointer(p + 16)) += 1.0 5375 *(*float64)(unsafe.Pointer(p + 24)) += float64(bRet) 5376 } 5377 5378 type IdxRemCtx = struct { 5379 FnSlot int32 5380 F__ccgo_pad1 [4]byte 5381 FaSlot [1]struct { 5382 FeType int32 5383 F__ccgo_pad1 [4]byte 5384 FiVal i64 5385 FrVal float64 5386 FnByte int32 5387 Fn int32 5388 Fz uintptr 5389 } 5390 } 5391 5392 type IdxRemSlot = struct { 5393 FeType int32 5394 F__ccgo_pad1 [4]byte 5395 FiVal i64 5396 FrVal float64 5397 FnByte int32 5398 Fn int32 5399 Fz uintptr 5400 } 5401 5402 func idxRemFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5403 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5404 var pSlot uintptr 5405 var iSlot int32 5406 5407 iSlot = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 5408 5409 pSlot = p + 8 + uintptr(iSlot)*40 5410 5411 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5412 case SQLITE_NULL: 5413 break 5414 5415 case SQLITE_INTEGER: 5416 sqlite3.Xsqlite3_result_int64(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal) 5417 break 5418 5419 case SQLITE_FLOAT: 5420 sqlite3.Xsqlite3_result_double(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal) 5421 break 5422 5423 case SQLITE_BLOB: 5424 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5425 break 5426 5427 case SQLITE_TEXT: 5428 sqlite3.Xsqlite3_result_text(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5429 break 5430 } 5431 5432 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5433 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5434 case SQLITE_NULL: 5435 break 5436 5437 case SQLITE_INTEGER: 5438 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5439 break 5440 5441 case SQLITE_FLOAT: 5442 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5443 break 5444 5445 case SQLITE_BLOB: 5446 fallthrough 5447 case SQLITE_TEXT: 5448 { 5449 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5450 var pData uintptr = uintptr(0) 5451 if nByte > (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte { 5452 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, nByte*2) 5453 if zNew == uintptr(0) { 5454 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 5455 return 5456 } 5457 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte = nByte * 2 5458 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz = zNew 5459 } 5460 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn = nByte 5461 if (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType == SQLITE_BLOB { 5462 pData = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5463 if pData != 0 { 5464 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 5465 } 5466 } else { 5467 pData = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5468 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 5469 } 5470 break 5471 5472 } 5473 } 5474 } 5475 5476 func idxLargestIndex(tls *libc.TLS, db uintptr, pnMax uintptr, pzErr uintptr) int32 { 5477 bp := tls.Alloc(12) 5478 defer tls.Free(12) 5479 5480 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OK 5481 var zMax uintptr = ts + 1052 5482 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 5483 5484 *(*int32)(unsafe.Pointer(pnMax)) = 0 5485 *(*int32)(unsafe.Pointer(bp + 8)) = idxPrepareStmt(tls, db, bp, pzErr, zMax) 5486 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 5487 *(*int32)(unsafe.Pointer(pnMax)) = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) + 1 5488 } 5489 idxFinalize(tls, bp+8, *(*uintptr)(unsafe.Pointer(bp))) 5490 5491 return *(*int32)(unsafe.Pointer(bp + 8)) 5492 } 5493 5494 func idxPopulateOneStat1(tls *libc.TLS, p uintptr, pIndexXInfo uintptr, pWriteStat uintptr, zTab uintptr, zIdx uintptr, pzErr uintptr) int32 { 5495 bp := tls.Alloc(128) 5496 defer tls.Free(128) 5497 5498 var zCols uintptr = uintptr(0) 5499 var zOrder uintptr = uintptr(0) 5500 var zQuery uintptr = uintptr(0) 5501 var nCol int32 = 0 5502 var i int32 5503 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 5504 var aStat uintptr = uintptr(0) 5505 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_OK 5506 5507 sqlite3.Xsqlite3_bind_text(tls, pIndexXInfo, 1, zIdx, -1, uintptr(0)) 5508 for SQLITE_OK == *(*int32)(unsafe.Pointer(bp + 112)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pIndexXInfo) { 5509 var zComma uintptr 5510 if zCols == uintptr(0) { 5511 zComma = ts + 584 5512 } else { 5513 zComma = ts + 97 5514 } 5515 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 0) 5516 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 1) 5517 zCols = idxAppendText(tls, bp+112, zCols, 5518 ts+1189, libc.VaList(bp, zComma, zName, nCol, zName, zColl)) 5519 zOrder = idxAppendText(tls, bp+112, zOrder, ts+1224, libc.VaList(bp+40, zComma, libc.PreIncInt32(&nCol, 1))) 5520 } 5521 sqlite3.Xsqlite3_reset(tls, pIndexXInfo) 5522 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5523 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5524 zQuery = sqlite3.Xsqlite3_mprintf(tls, 5525 ts+1229, libc.VaList(bp+56, zCols, zTab, zOrder)) 5526 } else { 5527 zQuery = sqlite3.Xsqlite3_mprintf(tls, 5528 ts+1261, libc.VaList(bp+80, zCols, zOrder)) 5529 } 5530 } 5531 sqlite3.Xsqlite3_free(tls, zCols) 5532 sqlite3.Xsqlite3_free(tls, zOrder) 5533 5534 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5535 var dbrem uintptr = func() uintptr { 5536 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5537 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 5538 } 5539 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 5540 }() 5541 *(*int32)(unsafe.Pointer(bp + 112)) = idxPrepareStmt(tls, dbrem, bp+120, pzErr, zQuery) 5542 } 5543 sqlite3.Xsqlite3_free(tls, zQuery) 5544 5545 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5546 aStat = idxMalloc(tls, bp+112, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nCol+1))) 5547 } 5548 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 5549 var pEntry uintptr 5550 var zStat uintptr = uintptr(0) 5551 for i = 0; i <= nCol; i++ { 5552 *(*int32)(unsafe.Pointer(aStat + uintptr(i)*4)) = 1 5553 } 5554 for *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 5555 *(*int32)(unsafe.Pointer(aStat))++ 5556 for i = 0; i < nCol; i++ { 5557 if sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 120)), i) == 0 { 5558 break 5559 } 5560 } 5561 for ; i < nCol; i++ { 5562 *(*int32)(unsafe.Pointer(aStat + uintptr(i+1)*4))++ 5563 } 5564 } 5565 5566 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5567 var s0 int32 = *(*int32)(unsafe.Pointer(aStat)) 5568 zStat = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+96, s0)) 5569 if zStat == uintptr(0) { 5570 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_NOMEM 5571 } 5572 for i = 1; *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && i <= nCol; i++ { 5573 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)))) 5574 } 5575 } 5576 5577 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5578 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 1, zTab, -1, uintptr(0)) 5579 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 2, zIdx, -1, uintptr(0)) 5580 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 3, zStat, -1, uintptr(0)) 5581 sqlite3.Xsqlite3_step(tls, pWriteStat) 5582 *(*int32)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_reset(tls, pWriteStat) 5583 } 5584 5585 pEntry = idxHashFind(tls, p+88, zIdx, int32(libc.Xstrlen(tls, zIdx))) 5586 if pEntry != 0 { 5587 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 = zStat 5588 } else { 5589 sqlite3.Xsqlite3_free(tls, zStat) 5590 } 5591 } 5592 sqlite3.Xsqlite3_free(tls, aStat) 5593 idxFinalize(tls, bp+112, *(*uintptr)(unsafe.Pointer(bp + 120))) 5594 5595 return *(*int32)(unsafe.Pointer(bp + 112)) 5596 } 5597 5598 func idxBuildSampleTable(tls *libc.TLS, p uintptr, zTab uintptr) int32 { 5599 bp := tls.Alloc(8) 5600 defer tls.Free(8) 5601 5602 var rc int32 5603 var zSql uintptr 5604 5605 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5606 if rc != SQLITE_OK { 5607 return rc 5608 } 5609 5610 zSql = sqlite3.Xsqlite3_mprintf(tls, 5611 ts+1404, libc.VaList(bp, zTab)) 5612 if zSql == uintptr(0) { 5613 return SQLITE_NOMEM 5614 } 5615 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), uintptr(0)) 5616 sqlite3.Xsqlite3_free(tls, zSql) 5617 5618 return rc 5619 } 5620 5621 func idxPopulateStat1(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5622 bp := tls.Alloc(64) 5623 defer tls.Free(64) 5624 5625 *(*int32)(unsafe.Pointer(bp + 4)) = SQLITE_OK 5626 *(*int32)(unsafe.Pointer(bp)) = 0 5627 var pCtx uintptr = uintptr(0) 5628 5629 var i int32 5630 var iPrev i64 = int64(-100000) 5631 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 5632 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 5633 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 5634 5635 var zAllIndex uintptr = ts + 1480 5636 var zIndexXInfo uintptr = ts + 1594 5637 var zWrite uintptr = ts + 1649 5638 5639 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 0 { 5640 return SQLITE_OK 5641 } 5642 5643 *(*int32)(unsafe.Pointer(bp + 4)) = idxLargestIndex(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp, pzErr) 5644 if *(*int32)(unsafe.Pointer(bp)) <= 0 || *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 5645 return *(*int32)(unsafe.Pointer(bp + 4)) 5646 } 5647 5648 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1690, uintptr(0), uintptr(0), uintptr(0)) 5649 5650 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5651 var nByte int32 = int32(uint64(unsafe.Sizeof(IdxRemCtx{})) + uint64(unsafe.Sizeof(IdxRemSlot{}))*uint64(*(*int32)(unsafe.Pointer(bp)))) 5652 pCtx = idxMalloc(tls, bp+4, nByte) 5653 } 5654 5655 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5656 var dbrem uintptr = func() uintptr { 5657 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5658 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 5659 } 5660 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 5661 }() 5662 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 5663 dbrem, ts+1724, 2, SQLITE_UTF8, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 5664 f func(*libc.TLS, uintptr, int32, uintptr) 5665 }{idxRemFunc})), uintptr(0), uintptr(0)) 5666 } 5667 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5668 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 5669 (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1728, 0, SQLITE_UTF8, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 5670 f func(*libc.TLS, uintptr, int32, uintptr) 5671 }{idxSampleFunc})), uintptr(0), uintptr(0)) 5672 } 5673 5674 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5675 (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot = *(*int32)(unsafe.Pointer(bp)) + 1 5676 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+40, pzErr, zAllIndex) 5677 } 5678 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5679 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+48, pzErr, zIndexXInfo) 5680 } 5681 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5682 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+56, pzErr, zWrite) 5683 } 5684 5685 for *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 5686 var iRowid i64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 5687 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 5688 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 5689 if zTab == uintptr(0) || zIdx == uintptr(0) { 5690 continue 5691 } 5692 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 && iPrev != iRowid { 5693 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).Ftarget = float64((*sqlite3expert)(unsafe.Pointer(p)).FiSample) / 100.0 5694 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FiTarget = (*sqlite3expert)(unsafe.Pointer(p)).FiSample 5695 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRow = 0.0 5696 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRet = 0.0 5697 *(*int32)(unsafe.Pointer(bp + 4)) = idxBuildSampleTable(tls, p, zTab) 5698 if *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 5699 break 5700 } 5701 } 5702 *(*int32)(unsafe.Pointer(bp + 4)) = idxPopulateOneStat1(tls, p, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56)), zTab, zIdx, pzErr) 5703 iPrev = iRowid 5704 } 5705 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 { 5706 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, 5707 ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5708 } 5709 5710 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 40))) 5711 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 48))) 5712 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 56))) 5713 5714 if pCtx != 0 { 5715 for i = 0; i < (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot; i++ { 5716 sqlite3.Xsqlite3_free(tls, (*IdxRemSlot)(unsafe.Pointer(pCtx+8+uintptr(i)*40)).Fz) 5717 } 5718 sqlite3.Xsqlite3_free(tls, pCtx) 5719 } 5720 5721 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 5722 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1735, uintptr(0), uintptr(0), uintptr(0)) 5723 } 5724 5725 sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 5726 return *(*int32)(unsafe.Pointer(bp + 4)) 5727 } 5728 5729 func sqlite3_expert_new(tls *libc.TLS, db uintptr, pzErrmsg uintptr) uintptr { 5730 bp := tls.Alloc(32) 5731 defer tls.Free(32) 5732 5733 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 5734 var pNew uintptr 5735 5736 pNew = idxMalloc(tls, bp+16, int32(unsafe.Sizeof(sqlite3expert{}))) 5737 5738 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5739 (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb = db 5740 (*sqlite3expert)(unsafe.Pointer(pNew)).FiSample = 100 5741 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+24) 5742 } 5743 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5744 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+16) 5745 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5746 sqlite3.Xsqlite3_db_config(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, SQLITE_DBCONFIG_TRIGGER_EQP, libc.VaList(bp, 1, uintptr(0))) 5747 } 5748 } 5749 5750 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5751 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 5752 *(*int32)(unsafe.Pointer(bp + 16)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb, bp+24, pzErrmsg, 5753 ts+1766, 0) 5754 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) { 5755 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 5756 if zSql != 0 { 5757 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, zSql, uintptr(0), uintptr(0), pzErrmsg) 5758 } 5759 } 5760 idxFinalize(tls, bp+16, *(*uintptr)(unsafe.Pointer(bp + 24))) 5761 } 5762 5763 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5764 *(*int32)(unsafe.Pointer(bp + 16)) = idxCreateVtabSchema(tls, pNew, pzErrmsg) 5765 } 5766 5767 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5768 sqlite3.Xsqlite3_set_authorizer(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbv, *(*uintptr)(unsafe.Pointer(&struct { 5769 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 5770 }{idxAuthCallback})), pNew) 5771 } 5772 5773 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 5774 sqlite3_expert_destroy(tls, pNew) 5775 pNew = uintptr(0) 5776 } 5777 return pNew 5778 } 5779 5780 func sqlite3_expert_config(tls *libc.TLS, p uintptr, op int32, va uintptr) int32 { 5781 var rc int32 = SQLITE_OK 5782 var ap va_list 5783 _ = ap 5784 ap = va 5785 switch op { 5786 case EXPERT_CONFIG_SAMPLE: 5787 { 5788 var iVal int32 = libc.VaInt32(&ap) 5789 if iVal < 0 { 5790 iVal = 0 5791 } 5792 if iVal > 100 { 5793 iVal = 100 5794 } 5795 (*sqlite3expert)(unsafe.Pointer(p)).FiSample = iVal 5796 break 5797 5798 } 5799 default: 5800 rc = SQLITE_NOTFOUND 5801 break 5802 } 5803 5804 _ = ap 5805 return rc 5806 } 5807 5808 func sqlite3_expert_sql(tls *libc.TLS, p uintptr, zSql uintptr, pzErr uintptr) int32 { 5809 bp := tls.Alloc(20) 5810 defer tls.Free(20) 5811 5812 var pScanOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpScan 5813 var pStmtOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5814 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 5815 *(*uintptr)(unsafe.Pointer(bp + 8)) = zSql 5816 5817 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun != 0 { 5818 return SQLITE_MISUSE 5819 } 5820 5821 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 { 5822 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 5823 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, *(*uintptr)(unsafe.Pointer(bp + 8)), -1, bp, bp+8) 5824 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5825 if *(*uintptr)(unsafe.Pointer(bp)) != 0 { 5826 var pNew uintptr 5827 var z uintptr = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 5828 var n int32 = int32(libc.Xstrlen(tls, z)) 5829 pNew = idxMalloc(tls, bp+16, int32(uint64(unsafe.Sizeof(IdxStatement{}))+uint64(n)+uint64(1))) 5830 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5831 (*IdxStatement)(unsafe.Pointer(pNew)).FzSql = pNew + 1*40 5832 libc.Xmemcpy(tls, (*IdxStatement)(unsafe.Pointer(pNew)).FzSql, z, uint64(n+1)) 5833 (*IdxStatement)(unsafe.Pointer(pNew)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5834 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 5835 (*IdxStatement)(unsafe.Pointer(pNew)).FiId = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 5836 } 5837 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pNew 5838 } 5839 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 5840 } 5841 } else { 5842 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 5843 } 5844 } 5845 5846 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 5847 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, pScanOrig) 5848 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, pStmtOrig) 5849 (*sqlite3expert)(unsafe.Pointer(p)).FpScan = pScanOrig 5850 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pStmtOrig 5851 } 5852 5853 return *(*int32)(unsafe.Pointer(bp + 16)) 5854 } 5855 5856 func sqlite3_expert_analyze(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5857 bp := tls.Alloc(28) 5858 defer tls.Free(28) 5859 5860 var pEntry uintptr 5861 5862 *(*int32)(unsafe.Pointer(bp + 24)) = idxProcessTriggers(tls, p, pzErr) 5863 5864 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5865 *(*int32)(unsafe.Pointer(bp + 24)) = idxCreateCandidates(tls, p) 5866 } else if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_BUSY|int32(3)<<8 { 5867 if pzErr != 0 { 5868 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+1865, 0) 5869 } 5870 return *(*int32)(unsafe.Pointer(bp + 24)) 5871 } 5872 5873 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5874 *(*int32)(unsafe.Pointer(bp + 24)) = idxPopulateStat1(tls, p, pzErr) 5875 } 5876 5877 for pEntry = (*sqlite3expert)(unsafe.Pointer(p)).FhIdx.FpFirst; pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext { 5878 (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates = idxAppendText(tls, bp+24, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates, 5879 ts+1909, libc.VaList(bp, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, 5880 func() uintptr { 5881 if (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 != 0 { 5882 return ts + 1918 5883 } 5884 return ts + 584 5885 }(), (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2)) 5886 } 5887 5888 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5889 *(*int32)(unsafe.Pointer(bp + 24)) = idxFindIndexes(tls, p, pzErr) 5890 } 5891 5892 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5893 (*sqlite3expert)(unsafe.Pointer(p)).FbRun = 1 5894 } 5895 return *(*int32)(unsafe.Pointer(bp + 24)) 5896 } 5897 5898 func sqlite3_expert_count(tls *libc.TLS, p uintptr) int32 { 5899 var nRet int32 = 0 5900 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 5901 nRet = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 5902 } 5903 return nRet 5904 } 5905 5906 func sqlite3_expert_report(tls *libc.TLS, p uintptr, iStmt int32, eReport int32) uintptr { 5907 var zRet uintptr = uintptr(0) 5908 var pStmt uintptr 5909 5910 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun == 0 { 5911 return uintptr(0) 5912 } 5913 for pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement; pStmt != 0 && (*IdxStatement)(unsafe.Pointer(pStmt)).FiId != iStmt; pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext { 5914 } 5915 switch eReport { 5916 case EXPERT_REPORT_SQL: 5917 if pStmt != 0 { 5918 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql 5919 } 5920 break 5921 case EXPERT_REPORT_INDEXES: 5922 if pStmt != 0 { 5923 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx 5924 } 5925 break 5926 case EXPERT_REPORT_PLAN: 5927 if pStmt != 0 { 5928 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP 5929 } 5930 break 5931 case EXPERT_REPORT_CANDIDATES: 5932 zRet = (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates 5933 break 5934 } 5935 return zRet 5936 } 5937 5938 func sqlite3_expert_destroy(tls *libc.TLS, p uintptr) { 5939 if p != 0 { 5940 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm) 5941 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv) 5942 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, uintptr(0)) 5943 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, uintptr(0)) 5944 idxTableFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpTable) 5945 idxWriteFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpWrite) 5946 idxHashClear(tls, p+88) 5947 sqlite3.Xsqlite3_free(tls, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates) 5948 sqlite3.Xsqlite3_free(tls, p) 5949 } 5950 } 5951 5952 type ClientData = uintptr 5953 5954 type Tcl_WideInt = int64 5955 type Tcl_WideUInt = uint64 5956 5957 type stat = struct { 5958 Fst_mode mode_t 5959 Fst_dev dev_t 5960 Fst_ino ino_t 5961 Fst_nlink nlink_t 5962 Fst_uid uid_t 5963 Fst_gid gid_t 5964 Fst_rdev dev_t 5965 Fst_atim struct { 5966 Ftv_sec time_t 5967 Ftv_nsec int64 5968 } 5969 Fst_mtim struct { 5970 Ftv_sec time_t 5971 Ftv_nsec int64 5972 } 5973 Fst_ctim struct { 5974 Ftv_sec time_t 5975 Ftv_nsec int64 5976 } 5977 Fst_size off_t 5978 Fst_blocks blkcnt_t 5979 Fst_blksize blksize_t 5980 Fst_flags u_int32_t 5981 Fst_gen u_int32_t 5982 F__ccgo_pad1 [4]byte 5983 F__st_birthtim struct { 5984 Ftv_sec time_t 5985 Ftv_nsec int64 5986 } 5987 } 5988 5989 type Tcl_Interp1 = struct { 5990 FresultDontUse uintptr 5991 FfreeProcDontUse uintptr 5992 FerrorLineDontUse int32 5993 F__ccgo_pad1 [4]byte 5994 } 5995 5996 type Tcl_Interp = Tcl_Interp1 5997 5998 type Tcl_AsyncHandler = uintptr 5999 type Tcl_Channel = uintptr 6000 type Tcl_ChannelTypeVersion = uintptr 6001 type Tcl_Command = uintptr 6002 type Tcl_Condition = uintptr 6003 type Tcl_Dict = uintptr 6004 type Tcl_EncodingState = uintptr 6005 type Tcl_Encoding = uintptr 6006 type Tcl_Event1 = struct { 6007 Fproc uintptr 6008 FnextPtr uintptr 6009 } 6010 6011 type Tcl_Event = Tcl_Event1 6012 type Tcl_InterpState = uintptr 6013 type Tcl_LoadHandle = uintptr 6014 type Tcl_Mutex = uintptr 6015 type Tcl_Pid = uintptr 6016 type Tcl_RegExp = uintptr 6017 type Tcl_ThreadDataKey = uintptr 6018 type Tcl_ThreadId = uintptr 6019 type Tcl_TimerToken = uintptr 6020 type Tcl_Trace = uintptr 6021 type Tcl_Var = uintptr 6022 type Tcl_ZlibStream = uintptr 6023 6024 type Tcl_RegExpIndices1 = struct { 6025 Fstart int64 6026 Fend int64 6027 } 6028 6029 type Tcl_RegExpIndices = Tcl_RegExpIndices1 6030 6031 type Tcl_RegExpInfo1 = struct { 6032 Fnsubs int32 6033 F__ccgo_pad1 [4]byte 6034 Fmatches uintptr 6035 FextendStart int64 6036 Freserved int64 6037 } 6038 6039 type Tcl_RegExpInfo = Tcl_RegExpInfo1 6040 6041 type Tcl_Stat_ = uintptr 6042 type Tcl_OldStat_ = uintptr 6043 6044 type Tcl_ValueType = uint32 6045 6046 type Tcl_Value1 = struct { 6047 Ftype Tcl_ValueType 6048 F__ccgo_pad1 [4]byte 6049 FintValue int64 6050 FdoubleValue float64 6051 FwideValue Tcl_WideInt 6052 } 6053 6054 type Tcl_Value = Tcl_Value1 6055 6056 type Tcl_Obj1 = struct { 6057 FrefCount int32 6058 F__ccgo_pad1 [4]byte 6059 Fbytes uintptr 6060 Flength int32 6061 F__ccgo_pad2 [4]byte 6062 FtypePtr uintptr 6063 FinternalRep struct { 6064 FlongValue int64 6065 F__ccgo_pad1 [8]byte 6066 } 6067 } 6068 6069 type Tcl_ObjType1 = struct { 6070 Fname uintptr 6071 FfreeIntRepProc uintptr 6072 FdupIntRepProc uintptr 6073 FupdateStringProc uintptr 6074 FsetFromAnyProc uintptr 6075 } 6076 6077 type Tcl_ObjType = Tcl_ObjType1 6078 6079 type Tcl_Obj = Tcl_Obj1 6080 6081 type Tcl_SavedResult1 = struct { 6082 Fresult uintptr 6083 FfreeProc uintptr 6084 FobjResultPtr uintptr 6085 FappendResult uintptr 6086 FappendAvl int32 6087 FappendUsed int32 6088 FresultSpace [201]int8 6089 F__ccgo_pad1 [7]byte 6090 } 6091 6092 type Tcl_SavedResult = Tcl_SavedResult1 6093 6094 type Tcl_Namespace1 = struct { 6095 Fname uintptr 6096 FfullName uintptr 6097 FclientData ClientData 6098 FdeleteProc uintptr 6099 FparentPtr uintptr 6100 } 6101 6102 type Tcl_Namespace = Tcl_Namespace1 6103 6104 type Tcl_CallFrame1 = struct { 6105 FnsPtr uintptr 6106 Fdummy1 int32 6107 Fdummy2 int32 6108 Fdummy3 uintptr 6109 Fdummy4 uintptr 6110 Fdummy5 uintptr 6111 Fdummy6 int32 6112 F__ccgo_pad1 [4]byte 6113 Fdummy7 uintptr 6114 Fdummy8 uintptr 6115 Fdummy9 int32 6116 F__ccgo_pad2 [4]byte 6117 Fdummy10 uintptr 6118 Fdummy11 uintptr 6119 Fdummy12 uintptr 6120 Fdummy13 uintptr 6121 } 6122 6123 type Tcl_CallFrame = Tcl_CallFrame1 6124 6125 type Tcl_CmdInfo1 = struct { 6126 FisNativeObjectProc int32 6127 F__ccgo_pad1 [4]byte 6128 FobjProc uintptr 6129 FobjClientData ClientData 6130 Fproc uintptr 6131 FclientData ClientData 6132 FdeleteProc uintptr 6133 FdeleteData ClientData 6134 FnamespacePtr uintptr 6135 } 6136 6137 type Tcl_CmdInfo = Tcl_CmdInfo1 6138 6139 type Tcl_DString1 = struct { 6140 Fstring uintptr 6141 Flength int32 6142 FspaceAvl int32 6143 FstaticSpace [200]int8 6144 } 6145 6146 type Tcl_DString = Tcl_DString1 6147 6148 type Tcl_HashKeyType1 = struct { 6149 Fversion int32 6150 Fflags int32 6151 FhashKeyProc uintptr 6152 FcompareKeysProc uintptr 6153 FallocEntryProc uintptr 6154 FfreeEntryProc uintptr 6155 } 6156 6157 type Tcl_HashKeyType = Tcl_HashKeyType1 6158 type Tcl_HashTable1 = struct { 6159 Fbuckets uintptr 6160 FstaticBuckets [4]uintptr 6161 FnumBuckets int32 6162 FnumEntries int32 6163 FrebuildSize int32 6164 FdownShift int32 6165 Fmask int32 6166 FkeyType int32 6167 FfindProc uintptr 6168 FcreateProc uintptr 6169 FtypePtr uintptr 6170 } 6171 6172 type Tcl_HashTable = Tcl_HashTable1 6173 type Tcl_HashEntry1 = struct { 6174 FnextPtr uintptr 6175 FtablePtr uintptr 6176 Fhash uintptr 6177 FclientData ClientData 6178 Fkey struct{ FoneWordValue uintptr } 6179 } 6180 6181 type Tcl_HashEntry = Tcl_HashEntry1 6182 6183 type Tcl_HashSearch1 = struct { 6184 FtablePtr uintptr 6185 FnextIndex int32 6186 F__ccgo_pad1 [4]byte 6187 FnextEntryPtr uintptr 6188 } 6189 6190 type Tcl_HashSearch = Tcl_HashSearch1 6191 6192 type Tcl_DictSearch = struct { 6193 Fnext uintptr 6194 Fepoch int32 6195 F__ccgo_pad1 [4]byte 6196 FdictionaryPtr Tcl_Dict 6197 } 6198 6199 type Tcl_QueuePosition = uint32 6200 6201 type Tcl_Time1 = struct { 6202 Fsec int64 6203 Fusec int64 6204 } 6205 6206 type Tcl_Time = Tcl_Time1 6207 6208 type Tcl_ChannelType1 = struct { 6209 FtypeName uintptr 6210 Fversion Tcl_ChannelTypeVersion 6211 FcloseProc uintptr 6212 FinputProc uintptr 6213 FoutputProc uintptr 6214 FseekProc uintptr 6215 FsetOptionProc uintptr 6216 FgetOptionProc uintptr 6217 FwatchProc uintptr 6218 FgetHandleProc uintptr 6219 Fclose2Proc uintptr 6220 FblockModeProc uintptr 6221 FflushProc uintptr 6222 FhandlerProc uintptr 6223 FwideSeekProc uintptr 6224 FthreadActionProc uintptr 6225 FtruncateProc uintptr 6226 } 6227 6228 type Tcl_ChannelType = Tcl_ChannelType1 6229 6230 type Tcl_PathType = uint32 6231 6232 type Tcl_GlobTypeData1 = struct { 6233 Ftype int32 6234 Fperm int32 6235 FmacType uintptr 6236 FmacCreator uintptr 6237 } 6238 6239 type Tcl_GlobTypeData = Tcl_GlobTypeData1 6240 6241 type utimbuf = struct { 6242 Factime time_t 6243 Fmodtime time_t 6244 } 6245 6246 type Tcl_FSVersion = uintptr 6247 6248 type Tcl_Filesystem1 = struct { 6249 FtypeName uintptr 6250 FstructureLength int32 6251 F__ccgo_pad1 [4]byte 6252 Fversion Tcl_FSVersion 6253 FpathInFilesystemProc uintptr 6254 FdupInternalRepProc uintptr 6255 FfreeInternalRepProc uintptr 6256 FinternalToNormalizedProc uintptr 6257 FcreateInternalRepProc uintptr 6258 FnormalizePathProc uintptr 6259 FfilesystemPathTypeProc uintptr 6260 FfilesystemSeparatorProc uintptr 6261 FstatProc uintptr 6262 FaccessProc uintptr 6263 FopenFileChannelProc uintptr 6264 FmatchInDirectoryProc uintptr 6265 FutimeProc uintptr 6266 FlinkProc uintptr 6267 FlistVolumesProc uintptr 6268 FfileAttrStringsProc uintptr 6269 FfileAttrsGetProc uintptr 6270 FfileAttrsSetProc uintptr 6271 FcreateDirectoryProc uintptr 6272 FremoveDirectoryProc uintptr 6273 FdeleteFileProc uintptr 6274 FcopyFileProc uintptr 6275 FrenameFileProc uintptr 6276 FcopyDirectoryProc uintptr 6277 FlstatProc uintptr 6278 FloadFileProc uintptr 6279 FgetCwdProc uintptr 6280 FchdirProc uintptr 6281 } 6282 6283 type Tcl_Filesystem = Tcl_Filesystem1 6284 6285 type Tcl_NotifierProcs1 = struct { 6286 FsetTimerProc uintptr 6287 FwaitForEventProc uintptr 6288 FcreateFileHandlerProc uintptr 6289 FdeleteFileHandlerProc uintptr 6290 FinitNotifierProc uintptr 6291 FfinalizeNotifierProc uintptr 6292 FalertNotifierProc uintptr 6293 FserviceModeHookProc uintptr 6294 } 6295 6296 type Tcl_NotifierProcs = Tcl_NotifierProcs1 6297 6298 type Tcl_Token1 = struct { 6299 Ftype int32 6300 F__ccgo_pad1 [4]byte 6301 Fstart uintptr 6302 Fsize int32 6303 FnumComponents int32 6304 } 6305 6306 type Tcl_Token = Tcl_Token1 6307 6308 type Tcl_Parse1 = struct { 6309 FcommentStart uintptr 6310 FcommentSize int32 6311 F__ccgo_pad1 [4]byte 6312 FcommandStart uintptr 6313 FcommandSize int32 6314 FnumWords int32 6315 FtokenPtr uintptr 6316 FnumTokens int32 6317 FtokensAvailable int32 6318 FerrorType int32 6319 F__ccgo_pad2 [4]byte 6320 Fstring uintptr 6321 Fend uintptr 6322 Finterp uintptr 6323 Fterm uintptr 6324 Fincomplete int32 6325 F__ccgo_pad3 [4]byte 6326 FstaticTokens [20]Tcl_Token 6327 } 6328 6329 type Tcl_Parse = Tcl_Parse1 6330 6331 type Tcl_EncodingType1 = struct { 6332 FencodingName uintptr 6333 FtoUtfProc uintptr 6334 FfromUtfProc uintptr 6335 FfreeProc uintptr 6336 FclientData ClientData 6337 FnullSize int32 6338 F__ccgo_pad1 [4]byte 6339 } 6340 6341 type Tcl_EncodingType = Tcl_EncodingType1 6342 6343 type Tcl_UniChar = uint16 6344 6345 type Tcl_Config1 = struct { 6346 Fkey uintptr 6347 Fvalue uintptr 6348 } 6349 6350 type Tcl_Config = Tcl_Config1 6351 type mp_digit = uint32 6352 6353 type Tcl_ArgvInfo = struct { 6354 Ftype int32 6355 F__ccgo_pad1 [4]byte 6356 FkeyStr uintptr 6357 FsrcPtr uintptr 6358 FdstPtr uintptr 6359 FhelpStr uintptr 6360 FclientData ClientData 6361 } 6362 6363 type TclPlatStubs1 = struct { 6364 Fmagic int32 6365 F__ccgo_pad1 [4]byte 6366 Fhooks uintptr 6367 } 6368 6369 type TclStubHooks = struct { 6370 FtclPlatStubs uintptr 6371 FtclIntStubs uintptr 6372 FtclIntPlatStubs uintptr 6373 } 6374 6375 type TclStubs1 = struct { 6376 Fmagic int32 6377 F__ccgo_pad1 [4]byte 6378 Fhooks uintptr 6379 Ftcl_PkgProvideEx uintptr 6380 Ftcl_PkgRequireEx uintptr 6381 Ftcl_Panic uintptr 6382 Ftcl_Alloc uintptr 6383 Ftcl_Free uintptr 6384 Ftcl_Realloc uintptr 6385 Ftcl_DbCkalloc uintptr 6386 Ftcl_DbCkfree uintptr 6387 Ftcl_DbCkrealloc uintptr 6388 Ftcl_CreateFileHandler uintptr 6389 Ftcl_DeleteFileHandler uintptr 6390 Ftcl_SetTimer uintptr 6391 Ftcl_Sleep uintptr 6392 Ftcl_WaitForEvent uintptr 6393 Ftcl_AppendAllObjTypes uintptr 6394 Ftcl_AppendStringsToObj uintptr 6395 Ftcl_AppendToObj uintptr 6396 Ftcl_ConcatObj uintptr 6397 Ftcl_ConvertToType uintptr 6398 Ftcl_DbDecrRefCount uintptr 6399 Ftcl_DbIncrRefCount uintptr 6400 Ftcl_DbIsShared uintptr 6401 Ftcl_DbNewBooleanObj uintptr 6402 Ftcl_DbNewByteArrayObj uintptr 6403 Ftcl_DbNewDoubleObj uintptr 6404 Ftcl_DbNewListObj uintptr 6405 Ftcl_DbNewLongObj uintptr 6406 Ftcl_DbNewObj uintptr 6407 Ftcl_DbNewStringObj uintptr 6408 Ftcl_DuplicateObj uintptr 6409 FtclFreeObj uintptr 6410 Ftcl_GetBoolean uintptr 6411 Ftcl_GetBooleanFromObj uintptr 6412 Ftcl_GetByteArrayFromObj uintptr 6413 Ftcl_GetDouble uintptr 6414 Ftcl_GetDoubleFromObj uintptr 6415 Ftcl_GetIndexFromObj uintptr 6416 Ftcl_GetInt uintptr 6417 Ftcl_GetIntFromObj uintptr 6418 Ftcl_GetLongFromObj uintptr 6419 Ftcl_GetObjType uintptr 6420 Ftcl_GetStringFromObj uintptr 6421 Ftcl_InvalidateStringRep uintptr 6422 Ftcl_ListObjAppendList uintptr 6423 Ftcl_ListObjAppendElement uintptr 6424 Ftcl_ListObjGetElements uintptr 6425 Ftcl_ListObjIndex uintptr 6426 Ftcl_ListObjLength uintptr 6427 Ftcl_ListObjReplace uintptr 6428 Ftcl_NewBooleanObj uintptr 6429 Ftcl_NewByteArrayObj uintptr 6430 Ftcl_NewDoubleObj uintptr 6431 Ftcl_NewIntObj uintptr 6432 Ftcl_NewListObj uintptr 6433 Ftcl_NewLongObj uintptr 6434 Ftcl_NewObj uintptr 6435 Ftcl_NewStringObj uintptr 6436 Ftcl_SetBooleanObj uintptr 6437 Ftcl_SetByteArrayLength uintptr 6438 Ftcl_SetByteArrayObj uintptr 6439 Ftcl_SetDoubleObj uintptr 6440 Ftcl_SetIntObj uintptr 6441 Ftcl_SetListObj uintptr 6442 Ftcl_SetLongObj uintptr 6443 Ftcl_SetObjLength uintptr 6444 Ftcl_SetStringObj uintptr 6445 Ftcl_AddErrorInfo uintptr 6446 Ftcl_AddObjErrorInfo uintptr 6447 Ftcl_AllowExceptions uintptr 6448 Ftcl_AppendElement uintptr 6449 Ftcl_AppendResult uintptr 6450 Ftcl_AsyncCreate uintptr 6451 Ftcl_AsyncDelete uintptr 6452 Ftcl_AsyncInvoke uintptr 6453 Ftcl_AsyncMark uintptr 6454 Ftcl_AsyncReady uintptr 6455 Ftcl_BackgroundError uintptr 6456 Ftcl_Backslash uintptr 6457 Ftcl_BadChannelOption uintptr 6458 Ftcl_CallWhenDeleted uintptr 6459 Ftcl_CancelIdleCall uintptr 6460 Ftcl_Close uintptr 6461 Ftcl_CommandComplete uintptr 6462 Ftcl_Concat uintptr 6463 Ftcl_ConvertElement uintptr 6464 Ftcl_ConvertCountedElement uintptr 6465 Ftcl_CreateAlias uintptr 6466 Ftcl_CreateAliasObj uintptr 6467 Ftcl_CreateChannel uintptr 6468 Ftcl_CreateChannelHandler uintptr 6469 Ftcl_CreateCloseHandler uintptr 6470 Ftcl_CreateCommand uintptr 6471 Ftcl_CreateEventSource uintptr 6472 Ftcl_CreateExitHandler uintptr 6473 Ftcl_CreateInterp uintptr 6474 Ftcl_CreateMathFunc uintptr 6475 Ftcl_CreateObjCommand uintptr 6476 Ftcl_CreateSlave uintptr 6477 Ftcl_CreateTimerHandler uintptr 6478 Ftcl_CreateTrace uintptr 6479 Ftcl_DeleteAssocData uintptr 6480 Ftcl_DeleteChannelHandler uintptr 6481 Ftcl_DeleteCloseHandler uintptr 6482 Ftcl_DeleteCommand uintptr 6483 Ftcl_DeleteCommandFromToken uintptr 6484 Ftcl_DeleteEvents uintptr 6485 Ftcl_DeleteEventSource uintptr 6486 Ftcl_DeleteExitHandler uintptr 6487 Ftcl_DeleteHashEntry uintptr 6488 Ftcl_DeleteHashTable uintptr 6489 Ftcl_DeleteInterp uintptr 6490 Ftcl_DetachPids uintptr 6491 Ftcl_DeleteTimerHandler uintptr 6492 Ftcl_DeleteTrace uintptr 6493 Ftcl_DontCallWhenDeleted uintptr 6494 Ftcl_DoOneEvent uintptr 6495 Ftcl_DoWhenIdle uintptr 6496 Ftcl_DStringAppend uintptr 6497 Ftcl_DStringAppendElement uintptr 6498 Ftcl_DStringEndSublist uintptr 6499 Ftcl_DStringFree uintptr 6500 Ftcl_DStringGetResult uintptr 6501 Ftcl_DStringInit uintptr 6502 Ftcl_DStringResult uintptr 6503 Ftcl_DStringSetLength uintptr 6504 Ftcl_DStringStartSublist uintptr 6505 Ftcl_Eof uintptr 6506 Ftcl_ErrnoId uintptr 6507 Ftcl_ErrnoMsg uintptr 6508 Ftcl_Eval uintptr 6509 Ftcl_EvalFile uintptr 6510 Ftcl_EvalObj uintptr 6511 Ftcl_EventuallyFree uintptr 6512 Ftcl_Exit uintptr 6513 Ftcl_ExposeCommand uintptr 6514 Ftcl_ExprBoolean uintptr 6515 Ftcl_ExprBooleanObj uintptr 6516 Ftcl_ExprDouble uintptr 6517 Ftcl_ExprDoubleObj uintptr 6518 Ftcl_ExprLong uintptr 6519 Ftcl_ExprLongObj uintptr 6520 Ftcl_ExprObj uintptr 6521 Ftcl_ExprString uintptr 6522 Ftcl_Finalize uintptr 6523 Ftcl_FindExecutable uintptr 6524 Ftcl_FirstHashEntry uintptr 6525 Ftcl_Flush uintptr 6526 Ftcl_FreeResult uintptr 6527 Ftcl_GetAlias uintptr 6528 Ftcl_GetAliasObj uintptr 6529 Ftcl_GetAssocData uintptr 6530 Ftcl_GetChannel uintptr 6531 Ftcl_GetChannelBufferSize uintptr 6532 Ftcl_GetChannelHandle uintptr 6533 Ftcl_GetChannelInstanceData uintptr 6534 Ftcl_GetChannelMode uintptr 6535 Ftcl_GetChannelName uintptr 6536 Ftcl_GetChannelOption uintptr 6537 Ftcl_GetChannelType uintptr 6538 Ftcl_GetCommandInfo uintptr 6539 Ftcl_GetCommandName uintptr 6540 Ftcl_GetErrno uintptr 6541 Ftcl_GetHostName uintptr 6542 Ftcl_GetInterpPath uintptr 6543 Ftcl_GetMaster uintptr 6544 Ftcl_GetNameOfExecutable uintptr 6545 Ftcl_GetObjResult uintptr 6546 Ftcl_GetOpenFile uintptr 6547 Ftcl_GetPathType uintptr 6548 Ftcl_Gets uintptr 6549 Ftcl_GetsObj uintptr 6550 Ftcl_GetServiceMode uintptr 6551 Ftcl_GetSlave uintptr 6552 Ftcl_GetStdChannel uintptr 6553 Ftcl_GetStringResult uintptr 6554 Ftcl_GetVar uintptr 6555 Ftcl_GetVar2 uintptr 6556 Ftcl_GlobalEval uintptr 6557 Ftcl_GlobalEvalObj uintptr 6558 Ftcl_HideCommand uintptr 6559 Ftcl_Init uintptr 6560 Ftcl_InitHashTable uintptr 6561 Ftcl_InputBlocked uintptr 6562 Ftcl_InputBuffered uintptr 6563 Ftcl_InterpDeleted uintptr 6564 Ftcl_IsSafe uintptr 6565 Ftcl_JoinPath uintptr 6566 Ftcl_LinkVar uintptr 6567 Freserved188 uintptr 6568 Ftcl_MakeFileChannel uintptr 6569 Ftcl_MakeSafe uintptr 6570 Ftcl_MakeTcpClientChannel uintptr 6571 Ftcl_Merge uintptr 6572 Ftcl_NextHashEntry uintptr 6573 Ftcl_NotifyChannel uintptr 6574 Ftcl_ObjGetVar2 uintptr 6575 Ftcl_ObjSetVar2 uintptr 6576 Ftcl_OpenCommandChannel uintptr 6577 Ftcl_OpenFileChannel uintptr 6578 Ftcl_OpenTcpClient uintptr 6579 Ftcl_OpenTcpServer uintptr 6580 Ftcl_Preserve uintptr 6581 Ftcl_PrintDouble uintptr 6582 Ftcl_PutEnv uintptr 6583 Ftcl_PosixError uintptr 6584 Ftcl_QueueEvent uintptr 6585 Ftcl_Read uintptr 6586 Ftcl_ReapDetachedProcs uintptr 6587 Ftcl_RecordAndEval uintptr 6588 Ftcl_RecordAndEvalObj uintptr 6589 Ftcl_RegisterChannel uintptr 6590 Ftcl_RegisterObjType uintptr 6591 Ftcl_RegExpCompile uintptr 6592 Ftcl_RegExpExec uintptr 6593 Ftcl_RegExpMatch uintptr 6594 Ftcl_RegExpRange uintptr 6595 Ftcl_Release uintptr 6596 Ftcl_ResetResult uintptr 6597 Ftcl_ScanElement uintptr 6598 Ftcl_ScanCountedElement uintptr 6599 Ftcl_SeekOld uintptr 6600 Ftcl_ServiceAll uintptr 6601 Ftcl_ServiceEvent uintptr 6602 Ftcl_SetAssocData uintptr 6603 Ftcl_SetChannelBufferSize uintptr 6604 Ftcl_SetChannelOption uintptr 6605 Ftcl_SetCommandInfo uintptr 6606 Ftcl_SetErrno uintptr 6607 Ftcl_SetErrorCode uintptr 6608 Ftcl_SetMaxBlockTime uintptr 6609 Ftcl_SetPanicProc uintptr 6610 Ftcl_SetRecursionLimit uintptr 6611 Ftcl_SetResult uintptr 6612 Ftcl_SetServiceMode uintptr 6613 Ftcl_SetObjErrorCode uintptr 6614 Ftcl_SetObjResult uintptr 6615 Ftcl_SetStdChannel uintptr 6616 Ftcl_SetVar uintptr 6617 Ftcl_SetVar2 uintptr 6618 Ftcl_SignalId uintptr 6619 Ftcl_SignalMsg uintptr 6620 Ftcl_SourceRCFile uintptr 6621 Ftcl_SplitList uintptr 6622 Ftcl_SplitPath uintptr 6623 Ftcl_StaticPackage uintptr 6624 Ftcl_StringMatch uintptr 6625 Ftcl_TellOld uintptr 6626 Ftcl_TraceVar uintptr 6627 Ftcl_TraceVar2 uintptr 6628 Ftcl_TranslateFileName uintptr 6629 Ftcl_Ungets uintptr 6630 Ftcl_UnlinkVar uintptr 6631 Ftcl_UnregisterChannel uintptr 6632 Ftcl_UnsetVar uintptr 6633 Ftcl_UnsetVar2 uintptr 6634 Ftcl_UntraceVar uintptr 6635 Ftcl_UntraceVar2 uintptr 6636 Ftcl_UpdateLinkedVar uintptr 6637 Ftcl_UpVar uintptr 6638 Ftcl_UpVar2 uintptr 6639 Ftcl_VarEval uintptr 6640 Ftcl_VarTraceInfo uintptr 6641 Ftcl_VarTraceInfo2 uintptr 6642 Ftcl_Write uintptr 6643 Ftcl_WrongNumArgs uintptr 6644 Ftcl_DumpActiveMemory uintptr 6645 Ftcl_ValidateAllMemory uintptr 6646 Ftcl_AppendResultVA uintptr 6647 Ftcl_AppendStringsToObjVA uintptr 6648 Ftcl_HashStats uintptr 6649 Ftcl_ParseVar uintptr 6650 Ftcl_PkgPresent uintptr 6651 Ftcl_PkgPresentEx uintptr 6652 Ftcl_PkgProvide uintptr 6653 Ftcl_PkgRequire uintptr 6654 Ftcl_SetErrorCodeVA uintptr 6655 Ftcl_VarEvalVA uintptr 6656 Ftcl_WaitPid uintptr 6657 Ftcl_PanicVA uintptr 6658 Ftcl_GetVersion uintptr 6659 Ftcl_InitMemory uintptr 6660 Ftcl_StackChannel uintptr 6661 Ftcl_UnstackChannel uintptr 6662 Ftcl_GetStackedChannel uintptr 6663 Ftcl_SetMainLoop uintptr 6664 Freserved285 uintptr 6665 Ftcl_AppendObjToObj uintptr 6666 Ftcl_CreateEncoding uintptr 6667 Ftcl_CreateThreadExitHandler uintptr 6668 Ftcl_DeleteThreadExitHandler uintptr 6669 Ftcl_DiscardResult uintptr 6670 Ftcl_EvalEx uintptr 6671 Ftcl_EvalObjv uintptr 6672 Ftcl_EvalObjEx uintptr 6673 Ftcl_ExitThread uintptr 6674 Ftcl_ExternalToUtf uintptr 6675 Ftcl_ExternalToUtfDString uintptr 6676 Ftcl_FinalizeThread uintptr 6677 Ftcl_FinalizeNotifier uintptr 6678 Ftcl_FreeEncoding uintptr 6679 Ftcl_GetCurrentThread uintptr 6680 Ftcl_GetEncoding uintptr 6681 Ftcl_GetEncodingName uintptr 6682 Ftcl_GetEncodingNames uintptr 6683 Ftcl_GetIndexFromObjStruct uintptr 6684 Ftcl_GetThreadData uintptr 6685 Ftcl_GetVar2Ex uintptr 6686 Ftcl_InitNotifier uintptr 6687 Ftcl_MutexLock uintptr 6688 Ftcl_MutexUnlock uintptr 6689 Ftcl_ConditionNotify uintptr 6690 Ftcl_ConditionWait uintptr 6691 Ftcl_NumUtfChars uintptr 6692 Ftcl_ReadChars uintptr 6693 Ftcl_RestoreResult uintptr 6694 Ftcl_SaveResult uintptr 6695 Ftcl_SetSystemEncoding uintptr 6696 Ftcl_SetVar2Ex uintptr 6697 Ftcl_ThreadAlert uintptr 6698 Ftcl_ThreadQueueEvent uintptr 6699 Ftcl_UniCharAtIndex uintptr 6700 Ftcl_UniCharToLower uintptr 6701 Ftcl_UniCharToTitle uintptr 6702 Ftcl_UniCharToUpper uintptr 6703 Ftcl_UniCharToUtf uintptr 6704 Ftcl_UtfAtIndex uintptr 6705 Ftcl_UtfCharComplete uintptr 6706 Ftcl_UtfBackslash uintptr 6707 Ftcl_UtfFindFirst uintptr 6708 Ftcl_UtfFindLast uintptr 6709 Ftcl_UtfNext uintptr 6710 Ftcl_UtfPrev uintptr 6711 Ftcl_UtfToExternal uintptr 6712 Ftcl_UtfToExternalDString uintptr 6713 Ftcl_UtfToLower uintptr 6714 Ftcl_UtfToTitle uintptr 6715 Ftcl_UtfToUniChar uintptr 6716 Ftcl_UtfToUpper uintptr 6717 Ftcl_WriteChars uintptr 6718 Ftcl_WriteObj uintptr 6719 Ftcl_GetString uintptr 6720 Ftcl_GetDefaultEncodingDir uintptr 6721 Ftcl_SetDefaultEncodingDir uintptr 6722 Ftcl_AlertNotifier uintptr 6723 Ftcl_ServiceModeHook uintptr 6724 Ftcl_UniCharIsAlnum uintptr 6725 Ftcl_UniCharIsAlpha uintptr 6726 Ftcl_UniCharIsDigit uintptr 6727 Ftcl_UniCharIsLower uintptr 6728 Ftcl_UniCharIsSpace uintptr 6729 Ftcl_UniCharIsUpper uintptr 6730 Ftcl_UniCharIsWordChar uintptr 6731 Ftcl_UniCharLen uintptr 6732 Ftcl_UniCharNcmp uintptr 6733 Ftcl_UniCharToUtfDString uintptr 6734 Ftcl_UtfToUniCharDString uintptr 6735 Ftcl_GetRegExpFromObj uintptr 6736 Ftcl_EvalTokens uintptr 6737 Ftcl_FreeParse uintptr 6738 Ftcl_LogCommandInfo uintptr 6739 Ftcl_ParseBraces uintptr 6740 Ftcl_ParseCommand uintptr 6741 Ftcl_ParseExpr uintptr 6742 Ftcl_ParseQuotedString uintptr 6743 Ftcl_ParseVarName uintptr 6744 Ftcl_GetCwd uintptr 6745 Ftcl_Chdir uintptr 6746 Ftcl_Access uintptr 6747 Ftcl_Stat uintptr 6748 Ftcl_UtfNcmp uintptr 6749 Ftcl_UtfNcasecmp uintptr 6750 Ftcl_StringCaseMatch uintptr 6751 Ftcl_UniCharIsControl uintptr 6752 Ftcl_UniCharIsGraph uintptr 6753 Ftcl_UniCharIsPrint uintptr 6754 Ftcl_UniCharIsPunct uintptr 6755 Ftcl_RegExpExecObj uintptr 6756 Ftcl_RegExpGetInfo uintptr 6757 Ftcl_NewUnicodeObj uintptr 6758 Ftcl_SetUnicodeObj uintptr 6759 Ftcl_GetCharLength uintptr 6760 Ftcl_GetUniChar uintptr 6761 Ftcl_GetUnicode uintptr 6762 Ftcl_GetRange uintptr 6763 Ftcl_AppendUnicodeToObj uintptr 6764 Ftcl_RegExpMatchObj uintptr 6765 Ftcl_SetNotifier uintptr 6766 Ftcl_GetAllocMutex uintptr 6767 Ftcl_GetChannelNames uintptr 6768 Ftcl_GetChannelNamesEx uintptr 6769 Ftcl_ProcObjCmd uintptr 6770 Ftcl_ConditionFinalize uintptr 6771 Ftcl_MutexFinalize uintptr 6772 Ftcl_CreateThread uintptr 6773 Ftcl_ReadRaw uintptr 6774 Ftcl_WriteRaw uintptr 6775 Ftcl_GetTopChannel uintptr 6776 Ftcl_ChannelBuffered uintptr 6777 Ftcl_ChannelName uintptr 6778 Ftcl_ChannelVersion uintptr 6779 Ftcl_ChannelBlockModeProc uintptr 6780 Ftcl_ChannelCloseProc uintptr 6781 Ftcl_ChannelClose2Proc uintptr 6782 Ftcl_ChannelInputProc uintptr 6783 Ftcl_ChannelOutputProc uintptr 6784 Ftcl_ChannelSeekProc uintptr 6785 Ftcl_ChannelSetOptionProc uintptr 6786 Ftcl_ChannelGetOptionProc uintptr 6787 Ftcl_ChannelWatchProc uintptr 6788 Ftcl_ChannelGetHandleProc uintptr 6789 Ftcl_ChannelFlushProc uintptr 6790 Ftcl_ChannelHandlerProc uintptr 6791 Ftcl_JoinThread uintptr 6792 Ftcl_IsChannelShared uintptr 6793 Ftcl_IsChannelRegistered uintptr 6794 Ftcl_CutChannel uintptr 6795 Ftcl_SpliceChannel uintptr 6796 Ftcl_ClearChannelHandlers uintptr 6797 Ftcl_IsChannelExisting uintptr 6798 Ftcl_UniCharNcasecmp uintptr 6799 Ftcl_UniCharCaseMatch uintptr 6800 Ftcl_FindHashEntry uintptr 6801 Ftcl_CreateHashEntry uintptr 6802 Ftcl_InitCustomHashTable uintptr 6803 Ftcl_InitObjHashTable uintptr 6804 Ftcl_CommandTraceInfo uintptr 6805 Ftcl_TraceCommand uintptr 6806 Ftcl_UntraceCommand uintptr 6807 Ftcl_AttemptAlloc uintptr 6808 Ftcl_AttemptDbCkalloc uintptr 6809 Ftcl_AttemptRealloc uintptr 6810 Ftcl_AttemptDbCkrealloc uintptr 6811 Ftcl_AttemptSetObjLength uintptr 6812 Ftcl_GetChannelThread uintptr 6813 Ftcl_GetUnicodeFromObj uintptr 6814 Ftcl_GetMathFuncInfo uintptr 6815 Ftcl_ListMathFuncs uintptr 6816 Ftcl_SubstObj uintptr 6817 Ftcl_DetachChannel uintptr 6818 Ftcl_IsStandardChannel uintptr 6819 Ftcl_FSCopyFile uintptr 6820 Ftcl_FSCopyDirectory uintptr 6821 Ftcl_FSCreateDirectory uintptr 6822 Ftcl_FSDeleteFile uintptr 6823 Ftcl_FSLoadFile uintptr 6824 Ftcl_FSMatchInDirectory uintptr 6825 Ftcl_FSLink uintptr 6826 Ftcl_FSRemoveDirectory uintptr 6827 Ftcl_FSRenameFile uintptr 6828 Ftcl_FSLstat uintptr 6829 Ftcl_FSUtime uintptr 6830 Ftcl_FSFileAttrsGet uintptr 6831 Ftcl_FSFileAttrsSet uintptr 6832 Ftcl_FSFileAttrStrings uintptr 6833 Ftcl_FSStat uintptr 6834 Ftcl_FSAccess uintptr 6835 Ftcl_FSOpenFileChannel uintptr 6836 Ftcl_FSGetCwd uintptr 6837 Ftcl_FSChdir uintptr 6838 Ftcl_FSConvertToPathType uintptr 6839 Ftcl_FSJoinPath uintptr 6840 Ftcl_FSSplitPath uintptr 6841 Ftcl_FSEqualPaths uintptr 6842 Ftcl_FSGetNormalizedPath uintptr 6843 Ftcl_FSJoinToPath uintptr 6844 Ftcl_FSGetInternalRep uintptr 6845 Ftcl_FSGetTranslatedPath uintptr 6846 Ftcl_FSEvalFile uintptr 6847 Ftcl_FSNewNativePath uintptr 6848 Ftcl_FSGetNativePath uintptr 6849 Ftcl_FSFileSystemInfo uintptr 6850 Ftcl_FSPathSeparator uintptr 6851 Ftcl_FSListVolumes uintptr 6852 Ftcl_FSRegister uintptr 6853 Ftcl_FSUnregister uintptr 6854 Ftcl_FSData uintptr 6855 Ftcl_FSGetTranslatedStringPath uintptr 6856 Ftcl_FSGetFileSystemForPath uintptr 6857 Ftcl_FSGetPathType uintptr 6858 Ftcl_OutputBuffered uintptr 6859 Ftcl_FSMountsChanged uintptr 6860 Ftcl_EvalTokensStandard uintptr 6861 Ftcl_GetTime uintptr 6862 Ftcl_CreateObjTrace uintptr 6863 Ftcl_GetCommandInfoFromToken uintptr 6864 Ftcl_SetCommandInfoFromToken uintptr 6865 Ftcl_DbNewWideIntObj uintptr 6866 Ftcl_GetWideIntFromObj uintptr 6867 Ftcl_NewWideIntObj uintptr 6868 Ftcl_SetWideIntObj uintptr 6869 Ftcl_AllocStatBuf uintptr 6870 Ftcl_Seek uintptr 6871 Ftcl_Tell uintptr 6872 Ftcl_ChannelWideSeekProc uintptr 6873 Ftcl_DictObjPut uintptr 6874 Ftcl_DictObjGet uintptr 6875 Ftcl_DictObjRemove uintptr 6876 Ftcl_DictObjSize uintptr 6877 Ftcl_DictObjFirst uintptr 6878 Ftcl_DictObjNext uintptr 6879 Ftcl_DictObjDone uintptr 6880 Ftcl_DictObjPutKeyList uintptr 6881 Ftcl_DictObjRemoveKeyList uintptr 6882 Ftcl_NewDictObj uintptr 6883 Ftcl_DbNewDictObj uintptr 6884 Ftcl_RegisterConfig uintptr 6885 Ftcl_CreateNamespace uintptr 6886 Ftcl_DeleteNamespace uintptr 6887 Ftcl_AppendExportList uintptr 6888 Ftcl_Export uintptr 6889 Ftcl_Import uintptr 6890 Ftcl_ForgetImport uintptr 6891 Ftcl_GetCurrentNamespace uintptr 6892 Ftcl_GetGlobalNamespace uintptr 6893 Ftcl_FindNamespace uintptr 6894 Ftcl_FindCommand uintptr 6895 Ftcl_GetCommandFromObj uintptr 6896 Ftcl_GetCommandFullName uintptr 6897 Ftcl_FSEvalFileEx uintptr 6898 Ftcl_SetExitProc uintptr 6899 Ftcl_LimitAddHandler uintptr 6900 Ftcl_LimitRemoveHandler uintptr 6901 Ftcl_LimitReady uintptr 6902 Ftcl_LimitCheck uintptr 6903 Ftcl_LimitExceeded uintptr 6904 Ftcl_LimitSetCommands uintptr 6905 Ftcl_LimitSetTime uintptr 6906 Ftcl_LimitSetGranularity uintptr 6907 Ftcl_LimitTypeEnabled uintptr 6908 Ftcl_LimitTypeExceeded uintptr 6909 Ftcl_LimitTypeSet uintptr 6910 Ftcl_LimitTypeReset uintptr 6911 Ftcl_LimitGetCommands uintptr 6912 Ftcl_LimitGetTime uintptr 6913 Ftcl_LimitGetGranularity uintptr 6914 Ftcl_SaveInterpState uintptr 6915 Ftcl_RestoreInterpState uintptr 6916 Ftcl_DiscardInterpState uintptr 6917 Ftcl_SetReturnOptions uintptr 6918 Ftcl_GetReturnOptions uintptr 6919 Ftcl_IsEnsemble uintptr 6920 Ftcl_CreateEnsemble uintptr 6921 Ftcl_FindEnsemble uintptr 6922 Ftcl_SetEnsembleSubcommandList uintptr 6923 Ftcl_SetEnsembleMappingDict uintptr 6924 Ftcl_SetEnsembleUnknownHandler uintptr 6925 Ftcl_SetEnsembleFlags uintptr 6926 Ftcl_GetEnsembleSubcommandList uintptr 6927 Ftcl_GetEnsembleMappingDict uintptr 6928 Ftcl_GetEnsembleUnknownHandler uintptr 6929 Ftcl_GetEnsembleFlags uintptr 6930 Ftcl_GetEnsembleNamespace uintptr 6931 Ftcl_SetTimeProc uintptr 6932 Ftcl_QueryTimeProc uintptr 6933 Ftcl_ChannelThreadActionProc uintptr 6934 Ftcl_NewBignumObj uintptr 6935 Ftcl_DbNewBignumObj uintptr 6936 Ftcl_SetBignumObj uintptr 6937 Ftcl_GetBignumFromObj uintptr 6938 Ftcl_TakeBignumFromObj uintptr 6939 Ftcl_TruncateChannel uintptr 6940 Ftcl_ChannelTruncateProc uintptr 6941 Ftcl_SetChannelErrorInterp uintptr 6942 Ftcl_GetChannelErrorInterp uintptr 6943 Ftcl_SetChannelError uintptr 6944 Ftcl_GetChannelError uintptr 6945 Ftcl_InitBignumFromDouble uintptr 6946 Ftcl_GetNamespaceUnknownHandler uintptr 6947 Ftcl_SetNamespaceUnknownHandler uintptr 6948 Ftcl_GetEncodingFromObj uintptr 6949 Ftcl_GetEncodingSearchPath uintptr 6950 Ftcl_SetEncodingSearchPath uintptr 6951 Ftcl_GetEncodingNameFromEnvironment uintptr 6952 Ftcl_PkgRequireProc uintptr 6953 Ftcl_AppendObjToErrorInfo uintptr 6954 Ftcl_AppendLimitedToObj uintptr 6955 Ftcl_Format uintptr 6956 Ftcl_AppendFormatToObj uintptr 6957 Ftcl_ObjPrintf uintptr 6958 Ftcl_AppendPrintfToObj uintptr 6959 Ftcl_CancelEval uintptr 6960 Ftcl_Canceled uintptr 6961 Ftcl_CreatePipe uintptr 6962 Ftcl_NRCreateCommand uintptr 6963 Ftcl_NREvalObj uintptr 6964 Ftcl_NREvalObjv uintptr 6965 Ftcl_NRCmdSwap uintptr 6966 Ftcl_NRAddCallback uintptr 6967 Ftcl_NRCallObjProc uintptr 6968 Ftcl_GetFSDeviceFromStat uintptr 6969 Ftcl_GetFSInodeFromStat uintptr 6970 Ftcl_GetModeFromStat uintptr 6971 Ftcl_GetLinkCountFromStat uintptr 6972 Ftcl_GetUserIdFromStat uintptr 6973 Ftcl_GetGroupIdFromStat uintptr 6974 Ftcl_GetDeviceTypeFromStat uintptr 6975 Ftcl_GetAccessTimeFromStat uintptr 6976 Ftcl_GetModificationTimeFromStat uintptr 6977 Ftcl_GetChangeTimeFromStat uintptr 6978 Ftcl_GetSizeFromStat uintptr 6979 Ftcl_GetBlocksFromStat uintptr 6980 Ftcl_GetBlockSizeFromStat uintptr 6981 Ftcl_SetEnsembleParameterList uintptr 6982 Ftcl_GetEnsembleParameterList uintptr 6983 Ftcl_ParseArgsObjv uintptr 6984 Ftcl_GetErrorLine uintptr 6985 Ftcl_SetErrorLine uintptr 6986 Ftcl_TransferResult uintptr 6987 Ftcl_InterpActive uintptr 6988 Ftcl_BackgroundException uintptr 6989 Ftcl_ZlibDeflate uintptr 6990 Ftcl_ZlibInflate uintptr 6991 Ftcl_ZlibCRC32 uintptr 6992 Ftcl_ZlibAdler32 uintptr 6993 Ftcl_ZlibStreamInit uintptr 6994 Ftcl_ZlibStreamGetCommandName uintptr 6995 Ftcl_ZlibStreamEof uintptr 6996 Ftcl_ZlibStreamChecksum uintptr 6997 Ftcl_ZlibStreamPut uintptr 6998 Ftcl_ZlibStreamGet uintptr 6999 Ftcl_ZlibStreamClose uintptr 7000 Ftcl_ZlibStreamReset uintptr 7001 Ftcl_SetStartupScript uintptr 7002 Ftcl_GetStartupScript uintptr 7003 Ftcl_CloseEx uintptr 7004 Ftcl_NRExprObj uintptr 7005 Ftcl_NRSubstObj uintptr 7006 Ftcl_LoadFile uintptr 7007 Ftcl_FindSymbol uintptr 7008 Ftcl_FSUnloadFile uintptr 7009 Ftcl_ZlibStreamSetCompressionDictionary uintptr 7010 Freserved631 uintptr 7011 Freserved632 uintptr 7012 Freserved633 uintptr 7013 Freserved634 uintptr 7014 Freserved635 uintptr 7015 Freserved636 uintptr 7016 Freserved637 uintptr 7017 Freserved638 uintptr 7018 Freserved639 uintptr 7019 Freserved640 uintptr 7020 Freserved641 uintptr 7021 Freserved642 uintptr 7022 Freserved643 uintptr 7023 Freserved644 uintptr 7024 Freserved645 uintptr 7025 Freserved646 uintptr 7026 Freserved647 uintptr 7027 Freserved648 uintptr 7028 Freserved649 uintptr 7029 Freserved650 uintptr 7030 Freserved651 uintptr 7031 Freserved652 uintptr 7032 Freserved653 uintptr 7033 Freserved654 uintptr 7034 Freserved655 uintptr 7035 Freserved656 uintptr 7036 Freserved657 uintptr 7037 Freserved658 uintptr 7038 Freserved659 uintptr 7039 FtclUnusedStubEntry uintptr 7040 } 7041 7042 type TclStubs = TclStubs1 7043 7044 type TclPlatStubs = TclPlatStubs1 7045 7046 func dbHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 7047 bp := tls.Alloc(88) 7048 defer tls.Free(88) 7049 7050 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 7051 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 7052 return TCL_ERROR 7053 } 7054 7055 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 7056 return TCL_OK 7057 } 7058 7059 func testExpertCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7060 bp := tls.Alloc(212) 7061 defer tls.Free(212) 7062 7063 var pExpert uintptr = clientData 7064 *(*[6]Subcmd)(unsafe.Pointer(bp)) = [6]Subcmd{ 7065 {FzSub: ts + 1947, FnArg: 1, FzMsg: ts + 1951}, 7066 {FzSub: ts + 1957, FzMsg: ts + 584}, 7067 {FzSub: ts + 1965, FzMsg: ts + 584}, 7068 {FzSub: ts + 1971, FnArg: 2, FzMsg: ts + 1978}, 7069 {FzSub: ts + 1991, FzMsg: ts + 584}, 7070 {}, 7071 } 7072 7073 var rc int32 = TCL_OK 7074 *(*uintptr)(unsafe.Pointer(bp + 152)) = uintptr(0) 7075 7076 if objc < 2 { 7077 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 7078 return TCL_ERROR 7079 } 7080 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 7081 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(Subcmd{})), ts+2014, 0, bp+144) 7082 if rc != TCL_OK { 7083 return rc 7084 } 7085 if objc != 2+(*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FnArg { 7086 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FzMsg) 7087 return TCL_ERROR 7088 } 7089 7090 switch *(*int32)(unsafe.Pointer(bp + 144)) { 7091 case 0: 7092 { 7093 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7094 rc = sqlite3_expert_sql(tls, pExpert, zArg, bp+152) 7095 break 7096 7097 } 7098 7099 case 1: 7100 { 7101 rc = sqlite3_expert_analyze(tls, pExpert, bp+152) 7102 break 7103 7104 } 7105 7106 case 2: 7107 { 7108 var n int32 = sqlite3_expert_count(tls, pExpert) 7109 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, n)) 7110 break 7111 7112 } 7113 7114 case 3: 7115 { 7116 *(*[5]uintptr)(unsafe.Pointer(bp + 168)) = [5]uintptr{ 7117 ts + 1947, ts + 2026, ts + 2034, ts + 2039, uintptr(0), 7118 } 7119 7120 var zReport uintptr 7121 7122 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+160) != 0 || 7123 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168, int32(unsafe.Sizeof(uintptr(0))), ts+1971, 0, bp+208) != 0 { 7124 return TCL_ERROR 7125 } 7126 7127 zReport = sqlite3_expert_report(tls, pExpert, *(*int32)(unsafe.Pointer(bp + 160)), 1+*(*int32)(unsafe.Pointer(bp + 208))) 7128 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zReport, -1)) 7129 break 7130 7131 } 7132 7133 default: 7134 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 7135 break 7136 } 7137 7138 if rc != TCL_OK { 7139 if *(*uintptr)(unsafe.Pointer(bp + 152)) != 0 { 7140 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 152)), -1)) 7141 } else { 7142 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 7143 } 7144 } 7145 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 152))) 7146 return rc 7147 } 7148 7149 type Subcmd = struct { 7150 FzSub uintptr 7151 FnArg int32 7152 F__ccgo_pad1 [4]byte 7153 FzMsg uintptr 7154 } 7155 7156 func testExpertDel(tls *libc.TLS, clientData uintptr) { 7157 var pExpert uintptr = clientData 7158 sqlite3_expert_destroy(tls, pExpert) 7159 } 7160 7161 func test_sqlite3_expert_new(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7162 bp := tls.Alloc(56) 7163 defer tls.Free(56) 7164 7165 var zCmd uintptr = uintptr(0) 7166 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7167 var pExpert uintptr 7168 var rc int32 = TCL_OK 7169 7170 if objc != 2 { 7171 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 7172 return TCL_ERROR 7173 } 7174 if dbHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) != 0 { 7175 return TCL_ERROR 7176 } 7177 7178 zCmd = sqlite3.Xsqlite3_mprintf(tls, ts+2053, libc.VaList(bp, libc.PreIncInt32(&iCmd, 1))) 7179 if zCmd == uintptr(0) { 7180 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, ts+2069, uintptr(0))) 7181 return TCL_ERROR 7182 } 7183 7184 pExpert = sqlite3_expert_new(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48) 7185 if pExpert == uintptr(0) { 7186 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 48)), uintptr(0))) 7187 rc = TCL_ERROR 7188 } else { 7189 var p uintptr = pExpert 7190 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 7191 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7192 }{testExpertCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testExpertDel}))) 7193 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zCmd, -1)) 7194 } 7195 7196 sqlite3.Xsqlite3_free(tls, zCmd) 7197 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 7198 return rc 7199 } 7200 7201 var iCmd int32 = 0 7202 7203 func TestExpert_Init(tls *libc.TLS, interp uintptr) int32 { 7204 bp := tls.Alloc(16) 7205 defer tls.Free(16) 7206 7207 *(*[1]struct { 7208 FzCmd uintptr 7209 FxProc uintptr 7210 })(unsafe.Pointer(bp)) = [1]struct { 7211 FzCmd uintptr 7212 FxProc uintptr 7213 }{ 7214 {FzCmd: ts + 2083, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 7215 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7216 }{test_sqlite3_expert_new}))}, 7217 } 7218 var i int32 7219 7220 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]struct { 7221 FzCmd uintptr 7222 FxProc uintptr 7223 }{}))/uint64(unsafe.Sizeof(struct { 7224 FzCmd uintptr 7225 FxProc uintptr 7226 }{})); i++ { 7227 var p uintptr = bp + uintptr(i)*16 7228 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 7229 FzCmd uintptr 7230 FxProc uintptr 7231 })(unsafe.Pointer(p)).FzCmd, (*struct { 7232 FzCmd uintptr 7233 FxProc uintptr 7234 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 7235 } 7236 return TCL_OK 7237 } 7238 7239 func f5tDbPointer(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr) int32 { 7240 bp := tls.Alloc(64) 7241 defer tls.Free(64) 7242 7243 var p uintptr 7244 7245 var z uintptr = tcl.XTcl_GetString(tls, pObj) 7246 if tcl.XTcl_GetCommandInfo(tls, interp, z, bp) != 0 { 7247 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 7248 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 7249 return TCL_OK 7250 } 7251 return TCL_ERROR 7252 } 7253 7254 func f5tResultToErrorCode(tls *libc.TLS, zRes uintptr) int32 { 7255 bp := tls.Alloc(64) 7256 defer tls.Free(64) 7257 7258 *(*[4]ErrorCode)(unsafe.Pointer(bp)) = [4]ErrorCode{ 7259 {Frc: SQLITE_DONE, FzError: ts + 2102}, 7260 {Frc: SQLITE_ERROR, FzError: ts + 2114}, 7261 {FzError: ts + 2127}, 7262 {FzError: ts + 584}, 7263 } 7264 var i int32 7265 7266 for i = 0; uint64(i) < uint64(unsafe.Sizeof([4]ErrorCode{}))/uint64(unsafe.Sizeof(ErrorCode{})); i++ { 7267 if 0 == sqlite3.Xsqlite3_stricmp(tls, zRes, (*ErrorCode)(unsafe.Pointer(bp+uintptr(i)*16)).FzError) { 7268 return (*ErrorCode)(unsafe.Pointer(bp + uintptr(i)*16)).Frc 7269 } 7270 } 7271 7272 return SQLITE_ERROR 7273 } 7274 7275 type ErrorCode = struct { 7276 Frc int32 7277 F__ccgo_pad1 [4]byte 7278 FzError uintptr 7279 } 7280 7281 func f5tDbAndApi(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr, ppApi uintptr) int32 { 7282 bp := tls.Alloc(72) 7283 defer tls.Free(72) 7284 7285 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7286 var rc int32 = f5tDbPointer(tls, interp, pObj, bp+48) 7287 if rc != TCL_OK { 7288 return TCL_ERROR 7289 } else { 7290 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 7291 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 7292 7293 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+2137, -1, bp+56, uintptr(0)) 7294 if rc != SQLITE_OK { 7295 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7296 return TCL_ERROR 7297 } 7298 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), 1, bp+64, ts+2161, uintptr(0)) 7299 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 7300 7301 if sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != SQLITE_OK { 7302 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7303 return TCL_ERROR 7304 } 7305 7306 *(*uintptr)(unsafe.Pointer(ppDb)) = *(*uintptr)(unsafe.Pointer(bp + 48)) 7307 *(*uintptr)(unsafe.Pointer(ppApi)) = *(*uintptr)(unsafe.Pointer(bp + 64)) 7308 } 7309 7310 return TCL_OK 7311 } 7312 7313 type F5tFunction1 = struct { 7314 Finterp uintptr 7315 FpScript uintptr 7316 } 7317 7318 type F5tFunction = F5tFunction1 7319 7320 type F5tApi1 = struct { 7321 FpApi uintptr 7322 FpFts uintptr 7323 } 7324 7325 type F5tApi = F5tApi1 7326 7327 type F5tAuxData1 = struct{ FpObj uintptr } 7328 7329 type F5tAuxData = F5tAuxData1 7330 7331 func xTokenizeCb(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 7332 var p uintptr = pCtx 7333 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7334 var rc int32 7335 7336 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7337 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7338 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iStart)) 7339 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iEnd)) 7340 7341 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7342 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7343 var _objPtr uintptr = pEval 7344 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7345 tcl.XTclFreeObj(tls, _objPtr) 7346 } 7347 } 7348 if rc == TCL_OK { 7349 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7350 } 7351 7352 return rc 7353 } 7354 7355 func xQueryPhraseCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr) int32 { 7356 bp := tls.Alloc(88) 7357 defer tls.Free(88) 7358 7359 var p uintptr = pCtx 7360 var pEval uintptr 7361 var rc int32 7362 7363 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 7364 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 7365 libc.Xsprintf(tls, bp+8, ts+2174, libc.VaList(bp, libc.PostIncInt64(&iCmd1, 1))) 7366 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 7367 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7368 }{xF5tApi})), bp+72, uintptr(0)) 7369 7370 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7371 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7372 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 7373 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7374 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7375 var _objPtr uintptr = pEval 7376 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7377 tcl.XTclFreeObj(tls, _objPtr) 7378 } 7379 } 7380 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 7381 7382 if rc == TCL_OK { 7383 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7384 } 7385 7386 return rc 7387 } 7388 7389 var iCmd1 sqlite3_int64 = int64(0) 7390 7391 func xSetAuxdataDestructor(tls *libc.TLS, p uintptr) { 7392 var pData uintptr = p 7393 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7394 var _objPtr uintptr = (*F5tAuxData)(unsafe.Pointer(pData)).FpObj 7395 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7396 tcl.XTclFreeObj(tls, _objPtr) 7397 } 7398 } 7399 sqlite3.Xsqlite3_free(tls, pData) 7400 } 7401 7402 func xF5tApi(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7403 bp := tls.Alloc(684) 7404 defer tls.Free(684) 7405 7406 *(*[19]Sub)(unsafe.Pointer(bp + 32)) = [19]Sub{ 7407 {FzName: ts + 2185, FzMsg: ts + 584}, 7408 {FzName: ts + 2198, FzMsg: ts + 584}, 7409 {FzName: ts + 2208, FnArg: 1, FzMsg: ts + 2225}, 7410 {FzName: ts + 2229, FnArg: 2, FzMsg: ts + 2239}, 7411 {FzName: ts + 2251, FzMsg: ts + 584}, 7412 {FzName: ts + 2264, FnArg: 1, FzMsg: ts + 2276}, 7413 {FzName: ts + 2283, FzMsg: ts + 584}, 7414 {FzName: ts + 2294, FnArg: 1, FzMsg: ts + 2300}, 7415 {FzName: ts + 2304, FzMsg: ts + 584}, 7416 {FzName: ts + 2311, FnArg: 1, FzMsg: ts + 2225}, 7417 {FzName: ts + 2323, FnArg: 1, FzMsg: ts + 2225}, 7418 {FzName: ts + 2335, FnArg: 2, FzMsg: ts + 2348}, 7419 {FzName: ts + 2362, FnArg: 1, FzMsg: ts + 2374}, 7420 {FzName: ts + 2380, FnArg: 1, FzMsg: ts + 2392}, 7421 {FzName: ts + 2398, FnArg: 1, FzMsg: ts + 2413}, 7422 {FzName: ts + 2421, FnArg: 1, FzMsg: ts + 2392}, 7423 {FzName: ts + 2436, FnArg: 4, FzMsg: ts + 2451}, 7424 {FzName: ts + 2480, FnArg: 3, FzMsg: ts + 2501}, 7425 {}, 7426 } 7427 var rc int32 7428 *(*int32)(unsafe.Pointer(bp + 488)) = 0 7429 var p uintptr = clientData 7430 7431 if objc < 2 { 7432 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 7433 return TCL_ERROR 7434 } 7435 7436 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 7437 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32, int32(unsafe.Sizeof(Sub{})), ts+2523, 0, bp+488) 7438 if rc != TCL_OK { 7439 return rc 7440 } 7441 if (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FnArg != objc-2 { 7442 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FzMsg) 7443 return TCL_ERROR 7444 } 7445 7446 switch *(*int32)(unsafe.Pointer(bp + 488)) { 7447 case 0: 7448 { 7449 var nCol int32 7450 nCol = (*struct { 7451 f func(*libc.TLS, uintptr) int32 7452 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7453 if rc == SQLITE_OK { 7454 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol)) 7455 } 7456 break 7457 7458 } 7459 case 1: 7460 { 7461 rc = (*struct { 7462 f func(*libc.TLS, uintptr, uintptr) int32 7463 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+496) 7464 if rc == SQLITE_OK { 7465 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 496)))) 7466 } 7467 break 7468 7469 } 7470 case 2: 7471 { 7472 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+504) != 0 { 7473 return TCL_ERROR 7474 } 7475 rc = (*struct { 7476 f func(*libc.TLS, uintptr, int32, uintptr) int32 7477 })(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) 7478 if rc == SQLITE_OK { 7479 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 512)))) 7480 } 7481 break 7482 7483 } 7484 case 3: 7485 { 7486 var zText uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+520) 7487 7488 (*F5tFunction)(unsafe.Pointer(bp + 528)).Finterp = interp 7489 (*F5tFunction)(unsafe.Pointer(bp + 528)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7490 rc = (*struct { 7491 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr) int32 7492 })(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 { 7493 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 7494 }{xTokenizeCb}))) 7495 if rc == SQLITE_OK { 7496 tcl.XTcl_ResetResult(tls, interp) 7497 } 7498 return rc 7499 7500 } 7501 case 4: 7502 { 7503 var nPhrase int32 7504 nPhrase = (*struct { 7505 f func(*libc.TLS, uintptr) int32 7506 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7507 if rc == SQLITE_OK { 7508 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPhrase)) 7509 } 7510 break 7511 7512 } 7513 case 5: 7514 { 7515 var sz int32 7516 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+544) != 0 { 7517 return TCL_ERROR 7518 } 7519 sz = (*struct { 7520 f func(*libc.TLS, uintptr, int32) int32 7521 })(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))) 7522 if rc == SQLITE_OK { 7523 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sz)) 7524 } 7525 break 7526 7527 } 7528 case 6: 7529 { 7530 rc = (*struct { 7531 f func(*libc.TLS, uintptr, uintptr) int32 7532 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInstCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+548) 7533 if rc == SQLITE_OK { 7534 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 548)))) 7535 } 7536 break 7537 7538 } 7539 case 7: 7540 { 7541 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+552) != 0 { 7542 return TCL_ERROR 7543 } 7544 rc = (*struct { 7545 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 7546 })(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) 7547 if rc == SQLITE_OK { 7548 var pList uintptr = tcl.XTcl_NewObj(tls) 7549 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 556)))) 7550 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 560)))) 7551 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 564)))) 7552 tcl.XTcl_SetObjResult(tls, interp, pList) 7553 } 7554 break 7555 7556 } 7557 case 8: 7558 { 7559 var iRowid sqlite3_int64 = (*struct { 7560 f func(*libc.TLS, uintptr) sqlite3_int64 7561 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowid})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7562 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iRowid)) 7563 break 7564 7565 } 7566 case 9: 7567 { 7568 *(*uintptr)(unsafe.Pointer(bp + 576)) = uintptr(0) 7569 *(*int32)(unsafe.Pointer(bp + 584)) = 0 7570 7571 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+568) != 0 { 7572 return TCL_ERROR 7573 } 7574 rc = (*struct { 7575 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7576 })(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) 7577 if rc == SQLITE_OK { 7578 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 576)), *(*int32)(unsafe.Pointer(bp + 584)))) 7579 } 7580 break 7581 7582 } 7583 case 10: 7584 { 7585 *(*int32)(unsafe.Pointer(bp + 592)) = 0 7586 7587 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+588) != 0 { 7588 return TCL_ERROR 7589 } 7590 rc = (*struct { 7591 f func(*libc.TLS, uintptr, int32, uintptr) int32 7592 })(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) 7593 if rc == SQLITE_OK { 7594 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 592)))) 7595 } 7596 break 7597 7598 } 7599 case 11: 7600 { 7601 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+596) != 0 { 7602 return TCL_ERROR 7603 } 7604 (*F5tFunction)(unsafe.Pointer(bp + 600)).Finterp = interp 7605 (*F5tFunction)(unsafe.Pointer(bp + 600)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7606 rc = (*struct { 7607 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7608 })(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 { 7609 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7610 }{xQueryPhraseCb}))) 7611 if rc == SQLITE_OK { 7612 tcl.XTcl_ResetResult(tls, interp) 7613 } 7614 break 7615 7616 } 7617 case 12: 7618 { 7619 var pData uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(F5tAuxData{}))) 7620 if pData == uintptr(0) { 7621 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, 0)) 7622 return TCL_ERROR 7623 } 7624 (*F5tAuxData)(unsafe.Pointer(pData)).FpObj = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 7625 (*Tcl_Obj)(unsafe.Pointer((*F5tAuxData)(unsafe.Pointer(pData)).FpObj)).FrefCount++ 7626 rc = (*struct { 7627 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7628 })(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}))) 7629 break 7630 7631 } 7632 case 13: 7633 { 7634 var pData uintptr 7635 7636 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+616) != 0 { 7637 return TCL_ERROR 7638 } 7639 pData = (*struct { 7640 f func(*libc.TLS, uintptr, int32) uintptr 7641 })(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))) 7642 if pData == uintptr(0) { 7643 tcl.XTcl_ResetResult(tls, interp) 7644 } else { 7645 tcl.XTcl_SetObjResult(tls, interp, (*F5tAuxData)(unsafe.Pointer(pData)).FpObj) 7646 if *(*int32)(unsafe.Pointer(bp + 616)) != 0 { 7647 xSetAuxdataDestructor(tls, pData) 7648 } 7649 } 7650 break 7651 7652 } 7653 7654 case 14: 7655 { 7656 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+620) != 0 { 7657 return TCL_ERROR 7658 } 7659 rc = (*struct { 7660 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 7661 })(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)) 7662 break 7663 7664 } 7665 case 15: 7666 { 7667 var iVal int32 7668 7669 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+624) != 0 { 7670 return TCL_ERROR 7671 } 7672 iVal = int32((int64((*struct { 7673 f func(*libc.TLS, uintptr, int32) uintptr 7674 })(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) 7675 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iVal)) 7676 break 7677 7678 } 7679 7680 case 16: 7681 { 7682 var zColvar uintptr 7683 var zOffvar uintptr 7684 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 5*8)) 7685 7686 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+628) != 0 { 7687 return TCL_ERROR 7688 } 7689 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 7690 zOffvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 7691 7692 rc = (*struct { 7693 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 7694 })(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) 7695 if rc != SQLITE_OK { 7696 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 7697 return TCL_ERROR 7698 } 7699 for ; *(*int32)(unsafe.Pointer(bp + 648)) >= 0; (*struct { 7700 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 7701 })(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) { 7702 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 648))), 0) 7703 tcl.XTcl_SetVar2Ex(tls, interp, zOffvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 652))), 0) 7704 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 7705 if rc == TCL_CONTINUE { 7706 rc = TCL_OK 7707 } 7708 if rc != TCL_OK { 7709 if rc == TCL_BREAK { 7710 rc = TCL_OK 7711 } 7712 break 7713 } 7714 } 7715 7716 break 7717 7718 } 7719 7720 case 17: 7721 { 7722 var zColvar uintptr 7723 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 7724 7725 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+656) != 0 { 7726 return TCL_ERROR 7727 } 7728 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 7729 7730 rc = (*struct { 7731 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7732 })(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) 7733 if rc != SQLITE_OK { 7734 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 7735 return TCL_ERROR 7736 } 7737 for ; *(*int32)(unsafe.Pointer(bp + 680)) >= 0; (*struct { 7738 f func(*libc.TLS, uintptr, uintptr, uintptr) 7739 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNextColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+664, bp+680) { 7740 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 680))), 0) 7741 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 7742 if rc == TCL_CONTINUE { 7743 rc = TCL_OK 7744 } 7745 if rc != TCL_OK { 7746 if rc == TCL_BREAK { 7747 rc = TCL_OK 7748 } 7749 break 7750 } 7751 } 7752 7753 break 7754 7755 } 7756 7757 default: 7758 break 7759 } 7760 7761 if rc != SQLITE_OK { 7762 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 7763 return TCL_ERROR 7764 } 7765 7766 return TCL_OK 7767 } 7768 7769 type Sub = struct { 7770 FzName uintptr 7771 FnArg int32 7772 F__ccgo_pad1 [4]byte 7773 FzMsg uintptr 7774 } 7775 7776 func xF5tFunction(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 7777 bp := tls.Alloc(112) 7778 defer tls.Free(112) 7779 7780 var p uintptr = (*struct { 7781 f func(*libc.TLS, uintptr) uintptr 7782 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxUserData})).f(tls, pFts) 7783 var pEval uintptr 7784 var i int32 7785 var rc int32 7786 7787 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 7788 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 7789 7790 libc.Xsprintf(tls, bp+8, ts+2535, libc.VaList(bp, libc.PostIncInt64(&iCmd2, 1))) 7791 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 7792 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7793 }{xF5tApi})), bp+72, uintptr(0)) 7794 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7795 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7796 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 7797 7798 for i = 0; i < nVal; i++ { 7799 var pObj uintptr = uintptr(0) 7800 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))) { 7801 case SQLITE_TEXT: 7802 pObj = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), -1) 7803 break 7804 case SQLITE_BLOB: 7805 pObj = tcl.XTcl_NewByteArrayObj(tls, 7806 sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7807 break 7808 case SQLITE_INTEGER: 7809 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7810 break 7811 case SQLITE_FLOAT: 7812 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 7813 break 7814 default: 7815 pObj = tcl.XTcl_NewObj(tls) 7816 break 7817 } 7818 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, pObj) 7819 } 7820 7821 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, TCL_GLOBAL_ONLY) 7822 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7823 var _objPtr uintptr = pEval 7824 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7825 tcl.XTclFreeObj(tls, _objPtr) 7826 } 7827 } 7828 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 7829 7830 if rc != TCL_OK { 7831 sqlite3.Xsqlite3_result_error(tls, pCtx, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp), -1) 7832 } else { 7833 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp) 7834 7835 var zType uintptr = func() uintptr { 7836 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 7837 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 7838 } 7839 return ts + 584 7840 }() 7841 var c int8 = *(*int8)(unsafe.Pointer(zType)) 7842 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 7843 var data uintptr = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+88) 7844 sqlite3.Xsqlite3_result_blob(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 7845 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 7846 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pVar, bp+88) 7847 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(bp + 88))) 7848 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 7849 tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+96) 7850 sqlite3.Xsqlite3_result_double(tls, pCtx, *(*float64)(unsafe.Pointer(bp + 96))) 7851 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 7852 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+104) 7853 sqlite3.Xsqlite3_result_int64(tls, pCtx, *(*Tcl_WideInt)(unsafe.Pointer(bp + 104))) 7854 } else { 7855 var data uintptr = tcl.XTcl_GetStringFromObj(tls, pVar, bp+88) 7856 sqlite3.Xsqlite3_result_text(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 7857 } 7858 } 7859 } 7860 7861 var iCmd2 sqlite3_int64 = int64(0) 7862 7863 func xF5tDestroy(tls *libc.TLS, pCtx uintptr) { 7864 var p uintptr = pCtx 7865 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7866 var _objPtr uintptr = (*F5tFunction)(unsafe.Pointer(p)).FpScript 7867 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7868 tcl.XTclFreeObj(tls, _objPtr) 7869 } 7870 } 7871 tcl.XTcl_Free(tls, p) 7872 } 7873 7874 func f5tCreateFunction(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7875 bp := tls.Alloc(40) 7876 defer tls.Free(40) 7877 7878 var zName uintptr 7879 var pScript uintptr 7880 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 7881 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 7882 var pCtx uintptr = uintptr(0) 7883 var rc int32 7884 7885 if objc != 4 { 7886 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 7887 return TCL_ERROR 7888 } 7889 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, bp+32) != 0 { 7890 return TCL_ERROR 7891 } 7892 7893 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7894 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7895 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tFunction{}))) 7896 (*F5tFunction)(unsafe.Pointer(pCtx)).Finterp = interp 7897 (*F5tFunction)(unsafe.Pointer(pCtx)).FpScript = pScript 7898 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 7899 7900 rc = (*struct { 7901 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 7902 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FxCreateFunction})).f(tls, 7903 *(*uintptr)(unsafe.Pointer(bp + 32)), zName, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 7904 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 7905 }{xF5tFunction})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{xF5tDestroy}))) 7906 if rc != SQLITE_OK { 7907 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 24))), 0)) 7908 return TCL_ERROR 7909 } 7910 7911 return TCL_OK 7912 } 7913 7914 type F5tTokenizeCtx1 = struct { 7915 FpRet uintptr 7916 FbSubst int32 7917 F__ccgo_pad1 [4]byte 7918 FzInput uintptr 7919 } 7920 7921 type F5tTokenizeCtx = F5tTokenizeCtx1 7922 7923 func xTokenizeCb2(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 7924 var p uintptr = pCtx 7925 if (*F5tTokenizeCtx)(unsafe.Pointer(p)).FbSubst != 0 { 7926 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7927 tcl.XTcl_ListObjAppendElement(tls, 7928 uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, (*F5tTokenizeCtx)(unsafe.Pointer(p)).FzInput+uintptr(iStart), iEnd-iStart)) 7929 } else { 7930 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7931 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iStart)) 7932 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iEnd)) 7933 } 7934 return SQLITE_OK 7935 } 7936 7937 func f5tTokenize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7938 bp := tls.Alloc(200) 7939 defer tls.Free(200) 7940 7941 var zText uintptr 7942 7943 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 7944 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 7945 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 7946 7947 var pRet uintptr = uintptr(0) 7948 7949 var rc int32 7950 7951 if objc != 4 && objc != 5 { 7952 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2596) 7953 return TCL_ERROR 7954 } 7955 if objc == 5 { 7956 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 7957 if libc.Xstrcmp(tls, ts+2618, zOpt) != 0 { 7958 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2625, zOpt, 0)) 7959 return TCL_ERROR 7960 } 7961 } 7962 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+96, bp+104) != 0 { 7963 return TCL_ERROR 7964 } 7965 if tcl.XTcl_SplitList(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))), bp+112, bp+120) != 0 { 7966 return TCL_ERROR 7967 } 7968 if *(*int32)(unsafe.Pointer(bp + 112)) == 0 { 7969 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2647, 0)) 7970 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 7971 return TCL_ERROR 7972 } 7973 zText = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+128) 7974 7975 rc = (*struct { 7976 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 7977 })(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) 7978 if rc != SQLITE_OK { 7979 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2647, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 120)))), 0)) 7980 return TCL_ERROR 7981 } 7982 7983 rc = (*struct { 7984 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7985 })(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) 7986 if rc != SQLITE_OK { 7987 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+2667, 0)) 7988 return TCL_ERROR 7989 } 7990 7991 pRet = tcl.XTcl_NewObj(tls) 7992 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 7993 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FbSubst = libc.Bool32(objc == 5) 7994 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FpRet = pRet 7995 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FzInput = zText 7996 rc = (*struct { 7997 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 7998 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxTokenize})).f(tls, 7999 *(*uintptr)(unsafe.Pointer(bp + 168)), bp+176, FTS5_TOKENIZE_DOCUMENT, zText, *(*int32)(unsafe.Pointer(bp + 128)), *(*uintptr)(unsafe.Pointer(&struct { 8000 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8001 }{xTokenizeCb2}))) 8002 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxDelete})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 8003 if rc != SQLITE_OK { 8004 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+80, ts+2696, 0)) 8005 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8006 var _objPtr uintptr = pRet 8007 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8008 tcl.XTclFreeObj(tls, _objPtr) 8009 } 8010 } 8011 return TCL_ERROR 8012 } 8013 8014 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8015 tcl.XTcl_SetObjResult(tls, interp, pRet) 8016 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 8017 var _objPtr uintptr = pRet 8018 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8019 tcl.XTclFreeObj(tls, _objPtr) 8020 } 8021 } 8022 return TCL_OK 8023 } 8024 8025 type F5tTokenizerContext1 = struct { 8026 FpCtx uintptr 8027 FxToken uintptr 8028 } 8029 8030 type F5tTokenizerContext = F5tTokenizerContext1 8031 type F5tTokenizerModule1 = struct { 8032 Finterp uintptr 8033 FpScript uintptr 8034 FpContext uintptr 8035 } 8036 8037 type F5tTokenizerModule = F5tTokenizerModule1 8038 type F5tTokenizerInstance1 = struct { 8039 Finterp uintptr 8040 FpScript uintptr 8041 FpContext uintptr 8042 } 8043 8044 type F5tTokenizerInstance = F5tTokenizerInstance1 8045 8046 func f5tTokenizerCreate(tls *libc.TLS, pCtx uintptr, azArg uintptr, nArg int32, ppOut uintptr) int32 { 8047 var pMod uintptr = pCtx 8048 var pEval uintptr 8049 var rc int32 = TCL_OK 8050 var i int32 8051 8052 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript) 8053 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8054 for i = 0; rc == TCL_OK && i < nArg; i++ { 8055 var pObj uintptr = tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)), -1) 8056 rc = tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, pObj) 8057 } 8058 8059 if rc == TCL_OK { 8060 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, TCL_GLOBAL_ONLY) 8061 } 8062 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8063 var _objPtr uintptr = pEval 8064 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8065 tcl.XTclFreeObj(tls, _objPtr) 8066 } 8067 } 8068 8069 if rc == TCL_OK { 8070 var pInst uintptr 8071 pInst = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerInstance{}))) 8072 libc.Xmemset(tls, pInst, 0, uint64(unsafe.Sizeof(F5tTokenizerInstance{}))) 8073 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp 8074 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript = tcl.XTcl_GetObjResult(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp) 8075 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext 8076 (*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript)).FrefCount++ 8077 *(*uintptr)(unsafe.Pointer(ppOut)) = pInst 8078 } 8079 8080 return rc 8081 } 8082 8083 func f5tTokenizerDelete(tls *libc.TLS, p uintptr) { 8084 var pInst uintptr = p 8085 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8086 var _objPtr uintptr = (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript 8087 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8088 tcl.XTclFreeObj(tls, _objPtr) 8089 } 8090 } 8091 tcl.XTcl_Free(tls, pInst) 8092 } 8093 8094 func f5tTokenizerTokenize(tls *libc.TLS, p uintptr, pCtx uintptr, flags int32, pText uintptr, nText int32, xToken uintptr) int32 { 8095 var pInst uintptr = p 8096 var pOldCtx uintptr 8097 var xOldToken uintptr 8098 var pEval uintptr 8099 var rc int32 8100 var zFlags uintptr 8101 8102 pOldCtx = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx 8103 xOldToken = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken 8104 8105 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pCtx 8106 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xToken 8107 8108 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript) 8109 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8110 switch flags { 8111 case FTS5_TOKENIZE_DOCUMENT: 8112 zFlags = ts + 2727 8113 break 8114 case FTS5_TOKENIZE_AUX: 8115 zFlags = ts + 2736 8116 break 8117 case FTS5_TOKENIZE_QUERY: 8118 zFlags = ts + 2740 8119 break 8120 case FTS5_TOKENIZE_PREFIX | FTS5_TOKENIZE_QUERY: 8121 zFlags = ts + 2746 8122 break 8123 default: 8124 zFlags = ts + 2758 8125 break 8126 } 8127 8128 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zFlags, -1)) 8129 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, pText, nText)) 8130 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, TCL_GLOBAL_ONLY) 8131 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8132 var _objPtr uintptr = pEval 8133 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8134 tcl.XTclFreeObj(tls, _objPtr) 8135 } 8136 } 8137 8138 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pOldCtx 8139 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xOldToken 8140 return rc 8141 } 8142 8143 func f5tTokenizerReturn(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8144 bp := tls.Alloc(32) 8145 defer tls.Free(32) 8146 8147 var p uintptr 8148 8149 var tflags int32 8150 var zToken uintptr 8151 var rc int32 8152 8153 var zArg uintptr 8154 p = clientData 8155 tflags = 0 8156 8157 if !(objc == 5) { 8158 goto __1 8159 } 8160 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 8161 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) { 8162 goto __3 8163 } 8164 tflags = tflags | FTS5_TOKEN_COLOCATED 8165 goto __4 8166 __3: 8167 goto usage 8168 __4: 8169 ; 8170 goto __2 8171 __1: 8172 if !(objc != 4) { 8173 goto __5 8174 } 8175 goto usage 8176 __5: 8177 ; 8178 __2: 8179 ; 8180 zToken = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+20) 8181 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+24) != 0 || 8182 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+28) != 0) { 8183 goto __6 8184 } 8185 return TCL_ERROR 8186 __6: 8187 ; 8188 if !((*F5tTokenizerContext)(unsafe.Pointer(p)).FxToken == uintptr(0)) { 8189 goto __7 8190 } 8191 tcl.XTcl_AppendResult(tls, interp, 8192 libc.VaList(bp, ts+2777, 0)) 8193 return TCL_ERROR 8194 __7: 8195 ; 8196 rc = (*struct { 8197 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8198 })(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))) 8199 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8200 if rc == SQLITE_OK { 8201 return TCL_OK 8202 } 8203 return TCL_ERROR 8204 8205 usage: 8206 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2835) 8207 return TCL_ERROR 8208 } 8209 8210 func f5tDelTokenizer(tls *libc.TLS, pCtx uintptr) { 8211 var pMod uintptr = pCtx 8212 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8213 var _objPtr uintptr = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript 8214 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8215 tcl.XTclFreeObj(tls, _objPtr) 8216 } 8217 } 8218 tcl.XTcl_Free(tls, pMod) 8219 } 8220 8221 func f5tCreateTokenizer(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 8222 bp := tls.Alloc(56) 8223 defer tls.Free(56) 8224 8225 var pContext uintptr = clientData 8226 8227 var zName uintptr 8228 var pScript uintptr 8229 8230 var pMod uintptr 8231 var rc int32 8232 8233 if objc != 4 { 8234 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8235 return TCL_ERROR 8236 } 8237 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, bp+24) != 0 { 8238 return TCL_ERROR 8239 } 8240 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 8241 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8242 8243 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxCreate = *(*uintptr)(unsafe.Pointer(&struct { 8244 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8245 }{f5tTokenizerCreate})) 8246 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxTokenize = *(*uintptr)(unsafe.Pointer(&struct { 8247 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8248 }{f5tTokenizerTokenize})) 8249 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxDelete = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tTokenizerDelete})) 8250 8251 pMod = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerModule{}))) 8252 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp = interp 8253 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript = pScript 8254 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext = pContext 8255 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8256 rc = (*struct { 8257 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr, uintptr) int32 8258 })(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}))) 8259 if rc != SQLITE_OK { 8260 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2863, 0)) 8261 return TCL_ERROR 8262 } 8263 8264 return TCL_OK 8265 } 8266 8267 func xF5tFree(tls *libc.TLS, clientData ClientData) { 8268 tcl.XTcl_Free(tls, clientData) 8269 } 8270 8271 func f5tMayBeCorrupt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8272 return TCL_OK 8273 } 8274 8275 func f5t_fts5HashKey(tls *libc.TLS, nSlot int32, p uintptr, n int32) uint32 { 8276 var i int32 8277 var h uint32 = uint32(13) 8278 for i = n - 1; i >= 0; i-- { 8279 h = h<<3 ^ h ^ uint32(*(*int8)(unsafe.Pointer(p + uintptr(i)))) 8280 } 8281 return h % uint32(nSlot) 8282 } 8283 8284 func f5tTokenHash(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8285 bp := tls.Alloc(8) 8286 defer tls.Free(8) 8287 8288 var z uintptr 8289 8290 var iVal uint32 8291 8292 if objc != 3 { 8293 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2900) 8294 return TCL_ERROR 8295 } 8296 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 8297 return TCL_ERROR 8298 } 8299 z = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 8300 8301 iVal = f5t_fts5HashKey(tls, *(*int32)(unsafe.Pointer(bp)), z, *(*int32)(unsafe.Pointer(bp + 4))) 8302 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(iVal))) 8303 return TCL_OK 8304 } 8305 8306 func f5tRegisterMatchinfo(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8307 bp := tls.Alloc(8) 8308 defer tls.Free(8) 8309 8310 var rc int32 8311 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8312 8313 if objc != 2 { 8314 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8315 return TCL_ERROR 8316 } 8317 if f5tDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 8318 return TCL_ERROR 8319 } 8320 8321 rc = sqlite3Fts5TestRegisterMatchinfo(tls, *(*uintptr)(unsafe.Pointer(bp))) 8322 if rc != SQLITE_OK { 8323 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8324 return TCL_ERROR 8325 } 8326 return TCL_OK 8327 } 8328 8329 func f5tRegisterTok(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8330 bp := tls.Alloc(16) 8331 defer tls.Free(16) 8332 8333 var rc int32 8334 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8335 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 8336 8337 if objc != 2 { 8338 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8339 return TCL_ERROR 8340 } 8341 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 8342 return TCL_ERROR 8343 } 8344 8345 rc = sqlite3Fts5TestRegisterTok(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 8346 if rc != SQLITE_OK { 8347 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8348 return TCL_ERROR 8349 } 8350 return TCL_OK 8351 } 8352 8353 func Fts5tcl_Init(tls *libc.TLS, interp uintptr) int32 { 8354 var i int32 8355 var pContext uintptr 8356 8357 pContext = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerContext{}))) 8358 libc.Xmemset(tls, pContext, 0, uint64(unsafe.Sizeof(F5tTokenizerContext{}))) 8359 8360 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd))/uint64(unsafe.Sizeof(struct { 8361 FzName uintptr 8362 FxProc uintptr 8363 FbTokenizeCtx int32 8364 F__ccgo_pad1 [4]byte 8365 }{})); i++ { 8366 var p uintptr = uintptr(unsafe.Pointer(&aCmd)) + uintptr(i)*24 8367 var pCtx uintptr = uintptr(0) 8368 if (*struct { 8369 FzName uintptr 8370 FxProc uintptr 8371 FbTokenizeCtx int32 8372 F__ccgo_pad1 [4]byte 8373 })(unsafe.Pointer(p)).FbTokenizeCtx != 0 { 8374 pCtx = pContext 8375 } 8376 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 8377 FzName uintptr 8378 FxProc uintptr 8379 FbTokenizeCtx int32 8380 F__ccgo_pad1 [4]byte 8381 })(unsafe.Pointer(p)).FzName, (*struct { 8382 FzName uintptr 8383 FxProc uintptr 8384 FbTokenizeCtx int32 8385 F__ccgo_pad1 [4]byte 8386 })(unsafe.Pointer(p)).FxProc, pCtx, func() uintptr { 8387 if i != 0 { 8388 return uintptr(0) 8389 } 8390 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{xF5tFree})) 8391 }()) 8392 } 8393 8394 return TCL_OK 8395 } 8396 8397 var aCmd = [8]struct { 8398 FzName uintptr 8399 FxProc uintptr 8400 FbTokenizeCtx int32 8401 F__ccgo_pad1 [4]byte 8402 }{ 8403 {FzName: ts + 2912, FxProc: 0, FbTokenizeCtx: 1}, 8404 {FzName: ts + 2942, FxProc: 0, FbTokenizeCtx: 1}, 8405 {FzName: ts + 2961, FxProc: 0}, 8406 {FzName: ts + 2983, FxProc: 0}, 8407 {FzName: ts + 3012, FxProc: 0}, 8408 {FzName: ts + 3040, FxProc: 0}, 8409 {FzName: ts + 3064, FxProc: 0}, 8410 {FzName: ts + 3096, FxProc: 0}, 8411 } 8412 8413 type Fts5MatchinfoCtx1 = struct { 8414 FnCol int32 8415 FnPhrase int32 8416 FzArg uintptr 8417 FnRet int32 8418 F__ccgo_pad1 [4]byte 8419 FaRet uintptr 8420 } 8421 8422 type Fts5MatchinfoCtx = Fts5MatchinfoCtx1 8423 8424 type u32 = uint32 8425 8426 func fts5_api_from_db(tls *libc.TLS, db uintptr, ppApi uintptr) int32 { 8427 bp := tls.Alloc(8) 8428 defer tls.Free(8) 8429 8430 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8431 var rc int32 8432 8433 *(*uintptr)(unsafe.Pointer(ppApi)) = uintptr(0) 8434 rc = sqlite3.Xsqlite3_prepare(tls, db, ts+2137, -1, bp, uintptr(0)) 8435 if rc == SQLITE_OK { 8436 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, ppApi, ts+2161, uintptr(0)) 8437 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) 8438 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 8439 } 8440 8441 return rc 8442 } 8443 8444 func fts5MatchinfoFlagsize(tls *libc.TLS, nCol int32, nPhrase int32, f int8) int32 { 8445 var ret int32 = -1 8446 switch int32(f) { 8447 case 'p': 8448 ret = 1 8449 break 8450 case 'c': 8451 ret = 1 8452 break 8453 case 'x': 8454 ret = 3 * nCol * nPhrase 8455 break 8456 case 'y': 8457 ret = nCol * nPhrase 8458 break 8459 case 'b': 8460 ret = (nCol + 31) / 32 * nPhrase 8461 break 8462 case 'n': 8463 ret = 1 8464 break 8465 case 'a': 8466 ret = nCol 8467 break 8468 case 'l': 8469 ret = nCol 8470 break 8471 case 's': 8472 ret = nCol 8473 break 8474 } 8475 return ret 8476 } 8477 8478 func fts5MatchinfoIter(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, x uintptr) int32 { 8479 var i int32 8480 var n int32 = 0 8481 var rc int32 = SQLITE_OK 8482 var f int8 8483 for i = 0; libc.AssignInt8(&f, *(*int8)(unsafe.Pointer((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg + uintptr(i)))) != 0; i++ { 8484 rc = (*struct { 8485 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8486 })(unsafe.Pointer(&struct{ uintptr }{x})).f(tls, pApi, pFts, p, f, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet+uintptr(n)*4) 8487 if rc != SQLITE_OK { 8488 break 8489 } 8490 n = n + fts5MatchinfoFlagsize(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase, f) 8491 } 8492 return rc 8493 } 8494 8495 func fts5MatchinfoXCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pUserData uintptr) int32 { 8496 bp := tls.Alloc(24) 8497 defer tls.Free(24) 8498 8499 var aOut uintptr = pUserData 8500 var iPrev int32 = -1 8501 8502 for (*struct { 8503 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8504 })(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 { 8505 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8506 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp, bp+16, bp+20) { 8507 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+1)*4))++ 8508 if *(*int32)(unsafe.Pointer(bp + 16)) != iPrev { 8509 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+2)*4))++ 8510 } 8511 iPrev = *(*int32)(unsafe.Pointer(bp + 16)) 8512 } 8513 8514 return SQLITE_OK 8515 } 8516 8517 func fts5MatchinfoGlobalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 8518 bp := tls.Alloc(24) 8519 defer tls.Free(24) 8520 8521 var rc int32 = SQLITE_OK 8522 switch int32(f) { 8523 case 'p': 8524 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase) 8525 break 8526 8527 case 'c': 8528 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol) 8529 break 8530 8531 case 'x': 8532 { 8533 var i int32 8534 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase && rc == SQLITE_OK; i++ { 8535 var pPtr uintptr = aOut + uintptr(i*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*3)*4 8536 rc = (*struct { 8537 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8538 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxQueryPhrase})).f(tls, pFts, i, pPtr, *(*uintptr)(unsafe.Pointer(&struct { 8539 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8540 }{fts5MatchinfoXCb}))) 8541 } 8542 break 8543 8544 } 8545 8546 case 'n': 8547 { 8548 rc = (*struct { 8549 f func(*libc.TLS, uintptr, uintptr) int32 8550 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp) 8551 *(*u32)(unsafe.Pointer(aOut)) = u32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 8552 break 8553 8554 } 8555 8556 case 'a': 8557 { 8558 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = int64(0) 8559 rc = (*struct { 8560 f func(*libc.TLS, uintptr, uintptr) int32 8561 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp+8) 8562 if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 8563 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 8564 } else { 8565 var i int32 8566 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 8567 rc = (*struct { 8568 f func(*libc.TLS, uintptr, int32, uintptr) int32 8569 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnTotalSize})).f(tls, pFts, i, bp+16) 8570 if rc == SQLITE_OK { 8571 *(*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)))) 8572 } 8573 } 8574 } 8575 break 8576 8577 } 8578 8579 } 8580 return rc 8581 } 8582 8583 func fts5MatchinfoLocalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 8584 bp := tls.Alloc(80) 8585 defer tls.Free(80) 8586 8587 var i int32 8588 var rc int32 = SQLITE_OK 8589 8590 switch int32(f) { 8591 case 'b': 8592 { 8593 var iPhrase int32 8594 var nInt int32 = ((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol + 31) / 32 * (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase 8595 for i = 0; i < nInt; i++ { 8596 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(0) 8597 } 8598 8599 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 8600 for (*struct { 8601 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8602 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirstColumn})).f(tls, pFts, iPhrase, bp, bp+16); *(*int32)(unsafe.Pointer(bp + 16)) >= 0; (*struct { 8603 f func(*libc.TLS, uintptr, uintptr, uintptr) 8604 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNextColumn})).f(tls, pFts, bp, bp+16) { 8605 *(*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) 8606 } 8607 } 8608 8609 break 8610 8611 } 8612 8613 case 'x': 8614 fallthrough 8615 case 'y': 8616 { 8617 var nMul int32 = func() int32 { 8618 if int32(f) == 'x' { 8619 return 3 8620 } 8621 return 1 8622 }() 8623 var iPhrase int32 8624 8625 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; i++ { 8626 *(*u32)(unsafe.Pointer(aOut + uintptr(i*nMul)*4)) = u32(0) 8627 } 8628 8629 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 8630 for (*struct { 8631 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8632 })(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 { 8633 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8634 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp+24, bp+40, bp+44) { 8635 *(*u32)(unsafe.Pointer(aOut + uintptr(nMul*(*(*int32)(unsafe.Pointer(bp + 40))+iPhrase*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol))*4))++ 8636 } 8637 } 8638 8639 break 8640 8641 } 8642 8643 case 'l': 8644 { 8645 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 8646 rc = (*struct { 8647 f func(*libc.TLS, uintptr, int32, uintptr) int32 8648 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnSize})).f(tls, pFts, i, bp+48) 8649 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 48))) 8650 } 8651 break 8652 8653 } 8654 8655 case 's': 8656 { 8657 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 8658 8659 rc = (*struct { 8660 f func(*libc.TLS, uintptr, uintptr) int32 8661 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInstCount})).f(tls, pFts, bp+52) 8662 for i = 0; rc == SQLITE_OK && i < *(*int32)(unsafe.Pointer(bp + 52)); i++ { 8663 *(*int32)(unsafe.Pointer(bp + 60)) = 0 8664 var iNextPhrase int32 8665 var iNextOff int32 8666 var nSeq u32 = u32(1) 8667 var j int32 8668 8669 rc = (*struct { 8670 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8671 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, i, bp+56, bp+60, bp+64) 8672 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 56)) + 1 8673 iNextOff = *(*int32)(unsafe.Pointer(bp + 64)) + (*struct { 8674 f func(*libc.TLS, uintptr, int32) int32 8675 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, 0) 8676 for j = i + 1; rc == SQLITE_OK && j < *(*int32)(unsafe.Pointer(bp + 52)); j++ { 8677 rc = (*struct { 8678 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8679 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, j, bp+68, bp+72, bp+76) 8680 if *(*int32)(unsafe.Pointer(bp + 72)) != *(*int32)(unsafe.Pointer(bp + 60)) || *(*int32)(unsafe.Pointer(bp + 76)) > iNextOff { 8681 break 8682 } 8683 if *(*int32)(unsafe.Pointer(bp + 68)) == iNextPhrase && *(*int32)(unsafe.Pointer(bp + 76)) == iNextOff { 8684 nSeq++ 8685 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 68)) + 1 8686 iNextOff = *(*int32)(unsafe.Pointer(bp + 76)) + (*struct { 8687 f func(*libc.TLS, uintptr, int32) int32 8688 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, *(*int32)(unsafe.Pointer(bp + 68))) 8689 } 8690 } 8691 8692 if nSeq > *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) { 8693 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) = nSeq 8694 } 8695 } 8696 8697 break 8698 8699 } 8700 } 8701 return rc 8702 } 8703 8704 func fts5MatchinfoNew(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, zArg uintptr) uintptr { 8705 bp := tls.Alloc(8) 8706 defer tls.Free(8) 8707 8708 var p uintptr 8709 var nCol int32 8710 var nPhrase int32 8711 var i int32 8712 var nInt int32 8713 var nByte sqlite3_int64 8714 var rc int32 8715 8716 nCol = (*struct { 8717 f func(*libc.TLS, uintptr) int32 8718 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnCount})).f(tls, pFts) 8719 nPhrase = (*struct { 8720 f func(*libc.TLS, uintptr) int32 8721 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseCount})).f(tls, pFts) 8722 8723 nInt = 0 8724 for i = 0; *(*int8)(unsafe.Pointer(zArg + uintptr(i))) != 0; i++ { 8725 var n int32 = fts5MatchinfoFlagsize(tls, nCol, nPhrase, *(*int8)(unsafe.Pointer(zArg + uintptr(i)))) 8726 if n < 0 { 8727 var zErr uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+3131, libc.VaList(bp, int32(*(*int8)(unsafe.Pointer(zArg + uintptr(i)))))) 8728 sqlite3.Xsqlite3_result_error(tls, pCtx, zErr, -1) 8729 sqlite3.Xsqlite3_free(tls, zErr) 8730 return uintptr(0) 8731 } 8732 nInt = nInt + n 8733 } 8734 8735 nByte = sqlite3_int64(uint64(unsafe.Sizeof(Fts5MatchinfoCtx{})) + 8736 uint64(unsafe.Sizeof(u32(0)))*uint64(nInt) + 8737 uint64(i+1)) 8738 p = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 8739 if p == uintptr(0) { 8740 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 8741 return uintptr(0) 8742 } 8743 libc.Xmemset(tls, p, 0, uint64(nByte)) 8744 8745 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol = nCol 8746 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase = nPhrase 8747 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet = p + 1*32 8748 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet = nInt 8749 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg = (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet + uintptr(nInt)*4 8750 libc.Xmemcpy(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg, zArg, uint64(i)) 8751 8752 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 8753 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8754 }{fts5MatchinfoGlobalCb}))) 8755 if rc != SQLITE_OK { 8756 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 8757 sqlite3.Xsqlite3_free(tls, p) 8758 p = uintptr(0) 8759 } 8760 8761 return p 8762 } 8763 8764 func fts5MatchinfoFunc(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 8765 var zArg uintptr 8766 var p uintptr 8767 var rc int32 = SQLITE_OK 8768 8769 if nVal > 0 { 8770 zArg = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 8771 } else { 8772 zArg = ts + 3163 8773 } 8774 8775 p = (*struct { 8776 f func(*libc.TLS, uintptr, int32) uintptr 8777 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxGetAuxdata})).f(tls, pFts, 0) 8778 if p == uintptr(0) || sqlite3.Xsqlite3_stricmp(tls, zArg, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg) != 0 { 8779 p = fts5MatchinfoNew(tls, pApi, pFts, pCtx, zArg) 8780 if p == uintptr(0) { 8781 rc = SQLITE_NOMEM 8782 } else { 8783 rc = (*struct { 8784 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8785 })(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}))) 8786 } 8787 } 8788 8789 if rc == SQLITE_OK { 8790 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 8791 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8792 }{fts5MatchinfoLocalCb}))) 8793 } 8794 if rc != SQLITE_OK { 8795 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 8796 } else { 8797 var nByte int32 = int32(uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet) * uint64(unsafe.Sizeof(u32(0)))) 8798 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet, nByte, libc.UintptrFromInt32(-1)) 8799 } 8800 } 8801 8802 func sqlite3Fts5TestRegisterMatchinfo(tls *libc.TLS, db uintptr) int32 { 8803 bp := tls.Alloc(8) 8804 defer tls.Free(8) 8805 8806 var rc int32 8807 8808 rc = fts5_api_from_db(tls, db, bp) 8809 if rc != SQLITE_OK { 8810 return rc 8811 } 8812 8813 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) || (*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FiVersion < 2 { 8814 return SQLITE_ERROR 8815 } 8816 8817 rc = (*struct { 8818 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 8819 })(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 { 8820 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 8821 }{fts5MatchinfoFunc})), uintptr(0)) 8822 8823 return rc 8824 } 8825 8826 type Fts5tokTable1 = struct { 8827 Fbase sqlite3_vtab 8828 Ftok fts5_tokenizer 8829 FpTok uintptr 8830 } 8831 8832 type Fts5tokTable = Fts5tokTable1 8833 type Fts5tokCursor1 = struct { 8834 Fbase sqlite3_vtab_cursor 8835 FiRowid int32 8836 F__ccgo_pad1 [4]byte 8837 FzInput uintptr 8838 FnRow int32 8839 F__ccgo_pad2 [4]byte 8840 FaRow uintptr 8841 } 8842 8843 type Fts5tokCursor = Fts5tokCursor1 8844 type Fts5tokRow1 = struct { 8845 FzToken uintptr 8846 FiStart int32 8847 FiEnd int32 8848 FiPos int32 8849 F__ccgo_pad1 [4]byte 8850 } 8851 8852 type Fts5tokRow = Fts5tokRow1 8853 8854 func fts5tokDequote(tls *libc.TLS, z uintptr) { 8855 var q int8 = *(*int8)(unsafe.Pointer(z)) 8856 8857 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 8858 var iIn int32 = 1 8859 var iOut int32 = 0 8860 if int32(q) == '[' { 8861 q = int8(']') 8862 } 8863 8864 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 8865 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 8866 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 8867 iIn++ 8868 break 8869 } else { 8870 iIn = iIn + 2 8871 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 8872 } 8873 } else { 8874 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 8875 } 8876 } 8877 8878 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 8879 } 8880 } 8881 8882 func fts5tokDequoteArray(tls *libc.TLS, argc int32, argv uintptr, pazDequote uintptr) int32 { 8883 var rc int32 = SQLITE_OK 8884 if argc == 0 { 8885 *(*uintptr)(unsafe.Pointer(pazDequote)) = uintptr(0) 8886 } else { 8887 var i int32 8888 var nByte int32 = 0 8889 var azDequote uintptr 8890 8891 for i = 0; i < argc; i++ { 8892 nByte = nByte + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))+uint64(1)) 8893 } 8894 8895 *(*uintptr)(unsafe.Pointer(pazDequote)) = libc.AssignUintptr(&azDequote, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(argc)+uint64(nByte))) 8896 if azDequote == uintptr(0) { 8897 rc = SQLITE_NOMEM 8898 } else { 8899 var pSpace uintptr = azDequote + uintptr(argc)*8 8900 for i = 0; i < argc; i++ { 8901 var n int32 = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 8902 *(*uintptr)(unsafe.Pointer(azDequote + uintptr(i)*8)) = pSpace 8903 libc.Xmemcpy(tls, pSpace, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), uint64(n+1)) 8904 fts5tokDequote(tls, pSpace) 8905 pSpace += uintptr(n + 1) 8906 } 8907 } 8908 } 8909 8910 return rc 8911 } 8912 8913 func fts5tokConnectMethod(tls *libc.TLS, db uintptr, pCtx uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 8914 bp := tls.Alloc(16) 8915 defer tls.Free(16) 8916 8917 var pApi uintptr = pCtx 8918 var pTab uintptr = uintptr(0) 8919 var rc int32 8920 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8921 var nDequote int32 = 0 8922 8923 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 8924 ts+3177) 8925 8926 if rc == SQLITE_OK { 8927 nDequote = argc - 3 8928 rc = fts5tokDequoteArray(tls, nDequote, argv+3*8, bp) 8929 } 8930 8931 if rc == SQLITE_OK { 8932 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokTable{}))) 8933 if pTab == uintptr(0) { 8934 rc = SQLITE_NOMEM 8935 } else { 8936 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(Fts5tokTable{}))) 8937 } 8938 } 8939 8940 if rc == SQLITE_OK { 8941 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 8942 var zModule uintptr = uintptr(0) 8943 if nDequote > 0 { 8944 zModule = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) 8945 } 8946 8947 rc = (*struct { 8948 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 8949 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(pApi)).FxFindTokenizer})).f(tls, pApi, zModule, bp+8, pTab+24) 8950 if rc == SQLITE_OK { 8951 var azArg uintptr = func() uintptr { 8952 if nDequote > 1 { 8953 return *(*uintptr)(unsafe.Pointer(bp)) + 1*8 8954 } 8955 return uintptr(0) 8956 }() 8957 var nArg int32 8958 if nDequote > 0 { 8959 nArg = nDequote - 1 8960 } else { 8961 nArg = 0 8962 } 8963 rc = (*struct { 8964 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8965 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), azArg, nArg, pTab+48) 8966 } 8967 } 8968 8969 if rc != SQLITE_OK { 8970 sqlite3.Xsqlite3_free(tls, pTab) 8971 pTab = uintptr(0) 8972 } 8973 8974 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 8975 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 8976 return rc 8977 } 8978 8979 func fts5tokDisconnectMethod(tls *libc.TLS, pVtab uintptr) int32 { 8980 var pTab uintptr = pVtab 8981 if (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok != 0 { 8982 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxDelete})).f(tls, (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok) 8983 } 8984 sqlite3.Xsqlite3_free(tls, pTab) 8985 return SQLITE_OK 8986 } 8987 8988 func fts5tokBestIndexMethod(tls *libc.TLS, pVTab uintptr, pInfo uintptr) int32 { 8989 var i int32 8990 8991 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FnConstraint; i++ { 8992 if (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 && 8993 (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).FiColumn == 0 && 8994 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 8995 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 1 8996 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 8997 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 8998 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FestimatedCost = float64(1) 8999 return SQLITE_OK 9000 } 9001 } 9002 9003 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 0 9004 9005 return SQLITE_OK 9006 } 9007 9008 func fts5tokOpenMethod(tls *libc.TLS, pVTab uintptr, ppCsr uintptr) int32 { 9009 var pCsr uintptr 9010 9011 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokCursor{}))) 9012 if pCsr == uintptr(0) { 9013 return SQLITE_NOMEM 9014 } 9015 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(Fts5tokCursor{}))) 9016 9017 *(*uintptr)(unsafe.Pointer(ppCsr)) = pCsr 9018 return SQLITE_OK 9019 } 9020 9021 func fts5tokResetCursor(tls *libc.TLS, pCsr uintptr) { 9022 var i int32 9023 for i = 0; i < (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow; i++ { 9024 sqlite3.Xsqlite3_free(tls, (*Fts5tokRow)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow+uintptr(i)*24)).FzToken) 9025 } 9026 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput) 9027 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow) 9028 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = uintptr(0) 9029 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = uintptr(0) 9030 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow = 0 9031 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid = 0 9032 } 9033 9034 func fts5tokCloseMethod(tls *libc.TLS, pCursor uintptr) int32 { 9035 var pCsr uintptr = pCursor 9036 fts5tokResetCursor(tls, pCsr) 9037 sqlite3.Xsqlite3_free(tls, pCsr) 9038 return SQLITE_OK 9039 } 9040 9041 func fts5tokNextMethod(tls *libc.TLS, pCursor uintptr) int32 { 9042 var pCsr uintptr = pCursor 9043 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid++ 9044 return SQLITE_OK 9045 } 9046 9047 func fts5tokCb(tls *libc.TLS, pCtx uintptr, tflags int32, pToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 9048 var pCsr uintptr = pCtx 9049 var pRow uintptr 9050 9051 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow&((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow-1) == 0 { 9052 var nNew int32 9053 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9054 nNew = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow * 2 9055 } else { 9056 nNew = 32 9057 } 9058 var aNew uintptr 9059 aNew = sqlite3.Xsqlite3_realloc64(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow, uint64(nNew)*uint64(unsafe.Sizeof(Fts5tokRow{}))) 9060 if aNew == uintptr(0) { 9061 return SQLITE_NOMEM 9062 } 9063 libc.Xmemset(tls, aNew+uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24, 0, uint64(unsafe.Sizeof(Fts5tokRow{}))*uint64(nNew-(*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)) 9064 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = aNew 9065 } 9066 9067 pRow = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24 9068 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart = iStart 9069 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd = iEnd 9070 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9071 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos = (*Fts5tokRow)(unsafe.Pointer(pRow+libc.UintptrFromInt32(-1)*24)).FiPos + func() int32 { 9072 if tflags&FTS5_TOKEN_COLOCATED != 0 { 9073 return 0 9074 } 9075 return 1 9076 }() 9077 } 9078 (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken = sqlite3.Xsqlite3_malloc(tls, nToken+1) 9079 if (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken == uintptr(0) { 9080 return SQLITE_NOMEM 9081 } 9082 libc.Xmemcpy(tls, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, pToken, uint64(nToken)) 9083 *(*int8)(unsafe.Pointer((*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken + uintptr(nToken))) = int8(0) 9084 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow++ 9085 9086 return SQLITE_OK 9087 } 9088 9089 func fts5tokFilterMethod(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, nVal int32, apVal uintptr) int32 { 9090 var rc int32 = SQLITE_ERROR 9091 var pCsr uintptr = pCursor 9092 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 9093 9094 fts5tokResetCursor(tls, pCsr) 9095 if idxNum == 1 { 9096 var zByte uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9097 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9098 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = sqlite3.Xsqlite3_malloc(tls, nByte+1) 9099 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput == uintptr(0) { 9100 rc = SQLITE_NOMEM 9101 } else { 9102 if nByte > 0 { 9103 libc.Xmemcpy(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, zByte, uint64(nByte)) 9104 } 9105 *(*int8)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput + uintptr(nByte))) = int8(0) 9106 rc = (*struct { 9107 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 9108 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxTokenize})).f(tls, 9109 (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok, pCsr, 0, zByte, nByte, *(*uintptr)(unsafe.Pointer(&struct { 9110 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 9111 }{fts5tokCb}))) 9112 } 9113 } 9114 9115 if rc != SQLITE_OK { 9116 return rc 9117 } 9118 return fts5tokNextMethod(tls, pCursor) 9119 } 9120 9121 func fts5tokEofMethod(tls *libc.TLS, pCursor uintptr) int32 { 9122 var pCsr uintptr = pCursor 9123 return libc.Bool32((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid > (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow) 9124 } 9125 9126 func fts5tokColumnMethod(tls *libc.TLS, pCursor uintptr, pCtx uintptr, iCol int32) int32 { 9127 var pCsr uintptr = pCursor 9128 var pRow uintptr = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid-1)*24 9129 9130 switch iCol { 9131 case 0: 9132 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, -1, libc.UintptrFromInt32(-1)) 9133 break 9134 case 1: 9135 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, -1, libc.UintptrFromInt32(-1)) 9136 break 9137 case 2: 9138 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart) 9139 break 9140 case 3: 9141 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd) 9142 break 9143 default: 9144 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos) 9145 break 9146 } 9147 return SQLITE_OK 9148 } 9149 9150 func fts5tokRowidMethod(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 9151 var pCsr uintptr = pCursor 9152 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3_int64((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid) 9153 return SQLITE_OK 9154 } 9155 9156 func sqlite3Fts5TestRegisterTok(tls *libc.TLS, db uintptr, pApi uintptr) int32 { 9157 var rc int32 9158 9159 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3235, uintptr(unsafe.Pointer(&fts5tok_module)), pApi) 9160 return rc 9161 } 9162 9163 var fts5tok_module = sqlite3_module{ 9164 FxCreate: 0, 9165 FxConnect: 0, 9166 FxBestIndex: 0, 9167 FxDisconnect: 0, 9168 FxDestroy: 0, 9169 FxOpen: 0, 9170 FxClose: 0, 9171 FxFilter: 0, 9172 FxNext: 0, 9173 FxEof: 0, 9174 FxColumn: 0, 9175 FxRowid: 0, 9176 } 9177 9178 type sqlite3_api_routines = sqlite3_api_routines1 9179 9180 type sqlite3_loadext_entry = uintptr 9181 9182 type ApndVfs = sqlite3_vfs1 9183 type ApndFile1 = struct { 9184 Fbase sqlite3_file 9185 FiPgOne sqlite3_int64 9186 FiMark sqlite3_int64 9187 } 9188 9189 type ApndFile = ApndFile1 9190 9191 var apnd_vfs = sqlite3_vfs{ 9192 FiVersion: 3, 9193 FmxPathname: 1024, 9194 FzName: ts + 3248, 9195 FxOpen: 0, 9196 FxDelete: 0, 9197 FxAccess: 0, 9198 FxFullPathname: 0, 9199 FxDlOpen: 0, 9200 FxDlError: 0, 9201 FxDlSym: 0, 9202 FxDlClose: 0, 9203 FxRandomness: 0, 9204 FxSleep: 0, 9205 FxCurrentTime: 0, 9206 FxGetLastError: 0, 9207 FxCurrentTimeInt64: 0, 9208 FxSetSystemCall: 0, 9209 FxGetSystemCall: 0, 9210 FxNextSystemCall: 0, 9211 } 9212 9213 var apnd_io_methods = sqlite3_io_methods{ 9214 FiVersion: 3, 9215 FxClose: 0, 9216 FxRead: 0, 9217 FxWrite: 0, 9218 FxTruncate: 0, 9219 FxSync: 0, 9220 FxFileSize: 0, 9221 FxLock: 0, 9222 FxUnlock: 0, 9223 FxCheckReservedLock: 0, 9224 FxFileControl: 0, 9225 FxSectorSize: 0, 9226 FxDeviceCharacteristics: 0, 9227 FxShmMap: 0, 9228 FxShmLock: 0, 9229 FxShmBarrier: 0, 9230 FxShmUnmap: 0, 9231 FxFetch: 0, 9232 FxUnfetch: 0, 9233 } 9234 9235 func apndClose(tls *libc.TLS, pFile uintptr) int32 { 9236 pFile = pFile + uintptr(1)*24 9237 return (*struct { 9238 f func(*libc.TLS, uintptr) int32 9239 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 9240 } 9241 9242 func apndRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9243 var paf uintptr = pFile 9244 pFile = pFile + uintptr(1)*24 9245 return (*struct { 9246 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9247 })(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) 9248 } 9249 9250 func apndWriteMark(tls *libc.TLS, paf uintptr, pFile uintptr, iWriteEnd sqlite_int64) int32 { 9251 bp := tls.Alloc(25) 9252 defer tls.Free(25) 9253 9254 var iPgOne sqlite_int64 = (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9255 9256 var i int32 = APND_MARK_FOS_SZ 9257 var rc int32 9258 9259 libc.Xmemcpy(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) 9260 for libc.PreDecInt32(&i, 1) >= 0 { 9261 *(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))) = uint8(iPgOne & int64(0xff)) 9262 iPgOne >>= 8 9263 } 9264 iWriteEnd = iWriteEnd + (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9265 if SQLITE_OK == libc.AssignInt32(&rc, (*struct { 9266 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9267 })(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)) { 9268 (*ApndFile)(unsafe.Pointer(paf)).FiMark = iWriteEnd 9269 } 9270 return rc 9271 } 9272 9273 func apndWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9274 var paf uintptr = pFile 9275 var iWriteEnd sqlite_int64 = iOfst + sqlite_int64(iAmt) 9276 if iWriteEnd >= int64(0x40000000) { 9277 return SQLITE_FULL 9278 } 9279 pFile = pFile + uintptr(1)*24 9280 9281 if (*ApndFile)(unsafe.Pointer(paf)).FiMark < int64(0) || (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iWriteEnd > (*ApndFile)(unsafe.Pointer(paf)).FiMark { 9282 var rc int32 = apndWriteMark(tls, paf, pFile, iWriteEnd) 9283 if SQLITE_OK != rc { 9284 return rc 9285 } 9286 } 9287 return (*struct { 9288 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9289 })(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) 9290 } 9291 9292 func apndTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 9293 var paf uintptr = pFile 9294 pFile = pFile + uintptr(1)*24 9295 9296 if SQLITE_OK != apndWriteMark(tls, paf, pFile, size) { 9297 return SQLITE_IOERR 9298 } 9299 9300 return (*struct { 9301 f func(*libc.TLS, uintptr, sqlite3_int64) int32 9302 })(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)) 9303 } 9304 9305 func apndSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 9306 pFile = pFile + uintptr(1)*24 9307 return (*struct { 9308 f func(*libc.TLS, uintptr, int32) int32 9309 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 9310 } 9311 9312 func apndFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 9313 var paf uintptr = pFile 9314 *(*sqlite_int64)(unsafe.Pointer(pSize)) = func() int64 { 9315 if (*ApndFile)(unsafe.Pointer(paf)).FiMark >= int64(0) { 9316 return (*ApndFile)(unsafe.Pointer(paf)).FiMark - (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9317 } 9318 return int64(0) 9319 }() 9320 return SQLITE_OK 9321 } 9322 9323 func apndLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9324 pFile = pFile + uintptr(1)*24 9325 return (*struct { 9326 f func(*libc.TLS, uintptr, int32) int32 9327 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 9328 } 9329 9330 func apndUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9331 pFile = pFile + uintptr(1)*24 9332 return (*struct { 9333 f func(*libc.TLS, uintptr, int32) int32 9334 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 9335 } 9336 9337 func apndCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 9338 pFile = pFile + uintptr(1)*24 9339 return (*struct { 9340 f func(*libc.TLS, uintptr, uintptr) int32 9341 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 9342 } 9343 9344 func apndFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 9345 bp := tls.Alloc(16) 9346 defer tls.Free(16) 9347 9348 var paf uintptr = pFile 9349 var rc int32 9350 pFile = pFile + uintptr(1)*24 9351 if op == SQLITE_FCNTL_SIZE_HINT { 9352 *(*sqlite3_int64)(unsafe.Pointer(pArg)) += (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9353 } 9354 rc = (*struct { 9355 f func(*libc.TLS, uintptr, int32, uintptr) int32 9356 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 9357 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 9358 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+3274, libc.VaList(bp, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne, *(*uintptr)(unsafe.Pointer(pArg)))) 9359 } 9360 return rc 9361 } 9362 9363 func apndSectorSize(tls *libc.TLS, pFile uintptr) int32 { 9364 pFile = pFile + uintptr(1)*24 9365 return (*struct { 9366 f func(*libc.TLS, uintptr) int32 9367 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 9368 } 9369 9370 func apndDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 9371 pFile = pFile + uintptr(1)*24 9372 return (*struct { 9373 f func(*libc.TLS, uintptr) int32 9374 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 9375 } 9376 9377 func apndShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 9378 pFile = pFile + uintptr(1)*24 9379 return (*struct { 9380 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 9381 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 9382 } 9383 9384 func apndShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 9385 pFile = pFile + uintptr(1)*24 9386 return (*struct { 9387 f func(*libc.TLS, uintptr, int32, int32, int32) int32 9388 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 9389 } 9390 9391 func apndShmBarrier(tls *libc.TLS, pFile uintptr) { 9392 pFile = pFile + uintptr(1)*24 9393 (*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) 9394 } 9395 9396 func apndShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 9397 pFile = pFile + uintptr(1)*24 9398 return (*struct { 9399 f func(*libc.TLS, uintptr, int32) int32 9400 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 9401 } 9402 9403 func apndFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 9404 var p uintptr = pFile 9405 if (*ApndFile)(unsafe.Pointer(p)).FiMark < int64(0) || iOfst+sqlite3_int64(iAmt) > (*ApndFile)(unsafe.Pointer(p)).FiMark { 9406 return SQLITE_IOERR 9407 } 9408 pFile = pFile + uintptr(1)*24 9409 return (*struct { 9410 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 9411 })(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) 9412 } 9413 9414 func apndUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 9415 var p uintptr = pFile 9416 pFile = pFile + uintptr(1)*24 9417 return (*struct { 9418 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 9419 })(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) 9420 } 9421 9422 func apndReadMark(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) sqlite3_int64 { 9423 bp := tls.Alloc(25) 9424 defer tls.Free(25) 9425 9426 var rc int32 9427 var i int32 9428 var iMark sqlite3_int64 9429 var msbs int32 = 8 * (APND_MARK_FOS_SZ - 1) 9430 9431 if int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) != sz&int64(0x1ff) { 9432 return int64(-1) 9433 } 9434 rc = (*struct { 9435 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9436 })(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)) 9437 if rc != 0 { 9438 return int64(-1) 9439 } 9440 if libc.Xmemcmp(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) != 0 { 9441 return int64(-1) 9442 } 9443 iMark = sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(bp + 17)))&0x7f) << msbs 9444 for i = 1; i < 8; i++ { 9445 msbs = msbs - 8 9446 iMark = iMark | sqlite3_int64(*(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))))<<msbs 9447 } 9448 if iMark > sz-int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)-int64(512) { 9449 return int64(-1) 9450 } 9451 if iMark&int64(0x1ff) != 0 { 9452 return int64(-1) 9453 } 9454 return iMark 9455 } 9456 9457 var apvfsSqliteHdr = *(*[16]int8)(unsafe.Pointer(ts + 3288)) 9458 9459 func apndIsAppendvfsDatabase(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9460 bp := tls.Alloc(16) 9461 defer tls.Free(16) 9462 9463 var rc int32 9464 9465 var iMark sqlite3_int64 = apndReadMark(tls, sz, pFile) 9466 if iMark >= int64(0) { 9467 rc = (*struct { 9468 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9469 })(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) 9470 if SQLITE_OK == rc && 9471 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]int8{}))) == 0 && 9472 sz&int64(0x1ff) == int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) && 9473 sz >= int64(512+(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) { 9474 return 1 9475 } 9476 } 9477 return 0 9478 } 9479 9480 func apndIsOrdinaryDatabaseFile(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9481 bp := tls.Alloc(16) 9482 defer tls.Free(16) 9483 9484 if apndIsAppendvfsDatabase(tls, sz, pFile) != 0 || 9485 sz&int64(0x1ff) != int64(0) || 9486 SQLITE_OK != (*struct { 9487 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9488 })(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)) || 9489 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]int8{}))) != 0 { 9490 return 0 9491 } else { 9492 return 1 9493 } 9494 return int32(0) 9495 } 9496 9497 func apndOpen(tls *libc.TLS, pApndVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 9498 bp := tls.Alloc(8) 9499 defer tls.Free(8) 9500 9501 var pApndFile uintptr = pFile 9502 var pBaseFile uintptr = pFile + uintptr(1)*24 9503 var pBaseVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pApndVfs)).FpAppData 9504 var rc int32 9505 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 9506 if flags&SQLITE_OPEN_MAIN_DB == 0 { 9507 return (*struct { 9508 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9509 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pFile, flags, pOutFlags) 9510 } 9511 libc.Xmemset(tls, pApndFile, 0, uint64(unsafe.Sizeof(ApndFile{}))) 9512 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&apnd_io_methods)) 9513 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = int64(-1) 9514 9515 rc = (*struct { 9516 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9517 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pBaseFile, flags, pOutFlags) 9518 if rc == SQLITE_OK { 9519 rc = (*struct { 9520 f func(*libc.TLS, uintptr, uintptr) int32 9521 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxFileSize})).f(tls, pBaseFile, bp) 9522 if rc != 0 { 9523 (*struct { 9524 f func(*libc.TLS, uintptr) int32 9525 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9526 } 9527 } 9528 if rc != 0 { 9529 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9530 return rc 9531 } 9532 if apndIsOrdinaryDatabaseFile(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pBaseFile) != 0 { 9533 libc.Xmemmove(tls, pApndFile, pBaseFile, uint64((*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FszOsFile)) 9534 return SQLITE_OK 9535 } 9536 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = apndReadMark(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pFile) 9537 if (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne >= int64(0) { 9538 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = *(*sqlite3_int64)(unsafe.Pointer(bp)) - int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) 9539 return SQLITE_OK 9540 } 9541 if flags&SQLITE_OPEN_CREATE == 0 { 9542 (*struct { 9543 f func(*libc.TLS, uintptr) int32 9544 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9545 rc = SQLITE_CANTOPEN 9546 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9547 } else { 9548 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = (*(*sqlite3_int64)(unsafe.Pointer(bp)) + int64(APND_ROUNDUP-1)) & libc.CplInt64(int64(APND_ROUNDUP-1)) 9549 } 9550 return rc 9551 } 9552 9553 func apndDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 9554 return (*struct { 9555 f func(*libc.TLS, uintptr, uintptr, int32) int32 9556 })(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) 9557 } 9558 9559 func apndAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 9560 return (*struct { 9561 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9562 })(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) 9563 } 9564 9565 func apndFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 9566 return (*struct { 9567 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9568 })(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) 9569 } 9570 9571 func apndDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 9572 return (*struct { 9573 f func(*libc.TLS, uintptr, uintptr) uintptr 9574 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 9575 } 9576 9577 func apndDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 9578 (*struct { 9579 f func(*libc.TLS, uintptr, int32, uintptr) 9580 })(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) 9581 } 9582 9583 func apndDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 9584 return (*struct { 9585 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 9586 })(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) 9587 } 9588 9589 func apndDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 9590 (*struct { 9591 f func(*libc.TLS, uintptr, uintptr) 9592 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 9593 } 9594 9595 func apndRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 9596 return (*struct { 9597 f func(*libc.TLS, uintptr, int32, uintptr) int32 9598 })(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) 9599 } 9600 9601 func apndSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 9602 return (*struct { 9603 f func(*libc.TLS, uintptr, int32) int32 9604 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 9605 } 9606 9607 func apndCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 9608 return (*struct { 9609 f func(*libc.TLS, uintptr, uintptr) int32 9610 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 9611 } 9612 9613 func apndGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 9614 return (*struct { 9615 f func(*libc.TLS, uintptr, int32, uintptr) int32 9616 })(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) 9617 } 9618 9619 func apndCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 9620 return (*struct { 9621 f func(*libc.TLS, uintptr, uintptr) int32 9622 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTimeInt64})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p) 9623 } 9624 9625 func apndSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 9626 return (*struct { 9627 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 9628 })(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) 9629 } 9630 9631 func apndGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 9632 return (*struct { 9633 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 9634 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 9635 } 9636 9637 func apndNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 9638 return (*struct { 9639 f func(*libc.TLS, uintptr, uintptr) uintptr 9640 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 9641 } 9642 9643 func sqlite3_appendvfs_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 9644 var rc int32 = SQLITE_OK 9645 var pOrig uintptr 9646 _ = pApi 9647 9648 _ = pzErrMsg 9649 _ = db 9650 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 9651 if pOrig == uintptr(0) { 9652 return SQLITE_ERROR 9653 } 9654 apnd_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 9655 apnd_vfs.FpAppData = pOrig 9656 apnd_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(ApndFile{}))) 9657 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&apnd_vfs)), 0) 9658 if rc == SQLITE_OK { 9659 rc = SQLITE_OK | int32(1)<<8 9660 } 9661 return rc 9662 } 9663 9664 type div_t = struct { 9665 Fquot int32 9666 Frem int32 9667 } 9668 9669 type ldiv_t = struct { 9670 Fquot int64 9671 Frem int64 9672 } 9673 9674 type lldiv_t = struct { 9675 Fquot int64 9676 Frem int64 9677 } 9678 9679 type qdiv_t = struct { 9680 Fquot quad_t 9681 Frem quad_t 9682 } 9683 9684 type amatch_vtab1 = struct { 9685 Fbase sqlite3_vtab 9686 FzClassName uintptr 9687 FzDb uintptr 9688 FzSelf uintptr 9689 FzCostTab uintptr 9690 FzVocabTab uintptr 9691 FzVocabWord uintptr 9692 FzVocabLang uintptr 9693 FpRule uintptr 9694 FrIns amatch_cost 9695 FrDel amatch_cost 9696 FrSub amatch_cost 9697 F__ccgo_pad1 [4]byte 9698 Fdb uintptr 9699 FpVCheck uintptr 9700 FnCursor int32 9701 F__ccgo_pad2 [4]byte 9702 } 9703 9704 type amatch_vtab = amatch_vtab1 9705 type amatch_cursor1 = struct { 9706 Fbase sqlite3_vtab_cursor 9707 FiRowid sqlite3_int64 9708 FiLang amatch_langid 9709 FrLimit amatch_cost 9710 FnBuf int32 9711 FoomErr int32 9712 FnWord int32 9713 F__ccgo_pad1 [4]byte 9714 FzBuf uintptr 9715 FzInput uintptr 9716 FpVtab uintptr 9717 FpAllWords uintptr 9718 FpCurrent uintptr 9719 FpCost uintptr 9720 FpWord uintptr 9721 } 9722 9723 type amatch_cursor = amatch_cursor1 9724 type amatch_rule1 = struct { 9725 FpNext uintptr 9726 FzFrom uintptr 9727 FrCost amatch_cost 9728 FiLang amatch_langid 9729 FnFrom amatch_len 9730 FnTo amatch_len 9731 FzTo [4]int8 9732 F__ccgo_pad1 [2]byte 9733 } 9734 9735 type amatch_rule = amatch_rule1 9736 type amatch_word1 = struct { 9737 FpNext uintptr 9738 FsCost amatch_avl 9739 FsWord amatch_avl 9740 FrCost amatch_cost 9741 FiSeq int32 9742 FzCost [10]int8 9743 FnMatch int16 9744 FzWord [4]int8 9745 } 9746 9747 type amatch_word = amatch_word1 9748 type amatch_avl1 = struct { 9749 FpWord uintptr 9750 FzKey uintptr 9751 FpBefore uintptr 9752 FpAfter uintptr 9753 FpUp uintptr 9754 Fheight int16 9755 Fimbalance int16 9756 F__ccgo_pad1 [4]byte 9757 } 9758 9759 type amatch_avl = amatch_avl1 9760 9761 func amatchAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 9762 var hBefore int16 9763 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 9764 hBefore = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 9765 } else { 9766 hBefore = int16(0) 9767 } 9768 var hAfter int16 9769 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 9770 hAfter = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 9771 } else { 9772 hAfter = int16(0) 9773 } 9774 (*amatch_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 9775 (*amatch_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 9776 if int32(hBefore) > int32(hAfter) { 9777 return int32(hBefore) 9778 } 9779 return int32(hAfter) 9780 }() + 1) 9781 } 9782 9783 func amatchAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 9784 var pB uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpBefore 9785 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pB)).FpAfter 9786 (*amatch_avl)(unsafe.Pointer(pB)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 9787 (*amatch_avl)(unsafe.Pointer(pB)).FpAfter = pP 9788 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pB 9789 (*amatch_avl)(unsafe.Pointer(pP)).FpBefore = pY 9790 if pY != 0 { 9791 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 9792 } 9793 amatchAvlRecomputeHeight(tls, pP) 9794 amatchAvlRecomputeHeight(tls, pB) 9795 return pB 9796 } 9797 9798 func amatchAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 9799 var pA uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpAfter 9800 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pA)).FpBefore 9801 (*amatch_avl)(unsafe.Pointer(pA)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 9802 (*amatch_avl)(unsafe.Pointer(pA)).FpBefore = pP 9803 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pA 9804 (*amatch_avl)(unsafe.Pointer(pP)).FpAfter = pY 9805 if pY != 0 { 9806 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 9807 } 9808 amatchAvlRecomputeHeight(tls, pP) 9809 amatchAvlRecomputeHeight(tls, pA) 9810 return pA 9811 } 9812 9813 func amatchAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 9814 var pUp uintptr = (*amatch_avl)(unsafe.Pointer(p)).FpUp 9815 if pUp == uintptr(0) { 9816 return pp 9817 } 9818 if (*amatch_avl)(unsafe.Pointer(pUp)).FpAfter == p { 9819 return pUp + 24 9820 } 9821 return pUp + 16 9822 } 9823 9824 func amatchAvlBalance(tls *libc.TLS, p uintptr) uintptr { 9825 bp := tls.Alloc(8) 9826 defer tls.Free(8) 9827 *(*uintptr)(unsafe.Pointer(bp)) = p 9828 9829 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 9830 var pp uintptr 9831 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 9832 amatchAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 9833 if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 9834 var pB uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 9835 if int32((*amatch_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 9836 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = amatchAvlRotateAfter(tls, pB) 9837 } 9838 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 9839 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 9840 } else if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 9841 var pA uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 9842 if int32((*amatch_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 9843 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = amatchAvlRotateBefore(tls, pA) 9844 } 9845 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 9846 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 9847 } 9848 pTop = *(*uintptr)(unsafe.Pointer(bp)) 9849 *(*uintptr)(unsafe.Pointer(bp)) = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 9850 } 9851 return pTop 9852 } 9853 9854 func amatchAvlSearch(tls *libc.TLS, p uintptr, zKey uintptr) uintptr { 9855 var c int32 9856 for p != 0 && libc.AssignInt32(&c, libc.Xstrcmp(tls, zKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey)) != 0 { 9857 if c < 0 { 9858 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 9859 } else { 9860 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 9861 } 9862 } 9863 return p 9864 } 9865 9866 func amatchAvlFirst(tls *libc.TLS, p uintptr) uintptr { 9867 if p != 0 { 9868 for (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 9869 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 9870 } 9871 } 9872 return p 9873 } 9874 9875 func amatchAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 9876 var c int32 9877 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 9878 if p == uintptr(0) { 9879 p = pNew 9880 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 9881 } else { 9882 for p != 0 { 9883 c = libc.Xstrcmp(tls, (*amatch_avl)(unsafe.Pointer(pNew)).FzKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey) 9884 if c < 0 { 9885 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 9886 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 9887 } else { 9888 (*amatch_avl)(unsafe.Pointer(p)).FpBefore = pNew 9889 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 9890 break 9891 } 9892 } else if c > 0 { 9893 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 9894 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 9895 } else { 9896 (*amatch_avl)(unsafe.Pointer(p)).FpAfter = pNew 9897 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 9898 break 9899 } 9900 } else { 9901 return p 9902 } 9903 } 9904 } 9905 (*amatch_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 9906 (*amatch_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 9907 (*amatch_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 9908 (*amatch_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 9909 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, p) 9910 9911 return uintptr(0) 9912 } 9913 9914 func amatchAvlRemove(tls *libc.TLS, ppHead uintptr, pOld uintptr) { 9915 var ppParent uintptr 9916 var pBalance uintptr = uintptr(0) 9917 9918 ppParent = amatchAvlFromPtr(tls, pOld, ppHead) 9919 if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 9920 *(*uintptr)(unsafe.Pointer(ppParent)) = uintptr(0) 9921 pBalance = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 9922 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore != 0 && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter != 0 { 9923 var pX uintptr 9924 var pY uintptr 9925 pX = amatchAvlFirst(tls, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 9926 *(*uintptr)(unsafe.Pointer(amatchAvlFromPtr(tls, pX, uintptr(0)))) = (*amatch_avl)(unsafe.Pointer(pX)).FpAfter 9927 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 9928 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 9929 } 9930 pBalance = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 9931 (*amatch_avl)(unsafe.Pointer(pX)).FpAfter = (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter 9932 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 9933 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = pX 9934 } else { 9935 pBalance = pX 9936 } 9937 (*amatch_avl)(unsafe.Pointer(pX)).FpBefore = libc.AssignUintptr(&pY, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 9938 if pY != 0 { 9939 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pX 9940 } 9941 (*amatch_avl)(unsafe.Pointer(pX)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 9942 *(*uintptr)(unsafe.Pointer(ppParent)) = pX 9943 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) { 9944 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 9945 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 9946 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 9947 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 9948 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 9949 } 9950 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, pBalance) 9951 (*amatch_avl)(unsafe.Pointer(pOld)).FpUp = uintptr(0) 9952 (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore = uintptr(0) 9953 (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter = uintptr(0) 9954 9955 } 9956 9957 type amatch_cost = int32 9958 type amatch_len = int8 9959 type amatch_langid = int32 9960 9961 func amatchMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 9962 bp := tls.Alloc(32) 9963 defer tls.Free(32) 9964 9965 var pTail uintptr 9966 9967 pTail = bp 9968 for pA != 0 && pB != 0 { 9969 if (*amatch_rule)(unsafe.Pointer(pA)).FrCost <= (*amatch_rule)(unsafe.Pointer(pB)).FrCost { 9970 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 9971 pTail = pA 9972 pA = (*amatch_rule)(unsafe.Pointer(pA)).FpNext 9973 } else { 9974 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 9975 pTail = pB 9976 pB = (*amatch_rule)(unsafe.Pointer(pB)).FpNext 9977 } 9978 } 9979 if pA == uintptr(0) { 9980 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 9981 } else { 9982 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 9983 } 9984 return (*amatch_rule)(unsafe.Pointer(bp)).FpNext 9985 } 9986 9987 func amatchLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 9988 bp := tls.Alloc(48) 9989 defer tls.Free(48) 9990 9991 var iLang sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 9992 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 9993 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 9994 var rCost amatch_cost = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 9995 9996 var rc int32 = SQLITE_OK 9997 var nFrom int32 9998 var nTo int32 9999 var pRule uintptr = uintptr(0) 10000 10001 if zFrom == uintptr(0) { 10002 zFrom = ts + 584 10003 } 10004 if zTo == uintptr(0) { 10005 zTo = ts + 584 10006 } 10007 nFrom = int32(libc.Xstrlen(tls, zFrom)) 10008 nTo = int32(libc.Xstrlen(tls, zTo)) 10009 10010 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 10011 if int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zFrom + 1))) == 0 { 10012 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrSub > rCost { 10013 (*amatch_vtab)(unsafe.Pointer(p)).FrSub = rCost 10014 } 10015 } 10016 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 10017 return SQLITE_OK 10018 } 10019 10020 if rCost <= 0 || rCost > AMATCH_MX_COST { 10021 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 10022 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_COST)) 10023 rc = SQLITE_ERROR 10024 } else if nFrom > AMATCH_MX_LENGTH || nTo > AMATCH_MX_LENGTH { 10025 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 10026 libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LENGTH)) 10027 rc = SQLITE_ERROR 10028 } else if iLang < int64(0) || iLang > int64(AMATCH_MX_LANGID) { 10029 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3370, 10030 libc.VaList(bp+32, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LANGID)) 10031 rc = SQLITE_ERROR 10032 } else if libc.Xstrcmp(tls, zFrom, ts+584) == 0 && libc.Xstrcmp(tls, zTo, ts+3405) == 0 { 10033 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrIns > rCost { 10034 (*amatch_vtab)(unsafe.Pointer(p)).FrIns = rCost 10035 } 10036 } else if libc.Xstrcmp(tls, zFrom, ts+3405) == 0 && libc.Xstrcmp(tls, zTo, ts+584) == 0 { 10037 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrDel > rCost { 10038 (*amatch_vtab)(unsafe.Pointer(p)).FrDel = rCost 10039 } 10040 } else { 10041 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_rule{}))+uint64(nFrom)+uint64(nTo)) 10042 if pRule == uintptr(0) { 10043 rc = SQLITE_NOMEM 10044 } else { 10045 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(amatch_rule{}))) 10046 (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 26 + uintptr(nTo+1) 10047 (*amatch_rule)(unsafe.Pointer(pRule)).FnFrom = amatch_len(nFrom) 10048 libc.Xmemcpy(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 10049 libc.Xmemcpy(tls, pRule+26, zTo, uint64(nTo+1)) 10050 (*amatch_rule)(unsafe.Pointer(pRule)).FnTo = amatch_len(nTo) 10051 (*amatch_rule)(unsafe.Pointer(pRule)).FrCost = rCost 10052 (*amatch_rule)(unsafe.Pointer(pRule)).FiLang = int32(iLang) 10053 } 10054 } 10055 10056 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 10057 return rc 10058 } 10059 10060 func amatchFreeRules(tls *libc.TLS, p uintptr) { 10061 for (*amatch_vtab)(unsafe.Pointer(p)).FpRule != 0 { 10062 var pRule uintptr = (*amatch_vtab)(unsafe.Pointer(p)).FpRule 10063 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext 10064 sqlite3.Xsqlite3_free(tls, pRule) 10065 } 10066 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = uintptr(0) 10067 } 10068 10069 func amatchLoadRules(tls *libc.TLS, db uintptr, p uintptr, pzErr uintptr) int32 { 10070 bp := tls.Alloc(192) 10071 defer tls.Free(192) 10072 10073 var rc int32 = SQLITE_OK 10074 var zSql uintptr 10075 var pHead uintptr = uintptr(0) 10076 10077 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzDb, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab)) 10078 if zSql == uintptr(0) { 10079 rc = SQLITE_NOMEM 10080 } else { 10081 var rc2 int32 10082 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 10083 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 10084 if rc != SQLITE_OK { 10085 *(*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))) 10086 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 10087 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 10088 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))))) 10089 rc = SQLITE_ERROR 10090 } else { 10091 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 10092 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 10093 rc = amatchLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 10094 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 10095 (*amatch_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 10096 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 10097 } 10098 } 10099 } 10100 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 10101 if rc == SQLITE_OK { 10102 rc = rc2 10103 } 10104 } 10105 sqlite3.Xsqlite3_free(tls, zSql) 10106 10107 if rc == SQLITE_OK { 10108 var i uint32 10109 var pX uintptr 10110 10111 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 10112 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 10113 } 10114 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 10115 pHead = (*amatch_rule)(unsafe.Pointer(pX)).FpNext 10116 (*amatch_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 10117 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++ { 10118 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10119 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 10120 } 10121 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10122 } 10123 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 10124 i = uint32(1) 10125 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 10126 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10127 } 10128 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = amatchMergeRules(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpRule, pX) 10129 } else { 10130 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = pHead 10131 } 10132 10133 return rc 10134 } 10135 10136 func amatchDequote(tls *libc.TLS, zIn uintptr) uintptr { 10137 var nIn sqlite3_int64 10138 var zOut uintptr 10139 10140 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 10141 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 10142 if zOut != 0 { 10143 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 10144 10145 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 10146 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 10147 } else { 10148 var iOut int32 = 0 10149 var iIn int32 10150 10151 if int32(q) == '[' { 10152 q = int8(']') 10153 } 10154 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 10155 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 10156 iIn++ 10157 } 10158 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 10159 } 10160 } 10161 10162 } 10163 return zOut 10164 } 10165 10166 func amatchVCheckClear(tls *libc.TLS, p uintptr) { 10167 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck != 0 { 10168 sqlite3.Xsqlite3_finalize(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10169 (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck = uintptr(0) 10170 } 10171 } 10172 10173 func amatchFree(tls *libc.TLS, p uintptr) { 10174 if p != 0 { 10175 amatchFreeRules(tls, p) 10176 amatchVCheckClear(tls, p) 10177 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName) 10178 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzDb) 10179 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab) 10180 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab) 10181 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord) 10182 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang) 10183 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf) 10184 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 10185 sqlite3.Xsqlite3_free(tls, p) 10186 } 10187 } 10188 10189 func amatchDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 10190 var p uintptr = pVtab 10191 10192 amatchFree(tls, p) 10193 return SQLITE_OK 10194 } 10195 10196 func amatchValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 10197 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 10198 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 10199 var i int32 10200 if nStr < nKey+1 { 10201 return uintptr(0) 10202 } 10203 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 10204 return uintptr(0) 10205 } 10206 for i = nKey; libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0; i++ { 10207 } 10208 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 10209 return uintptr(0) 10210 } 10211 i++ 10212 for libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0 { 10213 i++ 10214 } 10215 return zStr + uintptr(i) 10216 } 10217 10218 func amatchConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 10219 bp := tls.Alloc(32) 10220 defer tls.Free(32) 10221 10222 var rc int32 10223 var pNew uintptr 10224 var zModule uintptr 10225 var zDb uintptr 10226 var zVal uintptr 10227 var i int32 10228 rc = SQLITE_OK 10229 pNew = uintptr(0) 10230 zModule = *(*uintptr)(unsafe.Pointer(argv)) 10231 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 10232 10233 _ = pAux 10234 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10235 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_vtab{}))) 10236 if !(pNew == uintptr(0)) { 10237 goto __1 10238 } 10239 return SQLITE_NOMEM 10240 __1: 10241 ; 10242 rc = SQLITE_NOMEM 10243 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 10244 (*amatch_vtab)(unsafe.Pointer(pNew)).Fdb = db 10245 (*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zModule)) 10246 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName == uintptr(0)) { 10247 goto __2 10248 } 10249 goto amatchConnectError 10250 __2: 10251 ; 10252 (*amatch_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zDb)) 10253 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 10254 goto __3 10255 } 10256 goto amatchConnectError 10257 __3: 10258 ; 10259 (*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 10260 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 10261 goto __4 10262 } 10263 goto amatchConnectError 10264 __4: 10265 ; 10266 i = 3 10267 __5: 10268 if !(i < argc) { 10269 goto __7 10270 } 10271 zVal = amatchValueOfKey(tls, ts+3468, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10272 if !(zVal != 0) { 10273 goto __8 10274 } 10275 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab) 10276 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab = amatchDequote(tls, zVal) 10277 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab == uintptr(0)) { 10278 goto __9 10279 } 10280 goto amatchConnectError 10281 __9: 10282 ; 10283 goto __6 10284 __8: 10285 ; 10286 zVal = amatchValueOfKey(tls, ts+3485, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10287 if !(zVal != 0) { 10288 goto __10 10289 } 10290 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord) 10291 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord = amatchDequote(tls, zVal) 10292 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord == uintptr(0)) { 10293 goto __11 10294 } 10295 goto amatchConnectError 10296 __11: 10297 ; 10298 goto __6 10299 __10: 10300 ; 10301 zVal = amatchValueOfKey(tls, ts+3501, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10302 if !(zVal != 0) { 10303 goto __12 10304 } 10305 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang) 10306 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang = amatchDequote(tls, zVal) 10307 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang == uintptr(0)) { 10308 goto __13 10309 } 10310 goto amatchConnectError 10311 __13: 10312 ; 10313 goto __6 10314 __12: 10315 ; 10316 zVal = amatchValueOfKey(tls, ts+3521, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10317 if !(zVal != 0) { 10318 goto __14 10319 } 10320 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab) 10321 (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab = amatchDequote(tls, zVal) 10322 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10323 goto __15 10324 } 10325 goto amatchConnectError 10326 __15: 10327 ; 10328 goto __6 10329 __14: 10330 ; 10331 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 10332 amatchFree(tls, pNew) 10333 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10334 return SQLITE_ERROR 10335 goto __6 10336 __6: 10337 i++ 10338 goto __5 10339 goto __7 10340 __7: 10341 ; 10342 rc = SQLITE_OK 10343 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10344 goto __16 10345 } 10346 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3565, 0) 10347 rc = SQLITE_ERROR 10348 goto __17 10349 __16: 10350 rc = amatchLoadRules(tls, db, pNew, pzErr) 10351 __17: 10352 ; 10353 if !(rc == SQLITE_OK) { 10354 goto __18 10355 } 10356 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 10357 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 10358 ts+3599) 10359 __18: 10360 ; 10361 if !(rc != SQLITE_OK) { 10362 goto __19 10363 } 10364 amatchFree(tls, pNew) 10365 __19: 10366 ; 10367 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 10368 return rc 10369 10370 amatchConnectError: 10371 amatchFree(tls, pNew) 10372 return rc 10373 } 10374 10375 func amatchOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 10376 var p uintptr = pVTab 10377 var pCur uintptr 10378 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_cursor{}))) 10379 if pCur == uintptr(0) { 10380 return SQLITE_NOMEM 10381 } 10382 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(amatch_cursor{}))) 10383 (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab = p 10384 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 10385 (*amatch_vtab)(unsafe.Pointer(p)).FnCursor++ 10386 return SQLITE_OK 10387 } 10388 10389 func amatchClearCursor(tls *libc.TLS, pCur uintptr) { 10390 var pWord uintptr 10391 var pNextWord uintptr 10392 for pWord = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords; pWord != 0; pWord = pNextWord { 10393 pNextWord = (*amatch_word)(unsafe.Pointer(pWord)).FpNext 10394 sqlite3.Xsqlite3_free(tls, pWord) 10395 } 10396 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = uintptr(0) 10397 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput) 10398 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = uintptr(0) 10399 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10400 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = uintptr(0) 10401 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 10402 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost = uintptr(0) 10403 (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord = uintptr(0) 10404 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 10405 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = 1000000 10406 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = 0 10407 (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord = 0 10408 } 10409 10410 func amatchClose(tls *libc.TLS, cur uintptr) int32 { 10411 var pCur uintptr = cur 10412 amatchClearCursor(tls, pCur) 10413 (*amatch_vtab)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 10414 sqlite3.Xsqlite3_free(tls, pCur) 10415 return SQLITE_OK 10416 } 10417 10418 func amatchEncodeInt(tls *libc.TLS, x int32, z uintptr) { 10419 *(*int8)(unsafe.Pointer(z)) = a[x>>18&0x3f] 10420 *(*int8)(unsafe.Pointer(z + 1)) = a[x>>12&0x3f] 10421 *(*int8)(unsafe.Pointer(z + 2)) = a[x>>6&0x3f] 10422 *(*int8)(unsafe.Pointer(z + 3)) = a[x&0x3f] 10423 } 10424 10425 var a = *(*[65]int8)(unsafe.Pointer(ts + 3666)) 10426 10427 func amatchWriteCost(tls *libc.TLS, pWord uintptr) { 10428 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, pWord+112) 10429 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FiSeq, pWord+112+uintptr(4)) 10430 *(*int8)(unsafe.Pointer(pWord + 112 + 8)) = int8(0) 10431 } 10432 10433 func amatchStrcpy(tls *libc.TLS, dest uintptr, src uintptr) { 10434 for int32(libc.AssignPtrInt8(libc.PostIncUintptr(&dest, 1), *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&src, 1))))) != 0 { 10435 } 10436 } 10437 10438 func amatchStrcat(tls *libc.TLS, dest uintptr, src uintptr) { 10439 for *(*int8)(unsafe.Pointer(dest)) != 0 { 10440 dest++ 10441 } 10442 amatchStrcpy(tls, dest, src) 10443 } 10444 10445 func amatchAddWord(tls *libc.TLS, pCur uintptr, rCost amatch_cost, nMatch int32, zWordBase uintptr, zWordTail uintptr) { 10446 bp := tls.Alloc(4) 10447 defer tls.Free(4) 10448 10449 var pWord uintptr 10450 var pNode uintptr 10451 var pOther uintptr 10452 _ = pOther 10453 var nBase int32 10454 var nTail int32 10455 10456 if rCost > (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit { 10457 return 10458 } 10459 nBase = int32(libc.Xstrlen(tls, zWordBase)) 10460 nTail = int32(libc.Xstrlen(tls, zWordTail)) 10461 if nBase+nTail+3 > (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf { 10462 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = nBase + nTail + 100 10463 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = sqlite3.Xsqlite3_realloc(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf) 10464 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf == uintptr(0) { 10465 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 10466 return 10467 } 10468 } 10469 amatchEncodeInt(tls, nMatch, bp) 10470 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, bp+uintptr(2), uint64(2)) 10471 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2), zWordBase, uint64(nBase)) 10472 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2)+uintptr(nBase), zWordTail, uint64(nTail+1)) 10473 pNode = amatchAvlSearch(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10474 if pNode != 0 { 10475 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 10476 if (*amatch_word)(unsafe.Pointer(pWord)).FrCost > rCost { 10477 amatchAvlRemove(tls, pCur+80, pWord+8) 10478 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 10479 amatchWriteCost(tls, pWord) 10480 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 10481 _ = pOther 10482 } 10483 return 10484 } 10485 pWord = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_word{}))+uint64(nBase)+uint64(nTail)-uint64(1)) 10486 if pWord == uintptr(0) { 10487 return 10488 } 10489 libc.Xmemset(tls, pWord, 0, uint64(unsafe.Sizeof(amatch_word{}))) 10490 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 10491 (*amatch_word)(unsafe.Pointer(pWord)).FiSeq = libc.PostIncInt32(&(*amatch_cursor)(unsafe.Pointer(pCur)).FnWord, 1) 10492 amatchWriteCost(tls, pWord) 10493 (*amatch_word)(unsafe.Pointer(pWord)).FnMatch = int16(nMatch) 10494 (*amatch_word)(unsafe.Pointer(pWord)).FpNext = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords 10495 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = pWord 10496 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FzKey = pWord + 112 10497 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FpWord = pWord 10498 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 10499 _ = pOther 10500 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FzKey = pWord + 124 10501 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FpWord = pWord 10502 amatchStrcpy(tls, pWord+124, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10503 pOther = amatchAvlInsert(tls, pCur+88, pWord+56) 10504 _ = pOther 10505 } 10506 10507 func amatchNext(tls *libc.TLS, cur uintptr) int32 { 10508 bp := tls.Alloc(80) 10509 defer tls.Free(80) 10510 10511 var pCur uintptr = cur 10512 var pWord uintptr = uintptr(0) 10513 var pNode uintptr 10514 var isMatch int32 = 0 10515 var p uintptr = (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab 10516 var nWord int32 10517 var rc int32 10518 var i int32 10519 var zW uintptr 10520 var pRule uintptr 10521 var zBuf uintptr = uintptr(0) 10522 var nBuf int8 = int8(0) 10523 10524 var nNextIn int32 10525 10526 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck == uintptr(0) { 10527 var zSql uintptr 10528 if (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang != 0 && *(*int8)(unsafe.Pointer((*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) != 0 { 10529 zSql = sqlite3.Xsqlite3_mprintf(tls, 10530 ts+3731, 10531 libc.VaList(bp, ts+3753, 10532 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 10533 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) 10534 } else { 10535 zSql = sqlite3.Xsqlite3_mprintf(tls, 10536 ts+3792, 10537 libc.VaList(bp+40, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 10538 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord)) 10539 } 10540 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*amatch_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, p+112, uintptr(0)) 10541 sqlite3.Xsqlite3_free(tls, zSql) 10542 if rc != 0 { 10543 return rc 10544 } 10545 } 10546 sqlite3.Xsqlite3_bind_int(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 2, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 10547 10548 for __ccgo := true; __ccgo; __ccgo = !(isMatch != 0) { 10549 pNode = amatchAvlFirst(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost) 10550 if pNode == uintptr(0) { 10551 pWord = uintptr(0) 10552 break 10553 } 10554 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 10555 amatchAvlRemove(tls, pCur+80, pWord+8) 10556 10557 nWord = int32(libc.Xstrlen(tls, pWord+124+uintptr(2))) 10558 if nWord+20 > int32(nBuf) { 10559 nBuf = int8(nWord + 100) 10560 zBuf = sqlite3.Xsqlite3_realloc(tls, zBuf, int32(nBuf)) 10561 if zBuf == uintptr(0) { 10562 return SQLITE_NOMEM 10563 } 10564 } 10565 amatchStrcpy(tls, zBuf, pWord+124+uintptr(2)) 10566 *(*int8)(unsafe.Pointer(bp + 64)) = int8(0) 10567 *(*int8)(unsafe.Pointer(bp + 72)) = *(*int8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch))) 10568 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 { 10569 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++ { 10570 *(*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))) 10571 } 10572 *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i))) = int8(0) 10573 nNextIn = i 10574 } else { 10575 nNextIn = 0 10576 } 10577 10578 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 && int32(*(*int8)(unsafe.Pointer(bp + 72))) != '*' { 10579 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10580 amatchStrcat(tls, zBuf, bp+72) 10581 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, nWord+nNextIn, uintptr(0)) 10582 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10583 if rc == SQLITE_ROW { 10584 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 10585 if libc.Xstrncmp(tls, zBuf, zW, uint64(nWord+nNextIn)) == 0 { 10586 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, zBuf, ts+584) 10587 } 10588 } 10589 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10590 } 10591 10592 for 1 != 0 { 10593 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 10594 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10595 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, -1, libc.UintptrFromInt32(-1)) 10596 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10597 if rc != SQLITE_ROW { 10598 break 10599 } 10600 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 10601 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 10602 if libc.Xstrncmp(tls, zW, zBuf, uint64(nWord)) != 0 { 10603 break 10604 } 10605 if int32(*(*int8)(unsafe.Pointer(bp + 72))) == '*' && int32(*(*int8)(unsafe.Pointer(bp + 72 + 1))) == 0 || 10606 int32(*(*int8)(unsafe.Pointer(bp + 72))) == 0 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord)))) == 0 { 10607 isMatch = 1 10608 *(*int8)(unsafe.Pointer(bp + 72)) = int8(0) 10609 nNextIn = 0 10610 break 10611 } 10612 *(*int8)(unsafe.Pointer(bp + 64)) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord))) 10613 for i = 1; i <= 4 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))))&0xc0 == 0x80; i++ { 10614 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))) 10615 } 10616 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = int8(0) 10617 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10618 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns > 0 { 10619 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrIns, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), 10620 zBuf, bp+64) 10621 } 10622 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub > 0 { 10623 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrSub, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 10624 zBuf, bp+64) 10625 } 10626 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns < 0 && (*amatch_vtab)(unsafe.Pointer(p)).FrSub < 0 { 10627 break 10628 } 10629 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i-1)))++ 10630 } 10631 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10632 10633 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel > 0 { 10634 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 10635 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrDel, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 10636 zBuf, ts+584) 10637 } 10638 10639 for pRule = (*amatch_vtab)(unsafe.Pointer(p)).FpRule; pRule != 0; pRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext { 10640 if (*amatch_rule)(unsafe.Pointer(pRule)).FiLang != (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang { 10641 continue 10642 } 10643 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 { 10644 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_rule)(unsafe.Pointer(pRule)).FrCost, 10645 int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+int32((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom), pWord+124+uintptr(2), pRule+26) 10646 } 10647 } 10648 } 10649 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = pWord 10650 sqlite3.Xsqlite3_free(tls, zBuf) 10651 return SQLITE_OK 10652 } 10653 10654 func amatchFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 10655 bp := tls.Alloc(8) 10656 defer tls.Free(8) 10657 10658 var pCur uintptr = pVtabCursor 10659 var zWord uintptr = ts + 3840 10660 var idx int32 10661 10662 amatchClearCursor(tls, pCur) 10663 idx = 0 10664 if idxNum&1 != 0 { 10665 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 10666 idx++ 10667 } 10668 if idxNum&2 != 0 { 10669 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 10670 idx++ 10671 } 10672 if idxNum&4 != 0 { 10673 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 10674 idx++ 10675 } 10676 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zWord)) 10677 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput == uintptr(0) { 10678 return SQLITE_NOMEM 10679 } 10680 amatchAddWord(tls, pCur, 0, 0, ts+584, ts+584) 10681 amatchNext(tls, pVtabCursor) 10682 10683 return SQLITE_OK 10684 } 10685 10686 func amatchColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 10687 var pCur uintptr = cur 10688 switch i { 10689 case AMATCH_COL_WORD: 10690 { 10691 sqlite3.Xsqlite3_result_text(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent+124+uintptr(2), -1, uintptr(0)) 10692 break 10693 10694 } 10695 case AMATCH_COL_DISTANCE: 10696 { 10697 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_word)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FrCost) 10698 break 10699 10700 } 10701 case AMATCH_COL_LANGUAGE: 10702 { 10703 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 10704 break 10705 10706 } 10707 case AMATCH_COL_NWORD: 10708 { 10709 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord) 10710 break 10711 10712 } 10713 default: 10714 { 10715 sqlite3.Xsqlite3_result_null(tls, ctx) 10716 break 10717 10718 } 10719 } 10720 return SQLITE_OK 10721 } 10722 10723 func amatchRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 10724 var pCur uintptr = cur 10725 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*amatch_cursor)(unsafe.Pointer(pCur)).FiRowid 10726 return SQLITE_OK 10727 } 10728 10729 func amatchEof(tls *libc.TLS, cur uintptr) int32 { 10730 var pCur uintptr = cur 10731 return libc.Bool32((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 10732 } 10733 10734 func amatchBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 10735 var iPlan int32 = 0 10736 var iDistTerm int32 = -1 10737 var iLangTerm int32 = -1 10738 var i int32 10739 var pConstraint uintptr 10740 10741 _ = tab 10742 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 10743 i = 0 10744 __1: 10745 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 10746 goto __3 10747 } 10748 { 10749 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 10750 goto __2 10751 } 10752 if iPlan&1 == 0 && 10753 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 10754 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 10755 iPlan = iPlan | 1 10756 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 10757 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 10758 } 10759 if iPlan&2 == 0 && 10760 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 10761 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 10762 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 10763 iPlan = iPlan | 2 10764 iDistTerm = i 10765 } 10766 if iPlan&4 == 0 && 10767 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 10768 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 10769 iPlan = iPlan | 4 10770 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 10771 iLangTerm = i 10772 } 10773 10774 } 10775 goto __2 10776 __2: 10777 i++ 10778 pConstraint += 12 10779 goto __1 10780 goto __3 10781 __3: 10782 ; 10783 if iPlan&2 != 0 { 10784 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 10785 } 10786 if iPlan&4 != 0 { 10787 var idx int32 = 1 10788 if iPlan&1 != 0 { 10789 idx++ 10790 } 10791 if iPlan&2 != 0 { 10792 idx++ 10793 } 10794 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = idx 10795 } 10796 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 10797 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 10798 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 10799 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 10800 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 10801 } 10802 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10000) 10803 10804 return SQLITE_OK 10805 } 10806 10807 func amatchUpdate(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 10808 bp := tls.Alloc(24) 10809 defer tls.Free(24) 10810 10811 var p uintptr = pVTab 10812 var zCmd uintptr 10813 _ = pRowid 10814 if argc == 1 { 10815 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3842, 10816 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 10817 return SQLITE_ERROR 10818 } 10819 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_NULL { 10820 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3872, 10821 libc.VaList(bp+8, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 10822 return SQLITE_ERROR 10823 } 10824 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) != SQLITE_NULL || 10825 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) != SQLITE_NULL || 10826 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) != SQLITE_NULL { 10827 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 10828 ts+3900, libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 10829 return SQLITE_ERROR 10830 } 10831 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 10832 if zCmd == uintptr(0) { 10833 return SQLITE_OK 10834 } 10835 10836 return SQLITE_OK 10837 } 10838 10839 var amatchModule = sqlite3_module{ 10840 FxCreate: 0, 10841 FxConnect: 0, 10842 FxBestIndex: 0, 10843 FxDisconnect: 0, 10844 FxDestroy: 0, 10845 FxOpen: 0, 10846 FxClose: 0, 10847 FxFilter: 0, 10848 FxNext: 0, 10849 FxEof: 0, 10850 FxColumn: 0, 10851 FxRowid: 0, 10852 FxUpdate: 0, 10853 } 10854 10855 func sqlite3_amatch_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 10856 var rc int32 = SQLITE_OK 10857 _ = pApi 10858 10859 _ = pzErrMsg 10860 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3949, uintptr(unsafe.Pointer(&amatchModule)), uintptr(0)) 10861 return rc 10862 } 10863 10864 var azType = [4]uintptr{ts + 3967, ts + 3973, ts + 2562, ts + 3979} 10865 10866 type carray_bind1 = struct { 10867 FaData uintptr 10868 FnData int32 10869 FmFlags int32 10870 FxDel uintptr 10871 } 10872 10873 type carray_bind = carray_bind1 10874 10875 type carray_cursor1 = struct { 10876 Fbase sqlite3_vtab_cursor 10877 FiRowid sqlite3_int64 10878 FpPtr uintptr 10879 FiCnt sqlite3_int64 10880 FeType uint8 10881 F__ccgo_pad1 [7]byte 10882 } 10883 10884 type carray_cursor = carray_cursor1 10885 10886 func carrayConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 10887 var pNew uintptr 10888 var rc int32 10889 10890 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 10891 ts+3985) 10892 if rc == SQLITE_OK { 10893 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 10894 if pNew == uintptr(0) { 10895 return SQLITE_NOMEM 10896 } 10897 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 10898 } 10899 return rc 10900 } 10901 10902 func carrayDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 10903 sqlite3.Xsqlite3_free(tls, pVtab) 10904 return SQLITE_OK 10905 } 10906 10907 func carrayOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 10908 var pCur uintptr 10909 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(carray_cursor{}))) 10910 if pCur == uintptr(0) { 10911 return SQLITE_NOMEM 10912 } 10913 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(carray_cursor{}))) 10914 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 10915 return SQLITE_OK 10916 } 10917 10918 func carrayClose(tls *libc.TLS, cur uintptr) int32 { 10919 sqlite3.Xsqlite3_free(tls, cur) 10920 return SQLITE_OK 10921 } 10922 10923 func carrayNext(tls *libc.TLS, cur uintptr) int32 { 10924 var pCur uintptr = cur 10925 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid++ 10926 return SQLITE_OK 10927 } 10928 10929 func carrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 10930 var pCur uintptr = cur 10931 var x sqlite3_int64 = int64(0) 10932 switch i { 10933 case CARRAY_COLUMN_POINTER: 10934 return SQLITE_OK 10935 case CARRAY_COLUMN_COUNT: 10936 x = (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt 10937 break 10938 case CARRAY_COLUMN_CTYPE: 10939 { 10940 sqlite3.Xsqlite3_result_text(tls, ctx, azType[(*carray_cursor)(unsafe.Pointer(pCur)).FeType], -1, uintptr(0)) 10941 return SQLITE_OK 10942 10943 } 10944 default: 10945 { 10946 switch int32((*carray_cursor)(unsafe.Pointer(pCur)).FeType) { 10947 case CARRAY_INT32: 10948 { 10949 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 10950 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*4))) 10951 return SQLITE_OK 10952 10953 } 10954 case CARRAY_INT64: 10955 { 10956 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 10957 sqlite3.Xsqlite3_result_int64(tls, ctx, *(*sqlite3_int64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 10958 return SQLITE_OK 10959 10960 } 10961 case CARRAY_DOUBLE: 10962 { 10963 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 10964 sqlite3.Xsqlite3_result_double(tls, ctx, *(*float64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 10965 return SQLITE_OK 10966 10967 } 10968 case CARRAY_TEXT: 10969 { 10970 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 10971 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8)), -1, libc.UintptrFromInt32(-1)) 10972 return SQLITE_OK 10973 10974 } 10975 } 10976 10977 } 10978 } 10979 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 10980 return SQLITE_OK 10981 } 10982 10983 func carrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 10984 var pCur uintptr = cur 10985 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid 10986 return SQLITE_OK 10987 } 10988 10989 func carrayEof(tls *libc.TLS, cur uintptr) int32 { 10990 var pCur uintptr = cur 10991 return libc.Bool32((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid > (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt) 10992 } 10993 10994 func carrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 10995 bp := tls.Alloc(8) 10996 defer tls.Free(8) 10997 10998 var pCur uintptr = pVtabCursor 10999 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = uintptr(0) 11000 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = int64(0) 11001 switch idxNum { 11002 case 1: 11003 { 11004 var pBind uintptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4048) 11005 if pBind == uintptr(0) { 11006 break 11007 } 11008 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = (*carray_bind)(unsafe.Pointer(pBind)).FaData 11009 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = sqlite3_int64((*carray_bind)(unsafe.Pointer(pBind)).FnData) 11010 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8((*carray_bind)(unsafe.Pointer(pBind)).FmFlags & 0x03) 11011 break 11012 11013 } 11014 case 2: 11015 fallthrough 11016 case 3: 11017 { 11018 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4060) 11019 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = func() int64 { 11020 if (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr != 0 { 11021 return sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 11022 } 11023 return int64(0) 11024 }() 11025 if idxNum < 3 { 11026 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8(CARRAY_INT32) 11027 } else { 11028 var i uint8 11029 var zType uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 11030 for i = uint8(0); uint64(i) < uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 11031 if sqlite3.Xsqlite3_stricmp(tls, zType, azType[i]) == 0 { 11032 break 11033 } 11034 } 11035 if uint64(i) >= uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))) { 11036 (*sqlite3_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11037 ts+4067, libc.VaList(bp, zType)) 11038 return SQLITE_ERROR 11039 } else { 11040 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = i 11041 } 11042 } 11043 break 11044 11045 } 11046 } 11047 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 11048 return SQLITE_OK 11049 } 11050 11051 func carrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 11052 var i int32 11053 var ptrIdx int32 = -1 11054 var cntIdx int32 = -1 11055 var ctypeIdx int32 = -1 11056 11057 var pConstraint uintptr 11058 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 11059 i = 0 11060 __1: 11061 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 11062 goto __3 11063 } 11064 { 11065 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 11066 goto __2 11067 } 11068 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 11069 goto __2 11070 } 11071 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 11072 case CARRAY_COLUMN_POINTER: 11073 ptrIdx = i 11074 break 11075 case CARRAY_COLUMN_COUNT: 11076 cntIdx = i 11077 break 11078 case CARRAY_COLUMN_CTYPE: 11079 ctypeIdx = i 11080 break 11081 } 11082 11083 } 11084 goto __2 11085 __2: 11086 i++ 11087 pConstraint += 12 11088 goto __1 11089 goto __3 11090 __3: 11091 ; 11092 if ptrIdx >= 0 { 11093 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).FargvIndex = 1 11094 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).Fomit = uint8(1) 11095 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 11096 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(100) 11097 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 11098 if cntIdx >= 0 { 11099 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).FargvIndex = 2 11100 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).Fomit = uint8(1) 11101 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 11102 if ctypeIdx >= 0 { 11103 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).FargvIndex = 3 11104 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).Fomit = uint8(1) 11105 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 3 11106 } 11107 } 11108 } else { 11109 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2147483647) 11110 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 11111 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 11112 } 11113 return SQLITE_OK 11114 } 11115 11116 var carrayModule = sqlite3_module{ 11117 FxConnect: 0, 11118 FxBestIndex: 0, 11119 FxDisconnect: 0, 11120 FxOpen: 0, 11121 FxClose: 0, 11122 FxFilter: 0, 11123 FxNext: 0, 11124 FxEof: 0, 11125 FxColumn: 0, 11126 FxRowid: 0, 11127 } 11128 11129 func carrayBindDel(tls *libc.TLS, pPtr uintptr) { 11130 var p uintptr = pPtr 11131 if (*carray_bind)(unsafe.Pointer(p)).FxDel != uintptr(0) { 11132 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*carray_bind)(unsafe.Pointer(p)).FxDel})).f(tls, (*carray_bind)(unsafe.Pointer(p)).FaData) 11133 } 11134 sqlite3.Xsqlite3_free(tls, p) 11135 } 11136 11137 func sqlite3_carray_bind(tls *libc.TLS, pStmt uintptr, idx int32, aData uintptr, nData int32, mFlags int32, xDestroy uintptr) int32 { 11138 var pNew uintptr 11139 var i int32 11140 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(carray_bind{}))) 11141 if pNew == uintptr(0) { 11142 if xDestroy != uintptr(0) && xDestroy != libc.UintptrFromInt32(-1) { 11143 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, aData) 11144 } 11145 return SQLITE_NOMEM 11146 } 11147 (*carray_bind)(unsafe.Pointer(pNew)).FnData = nData 11148 (*carray_bind)(unsafe.Pointer(pNew)).FmFlags = mFlags 11149 if xDestroy == libc.UintptrFromInt32(-1) { 11150 var sz sqlite3_int64 = sqlite3_int64(nData) 11151 switch mFlags & 0x03 { 11152 case CARRAY_INT32: 11153 sz = sz * int64(4) 11154 break 11155 fallthrough 11156 case CARRAY_INT64: 11157 sz = sz * int64(8) 11158 break 11159 fallthrough 11160 case CARRAY_DOUBLE: 11161 sz = sz * int64(8) 11162 break 11163 fallthrough 11164 case CARRAY_TEXT: 11165 sz = int64(uint64(sz) * uint64(unsafe.Sizeof(uintptr(0)))) 11166 break 11167 } 11168 if mFlags&0x03 == CARRAY_TEXT { 11169 for i = 0; i < nData; i++ { 11170 var z uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 11171 if z != 0 { 11172 sz = sqlite3_int64(uint64(sz) + (libc.Xstrlen(tls, z) + uint64(1))) 11173 } 11174 } 11175 } 11176 (*carray_bind)(unsafe.Pointer(pNew)).FaData = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 11177 if (*carray_bind)(unsafe.Pointer(pNew)).FaData == uintptr(0) { 11178 sqlite3.Xsqlite3_free(tls, pNew) 11179 return SQLITE_NOMEM 11180 } 11181 if mFlags&0x03 == CARRAY_TEXT { 11182 var az uintptr = (*carray_bind)(unsafe.Pointer(pNew)).FaData 11183 var z uintptr = az + uintptr(nData)*8 11184 for i = 0; i < nData; i++ { 11185 var zData uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 11186 var n sqlite3_int64 11187 if zData == uintptr(0) { 11188 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = uintptr(0) 11189 continue 11190 } 11191 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = z 11192 n = sqlite3_int64(libc.Xstrlen(tls, zData)) 11193 libc.Xmemcpy(tls, z, zData, uint64(n+int64(1))) 11194 z += uintptr(n + int64(1)) 11195 } 11196 } else { 11197 libc.Xmemcpy(tls, (*carray_bind)(unsafe.Pointer(pNew)).FaData, aData, uint64(sz)) 11198 } 11199 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 11200 } else { 11201 (*carray_bind)(unsafe.Pointer(pNew)).FaData = aData 11202 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = xDestroy 11203 } 11204 return sqlite3.Xsqlite3_bind_pointer(tls, pStmt, idx, pNew, ts+4048, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{carrayBindDel}))) 11205 } 11206 11207 func inttoptrFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11208 bp := tls.Alloc(20) 11209 defer tls.Free(20) 11210 11211 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 11212 if uint64(unsafe.Sizeof(sqlite3_int64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 11213 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 11214 } else { 11215 *(*int32)(unsafe.Pointer(bp + 16)) = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)) & int64(0xffffffff)) 11216 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 11217 } 11218 sqlite3.Xsqlite3_result_pointer(tls, context, *(*uintptr)(unsafe.Pointer(bp)), ts+4060, uintptr(0)) 11219 } 11220 11221 func sqlite3_carray_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11222 var rc int32 = SQLITE_OK 11223 _ = pApi 11224 11225 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4060, uintptr(unsafe.Pointer(&carrayModule)), uintptr(0)) 11226 if rc == SQLITE_OK { 11227 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4088, 1, SQLITE_UTF8, uintptr(0), 11228 *(*uintptr)(unsafe.Pointer(&struct { 11229 f func(*libc.TLS, uintptr, int32, uintptr) 11230 }{inttoptrFunc})), uintptr(0), uintptr(0)) 11231 } 11232 return rc 11233 } 11234 11235 type CksmVfs = sqlite3_vfs1 11236 type CksmFile1 = struct { 11237 Fbase sqlite3_file 11238 FzFName uintptr 11239 FcomputeCksm int8 11240 FverifyCksm int8 11241 FisWal int8 11242 FinCkpt int8 11243 F__ccgo_pad1 [4]byte 11244 FpPartner uintptr 11245 } 11246 11247 type CksmFile = CksmFile1 11248 11249 type u8 = uint8 11250 11251 var cksm_vfs = sqlite3_vfs{ 11252 FiVersion: 3, 11253 FmxPathname: 1024, 11254 FzName: ts + 4097, 11255 FxOpen: 0, 11256 FxDelete: 0, 11257 FxAccess: 0, 11258 FxFullPathname: 0, 11259 FxDlOpen: 0, 11260 FxDlError: 0, 11261 FxDlSym: 0, 11262 FxDlClose: 0, 11263 FxRandomness: 0, 11264 FxSleep: 0, 11265 FxCurrentTime: 0, 11266 FxGetLastError: 0, 11267 FxCurrentTimeInt64: 0, 11268 FxSetSystemCall: 0, 11269 FxGetSystemCall: 0, 11270 FxNextSystemCall: 0, 11271 } 11272 11273 var cksm_io_methods = sqlite3_io_methods{ 11274 FiVersion: 3, 11275 FxClose: 0, 11276 FxRead: 0, 11277 FxWrite: 0, 11278 FxTruncate: 0, 11279 FxSync: 0, 11280 FxFileSize: 0, 11281 FxLock: 0, 11282 FxUnlock: 0, 11283 FxCheckReservedLock: 0, 11284 FxFileControl: 0, 11285 FxSectorSize: 0, 11286 FxDeviceCharacteristics: 0, 11287 FxShmMap: 0, 11288 FxShmLock: 0, 11289 FxShmBarrier: 0, 11290 FxShmUnmap: 0, 11291 FxFetch: 0, 11292 FxUnfetch: 0, 11293 } 11294 11295 func cksmCompute(tls *libc.TLS, a uintptr, nByte int32, aOut uintptr) { 11296 bp := tls.Alloc(12) 11297 defer tls.Free(12) 11298 11299 *(*u32)(unsafe.Pointer(bp + 4)) = u32(0) 11300 *(*u32)(unsafe.Pointer(bp + 8)) = u32(0) 11301 var aData uintptr = a 11302 var aEnd uintptr = a + uintptr(nByte) 11303 *(*u32)(unsafe.Pointer(bp)) = u32(1) 11304 11305 if 1 == int32(*(*u8)(unsafe.Pointer(bp))) { 11306 for __ccgo := true; __ccgo; __ccgo = aData < aEnd { 11307 *(*u32)(unsafe.Pointer(bp + 4)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 8)) 11308 *(*u32)(unsafe.Pointer(bp + 8)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 4)) 11309 } 11310 } else { 11311 for __ccgo1 := true; __ccgo1; __ccgo1 = aData < aEnd { 11312 *(*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)) 11313 *(*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)) 11314 aData += 4 * uintptr(2) 11315 } 11316 *(*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 11317 *(*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 11318 } 11319 libc.Xmemcpy(tls, aOut, bp+4, uint64(4)) 11320 libc.Xmemcpy(tls, aOut+uintptr(4), bp+8, uint64(4)) 11321 } 11322 11323 func cksmVerifyFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11324 bp := tls.Alloc(8) 11325 defer tls.Free(8) 11326 11327 var nByte int32 11328 var data uintptr 11329 11330 data = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 11331 if data == uintptr(0) { 11332 return 11333 } 11334 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_BLOB { 11335 return 11336 } 11337 nByte = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 11338 if nByte < 512 || nByte > 65536 || nByte&(nByte-1) != 0 { 11339 return 11340 } 11341 cksmCompute(tls, data, nByte-8, bp) 11342 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(libc.Xmemcmp(tls, data+uintptr(nByte)-uintptr(8), bp, uint64(8)) == 0)) 11343 } 11344 11345 func cksmClose(tls *libc.TLS, pFile uintptr) int32 { 11346 var p uintptr = pFile 11347 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11348 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = uintptr(0) 11349 (*CksmFile)(unsafe.Pointer(p)).FpPartner = uintptr(0) 11350 } 11351 pFile = pFile + uintptr(1)*32 11352 return (*struct { 11353 f func(*libc.TLS, uintptr) int32 11354 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 11355 } 11356 11357 func cksmSetFlags(tls *libc.TLS, p uintptr, hasCorrectReserveSize int32) { 11358 if hasCorrectReserveSize != int32((*CksmFile)(unsafe.Pointer(p)).FcomputeCksm) { 11359 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = libc.AssignPtrInt8(p+17, int8(hasCorrectReserveSize)) 11360 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11361 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = int8(hasCorrectReserveSize) 11362 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm = int8(hasCorrectReserveSize) 11363 } 11364 } 11365 } 11366 11367 func cksmRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 11368 bp := tls.Alloc(24) 11369 defer tls.Free(24) 11370 11371 var rc int32 11372 var p uintptr = pFile 11373 pFile = pFile + uintptr(1)*32 11374 rc = (*struct { 11375 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 11376 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, zBuf, iAmt, iOfst) 11377 if rc == SQLITE_OK { 11378 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 11379 var d uintptr = zBuf 11380 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 11381 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 11382 } 11383 11384 if iAmt >= 512 && 11385 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm != 0 && 11386 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 11387 cksmCompute(tls, zBuf, iAmt-8, bp+16) 11388 if libc.Xmemcmp(tls, zBuf+uintptr(iAmt)-uintptr(8), bp+16, uint64(8)) != 0 { 11389 sqlite3.Xsqlite3_log(tls, SQLITE_IOERR|int32(32)<<8, 11390 ts+4109, 11391 libc.VaList(bp, iOfst, (*CksmFile)(unsafe.Pointer(p)).FzFName)) 11392 rc = SQLITE_IOERR | int32(32)<<8 11393 } 11394 } 11395 } 11396 return rc 11397 } 11398 11399 func cksmWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 11400 var p uintptr = pFile 11401 pFile = pFile + uintptr(1)*32 11402 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 11403 var d uintptr = zBuf 11404 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 11405 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 11406 } 11407 11408 if iAmt >= 512 && 11409 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && 11410 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 11411 cksmCompute(tls, zBuf, iAmt-8, zBuf+uintptr(iAmt)-uintptr(8)) 11412 } 11413 return (*struct { 11414 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 11415 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, zBuf, iAmt, iOfst) 11416 } 11417 11418 func cksmTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 11419 pFile = pFile + uintptr(1)*32 11420 return (*struct { 11421 f func(*libc.TLS, uintptr, sqlite3_int64) int32 11422 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxTruncate})).f(tls, pFile, size) 11423 } 11424 11425 func cksmSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 11426 pFile = pFile + uintptr(1)*32 11427 return (*struct { 11428 f func(*libc.TLS, uintptr, int32) int32 11429 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 11430 } 11431 11432 func cksmFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 11433 var p uintptr = pFile 11434 pFile = p + uintptr(1)*32 11435 return (*struct { 11436 f func(*libc.TLS, uintptr, uintptr) int32 11437 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileSize})).f(tls, pFile, pSize) 11438 } 11439 11440 func cksmLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 11441 pFile = pFile + uintptr(1)*32 11442 return (*struct { 11443 f func(*libc.TLS, uintptr, int32) int32 11444 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 11445 } 11446 11447 func cksmUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 11448 pFile = pFile + uintptr(1)*32 11449 return (*struct { 11450 f func(*libc.TLS, uintptr, int32) int32 11451 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 11452 } 11453 11454 func cksmCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 11455 pFile = pFile + uintptr(1)*32 11456 return (*struct { 11457 f func(*libc.TLS, uintptr, uintptr) int32 11458 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 11459 } 11460 11461 func cksmFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 11462 bp := tls.Alloc(16) 11463 defer tls.Free(16) 11464 11465 var rc int32 11466 var p uintptr = pFile 11467 pFile = pFile + uintptr(1)*32 11468 if op == SQLITE_FCNTL_PRAGMA { 11469 var azArg uintptr = pArg 11470 11471 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4144) == 0 { 11472 var zArg uintptr = *(*uintptr)(unsafe.Pointer(azArg + 2*8)) 11473 if zArg != uintptr(0) { 11474 if int32(*(*int8)(unsafe.Pointer(zArg))) >= '1' && int32(*(*int8)(unsafe.Pointer(zArg))) <= '9' || 11475 sqlite3.Xsqlite3_strlike(tls, ts+4166, zArg, uint32(0)) == 0 || 11476 sqlite3.Xsqlite3_stricmp(tls, ts+4174, zArg) == 0 || 11477 sqlite3.Xsqlite3_stricmp(tls, ts+4178, zArg) == 0 { 11478 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm 11479 } else { 11480 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = int8(0) 11481 } 11482 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11483 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FverifyCksm 11484 } 11485 } 11486 *(*uintptr)(unsafe.Pointer(azArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, int32((*CksmFile)(unsafe.Pointer(p)).FverifyCksm))) 11487 return SQLITE_OK 11488 } else if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && *(*uintptr)(unsafe.Pointer(azArg + 2*8)) != uintptr(0) && 11489 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4181) == 0 { 11490 return SQLITE_OK 11491 } 11492 } else if op == SQLITE_FCNTL_CKPT_START || op == SQLITE_FCNTL_CKPT_DONE { 11493 (*CksmFile)(unsafe.Pointer(p)).FinCkpt = int8(libc.Bool32(op == SQLITE_FCNTL_CKPT_START)) 11494 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11495 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FinCkpt = (*CksmFile)(unsafe.Pointer(p)).FinCkpt 11496 } 11497 } else if op == SQLITE_FCNTL_CKSM_FILE { 11498 var ppFile uintptr = pArg 11499 *(*uintptr)(unsafe.Pointer(ppFile)) = p 11500 return SQLITE_OK 11501 } 11502 rc = (*struct { 11503 f func(*libc.TLS, uintptr, int32, uintptr) int32 11504 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 11505 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 11506 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+4191, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(pArg)))) 11507 } 11508 return rc 11509 } 11510 11511 func cksmSectorSize(tls *libc.TLS, pFile uintptr) int32 { 11512 pFile = pFile + uintptr(1)*32 11513 return (*struct { 11514 f func(*libc.TLS, uintptr) int32 11515 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 11516 } 11517 11518 func cksmDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 11519 pFile = pFile + uintptr(1)*32 11520 return (*struct { 11521 f func(*libc.TLS, uintptr) int32 11522 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 11523 } 11524 11525 func cksmShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 11526 pFile = pFile + uintptr(1)*32 11527 return (*struct { 11528 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 11529 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 11530 } 11531 11532 func cksmShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 11533 pFile = pFile + uintptr(1)*32 11534 return (*struct { 11535 f func(*libc.TLS, uintptr, int32, int32, int32) int32 11536 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 11537 } 11538 11539 func cksmShmBarrier(tls *libc.TLS, pFile uintptr) { 11540 pFile = pFile + uintptr(1)*32 11541 (*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) 11542 } 11543 11544 func cksmShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 11545 pFile = pFile + uintptr(1)*32 11546 return (*struct { 11547 f func(*libc.TLS, uintptr, int32) int32 11548 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 11549 } 11550 11551 func cksmFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 11552 var p uintptr = pFile 11553 if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 { 11554 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 11555 return SQLITE_OK 11556 } 11557 pFile = pFile + uintptr(1)*32 11558 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 { 11559 return (*struct { 11560 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 11561 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch})).f(tls, pFile, iOfst, iAmt, pp) 11562 } 11563 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 11564 return SQLITE_OK 11565 } 11566 11567 func cksmUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 11568 pFile = pFile + uintptr(1)*32 11569 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 { 11570 return (*struct { 11571 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 11572 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch})).f(tls, pFile, iOfst, pPage) 11573 } 11574 return SQLITE_OK 11575 } 11576 11577 func cksmOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 11578 bp := tls.Alloc(8) 11579 defer tls.Free(8) 11580 11581 var p uintptr 11582 var pSubFile uintptr 11583 var pSubVfs uintptr 11584 var rc int32 11585 11586 pSubVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 11587 if !(flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0) { 11588 goto __1 11589 } 11590 return (*struct { 11591 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 11592 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pFile, flags, pOutFlags) 11593 __1: 11594 ; 11595 p = pFile 11596 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CksmFile{}))) 11597 pSubFile = pFile + uintptr(1)*32 11598 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&cksm_io_methods)) 11599 rc = (*struct { 11600 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 11601 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pSubFile, flags, pOutFlags) 11602 if !(rc != 0) { 11603 goto __2 11604 } 11605 goto cksm_open_done 11606 __2: 11607 ; 11608 if !(flags&SQLITE_OPEN_WAL != 0) { 11609 goto __3 11610 } 11611 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_database_file_object(tls, zName) 11612 rc = (*struct { 11613 f func(*libc.TLS, uintptr, int32, uintptr) int32 11614 })(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) 11615 11616 (*CksmFile)(unsafe.Pointer(p)).FpPartner = *(*uintptr)(unsafe.Pointer(bp)) 11617 11618 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = p 11619 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(1) 11620 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm 11621 goto __4 11622 __3: 11623 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(0) 11624 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = int8(0) 11625 __4: 11626 ; 11627 (*CksmFile)(unsafe.Pointer(p)).FzFName = zName 11628 cksm_open_done: 11629 if !(rc != 0) { 11630 goto __5 11631 } 11632 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 11633 __5: 11634 ; 11635 return rc 11636 } 11637 11638 func cksmDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 11639 return (*struct { 11640 f func(*libc.TLS, uintptr, uintptr, int32) int32 11641 })(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) 11642 } 11643 11644 func cksmAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 11645 return (*struct { 11646 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 11647 })(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) 11648 } 11649 11650 func cksmFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 11651 return (*struct { 11652 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 11653 })(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) 11654 } 11655 11656 func cksmDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 11657 return (*struct { 11658 f func(*libc.TLS, uintptr, uintptr) uintptr 11659 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 11660 } 11661 11662 func cksmDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 11663 (*struct { 11664 f func(*libc.TLS, uintptr, int32, uintptr) 11665 })(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) 11666 } 11667 11668 func cksmDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 11669 return (*struct { 11670 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 11671 })(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) 11672 } 11673 11674 func cksmDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 11675 (*struct { 11676 f func(*libc.TLS, uintptr, uintptr) 11677 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 11678 } 11679 11680 func cksmRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 11681 return (*struct { 11682 f func(*libc.TLS, uintptr, int32, uintptr) int32 11683 })(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) 11684 } 11685 11686 func cksmSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 11687 return (*struct { 11688 f func(*libc.TLS, uintptr, int32) int32 11689 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 11690 } 11691 11692 func cksmCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 11693 return (*struct { 11694 f func(*libc.TLS, uintptr, uintptr) int32 11695 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 11696 } 11697 11698 func cksmGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 11699 return (*struct { 11700 f func(*libc.TLS, uintptr, int32, uintptr) int32 11701 })(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) 11702 } 11703 11704 func cksmCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 11705 bp := tls.Alloc(8) 11706 defer tls.Free(8) 11707 11708 var pOrig uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 11709 var rc int32 11710 11711 if (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64 != 0 { 11712 rc = (*struct { 11713 f func(*libc.TLS, uintptr, uintptr) int32 11714 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64})).f(tls, pOrig, p) 11715 } else { 11716 rc = (*struct { 11717 f func(*libc.TLS, uintptr, uintptr) int32 11718 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTime})).f(tls, pOrig, bp) 11719 *(*sqlite3_int64)(unsafe.Pointer(p)) = libc.Int64FromFloat64(*(*float64)(unsafe.Pointer(bp)) * 86400000.0) 11720 } 11721 return rc 11722 } 11723 11724 func cksmSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 11725 return (*struct { 11726 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 11727 })(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) 11728 } 11729 11730 func cksmGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 11731 return (*struct { 11732 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 11733 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 11734 } 11735 11736 func cksmNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 11737 return (*struct { 11738 f func(*libc.TLS, uintptr, uintptr) uintptr 11739 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 11740 } 11741 11742 func cksmRegisterFunc(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11743 var rc int32 11744 if db == uintptr(0) { 11745 return SQLITE_OK 11746 } 11747 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4199, 1, 11748 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 11749 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 11750 f func(*libc.TLS, uintptr, int32, uintptr) 11751 }{cksmVerifyFunc})), uintptr(0), uintptr(0)) 11752 return rc 11753 } 11754 11755 func cksmRegisterVfs(tls *libc.TLS) int32 { 11756 var rc int32 = SQLITE_OK 11757 var pOrig uintptr 11758 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != uintptr(0) { 11759 return SQLITE_OK 11760 } 11761 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 11762 if pOrig == uintptr(0) { 11763 return SQLITE_ERROR 11764 } 11765 cksm_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 11766 cksm_vfs.FpAppData = pOrig 11767 cksm_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(CksmFile{}))) 11768 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&cksm_vfs)), 1) 11769 if rc == SQLITE_OK { 11770 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 11771 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 11772 }{cksmRegisterFunc}))) 11773 } 11774 return rc 11775 } 11776 11777 func sqlite3_register_cksumvfs(tls *libc.TLS, NotUsed uintptr) int32 { 11778 _ = NotUsed 11779 return cksmRegisterVfs(tls) 11780 } 11781 11782 func sqlite3_unregister_cksumvfs(tls *libc.TLS) int32 { 11783 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != 0 { 11784 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&cksm_vfs))) 11785 sqlite3.Xsqlite3_cancel_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 11786 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 11787 }{cksmRegisterFunc}))) 11788 } 11789 return SQLITE_OK 11790 } 11791 11792 type closure_vtab1 = struct { 11793 Fbase sqlite3_vtab 11794 FzDb uintptr 11795 FzSelf uintptr 11796 FzTableName uintptr 11797 FzIdColumn uintptr 11798 FzParentColumn uintptr 11799 Fdb uintptr 11800 FnCursor int32 11801 F__ccgo_pad1 [4]byte 11802 } 11803 11804 type closure_vtab = closure_vtab1 11805 type closure_cursor1 = struct { 11806 Fbase sqlite3_vtab_cursor 11807 FpVtab uintptr 11808 FzTableName uintptr 11809 FzIdColumn uintptr 11810 FzParentColumn uintptr 11811 FpCurrent uintptr 11812 FpClosure uintptr 11813 } 11814 11815 type closure_cursor = closure_cursor1 11816 type closure_queue1 = struct { 11817 FpFirst uintptr 11818 FpLast uintptr 11819 } 11820 11821 type closure_queue = closure_queue1 11822 type closure_avl1 = struct { 11823 Fid sqlite3_int64 11824 FiGeneration int32 11825 F__ccgo_pad1 [4]byte 11826 FpList uintptr 11827 FpBefore uintptr 11828 FpAfter uintptr 11829 FpUp uintptr 11830 Fheight int16 11831 Fimbalance int16 11832 F__ccgo_pad2 [4]byte 11833 } 11834 11835 type closure_avl = closure_avl1 11836 11837 func closureAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 11838 var hBefore int16 11839 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 11840 hBefore = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 11841 } else { 11842 hBefore = int16(0) 11843 } 11844 var hAfter int16 11845 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 11846 hAfter = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 11847 } else { 11848 hAfter = int16(0) 11849 } 11850 (*closure_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 11851 (*closure_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 11852 if int32(hBefore) > int32(hAfter) { 11853 return int32(hBefore) 11854 } 11855 return int32(hAfter) 11856 }() + 1) 11857 } 11858 11859 func closureAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 11860 var pB uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpBefore 11861 var pY uintptr = (*closure_avl)(unsafe.Pointer(pB)).FpAfter 11862 (*closure_avl)(unsafe.Pointer(pB)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 11863 (*closure_avl)(unsafe.Pointer(pB)).FpAfter = pP 11864 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pB 11865 (*closure_avl)(unsafe.Pointer(pP)).FpBefore = pY 11866 if pY != 0 { 11867 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 11868 } 11869 closureAvlRecomputeHeight(tls, pP) 11870 closureAvlRecomputeHeight(tls, pB) 11871 return pB 11872 } 11873 11874 func closureAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 11875 var pA uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpAfter 11876 var pY uintptr = (*closure_avl)(unsafe.Pointer(pA)).FpBefore 11877 (*closure_avl)(unsafe.Pointer(pA)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 11878 (*closure_avl)(unsafe.Pointer(pA)).FpBefore = pP 11879 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pA 11880 (*closure_avl)(unsafe.Pointer(pP)).FpAfter = pY 11881 if pY != 0 { 11882 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 11883 } 11884 closureAvlRecomputeHeight(tls, pP) 11885 closureAvlRecomputeHeight(tls, pA) 11886 return pA 11887 } 11888 11889 func closureAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 11890 var pUp uintptr = (*closure_avl)(unsafe.Pointer(p)).FpUp 11891 if pUp == uintptr(0) { 11892 return pp 11893 } 11894 if (*closure_avl)(unsafe.Pointer(pUp)).FpAfter == p { 11895 return pUp + 32 11896 } 11897 return pUp + 24 11898 } 11899 11900 func closureAvlBalance(tls *libc.TLS, p uintptr) uintptr { 11901 bp := tls.Alloc(8) 11902 defer tls.Free(8) 11903 *(*uintptr)(unsafe.Pointer(bp)) = p 11904 11905 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 11906 var pp uintptr 11907 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 11908 closureAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 11909 if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 11910 var pB uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 11911 if int32((*closure_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 11912 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = closureAvlRotateAfter(tls, pB) 11913 } 11914 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 11915 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 11916 } else if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 11917 var pA uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 11918 if int32((*closure_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 11919 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = closureAvlRotateBefore(tls, pA) 11920 } 11921 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 11922 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 11923 } 11924 pTop = *(*uintptr)(unsafe.Pointer(bp)) 11925 *(*uintptr)(unsafe.Pointer(bp)) = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 11926 } 11927 return pTop 11928 } 11929 11930 func closureAvlSearch(tls *libc.TLS, p uintptr, id sqlite3_int64) uintptr { 11931 for p != 0 && id != (*closure_avl)(unsafe.Pointer(p)).Fid { 11932 if id < (*closure_avl)(unsafe.Pointer(p)).Fid { 11933 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 11934 } else { 11935 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 11936 } 11937 } 11938 return p 11939 } 11940 11941 func closureAvlFirst(tls *libc.TLS, p uintptr) uintptr { 11942 if p != 0 { 11943 for (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 11944 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 11945 } 11946 } 11947 return p 11948 } 11949 11950 func closureAvlNext(tls *libc.TLS, p uintptr) uintptr { 11951 var pPrev uintptr = uintptr(0) 11952 for p != 0 && (*closure_avl)(unsafe.Pointer(p)).FpAfter == pPrev { 11953 pPrev = p 11954 p = (*closure_avl)(unsafe.Pointer(p)).FpUp 11955 } 11956 if p != 0 && pPrev == uintptr(0) { 11957 p = closureAvlFirst(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter) 11958 } 11959 return p 11960 } 11961 11962 func closureAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 11963 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 11964 if p == uintptr(0) { 11965 p = pNew 11966 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 11967 } else { 11968 for p != 0 { 11969 if (*closure_avl)(unsafe.Pointer(pNew)).Fid < (*closure_avl)(unsafe.Pointer(p)).Fid { 11970 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 11971 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 11972 } else { 11973 (*closure_avl)(unsafe.Pointer(p)).FpBefore = pNew 11974 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 11975 break 11976 } 11977 } else if (*closure_avl)(unsafe.Pointer(pNew)).Fid > (*closure_avl)(unsafe.Pointer(p)).Fid { 11978 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 11979 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 11980 } else { 11981 (*closure_avl)(unsafe.Pointer(p)).FpAfter = pNew 11982 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 11983 break 11984 } 11985 } else { 11986 return p 11987 } 11988 } 11989 } 11990 (*closure_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 11991 (*closure_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 11992 (*closure_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 11993 (*closure_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 11994 *(*uintptr)(unsafe.Pointer(ppHead)) = closureAvlBalance(tls, p) 11995 return uintptr(0) 11996 } 11997 11998 func closureAvlDestroy(tls *libc.TLS, p uintptr, xDestroy uintptr) { 11999 if p != 0 { 12000 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpBefore, xDestroy) 12001 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter, xDestroy) 12002 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, p) 12003 } 12004 } 12005 12006 func queuePush(tls *libc.TLS, pQueue uintptr, pNode uintptr) { 12007 (*closure_avl)(unsafe.Pointer(pNode)).FpList = uintptr(0) 12008 if (*closure_queue)(unsafe.Pointer(pQueue)).FpLast != 0 { 12009 (*closure_avl)(unsafe.Pointer((*closure_queue)(unsafe.Pointer(pQueue)).FpLast)).FpList = pNode 12010 } else { 12011 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = pNode 12012 } 12013 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = pNode 12014 } 12015 12016 func queuePull(tls *libc.TLS, pQueue uintptr) uintptr { 12017 var p uintptr = (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst 12018 if p != 0 { 12019 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = (*closure_avl)(unsafe.Pointer(p)).FpList 12020 if (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst == uintptr(0) { 12021 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = uintptr(0) 12022 } 12023 } 12024 return p 12025 } 12026 12027 func closureDequote(tls *libc.TLS, zIn uintptr) uintptr { 12028 var nIn sqlite3_int64 12029 var zOut uintptr 12030 12031 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 12032 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 12033 if zOut != 0 { 12034 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 12035 12036 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 12037 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 12038 } else { 12039 var iOut int32 = 0 12040 var iIn int32 12041 12042 if int32(q) == '[' { 12043 q = int8(']') 12044 } 12045 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 12046 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 12047 iIn++ 12048 } 12049 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 12050 } 12051 } 12052 12053 } 12054 return zOut 12055 } 12056 12057 func closureFree(tls *libc.TLS, p uintptr) { 12058 if p != 0 { 12059 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzDb) 12060 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzSelf) 12061 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzTableName) 12062 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzIdColumn) 12063 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzParentColumn) 12064 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 12065 sqlite3.Xsqlite3_free(tls, p) 12066 } 12067 } 12068 12069 func closureDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 12070 var p uintptr = pVtab 12071 12072 closureFree(tls, p) 12073 return SQLITE_OK 12074 } 12075 12076 func closureValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 12077 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 12078 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 12079 var i int32 12080 if nStr < nKey+1 { 12081 return uintptr(0) 12082 } 12083 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 12084 return uintptr(0) 12085 } 12086 for i = nKey; libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0; i++ { 12087 } 12088 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 12089 return uintptr(0) 12090 } 12091 i++ 12092 for libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0 { 12093 i++ 12094 } 12095 return zStr + uintptr(i) 12096 } 12097 12098 func closureConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 12099 bp := tls.Alloc(24) 12100 defer tls.Free(24) 12101 12102 var rc int32 12103 var pNew uintptr 12104 var zDb uintptr 12105 var zVal uintptr 12106 var i int32 12107 rc = SQLITE_OK 12108 pNew = uintptr(0) 12109 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 12110 12111 _ = pAux 12112 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12113 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_vtab{}))) 12114 if !(pNew == uintptr(0)) { 12115 goto __1 12116 } 12117 return SQLITE_NOMEM 12118 __1: 12119 ; 12120 rc = SQLITE_NOMEM 12121 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 12122 (*closure_vtab)(unsafe.Pointer(pNew)).Fdb = db 12123 (*closure_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zDb)) 12124 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 12125 goto __2 12126 } 12127 goto closureConnectError 12128 __2: 12129 ; 12130 (*closure_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 12131 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 12132 goto __3 12133 } 12134 goto closureConnectError 12135 __3: 12136 ; 12137 i = 3 12138 __4: 12139 if !(i < argc) { 12140 goto __6 12141 } 12142 zVal = closureValueOfKey(tls, ts+4215, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12143 if !(zVal != 0) { 12144 goto __7 12145 } 12146 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName) 12147 (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName = closureDequote(tls, zVal) 12148 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0)) { 12149 goto __8 12150 } 12151 goto closureConnectError 12152 __8: 12153 ; 12154 goto __5 12155 __7: 12156 ; 12157 zVal = closureValueOfKey(tls, ts+4225, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12158 if !(zVal != 0) { 12159 goto __9 12160 } 12161 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn) 12162 (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn = closureDequote(tls, zVal) 12163 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn == uintptr(0)) { 12164 goto __10 12165 } 12166 goto closureConnectError 12167 __10: 12168 ; 12169 goto __5 12170 __9: 12171 ; 12172 zVal = closureValueOfKey(tls, ts+4234, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12173 if !(zVal != 0) { 12174 goto __11 12175 } 12176 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn) 12177 (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn = closureDequote(tls, zVal) 12178 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn == uintptr(0)) { 12179 goto __12 12180 } 12181 goto closureConnectError 12182 __12: 12183 ; 12184 goto __5 12185 __11: 12186 ; 12187 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 12188 closureFree(tls, pNew) 12189 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12190 return SQLITE_ERROR 12191 goto __5 12192 __5: 12193 i++ 12194 goto __4 12195 goto __6 12196 __6: 12197 ; 12198 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 12199 ts+4247) 12200 if !(rc != SQLITE_OK) { 12201 goto __13 12202 } 12203 closureFree(tls, pNew) 12204 __13: 12205 ; 12206 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 12207 return rc 12208 12209 closureConnectError: 12210 closureFree(tls, pNew) 12211 return rc 12212 } 12213 12214 func closureOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 12215 var p uintptr = pVTab 12216 var pCur uintptr 12217 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_cursor{}))) 12218 if pCur == uintptr(0) { 12219 return SQLITE_NOMEM 12220 } 12221 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(closure_cursor{}))) 12222 (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab = p 12223 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 12224 (*closure_vtab)(unsafe.Pointer(p)).FnCursor++ 12225 return SQLITE_OK 12226 } 12227 12228 func closureClearCursor(tls *libc.TLS, pCur uintptr) { 12229 closureAvlDestroy(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 12230 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName) 12231 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn) 12232 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn) 12233 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = uintptr(0) 12234 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = uintptr(0) 12235 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = uintptr(0) 12236 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 12237 (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure = uintptr(0) 12238 } 12239 12240 func closureClose(tls *libc.TLS, cur uintptr) int32 { 12241 var pCur uintptr = cur 12242 closureClearCursor(tls, pCur) 12243 (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 12244 sqlite3.Xsqlite3_free(tls, pCur) 12245 return SQLITE_OK 12246 } 12247 12248 func closureNext(tls *libc.TLS, cur uintptr) int32 { 12249 var pCur uintptr = cur 12250 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlNext(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent) 12251 return SQLITE_OK 12252 } 12253 12254 func closureInsertNode(tls *libc.TLS, pQueue uintptr, pCur uintptr, id sqlite3_int64, iGeneration int32) int32 { 12255 var pNew uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_avl{}))) 12256 if pNew == uintptr(0) { 12257 return SQLITE_NOMEM 12258 } 12259 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_avl{}))) 12260 (*closure_avl)(unsafe.Pointer(pNew)).Fid = id 12261 (*closure_avl)(unsafe.Pointer(pNew)).FiGeneration = iGeneration 12262 closureAvlInsert(tls, pCur+48, pNew) 12263 queuePush(tls, pQueue, pNew) 12264 return SQLITE_OK 12265 } 12266 12267 func closureFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 12268 bp := tls.Alloc(96) 12269 defer tls.Free(96) 12270 12271 var pCur uintptr = pVtabCursor 12272 var pVtab uintptr = (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab 12273 var iRoot sqlite3_int64 12274 var mxGen int32 = 999999999 12275 var zSql uintptr 12276 12277 var pAvl uintptr 12278 var rc int32 = SQLITE_OK 12279 var zTableName uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName 12280 var zIdColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn 12281 var zParentColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn 12282 12283 _ = idxStr 12284 _ = argc 12285 closureClearCursor(tls, pCur) 12286 libc.Xmemset(tls, bp+72, 0, uint64(unsafe.Sizeof(closure_queue{}))) 12287 if idxNum&1 == 0 { 12288 return SQLITE_OK 12289 } 12290 iRoot = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 12291 if idxNum&0x000f0 != 0 { 12292 mxGen = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>4&0x0f)*8))) 12293 if idxNum&0x00002 != 0 { 12294 mxGen-- 12295 } 12296 } 12297 if idxNum&0x00f00 != 0 { 12298 zTableName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>8&0x0f)*8))) 12299 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 12300 } 12301 if idxNum&0x0f000 != 0 { 12302 zIdColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>12&0x0f)*8))) 12303 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zIdColumn)) 12304 } 12305 if idxNum&0x0f0000 != 0 { 12306 zParentColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>16&0x0f)*8))) 12307 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zParentColumn)) 12308 } 12309 12310 zSql = sqlite3.Xsqlite3_mprintf(tls, 12311 ts+4337, 12312 libc.VaList(bp+24, zTableName, zIdColumn, zTableName, zTableName, zParentColumn)) 12313 if zSql == uintptr(0) { 12314 return SQLITE_NOMEM 12315 } else { 12316 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, bp+88, uintptr(0)) 12317 sqlite3.Xsqlite3_free(tls, zSql) 12318 if rc != 0 { 12319 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fbase.FzErrMsg) 12320 (*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))) 12321 return rc 12322 } 12323 } 12324 if rc == SQLITE_OK { 12325 rc = closureInsertNode(tls, bp+72, pCur, iRoot, 0) 12326 } 12327 for libc.AssignUintptr(&pAvl, queuePull(tls, bp+72)) != uintptr(0) { 12328 if (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration >= mxGen { 12329 continue 12330 } 12331 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 1, (*closure_avl)(unsafe.Pointer(pAvl)).Fid) 12332 for rc == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) == SQLITE_ROW { 12333 if sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) == SQLITE_INTEGER { 12334 var iNew sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) 12335 if closureAvlSearch(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, iNew) == uintptr(0) { 12336 rc = closureInsertNode(tls, bp+72, pCur, iNew, (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration+1) 12337 } 12338 } 12339 } 12340 sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 12341 } 12342 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 12343 if rc == SQLITE_OK { 12344 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlFirst(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure) 12345 } 12346 12347 return rc 12348 } 12349 12350 func closureColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 12351 var pCur uintptr = cur 12352 switch i { 12353 case CLOSURE_COL_ID: 12354 { 12355 sqlite3.Xsqlite3_result_int64(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid) 12356 break 12357 12358 } 12359 case CLOSURE_COL_DEPTH: 12360 { 12361 sqlite3.Xsqlite3_result_int(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FiGeneration) 12362 break 12363 12364 } 12365 case CLOSURE_COL_ROOT: 12366 { 12367 sqlite3.Xsqlite3_result_null(tls, ctx) 12368 break 12369 12370 } 12371 case CLOSURE_COL_TABLENAME: 12372 { 12373 sqlite3.Xsqlite3_result_text(tls, ctx, 12374 func() uintptr { 12375 if (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName != 0 { 12376 return (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName 12377 } 12378 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzTableName 12379 }(), 12380 -1, libc.UintptrFromInt32(-1)) 12381 break 12382 12383 } 12384 case CLOSURE_COL_IDCOLUMN: 12385 { 12386 sqlite3.Xsqlite3_result_text(tls, ctx, 12387 func() uintptr { 12388 if (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn != 0 { 12389 return (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn 12390 } 12391 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzIdColumn 12392 }(), 12393 -1, libc.UintptrFromInt32(-1)) 12394 break 12395 12396 } 12397 case CLOSURE_COL_PARENTCOLUMN: 12398 { 12399 sqlite3.Xsqlite3_result_text(tls, ctx, 12400 func() uintptr { 12401 if (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn != 0 { 12402 return (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn 12403 } 12404 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzParentColumn 12405 }(), 12406 -1, libc.UintptrFromInt32(-1)) 12407 break 12408 12409 } 12410 } 12411 return SQLITE_OK 12412 } 12413 12414 func closureRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 12415 var pCur uintptr = cur 12416 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid 12417 return SQLITE_OK 12418 } 12419 12420 func closureEof(tls *libc.TLS, cur uintptr) int32 { 12421 var pCur uintptr = cur 12422 return libc.Bool32((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 12423 } 12424 12425 func closureBestIndex(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) int32 { 12426 var iPlan int32 = 0 12427 var i int32 12428 var idx int32 = 1 12429 var pConstraint uintptr 12430 var pVtab uintptr = pTab 12431 var rCost float64 = 10000000.0 12432 12433 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 12434 i = 0 12435 __1: 12436 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 12437 goto __3 12438 } 12439 { 12440 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 12441 goto __2 12442 } 12443 if iPlan&1 == 0 && 12444 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_ROOT && 12445 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12446 iPlan = iPlan | 1 12447 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 12448 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12449 rCost = rCost / 100.0 12450 } 12451 if iPlan&0x0000f0 == 0 && 12452 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_DEPTH && 12453 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 12454 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE || 12455 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 12456 iPlan = iPlan | idx<<4 12457 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12458 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 12459 iPlan = iPlan | 0x000002 12460 } 12461 rCost = rCost / 5.0 12462 } 12463 if iPlan&0x000f00 == 0 && 12464 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_TABLENAME && 12465 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12466 iPlan = iPlan | idx<<8 12467 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12468 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12469 rCost = rCost / 5.0 12470 } 12471 if iPlan&0x00f000 == 0 && 12472 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_IDCOLUMN && 12473 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12474 iPlan = iPlan | idx<<12 12475 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12476 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12477 } 12478 if iPlan&0x0f0000 == 0 && 12479 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_PARENTCOLUMN && 12480 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 12481 iPlan = iPlan | idx<<16 12482 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 12483 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 12484 } 12485 12486 } 12487 goto __2 12488 __2: 12489 i++ 12490 pConstraint += 12 12491 goto __1 12492 goto __3 12493 __3: 12494 ; 12495 if (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName == uintptr(0) && iPlan&0x000f00 == 0 || 12496 (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn == uintptr(0) && iPlan&0x00f000 == 0 || 12497 (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn == uintptr(0) && iPlan&0x0f0000 == 0 { 12498 iPlan = 0 12499 } 12500 if iPlan&1 == 0 { 12501 rCost = rCost * 1e30 12502 i = 0 12503 __4: 12504 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 12505 goto __6 12506 } 12507 { 12508 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 0 12509 12510 } 12511 goto __5 12512 __5: 12513 i++ 12514 pConstraint += 12 12515 goto __4 12516 goto __6 12517 __6: 12518 ; 12519 iPlan = 0 12520 } 12521 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 12522 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 12523 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == CLOSURE_COL_ID && 12524 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 12525 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 12526 } 12527 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 12528 12529 return SQLITE_OK 12530 } 12531 12532 var closureModule = sqlite3_module{ 12533 FxCreate: 0, 12534 FxConnect: 0, 12535 FxBestIndex: 0, 12536 FxDisconnect: 0, 12537 FxDestroy: 0, 12538 FxOpen: 0, 12539 FxClose: 0, 12540 FxFilter: 0, 12541 FxNext: 0, 12542 FxEof: 0, 12543 FxColumn: 0, 12544 FxRowid: 0, 12545 } 12546 12547 func sqlite3_closure_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 12548 var rc int32 = SQLITE_OK 12549 _ = pApi 12550 12551 _ = pzErrMsg 12552 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4383, uintptr(unsafe.Pointer(&closureModule)), uintptr(0)) 12553 return rc 12554 } 12555 12556 type CsvReader1 = struct { 12557 Fin uintptr 12558 Fz uintptr 12559 Fn int32 12560 FnAlloc int32 12561 FnLine int32 12562 FbNotFirst int32 12563 FcTerm int32 12564 F__ccgo_pad1 [4]byte 12565 FiIn size_t 12566 FnIn size_t 12567 FzIn uintptr 12568 FzErr [200]int8 12569 } 12570 12571 type CsvReader = CsvReader1 12572 12573 func csv_reader_init(tls *libc.TLS, p uintptr) { 12574 (*CsvReader)(unsafe.Pointer(p)).Fin = uintptr(0) 12575 (*CsvReader)(unsafe.Pointer(p)).Fz = uintptr(0) 12576 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12577 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = 0 12578 (*CsvReader)(unsafe.Pointer(p)).FnLine = 0 12579 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 0 12580 (*CsvReader)(unsafe.Pointer(p)).FnIn = uint64(0) 12581 (*CsvReader)(unsafe.Pointer(p)).FzIn = uintptr(0) 12582 *(*int8)(unsafe.Pointer(p + 64)) = int8(0) 12583 } 12584 12585 func csv_reader_reset(tls *libc.TLS, p uintptr) { 12586 if (*CsvReader)(unsafe.Pointer(p)).Fin != 0 { 12587 libc.Xfclose(tls, (*CsvReader)(unsafe.Pointer(p)).Fin) 12588 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 12589 } 12590 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).Fz) 12591 csv_reader_init(tls, p) 12592 } 12593 12594 func csv_errmsg(tls *libc.TLS, p uintptr, zFormat uintptr, va uintptr) { 12595 var ap va_list 12596 _ = ap 12597 ap = va 12598 sqlite3.Xsqlite3_vsnprintf(tls, CSV_MXERR, p+64, zFormat, ap) 12599 _ = ap 12600 } 12601 12602 func csv_reader_open(tls *libc.TLS, p uintptr, zFilename uintptr, zData uintptr) int32 { 12603 bp := tls.Alloc(8) 12604 defer tls.Free(8) 12605 12606 if zFilename != 0 { 12607 (*CsvReader)(unsafe.Pointer(p)).FzIn = sqlite3.Xsqlite3_malloc(tls, CSV_INBUFSZ) 12608 if (*CsvReader)(unsafe.Pointer(p)).FzIn == uintptr(0) { 12609 csv_errmsg(tls, p, ts+2069, 0) 12610 return 1 12611 } 12612 (*CsvReader)(unsafe.Pointer(p)).Fin = libc.Xfopen(tls, zFilename, ts+4402) 12613 if (*CsvReader)(unsafe.Pointer(p)).Fin == uintptr(0) { 12614 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 12615 csv_reader_reset(tls, p) 12616 csv_errmsg(tls, p, ts+4405, libc.VaList(bp, zFilename)) 12617 return 1 12618 } 12619 } else { 12620 (*CsvReader)(unsafe.Pointer(p)).FzIn = zData 12621 (*CsvReader)(unsafe.Pointer(p)).FnIn = libc.Xstrlen(tls, zData) 12622 } 12623 return 0 12624 } 12625 12626 func csv_getc_refill(tls *libc.TLS, p uintptr) int32 { 12627 var got size_t 12628 12629 got = libc.Xfread(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn, uint64(1), uint64(CSV_INBUFSZ), (*CsvReader)(unsafe.Pointer(p)).Fin) 12630 if got == uint64(0) { 12631 return -1 12632 } 12633 (*CsvReader)(unsafe.Pointer(p)).FnIn = got 12634 (*CsvReader)(unsafe.Pointer(p)).FiIn = uint64(1) 12635 return int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn))) 12636 } 12637 12638 func csv_getc(tls *libc.TLS, p uintptr) int32 { 12639 if (*CsvReader)(unsafe.Pointer(p)).FiIn >= (*CsvReader)(unsafe.Pointer(p)).FnIn { 12640 if (*CsvReader)(unsafe.Pointer(p)).Fin != uintptr(0) { 12641 return csv_getc_refill(tls, p) 12642 } 12643 return -1 12644 } 12645 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn + uintptr(libc.PostIncUint64(&(*CsvReader)(unsafe.Pointer(p)).FiIn, 1))))) 12646 } 12647 12648 func csv_resize_and_append(tls *libc.TLS, p uintptr, c int8) int32 { 12649 var zNew uintptr 12650 var nNew int32 = (*CsvReader)(unsafe.Pointer(p)).FnAlloc*2 + 100 12651 zNew = sqlite3.Xsqlite3_realloc64(tls, (*CsvReader)(unsafe.Pointer(p)).Fz, uint64(nNew)) 12652 if zNew != 0 { 12653 (*CsvReader)(unsafe.Pointer(p)).Fz = zNew 12654 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = nNew 12655 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 12656 return 0 12657 } else { 12658 csv_errmsg(tls, p, ts+2069, 0) 12659 return 1 12660 } 12661 return int32(0) 12662 } 12663 12664 func csv_append(tls *libc.TLS, p uintptr, c int8) int32 { 12665 if (*CsvReader)(unsafe.Pointer(p)).Fn >= (*CsvReader)(unsafe.Pointer(p)).FnAlloc-1 { 12666 return csv_resize_and_append(tls, p, c) 12667 } 12668 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 12669 return 0 12670 } 12671 12672 func csv_read_one_field(tls *libc.TLS, p uintptr) uintptr { 12673 bp := tls.Alloc(32) 12674 defer tls.Free(32) 12675 12676 var c int32 12677 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12678 c = csv_getc(tls, p) 12679 if c == -1 { 12680 (*CsvReader)(unsafe.Pointer(p)).FcTerm = -1 12681 return uintptr(0) 12682 } 12683 if c == '"' { 12684 var pc int32 12685 var ppc int32 12686 var startLine int32 = (*CsvReader)(unsafe.Pointer(p)).FnLine 12687 pc = libc.AssignInt32(&ppc, 0) 12688 for 1 != 0 { 12689 c = csv_getc(tls, p) 12690 if c <= '"' || pc == '"' { 12691 if c == '\n' { 12692 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 12693 } 12694 if c == '"' { 12695 if pc == '"' { 12696 pc = 0 12697 continue 12698 } 12699 } 12700 if c == ',' && pc == '"' || 12701 c == '\n' && pc == '"' || 12702 c == '\n' && pc == '\r' && ppc == '"' || 12703 c == -1 && pc == '"' { 12704 for __ccgo := true; __ccgo; __ccgo = int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn)))) != '"' { 12705 (*CsvReader)(unsafe.Pointer(p)).Fn-- 12706 } 12707 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12708 break 12709 } 12710 if pc == '"' && c != '\r' { 12711 csv_errmsg(tls, p, ts+4434, libc.VaList(bp, (*CsvReader)(unsafe.Pointer(p)).FnLine, '"')) 12712 break 12713 } 12714 if c == -1 { 12715 csv_errmsg(tls, p, ts+4466, 12716 libc.VaList(bp+16, startLine, '"')) 12717 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12718 break 12719 } 12720 } 12721 if csv_append(tls, p, int8(c)) != 0 { 12722 return uintptr(0) 12723 } 12724 ppc = pc 12725 pc = c 12726 } 12727 } else { 12728 if c&0xff == 0xef && (*CsvReader)(unsafe.Pointer(p)).FbNotFirst == 0 { 12729 csv_append(tls, p, int8(c)) 12730 c = csv_getc(tls, p) 12731 if c&0xff == 0xbb { 12732 csv_append(tls, p, int8(c)) 12733 c = csv_getc(tls, p) 12734 if c&0xff == 0xbf { 12735 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 12736 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 12737 return csv_read_one_field(tls, p) 12738 } 12739 } 12740 } 12741 for c > ',' || c != -1 && c != ',' && c != '\n' { 12742 if csv_append(tls, p, int8(c)) != 0 { 12743 return uintptr(0) 12744 } 12745 c = csv_getc(tls, p) 12746 } 12747 if c == '\n' { 12748 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 12749 if (*CsvReader)(unsafe.Pointer(p)).Fn > 0 && int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn-1)))) == '\r' { 12750 (*CsvReader)(unsafe.Pointer(p)).Fn-- 12751 } 12752 } 12753 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 12754 } 12755 if (*CsvReader)(unsafe.Pointer(p)).Fz != 0 { 12756 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn))) = int8(0) 12757 } 12758 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 12759 return (*CsvReader)(unsafe.Pointer(p)).Fz 12760 } 12761 12762 type CsvTable1 = struct { 12763 Fbase sqlite3_vtab 12764 FzFilename uintptr 12765 FzData uintptr 12766 FiStart int64 12767 FnCol int32 12768 FtstFlags uint32 12769 } 12770 12771 type CsvTable = CsvTable1 12772 12773 type CsvCursor1 = struct { 12774 Fbase sqlite3_vtab_cursor 12775 Frdr CsvReader 12776 FazVal uintptr 12777 FaLen uintptr 12778 FiRowid sqlite3_int64 12779 } 12780 12781 type CsvCursor = CsvCursor1 12782 12783 func csv_xfer_error(tls *libc.TLS, pTab uintptr, pRdr uintptr) { 12784 bp := tls.Alloc(8) 12785 defer tls.Free(8) 12786 12787 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg) 12788 (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, pRdr+64)) 12789 } 12790 12791 func csvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 12792 var p uintptr = pVtab 12793 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzFilename) 12794 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzData) 12795 sqlite3.Xsqlite3_free(tls, p) 12796 return SQLITE_OK 12797 } 12798 12799 func csv_skip_whitespace(tls *libc.TLS, z uintptr) uintptr { 12800 for libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(z))))) != 0 { 12801 z++ 12802 } 12803 return z 12804 } 12805 12806 func csv_trim_whitespace(tls *libc.TLS, z uintptr) { 12807 var n size_t = libc.Xstrlen(tls, z) 12808 for n > uint64(0) && libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(n)))))) != 0 { 12809 n-- 12810 } 12811 *(*int8)(unsafe.Pointer(z + uintptr(n))) = int8(0) 12812 } 12813 12814 func csv_dequote(tls *libc.TLS, z uintptr) { 12815 var j int32 12816 var cQuote int8 = *(*int8)(unsafe.Pointer(z)) 12817 var i size_t 12818 var n size_t 12819 12820 if int32(cQuote) != '\'' && int32(cQuote) != '"' { 12821 return 12822 } 12823 n = libc.Xstrlen(tls, z) 12824 if n < uint64(2) || int32(*(*int8)(unsafe.Pointer(z + uintptr(n-uint64(1))))) != int32(*(*int8)(unsafe.Pointer(z))) { 12825 return 12826 } 12827 i = uint64(1) 12828 j = 0 12829 for ; i < n-uint64(1); i++ { 12830 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == int32(cQuote) && int32(*(*int8)(unsafe.Pointer(z + uintptr(i+uint64(1))))) == int32(cQuote) { 12831 i++ 12832 } 12833 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 12834 } 12835 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 12836 } 12837 12838 func csv_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr) uintptr { 12839 z = csv_skip_whitespace(tls, z) 12840 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 12841 return uintptr(0) 12842 } 12843 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 12844 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 12845 return uintptr(0) 12846 } 12847 return csv_skip_whitespace(tls, z+uintptr(1)) 12848 } 12849 12850 func csv_string_parameter(tls *libc.TLS, p uintptr, zParam uintptr, zArg uintptr, pzVal uintptr) int32 { 12851 bp := tls.Alloc(16) 12852 defer tls.Free(16) 12853 12854 var zValue uintptr 12855 zValue = csv_parameter(tls, zParam, int32(libc.Xstrlen(tls, zParam)), zArg) 12856 if zValue == uintptr(0) { 12857 return 0 12858 } 12859 *(*int8)(unsafe.Pointer(p + 64)) = int8(0) 12860 if *(*uintptr)(unsafe.Pointer(pzVal)) != 0 { 12861 csv_errmsg(tls, p, ts+4505, libc.VaList(bp, zParam)) 12862 return 1 12863 } 12864 *(*uintptr)(unsafe.Pointer(pzVal)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zValue)) 12865 if *(*uintptr)(unsafe.Pointer(pzVal)) == uintptr(0) { 12866 csv_errmsg(tls, p, ts+2069, 0) 12867 return 1 12868 } 12869 csv_trim_whitespace(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 12870 csv_dequote(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 12871 return 1 12872 } 12873 12874 func csv_boolean(tls *libc.TLS, z uintptr) int32 { 12875 if sqlite3.Xsqlite3_stricmp(tls, ts+4174, z) == 0 || 12876 sqlite3.Xsqlite3_stricmp(tls, ts+4178, z) == 0 || 12877 sqlite3.Xsqlite3_stricmp(tls, ts+4534, z) == 0 || 12878 int32(*(*int8)(unsafe.Pointer(z))) == '1' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 12879 return 1 12880 } 12881 if sqlite3.Xsqlite3_stricmp(tls, ts+4539, z) == 0 || 12882 sqlite3.Xsqlite3_stricmp(tls, ts+4542, z) == 0 || 12883 sqlite3.Xsqlite3_stricmp(tls, ts+4546, z) == 0 || 12884 int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 12885 return 0 12886 } 12887 return -1 12888 } 12889 12890 func csv_boolean_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr, pValue uintptr) int32 { 12891 var b int32 12892 z = csv_skip_whitespace(tls, z) 12893 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 12894 return 0 12895 } 12896 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 12897 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 12898 *(*int32)(unsafe.Pointer(pValue)) = 1 12899 return 1 12900 } 12901 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 12902 return 0 12903 } 12904 z = csv_skip_whitespace(tls, z+uintptr(1)) 12905 b = csv_boolean(tls, z) 12906 if b >= 0 { 12907 *(*int32)(unsafe.Pointer(pValue)) = b 12908 return 1 12909 } 12910 return 0 12911 } 12912 12913 func csvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 12914 bp := tls.Alloc(372) 12915 defer tls.Free(372) 12916 12917 var pNew uintptr 12918 var bHeader int32 12919 var rc int32 12920 var i int32 12921 var j int32 12922 var tstFlags int32 12923 12924 var nCol int32 12925 12926 var z uintptr 12927 var zValue uintptr 12928 var z1 uintptr 12929 var pStr uintptr 12930 var zSep uintptr 12931 var iCol int32 12932 pNew = uintptr(0) 12933 bHeader = -1 12934 rc = SQLITE_OK 12935 tstFlags = 0 12936 nCol = -99 12937 12938 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(CsvReader{}))) 12939 libc.Xmemset(tls, bp+344, 0, uint64(unsafe.Sizeof([3]uintptr{}))) 12940 i = 3 12941 __1: 12942 if !(i < argc) { 12943 goto __3 12944 } 12945 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 12946 j = 0 12947 __4: 12948 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 12949 goto __6 12950 } 12951 if !(csv_string_parameter(tls, bp+80, azParam[j], z, bp+344+uintptr(j)*8) != 0) { 12952 goto __7 12953 } 12954 goto __6 12955 __7: 12956 ; 12957 goto __5 12958 __5: 12959 j++ 12960 goto __4 12961 goto __6 12962 __6: 12963 ; 12964 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 12965 goto __8 12966 } 12967 if !(*(*int8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 12968 goto __10 12969 } 12970 goto csvtab_connect_error 12971 __10: 12972 ; 12973 goto __9 12974 __8: 12975 if !(csv_boolean_parameter(tls, ts+4552, 6, z, bp+368) != 0) { 12976 goto __11 12977 } 12978 if !(bHeader >= 0) { 12979 goto __13 12980 } 12981 csv_errmsg(tls, bp+80, ts+4559, 0) 12982 goto csvtab_connect_error 12983 __13: 12984 ; 12985 bHeader = *(*int32)(unsafe.Pointer(bp + 368)) 12986 goto __12 12987 __11: 12988 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4592, 9, z)) != uintptr(0)) { 12989 goto __14 12990 } 12991 tstFlags = int32(uint32(libc.Xatoi(tls, zValue))) 12992 goto __15 12993 __14: 12994 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4602, 7, z)) != uintptr(0)) { 12995 goto __16 12996 } 12997 if !(nCol > 0) { 12998 goto __18 12999 } 13000 csv_errmsg(tls, bp+80, ts+4610, 0) 13001 goto csvtab_connect_error 13002 __18: 13003 ; 13004 nCol = libc.Xatoi(tls, zValue) 13005 if !(nCol <= 0) { 13006 goto __19 13007 } 13008 csv_errmsg(tls, bp+80, ts+4644, 0) 13009 goto csvtab_connect_error 13010 __19: 13011 ; 13012 goto __17 13013 __16: 13014 csv_errmsg(tls, bp+80, ts+4675, libc.VaList(bp, z)) 13015 goto csvtab_connect_error 13016 __17: 13017 ; 13018 __15: 13019 ; 13020 __12: 13021 ; 13022 __9: 13023 ; 13024 goto __2 13025 __2: 13026 i++ 13027 goto __1 13028 goto __3 13029 __3: 13030 ; 13031 if !(libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344)) == uintptr(0)) == libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) == uintptr(0))) { 13032 goto __20 13033 } 13034 csv_errmsg(tls, bp+80, ts+4695, 0) 13035 goto csvtab_connect_error 13036 __20: 13037 ; 13038 if !((nCol <= 0 || bHeader == 1) && 13039 csv_reader_open(tls, bp+80, *(*uintptr)(unsafe.Pointer(bp + 344)), *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8))) != 0) { 13040 goto __21 13041 } 13042 goto csvtab_connect_error 13043 __21: 13044 ; 13045 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CsvTable{}))) 13046 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 13047 if !(pNew == uintptr(0)) { 13048 goto __22 13049 } 13050 goto csvtab_connect_oom 13051 __22: 13052 ; 13053 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(CsvTable{}))) 13054 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 13055 goto __23 13056 } 13057 pStr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 13058 zSep = ts + 584 13059 iCol = 0 13060 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+979, 0) 13061 if !(nCol < 0 && bHeader < 1) { 13062 goto __25 13063 } 13064 nCol = 0 13065 __26: 13066 csv_read_one_field(tls, bp+80) 13067 nCol++ 13068 goto __27 13069 __27: 13070 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13071 goto __26 13072 } 13073 goto __28 13074 __28: 13075 ; 13076 __25: 13077 ; 13078 if !(nCol > 0 && bHeader < 1) { 13079 goto __29 13080 } 13081 iCol = 0 13082 __31: 13083 if !(iCol < nCol) { 13084 goto __33 13085 } 13086 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+8, zSep, iCol)) 13087 zSep = ts + 4758 13088 goto __32 13089 __32: 13090 iCol++ 13091 goto __31 13092 goto __33 13093 __33: 13094 ; 13095 goto __30 13096 __29: 13097 __34: 13098 z1 = csv_read_one_field(tls, bp+80) 13099 if !(nCol > 0 && iCol < nCol || nCol < 0 && bHeader != 0) { 13100 goto __37 13101 } 13102 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4760, libc.VaList(bp+24, zSep, z1)) 13103 zSep = ts + 4758 13104 iCol++ 13105 __37: 13106 ; 13107 goto __35 13108 __35: 13109 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13110 goto __34 13111 } 13112 goto __36 13113 __36: 13114 ; 13115 if !(nCol < 0) { 13116 goto __38 13117 } 13118 nCol = iCol 13119 goto __39 13120 __38: 13121 __40: 13122 if !(iCol < nCol) { 13123 goto __41 13124 } 13125 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+40, zSep, libc.PreIncInt32(&iCol, 1))) 13126 zSep = ts + 4758 13127 goto __40 13128 __41: 13129 ; 13130 __39: 13131 ; 13132 __30: 13133 ; 13134 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13135 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+585, 0) 13136 *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) = sqlite3.Xsqlite3_str_finish(tls, pStr) 13137 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 13138 goto __42 13139 } 13140 goto csvtab_connect_oom 13141 __42: 13142 ; 13143 goto __24 13144 __23: 13145 if !(nCol < 0) { 13146 goto __43 13147 } 13148 __45: 13149 csv_read_one_field(tls, bp+80) 13150 (*CsvTable)(unsafe.Pointer(pNew)).FnCol++ 13151 goto __46 13152 __46: 13153 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13154 goto __45 13155 } 13156 goto __47 13157 __47: 13158 ; 13159 goto __44 13160 __43: 13161 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13162 __44: 13163 ; 13164 __24: 13165 ; 13166 (*CsvTable)(unsafe.Pointer(pNew)).FzFilename = *(*uintptr)(unsafe.Pointer(bp + 344)) 13167 *(*uintptr)(unsafe.Pointer(bp + 344)) = uintptr(0) 13168 (*CsvTable)(unsafe.Pointer(pNew)).FzData = *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) 13169 *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) = uintptr(0) 13170 (*CsvTable)(unsafe.Pointer(pNew)).FtstFlags = uint32(tstFlags) 13171 if !(bHeader != 1) { 13172 goto __48 13173 } 13174 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(0) 13175 goto __49 13176 __48: 13177 if !((*CsvTable)(unsafe.Pointer(pNew)).FzData != 0) { 13178 goto __50 13179 } 13180 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(int32((*CsvReader)(unsafe.Pointer(bp + 80)).FiIn)) 13181 goto __51 13182 __50: 13183 (*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)) 13184 __51: 13185 ; 13186 __49: 13187 ; 13188 csv_reader_reset(tls, bp+80) 13189 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8))) 13190 if !(rc != 0) { 13191 goto __52 13192 } 13193 csv_errmsg(tls, bp+80, ts+4772, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)), sqlite3.Xsqlite3_errmsg(tls, db))) 13194 goto csvtab_connect_error 13195 __52: 13196 ; 13197 i = 0 13198 __53: 13199 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 13200 goto __55 13201 } 13202 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 13203 goto __54 13204 __54: 13205 i++ 13206 goto __53 13207 goto __55 13208 __55: 13209 ; 13210 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 13211 return SQLITE_OK 13212 13213 csvtab_connect_oom: 13214 rc = SQLITE_NOMEM 13215 csv_errmsg(tls, bp+80, ts+2069, 0) 13216 13217 csvtab_connect_error: 13218 if !(pNew != 0) { 13219 goto __56 13220 } 13221 csvtabDisconnect(tls, pNew) 13222 __56: 13223 ; 13224 i = 0 13225 __57: 13226 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 13227 goto __59 13228 } 13229 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 13230 goto __58 13231 __58: 13232 i++ 13233 goto __57 13234 goto __59 13235 __59: 13236 ; 13237 if !(*(*int8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 13238 goto __60 13239 } 13240 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(pzErr))) 13241 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, bp+80+64)) 13242 __60: 13243 ; 13244 csv_reader_reset(tls, bp+80) 13245 if !(rc == SQLITE_OK) { 13246 goto __61 13247 } 13248 rc = SQLITE_ERROR 13249 __61: 13250 ; 13251 return rc 13252 } 13253 13254 var azParam = [3]uintptr{ 13255 ts + 4794, ts + 4803, ts + 4808, 13256 } 13257 13258 func csvtabCursorRowReset(tls *libc.TLS, pCur uintptr) { 13259 var pTab uintptr = (*CsvCursor)(unsafe.Pointer(pCur)).Fbase.FpVtab 13260 var i int32 13261 for i = 0; i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol; i++ { 13262 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 13263 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 13264 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13265 } 13266 } 13267 13268 func csvtabCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13269 return csvtabConnect(tls, db, pAux, argc, argv, ppVtab, pzErr) 13270 } 13271 13272 func csvtabClose(tls *libc.TLS, cur uintptr) int32 { 13273 var pCur uintptr = cur 13274 csvtabCursorRowReset(tls, pCur) 13275 csv_reader_reset(tls, pCur+8) 13276 sqlite3.Xsqlite3_free(tls, cur) 13277 return SQLITE_OK 13278 } 13279 13280 func csvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 13281 var pTab uintptr = p 13282 var pCur uintptr 13283 var nByte size_t 13284 nByte = uint64(unsafe.Sizeof(CsvCursor{})) + (uint64(unsafe.Sizeof(uintptr(0)))+uint64(unsafe.Sizeof(int32(0))))*uint64((*CsvTable)(unsafe.Pointer(pTab)).FnCol) 13285 pCur = sqlite3.Xsqlite3_malloc64(tls, nByte) 13286 if pCur == uintptr(0) { 13287 return SQLITE_NOMEM 13288 } 13289 libc.Xmemset(tls, pCur, 0, nByte) 13290 (*CsvCursor)(unsafe.Pointer(pCur)).FazVal = pCur + 1*296 13291 (*CsvCursor)(unsafe.Pointer(pCur)).FaLen = (*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr((*CsvTable)(unsafe.Pointer(pTab)).FnCol)*8 13292 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 13293 if csv_reader_open(tls, pCur+8, (*CsvTable)(unsafe.Pointer(pTab)).FzFilename, (*CsvTable)(unsafe.Pointer(pTab)).FzData) != 0 { 13294 csv_xfer_error(tls, pTab, pCur+8) 13295 return SQLITE_ERROR 13296 } 13297 return SQLITE_OK 13298 } 13299 13300 func csvtabNext(tls *libc.TLS, cur uintptr) int32 { 13301 var pCur uintptr = cur 13302 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13303 var i int32 = 0 13304 var z uintptr 13305 for __ccgo := true; __ccgo; __ccgo = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == ',' { 13306 z = csv_read_one_field(tls, pCur+8) 13307 if z == uintptr(0) { 13308 break 13309 } 13310 if i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13311 if *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) < (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1 { 13312 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)) 13313 if zNew == uintptr(0) { 13314 csv_errmsg(tls, pCur+8, ts+2069, 0) 13315 csv_xfer_error(tls, pTab, pCur+8) 13316 break 13317 } 13318 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = zNew 13319 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn + 1 13320 } 13321 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), z, uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 13322 i++ 13323 } 13324 } 13325 if z == uintptr(0) || (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == -1 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13326 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(-1) 13327 } else { 13328 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid++ 13329 for i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13330 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 13331 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 13332 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13333 i++ 13334 } 13335 } 13336 return SQLITE_OK 13337 } 13338 13339 func csvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 13340 var pCur uintptr = cur 13341 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13342 if i >= 0 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol && *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) != uintptr(0) { 13343 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), -1, libc.UintptrFromInt32(-1)) 13344 } 13345 return SQLITE_OK 13346 } 13347 13348 func csvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13349 var pCur uintptr = cur 13350 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid 13351 return SQLITE_OK 13352 } 13353 13354 func csvtabEof(tls *libc.TLS, cur uintptr) int32 { 13355 var pCur uintptr = cur 13356 return libc.Bool32((*CsvCursor)(unsafe.Pointer(pCur)).FiRowid < int64(0)) 13357 } 13358 13359 func csvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 13360 var pCur uintptr = pVtabCursor 13361 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 13362 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 13363 if (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin == uintptr(0) { 13364 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = size_t((*CsvTable)(unsafe.Pointer(pTab)).FiStart) 13365 } else { 13366 libc.Xfseek(tls, (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin, (*CsvTable)(unsafe.Pointer(pTab)).FiStart, SEEK_SET) 13367 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = uint64(0) 13368 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FnIn = uint64(0) 13369 } 13370 return csvtabNext(tls, pVtabCursor) 13371 } 13372 13373 func csvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 13374 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000) 13375 if (*CsvTable)(unsafe.Pointer(tab)).FtstFlags&uint32(CSVTEST_FIDX) != uint32(0) { 13376 var i int32 13377 var nConst int32 = 0 13378 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 13379 var op uint8 13380 if int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable) == 0 { 13381 continue 13382 } 13383 op = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop 13384 if int32(op) == SQLITE_INDEX_CONSTRAINT_EQ || 13385 int32(op) == SQLITE_INDEX_CONSTRAINT_LIKE || 13386 int32(op) == SQLITE_INDEX_CONSTRAINT_GLOB { 13387 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 13388 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(nConst)*8)).FargvIndex = nConst + 1 13389 nConst++ 13390 } 13391 } 13392 } 13393 return SQLITE_OK 13394 } 13395 13396 var CsvModule = sqlite3_module{ 13397 FxCreate: 0, 13398 FxConnect: 0, 13399 FxBestIndex: 0, 13400 FxDisconnect: 0, 13401 FxDestroy: 0, 13402 FxOpen: 0, 13403 FxClose: 0, 13404 FxFilter: 0, 13405 FxNext: 0, 13406 FxEof: 0, 13407 FxColumn: 0, 13408 FxRowid: 0, 13409 } 13410 13411 func csvtabUpdate(tls *libc.TLS, p uintptr, n int32, v uintptr, x uintptr) int32 { 13412 return SQLITE_READONLY 13413 } 13414 13415 var CsvModuleFauxWrite = sqlite3_module{ 13416 FxCreate: 0, 13417 FxConnect: 0, 13418 FxBestIndex: 0, 13419 FxDisconnect: 0, 13420 FxDestroy: 0, 13421 FxOpen: 0, 13422 FxClose: 0, 13423 FxFilter: 0, 13424 FxNext: 0, 13425 FxEof: 0, 13426 FxColumn: 0, 13427 FxRowid: 0, 13428 FxUpdate: 0, 13429 } 13430 13431 func sqlite3_csv_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 13432 var rc int32 13433 _ = pApi 13434 13435 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4815, uintptr(unsafe.Pointer(&CsvModule)), uintptr(0)) 13436 if rc == SQLITE_OK { 13437 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4819, uintptr(unsafe.Pointer(&CsvModuleFauxWrite)), uintptr(0)) 13438 } 13439 return rc 13440 } 13441 13442 type Decimal1 = struct { 13443 Fsign int8 13444 Foom int8 13445 FisNull int8 13446 FisInit int8 13447 FnDigit int32 13448 FnFrac int32 13449 F__ccgo_pad1 [4]byte 13450 Fa uintptr 13451 } 13452 13453 type Decimal = Decimal1 13454 13455 func decimal_clear(tls *libc.TLS, p uintptr) { 13456 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(p)).Fa) 13457 } 13458 13459 func decimal_free(tls *libc.TLS, p uintptr) { 13460 if p != 0 { 13461 decimal_clear(tls, p) 13462 sqlite3.Xsqlite3_free(tls, p) 13463 } 13464 } 13465 13466 func decimal_new(tls *libc.TLS, pCtx uintptr, pIn uintptr, nAlt int32, zAlt uintptr) uintptr { 13467 var p uintptr 13468 var n int32 13469 var i int32 13470 var zIn uintptr 13471 var iExp int32 13472 var j int32 13473 var neg int32 13474 var c int8 13475 var nExtra int32 13476 iExp = 0 13477 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Decimal{}))) 13478 if !(p == uintptr(0)) { 13479 goto __1 13480 } 13481 goto new_no_mem 13482 __1: 13483 ; 13484 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 13485 (*Decimal)(unsafe.Pointer(p)).Foom = int8(0) 13486 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 13487 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(0) 13488 (*Decimal)(unsafe.Pointer(p)).FnDigit = 0 13489 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 13490 if !(zAlt != 0) { 13491 goto __2 13492 } 13493 n = nAlt 13494 zIn = zAlt 13495 goto __3 13496 __2: 13497 if !(sqlite3.Xsqlite3_value_type(tls, pIn) == SQLITE_NULL) { 13498 goto __4 13499 } 13500 (*Decimal)(unsafe.Pointer(p)).Fa = uintptr(0) 13501 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(1) 13502 return p 13503 __4: 13504 ; 13505 n = sqlite3.Xsqlite3_value_bytes(tls, pIn) 13506 zIn = sqlite3.Xsqlite3_value_text(tls, pIn) 13507 __3: 13508 ; 13509 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc64(tls, uint64(n+1)) 13510 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13511 goto __5 13512 } 13513 goto new_no_mem 13514 __5: 13515 ; 13516 i = 0 13517 __6: 13518 if !(libc.Xisspace(tls, int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i))))) != 0) { 13519 goto __8 13520 } 13521 goto __7 13522 __7: 13523 i++ 13524 goto __6 13525 goto __8 13526 __8: 13527 ; 13528 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '-') { 13529 goto __9 13530 } 13531 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(1) 13532 i++ 13533 goto __10 13534 __9: 13535 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '+') { 13536 goto __11 13537 } 13538 i++ 13539 __11: 13540 ; 13541 __10: 13542 ; 13543 __12: 13544 if !(i < n && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '0') { 13545 goto __13 13546 } 13547 i++ 13548 goto __12 13549 __13: 13550 ; 13551 __14: 13552 if !(i < n) { 13553 goto __15 13554 } 13555 c = int8(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) 13556 if !(int32(c) >= '0' && int32(c) <= '9') { 13557 goto __16 13558 } 13559 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncInt32(&(*Decimal)(unsafe.Pointer(p)).FnDigit, 1)))) = int8(int32(c) - '0') 13560 goto __17 13561 __16: 13562 if !(int32(c) == '.') { 13563 goto __18 13564 } 13565 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit + 1 13566 goto __19 13567 __18: 13568 if !(int32(c) == 'e' || int32(c) == 'E') { 13569 goto __20 13570 } 13571 j = i + 1 13572 neg = 0 13573 if !(j >= n) { 13574 goto __21 13575 } 13576 goto __15 13577 __21: 13578 ; 13579 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '-') { 13580 goto __22 13581 } 13582 neg = 1 13583 j++ 13584 goto __23 13585 __22: 13586 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '+') { 13587 goto __24 13588 } 13589 j++ 13590 __24: 13591 ; 13592 __23: 13593 ; 13594 __25: 13595 if !(j < n && iExp < 1000000) { 13596 goto __26 13597 } 13598 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) <= '9') { 13599 goto __27 13600 } 13601 iExp = iExp*10 + int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) - '0' 13602 __27: 13603 ; 13604 j++ 13605 goto __25 13606 __26: 13607 ; 13608 if !(neg != 0) { 13609 goto __28 13610 } 13611 iExp = -iExp 13612 __28: 13613 ; 13614 goto __15 13615 __20: 13616 ; 13617 __19: 13618 ; 13619 __17: 13620 ; 13621 i++ 13622 goto __14 13623 __15: 13624 ; 13625 if !((*Decimal)(unsafe.Pointer(p)).FnFrac != 0) { 13626 goto __29 13627 } 13628 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - ((*Decimal)(unsafe.Pointer(p)).FnFrac - 1) 13629 __29: 13630 ; 13631 if !(iExp > 0) { 13632 goto __30 13633 } 13634 if !((*Decimal)(unsafe.Pointer(p)).FnFrac > 0) { 13635 goto __32 13636 } 13637 if !(iExp <= (*Decimal)(unsafe.Pointer(p)).FnFrac) { 13638 goto __33 13639 } 13640 *(*int32)(unsafe.Pointer(p + 8)) -= iExp 13641 iExp = 0 13642 goto __34 13643 __33: 13644 iExp = iExp - (*Decimal)(unsafe.Pointer(p)).FnFrac 13645 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 13646 __34: 13647 ; 13648 __32: 13649 ; 13650 if !(iExp > 0) { 13651 goto __35 13652 } 13653 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 13654 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13655 goto __36 13656 } 13657 goto new_no_mem 13658 __36: 13659 ; 13660 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(iExp)) 13661 *(*int32)(unsafe.Pointer(p + 4)) += iExp 13662 __35: 13663 ; 13664 goto __31 13665 __30: 13666 if !(iExp < 0) { 13667 goto __37 13668 } 13669 iExp = -iExp 13670 nExtra = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac - 1 13671 if !(nExtra != 0) { 13672 goto __38 13673 } 13674 if !(nExtra >= iExp) { 13675 goto __39 13676 } 13677 *(*int32)(unsafe.Pointer(p + 8)) += iExp 13678 iExp = 0 13679 goto __40 13680 __39: 13681 iExp = iExp - nExtra 13682 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - 1 13683 __40: 13684 ; 13685 __38: 13686 ; 13687 if !(iExp > 0) { 13688 goto __41 13689 } 13690 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 13691 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 13692 goto __42 13693 } 13694 goto new_no_mem 13695 __42: 13696 ; 13697 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(iExp), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 13698 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(iExp)) 13699 *(*int32)(unsafe.Pointer(p + 4)) += iExp 13700 *(*int32)(unsafe.Pointer(p + 8)) += iExp 13701 __41: 13702 ; 13703 __37: 13704 ; 13705 __31: 13706 ; 13707 return p 13708 13709 new_no_mem: 13710 if !(pCtx != 0) { 13711 goto __43 13712 } 13713 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13714 __43: 13715 ; 13716 sqlite3.Xsqlite3_free(tls, p) 13717 return uintptr(0) 13718 } 13719 13720 func decimal_result(tls *libc.TLS, pCtx uintptr, p uintptr) { 13721 var z uintptr 13722 var i int32 13723 var j int32 13724 var n int32 13725 if p == uintptr(0) || (*Decimal)(unsafe.Pointer(p)).Foom != 0 { 13726 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13727 return 13728 } 13729 if (*Decimal)(unsafe.Pointer(p)).FisNull != 0 { 13730 sqlite3.Xsqlite3_result_null(tls, pCtx) 13731 return 13732 } 13733 z = sqlite3.Xsqlite3_malloc(tls, (*Decimal)(unsafe.Pointer(p)).FnDigit+4) 13734 if z == uintptr(0) { 13735 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 13736 return 13737 } 13738 i = 0 13739 if (*Decimal)(unsafe.Pointer(p)).FnDigit == 0 || (*Decimal)(unsafe.Pointer(p)).FnDigit == 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa))) == 0 { 13740 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 13741 } 13742 if (*Decimal)(unsafe.Pointer(p)).Fsign != 0 { 13743 *(*int8)(unsafe.Pointer(z)) = int8('-') 13744 i = 1 13745 } 13746 n = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac 13747 if n <= 0 { 13748 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('0') 13749 } 13750 j = 0 13751 for n > 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) == 0 { 13752 j++ 13753 n-- 13754 } 13755 for n > 0 { 13756 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 13757 j++ 13758 n-- 13759 } 13760 if (*Decimal)(unsafe.Pointer(p)).FnFrac != 0 { 13761 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('.') 13762 for __ccgo := true; __ccgo; __ccgo = j < (*Decimal)(unsafe.Pointer(p)).FnDigit { 13763 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 13764 j++ 13765 } 13766 } 13767 *(*int8)(unsafe.Pointer(z + uintptr(i))) = int8(0) 13768 sqlite3.Xsqlite3_result_text(tls, pCtx, z, i, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 13769 } 13770 13771 func decimalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13772 var p uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13773 _ = argc 13774 decimal_result(tls, context, p) 13775 decimal_free(tls, p) 13776 } 13777 13778 func decimal_cmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 13779 var nASig int32 13780 var nBSig int32 13781 var rc int32 13782 var n int32 13783 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) != int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 13784 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 13785 return -1 13786 } 13787 return +1 13788 } 13789 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 13790 var pTemp uintptr = pA 13791 pA = pB 13792 pB = pTemp 13793 } 13794 nASig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 13795 nBSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 13796 if nASig != nBSig { 13797 return nASig - nBSig 13798 } 13799 n = (*Decimal)(unsafe.Pointer(pA)).FnDigit 13800 if n > (*Decimal)(unsafe.Pointer(pB)).FnDigit { 13801 n = (*Decimal)(unsafe.Pointer(pB)).FnDigit 13802 } 13803 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(n)) 13804 if rc == 0 { 13805 rc = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnDigit 13806 } 13807 return rc 13808 } 13809 13810 func decimalCmpFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13811 var pA uintptr 13812 var pB uintptr 13813 var rc int32 13814 pA = uintptr(0) 13815 pB = uintptr(0) 13816 13817 _ = argc 13818 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13819 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0) { 13820 goto __1 13821 } 13822 goto cmp_done 13823 __1: 13824 ; 13825 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 13826 if !(pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 13827 goto __2 13828 } 13829 goto cmp_done 13830 __2: 13831 ; 13832 rc = decimal_cmp(tls, pA, pB) 13833 if !(rc < 0) { 13834 goto __3 13835 } 13836 rc = -1 13837 goto __4 13838 __3: 13839 if !(rc > 0) { 13840 goto __5 13841 } 13842 rc = +1 13843 __5: 13844 ; 13845 __4: 13846 ; 13847 sqlite3.Xsqlite3_result_int(tls, context, rc) 13848 cmp_done: 13849 decimal_free(tls, pA) 13850 decimal_free(tls, pB) 13851 } 13852 13853 func decimal_expand(tls *libc.TLS, p uintptr, nDigit int32, nFrac int32) { 13854 var nAddSig int32 13855 var nAddFrac int32 13856 if p == uintptr(0) { 13857 return 13858 } 13859 nAddFrac = nFrac - (*Decimal)(unsafe.Pointer(p)).FnFrac 13860 nAddSig = nDigit - (*Decimal)(unsafe.Pointer(p)).FnDigit - nAddFrac 13861 if nAddFrac == 0 && nAddSig == 0 { 13862 return 13863 } 13864 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64(nDigit+1)) 13865 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 13866 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 13867 return 13868 } 13869 if nAddSig != 0 { 13870 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(nAddSig), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 13871 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(nAddSig)) 13872 *(*int32)(unsafe.Pointer(p + 4)) += nAddSig 13873 } 13874 if nAddFrac != 0 { 13875 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(nAddFrac)) 13876 *(*int32)(unsafe.Pointer(p + 4)) += nAddFrac 13877 *(*int32)(unsafe.Pointer(p + 8)) += nAddFrac 13878 } 13879 } 13880 13881 func decimal_add(tls *libc.TLS, pA uintptr, pB uintptr) { 13882 var nSig int32 13883 var nFrac int32 13884 var nDigit int32 13885 var i int32 13886 var rc int32 13887 if pA == uintptr(0) { 13888 return 13889 } 13890 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 13891 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 13892 return 13893 } 13894 if (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0 { 13895 (*Decimal)(unsafe.Pointer(pA)).FisNull = int8(1) 13896 return 13897 } 13898 nSig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 13899 if nSig != 0 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa))) == 0 { 13900 nSig-- 13901 } 13902 if nSig < (*Decimal)(unsafe.Pointer(pB)).FnDigit-(*Decimal)(unsafe.Pointer(pB)).FnFrac { 13903 nSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 13904 } 13905 nFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 13906 if nFrac < (*Decimal)(unsafe.Pointer(pB)).FnFrac { 13907 nFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 13908 } 13909 nDigit = nSig + nFrac + 1 13910 decimal_expand(tls, pA, nDigit, nFrac) 13911 decimal_expand(tls, pB, nDigit, nFrac) 13912 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 13913 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 13914 } else { 13915 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) == int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 13916 var carry int32 = 0 13917 for i = nDigit - 1; i >= 0; i-- { 13918 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 13919 if x >= 10 { 13920 carry = 1 13921 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x - 10) 13922 } else { 13923 carry = 0 13924 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 13925 } 13926 } 13927 } else { 13928 var aA uintptr 13929 var aB uintptr 13930 var borrow int32 = 0 13931 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(nDigit)) 13932 if rc < 0 { 13933 aA = (*Decimal)(unsafe.Pointer(pB)).Fa 13934 aB = (*Decimal)(unsafe.Pointer(pA)).Fa 13935 (*Decimal)(unsafe.Pointer(pA)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pA)).Fsign != 0)) 13936 } else { 13937 aA = (*Decimal)(unsafe.Pointer(pA)).Fa 13938 aB = (*Decimal)(unsafe.Pointer(pB)).Fa 13939 } 13940 for i = nDigit - 1; i >= 0; i-- { 13941 var x int32 = int32(*(*int8)(unsafe.Pointer(aA + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(aB + uintptr(i)))) - borrow 13942 if x < 0 { 13943 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x + 10) 13944 borrow = 1 13945 } else { 13946 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 13947 borrow = 0 13948 } 13949 } 13950 } 13951 } 13952 } 13953 13954 func decimalCollFunc(tls *libc.TLS, notUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 13955 var zA uintptr = pKey1 13956 var zB uintptr = pKey2 13957 var pA uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey1, zA) 13958 var pB uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey2, zB) 13959 var rc int32 13960 _ = notUsed 13961 if pA == uintptr(0) || pB == uintptr(0) { 13962 rc = 0 13963 } else { 13964 rc = decimal_cmp(tls, pA, pB) 13965 } 13966 decimal_free(tls, pA) 13967 decimal_free(tls, pB) 13968 return rc 13969 } 13970 13971 func decimalAddFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13972 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13973 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 13974 _ = argc 13975 decimal_add(tls, pA, pB) 13976 decimal_result(tls, context, pA) 13977 decimal_free(tls, pA) 13978 decimal_free(tls, pB) 13979 } 13980 13981 func decimalSubFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13982 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 13983 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 13984 _ = argc 13985 if pB != 0 { 13986 (*Decimal)(unsafe.Pointer(pB)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pB)).Fsign != 0)) 13987 decimal_add(tls, pA, pB) 13988 decimal_result(tls, context, pA) 13989 } 13990 decimal_free(tls, pA) 13991 decimal_free(tls, pB) 13992 } 13993 13994 func decimalSumStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 13995 var p uintptr 13996 var pArg uintptr 13997 _ = argc 13998 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 13999 if p == uintptr(0) { 14000 return 14001 } 14002 if !(int32((*Decimal)(unsafe.Pointer(p)).FisInit) != 0) { 14003 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 14004 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc(tls, 2) 14005 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14006 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 14007 } else { 14008 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa)) = int8(0) 14009 } 14010 (*Decimal)(unsafe.Pointer(p)).FnDigit = 1 14011 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14012 } 14013 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14014 return 14015 } 14016 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14017 decimal_add(tls, p, pArg) 14018 decimal_free(tls, pArg) 14019 } 14020 14021 func decimalSumInverse(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14022 var p uintptr 14023 var pArg uintptr 14024 _ = argc 14025 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14026 if p == uintptr(0) { 14027 return 14028 } 14029 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14030 return 14031 } 14032 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14033 if pArg != 0 { 14034 (*Decimal)(unsafe.Pointer(pArg)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pArg)).Fsign != 0)) 14035 } 14036 decimal_add(tls, p, pArg) 14037 decimal_free(tls, pArg) 14038 } 14039 14040 func decimalSumValue(tls *libc.TLS, context uintptr) { 14041 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14042 if p == uintptr(0) { 14043 return 14044 } 14045 decimal_result(tls, context, p) 14046 } 14047 14048 func decimalSumFinalize(tls *libc.TLS, context uintptr) { 14049 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14050 if p == uintptr(0) { 14051 return 14052 } 14053 decimal_result(tls, context, p) 14054 decimal_clear(tls, p) 14055 } 14056 14057 func decimalMulFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14058 var pA uintptr 14059 var pB uintptr 14060 var acc uintptr 14061 var i int32 14062 var j int32 14063 var k int32 14064 var minFrac int32 14065 var f int8 14066 var carry int32 14067 var x int32 14068 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14069 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14070 acc = uintptr(0) 14071 _ = argc 14072 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || 14073 pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14074 goto __1 14075 } 14076 goto mul_end 14077 __1: 14078 ; 14079 acc = sqlite3.Xsqlite3_malloc64(tls, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14080 if !(acc == uintptr(0)) { 14081 goto __2 14082 } 14083 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14084 goto mul_end 14085 __2: 14086 ; 14087 libc.Xmemset(tls, acc, 0, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14088 minFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14089 if !((*Decimal)(unsafe.Pointer(pB)).FnFrac < minFrac) { 14090 goto __3 14091 } 14092 minFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14093 __3: 14094 ; 14095 i = (*Decimal)(unsafe.Pointer(pA)).FnDigit - 1 14096 __4: 14097 if !(i >= 0) { 14098 goto __6 14099 } 14100 f = *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) 14101 carry = 0 14102 j = (*Decimal)(unsafe.Pointer(pB)).FnDigit - 1 14103 k = i + j + 3 14104 __7: 14105 if !(j >= 0) { 14106 goto __9 14107 } 14108 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + int32(f)*int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pB)).Fa + uintptr(j)))) + carry 14109 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14110 carry = x / 10 14111 goto __8 14112 __8: 14113 j-- 14114 k-- 14115 goto __7 14116 goto __9 14117 __9: 14118 ; 14119 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + carry 14120 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14121 *(*int8)(unsafe.Pointer(acc + uintptr(k-1))) += int8(x / 10) 14122 goto __5 14123 __5: 14124 i-- 14125 goto __4 14126 goto __6 14127 __6: 14128 ; 14129 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(pA)).Fa) 14130 (*Decimal)(unsafe.Pointer(pA)).Fa = acc 14131 acc = uintptr(0) 14132 *(*int32)(unsafe.Pointer(pA + 4)) += (*Decimal)(unsafe.Pointer(pB)).FnDigit + 2 14133 *(*int32)(unsafe.Pointer(pA + 8)) += (*Decimal)(unsafe.Pointer(pB)).FnFrac 14134 *(*int8)(unsafe.Pointer(pA)) ^= int8(int32((*Decimal)(unsafe.Pointer(pB)).Fsign)) 14135 __10: 14136 if !((*Decimal)(unsafe.Pointer(pA)).FnFrac > minFrac && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr((*Decimal)(unsafe.Pointer(pA)).FnDigit-1)))) == 0) { 14137 goto __11 14138 } 14139 (*Decimal)(unsafe.Pointer(pA)).FnFrac-- 14140 (*Decimal)(unsafe.Pointer(pA)).FnDigit-- 14141 goto __10 14142 __11: 14143 ; 14144 decimal_result(tls, context, pA) 14145 14146 mul_end: 14147 sqlite3.Xsqlite3_free(tls, acc) 14148 decimal_free(tls, pA) 14149 decimal_free(tls, pB) 14150 } 14151 14152 func sqlite3_decimal_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14153 var rc int32 = SQLITE_OK 14154 var i uint32 14155 _ = pzErrMsg 14156 14157 _ = pApi 14158 14159 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc))/uint64(unsafe.Sizeof(struct { 14160 FzFuncName uintptr 14161 FnArg int32 14162 F__ccgo_pad1 [4]byte 14163 FxFunc uintptr 14164 }{})) && rc == SQLITE_OK; i++ { 14165 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc[i].FzFuncName, aFunc[i].FnArg, 14166 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 14167 uintptr(0), aFunc[i].FxFunc, uintptr(0), uintptr(0)) 14168 } 14169 if rc == SQLITE_OK { 14170 rc = sqlite3.Xsqlite3_create_window_function(tls, db, ts+4826, 1, 14171 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, uintptr(0), 14172 *(*uintptr)(unsafe.Pointer(&struct { 14173 f func(*libc.TLS, uintptr, int32, uintptr) 14174 }{decimalSumStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumFinalize})), 14175 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumValue})), *(*uintptr)(unsafe.Pointer(&struct { 14176 f func(*libc.TLS, uintptr, int32, uintptr) 14177 }{decimalSumInverse})), uintptr(0)) 14178 } 14179 if rc == SQLITE_OK { 14180 rc = sqlite3.Xsqlite3_create_collation(tls, db, ts+4838, SQLITE_UTF8, 14181 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 14182 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 14183 }{decimalCollFunc}))) 14184 } 14185 return rc 14186 } 14187 14188 var aFunc = [5]struct { 14189 FzFuncName uintptr 14190 FnArg int32 14191 F__ccgo_pad1 [4]byte 14192 FxFunc uintptr 14193 }{ 14194 {FzFuncName: ts + 4838, FnArg: 1, FxFunc: 0}, 14195 {FzFuncName: ts + 4846, FnArg: 2, FxFunc: 0}, 14196 {FzFuncName: ts + 4858, FnArg: 2, FxFunc: 0}, 14197 {FzFuncName: ts + 4870, FnArg: 2, FxFunc: 0}, 14198 {FzFuncName: ts + 4882, FnArg: 2, FxFunc: 0}, 14199 } 14200 14201 type EvalResult = struct { 14202 Fz uintptr 14203 FzSep uintptr 14204 FszSep int32 14205 F__ccgo_pad1 [4]byte 14206 FnAlloc sqlite3_int64 14207 FnUsed sqlite3_int64 14208 } 14209 14210 func callback(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr, colnames uintptr) int32 { 14211 var p uintptr = pCtx 14212 var i int32 14213 if argv == uintptr(0) { 14214 return 0 14215 } 14216 for i = 0; i < argc; i++ { 14217 var z uintptr 14218 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 14219 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 14220 } else { 14221 z = ts + 584 14222 } 14223 var sz size_t = libc.Xstrlen(tls, z) 14224 if sqlite3_int64(sz)+(*EvalResult)(unsafe.Pointer(p)).FnUsed+sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep)+int64(1) > (*EvalResult)(unsafe.Pointer(p)).FnAlloc { 14225 var zNew uintptr 14226 (*EvalResult)(unsafe.Pointer(p)).FnAlloc = sqlite3_int64(uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc*int64(2)) + sz + uint64((*EvalResult)(unsafe.Pointer(p)).FszSep) + uint64(1)) 14227 14228 if (*EvalResult)(unsafe.Pointer(p)).FnAlloc <= int64(0x7fffffff) { 14229 zNew = sqlite3.Xsqlite3_realloc64(tls, (*EvalResult)(unsafe.Pointer(p)).Fz, uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc)) 14230 } else { 14231 zNew = uintptr(0) 14232 } 14233 if zNew == uintptr(0) { 14234 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(p)).Fz) 14235 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EvalResult{}))) 14236 return 1 14237 } 14238 (*EvalResult)(unsafe.Pointer(p)).Fz = zNew 14239 } 14240 if (*EvalResult)(unsafe.Pointer(p)).FnUsed > int64(0) { 14241 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)) 14242 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep) 14243 } 14244 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), z, sz) 14245 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64(sz) 14246 } 14247 return 0 14248 } 14249 14250 func sqlEvalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14251 bp := tls.Alloc(48) 14252 defer tls.Free(48) 14253 14254 var zSql uintptr 14255 var db uintptr 14256 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 14257 var rc int32 14258 14259 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(EvalResult{}))) 14260 (*EvalResult)(unsafe.Pointer(bp)).FzSep = ts + 4894 14261 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14262 if zSql == uintptr(0) { 14263 return 14264 } 14265 if argc > 1 { 14266 (*EvalResult)(unsafe.Pointer(bp)).FzSep = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 14267 if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14268 return 14269 } 14270 } 14271 (*EvalResult)(unsafe.Pointer(bp)).FszSep = int32(libc.Xstrlen(tls, (*EvalResult)(unsafe.Pointer(bp)).FzSep)) 14272 db = sqlite3.Xsqlite3_context_db_handle(tls, context) 14273 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, *(*uintptr)(unsafe.Pointer(&struct { 14274 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 14275 }{callback})), bp, bp+40) 14276 if rc != SQLITE_OK { 14277 sqlite3.Xsqlite3_result_error(tls, context, *(*uintptr)(unsafe.Pointer(bp + 40)), -1) 14278 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 14279 } else if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14280 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14281 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(bp)).Fz) 14282 } else { 14283 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}))) 14284 } 14285 } 14286 14287 func sqlite3_eval_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14288 var rc int32 = SQLITE_OK 14289 _ = pApi 14290 14291 _ = pzErrMsg 14292 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 1, 14293 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14294 *(*uintptr)(unsafe.Pointer(&struct { 14295 f func(*libc.TLS, uintptr, int32, uintptr) 14296 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14297 if rc == SQLITE_OK { 14298 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 2, 14299 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14300 *(*uintptr)(unsafe.Pointer(&struct { 14301 f func(*libc.TLS, uintptr, int32, uintptr) 14302 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14303 } 14304 return rc 14305 } 14306 14307 type explain_vtab1 = struct { 14308 Fbase sqlite3_vtab 14309 Fdb uintptr 14310 } 14311 14312 type explain_vtab = explain_vtab1 14313 14314 type explain_cursor1 = struct { 14315 Fbase sqlite3_vtab_cursor 14316 Fdb uintptr 14317 FzSql uintptr 14318 FpExplain uintptr 14319 Frc int32 14320 F__ccgo_pad1 [4]byte 14321 } 14322 14323 type explain_cursor = explain_cursor1 14324 14325 func explainConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 14326 var pNew uintptr 14327 var rc int32 14328 14329 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 14330 ts+4901) 14331 if rc == SQLITE_OK { 14332 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_vtab{}))) 14333 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 14334 if pNew == uintptr(0) { 14335 return SQLITE_NOMEM 14336 } 14337 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(explain_vtab{}))) 14338 (*explain_vtab)(unsafe.Pointer(pNew)).Fdb = db 14339 } 14340 return rc 14341 } 14342 14343 func explainDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 14344 sqlite3.Xsqlite3_free(tls, pVtab) 14345 return SQLITE_OK 14346 } 14347 14348 func explainOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 14349 var pCur uintptr 14350 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_cursor{}))) 14351 if pCur == uintptr(0) { 14352 return SQLITE_NOMEM 14353 } 14354 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(explain_cursor{}))) 14355 (*explain_cursor)(unsafe.Pointer(pCur)).Fdb = (*explain_vtab)(unsafe.Pointer(p)).Fdb 14356 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 14357 return SQLITE_OK 14358 } 14359 14360 func explainClose(tls *libc.TLS, cur uintptr) int32 { 14361 var pCur uintptr = cur 14362 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14363 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14364 sqlite3.Xsqlite3_free(tls, pCur) 14365 return SQLITE_OK 14366 } 14367 14368 func explainNext(tls *libc.TLS, cur uintptr) int32 { 14369 var pCur uintptr = cur 14370 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14371 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_DONE && (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW { 14372 return (*explain_cursor)(unsafe.Pointer(pCur)).Frc 14373 } 14374 return SQLITE_OK 14375 } 14376 14377 func explainColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 14378 var pCur uintptr = cur 14379 if i == EXPLN_COLUMN_SQL { 14380 sqlite3.Xsqlite3_result_text(tls, ctx, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql, -1, libc.UintptrFromInt32(-1)) 14381 } else { 14382 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, i)) 14383 } 14384 return SQLITE_OK 14385 } 14386 14387 func explainRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 14388 var pCur uintptr = cur 14389 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, 0) 14390 return SQLITE_OK 14391 } 14392 14393 func explainEof(tls *libc.TLS, cur uintptr) int32 { 14394 var pCur uintptr = cur 14395 return libc.Bool32((*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW) 14396 } 14397 14398 func explainFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 14399 bp := tls.Alloc(16) 14400 defer tls.Free(16) 14401 14402 var pCur uintptr = pVtabCursor 14403 var zSql uintptr = uintptr(0) 14404 var rc int32 14405 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14406 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 14407 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_TEXT { 14408 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = SQLITE_DONE 14409 return SQLITE_OK 14410 } 14411 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14412 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 14413 if (*explain_cursor)(unsafe.Pointer(pCur)).FzSql != 0 { 14414 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+4963, libc.VaList(bp+8, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql)) 14415 } 14416 if zSql == uintptr(0) { 14417 rc = SQLITE_NOMEM 14418 } else { 14419 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*explain_cursor)(unsafe.Pointer(pCur)).Fdb, zSql, -1, pCur+24, uintptr(0)) 14420 sqlite3.Xsqlite3_free(tls, zSql) 14421 } 14422 if rc != 0 { 14423 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14424 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 14425 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14426 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = uintptr(0) 14427 } else { 14428 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14429 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_DONE || (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_ROW { 14430 rc = SQLITE_OK 14431 } else { 14432 rc = (*explain_cursor)(unsafe.Pointer(pCur)).Frc 14433 } 14434 } 14435 return rc 14436 } 14437 14438 func explainBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 14439 var i int32 14440 var idx int32 = -1 14441 var unusable int32 = 0 14442 14443 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(500) 14444 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 14445 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 14446 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != EXPLN_COLUMN_SQL { 14447 continue 14448 } 14449 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 14450 unusable = 1 14451 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 14452 idx = i 14453 } 14454 } 14455 if idx >= 0 { 14456 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 14457 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 14458 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).FargvIndex = 1 14459 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).Fomit = uint8(1) 14460 } else if unusable != 0 { 14461 return SQLITE_CONSTRAINT 14462 } 14463 return SQLITE_OK 14464 } 14465 14466 var explainModule = sqlite3_module{ 14467 FxConnect: 0, 14468 FxBestIndex: 0, 14469 FxDisconnect: 0, 14470 FxOpen: 0, 14471 FxClose: 0, 14472 FxFilter: 0, 14473 FxNext: 0, 14474 FxEof: 0, 14475 FxColumn: 0, 14476 FxRowid: 0, 14477 } 14478 14479 func sqlite3ExplainVtabInit(tls *libc.TLS, db uintptr) int32 { 14480 var rc int32 = SQLITE_OK 14481 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4974, uintptr(unsafe.Pointer(&explainModule)), uintptr(0)) 14482 return rc 14483 } 14484 14485 func sqlite3_explain_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14486 var rc int32 = SQLITE_OK 14487 _ = pApi 14488 14489 rc = sqlite3ExplainVtabInit(tls, db) 14490 return rc 14491 } 14492 14493 type timeval = struct { 14494 Ftv_sec time_t 14495 Ftv_usec suseconds_t 14496 } 14497 14498 type timespec = struct { 14499 Ftv_sec time_t 14500 Ftv_nsec int64 14501 } 14502 14503 type fd_set1 = struct{ Ffds_bits [32]uint32 } 14504 14505 type fd_set = fd_set1 14506 14507 type sigset_t = uint32 14508 14509 type timezone = struct { 14510 Ftz_minuteswest int32 14511 Ftz_dsttime int32 14512 } 14513 14514 type itimerval = struct { 14515 Fit_interval struct { 14516 Ftv_sec time_t 14517 Ftv_usec suseconds_t 14518 } 14519 Fit_value struct { 14520 Ftv_sec time_t 14521 Ftv_usec suseconds_t 14522 } 14523 } 14524 14525 type clockinfo = struct { 14526 Fhz int32 14527 Ftick int32 14528 Fstathz int32 14529 Fprofhz int32 14530 } 14531 14532 type itimerspec = struct { 14533 Fit_interval struct { 14534 Ftv_sec time_t 14535 Ftv_nsec int64 14536 } 14537 Fit_value struct { 14538 Ftv_sec time_t 14539 Ftv_nsec int64 14540 } 14541 } 14542 14543 type tm = struct { 14544 Ftm_sec int32 14545 Ftm_min int32 14546 Ftm_hour int32 14547 Ftm_mday int32 14548 Ftm_mon int32 14549 Ftm_year int32 14550 Ftm_wday int32 14551 Ftm_yday int32 14552 Ftm_isdst int32 14553 F__ccgo_pad1 [4]byte 14554 Ftm_gmtoff int64 14555 Ftm_zone uintptr 14556 } 14557 14558 type flock = struct { 14559 Fl_start off_t 14560 Fl_len off_t 14561 Fl_pid pid_t 14562 Fl_type int16 14563 Fl_whence int16 14564 } 14565 14566 type __tfork = struct { 14567 Ftf_tcb uintptr 14568 Ftf_tid uintptr 14569 Ftf_stack uintptr 14570 } 14571 14572 type __kbind = struct { 14573 Fkb_addr uintptr 14574 Fkb_size size_t 14575 } 14576 14577 type intptr_t = int64 14578 14579 type dirent = struct { 14580 Fd_fileno uint64 14581 Fd_off int64 14582 Fd_reclen uint16 14583 Fd_type uint8 14584 Fd_namlen uint8 14585 F__d_padding [4]uint8 14586 Fd_name [256]int8 14587 } 14588 14589 func readFileContents(tls *libc.TLS, ctx uintptr, zName uintptr) { 14590 var in uintptr 14591 var nIn sqlite3_int64 14592 var pBuf uintptr 14593 var db uintptr 14594 var mxBlob int32 14595 14596 in = libc.Xfopen(tls, zName, ts+4402) 14597 if in == uintptr(0) { 14598 return 14599 } 14600 libc.Xfseek(tls, in, int64(0), SEEK_END) 14601 nIn = libc.Xftell(tls, in) 14602 libc.Xrewind(tls, in) 14603 db = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 14604 mxBlob = sqlite3.Xsqlite3_limit(tls, db, SQLITE_LIMIT_LENGTH, -1) 14605 if nIn > sqlite3_int64(mxBlob) { 14606 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_TOOBIG) 14607 libc.Xfclose(tls, in) 14608 return 14609 } 14610 pBuf = sqlite3.Xsqlite3_malloc64(tls, func() uint64 { 14611 if nIn != 0 { 14612 return uint64(nIn) 14613 } 14614 return uint64(1) 14615 }()) 14616 if pBuf == uintptr(0) { 14617 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 14618 libc.Xfclose(tls, in) 14619 return 14620 } 14621 if nIn == sqlite3_int64(libc.Xfread(tls, pBuf, uint64(1), size_t(nIn), in)) { 14622 sqlite3.Xsqlite3_result_blob64(tls, ctx, pBuf, uint64(nIn), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 14623 } else { 14624 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_IOERR) 14625 sqlite3.Xsqlite3_free(tls, pBuf) 14626 } 14627 libc.Xfclose(tls, in) 14628 } 14629 14630 func readfileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14631 var zName uintptr 14632 _ = argc 14633 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14634 if zName == uintptr(0) { 14635 return 14636 } 14637 readFileContents(tls, context, zName) 14638 } 14639 14640 func ctxErrorMsg(tls *libc.TLS, ctx uintptr, zFmt uintptr, va uintptr) { 14641 var zMsg uintptr = uintptr(0) 14642 var ap va_list 14643 _ = ap 14644 ap = va 14645 zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 14646 sqlite3.Xsqlite3_result_error(tls, ctx, zMsg, -1) 14647 sqlite3.Xsqlite3_free(tls, zMsg) 14648 _ = ap 14649 } 14650 14651 func fileStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 14652 return libc.Xstat(tls, zPath, pStatBuf) 14653 } 14654 14655 func fileLinkStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 14656 return libc.Xlstat(tls, zPath, pStatBuf) 14657 } 14658 14659 func makeDirectory(tls *libc.TLS, zFile uintptr) int32 { 14660 bp := tls.Alloc(136) 14661 defer tls.Free(136) 14662 14663 var zCopy uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zFile)) 14664 var rc int32 = SQLITE_OK 14665 14666 if zCopy == uintptr(0) { 14667 rc = SQLITE_NOMEM 14668 } else { 14669 var nCopy int32 = int32(libc.Xstrlen(tls, zCopy)) 14670 var i int32 = 1 14671 14672 for rc == SQLITE_OK { 14673 var rc2 int32 14674 14675 for ; int32(*(*int8)(unsafe.Pointer(zCopy + uintptr(i)))) != '/' && i < nCopy; i++ { 14676 } 14677 if i == nCopy { 14678 break 14679 } 14680 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8(0) 14681 14682 rc2 = fileStat(tls, zCopy, bp+8) 14683 if rc2 != 0 { 14684 if libc.Xmkdir(tls, zCopy, uint32(0777)) != 0 { 14685 rc = SQLITE_ERROR 14686 } 14687 } else { 14688 if !((*stat)(unsafe.Pointer(bp+8)).Fst_mode&mode_t(0170000) == mode_t(0040000)) { 14689 rc = SQLITE_ERROR 14690 } 14691 } 14692 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8('/') 14693 i++ 14694 } 14695 14696 sqlite3.Xsqlite3_free(tls, zCopy) 14697 } 14698 14699 return rc 14700 } 14701 14702 func writeFile(tls *libc.TLS, pCtx uintptr, zFile uintptr, pData uintptr, mode mode_t, mtime sqlite3_int64) int32 { 14703 bp := tls.Alloc(160) 14704 defer tls.Free(160) 14705 14706 if zFile == uintptr(0) { 14707 return 1 14708 } 14709 if mode&mode_t(0170000) == mode_t(0120000) { 14710 var zTo uintptr = sqlite3.Xsqlite3_value_text(tls, pData) 14711 if zTo == uintptr(0) || libc.Xsymlink(tls, zTo, zFile) < 0 { 14712 return 1 14713 } 14714 } else { 14715 if mode&mode_t(0170000) == mode_t(0040000) { 14716 if libc.Xmkdir(tls, zFile, mode) != 0 { 14717 if *(*int32)(unsafe.Pointer(libc.X__errno(tls))) != EEXIST || 14718 0 != fileStat(tls, zFile, bp) || 14719 !((*stat)(unsafe.Pointer(bp)).Fst_mode&mode_t(0170000) == mode_t(0040000)) || 14720 (*stat)(unsafe.Pointer(bp)).Fst_mode&mode_t(0777) != mode&mode_t(0777) && 0 != libc.Xchmod(tls, zFile, mode&mode_t(0777)) { 14721 return 1 14722 } 14723 } 14724 } else { 14725 var nWrite sqlite3_int64 = int64(0) 14726 var z uintptr 14727 var rc int32 = 0 14728 var out uintptr = libc.Xfopen(tls, zFile, ts+4982) 14729 if out == uintptr(0) { 14730 return 1 14731 } 14732 z = sqlite3.Xsqlite3_value_blob(tls, pData) 14733 if z != 0 { 14734 var n sqlite3_int64 = sqlite3_int64(libc.Xfwrite(tls, z, uint64(1), uint64(sqlite3.Xsqlite3_value_bytes(tls, pData)), out)) 14735 nWrite = sqlite3_int64(sqlite3.Xsqlite3_value_bytes(tls, pData)) 14736 if nWrite != n { 14737 rc = 1 14738 } 14739 } 14740 libc.Xfclose(tls, out) 14741 if rc == 0 && mode != 0 && libc.Xchmod(tls, zFile, mode&mode_t(0777)) != 0 { 14742 rc = 1 14743 } 14744 if rc != 0 { 14745 return 2 14746 } 14747 sqlite3.Xsqlite3_result_int64(tls, pCtx, nWrite) 14748 } 14749 } 14750 14751 if mtime >= int64(0) { 14752 (*timeval)(unsafe.Pointer(bp + 128)).Ftv_usec = libc.AssignPtrInt64(bp+128+1*16+8, int64(0)) 14753 (*timeval)(unsafe.Pointer(bp + 128)).Ftv_sec = libc.Xtime(tls, uintptr(0)) 14754 (*timeval)(unsafe.Pointer(bp + 128 + 1*16)).Ftv_sec = mtime 14755 if libc.Xutimes(tls, zFile, bp+128) != 0 { 14756 return 1 14757 } 14758 } 14759 14760 return 0 14761 } 14762 14763 func writefileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14764 bp := tls.Alloc(24) 14765 defer tls.Free(24) 14766 14767 var zFile uintptr 14768 var mode mode_t = mode_t(0) 14769 var res int32 14770 var mtime sqlite3_int64 = int64(-1) 14771 14772 if argc < 2 || argc > 4 { 14773 sqlite3.Xsqlite3_result_error(tls, context, 14774 ts+4985, -1) 14775 return 14776 } 14777 14778 zFile = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14779 if zFile == uintptr(0) { 14780 return 14781 } 14782 if argc >= 3 { 14783 mode = mode_t(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 14784 } 14785 if argc == 4 { 14786 mtime = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 14787 } 14788 14789 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 14790 if res == 1 && *(*int32)(unsafe.Pointer(libc.X__errno(tls))) == ENOENT { 14791 if makeDirectory(tls, zFile) == SQLITE_OK { 14792 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 14793 } 14794 } 14795 14796 if argc > 2 && res != 0 { 14797 if mode&mode_t(0170000) == mode_t(0120000) { 14798 ctxErrorMsg(tls, context, ts+5035, libc.VaList(bp, zFile)) 14799 } else if mode&mode_t(0170000) == mode_t(0040000) { 14800 ctxErrorMsg(tls, context, ts+5064, libc.VaList(bp+8, zFile)) 14801 } else { 14802 ctxErrorMsg(tls, context, ts+5095, libc.VaList(bp+16, zFile)) 14803 } 14804 } 14805 } 14806 14807 func lsModeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14808 bp := tls.Alloc(16) 14809 defer tls.Free(16) 14810 14811 var i int32 14812 var iMode int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 14813 14814 _ = argc 14815 if iMode&0170000 == 0120000 { 14816 *(*int8)(unsafe.Pointer(bp)) = int8('l') 14817 } else if iMode&0170000 == 0100000 { 14818 *(*int8)(unsafe.Pointer(bp)) = int8('-') 14819 } else if iMode&0170000 == 0040000 { 14820 *(*int8)(unsafe.Pointer(bp)) = int8('d') 14821 } else { 14822 *(*int8)(unsafe.Pointer(bp)) = int8('?') 14823 } 14824 for i = 0; i < 3; i++ { 14825 var m int32 = iMode >> ((2 - i) * 3) 14826 var a uintptr = bp + uintptr(1+i*3) 14827 *(*int8)(unsafe.Pointer(a)) = func() int8 { 14828 if m&0x4 != 0 { 14829 return int8('r') 14830 } 14831 return int8('-') 14832 }() 14833 *(*int8)(unsafe.Pointer(a + 1)) = func() int8 { 14834 if m&0x2 != 0 { 14835 return int8('w') 14836 } 14837 return int8('-') 14838 }() 14839 *(*int8)(unsafe.Pointer(a + 2)) = func() int8 { 14840 if m&0x1 != 0 { 14841 return int8('x') 14842 } 14843 return int8('-') 14844 }() 14845 } 14846 *(*int8)(unsafe.Pointer(bp + 10)) = int8(0) 14847 sqlite3.Xsqlite3_result_text(tls, context, bp, -1, libc.UintptrFromInt32(-1)) 14848 } 14849 14850 type fsdir_cursor1 = struct { 14851 Fbase sqlite3_vtab_cursor 14852 FnLvl int32 14853 FiLvl int32 14854 FaLvl uintptr 14855 FzBase uintptr 14856 FnBase int32 14857 F__ccgo_pad1 [4]byte 14858 FsStat struct { 14859 Fst_mode mode_t 14860 Fst_dev dev_t 14861 Fst_ino ino_t 14862 Fst_nlink nlink_t 14863 Fst_uid uid_t 14864 Fst_gid gid_t 14865 Fst_rdev dev_t 14866 Fst_atim struct { 14867 Ftv_sec time_t 14868 Ftv_nsec int64 14869 } 14870 Fst_mtim struct { 14871 Ftv_sec time_t 14872 Ftv_nsec int64 14873 } 14874 Fst_ctim struct { 14875 Ftv_sec time_t 14876 Ftv_nsec int64 14877 } 14878 Fst_size off_t 14879 Fst_blocks blkcnt_t 14880 Fst_blksize blksize_t 14881 Fst_flags u_int32_t 14882 Fst_gen u_int32_t 14883 F__ccgo_pad1 [4]byte 14884 F__st_birthtim struct { 14885 Ftv_sec time_t 14886 Ftv_nsec int64 14887 } 14888 } 14889 FzPath uintptr 14890 FiRowid sqlite3_int64 14891 } 14892 14893 type fsdir_cursor = fsdir_cursor1 14894 type FsdirLevel1 = struct { 14895 FpDir uintptr 14896 FzDir uintptr 14897 } 14898 14899 type FsdirLevel = FsdirLevel1 14900 14901 type fsdir_tab1 = struct{ Fbase sqlite3_vtab } 14902 14903 type fsdir_tab = fsdir_tab1 14904 14905 func fsdirConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 14906 var pNew uintptr = uintptr(0) 14907 var rc int32 14908 _ = pAux 14909 _ = argc 14910 _ = argv 14911 _ = pzErr 14912 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5120) 14913 if rc == SQLITE_OK { 14914 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_tab{}))) 14915 if pNew == uintptr(0) { 14916 return SQLITE_NOMEM 14917 } 14918 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fsdir_tab{}))) 14919 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 14920 } 14921 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 14922 return rc 14923 } 14924 14925 func fsdirDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 14926 sqlite3.Xsqlite3_free(tls, pVtab) 14927 return SQLITE_OK 14928 } 14929 14930 func fsdirOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 14931 var pCur uintptr 14932 _ = p 14933 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_cursor{}))) 14934 if pCur == uintptr(0) { 14935 return SQLITE_NOMEM 14936 } 14937 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fsdir_cursor{}))) 14938 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 14939 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 14940 return SQLITE_OK 14941 } 14942 14943 func fsdirResetCursor(tls *libc.TLS, pCur uintptr) { 14944 var i int32 14945 for i = 0; i <= (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl; i++ { 14946 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(i)*16 14947 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir != 0 { 14948 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 14949 } 14950 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 14951 } 14952 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 14953 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl) 14954 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = uintptr(0) 14955 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 14956 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = uintptr(0) 14957 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = 0 14958 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = 0 14959 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 14960 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 14961 } 14962 14963 func fsdirClose(tls *libc.TLS, cur uintptr) int32 { 14964 var pCur uintptr = cur 14965 14966 fsdirResetCursor(tls, pCur) 14967 sqlite3.Xsqlite3_free(tls, pCur) 14968 return SQLITE_OK 14969 } 14970 14971 func fsdirSetErrmsg(tls *libc.TLS, pCur uintptr, zFmt uintptr, va uintptr) { 14972 var ap va_list 14973 _ = ap 14974 ap = va 14975 (*sqlite3_vtab)(unsafe.Pointer((*fsdir_cursor)(unsafe.Pointer(pCur)).Fbase.FpVtab)).FzErrMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 14976 _ = ap 14977 } 14978 14979 func fsdirNext(tls *libc.TLS, cur uintptr) int32 { 14980 bp := tls.Alloc(32) 14981 defer tls.Free(32) 14982 14983 var pCur uintptr = cur 14984 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 14985 14986 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid++ 14987 if m&mode_t(0170000) == mode_t(0040000) { 14988 var iNew int32 = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl + 1 14989 var pLvl uintptr 14990 if iNew >= (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl { 14991 var nNew int32 = iNew + 1 14992 var nByte sqlite3_int64 = sqlite3_int64(uint64(nNew) * uint64(unsafe.Sizeof(FsdirLevel{}))) 14993 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl, uint64(nByte)) 14994 if aNew == uintptr(0) { 14995 return SQLITE_NOMEM 14996 } 14997 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)) 14998 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = aNew 14999 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = nNew 15000 } 15001 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = iNew 15002 pLvl = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(iNew)*16 15003 15004 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath 15005 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15006 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = libc.Xopendir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15007 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir == uintptr(0) { 15008 fsdirSetErrmsg(tls, pCur, ts+5180, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15009 return SQLITE_ERROR 15010 } 15011 } 15012 15013 for (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl >= 0 { 15014 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl)*16 15015 var pEntry uintptr = libc.Xreaddir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15016 if pEntry != 0 { 15017 if int32(*(*int8)(unsafe.Pointer(pEntry + 24))) == '.' { 15018 if int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 1))) == '.' && int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 2))) == 0 { 15019 continue 15020 } 15021 if int32(*(*int8)(unsafe.Pointer(pEntry + 24 + 1))) == 0 { 15022 continue 15023 } 15024 } 15025 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15026 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp+8, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir, pEntry+24)) 15027 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15028 return SQLITE_NOMEM 15029 } 15030 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 15031 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15032 return SQLITE_ERROR 15033 } 15034 return SQLITE_OK 15035 } 15036 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15037 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15038 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = uintptr(0) 15039 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = uintptr(0) 15040 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl-- 15041 } 15042 15043 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15044 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15045 return SQLITE_OK 15046 } 15047 15048 func fsdirColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15049 bp := tls.Alloc(64) 15050 defer tls.Free(64) 15051 15052 var pCur uintptr = cur 15053 switch i { 15054 case FSDIR_COLUMN_NAME: 15055 { 15056 sqlite3.Xsqlite3_result_text(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase), -1, libc.UintptrFromInt32(-1)) 15057 break 15058 15059 } 15060 15061 case FSDIR_COLUMN_MODE: 15062 sqlite3.Xsqlite3_result_int64(tls, ctx, int64((*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode)) 15063 break 15064 15065 case FSDIR_COLUMN_MTIME: 15066 sqlite3.Xsqlite3_result_int64(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mtim.Ftv_sec) 15067 break 15068 15069 case FSDIR_COLUMN_DATA: 15070 { 15071 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15072 if m&mode_t(0170000) == mode_t(0040000) { 15073 sqlite3.Xsqlite3_result_null(tls, ctx) 15074 } else if m&mode_t(0170000) == mode_t(0120000) { 15075 var aBuf uintptr = bp 15076 var nBuf sqlite3_int64 = int64(64) 15077 var n int32 15078 15079 for 1 != 0 { 15080 n = int32(libc.Xreadlink(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, aBuf, uint64(nBuf))) 15081 if sqlite3_int64(n) < nBuf { 15082 break 15083 } 15084 if aBuf != bp { 15085 sqlite3.Xsqlite3_free(tls, aBuf) 15086 } 15087 nBuf = nBuf * int64(2) 15088 aBuf = sqlite3.Xsqlite3_malloc64(tls, uint64(nBuf)) 15089 if aBuf == uintptr(0) { 15090 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15091 return SQLITE_NOMEM 15092 } 15093 } 15094 15095 sqlite3.Xsqlite3_result_text(tls, ctx, aBuf, n, libc.UintptrFromInt32(-1)) 15096 if aBuf != bp { 15097 sqlite3.Xsqlite3_free(tls, aBuf) 15098 } 15099 } else { 15100 readFileContents(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15101 } 15102 15103 } 15104 fallthrough 15105 case FSDIR_COLUMN_PATH: 15106 fallthrough 15107 default: 15108 { 15109 break 15110 15111 } 15112 } 15113 return SQLITE_OK 15114 } 15115 15116 func fsdirRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15117 var pCur uintptr = cur 15118 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid 15119 return SQLITE_OK 15120 } 15121 15122 func fsdirEof(tls *libc.TLS, cur uintptr) int32 { 15123 var pCur uintptr = cur 15124 return libc.Bool32((*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0)) 15125 } 15126 15127 func fsdirFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15128 bp := tls.Alloc(32) 15129 defer tls.Free(32) 15130 15131 var zDir uintptr = uintptr(0) 15132 var pCur uintptr = cur 15133 _ = idxStr 15134 fsdirResetCursor(tls, pCur) 15135 15136 if idxNum == 0 { 15137 fsdirSetErrmsg(tls, pCur, ts+5233, 0) 15138 return SQLITE_ERROR 15139 } 15140 15141 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15142 if zDir == uintptr(0) { 15143 fsdirSetErrmsg(tls, pCur, ts+5275, 0) 15144 return SQLITE_ERROR 15145 } 15146 if argc == 2 { 15147 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 15148 } 15149 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase != 0 { 15150 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = int32(libc.Xstrlen(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase)) + 1 15151 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase, zDir)) 15152 } else { 15153 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zDir)) 15154 } 15155 15156 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15157 return SQLITE_NOMEM 15158 } 15159 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 15160 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15161 return SQLITE_ERROR 15162 } 15163 15164 return SQLITE_OK 15165 } 15166 15167 func fsdirBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15168 var i int32 15169 var idxPath int32 = -1 15170 var idxDir int32 = -1 15171 var seenPath int32 = 0 15172 var seenDir int32 = 0 15173 var pConstraint uintptr 15174 15175 _ = tab 15176 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 15177 i = 0 15178 __1: 15179 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15180 goto __3 15181 } 15182 { 15183 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 15184 goto __2 15185 } 15186 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 15187 case FSDIR_COLUMN_PATH: 15188 { 15189 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15190 idxPath = i 15191 seenPath = 0 15192 } else if idxPath < 0 { 15193 seenPath = 1 15194 } 15195 break 15196 15197 } 15198 case FSDIR_COLUMN_DIR: 15199 { 15200 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15201 idxDir = i 15202 seenDir = 0 15203 } else if idxDir < 0 { 15204 seenDir = 1 15205 } 15206 break 15207 15208 } 15209 } 15210 15211 } 15212 goto __2 15213 __2: 15214 i++ 15215 pConstraint += 12 15216 goto __1 15217 goto __3 15218 __3: 15219 ; 15220 if seenPath != 0 || seenDir != 0 { 15221 return SQLITE_CONSTRAINT 15222 } 15223 15224 if idxPath < 0 { 15225 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 15226 15227 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(0x7fffffff) 15228 } else { 15229 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).Fomit = uint8(1) 15230 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).FargvIndex = 1 15231 if idxDir >= 0 { 15232 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).Fomit = uint8(1) 15233 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).FargvIndex = 2 15234 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 15235 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 15236 } else { 15237 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 15238 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100.0 15239 } 15240 } 15241 15242 return SQLITE_OK 15243 } 15244 15245 func fsdirRegister(tls *libc.TLS, db uintptr) int32 { 15246 var rc int32 = sqlite3.Xsqlite3_create_module(tls, db, ts+5325, uintptr(unsafe.Pointer(&fsdirModule1)), uintptr(0)) 15247 return rc 15248 } 15249 15250 var fsdirModule1 = sqlite3_module{ 15251 FxConnect: 0, 15252 FxBestIndex: 0, 15253 FxDisconnect: 0, 15254 FxOpen: 0, 15255 FxClose: 0, 15256 FxFilter: 0, 15257 FxNext: 0, 15258 FxEof: 0, 15259 FxColumn: 0, 15260 FxRowid: 0, 15261 } 15262 15263 func sqlite3_fileio_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15264 var rc int32 = SQLITE_OK 15265 _ = pApi 15266 15267 _ = pzErrMsg 15268 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5331, 1, 15269 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15270 *(*uintptr)(unsafe.Pointer(&struct { 15271 f func(*libc.TLS, uintptr, int32, uintptr) 15272 }{readfileFunc})), uintptr(0), uintptr(0)) 15273 if rc == SQLITE_OK { 15274 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5340, -1, 15275 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15276 *(*uintptr)(unsafe.Pointer(&struct { 15277 f func(*libc.TLS, uintptr, int32, uintptr) 15278 }{writefileFunc})), uintptr(0), uintptr(0)) 15279 } 15280 if rc == SQLITE_OK { 15281 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5350, 1, SQLITE_UTF8, uintptr(0), 15282 *(*uintptr)(unsafe.Pointer(&struct { 15283 f func(*libc.TLS, uintptr, int32, uintptr) 15284 }{lsModeFunc})), uintptr(0), uintptr(0)) 15285 } 15286 if rc == SQLITE_OK { 15287 rc = fsdirRegister(tls, db) 15288 } 15289 return rc 15290 } 15291 15292 type fuzzer_vtab1 = struct { 15293 Fbase sqlite3_vtab 15294 FzClassName uintptr 15295 FpRule uintptr 15296 FnCursor int32 15297 F__ccgo_pad1 [4]byte 15298 } 15299 15300 type fuzzer_vtab = fuzzer_vtab1 15301 type fuzzer_cursor1 = struct { 15302 Fbase sqlite3_vtab_cursor 15303 FiRowid sqlite3_int64 15304 FpVtab uintptr 15305 FrLimit fuzzer_cost 15306 F__ccgo_pad1 [4]byte 15307 FpStem uintptr 15308 FpDone uintptr 15309 FaQueue [20]uintptr 15310 FmxQueue int32 15311 F__ccgo_pad2 [4]byte 15312 FzBuf uintptr 15313 FnBuf int32 15314 FnStem int32 15315 FiRuleset int32 15316 F__ccgo_pad3 [4]byte 15317 FnullRule fuzzer_rule 15318 FapHash [4001]uintptr 15319 } 15320 15321 type fuzzer_cursor = fuzzer_cursor1 15322 type fuzzer_rule1 = struct { 15323 FpNext uintptr 15324 FzFrom uintptr 15325 FrCost fuzzer_cost 15326 FnFrom fuzzer_len 15327 FnTo fuzzer_len 15328 F__ccgo_pad1 [2]byte 15329 FiRuleset fuzzer_ruleid 15330 FzTo [4]int8 15331 } 15332 15333 type fuzzer_rule = fuzzer_rule1 15334 type fuzzer_stem1 = struct { 15335 FzBasis uintptr 15336 FpRule uintptr 15337 FpNext uintptr 15338 FpHash uintptr 15339 FrBaseCost fuzzer_cost 15340 FrCostX fuzzer_cost 15341 FnBasis fuzzer_len 15342 Fn fuzzer_len 15343 F__ccgo_pad1 [6]byte 15344 } 15345 15346 type fuzzer_stem = fuzzer_stem1 15347 15348 type fuzzer_cost = int32 15349 type fuzzer_len = int8 15350 type fuzzer_ruleid = int32 15351 15352 func fuzzerMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 15353 bp := tls.Alloc(32) 15354 defer tls.Free(32) 15355 15356 var pTail uintptr 15357 15358 pTail = bp 15359 for pA != 0 && pB != 0 { 15360 if (*fuzzer_rule)(unsafe.Pointer(pA)).FrCost <= (*fuzzer_rule)(unsafe.Pointer(pB)).FrCost { 15361 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15362 pTail = pA 15363 pA = (*fuzzer_rule)(unsafe.Pointer(pA)).FpNext 15364 } else { 15365 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15366 pTail = pB 15367 pB = (*fuzzer_rule)(unsafe.Pointer(pB)).FpNext 15368 } 15369 } 15370 if pA == uintptr(0) { 15371 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15372 } else { 15373 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15374 } 15375 return (*fuzzer_rule)(unsafe.Pointer(bp)).FpNext 15376 } 15377 15378 func fuzzerLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 15379 bp := tls.Alloc(48) 15380 defer tls.Free(48) 15381 15382 var iRuleset sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 15383 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 15384 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 15385 var nCost int32 = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 15386 15387 var rc int32 = SQLITE_OK 15388 var nFrom int32 15389 var nTo int32 15390 var pRule uintptr = uintptr(0) 15391 15392 if zFrom == uintptr(0) { 15393 zFrom = ts + 584 15394 } 15395 if zTo == uintptr(0) { 15396 zTo = ts + 584 15397 } 15398 nFrom = int32(libc.Xstrlen(tls, zFrom)) 15399 nTo = int32(libc.Xstrlen(tls, zTo)) 15400 15401 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 15402 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 15403 return SQLITE_OK 15404 } 15405 15406 if nCost <= 0 || nCost > FUZZER_MX_COST { 15407 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 15408 libc.VaList(bp, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_COST)) 15409 rc = SQLITE_ERROR 15410 } else if nFrom > FUZZER_MX_LENGTH || nTo > FUZZER_MX_LENGTH { 15411 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 15412 libc.VaList(bp+16, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_LENGTH)) 15413 rc = SQLITE_ERROR 15414 } else if iRuleset < int64(0) || iRuleset > int64(FUZZER_MX_RULEID) { 15415 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+5357, 15416 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_RULEID)) 15417 rc = SQLITE_ERROR 15418 } else { 15419 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_rule{}))+uint64(nFrom)+uint64(nTo)) 15420 if pRule == uintptr(0) { 15421 rc = SQLITE_NOMEM 15422 } else { 15423 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(fuzzer_rule{}))) 15424 (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 28 15425 *(*uintptr)(unsafe.Pointer(pRule + 8)) += uintptr(nTo + 1) 15426 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom = fuzzer_len(nFrom) 15427 libc.Xmemcpy(tls, (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 15428 libc.Xmemcpy(tls, pRule+28, zTo, uint64(nTo+1)) 15429 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo = fuzzer_len(nTo) 15430 (*fuzzer_rule)(unsafe.Pointer(pRule)).FrCost = nCost 15431 (*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset = int32(iRuleset) 15432 } 15433 } 15434 15435 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 15436 return rc 15437 } 15438 15439 func fuzzerLoadRules(tls *libc.TLS, db uintptr, p uintptr, zDb uintptr, zData uintptr, pzErr uintptr) int32 { 15440 bp := tls.Alloc(192) 15441 defer tls.Free(192) 15442 15443 var rc int32 = SQLITE_OK 15444 var zSql uintptr 15445 var pHead uintptr = uintptr(0) 15446 15447 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, zDb, zData)) 15448 if zSql == uintptr(0) { 15449 rc = SQLITE_NOMEM 15450 } else { 15451 var rc2 int32 15452 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 15453 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 15454 if rc != SQLITE_OK { 15455 *(*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))) 15456 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 15457 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 15458 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, zData, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 15459 rc = SQLITE_ERROR 15460 } else { 15461 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 15462 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 15463 rc = fuzzerLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 15464 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 15465 (*fuzzer_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 15466 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 15467 } 15468 } 15469 } 15470 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 15471 if rc == SQLITE_OK { 15472 rc = rc2 15473 } 15474 } 15475 sqlite3.Xsqlite3_free(tls, zSql) 15476 15477 if rc == SQLITE_OK { 15478 var i uint32 15479 var pX uintptr 15480 15481 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 15482 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 15483 } 15484 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 15485 pHead = (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext 15486 (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 15487 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++ { 15488 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15489 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 15490 } 15491 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15492 } 15493 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 15494 i = uint32(1) 15495 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 15496 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 15497 } 15498 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = fuzzerMergeRules(tls, (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule, pX) 15499 } else { 15500 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = pHead 15501 } 15502 15503 return rc 15504 } 15505 15506 func fuzzerDequote(tls *libc.TLS, zIn uintptr) uintptr { 15507 var nIn sqlite3_int64 15508 var zOut uintptr 15509 15510 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 15511 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 15512 if zOut != 0 { 15513 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 15514 15515 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 15516 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 15517 } else { 15518 var iOut int32 = 0 15519 var iIn int32 15520 15521 if int32(q) == '[' { 15522 q = int8(']') 15523 } 15524 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 15525 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 15526 iIn++ 15527 } 15528 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 15529 } 15530 } 15531 15532 } 15533 return zOut 15534 } 15535 15536 func fuzzerDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15537 var p uintptr = pVtab 15538 15539 for (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule != 0 { 15540 var pRule uintptr = (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule 15541 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 15542 sqlite3.Xsqlite3_free(tls, pRule) 15543 } 15544 sqlite3.Xsqlite3_free(tls, p) 15545 return SQLITE_OK 15546 } 15547 15548 func fuzzerConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15549 bp := tls.Alloc(8) 15550 defer tls.Free(8) 15551 15552 var rc int32 = SQLITE_OK 15553 var pNew uintptr = uintptr(0) 15554 var zModule uintptr = *(*uintptr)(unsafe.Pointer(argv)) 15555 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 15556 15557 if argc != 4 { 15558 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 15559 ts+5394, libc.VaList(bp, zModule)) 15560 rc = SQLITE_ERROR 15561 } else { 15562 var nModule sqlite3_int64 15563 15564 nModule = sqlite3_int64(libc.Xstrlen(tls, zModule)) 15565 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_vtab{}))+uint64(nModule)+uint64(1)) 15566 if pNew == uintptr(0) { 15567 rc = SQLITE_NOMEM 15568 } else { 15569 var zTab uintptr 15570 15571 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_vtab{}))) 15572 (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName = pNew + 1*48 15573 libc.Xmemcpy(tls, (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName, zModule, size_t(nModule+int64(1))) 15574 15575 zTab = fuzzerDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 15576 if zTab == uintptr(0) { 15577 rc = SQLITE_NOMEM 15578 } else { 15579 rc = fuzzerLoadRules(tls, db, pNew, zDb, zTab, pzErr) 15580 sqlite3.Xsqlite3_free(tls, zTab) 15581 } 15582 15583 if rc == SQLITE_OK { 15584 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5445) 15585 } 15586 if rc != SQLITE_OK { 15587 fuzzerDisconnect(tls, pNew) 15588 pNew = uintptr(0) 15589 } else { 15590 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 15591 } 15592 } 15593 } 15594 15595 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 15596 return rc 15597 } 15598 15599 func fuzzerOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 15600 var p uintptr = pVTab 15601 var pCur uintptr 15602 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fuzzer_cursor{}))) 15603 if pCur == uintptr(0) { 15604 return SQLITE_NOMEM 15605 } 15606 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fuzzer_cursor{}))) 15607 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab = p 15608 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15609 (*fuzzer_vtab)(unsafe.Pointer(p)).FnCursor++ 15610 return SQLITE_OK 15611 } 15612 15613 func fuzzerClearStemList(tls *libc.TLS, pStem uintptr) { 15614 for pStem != 0 { 15615 var pNext uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext 15616 sqlite3.Xsqlite3_free(tls, pStem) 15617 pStem = pNext 15618 } 15619 } 15620 15621 func fuzzerClearCursor(tls *libc.TLS, pCur uintptr, clearHash int32) { 15622 var i int32 15623 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 15624 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone) 15625 for i = 0; i < FUZZER_NQUEUE; i++ { 15626 fuzzerClearStemList(tls, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 15627 } 15628 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 15629 if clearHash != 0 && (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem != 0 { 15630 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = 0 15631 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 15632 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = uintptr(0) 15633 libc.Xmemset(tls, pCur+48, 0, uint64(unsafe.Sizeof([20]uintptr{}))) 15634 libc.Xmemset(tls, pCur+272, 0, uint64(unsafe.Sizeof([4001]uintptr{}))) 15635 } 15636 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem = 0 15637 } 15638 15639 func fuzzerClose(tls *libc.TLS, cur uintptr) int32 { 15640 var pCur uintptr = cur 15641 fuzzerClearCursor(tls, pCur, 0) 15642 sqlite3.Xsqlite3_free(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 15643 (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 15644 sqlite3.Xsqlite3_free(tls, pCur) 15645 return SQLITE_OK 15646 } 15647 15648 func fuzzerRender(tls *libc.TLS, pStem uintptr, pzBuf uintptr, pnBuf uintptr) int32 { 15649 var pRule uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule 15650 var n int32 15651 var z uintptr 15652 15653 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis) + int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo) - int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) 15654 if *(*int32)(unsafe.Pointer(pnBuf)) < n+1 { 15655 *(*uintptr)(unsafe.Pointer(pzBuf)) = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(pzBuf)), n+100) 15656 if *(*uintptr)(unsafe.Pointer(pzBuf)) == uintptr(0) { 15657 return SQLITE_NOMEM 15658 } 15659 *(*int32)(unsafe.Pointer(pnBuf)) = n + 100 15660 } 15661 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) 15662 z = *(*uintptr)(unsafe.Pointer(pzBuf)) 15663 if n < 0 { 15664 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)+1)) 15665 } else { 15666 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(n)) 15667 libc.Xmemcpy(tls, z+uintptr(n), pRule+28, uint64((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)) 15668 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)), 15669 uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-n-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)+1)) 15670 } 15671 15672 return SQLITE_OK 15673 } 15674 15675 func fuzzerHash(tls *libc.TLS, z uintptr) uint32 { 15676 var h uint32 = uint32(0) 15677 for *(*int8)(unsafe.Pointer(z)) != 0 { 15678 h = h<<3 ^ h>>29 ^ uint32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 15679 } 15680 return h % uint32(FUZZER_HASH) 15681 } 15682 15683 func fuzzerCost(tls *libc.TLS, pStem uintptr) fuzzer_cost { 15684 return libc.AssignPtrInt32(pStem+36, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrBaseCost+(*fuzzer_rule)(unsafe.Pointer((*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule)).FrCost) 15685 } 15686 15687 func fuzzerSeen(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 15688 var h uint32 15689 var pLookup uintptr 15690 15691 if fuzzerRender(tls, pStem, pCur+216, pCur+224) == SQLITE_NOMEM { 15692 return -1 15693 } 15694 h = fuzzerHash(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 15695 pLookup = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 15696 for pLookup != 0 && libc.Xstrcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pLookup)).FzBasis, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) != 0 { 15697 pLookup = (*fuzzer_stem)(unsafe.Pointer(pLookup)).FpHash 15698 } 15699 return libc.Bool32(pLookup != uintptr(0)) 15700 } 15701 15702 func fuzzerSkipRule(tls *libc.TLS, pRule uintptr, pStem uintptr, iRuleset int32) int32 { 15703 return libc.Bool32(pRule != 0 && ((*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset != iRuleset || 15704 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)) 15705 } 15706 15707 func fuzzerAdvance(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 15708 var pRule uintptr 15709 for libc.AssignUintptr(&pRule, (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule) != uintptr(0) { 15710 for int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) < int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) { 15711 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn++ 15712 if int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) == 0 || 15713 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 { 15714 var rc int32 = fuzzerSeen(tls, pCur, pStem) 15715 if rc < 0 { 15716 return -1 15717 } 15718 if rc == 0 { 15719 fuzzerCost(tls, pStem) 15720 return 1 15721 } 15722 } 15723 } 15724 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = int8(-1) 15725 for __ccgo := true; __ccgo; __ccgo = fuzzerSkipRule(tls, pRule, pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 15726 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 15727 } 15728 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pRule 15729 if pRule != 0 && fuzzerCost(tls, pStem) > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit { 15730 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = uintptr(0) 15731 } 15732 } 15733 return 0 15734 } 15735 15736 func fuzzerMergeStems(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 15737 bp := tls.Alloc(48) 15738 defer tls.Free(48) 15739 15740 var pTail uintptr 15741 15742 pTail = bp 15743 for pA != 0 && pB != 0 { 15744 if (*fuzzer_stem)(unsafe.Pointer(pA)).FrCostX <= (*fuzzer_stem)(unsafe.Pointer(pB)).FrCostX { 15745 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 15746 pTail = pA 15747 pA = (*fuzzer_stem)(unsafe.Pointer(pA)).FpNext 15748 } else { 15749 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 15750 pTail = pB 15751 pB = (*fuzzer_stem)(unsafe.Pointer(pB)).FpNext 15752 } 15753 } 15754 if pA == uintptr(0) { 15755 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 15756 } else { 15757 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 15758 } 15759 return (*fuzzer_stem)(unsafe.Pointer(bp)).FpNext 15760 } 15761 15762 func fuzzerLowestCostStem(tls *libc.TLS, pCur uintptr) uintptr { 15763 var pBest uintptr 15764 var pX uintptr 15765 var iBest int32 15766 var i int32 15767 15768 if (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem == uintptr(0) { 15769 iBest = -1 15770 pBest = uintptr(0) 15771 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 15772 pX = *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) 15773 if pX == uintptr(0) { 15774 continue 15775 } 15776 if pBest == uintptr(0) || (*fuzzer_stem)(unsafe.Pointer(pBest)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX { 15777 pBest = pX 15778 iBest = i 15779 } 15780 } 15781 if pBest != 0 { 15782 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(iBest)*8)) = (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext 15783 (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext = uintptr(0) 15784 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pBest 15785 } 15786 } 15787 return (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 15788 } 15789 15790 func fuzzerInsert(tls *libc.TLS, pCur uintptr, pNew uintptr) uintptr { 15791 var pX uintptr 15792 var i int32 15793 15794 if libc.AssignUintptr(&pX, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) && (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pNew)).FrCostX { 15795 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 15796 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pNew 15797 pNew = pX 15798 } 15799 15800 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 15801 pX = pNew 15802 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 15803 if *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) != 0 { 15804 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 15805 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = uintptr(0) 15806 } else { 15807 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 15808 break 15809 } 15810 } 15811 if i > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue { 15812 if i < FUZZER_NQUEUE { 15813 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = i 15814 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 15815 } else { 15816 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8))) 15817 *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8)) = pX 15818 } 15819 } 15820 15821 return fuzzerLowestCostStem(tls, pCur) 15822 } 15823 15824 func fuzzerNewStem(tls *libc.TLS, pCur uintptr, zWord uintptr, rBaseCost fuzzer_cost) uintptr { 15825 var pNew uintptr 15826 var pRule uintptr 15827 var h uint32 15828 15829 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_stem{}))+libc.Xstrlen(tls, zWord)+uint64(1)) 15830 if pNew == uintptr(0) { 15831 return uintptr(0) 15832 } 15833 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_stem{}))) 15834 (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis = pNew + 1*48 15835 (*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis = fuzzer_len(libc.Xstrlen(tls, zWord)) 15836 libc.Xmemcpy(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis, zWord, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis)+1)) 15837 pRule = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 15838 for fuzzerSkipRule(tls, pRule, pNew, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 15839 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 15840 } 15841 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpRule = pRule 15842 (*fuzzer_stem)(unsafe.Pointer(pNew)).Fn = int8(-1) 15843 (*fuzzer_stem)(unsafe.Pointer(pNew)).FrBaseCost = libc.AssignPtrInt32(pNew+36, rBaseCost) 15844 h = fuzzerHash(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis) 15845 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpHash = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 15846 *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) = pNew 15847 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem++ 15848 return pNew 15849 } 15850 15851 func fuzzerNext(tls *libc.TLS, cur uintptr) int32 { 15852 var pCur uintptr = cur 15853 var rc int32 15854 var pStem uintptr 15855 var pNew uintptr 15856 15857 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid++ 15858 15859 pStem = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 15860 if (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX > 0 { 15861 rc = fuzzerRender(tls, pStem, pCur+216, pCur+224) 15862 if rc == SQLITE_NOMEM { 15863 return SQLITE_NOMEM 15864 } 15865 pNew = fuzzerNewStem(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX) 15866 if pNew != 0 { 15867 if fuzzerAdvance(tls, pCur, pNew) == 0 { 15868 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 15869 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pNew 15870 } else { 15871 if fuzzerInsert(tls, pCur, pNew) == pNew { 15872 return SQLITE_OK 15873 } 15874 } 15875 } else { 15876 return SQLITE_NOMEM 15877 } 15878 } 15879 15880 for libc.AssignUintptr(&pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) { 15881 var res int32 = fuzzerAdvance(tls, pCur, pStem) 15882 if res < 0 { 15883 return SQLITE_NOMEM 15884 } else if res > 0 { 15885 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 15886 pStem = fuzzerInsert(tls, pCur, pStem) 15887 if libc.AssignInt32(&rc, fuzzerSeen(tls, pCur, pStem)) != 0 { 15888 if rc < 0 { 15889 return SQLITE_NOMEM 15890 } 15891 continue 15892 } 15893 return SQLITE_OK 15894 } 15895 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 15896 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 15897 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pStem 15898 if fuzzerLowestCostStem(tls, pCur) != 0 { 15899 rc = fuzzerSeen(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 15900 if rc < 0 { 15901 return SQLITE_NOMEM 15902 } 15903 if rc == 0 { 15904 return SQLITE_OK 15905 } 15906 } 15907 } 15908 15909 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 15910 return SQLITE_OK 15911 } 15912 15913 func fuzzerFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15914 var pCur uintptr = pVtabCursor 15915 var zWord uintptr = ts + 584 15916 var pStem uintptr 15917 var idx int32 15918 15919 fuzzerClearCursor(tls, pCur, 1) 15920 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 2147483647 15921 idx = 0 15922 if idxNum&1 != 0 { 15923 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15924 idx++ 15925 } 15926 if idxNum&2 != 0 { 15927 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 15928 idx++ 15929 } 15930 if idxNum&4 != 0 { 15931 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 15932 idx++ 15933 } 15934 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FpNext = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 15935 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FrCost = 0 15936 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnFrom = int8(0) 15937 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnTo = int8(0) 15938 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FzFrom = ts + 584 15939 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 15940 15941 if int32(libc.Xstrlen(tls, zWord)) < FUZZER_MX_OUTPUT_LENGTH { 15942 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = libc.AssignUintptr(&pStem, fuzzerNewStem(tls, pCur, zWord, 0)) 15943 if pStem == uintptr(0) { 15944 return SQLITE_NOMEM 15945 } 15946 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pCur + 240 15947 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = (*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis 15948 } else { 15949 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 15950 } 15951 15952 return SQLITE_OK 15953 } 15954 15955 func fuzzerColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15956 var pCur uintptr = cur 15957 if i == 0 { 15958 if fuzzerRender(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem, pCur+216, pCur+224) == SQLITE_NOMEM { 15959 return SQLITE_NOMEM 15960 } 15961 sqlite3.Xsqlite3_result_text(tls, ctx, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 15962 } else if i == 1 { 15963 sqlite3.Xsqlite3_result_int(tls, ctx, (*fuzzer_stem)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem)).FrCostX) 15964 } else { 15965 sqlite3.Xsqlite3_result_null(tls, ctx) 15966 } 15967 return SQLITE_OK 15968 } 15969 15970 func fuzzerRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15971 var pCur uintptr = cur 15972 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid 15973 return SQLITE_OK 15974 } 15975 15976 func fuzzerEof(tls *libc.TLS, cur uintptr) int32 { 15977 var pCur uintptr = cur 15978 return libc.Bool32((*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit <= 0) 15979 } 15980 15981 func fuzzerBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15982 var iPlan int32 = 0 15983 var iDistTerm int32 = -1 15984 var iRulesetTerm int32 = -1 15985 var i int32 15986 var seenMatch int32 = 0 15987 var pConstraint uintptr 15988 var rCost float64 = 1e12 15989 15990 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 15991 i = 0 15992 __1: 15993 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15994 goto __3 15995 } 15996 { 15997 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 15998 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 15999 seenMatch = 1 16000 } 16001 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 16002 goto __2 16003 } 16004 if iPlan&1 == 0 && 16005 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16006 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16007 iPlan = iPlan | 1 16008 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 16009 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16010 rCost = rCost / 1e6 16011 } 16012 if iPlan&2 == 0 && 16013 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 16014 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 16015 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 16016 iPlan = iPlan | 2 16017 iDistTerm = i 16018 rCost = rCost / 10.0 16019 } 16020 if iPlan&4 == 0 && 16021 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 16022 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 16023 iPlan = iPlan | 4 16024 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16025 iRulesetTerm = i 16026 rCost = rCost / 10.0 16027 } 16028 16029 } 16030 goto __2 16031 __2: 16032 i++ 16033 pConstraint += 12 16034 goto __1 16035 goto __3 16036 __3: 16037 ; 16038 if iPlan&2 != 0 { 16039 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 16040 } 16041 if iPlan&4 != 0 { 16042 var idx int32 = 1 16043 if iPlan&1 != 0 { 16044 idx++ 16045 } 16046 if iPlan&2 != 0 { 16047 idx++ 16048 } 16049 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRulesetTerm)*8)).FargvIndex = idx 16050 } 16051 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 16052 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 16053 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 16054 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 16055 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 16056 } 16057 if seenMatch != 0 && iPlan&1 == 0 { 16058 rCost = 1e99 16059 } 16060 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 16061 16062 return SQLITE_OK 16063 } 16064 16065 var fuzzerModule = sqlite3_module{ 16066 FxCreate: 0, 16067 FxConnect: 0, 16068 FxBestIndex: 0, 16069 FxDisconnect: 0, 16070 FxDestroy: 0, 16071 FxOpen: 0, 16072 FxClose: 0, 16073 FxFilter: 0, 16074 FxNext: 0, 16075 FxEof: 0, 16076 FxColumn: 0, 16077 FxRowid: 0, 16078 } 16079 16080 func sqlite3_fuzzer_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16081 var rc int32 = SQLITE_OK 16082 _ = pApi 16083 16084 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+5483, uintptr(unsafe.Pointer(&fuzzerModule)), uintptr(0)) 16085 return rc 16086 } 16087 16088 func ieee754func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16089 bp := tls.Alloc(160) 16090 defer tls.Free(160) 16091 16092 if argc == 1 { 16093 var m sqlite3_int64 16094 16095 var e int32 16096 var isNeg int32 16097 16098 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16099 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 16100 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16101 var i uint32 16102 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = uint64(0) 16103 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 16104 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 24))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16105 } 16106 libc.Xmemcpy(tls, bp+16, bp+24, uint64(unsafe.Sizeof(float64(0)))) 16107 } else { 16108 *(*float64)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16109 } 16110 if *(*float64)(unsafe.Pointer(bp + 16)) < 0.0 { 16111 isNeg = 1 16112 *(*float64)(unsafe.Pointer(bp + 16)) = -*(*float64)(unsafe.Pointer(bp + 16)) 16113 } else { 16114 isNeg = 0 16115 } 16116 libc.Xmemcpy(tls, bp+32, bp+16, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 16117 if *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) == int64(0) { 16118 e = 0 16119 m = int64(0) 16120 } else { 16121 e = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 32)) >> 52) 16122 m = *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) & (int64(1)<<52 - int64(1)) 16123 if e == 0 { 16124 m <<= 1 16125 } else { 16126 m = m | int64(1)<<52 16127 } 16128 for e < 1075 && m > int64(0) && m&int64(1) == int64(0) { 16129 m >>= 1 16130 e++ 16131 } 16132 if isNeg != 0 { 16133 m = -m 16134 } 16135 } 16136 switch *(*int32)(unsafe.Pointer(sqlite3.Xsqlite3_user_data(tls, context))) { 16137 case 0: 16138 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+5490, 16139 libc.VaList(bp, m, e-1075)) 16140 sqlite3.Xsqlite3_result_text(tls, context, bp+40, -1, libc.UintptrFromInt32(-1)) 16141 break 16142 fallthrough 16143 case 1: 16144 sqlite3.Xsqlite3_result_int64(tls, context, m) 16145 break 16146 fallthrough 16147 case 2: 16148 sqlite3.Xsqlite3_result_int(tls, context, e-1075) 16149 break 16150 } 16151 } else { 16152 var m sqlite3_int64 16153 var e sqlite3_int64 16154 16155 var isNeg int32 = 0 16156 m = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 16157 e = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 16158 16159 if e > int64(10000) { 16160 e = int64(10000) 16161 } else if e < int64(-10000) { 16162 e = int64(-10000) 16163 } 16164 16165 if m < int64(0) { 16166 isNeg = 1 16167 m = -m 16168 if m < int64(0) { 16169 return 16170 } 16171 } else if m == int64(0) && e > int64(-1000) && e < int64(1000) { 16172 sqlite3.Xsqlite3_result_double(tls, context, 0.0) 16173 return 16174 } 16175 for m>>32&int64(0xffe00000) != 0 { 16176 m >>= 1 16177 e++ 16178 } 16179 for m != int64(0) && m>>32&int64(0xfff00000) == int64(0) { 16180 m <<= 1 16181 e-- 16182 } 16183 e = e + int64(1075) 16184 if e <= int64(0) { 16185 if int64(1)-e >= int64(64) { 16186 m = int64(0) 16187 } else { 16188 m >>= int64(1) - e 16189 } 16190 e = int64(0) 16191 } else if e > int64(0x7ff) { 16192 e = int64(0x7ff) 16193 } 16194 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) = m & (int64(1)<<52 - int64(1)) 16195 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= e << 52 16196 if isNeg != 0 { 16197 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= libc.Int64FromUint64(uint64(1) << 63) 16198 } 16199 libc.Xmemcpy(tls, bp+144, bp+152, uint64(unsafe.Sizeof(float64(0)))) 16200 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 144))) 16201 } 16202 } 16203 16204 func ieee754func_from_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16205 bp := tls.Alloc(16) 16206 defer tls.Free(16) 16207 16208 _ = argc 16209 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16210 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 16211 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16212 var i uint32 16213 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = uint64(0) 16214 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 16215 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 8))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16216 } 16217 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 16218 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp))) 16219 } 16220 } 16221 16222 func ieee754func_to_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16223 bp := tls.Alloc(24) 16224 defer tls.Free(24) 16225 16226 _ = argc 16227 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_FLOAT || 16228 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_INTEGER { 16229 *(*float64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16230 16231 var i uint32 16232 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 16233 for i = uint32(1); uint64(i) <= uint64(unsafe.Sizeof(float64(0))); i++ { 16234 *(*uint8)(unsafe.Pointer(bp + 16 + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(i)))) = uint8(*(*sqlite3_uint64)(unsafe.Pointer(bp)) & uint64(0xff)) 16235 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 8 16236 } 16237 sqlite3.Xsqlite3_result_blob(tls, context, bp+16, int32(unsafe.Sizeof(float64(0))), libc.UintptrFromInt32(-1)) 16238 } 16239 } 16240 16241 func sqlite3_ieee_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16242 var i uint32 16243 var rc int32 = SQLITE_OK 16244 _ = pApi 16245 16246 _ = pzErrMsg 16247 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc1))/uint64(unsafe.Sizeof(struct { 16248 FzFName uintptr 16249 FnArg int32 16250 FiAux int32 16251 FxFunc uintptr 16252 }{})) && rc == SQLITE_OK; i++ { 16253 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc1[i].FzFName, aFunc1[i].FnArg, 16254 SQLITE_UTF8|SQLITE_INNOCUOUS, 16255 uintptr(unsafe.Pointer(&aFunc1))+uintptr(i)*24+12, 16256 aFunc1[i].FxFunc, uintptr(0), uintptr(0)) 16257 } 16258 return rc 16259 } 16260 16261 var aFunc1 = [6]struct { 16262 FzFName uintptr 16263 FnArg int32 16264 FiAux int32 16265 FxFunc uintptr 16266 }{ 16267 {FzFName: ts + 5507, FnArg: 1, FxFunc: 0}, 16268 {FzFName: ts + 5507, FnArg: 2, FxFunc: 0}, 16269 {FzFName: ts + 5515, FnArg: 1, FiAux: 1, FxFunc: 0}, 16270 {FzFName: ts + 5532, FnArg: 1, FiAux: 2, FxFunc: 0}, 16271 {FzFName: ts + 5549, FnArg: 1, FxFunc: 0}, 16272 {FzFName: ts + 5565, FnArg: 1, FxFunc: 0}, 16273 } 16274 16275 func sqlite3_mmap_warm(tls *libc.TLS, db uintptr, zDb uintptr) int32 { 16276 bp := tls.Alloc(88) 16277 defer tls.Free(88) 16278 16279 var rc int32 = SQLITE_OK 16280 var zSql uintptr = uintptr(0) 16281 var pgsz int32 = 0 16282 var nTotal int32 = 0 16283 16284 if 0 == sqlite3.Xsqlite3_get_autocommit(tls, db) { 16285 return SQLITE_MISUSE 16286 } 16287 16288 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5583, 16289 libc.VaList(bp, func() uintptr { 16290 if zDb != 0 { 16291 return ts + 5624 16292 } 16293 return ts + 584 16294 }(), func() uintptr { 16295 if zDb != 0 { 16296 return zDb 16297 } 16298 return ts + 584 16299 }(), func() uintptr { 16300 if zDb != 0 { 16301 return ts + 5626 16302 } 16303 return ts + 584 16304 }())) 16305 if zSql == uintptr(0) { 16306 return SQLITE_NOMEM 16307 } 16308 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 16309 sqlite3.Xsqlite3_free(tls, zSql) 16310 16311 if rc == SQLITE_OK { 16312 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5629, 16313 libc.VaList(bp+24, func() uintptr { 16314 if zDb != 0 { 16315 return ts + 5624 16316 } 16317 return ts + 584 16318 }(), func() uintptr { 16319 if zDb != 0 { 16320 return zDb 16321 } 16322 return ts + 584 16323 }(), func() uintptr { 16324 if zDb != 0 { 16325 return ts + 5626 16326 } 16327 return ts + 584 16328 }())) 16329 if zSql == uintptr(0) { 16330 rc = SQLITE_NOMEM 16331 } else { 16332 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 16333 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 16334 sqlite3.Xsqlite3_free(tls, zSql) 16335 if rc == SQLITE_OK { 16336 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 16337 pgsz = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 16338 } 16339 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 16340 } 16341 if rc == SQLITE_OK && pgsz == 0 { 16342 rc = SQLITE_ERROR 16343 } 16344 } 16345 } 16346 16347 if rc == SQLITE_OK { 16348 var rc2 int32 16349 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 16350 rc = sqlite3.Xsqlite3_file_control(tls, db, zDb, SQLITE_FCNTL_FILE_POINTER, bp+72) 16351 if rc == SQLITE_OK && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods)).FiVersion >= 3 { 16352 var iPg sqlite3_int64 = int64(1) 16353 var p uintptr = (*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods 16354 for 1 != 0 { 16355 rc = (*struct { 16356 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 16357 })(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) 16358 if rc != SQLITE_OK || *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 16359 break 16360 } 16361 16362 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80))))) 16363 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(pgsz-1)))) 16364 16365 rc = (*struct { 16366 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 16367 })(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))) 16368 if rc != SQLITE_OK { 16369 break 16370 } 16371 iPg++ 16372 } 16373 sqlite3.Xsqlite3_log(tls, SQLITE_OK, 16374 ts+5652, libc.VaList(bp+48, func() int64 { 16375 if iPg == int64(1) { 16376 return int64(0) 16377 } 16378 return iPg 16379 }(), 16380 sqlite3.Xsqlite3_db_filename(tls, db, zDb))) 16381 } 16382 16383 rc2 = sqlite3.Xsqlite3_exec(tls, db, ts+5702, uintptr(0), uintptr(0), uintptr(0)) 16384 if rc == SQLITE_OK { 16385 rc = rc2 16386 } 16387 } 16388 16389 return rc 16390 } 16391 16392 type nextCharContext1 = struct { 16393 Fdb uintptr 16394 FpStmt uintptr 16395 FzPrefix uintptr 16396 FnPrefix int32 16397 FnAlloc int32 16398 FnUsed int32 16399 F__ccgo_pad1 [4]byte 16400 FaResult uintptr 16401 FmallocFailed int32 16402 FotherError int32 16403 } 16404 16405 type nextCharContext = nextCharContext1 16406 16407 func nextCharAppend(tls *libc.TLS, p uintptr, c uint32) { 16408 var i int32 16409 for i = 0; i < (*nextCharContext)(unsafe.Pointer(p)).FnUsed; i++ { 16410 if *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(i)*4)) == c { 16411 return 16412 } 16413 } 16414 if (*nextCharContext)(unsafe.Pointer(p)).FnUsed+1 > (*nextCharContext)(unsafe.Pointer(p)).FnAlloc { 16415 var aNew uintptr 16416 var n int32 = (*nextCharContext)(unsafe.Pointer(p)).FnAlloc*2 + 30 16417 aNew = sqlite3.Xsqlite3_realloc64(tls, (*nextCharContext)(unsafe.Pointer(p)).FaResult, uint64(n)*uint64(unsafe.Sizeof(uint32(0)))) 16418 if aNew == uintptr(0) { 16419 (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed = 1 16420 return 16421 } else { 16422 (*nextCharContext)(unsafe.Pointer(p)).FaResult = aNew 16423 (*nextCharContext)(unsafe.Pointer(p)).FnAlloc = n 16424 } 16425 } 16426 *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(libc.PostIncInt32(&(*nextCharContext)(unsafe.Pointer(p)).FnUsed, 1))*4)) = c 16427 } 16428 16429 func writeUtf8(tls *libc.TLS, z uintptr, c uint32) int32 { 16430 if c < uint32(0x00080) { 16431 *(*uint8)(unsafe.Pointer(z)) = uint8(c & uint32(0xff)) 16432 return 1 16433 } 16434 if c < uint32(0x00800) { 16435 *(*uint8)(unsafe.Pointer(z)) = uint8(0xC0 + int32(uint8(c>>6&uint32(0x1F)))) 16436 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16437 return 2 16438 } 16439 if c < uint32(0x10000) { 16440 *(*uint8)(unsafe.Pointer(z)) = uint8(0xE0 + int32(uint8(c>>12&uint32(0x0F)))) 16441 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 16442 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16443 return 3 16444 } 16445 *(*uint8)(unsafe.Pointer(z)) = uint8(0xF0 + int32(uint8(c>>18&uint32(0x07)))) 16446 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>12&uint32(0x3F)))) 16447 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 16448 *(*uint8)(unsafe.Pointer(z + 3)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16449 return 4 16450 } 16451 16452 func readUtf8(tls *libc.TLS, z uintptr, pOut uintptr) int32 { 16453 var c uint32 = uint32(*(*uint8)(unsafe.Pointer(z))) 16454 if c < uint32(0xc0) { 16455 *(*uint32)(unsafe.Pointer(pOut)) = c 16456 return 1 16457 } else { 16458 var n int32 = 1 16459 c = uint32(validBits[c-uint32(0xc0)]) 16460 for int32(*(*uint8)(unsafe.Pointer(z + uintptr(n))))&0xc0 == 0x80 { 16461 c = c<<6 + uint32(0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&n, 1)))))) 16462 } 16463 if c < uint32(0x80) || c&0xFFFFF800 == uint32(0xD800) || c&0xFFFFFFFE == uint32(0xFFFE) { 16464 c = uint32(0xFFFD) 16465 } 16466 *(*uint32)(unsafe.Pointer(pOut)) = c 16467 return n 16468 } 16469 return int32(0) 16470 } 16471 16472 var validBits = [64]uint8{ 16473 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16474 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 16475 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 16476 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 16477 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16478 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 16479 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 16480 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 16481 } 16482 16483 func findNextChars(tls *libc.TLS, p uintptr) { 16484 bp := tls.Alloc(12) 16485 defer tls.Free(12) 16486 16487 var cPrev uint32 = uint32(0) 16488 16489 var n int32 16490 var rc int32 16491 16492 for { 16493 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 1, (*nextCharContext)(unsafe.Pointer(p)).FzPrefix, (*nextCharContext)(unsafe.Pointer(p)).FnPrefix, 16494 uintptr(0)) 16495 n = writeUtf8(tls, bp, cPrev+uint32(1)) 16496 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 2, bp, n, uintptr(0)) 16497 rc = sqlite3.Xsqlite3_step(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16498 if rc == SQLITE_DONE { 16499 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16500 return 16501 } else if rc != SQLITE_ROW { 16502 (*nextCharContext)(unsafe.Pointer(p)).FotherError = rc 16503 return 16504 } else { 16505 var zOut uintptr = sqlite3.Xsqlite3_column_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 0) 16506 16507 n = readUtf8(tls, zOut+uintptr((*nextCharContext)(unsafe.Pointer(p)).FnPrefix), bp+8) 16508 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 16509 nextCharAppend(tls, p, *(*uint32)(unsafe.Pointer(bp + 8))) 16510 cPrev = *(*uint32)(unsafe.Pointer(bp + 8)) 16511 if (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed != 0 { 16512 return 16513 } 16514 } 16515 } 16516 } 16517 16518 func nextCharFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16519 bp := tls.Alloc(136) 16520 defer tls.Free(136) 16521 16522 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 16523 var zField uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 16524 var zWhere uintptr 16525 var zCollName uintptr 16526 var zWhereClause uintptr = uintptr(0) 16527 var zColl uintptr = uintptr(0) 16528 var zSql uintptr 16529 var rc int32 16530 16531 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(nextCharContext{}))) 16532 (*nextCharContext)(unsafe.Pointer(bp + 80)).Fdb = sqlite3.Xsqlite3_context_db_handle(tls, context) 16533 (*nextCharContext)(unsafe.Pointer(bp + 80)).FzPrefix = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 16534 (*nextCharContext)(unsafe.Pointer(bp + 80)).FnPrefix = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 16535 if zTable == uintptr(0) || zField == uintptr(0) || (*nextCharContext)(unsafe.Pointer(bp+80)).FzPrefix == uintptr(0) { 16536 return 16537 } 16538 if argc >= 4 && 16539 libc.AssignUintptr(&zWhere, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) != uintptr(0) && 16540 int32(*(*uint8)(unsafe.Pointer(zWhere))) != 0 { 16541 zWhereClause = sqlite3.Xsqlite3_mprintf(tls, ts+5706, libc.VaList(bp, zWhere)) 16542 if zWhereClause == uintptr(0) { 16543 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16544 return 16545 } 16546 } else { 16547 zWhereClause = ts + 584 16548 } 16549 if argc >= 5 && 16550 libc.AssignUintptr(&zCollName, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) != uintptr(0) && 16551 int32(*(*uint8)(unsafe.Pointer(zCollName))) != 0 { 16552 zColl = sqlite3.Xsqlite3_mprintf(tls, ts+5715, libc.VaList(bp+8, zCollName)) 16553 if zColl == uintptr(0) { 16554 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16555 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 16556 sqlite3.Xsqlite3_free(tls, zWhereClause) 16557 } 16558 return 16559 } 16560 } else { 16561 zColl = ts + 584 16562 } 16563 zSql = sqlite3.Xsqlite3_mprintf(tls, 16564 ts+5728, 16565 libc.VaList(bp+16, zField, zTable, zField, zColl, zField, zColl, zWhereClause, zColl)) 16566 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 16567 sqlite3.Xsqlite3_free(tls, zWhereClause) 16568 } 16569 if *(*int8)(unsafe.Pointer(zColl)) != 0 { 16570 sqlite3.Xsqlite3_free(tls, zColl) 16571 } 16572 if zSql == uintptr(0) { 16573 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16574 return 16575 } 16576 16577 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb, zSql, -1, bp+80+8, uintptr(0)) 16578 sqlite3.Xsqlite3_free(tls, zSql) 16579 if rc != 0 { 16580 sqlite3.Xsqlite3_result_error(tls, context, sqlite3.Xsqlite3_errmsg(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb), -1) 16581 return 16582 } 16583 findNextChars(tls, bp+80) 16584 if (*nextCharContext)(unsafe.Pointer(bp+80)).FmallocFailed != 0 { 16585 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16586 } else { 16587 var pRes uintptr 16588 pRes = sqlite3.Xsqlite3_malloc64(tls, uint64((*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed*4+1)) 16589 if pRes == uintptr(0) { 16590 sqlite3.Xsqlite3_result_error_nomem(tls, context) 16591 } else { 16592 var i int32 16593 var n int32 = 0 16594 for i = 0; i < (*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed; i++ { 16595 n = n + writeUtf8(tls, pRes+uintptr(n), *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(bp+80)).FaResult + uintptr(i)*4))) 16596 } 16597 *(*uint8)(unsafe.Pointer(pRes + uintptr(n))) = uint8(0) 16598 sqlite3.Xsqlite3_result_text(tls, context, pRes, n, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 16599 } 16600 } 16601 sqlite3.Xsqlite3_finalize(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FpStmt) 16602 sqlite3.Xsqlite3_free(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FaResult) 16603 } 16604 16605 func sqlite3_nextchar_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16606 var rc int32 = SQLITE_OK 16607 _ = pApi 16608 16609 _ = pzErrMsg 16610 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 3, 16611 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 16612 *(*uintptr)(unsafe.Pointer(&struct { 16613 f func(*libc.TLS, uintptr, int32, uintptr) 16614 }{nextCharFunc})), uintptr(0), uintptr(0)) 16615 if rc == SQLITE_OK { 16616 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 4, 16617 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 16618 *(*uintptr)(unsafe.Pointer(&struct { 16619 f func(*libc.TLS, uintptr, int32, uintptr) 16620 }{nextCharFunc})), uintptr(0), uintptr(0)) 16621 } 16622 if rc == SQLITE_OK { 16623 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 5, 16624 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 16625 *(*uintptr)(unsafe.Pointer(&struct { 16626 f func(*libc.TLS, uintptr, int32, uintptr) 16627 }{nextCharFunc})), uintptr(0), uintptr(0)) 16628 } 16629 return rc 16630 } 16631 16632 var aiClass = [256]uint8{ 16633 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), 16634 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), 16635 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), 16636 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), 16637 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), 16638 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), 16639 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), 16640 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), 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 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), 16648 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), 16649 } 16650 16651 var sqlite3UpperToLower = [256]uint8{ 16652 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), 16653 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), 16654 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), 16655 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), 16656 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), 16657 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), 16658 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), 16659 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), 16660 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), 16661 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), 16662 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), 16663 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), 16664 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), 16665 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), 16666 uint8(252), uint8(253), uint8(254), uint8(255), 16667 } 16668 16669 var sqlite3CtypeMap = [256]uint8{ 16670 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16671 uint8(0x00), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x00), uint8(0x00), 16672 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16673 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16674 uint8(0x01), uint8(0x00), uint8(0x80), uint8(0x00), uint8(0x40), uint8(0x00), uint8(0x00), uint8(0x80), 16675 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16676 uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), 16677 uint8(0x0c), uint8(0x0c), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 16678 uint8(0x00), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x02), 16679 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 16680 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 16681 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x80), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x40), 16682 uint8(0x80), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x22), 16683 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 16684 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 16685 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 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 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16701 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 16702 } 16703 16704 func sqlite3GetToken(tls *libc.TLS, z uintptr, tokenType uintptr) int32 { 16705 var i int32 16706 var c int32 16707 switch int32(aiClass[*(*uint8)(unsafe.Pointer(z))]) { 16708 case CC_SPACE: 16709 { 16710 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x01 != 0; i++ { 16711 } 16712 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 16713 return i 16714 16715 } 16716 case CC_MINUS: 16717 { 16718 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '-' { 16719 for i = 2; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && c != '\n'; i++ { 16720 } 16721 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 16722 return i 16723 } 16724 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16725 return 1 16726 16727 } 16728 case CC_LP: 16729 { 16730 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16731 return 1 16732 16733 } 16734 case CC_RP: 16735 { 16736 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16737 return 1 16738 16739 } 16740 case CC_SEMI: 16741 { 16742 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16743 return 1 16744 16745 } 16746 case CC_PLUS: 16747 { 16748 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16749 return 1 16750 16751 } 16752 case CC_STAR: 16753 { 16754 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16755 return 1 16756 16757 } 16758 case CC_SLASH: 16759 { 16760 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '*' || int32(*(*uint8)(unsafe.Pointer(z + 2))) == 0 { 16761 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16762 return 1 16763 } 16764 i = 3 16765 c = int32(*(*uint8)(unsafe.Pointer(z + 2))) 16766 for ; (c != '*' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/') && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 16767 } 16768 if c != 0 { 16769 i++ 16770 } 16771 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 16772 return i 16773 16774 } 16775 case CC_PERCENT: 16776 { 16777 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16778 return 1 16779 16780 } 16781 case CC_EQ: 16782 { 16783 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16784 return 1 + libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z + 1))) == '=') 16785 16786 } 16787 case CC_LT: 16788 { 16789 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 16790 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16791 return 2 16792 } else if c == '>' { 16793 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16794 return 2 16795 } else if c == '<' { 16796 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16797 return 2 16798 } else { 16799 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16800 return 1 16801 } 16802 16803 } 16804 fallthrough 16805 case CC_GT: 16806 { 16807 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 16808 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16809 return 2 16810 } else if c == '>' { 16811 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16812 return 2 16813 } else { 16814 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16815 return 1 16816 } 16817 16818 } 16819 fallthrough 16820 case CC_BANG: 16821 { 16822 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '=' { 16823 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16824 return 1 16825 } else { 16826 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16827 return 2 16828 } 16829 16830 } 16831 fallthrough 16832 case CC_PIPE: 16833 { 16834 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '|' { 16835 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16836 return 1 16837 } else { 16838 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16839 return 2 16840 } 16841 16842 } 16843 fallthrough 16844 case CC_COMMA: 16845 { 16846 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16847 return 1 16848 16849 } 16850 case CC_AND: 16851 { 16852 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16853 return 1 16854 16855 } 16856 case CC_TILDA: 16857 { 16858 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16859 return 1 16860 16861 } 16862 case CC_QUOTE: 16863 { 16864 var delim int32 = int32(*(*uint8)(unsafe.Pointer(z))) 16865 16866 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 16867 if c == delim { 16868 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == delim { 16869 i++ 16870 } else { 16871 break 16872 } 16873 } 16874 } 16875 if c == '\'' { 16876 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16877 return i + 1 16878 } else if c != 0 { 16879 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 16880 return i + 1 16881 } else { 16882 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16883 return i 16884 } 16885 16886 } 16887 fallthrough 16888 case CC_DOT: 16889 { 16890 if !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + 1))])&0x04 != 0) { 16891 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 16892 return 1 16893 } 16894 16895 } 16896 fallthrough 16897 case CC_DIGIT: 16898 { 16899 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16900 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 { 16901 for i = 3; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 16902 } 16903 return i 16904 } 16905 for i = 0; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 16906 } 16907 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' { 16908 i++ 16909 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 16910 i++ 16911 } 16912 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16913 } 16914 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 || 16915 (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) { 16916 i = i + 2 16917 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 16918 i++ 16919 } 16920 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16921 } 16922 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 16923 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16924 i++ 16925 } 16926 return i 16927 16928 } 16929 case CC_QUOTE2: 16930 { 16931 i = 1 16932 c = int32(*(*uint8)(unsafe.Pointer(z))) 16933 for ; c != ']' && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 16934 } 16935 *(*int32)(unsafe.Pointer(tokenType)) = func() int32 { 16936 if c == ']' { 16937 return TK_NAME 16938 } 16939 return TK_ERROR 16940 }() 16941 return i 16942 16943 } 16944 case CC_VARNUM: 16945 { 16946 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16947 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 16948 } 16949 return i 16950 16951 } 16952 case CC_DOLLAR: 16953 fallthrough 16954 case CC_VARALPHA: 16955 { 16956 var n int32 = 0 16957 16958 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 16959 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 16960 if int32(sqlite3CtypeMap[uint8(c)])&0x46 != 0 { 16961 n++ 16962 } else if c == '(' && n > 0 { 16963 for __ccgo := true; __ccgo; __ccgo = libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && !(int32(sqlite3CtypeMap[uint8(c)])&0x01 != 0) && c != ')' { 16964 i++ 16965 } 16966 if c == ')' { 16967 i++ 16968 } else { 16969 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16970 } 16971 break 16972 } else if c == ':' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == ':' { 16973 i++ 16974 } else { 16975 break 16976 } 16977 } 16978 if n == 0 { 16979 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 16980 } 16981 return i 16982 16983 } 16984 case CC_KYWD: 16985 { 16986 for i = 1; int32(aiClass[*(*uint8)(unsafe.Pointer(z + uintptr(i)))]) <= CC_KYWD; i++ { 16987 } 16988 if int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 16989 i++ 16990 break 16991 } 16992 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 16993 return i 16994 16995 } 16996 case CC_X: 16997 { 16998 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '\'' { 16999 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17000 for i = 2; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17001 } 17002 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' || i%2 != 0 { 17003 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17004 for *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' { 17005 i++ 17006 } 17007 } 17008 if *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 { 17009 i++ 17010 } 17011 return i 17012 } 17013 17014 } 17015 fallthrough 17016 case CC_ID: 17017 { 17018 i = 1 17019 break 17020 17021 } 17022 default: 17023 { 17024 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17025 return 1 17026 17027 } 17028 } 17029 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17030 i++ 17031 } 17032 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17033 return i 17034 } 17035 17036 func sqlite3_normalize(tls *libc.TLS, zSql uintptr) uintptr { 17037 bp := tls.Alloc(4) 17038 defer tls.Free(4) 17039 17040 var z uintptr 17041 var nZ sqlite3_int64 17042 var nSql sqlite3_int64 17043 var i int32 17044 var j int32 17045 17046 var n int32 17047 var k int32 17048 17049 nSql = sqlite3_int64(libc.Xstrlen(tls, zSql)) 17050 nZ = nSql 17051 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nZ+int64(2))) 17052 if z == uintptr(0) { 17053 return uintptr(0) 17054 } 17055 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; i = i + n { 17056 n = sqlite3GetToken(tls, zSql+uintptr(i), bp) 17057 switch *(*int32)(unsafe.Pointer(bp)) { 17058 case TK_SPACE: 17059 { 17060 break 17061 17062 } 17063 case TK_ERROR: 17064 { 17065 sqlite3.Xsqlite3_free(tls, z) 17066 return uintptr(0) 17067 17068 } 17069 case TK_LITERAL: 17070 { 17071 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 17072 break 17073 17074 } 17075 case TK_PUNCT: 17076 fallthrough 17077 case TK_NAME: 17078 { 17079 if n == 4 && sqlite3.Xsqlite3_strnicmp(tls, zSql+uintptr(i), ts+5846, 4) == 0 { 17080 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) || 17081 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) { 17082 } else { 17083 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 17084 break 17085 } 17086 } 17087 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 { 17088 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(' ') 17089 } 17090 for k = 0; k < n; k++ { 17091 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(sqlite3UpperToLower[uint8(*(*int8)(unsafe.Pointer(zSql + uintptr(i+k))))]) 17092 } 17093 break 17094 17095 } 17096 } 17097 } 17098 for j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) == ' ' { 17099 j-- 17100 } 17101 if j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) != ';' { 17102 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(';') 17103 } 17104 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 17105 17106 for i = 0; i < j; i = n { 17107 var zIn uintptr = libc.Xstrstr(tls, z+uintptr(i), ts+5858) 17108 var nParen int32 17109 if zIn == uintptr(0) { 17110 break 17111 } 17112 n = int32((int64(zIn)-int64(z))/1) + 3 17113 if n != 0 && int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + libc.UintptrFromInt32(-1))))])&0x46 != 0 { 17114 continue 17115 } 17116 if libc.Xstrncmp(tls, zIn, ts+5862, uint64(9)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 9)))])&0x46 != 0) { 17117 continue 17118 } 17119 if libc.Xstrncmp(tls, zIn, ts+5872, uint64(7)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 7)))])&0x46 != 0) { 17120 continue 17121 } 17122 nParen = 1 17123 k = 0 17124 for ; *(*int8)(unsafe.Pointer(z + uintptr(n+k))) != 0; k++ { 17125 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == '(' { 17126 nParen++ 17127 } 17128 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == ')' { 17129 nParen-- 17130 if nParen == 0 { 17131 break 17132 } 17133 } 17134 } 17135 17136 if k < 5 { 17137 z = sqlite3.Xsqlite3_realloc64(tls, z, uint64(j+(5-k)+1)) 17138 if z == uintptr(0) { 17139 return uintptr(0) 17140 } 17141 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 17142 } else if k > 5 { 17143 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 17144 } 17145 j = j - k + 5 17146 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 17147 libc.Xmemcpy(tls, z+uintptr(n), ts+5880, uint64(5)) 17148 } 17149 return z 17150 } 17151 17152 type Percentile1 = struct { 17153 FnAlloc uint32 17154 FnUsed uint32 17155 FrPct float64 17156 Fa uintptr 17157 } 17158 17159 type Percentile = Percentile1 17160 17161 func isInfinity(tls *libc.TLS, r float64) int32 { 17162 bp := tls.Alloc(16) 17163 defer tls.Free(16) 17164 *(*float64)(unsafe.Pointer(bp + 8)) = r 17165 17166 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 17167 return libc.Bool32(*(*sqlite3_uint64)(unsafe.Pointer(bp))>>52&uint64(0x7ff) == uint64(0x7ff)) 17168 } 17169 17170 func sameValue(tls *libc.TLS, a float64, b float64) int32 { 17171 a = a - b 17172 return libc.Bool32(a >= -0.001 && a <= 0.001) 17173 } 17174 17175 func percentStep(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 17176 var p uintptr 17177 var rPct float64 17178 var eType int32 17179 var y float64 17180 17181 eType = sqlite3.Xsqlite3_value_numeric_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17182 rPct = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17183 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT || 17184 rPct < 0.0 || rPct > 100.0 { 17185 sqlite3.Xsqlite3_result_error(tls, pCtx, 17186 ts+5886, -1) 17187 return 17188 } 17189 17190 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, int32(unsafe.Sizeof(Percentile{}))) 17191 if p == uintptr(0) { 17192 return 17193 } 17194 17195 if (*Percentile)(unsafe.Pointer(p)).FrPct == 0.0 { 17196 (*Percentile)(unsafe.Pointer(p)).FrPct = rPct + 1.0 17197 } else if !(sameValue(tls, (*Percentile)(unsafe.Pointer(p)).FrPct, rPct+1.0) != 0) { 17198 sqlite3.Xsqlite3_result_error(tls, pCtx, 17199 ts+5953, -1) 17200 return 17201 } 17202 17203 eType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) 17204 if eType == SQLITE_NULL { 17205 return 17206 } 17207 17208 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT { 17209 sqlite3.Xsqlite3_result_error(tls, pCtx, 17210 ts+6017, -1) 17211 return 17212 } 17213 17214 y = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 17215 if isInfinity(tls, y) != 0 { 17216 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+6061, -1) 17217 return 17218 } 17219 17220 if (*Percentile)(unsafe.Pointer(p)).FnUsed >= (*Percentile)(unsafe.Pointer(p)).FnAlloc { 17221 var n uint32 = (*Percentile)(unsafe.Pointer(p)).FnAlloc*uint32(2) + uint32(250) 17222 var a uintptr = sqlite3.Xsqlite3_realloc64(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64(unsafe.Sizeof(float64(0)))*uint64(n)) 17223 if a == uintptr(0) { 17224 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17225 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 17226 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 17227 return 17228 } 17229 (*Percentile)(unsafe.Pointer(p)).FnAlloc = n 17230 (*Percentile)(unsafe.Pointer(p)).Fa = a 17231 } 17232 *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncUint32(&(*Percentile)(unsafe.Pointer(p)).FnUsed, 1))*8)) = y 17233 } 17234 17235 func doubleCmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 17236 var a float64 = *(*float64)(unsafe.Pointer(pA)) 17237 var b float64 = *(*float64)(unsafe.Pointer(pB)) 17238 if a == b { 17239 return 0 17240 } 17241 if a < b { 17242 return -1 17243 } 17244 return +1 17245 } 17246 17247 func percentFinal(tls *libc.TLS, pCtx uintptr) { 17248 var p uintptr 17249 var i1 uint32 17250 var i2 uint32 17251 var v1 float64 17252 var v2 float64 17253 var ix float64 17254 var vx float64 17255 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, 0) 17256 if p == uintptr(0) { 17257 return 17258 } 17259 if (*Percentile)(unsafe.Pointer(p)).Fa == uintptr(0) { 17260 return 17261 } 17262 if (*Percentile)(unsafe.Pointer(p)).FnUsed != 0 { 17263 libc.Xqsort(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64((*Percentile)(unsafe.Pointer(p)).FnUsed), uint64(unsafe.Sizeof(float64(0))), *(*uintptr)(unsafe.Pointer(&struct { 17264 f func(*libc.TLS, uintptr, uintptr) int32 17265 }{doubleCmp}))) 17266 ix = ((*Percentile)(unsafe.Pointer(p)).FrPct - 1.0) * float64((*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1)) * 0.01 17267 i1 = uint32(ix) 17268 if ix == float64(i1) || i1 == (*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1) { 17269 i2 = i1 17270 } else { 17271 i2 = i1 + uint32(1) 17272 } 17273 v1 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i1)*8)) 17274 v2 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i2)*8)) 17275 vx = v1 + (v2-v1)*(ix-float64(i1)) 17276 sqlite3.Xsqlite3_result_double(tls, pCtx, vx) 17277 } 17278 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17279 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 17280 } 17281 17282 func sqlite3_percentile_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17283 var rc int32 = SQLITE_OK 17284 _ = pApi 17285 17286 _ = pzErrMsg 17287 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6087, 2, 17288 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17289 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17290 f func(*libc.TLS, uintptr, int32, uintptr) 17291 }{percentStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{percentFinal}))) 17292 return rc 17293 } 17294 17295 type prefixes_vtab1 = struct{ Fbase sqlite3_vtab } 17296 17297 type prefixes_vtab = prefixes_vtab1 17298 17299 type prefixes_cursor1 = struct { 17300 Fbase sqlite3_vtab_cursor 17301 FiRowid sqlite3_int64 17302 FzStr uintptr 17303 FnStr int32 17304 F__ccgo_pad1 [4]byte 17305 } 17306 17307 type prefixes_cursor = prefixes_cursor1 17308 17309 func prefixesConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17310 var pNew uintptr 17311 var rc int32 17312 17313 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17314 ts+6098) 17315 if rc == SQLITE_OK { 17316 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_vtab{}))) 17317 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17318 if pNew == uintptr(0) { 17319 return SQLITE_NOMEM 17320 } 17321 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(prefixes_vtab{}))) 17322 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 17323 } 17324 return rc 17325 } 17326 17327 func prefixesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17328 var p uintptr = pVtab 17329 sqlite3.Xsqlite3_free(tls, p) 17330 return SQLITE_OK 17331 } 17332 17333 func prefixesOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17334 var pCur uintptr 17335 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_cursor{}))) 17336 if pCur == uintptr(0) { 17337 return SQLITE_NOMEM 17338 } 17339 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(prefixes_cursor{}))) 17340 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17341 return SQLITE_OK 17342 } 17343 17344 func prefixesClose(tls *libc.TLS, cur uintptr) int32 { 17345 var pCur uintptr = cur 17346 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17347 sqlite3.Xsqlite3_free(tls, pCur) 17348 return SQLITE_OK 17349 } 17350 17351 func prefixesNext(tls *libc.TLS, cur uintptr) int32 { 17352 var pCur uintptr = cur 17353 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid++ 17354 return SQLITE_OK 17355 } 17356 17357 func prefixesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 17358 var pCur uintptr = cur 17359 switch i { 17360 case 0: 17361 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), 17362 uintptr(0)) 17363 break 17364 default: 17365 sqlite3.Xsqlite3_result_text(tls, ctx, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr, (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr, uintptr(0)) 17366 break 17367 } 17368 return SQLITE_OK 17369 } 17370 17371 func prefixesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 17372 var pCur uintptr = cur 17373 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid 17374 return SQLITE_OK 17375 } 17376 17377 func prefixesEof(tls *libc.TLS, cur uintptr) int32 { 17378 var pCur uintptr = cur 17379 return libc.Bool32((*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid > sqlite3_int64((*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr)) 17380 } 17381 17382 func prefixesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 17383 bp := tls.Alloc(8) 17384 defer tls.Free(8) 17385 17386 var pCur uintptr = pVtabCursor 17387 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17388 if argc > 0 { 17389 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 17390 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = func() int32 { 17391 if (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr != 0 { 17392 return int32(libc.Xstrlen(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr)) 17393 } 17394 return 0 17395 }() 17396 } else { 17397 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = uintptr(0) 17398 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = 0 17399 } 17400 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 17401 return SQLITE_OK 17402 } 17403 17404 func prefixesBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 17405 var i int32 17406 var p uintptr 17407 17408 i = 0 17409 p = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 17410 __1: 17411 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 17412 goto __3 17413 } 17414 { 17415 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != 1 { 17416 goto __2 17417 } 17418 if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 17419 goto __2 17420 } 17421 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 17422 goto __2 17423 } 17424 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 17425 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 17426 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 17427 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 17428 return SQLITE_OK 17429 17430 } 17431 goto __2 17432 __2: 17433 i++ 17434 p += 12 17435 goto __1 17436 goto __3 17437 __3: 17438 ; 17439 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000000) 17440 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000000000) 17441 return SQLITE_OK 17442 } 17443 17444 var prefixesModule = sqlite3_module{ 17445 FxConnect: 0, 17446 FxBestIndex: 0, 17447 FxDisconnect: 0, 17448 FxOpen: 0, 17449 FxClose: 0, 17450 FxFilter: 0, 17451 FxNext: 0, 17452 FxEof: 0, 17453 FxColumn: 0, 17454 FxRowid: 0, 17455 } 17456 17457 func prefixLengthFunc(tls *libc.TLS, ctx uintptr, nVal int32, apVal uintptr) { 17458 var nByte int32 17459 var nRet int32 = 0 17460 var zL uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 17461 var zR uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 17462 var nL int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 17463 var nR int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 17464 var i int32 17465 17466 nByte = func() int32 { 17467 if nL > nR { 17468 return nL 17469 } 17470 return nR 17471 }() 17472 for i = 0; i < nByte; i++ { 17473 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i)))) != int32(*(*uint8)(unsafe.Pointer(zR + uintptr(i)))) { 17474 break 17475 } 17476 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 != 0x80 { 17477 nRet++ 17478 } 17479 } 17480 17481 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 == 0x80 { 17482 nRet-- 17483 } 17484 sqlite3.Xsqlite3_result_int(tls, ctx, nRet) 17485 } 17486 17487 func sqlite3_prefixes_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17488 var rc int32 = SQLITE_OK 17489 _ = pApi 17490 17491 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6162, uintptr(unsafe.Pointer(&prefixesModule)), uintptr(0)) 17492 if rc == SQLITE_OK { 17493 rc = sqlite3.Xsqlite3_create_function(tls, 17494 db, ts+6171, 2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17495 f func(*libc.TLS, uintptr, int32, uintptr) 17496 }{prefixLengthFunc})), uintptr(0), uintptr(0)) 17497 } 17498 return rc 17499 } 17500 17501 type qpvtab_vtab1 = struct{ Fbase sqlite3_vtab } 17502 17503 type qpvtab_vtab = qpvtab_vtab1 17504 17505 type qpvtab_cursor1 = struct { 17506 Fbase sqlite3_vtab_cursor 17507 FiRowid sqlite3_int64 17508 FzData uintptr 17509 FnData int32 17510 Fflags int32 17511 } 17512 17513 type qpvtab_cursor = qpvtab_cursor1 17514 17515 var azColname = [13]uintptr{ 17516 ts + 6185, 17517 ts + 6188, 17518 ts + 6191, 17519 ts + 6194, 17520 ts + 6197, 17521 ts + 6200, 17522 ts + 6204, ts + 6206, ts + 6208, ts + 6210, ts + 6212, 17523 ts + 6214, 17524 ts + 584, 17525 } 17526 17527 func qpvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17528 var pNew uintptr 17529 var rc int32 17530 17531 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17532 ts+6220) 17533 if rc == SQLITE_OK { 17534 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_vtab{}))) 17535 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17536 if pNew == uintptr(0) { 17537 return SQLITE_NOMEM 17538 } 17539 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(qpvtab_vtab{}))) 17540 } 17541 return rc 17542 } 17543 17544 func qpvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17545 var p uintptr = pVtab 17546 sqlite3.Xsqlite3_free(tls, p) 17547 return SQLITE_OK 17548 } 17549 17550 func qpvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17551 var pCur uintptr 17552 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_cursor{}))) 17553 if pCur == uintptr(0) { 17554 return SQLITE_NOMEM 17555 } 17556 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(qpvtab_cursor{}))) 17557 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17558 return SQLITE_OK 17559 } 17560 17561 func qpvtabClose(tls *libc.TLS, cur uintptr) int32 { 17562 var pCur uintptr = cur 17563 sqlite3.Xsqlite3_free(tls, pCur) 17564 return SQLITE_OK 17565 } 17566 17567 func qpvtabNext(tls *libc.TLS, cur uintptr) int32 { 17568 var pCur uintptr = cur 17569 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 17570 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 17571 var zEnd uintptr = libc.Xstrchr(tls, z, '\n') 17572 if zEnd != 0 { 17573 zEnd++ 17574 } 17575 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = sqlite3_int64(int32((int64(zEnd) - int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData)) / 1)) 17576 } 17577 return SQLITE_OK 17578 } 17579 17580 func qpvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 17581 bp := tls.Alloc(1) 17582 defer tls.Free(1) 17583 17584 var pCur uintptr = cur 17585 if i >= QPVTAB_VN && i <= QPVTAB_RHS && (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 17586 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 17587 var zEnd uintptr 17588 var j int32 17589 j = QPVTAB_VN 17590 for 1 != 0 { 17591 zEnd = libc.Xstrchr(tls, z, func() int32 { 17592 if j == QPVTAB_RHS { 17593 return '\n' 17594 } 17595 return ',' 17596 }()) 17597 if j == i || zEnd == uintptr(0) { 17598 break 17599 } 17600 z = zEnd + uintptr(1) 17601 j++ 17602 } 17603 if zEnd == z { 17604 sqlite3.Xsqlite3_result_null(tls, ctx) 17605 } else if i == QPVTAB_IX || i == QPVTAB_OP || i == QPVTAB_UX { 17606 sqlite3.Xsqlite3_result_int(tls, ctx, libc.Xatoi(tls, z)) 17607 } else { 17608 sqlite3.Xsqlite3_result_text64(tls, ctx, z, uint64((int64(zEnd)-int64(z))/1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 17609 } 17610 } else if i >= QPVTAB_A && i <= QPVTAB_E { 17611 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags&0x001 != 0 { 17612 sqlite3.Xsqlite3_result_int(tls, ctx, i-QPVTAB_A+1) 17613 } else { 17614 *(*int8)(unsafe.Pointer(bp)) = int8('a' + i - QPVTAB_A) 17615 sqlite3.Xsqlite3_result_text64(tls, ctx, bp, uint64(1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 17616 } 17617 } else if i == QPVTAB_FLAGS { 17618 sqlite3.Xsqlite3_result_int(tls, ctx, (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags) 17619 } 17620 return SQLITE_OK 17621 } 17622 17623 func qpvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 17624 var pCur uintptr = cur 17625 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid 17626 return SQLITE_OK 17627 } 17628 17629 func qpvtabEof(tls *libc.TLS, cur uintptr) int32 { 17630 var pCur uintptr = cur 17631 return libc.Bool32((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid >= sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData)) 17632 } 17633 17634 func qpvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 17635 var pCur uintptr = pVtabCursor 17636 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 17637 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData = idxStr 17638 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData = int32(libc.Xstrlen(tls, idxStr)) 17639 (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags = idxNum 17640 return SQLITE_OK 17641 } 17642 17643 func qpvtabStrAppendValue(tls *libc.TLS, pStr uintptr, pVal uintptr) { 17644 bp := tls.Alloc(25) 17645 defer tls.Free(25) 17646 17647 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 17648 case SQLITE_NULL: 17649 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+5846, 0) 17650 break 17651 case SQLITE_INTEGER: 17652 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6325, libc.VaList(bp, sqlite3.Xsqlite3_value_int64(tls, pVal))) 17653 break 17654 case SQLITE_FLOAT: 17655 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6330, libc.VaList(bp+8, sqlite3.Xsqlite3_value_double(tls, pVal))) 17656 break 17657 case SQLITE_TEXT: 17658 { 17659 var i int32 17660 var a uintptr = sqlite3.Xsqlite3_value_text(tls, pVal) 17661 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 17662 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 17663 for i = 0; i < n; i++ { 17664 *(*int8)(unsafe.Pointer(bp + 24)) = *(*int8)(unsafe.Pointer(a + uintptr(i))) 17665 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\n' { 17666 *(*int8)(unsafe.Pointer(bp + 24)) = int8(' ') 17667 } 17668 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 17669 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\'' { 17670 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 17671 } 17672 } 17673 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 17674 break 17675 17676 } 17677 case SQLITE_BLOB: 17678 { 17679 var i int32 17680 var a uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 17681 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 17682 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6334, 2) 17683 for i = 0; i < n; i++ { 17684 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6337, libc.VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a + uintptr(i)))))) 17685 } 17686 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 17687 break 17688 17689 } 17690 } 17691 } 17692 17693 func qpvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 17694 bp := tls.Alloc(120) 17695 defer tls.Free(120) 17696 17697 var pStr uintptr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 17698 var i int32 17699 var k int32 = 0 17700 var rc int32 17701 _ = rc 17702 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6342, libc.VaList(bp, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint)) 17703 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 17704 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 17705 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 17706 if iCol == QPVTAB_FLAGS && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 17707 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 17708 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 17709 17710 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 17711 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 17712 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x002 != 0 { 17713 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 17714 } 17715 } 17716 } 17717 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 17718 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 17719 iCol = QPVTAB_NONE 17720 } 17721 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6362, 17722 libc.VaList(bp+8, i, 17723 azColname[iCol], 17724 op, 17725 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable))) 17726 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 17727 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 17728 17729 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 17730 qpvtabStrAppendValue(tls, pStr, *(*uintptr)(unsafe.Pointer(bp + 112))) 17731 } 17732 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6387, 1) 17733 } 17734 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 17735 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 17736 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 17737 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 17738 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 17739 iCol = QPVTAB_NONE 17740 } 17741 if iCol >= QPVTAB_A && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 17742 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&k, 1) 17743 if iCol <= QPVTAB_FLAGS || (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x004 != 0 { 17744 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 17745 } 17746 } 17747 } 17748 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6389, libc.VaList(bp+40, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy)) 17749 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; i++ { 17750 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 17751 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6406, libc.VaList(bp+48, i, 17752 func() uintptr { 17753 if iCol >= 0 { 17754 return azColname[iCol] 17755 } 17756 return ts + 6427 17757 }(), 17758 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy+uintptr(i)*8)).Fdesc))) 17759 } 17760 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6433, 17761 libc.VaList(bp+72, sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo))) 17762 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6463, libc.VaList(bp+80, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags)) 17763 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6480, libc.VaList(bp+88, int32((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 17764 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 17765 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 17766 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6496, libc.VaList(bp+96, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum)) 17767 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6511, 17768 libc.VaList(bp+104, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed)) 17769 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_str_finish(tls, pStr) 17770 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 17771 return SQLITE_OK 17772 } 17773 17774 var qpvtabModule = sqlite3_module{ 17775 FxConnect: 0, 17776 FxBestIndex: 0, 17777 FxDisconnect: 0, 17778 FxOpen: 0, 17779 FxClose: 0, 17780 FxFilter: 0, 17781 FxNext: 0, 17782 FxEof: 0, 17783 FxColumn: 0, 17784 FxRowid: 0, 17785 } 17786 17787 func sqlite3_qpvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17788 var rc int32 = SQLITE_OK 17789 _ = pApi 17790 17791 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6535, uintptr(unsafe.Pointer(&qpvtabModule)), uintptr(0)) 17792 return rc 17793 } 17794 17795 type ReStateNumber = uint16 17796 17797 type ReStateSet1 = struct { 17798 FnState uint32 17799 F__ccgo_pad1 [4]byte 17800 FaState uintptr 17801 } 17802 17803 type ReStateSet = ReStateSet1 17804 17805 type ReInput1 = struct { 17806 Fz uintptr 17807 Fi int32 17808 Fmx int32 17809 } 17810 17811 type ReInput = ReInput1 17812 17813 type ReCompiled1 = struct { 17814 FsIn ReInput 17815 FzErr uintptr 17816 FaOp uintptr 17817 FaArg uintptr 17818 FxNextChar uintptr 17819 FzInit [12]uint8 17820 FnInit int32 17821 FnState uint32 17822 FnAlloc uint32 17823 } 17824 17825 type ReCompiled = ReCompiled1 17826 17827 func re_add_state(tls *libc.TLS, pSet uintptr, newState int32) { 17828 var i uint32 17829 for i = uint32(0); i < (*ReStateSet)(unsafe.Pointer(pSet)).FnState; i++ { 17830 if int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(i)*2))) == newState { 17831 return 17832 } 17833 } 17834 *(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(libc.PostIncUint32(&(*ReStateSet)(unsafe.Pointer(pSet)).FnState, 1))*2)) = ReStateNumber(newState) 17835 } 17836 17837 func re_next_char(tls *libc.TLS, p uintptr) uint32 { 17838 var c uint32 17839 if (*ReInput)(unsafe.Pointer(p)).Fi >= (*ReInput)(unsafe.Pointer(p)).Fmx { 17840 return uint32(0) 17841 } 17842 c = uint32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*ReInput)(unsafe.Pointer(p)).Fi, 1))))) 17843 if c >= uint32(0x80) { 17844 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 { 17845 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) 17846 if c < uint32(0x80) { 17847 c = uint32(0xfffd) 17848 } 17849 } 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 && 17850 int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0xc0 == 0x80 { 17851 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) 17852 *(*int32)(unsafe.Pointer(p + 8)) += 2 17853 if c <= uint32(0x7ff) || c >= uint32(0xd800) && c <= uint32(0xdfff) { 17854 c = uint32(0xfffd) 17855 } 17856 } 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 && 17857 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 { 17858 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) | 17859 uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+2))))&0x3f) 17860 *(*int32)(unsafe.Pointer(p + 8)) += 3 17861 if c <= uint32(0xffff) || c > uint32(0x10ffff) { 17862 c = uint32(0xfffd) 17863 } 17864 } else { 17865 c = uint32(0xfffd) 17866 } 17867 } 17868 return c 17869 } 17870 17871 func re_next_char_nocase(tls *libc.TLS, p uintptr) uint32 { 17872 var c uint32 = re_next_char(tls, p) 17873 if c >= uint32('A') && c <= uint32('Z') { 17874 c = c + uint32('a'-'A') 17875 } 17876 return c 17877 } 17878 17879 func re_word_char(tls *libc.TLS, c int32) int32 { 17880 return libc.Bool32(c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || 17881 c >= 'A' && c <= 'Z' || c == '_') 17882 } 17883 17884 func re_digit_char(tls *libc.TLS, c int32) int32 { 17885 return libc.Bool32(c >= '0' && c <= '9') 17886 } 17887 17888 func re_space_char(tls *libc.TLS, c int32) int32 { 17889 return libc.Bool32(c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\v' || c == '\f') 17890 } 17891 17892 func sqlite3re_match(tls *libc.TLS, pRe uintptr, zIn uintptr, nIn int32) int32 { 17893 bp := tls.Alloc(248) 17894 defer tls.Free(248) 17895 17896 var pThis uintptr 17897 var pNext uintptr 17898 17899 var pToFree uintptr 17900 var i uint32 17901 var iSwap uint32 17902 var c int32 17903 var cPrev int32 17904 var rc int32 17905 17906 var x uint8 17907 var j int32 17908 var n int32 17909 var hit int32 17910 var x1 int32 17911 i = uint32(0) 17912 iSwap = uint32(0) 17913 c = RE_EOF + 1 17914 cPrev = 0 17915 rc = 0 17916 17917 (*ReInput)(unsafe.Pointer(bp + 232)).Fz = zIn 17918 (*ReInput)(unsafe.Pointer(bp + 232)).Fi = 0 17919 (*ReInput)(unsafe.Pointer(bp + 232)).Fmx = func() int32 { 17920 if nIn >= 0 { 17921 return nIn 17922 } 17923 return int32(libc.Xstrlen(tls, zIn)) 17924 }() 17925 17926 if !((*ReCompiled)(unsafe.Pointer(pRe)).FnInit != 0) { 17927 goto __1 17928 } 17929 x = *(*uint8)(unsafe.Pointer(pRe + 48)) 17930 __2: 17931 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit <= (*ReInput)(unsafe.Pointer(bp+232)).Fmx && 17932 (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)) { 17933 goto __3 17934 } 17935 (*ReInput)(unsafe.Pointer(bp+232)).Fi++ 17936 goto __2 17937 __3: 17938 ; 17939 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit > (*ReInput)(unsafe.Pointer(bp+232)).Fmx) { 17940 goto __4 17941 } 17942 return 0 17943 __4: 17944 ; 17945 __1: 17946 ; 17947 if !(uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState) <= uint64(unsafe.Sizeof([100]ReStateNumber{}))/(uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2))) { 17948 goto __5 17949 } 17950 pToFree = uintptr(0) 17951 (*ReStateSet)(unsafe.Pointer(bp)).FaState = bp + 32 17952 goto __6 17953 __5: 17954 pToFree = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2)*uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState)) 17955 if !(pToFree == uintptr(0)) { 17956 goto __7 17957 } 17958 return -1 17959 __7: 17960 ; 17961 (*ReStateSet)(unsafe.Pointer(bp)).FaState = pToFree 17962 __6: 17963 ; 17964 (*ReStateSet)(unsafe.Pointer(bp + 1*16)).FaState = (*ReStateSet)(unsafe.Pointer(bp)).FaState + uintptr((*ReCompiled)(unsafe.Pointer(pRe)).FnState)*2 17965 pNext = bp + 1*16 17966 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 17967 re_add_state(tls, pNext, 0) 17968 __8: 17969 if !(c != RE_EOF && (*ReStateSet)(unsafe.Pointer(pNext)).FnState > uint32(0)) { 17970 goto __9 17971 } 17972 cPrev = c 17973 c = int32((*struct { 17974 f func(*libc.TLS, uintptr) uint32 17975 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar})).f(tls, bp+232)) 17976 pThis = pNext 17977 pNext = bp + uintptr(iSwap)*16 17978 iSwap = uint32(1) - iSwap 17979 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 17980 i = uint32(0) 17981 __10: 17982 if !(i < (*ReStateSet)(unsafe.Pointer(pThis)).FnState) { 17983 goto __12 17984 } 17985 x1 = int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pThis)).FaState + uintptr(i)*2))) 17986 switch int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) { 17987 case RE_OP_MATCH: 17988 goto __14 17989 case RE_OP_ANY: 17990 goto __15 17991 case RE_OP_WORD: 17992 goto __16 17993 case RE_OP_NOTWORD: 17994 goto __17 17995 case RE_OP_DIGIT: 17996 goto __18 17997 case RE_OP_NOTDIGIT: 17998 goto __19 17999 case RE_OP_SPACE: 18000 goto __20 18001 case RE_OP_NOTSPACE: 18002 goto __21 18003 case RE_OP_BOUNDARY: 18004 goto __22 18005 case RE_OP_ANYSTAR: 18006 goto __23 18007 case RE_OP_FORK: 18008 goto __24 18009 case RE_OP_GOTO: 18010 goto __25 18011 case RE_OP_ACCEPT: 18012 goto __26 18013 case RE_OP_CC_EXC: 18014 goto __27 18015 case RE_OP_CC_INC: 18016 goto __28 18017 } 18018 goto __13 18019 __14: 18020 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) == c) { 18021 goto __29 18022 } 18023 re_add_state(tls, pNext, x1+1) 18024 __29: 18025 ; 18026 goto __13 18027 18028 __15: 18029 if !(c != 0) { 18030 goto __30 18031 } 18032 re_add_state(tls, pNext, x1+1) 18033 __30: 18034 ; 18035 goto __13 18036 18037 __16: 18038 if !(re_word_char(tls, c) != 0) { 18039 goto __31 18040 } 18041 re_add_state(tls, pNext, x1+1) 18042 __31: 18043 ; 18044 goto __13 18045 18046 __17: 18047 if !(!(re_word_char(tls, c) != 0) && c != 0) { 18048 goto __32 18049 } 18050 re_add_state(tls, pNext, x1+1) 18051 __32: 18052 ; 18053 goto __13 18054 18055 __18: 18056 if !(re_digit_char(tls, c) != 0) { 18057 goto __33 18058 } 18059 re_add_state(tls, pNext, x1+1) 18060 __33: 18061 ; 18062 goto __13 18063 18064 __19: 18065 if !(!(re_digit_char(tls, c) != 0) && c != 0) { 18066 goto __34 18067 } 18068 re_add_state(tls, pNext, x1+1) 18069 __34: 18070 ; 18071 goto __13 18072 18073 __20: 18074 if !(re_space_char(tls, c) != 0) { 18075 goto __35 18076 } 18077 re_add_state(tls, pNext, x1+1) 18078 __35: 18079 ; 18080 goto __13 18081 18082 __21: 18083 if !(!(re_space_char(tls, c) != 0) && c != 0) { 18084 goto __36 18085 } 18086 re_add_state(tls, pNext, x1+1) 18087 __36: 18088 ; 18089 goto __13 18090 18091 __22: 18092 if !(re_word_char(tls, c) != re_word_char(tls, cPrev)) { 18093 goto __37 18094 } 18095 re_add_state(tls, pThis, x1+1) 18096 __37: 18097 ; 18098 goto __13 18099 18100 __23: 18101 re_add_state(tls, pNext, x1) 18102 re_add_state(tls, pThis, x1+1) 18103 goto __13 18104 18105 __24: 18106 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18107 re_add_state(tls, pThis, x1+1) 18108 goto __13 18109 18110 __25: 18111 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18112 goto __13 18113 18114 __26: 18115 rc = 1 18116 goto re_match_end 18117 18118 __27: 18119 if !(c == 0) { 18120 goto __38 18121 } 18122 goto __13 18123 __38: 18124 ; 18125 goto re_op_cc_inc 18126 18127 __28: 18128 re_op_cc_inc: 18129 j = 1 18130 n = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) 18131 hit = 0 18132 j = 1 18133 __39: 18134 if !(j > 0 && j < n) { 18135 goto __41 18136 } 18137 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1+j)))) == RE_OP_CC_VALUE) { 18138 goto __42 18139 } 18140 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j)*4)) == c) { 18141 goto __44 18142 } 18143 hit = 1 18144 j = -1 18145 __44: 18146 ; 18147 goto __43 18148 __42: 18149 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) { 18150 goto __45 18151 } 18152 hit = 1 18153 j = -1 18154 goto __46 18155 __45: 18156 j++ 18157 __46: 18158 ; 18159 __43: 18160 ; 18161 goto __40 18162 __40: 18163 j++ 18164 goto __39 18165 goto __41 18166 __41: 18167 ; 18168 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) == RE_OP_CC_EXC) { 18169 goto __47 18170 } 18171 hit = libc.BoolInt32(!(hit != 0)) 18172 __47: 18173 ; 18174 if !(hit != 0) { 18175 goto __48 18176 } 18177 re_add_state(tls, pNext, x1+n) 18178 __48: 18179 ; 18180 goto __13 18181 18182 __13: 18183 ; 18184 goto __11 18185 __11: 18186 i++ 18187 goto __10 18188 goto __12 18189 __12: 18190 ; 18191 goto __8 18192 __9: 18193 ; 18194 i = uint32(0) 18195 __49: 18196 if !(i < (*ReStateSet)(unsafe.Pointer(pNext)).FnState) { 18197 goto __51 18198 } 18199 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) { 18200 goto __52 18201 } 18202 rc = 1 18203 goto __51 18204 __52: 18205 ; 18206 goto __50 18207 __50: 18208 i++ 18209 goto __49 18210 goto __51 18211 __51: 18212 ; 18213 re_match_end: 18214 sqlite3.Xsqlite3_free(tls, pToFree) 18215 return rc 18216 } 18217 18218 func re_resize(tls *libc.TLS, p uintptr, N int32) int32 { 18219 var aOp uintptr 18220 var aArg uintptr 18221 aOp = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp, uint64(N)*uint64(unsafe.Sizeof(int8(0)))) 18222 if aOp == uintptr(0) { 18223 return 1 18224 } 18225 (*ReCompiled)(unsafe.Pointer(p)).FaOp = aOp 18226 aArg = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg, uint64(N)*uint64(unsafe.Sizeof(int32(0)))) 18227 if aArg == uintptr(0) { 18228 return 1 18229 } 18230 (*ReCompiled)(unsafe.Pointer(p)).FaArg = aArg 18231 (*ReCompiled)(unsafe.Pointer(p)).FnAlloc = uint32(N) 18232 return 0 18233 } 18234 18235 func re_insert(tls *libc.TLS, p uintptr, iBefore int32, op int32, arg int32) int32 { 18236 var i int32 18237 if (*ReCompiled)(unsafe.Pointer(p)).FnAlloc <= (*ReCompiled)(unsafe.Pointer(p)).FnState && re_resize(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnAlloc*uint32(2))) != 0 { 18238 return 0 18239 } 18240 for i = int32((*ReCompiled)(unsafe.Pointer(p)).FnState); i > iBefore; i-- { 18241 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i))) = *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i-1))) 18242 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i-1)*4)) 18243 } 18244 (*ReCompiled)(unsafe.Pointer(p)).FnState++ 18245 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(iBefore))) = int8(op) 18246 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iBefore)*4)) = arg 18247 return iBefore 18248 } 18249 18250 func re_append(tls *libc.TLS, p uintptr, op int32, arg int32) int32 { 18251 return re_insert(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnState), op, arg) 18252 } 18253 18254 func re_copy(tls *libc.TLS, p uintptr, iStart int32, N int32) { 18255 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 { 18256 return 18257 } 18258 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)))) 18259 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)))) 18260 *(*uint32)(unsafe.Pointer(p + 64)) += uint32(N) 18261 } 18262 18263 func re_hex(tls *libc.TLS, c int32, pV uintptr) int32 { 18264 if c >= '0' && c <= '9' { 18265 c = c - '0' 18266 } else if c >= 'a' && c <= 'f' { 18267 c = c - ('a' - 10) 18268 } else if c >= 'A' && c <= 'F' { 18269 c = c - ('A' - 10) 18270 } else { 18271 return 0 18272 } 18273 *(*int32)(unsafe.Pointer(pV)) = *(*int32)(unsafe.Pointer(pV))*16 + c&0xff 18274 return 1 18275 } 18276 18277 func re_esc_char(tls *libc.TLS, p uintptr) uint32 { 18278 bp := tls.Alloc(4) 18279 defer tls.Free(4) 18280 18281 var i int32 18282 *(*int32)(unsafe.Pointer(bp)) = 0 18283 var c int8 18284 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18285 return uint32(0) 18286 } 18287 c = int8(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi)))) 18288 if int32(c) == 'u' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+4 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18289 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18290 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18291 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 && 18292 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 3))), bp) != 0 && 18293 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 4))), bp) != 0 { 18294 *(*int32)(unsafe.Pointer(p + 8)) += 5 18295 return uint32(*(*int32)(unsafe.Pointer(bp))) 18296 } 18297 } 18298 if int32(c) == 'x' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+2 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18299 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18300 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18301 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 { 18302 *(*int32)(unsafe.Pointer(p + 8)) += 3 18303 return uint32(*(*int32)(unsafe.Pointer(bp))) 18304 } 18305 } 18306 for i = 0; zEsc[i] != 0 && int32(zEsc[i]) != int32(c); i++ { 18307 } 18308 if zEsc[i] != 0 { 18309 if i < 6 { 18310 c = zTrans[i] 18311 } 18312 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18313 } else { 18314 (*ReCompiled)(unsafe.Pointer(p)).FzErr = ts + 6542 18315 } 18316 return uint32(c) 18317 } 18318 18319 var zEsc = *(*[21]int8)(unsafe.Pointer(ts + 6559)) 18320 var zTrans = *(*[7]int8)(unsafe.Pointer(ts + 6580)) 18321 18322 func rePeek(tls *libc.TLS, p uintptr) uint8 { 18323 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18324 return *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 18325 } 18326 return uint8(0) 18327 } 18328 18329 func re_subcompile_re(tls *libc.TLS, p uintptr) uintptr { 18330 var zErr uintptr 18331 var iStart int32 18332 var iEnd int32 18333 var iGoto int32 18334 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18335 zErr = re_subcompile_string(tls, p) 18336 if zErr != 0 { 18337 return zErr 18338 } 18339 for int32(rePeek(tls, p)) == '|' { 18340 iEnd = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18341 re_insert(tls, p, iStart, RE_OP_FORK, iEnd+2-iStart) 18342 iGoto = re_append(tls, p, RE_OP_GOTO, 0) 18343 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18344 zErr = re_subcompile_string(tls, p) 18345 if zErr != 0 { 18346 return zErr 18347 } 18348 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iGoto)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iGoto)) 18349 } 18350 return uintptr(0) 18351 } 18352 18353 func re_subcompile_string(tls *libc.TLS, p uintptr) uintptr { 18354 var iPrev int32 = -1 18355 var iStart int32 18356 var c uint32 18357 var zErr uintptr 18358 for libc.AssignUint32(&c, (*struct { 18359 f func(*libc.TLS, uintptr) uint32 18360 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 18361 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18362 switch c { 18363 case uint32('|'): 18364 fallthrough 18365 case uint32('$'): 18366 fallthrough 18367 case uint32(')'): 18368 { 18369 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi-- 18370 return uintptr(0) 18371 18372 } 18373 case uint32('('): 18374 { 18375 zErr = re_subcompile_re(tls, p) 18376 if zErr != 0 { 18377 return zErr 18378 } 18379 if int32(rePeek(tls, p)) != ')' { 18380 return ts + 6587 18381 } 18382 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18383 break 18384 18385 } 18386 case uint32('.'): 18387 { 18388 if int32(rePeek(tls, p)) == '*' { 18389 re_append(tls, p, RE_OP_ANYSTAR, 0) 18390 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18391 } else { 18392 re_append(tls, p, RE_OP_ANY, 0) 18393 } 18394 break 18395 18396 } 18397 case uint32('*'): 18398 { 18399 if iPrev < 0 { 18400 return ts + 6601 18401 } 18402 re_insert(tls, p, iPrev, RE_OP_GOTO, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 18403 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState+uint32(1))) 18404 break 18405 18406 } 18407 case uint32('+'): 18408 { 18409 if iPrev < 0 { 18410 return ts + 6621 18411 } 18412 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState)) 18413 break 18414 18415 } 18416 case uint32('?'): 18417 { 18418 if iPrev < 0 { 18419 return ts + 6641 18420 } 18421 re_insert(tls, p, iPrev, RE_OP_FORK, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 18422 break 18423 18424 } 18425 case uint32('{'): 18426 { 18427 var m int32 = 0 18428 var n int32 = 0 18429 var sz int32 18430 var j int32 18431 if iPrev < 0 { 18432 return ts + 6661 18433 } 18434 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 18435 m = int32(uint32(m*10) + c - uint32('0')) 18436 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18437 } 18438 n = m 18439 if c == uint32(',') { 18440 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18441 n = 0 18442 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 18443 n = int32(uint32(n*10) + c - uint32('0')) 18444 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18445 } 18446 } 18447 if c != uint32('}') { 18448 return ts + 6685 18449 } 18450 if n > 0 && n < m { 18451 return ts + 6699 18452 } 18453 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18454 sz = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iPrev)) 18455 if m == 0 { 18456 if n == 0 { 18457 return ts + 6724 18458 } 18459 re_insert(tls, p, iPrev, RE_OP_FORK, sz+1) 18460 n-- 18461 } else { 18462 for j = 1; j < m; j++ { 18463 re_copy(tls, p, iPrev, sz) 18464 } 18465 } 18466 for j = m; j < n; j++ { 18467 re_append(tls, p, RE_OP_FORK, sz+1) 18468 re_copy(tls, p, iPrev, sz) 18469 } 18470 if n == 0 && m > 0 { 18471 re_append(tls, p, RE_OP_FORK, -sz) 18472 } 18473 break 18474 18475 } 18476 case uint32('['): 18477 { 18478 var iFirst int32 = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18479 if int32(rePeek(tls, p)) == '^' { 18480 re_append(tls, p, RE_OP_CC_EXC, 0) 18481 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18482 } else { 18483 re_append(tls, p, RE_OP_CC_INC, 0) 18484 } 18485 for libc.AssignUint32(&c, (*struct { 18486 f func(*libc.TLS, uintptr) uint32 18487 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 18488 if c == uint32('[') && int32(rePeek(tls, p)) == ':' { 18489 return ts + 6757 18490 } 18491 if c == uint32('\\') { 18492 c = re_esc_char(tls, p) 18493 } 18494 if int32(rePeek(tls, p)) == '-' { 18495 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 18496 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18497 c = (*struct { 18498 f func(*libc.TLS, uintptr) uint32 18499 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p) 18500 if c == uint32('\\') { 18501 c = re_esc_char(tls, p) 18502 } 18503 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 18504 } else { 18505 re_append(tls, p, RE_OP_CC_VALUE, int32(c)) 18506 } 18507 if int32(rePeek(tls, p)) == ']' { 18508 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18509 break 18510 } 18511 } 18512 if c == uint32(0) { 18513 return ts + 6795 18514 } 18515 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iFirst)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iFirst)) 18516 break 18517 18518 } 18519 case uint32('\\'): 18520 { 18521 var specialOp int32 = 0 18522 switch int32(rePeek(tls, p)) { 18523 case 'b': 18524 specialOp = RE_OP_BOUNDARY 18525 break 18526 case 'd': 18527 specialOp = RE_OP_DIGIT 18528 break 18529 case 'D': 18530 specialOp = RE_OP_NOTDIGIT 18531 break 18532 case 's': 18533 specialOp = RE_OP_SPACE 18534 break 18535 case 'S': 18536 specialOp = RE_OP_NOTSPACE 18537 break 18538 case 'w': 18539 specialOp = RE_OP_WORD 18540 break 18541 case 'W': 18542 specialOp = RE_OP_NOTWORD 18543 break 18544 } 18545 if specialOp != 0 { 18546 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18547 re_append(tls, p, specialOp, 0) 18548 } else { 18549 c = re_esc_char(tls, p) 18550 re_append(tls, p, RE_OP_MATCH, int32(c)) 18551 } 18552 break 18553 18554 } 18555 default: 18556 { 18557 re_append(tls, p, RE_OP_MATCH, int32(c)) 18558 break 18559 18560 } 18561 } 18562 iPrev = iStart 18563 } 18564 return uintptr(0) 18565 } 18566 18567 func sqlite3re_free(tls *libc.TLS, pRe uintptr) { 18568 if pRe != 0 { 18569 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaOp) 18570 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaArg) 18571 sqlite3.Xsqlite3_free(tls, pRe) 18572 } 18573 } 18574 18575 func sqlite3re_compile(tls *libc.TLS, ppRe uintptr, zIn uintptr, noCase int32) uintptr { 18576 var pRe uintptr 18577 var zErr uintptr 18578 var i int32 18579 var j int32 18580 18581 *(*uintptr)(unsafe.Pointer(ppRe)) = uintptr(0) 18582 pRe = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(ReCompiled{}))) 18583 if pRe == uintptr(0) { 18584 return ts + 2069 18585 } 18586 libc.Xmemset(tls, pRe, 0, uint64(unsafe.Sizeof(ReCompiled{}))) 18587 (*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar = func() uintptr { 18588 if noCase != 0 { 18589 return *(*uintptr)(unsafe.Pointer(&struct { 18590 f func(*libc.TLS, uintptr) uint32 18591 }{re_next_char_nocase})) 18592 } 18593 return *(*uintptr)(unsafe.Pointer(&struct { 18594 f func(*libc.TLS, uintptr) uint32 18595 }{re_next_char})) 18596 }() 18597 if re_resize(tls, pRe, 30) != 0 { 18598 sqlite3re_free(tls, pRe) 18599 return ts + 2069 18600 } 18601 if int32(*(*int8)(unsafe.Pointer(zIn))) == '^' { 18602 zIn++ 18603 } else { 18604 re_append(tls, pRe, RE_OP_ANYSTAR, 0) 18605 } 18606 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fz = zIn 18607 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi = 0 18608 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx = int32(libc.Xstrlen(tls, zIn)) 18609 zErr = re_subcompile_re(tls, pRe) 18610 if zErr != 0 { 18611 sqlite3re_free(tls, pRe) 18612 return zErr 18613 } 18614 if int32(rePeek(tls, pRe)) == '$' && (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi+1 >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 18615 re_append(tls, pRe, RE_OP_MATCH, RE_EOF) 18616 re_append(tls, pRe, RE_OP_ACCEPT, 0) 18617 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 18618 } else if (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 18619 re_append(tls, pRe, RE_OP_ACCEPT, 0) 18620 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 18621 } else { 18622 sqlite3re_free(tls, pRe) 18623 return ts + 6808 18624 } 18625 18626 if int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp))) == RE_OP_ANYSTAR && !(noCase != 0) { 18627 j = 0 18628 i = 1 18629 for ; j < int32(unsafe.Sizeof([12]uint8{}))-2 && int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(i)))) == RE_OP_MATCH; i++ { 18630 var x uint32 = uint32(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(i)*4))) 18631 if x <= uint32(127) { 18632 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(x) 18633 } else if x <= uint32(0xfff) { 18634 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xc0) | x>>6) 18635 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 18636 } else if x <= uint32(0xffff) { 18637 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xe0) | x>>12) 18638 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x>>6&uint32(0x3f)) 18639 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 18640 } else { 18641 break 18642 } 18643 } 18644 if j > 0 && int32(*(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(j-1)))) == 0 { 18645 j-- 18646 } 18647 (*ReCompiled)(unsafe.Pointer(pRe)).FnInit = j 18648 } 18649 return (*ReCompiled)(unsafe.Pointer(pRe)).FzErr 18650 } 18651 18652 func re_sql_func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 18653 bp := tls.Alloc(8) 18654 defer tls.Free(8) 18655 18656 var zPattern uintptr 18657 var zStr uintptr 18658 var zErr uintptr 18659 var setAux int32 = 0 18660 18661 _ = argc 18662 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_get_auxdata(tls, context, 0) 18663 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 18664 zPattern = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 18665 if zPattern == uintptr(0) { 18666 return 18667 } 18668 zErr = sqlite3re_compile(tls, bp, zPattern, libc.Bool32(sqlite3.Xsqlite3_user_data(tls, context) != uintptr(0))) 18669 if zErr != 0 { 18670 sqlite3re_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 18671 sqlite3.Xsqlite3_result_error(tls, context, zErr, -1) 18672 return 18673 } 18674 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 18675 sqlite3.Xsqlite3_result_error_nomem(tls, context) 18676 return 18677 } 18678 setAux = 1 18679 } 18680 zStr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 18681 if zStr != uintptr(0) { 18682 sqlite3.Xsqlite3_result_int(tls, context, sqlite3re_match(tls, *(*uintptr)(unsafe.Pointer(bp)), zStr, -1)) 18683 } 18684 if setAux != 0 { 18685 sqlite3.Xsqlite3_set_auxdata(tls, context, 0, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3re_free}))) 18686 } 18687 } 18688 18689 func sqlite3_regexp_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18690 var rc int32 = SQLITE_OK 18691 _ = pApi 18692 18693 _ = pzErrMsg 18694 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6831, 2, 18695 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 18696 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 18697 f func(*libc.TLS, uintptr, int32, uintptr) 18698 }{re_sql_func})), uintptr(0), uintptr(0)) 18699 if rc == SQLITE_OK { 18700 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6838, 2, 18701 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 18702 db, *(*uintptr)(unsafe.Pointer(&struct { 18703 f func(*libc.TLS, uintptr, int32, uintptr) 18704 }{re_sql_func})), uintptr(0), uintptr(0)) 18705 } 18706 return rc 18707 } 18708 18709 func rememberFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 18710 var v sqlite3_int64 18711 var ptr uintptr 18712 18713 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 18714 ptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4060) 18715 if ptr != 0 { 18716 *(*sqlite3_int64)(unsafe.Pointer(ptr)) = v 18717 } 18718 sqlite3.Xsqlite3_result_int64(tls, pCtx, v) 18719 } 18720 18721 func sqlite3_remember_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18722 var rc int32 = SQLITE_OK 18723 _ = pApi 18724 18725 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6846, 2, SQLITE_UTF8, uintptr(0), 18726 *(*uintptr)(unsafe.Pointer(&struct { 18727 f func(*libc.TLS, uintptr, int32, uintptr) 18728 }{rememberFunc})), uintptr(0), uintptr(0)) 18729 return rc 18730 } 18731 18732 type series_cursor1 = struct { 18733 Fbase sqlite3_vtab_cursor 18734 FisDesc int32 18735 F__ccgo_pad1 [4]byte 18736 FiRowid sqlite3_int64 18737 FiValue sqlite3_int64 18738 FmnValue sqlite3_int64 18739 FmxValue sqlite3_int64 18740 FiStep sqlite3_int64 18741 } 18742 18743 type series_cursor = series_cursor1 18744 18745 func seriesConnect(tls *libc.TLS, db uintptr, pUnused uintptr, argcUnused int32, argvUnused uintptr, ppVtab uintptr, pzErrUnused uintptr) int32 { 18746 var pNew uintptr 18747 var rc int32 18748 18749 _ = pUnused 18750 _ = argcUnused 18751 _ = argvUnused 18752 _ = pzErrUnused 18753 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 18754 ts+6855) 18755 if rc == SQLITE_OK { 18756 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 18757 if pNew == uintptr(0) { 18758 return SQLITE_NOMEM 18759 } 18760 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 18761 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 18762 } 18763 return rc 18764 } 18765 18766 func seriesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 18767 sqlite3.Xsqlite3_free(tls, pVtab) 18768 return SQLITE_OK 18769 } 18770 18771 func seriesOpen(tls *libc.TLS, pUnused uintptr, ppCursor uintptr) int32 { 18772 var pCur uintptr 18773 _ = pUnused 18774 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(series_cursor{}))) 18775 if pCur == uintptr(0) { 18776 return SQLITE_NOMEM 18777 } 18778 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(series_cursor{}))) 18779 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 18780 return SQLITE_OK 18781 } 18782 18783 func seriesClose(tls *libc.TLS, cur uintptr) int32 { 18784 sqlite3.Xsqlite3_free(tls, cur) 18785 return SQLITE_OK 18786 } 18787 18788 func seriesNext(tls *libc.TLS, cur uintptr) int32 { 18789 var pCur uintptr = cur 18790 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 18791 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= (*series_cursor)(unsafe.Pointer(pCur)).FiStep 18792 } else { 18793 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) += (*series_cursor)(unsafe.Pointer(pCur)).FiStep 18794 } 18795 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid++ 18796 return SQLITE_OK 18797 } 18798 18799 func seriesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 18800 var pCur uintptr = cur 18801 var x sqlite3_int64 = int64(0) 18802 switch i { 18803 case SERIES_COLUMN_START: 18804 x = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 18805 break 18806 case SERIES_COLUMN_STOP: 18807 x = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 18808 break 18809 case SERIES_COLUMN_STEP: 18810 x = (*series_cursor)(unsafe.Pointer(pCur)).FiStep 18811 break 18812 default: 18813 x = (*series_cursor)(unsafe.Pointer(pCur)).FiValue 18814 break 18815 } 18816 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 18817 return SQLITE_OK 18818 } 18819 18820 func seriesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18821 var pCur uintptr = cur 18822 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*series_cursor)(unsafe.Pointer(pCur)).FiRowid 18823 return SQLITE_OK 18824 } 18825 18826 func seriesEof(tls *libc.TLS, cur uintptr) int32 { 18827 var pCur uintptr = cur 18828 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 18829 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue < (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) 18830 } else { 18831 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue > (*series_cursor)(unsafe.Pointer(pCur)).FmxValue) 18832 } 18833 return int32(0) 18834 } 18835 18836 func seriesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStrUnused uintptr, argc int32, argv uintptr) int32 { 18837 var pCur uintptr = pVtabCursor 18838 var i int32 = 0 18839 _ = idxStrUnused 18840 if idxNum&1 != 0 { 18841 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 18842 } else { 18843 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(0) 18844 } 18845 if idxNum&2 != 0 { 18846 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 18847 } else { 18848 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 18849 } 18850 if idxNum&4 != 0 { 18851 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 18852 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep == int64(0) { 18853 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 18854 } else if (*series_cursor)(unsafe.Pointer(pCur)).FiStep < int64(0) { 18855 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = -(*series_cursor)(unsafe.Pointer(pCur)).FiStep 18856 if idxNum&16 == 0 { 18857 idxNum = idxNum | 8 18858 } 18859 } 18860 } else { 18861 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 18862 } 18863 for i = 0; i < argc; i++ { 18864 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) == SQLITE_NULL { 18865 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(1) 18866 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0) 18867 break 18868 } 18869 } 18870 if idxNum&8 != 0 { 18871 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 1 18872 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 18873 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep > int64(0) { 18874 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= ((*series_cursor)(unsafe.Pointer(pCur)).FmxValue - (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) % (*series_cursor)(unsafe.Pointer(pCur)).FiStep 18875 } 18876 } else { 18877 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 0 18878 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 18879 } 18880 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 18881 return SQLITE_OK 18882 } 18883 18884 func seriesBestIndex(tls *libc.TLS, pVTab uintptr, pIdxInfo uintptr) int32 { 18885 bp := tls.Alloc(12) 18886 defer tls.Free(12) 18887 18888 var i int32 18889 var j int32 18890 var idxNum int32 = 0 18891 var bStartSeen int32 = 0 18892 var unusableMask int32 = 0 18893 var nArg int32 = 0 18894 18895 var pConstraint uintptr 18896 18897 *(*int32)(unsafe.Pointer(bp)) = libc.AssignPtrInt32(bp+1*4, libc.AssignPtrInt32(bp+2*4, -1)) 18898 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 18899 i = 0 18900 __1: 18901 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 18902 goto __3 18903 } 18904 { 18905 var iCol int32 18906 var iMask int32 18907 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < SERIES_COLUMN_START { 18908 goto __2 18909 } 18910 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn - SERIES_COLUMN_START 18911 18912 iMask = int32(1) << iCol 18913 if iCol == 0 { 18914 bStartSeen = 1 18915 } 18916 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 18917 unusableMask = unusableMask | iMask 18918 goto __2 18919 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 18920 idxNum = idxNum | iMask 18921 *(*int32)(unsafe.Pointer(bp + uintptr(iCol)*4)) = i 18922 } 18923 18924 } 18925 goto __2 18926 __2: 18927 i++ 18928 pConstraint += 12 18929 goto __1 18930 goto __3 18931 __3: 18932 ; 18933 for i = 0; i < 3; i++ { 18934 if libc.AssignInt32(&j, *(*int32)(unsafe.Pointer(bp + uintptr(i)*4))) >= 0 { 18935 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).FargvIndex = libc.PreIncInt32(&nArg, 1) 18936 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).Fomit = libc.BoolUint8(!(1 != 0)) 18937 } 18938 } 18939 18940 if !(bStartSeen != 0) { 18941 sqlite3.Xsqlite3_free(tls, (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg) 18942 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 18943 ts+6914, 0) 18944 return SQLITE_ERROR 18945 } 18946 if unusableMask & ^idxNum != 0 { 18947 return SQLITE_CONSTRAINT 18948 } 18949 if idxNum&3 == 3 { 18950 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2 - libc.Bool32(idxNum&4 != 0)) 18951 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000) 18952 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy >= 1 && (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 0 { 18953 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 18954 idxNum = idxNum | 8 18955 } else { 18956 idxNum = idxNum | 16 18957 } 18958 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 18959 } 18960 } else { 18961 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 18962 } 18963 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 18964 return SQLITE_OK 18965 } 18966 18967 var seriesModule = sqlite3_module{ 18968 FxConnect: 0, 18969 FxBestIndex: 0, 18970 FxDisconnect: 0, 18971 FxOpen: 0, 18972 FxClose: 0, 18973 FxFilter: 0, 18974 FxNext: 0, 18975 FxEof: 0, 18976 FxColumn: 0, 18977 FxRowid: 0, 18978 } 18979 18980 func sqlite3_series_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18981 var rc int32 = SQLITE_OK 18982 _ = pApi 18983 18984 if sqlite3.Xsqlite3_libversion_number(tls) < 3008012 && pzErrMsg != uintptr(0) { 18985 *(*uintptr)(unsafe.Pointer(pzErrMsg)) = sqlite3.Xsqlite3_mprintf(tls, 18986 ts+6972, 0) 18987 return SQLITE_ERROR 18988 } 18989 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+7022, uintptr(unsafe.Pointer(&seriesModule)), uintptr(0)) 18990 return rc 18991 } 18992 18993 type u16 = uint16 18994 18995 var midClass = [128]uint8{ 18996 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 18997 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 18998 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 18999 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19000 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), 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_OTHER), 19005 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19006 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19007 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19008 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19009 uint8(CCLASS_SILENT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19010 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19011 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19012 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19013 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19014 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19015 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19016 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19017 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19018 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19019 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19020 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19021 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19022 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19023 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19024 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19025 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_VOWEL), 19026 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19027 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19028 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19029 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19030 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19031 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19032 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19033 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19034 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19035 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19036 uint8(CCLASS_C), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19037 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19038 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19039 } 19040 19041 var initClass = [128]uint8{ 19042 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19043 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19044 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19045 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19046 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), 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_OTHER), 19051 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19052 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 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_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19057 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19058 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19059 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19060 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19061 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19062 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19063 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19064 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19065 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19066 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19067 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19068 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19069 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19070 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19071 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_Y), 19072 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19073 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19074 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19075 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19076 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19077 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19078 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19079 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19080 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19081 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19082 uint8(CCLASS_C), uint8(CCLASS_Y), uint8(CCLASS_C), 19083 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19084 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19085 } 19086 19087 var className = *(*[14]uint8)(unsafe.Pointer(ts + 7038)) 19088 19089 func phoneticHash(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 19090 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+1)) 19091 var i int32 19092 var nOut int32 = 0 19093 var cPrev int8 = int8(0x77) 19094 var cPrevX int8 = int8(0x77) 19095 var aClass uintptr = uintptr(unsafe.Pointer(&initClass)) 19096 19097 if zOut == uintptr(0) { 19098 return uintptr(0) 19099 } 19100 if nIn > 2 { 19101 switch int32(*(*uint8)(unsafe.Pointer(zIn))) { 19102 case 'g': 19103 fallthrough 19104 case 'k': 19105 { 19106 if int32(*(*uint8)(unsafe.Pointer(zIn + 1))) == 'n' { 19107 zIn++ 19108 nIn-- 19109 } 19110 break 19111 19112 } 19113 } 19114 } 19115 for i = 0; i < nIn; i++ { 19116 var c uint8 = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 19117 if i+1 < nIn { 19118 if int32(c) == 'w' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'r' { 19119 continue 19120 } 19121 if int32(c) == 'd' && (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'j' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'g') { 19122 continue 19123 } 19124 if i+2 < nIn { 19125 if int32(c) == 't' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'c' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+2)))) == 'h' { 19126 continue 19127 } 19128 } 19129 } 19130 c = *(*uint8)(unsafe.Pointer(aClass + uintptr(int32(c)&0x7f))) 19131 if int32(c) == CCLASS_SPACE { 19132 continue 19133 } 19134 if int32(c) == CCLASS_OTHER && int32(cPrev) != CCLASS_DIGIT { 19135 continue 19136 } 19137 aClass = uintptr(unsafe.Pointer(&midClass)) 19138 if int32(c) == CCLASS_VOWEL && (int32(cPrevX) == CCLASS_R || int32(cPrevX) == CCLASS_L) { 19139 continue 19140 } 19141 if (int32(c) == CCLASS_R || int32(c) == CCLASS_L) && int32(cPrevX) == CCLASS_VOWEL { 19142 nOut-- 19143 } 19144 cPrev = int8(c) 19145 if int32(c) == CCLASS_SILENT { 19146 continue 19147 } 19148 cPrevX = int8(c) 19149 c = className[c] 19150 19151 if nOut == 0 || int32(c) != int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(nOut-1)))) { 19152 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = c 19153 } 19154 } 19155 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 19156 return zOut 19157 } 19158 19159 func phoneticHashSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19160 var zIn uintptr 19161 var zOut uintptr 19162 19163 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19164 if zIn == uintptr(0) { 19165 return 19166 } 19167 zOut = phoneticHash(tls, zIn, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 19168 if zOut == uintptr(0) { 19169 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19170 } else { 19171 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 19172 } 19173 } 19174 19175 func characterClass(tls *libc.TLS, cPrev int8, c int8) int8 { 19176 if int32(cPrev) == 0 { 19177 return int8(initClass[int32(c)&0x7f]) 19178 } 19179 return int8(midClass[int32(c)&0x7f]) 19180 } 19181 19182 func insertOrDeleteCost(tls *libc.TLS, cPrev int8, c int8, cNext int8) int32 { 19183 var classC int8 = characterClass(tls, cPrev, c) 19184 var classCprev int8 19185 19186 if int32(classC) == CCLASS_SILENT { 19187 return 1 19188 } 19189 if int32(cPrev) == int32(c) { 19190 return 10 19191 } 19192 if int32(classC) == CCLASS_VOWEL && (int32(cPrev) == 'r' || int32(cNext) == 'r') { 19193 return 20 19194 } 19195 classCprev = characterClass(tls, cPrev, cPrev) 19196 if int32(classC) == int32(classCprev) { 19197 if int32(classC) == CCLASS_VOWEL { 19198 return 15 19199 } else { 19200 return 50 19201 } 19202 } 19203 19204 return 100 19205 } 19206 19207 func substituteCost(tls *libc.TLS, cPrev int8, cFrom int8, cTo int8) int32 { 19208 var classFrom int8 19209 var classTo int8 19210 if int32(cFrom) == int32(cTo) { 19211 return 0 19212 } 19213 if int32(cFrom) == int32(cTo)^0x20 && (int32(cTo) >= 'A' && int32(cTo) <= 'Z' || int32(cTo) >= 'a' && int32(cTo) <= 'z') { 19214 return 0 19215 } 19216 classFrom = characterClass(tls, cPrev, cFrom) 19217 classTo = characterClass(tls, cPrev, cTo) 19218 if int32(classFrom) == int32(classTo) { 19219 return 40 19220 } 19221 if int32(classFrom) >= CCLASS_B && int32(classFrom) <= CCLASS_Y && 19222 int32(classTo) >= CCLASS_B && int32(classTo) <= CCLASS_Y { 19223 return 75 19224 } 19225 19226 return 100 19227 } 19228 19229 func editdist1(tls *libc.TLS, zA uintptr, zB uintptr, pnMatch uintptr) int32 { 19230 bp := tls.Alloc(300) 19231 defer tls.Free(300) 19232 19233 var nA int32 19234 var nB int32 19235 var xA int32 19236 var xB int32 19237 var cA int8 = int8(0) 19238 var cB int8 19239 var cAprev int8 19240 var cBprev int8 19241 var cAnext int8 19242 var cBnext int8 19243 var d int32 19244 var dc int32 = 0 19245 var res int32 19246 var m uintptr 19247 var cx uintptr 19248 var toFree uintptr = uintptr(0) 19249 var nMatch int32 = 0 19250 19251 if zA == uintptr(0) || zB == uintptr(0) { 19252 return -1 19253 } 19254 19255 for *(*int8)(unsafe.Pointer(zA)) != 0 && int32(*(*int8)(unsafe.Pointer(zA))) == int32(*(*int8)(unsafe.Pointer(zB))) { 19256 dc = int32(*(*int8)(unsafe.Pointer(zA))) 19257 zA++ 19258 zB++ 19259 nMatch++ 19260 } 19261 if pnMatch != 0 { 19262 *(*int32)(unsafe.Pointer(pnMatch)) = nMatch 19263 } 19264 if int32(*(*int8)(unsafe.Pointer(zA))) == 0 && int32(*(*int8)(unsafe.Pointer(zB))) == 0 { 19265 return 0 19266 } 19267 19268 for nA = 0; *(*int8)(unsafe.Pointer(zA + uintptr(nA))) != 0; nA++ { 19269 if int32(*(*int8)(unsafe.Pointer(zA + uintptr(nA))))&0x80 != 0 { 19270 return -2 19271 } 19272 } 19273 for nB = 0; *(*int8)(unsafe.Pointer(zB + uintptr(nB))) != 0; nB++ { 19274 if int32(*(*int8)(unsafe.Pointer(zB + uintptr(nB))))&0x80 != 0 { 19275 return -2 19276 } 19277 } 19278 19279 if nA == 0 { 19280 cBprev = int8(dc) 19281 for xB = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB))))) != 0; xB++ { 19282 res = res + insertOrDeleteCost(tls, cBprev, cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB+1))))/FINAL_INS_COST_DIV 19283 cBprev = cB 19284 } 19285 return res 19286 } 19287 if nB == 0 { 19288 cAprev = int8(dc) 19289 for xA = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA))))) != 0; xA++ { 19290 res = res + insertOrDeleteCost(tls, cAprev, cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA+1)))) 19291 cAprev = cA 19292 } 19293 return res 19294 } 19295 19296 if int32(*(*int8)(unsafe.Pointer(zA))) == '*' && int32(*(*int8)(unsafe.Pointer(zA + 1))) == 0 { 19297 return 0 19298 } 19299 19300 if uint64(nB) < uint64(unsafe.Sizeof([75]int32{}))*uint64(4)/(uint64(unsafe.Sizeof(int32(0)))*uint64(5)) { 19301 m = bp 19302 } else { 19303 m = libc.AssignUintptr(&toFree, sqlite3.Xsqlite3_malloc64(tls, uint64((nB+1)*5)*uint64(unsafe.Sizeof(int32(0)))/uint64(4))) 19304 if m == uintptr(0) { 19305 return -3 19306 } 19307 } 19308 cx = m + uintptr(nB+1)*4 19309 19310 *(*int32)(unsafe.Pointer(m)) = 0 19311 *(*int8)(unsafe.Pointer(cx)) = int8(dc) 19312 cBprev = int8(dc) 19313 for xB = 1; xB <= nB; xB++ { 19314 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 19315 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 19316 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = cB 19317 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) + insertOrDeleteCost(tls, cBprev, cB, cBnext) 19318 cBprev = cB 19319 } 19320 cAprev = int8(dc) 19321 for xA = 1; xA <= nA; xA++ { 19322 var lastA int32 = libc.Bool32(xA == nA) 19323 cA = *(*int8)(unsafe.Pointer(zA + uintptr(xA-1))) 19324 cAnext = *(*int8)(unsafe.Pointer(zA + uintptr(xA))) 19325 if int32(cA) == '*' && lastA != 0 { 19326 break 19327 } 19328 d = *(*int32)(unsafe.Pointer(m)) 19329 dc = int32(*(*int8)(unsafe.Pointer(cx))) 19330 *(*int32)(unsafe.Pointer(m)) = d + insertOrDeleteCost(tls, cAprev, cA, cAnext) 19331 cBprev = int8(0) 19332 for xB = 1; xB <= nB; xB++ { 19333 var totalCost int32 19334 var insCost int32 19335 var delCost int32 19336 var subCost int32 19337 var ncx int32 19338 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 19339 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 19340 19341 insCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cB, cBnext) 19342 if lastA != 0 { 19343 insCost = insCost / FINAL_INS_COST_DIV 19344 } 19345 19346 delCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB))), cA, cBnext) 19347 19348 subCost = substituteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cA, cB) 19349 19350 totalCost = insCost + *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) 19351 ncx = int32(cB) 19352 if delCost+*(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < totalCost { 19353 totalCost = delCost + *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19354 ncx = int32(cA) 19355 } 19356 if subCost+d < totalCost { 19357 totalCost = subCost + d 19358 } 19359 19360 d = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19361 dc = int32(*(*int8)(unsafe.Pointer(cx + uintptr(xB)))) 19362 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = totalCost 19363 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = int8(ncx) 19364 cBprev = cB 19365 } 19366 cAprev = cA 19367 } 19368 19369 if int32(cA) == '*' { 19370 res = *(*int32)(unsafe.Pointer(m + 1*4)) 19371 for xB = 1; xB <= nB; xB++ { 19372 if *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < res { 19373 res = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19374 if pnMatch != 0 { 19375 *(*int32)(unsafe.Pointer(pnMatch)) = xB + nMatch 19376 } 19377 } 19378 } 19379 } else { 19380 res = *(*int32)(unsafe.Pointer(m + uintptr(nB)*4)) 19381 19382 } 19383 sqlite3.Xsqlite3_free(tls, toFree) 19384 return res 19385 } 19386 19387 func editdistSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19388 var res int32 = editdist1(tls, 19389 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 19390 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), 19391 uintptr(0)) 19392 if res < 0 { 19393 if res == -3 { 19394 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19395 } else if res == -2 { 19396 sqlite3.Xsqlite3_result_error(tls, context, ts+7052, -1) 19397 } else { 19398 sqlite3.Xsqlite3_result_error(tls, context, ts+7082, -1) 19399 } 19400 } else { 19401 sqlite3.Xsqlite3_result_int(tls, context, res) 19402 } 19403 } 19404 19405 type EditDist3Cost1 = struct { 19406 FpNext uintptr 19407 FnFrom u8 19408 FnTo u8 19409 FiCost u16 19410 Fa [4]int8 19411 } 19412 19413 type EditDist3Cost = EditDist3Cost1 19414 type EditDist3Config1 = struct { 19415 FnLang int32 19416 F__ccgo_pad1 [4]byte 19417 Fa uintptr 19418 } 19419 19420 type EditDist3Config = EditDist3Config1 19421 type EditDist3From1 = struct { 19422 FnSubst int32 19423 FnDel int32 19424 FnByte int32 19425 F__ccgo_pad1 [4]byte 19426 FapSubst uintptr 19427 FapDel uintptr 19428 } 19429 19430 type EditDist3From = EditDist3From1 19431 type EditDist3FromString1 = struct { 19432 Fz uintptr 19433 Fn int32 19434 FisPrefix int32 19435 Fa uintptr 19436 } 19437 19438 type EditDist3FromString = EditDist3FromString1 19439 type EditDist3To1 = struct { 19440 FnIns int32 19441 FnByte int32 19442 FapIns uintptr 19443 } 19444 19445 type EditDist3To = EditDist3To1 19446 type EditDist3ToString1 = struct { 19447 Fz uintptr 19448 Fn int32 19449 F__ccgo_pad1 [4]byte 19450 Fa uintptr 19451 } 19452 19453 type EditDist3ToString = EditDist3ToString1 19454 type EditDist3Lang1 = struct { 19455 FiLang int32 19456 FiInsCost int32 19457 FiDelCost int32 19458 FiSubCost int32 19459 FpCost uintptr 19460 } 19461 19462 type EditDist3Lang = EditDist3Lang1 19463 19464 var editDist3Lang = EditDist3Lang{FiInsCost: 100, FiDelCost: 100, FiSubCost: 150} 19465 19466 func editDist3ConfigClear(tls *libc.TLS, p uintptr) { 19467 var i int32 19468 if p == uintptr(0) { 19469 return 19470 } 19471 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; i++ { 19472 var pCost uintptr 19473 var pNext uintptr 19474 pCost = (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(i)*24)).FpCost 19475 for pCost != 0 { 19476 pNext = (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext 19477 sqlite3.Xsqlite3_free(tls, pCost) 19478 pCost = pNext 19479 } 19480 } 19481 sqlite3.Xsqlite3_free(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa) 19482 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 19483 } 19484 19485 func editDist3ConfigDelete(tls *libc.TLS, pIn uintptr) { 19486 var p uintptr = pIn 19487 editDist3ConfigClear(tls, p) 19488 sqlite3.Xsqlite3_free(tls, p) 19489 } 19490 19491 func editDist3CostCompare(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 19492 var n int32 = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) 19493 var rc int32 19494 if n > int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) { 19495 n = int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 19496 } 19497 rc = libc.Xstrncmp(tls, pA+12, pB+12, uint64(n)) 19498 if rc == 0 { 19499 rc = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) - int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 19500 } 19501 return rc 19502 } 19503 19504 func editDist3CostMerge(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 19505 bp := tls.Alloc(8) 19506 defer tls.Free(8) 19507 19508 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 19509 var ppTail uintptr = bp 19510 var p uintptr 19511 for pA != 0 && pB != 0 { 19512 if editDist3CostCompare(tls, pA, pB) <= 0 { 19513 p = pA 19514 pA = (*EditDist3Cost)(unsafe.Pointer(pA)).FpNext 19515 } else { 19516 p = pB 19517 pB = (*EditDist3Cost)(unsafe.Pointer(pB)).FpNext 19518 } 19519 *(*uintptr)(unsafe.Pointer(ppTail)) = p 19520 ppTail = p 19521 } 19522 if pA != 0 { 19523 *(*uintptr)(unsafe.Pointer(ppTail)) = pA 19524 } else { 19525 *(*uintptr)(unsafe.Pointer(ppTail)) = pB 19526 } 19527 return *(*uintptr)(unsafe.Pointer(bp)) 19528 } 19529 19530 func editDist3CostSort(tls *libc.TLS, pList uintptr) uintptr { 19531 bp := tls.Alloc(480) 19532 defer tls.Free(480) 19533 19534 var p uintptr 19535 var i int32 19536 var mx int32 = 0 19537 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 19538 *(*uintptr)(unsafe.Pointer(bp + 1*8)) = uintptr(0) 19539 for pList != 0 { 19540 p = pList 19541 pList = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 19542 (*EditDist3Cost)(unsafe.Pointer(p)).FpNext = uintptr(0) 19543 for i = 0; *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0; i++ { 19544 p = editDist3CostMerge(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)), p) 19545 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = uintptr(0) 19546 } 19547 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = p 19548 if i > mx { 19549 mx = i 19550 *(*uintptr)(unsafe.Pointer(bp + uintptr(i+1)*8)) = uintptr(0) 19551 } 19552 } 19553 p = uintptr(0) 19554 for i = 0; i <= mx; i++ { 19555 if *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0 { 19556 p = editDist3CostMerge(tls, p, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8))) 19557 } 19558 } 19559 return p 19560 } 19561 19562 func editDist3ConfigLoad(tls *libc.TLS, p uintptr, db uintptr, zTable uintptr) int32 { 19563 bp := tls.Alloc(16) 19564 defer tls.Free(16) 19565 19566 var rc int32 19567 var rc2 int32 19568 var zSql uintptr 19569 var iLangPrev int32 = -9999 19570 var pLang uintptr = uintptr(0) 19571 19572 zSql = sqlite3.Xsqlite3_mprintf(tls, 19573 ts+7107, libc.VaList(bp, zTable)) 19574 if zSql == uintptr(0) { 19575 return SQLITE_NOMEM 19576 } 19577 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+8, uintptr(0)) 19578 sqlite3.Xsqlite3_free(tls, zSql) 19579 if rc != 0 { 19580 return rc 19581 } 19582 editDist3ConfigClear(tls, p) 19583 for sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) == SQLITE_ROW { 19584 var iLang int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0) 19585 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 19586 var nFrom int32 19587 if zFrom != 0 { 19588 nFrom = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 19589 } else { 19590 nFrom = 0 19591 } 19592 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 19593 var nTo int32 19594 if zTo != 0 { 19595 nTo = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 19596 } else { 19597 nTo = 0 19598 } 19599 var iCost int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 3) 19600 19601 if nFrom > 100 || nTo > 100 { 19602 continue 19603 } 19604 if iCost < 0 { 19605 continue 19606 } 19607 if iCost >= 10000 { 19608 continue 19609 } 19610 if pLang == uintptr(0) || iLang != iLangPrev { 19611 var pNew uintptr 19612 pNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa, uint64((*EditDist3Config)(unsafe.Pointer(p)).FnLang+1)*uint64(unsafe.Sizeof(EditDist3Lang{}))) 19613 if pNew == uintptr(0) { 19614 rc = SQLITE_NOMEM 19615 break 19616 } 19617 (*EditDist3Config)(unsafe.Pointer(p)).Fa = pNew 19618 pLang = (*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr((*EditDist3Config)(unsafe.Pointer(p)).FnLang)*24 19619 (*EditDist3Config)(unsafe.Pointer(p)).FnLang++ 19620 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiLang = iLang 19621 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = 100 19622 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = 100 19623 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = 150 19624 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = uintptr(0) 19625 iLangPrev = iLang 19626 } 19627 if nFrom == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && nTo == 0 { 19628 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = iCost 19629 } else if nFrom == 0 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 19630 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = iCost 19631 } else if nFrom == 1 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 19632 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = iCost 19633 } else { 19634 var pCost uintptr 19635 var nExtra int32 = nFrom + nTo - 4 19636 if nExtra < 0 { 19637 nExtra = 0 19638 } 19639 pCost = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Cost{}))+uint64(nExtra)) 19640 if pCost == uintptr(0) { 19641 rc = SQLITE_NOMEM 19642 break 19643 } 19644 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnFrom = u8(nFrom) 19645 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnTo = u8(nTo) 19646 (*EditDist3Cost)(unsafe.Pointer(pCost)).FiCost = u16(iCost) 19647 libc.Xmemcpy(tls, pCost+12, zFrom, uint64(nFrom)) 19648 libc.Xmemcpy(tls, pCost+12+uintptr(nFrom), zTo, uint64(nTo)) 19649 (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 19650 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = pCost 19651 } 19652 } 19653 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 19654 if rc == SQLITE_OK { 19655 rc = rc2 19656 } 19657 if rc == SQLITE_OK { 19658 var iLang int32 19659 for iLang = 0; iLang < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; iLang++ { 19660 (*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) 19661 } 19662 } 19663 return rc 19664 } 19665 19666 func utf8Len(tls *libc.TLS, c uint8, N int32) int32 { 19667 var len int32 = 1 19668 if int32(c) > 0x7f { 19669 if int32(c)&0xe0 == 0xc0 { 19670 len = 2 19671 } else if int32(c)&0xf0 == 0xe0 { 19672 len = 3 19673 } else { 19674 len = 4 19675 } 19676 } 19677 if len > N { 19678 len = N 19679 } 19680 return len 19681 } 19682 19683 func matchTo(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 19684 if int32(*(*int8)(unsafe.Pointer(p + 12 + uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)))) != int32(*(*int8)(unsafe.Pointer(z))) { 19685 return 0 19686 } 19687 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n { 19688 return 0 19689 } 19690 if libc.Xstrncmp(tls, p+12+uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)) != 0 { 19691 return 0 19692 } 19693 return 1 19694 } 19695 19696 func matchFrom(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 19697 if (*EditDist3Cost)(unsafe.Pointer(p)).FnFrom != 0 { 19698 if int32(*(*int8)(unsafe.Pointer(p + 12))) != int32(*(*int8)(unsafe.Pointer(z))) { 19699 return 0 19700 } 19701 if libc.Xstrncmp(tls, p+12, z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)) != 0 { 19702 return 0 19703 } 19704 } 19705 return 1 19706 } 19707 19708 func matchFromTo(tls *libc.TLS, pStr uintptr, n1 int32, z2 uintptr, n2 int32) int32 { 19709 var b1 int32 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n1)*32)).FnByte 19710 if b1 > n2 { 19711 return 0 19712 } 19713 19714 if int32(*(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n1)))) != int32(*(*int8)(unsafe.Pointer(z2))) { 19715 return 0 19716 } 19717 if libc.Xstrncmp(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz+uintptr(n1), z2, uint64(b1)) != 0 { 19718 return 0 19719 } 19720 return 1 19721 } 19722 19723 func editDist3FromStringDelete(tls *libc.TLS, p uintptr) { 19724 var i int32 19725 if p != 0 { 19726 for i = 0; i < (*EditDist3FromString)(unsafe.Pointer(p)).Fn; i++ { 19727 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapDel) 19728 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapSubst) 19729 } 19730 sqlite3.Xsqlite3_free(tls, p) 19731 } 19732 } 19733 19734 func editDist3FromStringNew(tls *libc.TLS, pLang uintptr, z uintptr, n int32) uintptr { 19735 var pStr uintptr 19736 var p uintptr 19737 var i int32 19738 19739 if z == uintptr(0) { 19740 return uintptr(0) 19741 } 19742 if n < 0 { 19743 n = int32(libc.Xstrlen(tls, z)) 19744 } 19745 pStr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3FromString{}))+uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)+uint64(n)+uint64(1)) 19746 if pStr == uintptr(0) { 19747 return uintptr(0) 19748 } 19749 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa = pStr + 1*24 19750 libc.Xmemset(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa, 0, uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)) 19751 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn = n 19752 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n)*32 19753 libc.Xmemcpy(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz, z, uint64(n+1)) 19754 if n != 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(n-1)))) == '*' { 19755 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 1 19756 n-- 19757 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn-- 19758 *(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n))) = int8(0) 19759 } else { 19760 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 0 19761 } 19762 19763 for i = 0; i < n; i++ { 19764 var pFrom uintptr = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(i)*32 19765 libc.Xmemset(tls, pFrom, 0, uint64(unsafe.Sizeof(EditDist3From{}))) 19766 (*EditDist3From)(unsafe.Pointer(pFrom)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))), n-i) 19767 for p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost; p != 0; p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext { 19768 var apNew uintptr 19769 if i+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > n { 19770 continue 19771 } 19772 if matchFrom(tls, p, z+uintptr(i), n-i) == 0 { 19773 continue 19774 } 19775 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) == 0 { 19776 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel, 19777 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnDel+1)) 19778 if apNew == uintptr(0) { 19779 break 19780 } 19781 (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel = apNew 19782 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnDel, 1))*8)) = p 19783 } else { 19784 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst, 19785 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst+1)) 19786 if apNew == uintptr(0) { 19787 break 19788 } 19789 (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst = apNew 19790 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst, 1))*8)) = p 19791 } 19792 } 19793 if p != 0 { 19794 editDist3FromStringDelete(tls, pStr) 19795 pStr = uintptr(0) 19796 break 19797 } 19798 } 19799 return pStr 19800 } 19801 19802 func updateCost(tls *libc.TLS, m uintptr, i int32, j int32, iCost int32) { 19803 var b uint32 19804 19805 b = *(*uint32)(unsafe.Pointer(m + uintptr(j)*4)) + uint32(iCost) 19806 if b < *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) { 19807 *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) = b 19808 } 19809 } 19810 19811 func editDist3Core(tls *libc.TLS, pFrom uintptr, z2 uintptr, n2 int32, pLang uintptr, pnMatch uintptr) int32 { 19812 bp := tls.Alloc(1048) 19813 defer tls.Free(1048) 19814 19815 var k int32 19816 var n int32 19817 var i1 int32 19818 var b1 int32 19819 var i2 int32 19820 var b2 int32 19821 19822 var a2 uintptr 19823 var m uintptr 19824 var pToFree uintptr 19825 var szRow int32 19826 var p uintptr 19827 var res int32 19828 var nByte sqlite3_uint64 19829 19830 var apNew uintptr 19831 var cx int32 19832 var cxp int32 19833 var cxd int32 19834 var cxu int32 19835 var rx int32 19836 var rxp int32 19837 var b int32 19838 var nExtra int32 19839 *(*EditDist3FromString)(unsafe.Pointer(bp + 1024)) = *(*EditDist3FromString)(unsafe.Pointer(pFrom)) 19840 19841 n = ((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1) * (n2 + 1) 19842 n = (n + 1) & libc.CplInt32(1) 19843 nByte = uint64(n)*uint64(unsafe.Sizeof(uint32(0))) + uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2) 19844 if !(nByte <= sqlite3_uint64(unsafe.Sizeof([256]uint32{}))) { 19845 goto __1 19846 } 19847 m = bp 19848 pToFree = uintptr(0) 19849 goto __2 19850 __1: 19851 m = libc.AssignUintptr(&pToFree, sqlite3.Xsqlite3_malloc64(tls, nByte)) 19852 if !(m == uintptr(0)) { 19853 goto __3 19854 } 19855 return -1 19856 __3: 19857 ; 19858 __2: 19859 ; 19860 a2 = m + uintptr(n)*4 19861 libc.Xmemset(tls, a2, 0, uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2)) 19862 19863 i2 = 0 19864 __4: 19865 if !(i2 < n2) { 19866 goto __6 19867 } 19868 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z2 + uintptr(i2)))), n2-i2) 19869 p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 19870 __7: 19871 if !(p != 0) { 19872 goto __9 19873 } 19874 if !(int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > 0) { 19875 goto __10 19876 } 19877 goto __9 19878 __10: 19879 ; 19880 if !(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n2) { 19881 goto __11 19882 } 19883 goto __8 19884 __11: 19885 ; 19886 if !(int32(*(*int8)(unsafe.Pointer(p + 12))) > int32(*(*int8)(unsafe.Pointer(z2 + uintptr(i2))))) { 19887 goto __12 19888 } 19889 goto __9 19890 __12: 19891 ; 19892 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) == 0) { 19893 goto __13 19894 } 19895 goto __8 19896 __13: 19897 ; 19898 (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns++ 19899 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)) 19900 if !(apNew == uintptr(0)) { 19901 goto __14 19902 } 19903 res = -1 19904 goto editDist3Abort 19905 __14: 19906 ; 19907 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FapIns = apNew 19908 *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns-1)*8)) = p 19909 goto __8 19910 __8: 19911 p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 19912 goto __7 19913 goto __9 19914 __9: 19915 ; 19916 goto __5 19917 __5: 19918 i2++ 19919 goto __4 19920 goto __6 19921 __6: 19922 ; 19923 szRow = (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1 19924 libc.Xmemset(tls, m, 0x01, uint64((n2+1)*szRow)*uint64(unsafe.Sizeof(uint32(0)))) 19925 *(*uint32)(unsafe.Pointer(m)) = uint32(0) 19926 19927 i1 = 0 19928 __15: 19929 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 19930 goto __17 19931 } 19932 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 19933 updateCost(tls, m, i1+b1, i1, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 19934 k = 0 19935 __18: 19936 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 19937 goto __20 19938 } 19939 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 19940 updateCost(tls, m, i1+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), i1, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 19941 goto __19 19942 __19: 19943 k++ 19944 goto __18 19945 goto __20 19946 __20: 19947 ; 19948 goto __16 19949 __16: 19950 i1 = i1 + b1 19951 goto __15 19952 goto __17 19953 __17: 19954 ; 19955 i2 = 0 19956 __21: 19957 if !(i2 < n2) { 19958 goto __23 19959 } 19960 b2 = (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte 19961 rx = szRow * (i2 + b2) 19962 rxp = szRow * i2 19963 updateCost(tls, m, rx, rxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 19964 k = 0 19965 __24: 19966 if !(k < (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns) { 19967 goto __26 19968 } 19969 p = *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr(k)*8)) 19970 updateCost(tls, m, szRow*(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)), rxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 19971 goto __25 19972 __25: 19973 k++ 19974 goto __24 19975 goto __26 19976 __26: 19977 ; 19978 i1 = 0 19979 __27: 19980 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 19981 goto __29 19982 } 19983 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 19984 cxp = rx + i1 19985 cx = cxp + b1 19986 cxd = rxp + i1 19987 cxu = cxd + b1 19988 updateCost(tls, m, cx, cxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 19989 k = 0 19990 __30: 19991 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 19992 goto __32 19993 } 19994 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 19995 updateCost(tls, m, cxp+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), cxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 19996 goto __31 19997 __31: 19998 k++ 19999 goto __30 20000 goto __32 20001 __32: 20002 ; 20003 updateCost(tls, m, cx, cxu, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20004 if !(matchFromTo(tls, bp+1024, i1, z2+uintptr(i2), n2-i2) != 0) { 20005 goto __33 20006 } 20007 updateCost(tls, m, cx, cxd, 0) 20008 __33: 20009 ; 20010 updateCost(tls, m, cx, cxd, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost) 20011 k = 0 20012 __34: 20013 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnSubst) { 20014 goto __36 20015 } 20016 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapSubst + uintptr(k)*8)) 20017 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) != 0) { 20018 goto __37 20019 } 20020 updateCost(tls, m, cxd+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)+szRow*int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo), cxd, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20021 __37: 20022 ; 20023 goto __35 20024 __35: 20025 k++ 20026 goto __34 20027 goto __36 20028 __36: 20029 ; 20030 goto __28 20031 __28: 20032 i1 = i1 + b1 20033 goto __27 20034 goto __29 20035 __29: 20036 ; 20037 goto __22 20038 __22: 20039 i2 = i2 + b2 20040 goto __21 20041 goto __23 20042 __23: 20043 ; 20044 res = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*(n2+1)-1)*4))) 20045 n = n2 20046 if !((*EditDist3FromString)(unsafe.Pointer(bp+1024)).FisPrefix != 0) { 20047 goto __38 20048 } 20049 i2 = 1 20050 __39: 20051 if !(i2 <= n2) { 20052 goto __41 20053 } 20054 b = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*i2-1)*4))) 20055 if !(b <= res) { 20056 goto __42 20057 } 20058 res = b 20059 n = i2 - 1 20060 __42: 20061 ; 20062 goto __40 20063 __40: 20064 i2++ 20065 goto __39 20066 goto __41 20067 __41: 20068 ; 20069 __38: 20070 ; 20071 if !(pnMatch != 0) { 20072 goto __43 20073 } 20074 nExtra = 0 20075 k = 0 20076 __44: 20077 if !(k < n) { 20078 goto __46 20079 } 20080 if !(int32(*(*int8)(unsafe.Pointer(z2 + uintptr(k))))&0xc0 == 0x80) { 20081 goto __47 20082 } 20083 nExtra++ 20084 __47: 20085 ; 20086 goto __45 20087 __45: 20088 k++ 20089 goto __44 20090 goto __46 20091 __46: 20092 ; 20093 *(*int32)(unsafe.Pointer(pnMatch)) = n - nExtra 20094 __43: 20095 ; 20096 editDist3Abort: 20097 i2 = 0 20098 __48: 20099 if !(i2 < n2) { 20100 goto __50 20101 } 20102 sqlite3.Xsqlite3_free(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns) 20103 goto __49 20104 __49: 20105 i2++ 20106 goto __48 20107 goto __50 20108 __50: 20109 ; 20110 sqlite3.Xsqlite3_free(tls, pToFree) 20111 return res 20112 } 20113 20114 func editDist3FindLang(tls *libc.TLS, pConfig uintptr, iLang int32) uintptr { 20115 var i int32 20116 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(pConfig)).FnLang; i++ { 20117 if (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(pConfig)).Fa+uintptr(i)*24)).FiLang == iLang { 20118 return (*EditDist3Config)(unsafe.Pointer(pConfig)).Fa + uintptr(i)*24 20119 } 20120 } 20121 return uintptr(unsafe.Pointer(&editDist3Lang)) 20122 } 20123 20124 func editDist3SqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20125 var pConfig uintptr = sqlite3.Xsqlite3_user_data(tls, context) 20126 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 20127 var rc int32 20128 if argc == 1 { 20129 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20130 rc = editDist3ConfigLoad(tls, pConfig, db, zTable) 20131 if rc != 0 { 20132 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 20133 } 20134 } else { 20135 var zA uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20136 var zB uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20137 var nA int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20138 var nB int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20139 var iLang int32 20140 if argc == 3 { 20141 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 20142 } else { 20143 iLang = 0 20144 } 20145 var pLang uintptr = editDist3FindLang(tls, pConfig, iLang) 20146 var pFrom uintptr 20147 var dist int32 20148 20149 pFrom = editDist3FromStringNew(tls, pLang, zA, nA) 20150 if pFrom == uintptr(0) { 20151 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20152 return 20153 } 20154 dist = editDist3Core(tls, pFrom, zB, nB, pLang, uintptr(0)) 20155 editDist3FromStringDelete(tls, pFrom) 20156 if dist == -1 { 20157 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20158 } else { 20159 sqlite3.Xsqlite3_result_int(tls, context, dist) 20160 } 20161 } 20162 } 20163 20164 func editDist3Install(tls *libc.TLS, db uintptr) int32 { 20165 var rc int32 20166 var pConfig uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 20167 if pConfig == uintptr(0) { 20168 return SQLITE_NOMEM 20169 } 20170 libc.Xmemset(tls, pConfig, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 20171 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20172 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20173 *(*uintptr)(unsafe.Pointer(&struct { 20174 f func(*libc.TLS, uintptr, int32, uintptr) 20175 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20176 if rc == SQLITE_OK { 20177 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20178 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20179 *(*uintptr)(unsafe.Pointer(&struct { 20180 f func(*libc.TLS, uintptr, int32, uintptr) 20181 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20182 } 20183 if rc == SQLITE_OK { 20184 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20185 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20186 *(*uintptr)(unsafe.Pointer(&struct { 20187 f func(*libc.TLS, uintptr, int32, uintptr) 20188 }{editDist3SqlFunc})), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{editDist3ConfigDelete}))) 20189 } else { 20190 sqlite3.Xsqlite3_free(tls, pConfig) 20191 } 20192 return rc 20193 } 20194 20195 var sqlite3Utf8Trans1 = [64]uint8{ 20196 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20197 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20198 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 20199 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 20200 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20201 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20202 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20203 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 20204 } 20205 20206 func utf8Read(tls *libc.TLS, z uintptr, n int32, pSize uintptr) int32 { 20207 var c int32 20208 var i int32 20209 20210 if 0 != 0 { 20211 c = libc.AssignInt32(&i, 0) 20212 } else { 20213 c = int32(*(*uint8)(unsafe.Pointer(z))) 20214 i = 1 20215 if c >= 0xc0 { 20216 c = int32(sqlite3Utf8Trans1[c-0xc0]) 20217 for i < n && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))&0xc0 == 0x80 { 20218 c = c<<6 + 0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1))))) 20219 } 20220 } 20221 } 20222 *(*int32)(unsafe.Pointer(pSize)) = i 20223 return c 20224 } 20225 20226 func utf8Charlen(tls *libc.TLS, zIn uintptr, nIn int32) int32 { 20227 bp := tls.Alloc(4) 20228 defer tls.Free(4) 20229 20230 var i int32 20231 var nChar int32 = 0 20232 for i = 0; i < nIn; nChar++ { 20233 utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 20234 i = i + *(*int32)(unsafe.Pointer(bp)) 20235 } 20236 return nChar 20237 } 20238 20239 type Transliteration1 = struct { 20240 FcFrom uint16 20241 FcTo0 uint8 20242 FcTo1 uint8 20243 FcTo2 uint8 20244 FcTo3 uint8 20245 } 20246 20247 type Transliteration = Transliteration1 20248 20249 var translit = [389]Transliteration{ 20250 {FcFrom: uint16(0x00A0), FcTo0: uint8(0x20)}, 20251 {FcFrom: uint16(0x00B5), FcTo0: uint8(0x75)}, 20252 {FcFrom: uint16(0x00C0), FcTo0: uint8(0x41)}, 20253 {FcFrom: uint16(0x00C1), FcTo0: uint8(0x41)}, 20254 {FcFrom: uint16(0x00C2), FcTo0: uint8(0x41)}, 20255 {FcFrom: uint16(0x00C3), FcTo0: uint8(0x41)}, 20256 {FcFrom: uint16(0x00C4), FcTo0: uint8(0x41), FcTo1: uint8(0x65)}, 20257 {FcFrom: uint16(0x00C5), FcTo0: uint8(0x41), FcTo1: uint8(0x61)}, 20258 {FcFrom: uint16(0x00C6), FcTo0: uint8(0x41), FcTo1: uint8(0x45)}, 20259 {FcFrom: uint16(0x00C7), FcTo0: uint8(0x43)}, 20260 {FcFrom: uint16(0x00C8), FcTo0: uint8(0x45)}, 20261 {FcFrom: uint16(0x00C9), FcTo0: uint8(0x45)}, 20262 {FcFrom: uint16(0x00CA), FcTo0: uint8(0x45)}, 20263 {FcFrom: uint16(0x00CB), FcTo0: uint8(0x45)}, 20264 {FcFrom: uint16(0x00CC), FcTo0: uint8(0x49)}, 20265 {FcFrom: uint16(0x00CD), FcTo0: uint8(0x49)}, 20266 {FcFrom: uint16(0x00CE), FcTo0: uint8(0x49)}, 20267 {FcFrom: uint16(0x00CF), FcTo0: uint8(0x49)}, 20268 {FcFrom: uint16(0x00D0), FcTo0: uint8(0x44)}, 20269 {FcFrom: uint16(0x00D1), FcTo0: uint8(0x4E)}, 20270 {FcFrom: uint16(0x00D2), FcTo0: uint8(0x4F)}, 20271 {FcFrom: uint16(0x00D3), FcTo0: uint8(0x4F)}, 20272 {FcFrom: uint16(0x00D4), FcTo0: uint8(0x4F)}, 20273 {FcFrom: uint16(0x00D5), FcTo0: uint8(0x4F)}, 20274 {FcFrom: uint16(0x00D6), FcTo0: uint8(0x4F), FcTo1: uint8(0x65)}, 20275 {FcFrom: uint16(0x00D7), FcTo0: uint8(0x78)}, 20276 {FcFrom: uint16(0x00D8), FcTo0: uint8(0x4F)}, 20277 {FcFrom: uint16(0x00D9), FcTo0: uint8(0x55)}, 20278 {FcFrom: uint16(0x00DA), FcTo0: uint8(0x55)}, 20279 {FcFrom: uint16(0x00DB), FcTo0: uint8(0x55)}, 20280 {FcFrom: uint16(0x00DC), FcTo0: uint8(0x55), FcTo1: uint8(0x65)}, 20281 {FcFrom: uint16(0x00DD), FcTo0: uint8(0x59)}, 20282 {FcFrom: uint16(0x00DE), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20283 {FcFrom: uint16(0x00DF), FcTo0: uint8(0x73), FcTo1: uint8(0x73)}, 20284 {FcFrom: uint16(0x00E0), FcTo0: uint8(0x61)}, 20285 {FcFrom: uint16(0x00E1), FcTo0: uint8(0x61)}, 20286 {FcFrom: uint16(0x00E2), FcTo0: uint8(0x61)}, 20287 {FcFrom: uint16(0x00E3), FcTo0: uint8(0x61)}, 20288 {FcFrom: uint16(0x00E4), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20289 {FcFrom: uint16(0x00E5), FcTo0: uint8(0x61), FcTo1: uint8(0x61)}, 20290 {FcFrom: uint16(0x00E6), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20291 {FcFrom: uint16(0x00E7), FcTo0: uint8(0x63)}, 20292 {FcFrom: uint16(0x00E8), FcTo0: uint8(0x65)}, 20293 {FcFrom: uint16(0x00E9), FcTo0: uint8(0x65)}, 20294 {FcFrom: uint16(0x00EA), FcTo0: uint8(0x65)}, 20295 {FcFrom: uint16(0x00EB), FcTo0: uint8(0x65)}, 20296 {FcFrom: uint16(0x00EC), FcTo0: uint8(0x69)}, 20297 {FcFrom: uint16(0x00ED), FcTo0: uint8(0x69)}, 20298 {FcFrom: uint16(0x00EE), FcTo0: uint8(0x69)}, 20299 {FcFrom: uint16(0x00EF), FcTo0: uint8(0x69)}, 20300 {FcFrom: uint16(0x00F0), FcTo0: uint8(0x64)}, 20301 {FcFrom: uint16(0x00F1), FcTo0: uint8(0x6E)}, 20302 {FcFrom: uint16(0x00F2), FcTo0: uint8(0x6F)}, 20303 {FcFrom: uint16(0x00F3), FcTo0: uint8(0x6F)}, 20304 {FcFrom: uint16(0x00F4), FcTo0: uint8(0x6F)}, 20305 {FcFrom: uint16(0x00F5), FcTo0: uint8(0x6F)}, 20306 {FcFrom: uint16(0x00F6), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20307 {FcFrom: uint16(0x00F7), FcTo0: uint8(0x3A)}, 20308 {FcFrom: uint16(0x00F8), FcTo0: uint8(0x6F)}, 20309 {FcFrom: uint16(0x00F9), FcTo0: uint8(0x75)}, 20310 {FcFrom: uint16(0x00FA), FcTo0: uint8(0x75)}, 20311 {FcFrom: uint16(0x00FB), FcTo0: uint8(0x75)}, 20312 {FcFrom: uint16(0x00FC), FcTo0: uint8(0x75), FcTo1: uint8(0x65)}, 20313 {FcFrom: uint16(0x00FD), FcTo0: uint8(0x79)}, 20314 {FcFrom: uint16(0x00FE), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 20315 {FcFrom: uint16(0x00FF), FcTo0: uint8(0x79)}, 20316 {FcFrom: uint16(0x0100), FcTo0: uint8(0x41)}, 20317 {FcFrom: uint16(0x0101), FcTo0: uint8(0x61)}, 20318 {FcFrom: uint16(0x0102), FcTo0: uint8(0x41)}, 20319 {FcFrom: uint16(0x0103), FcTo0: uint8(0x61)}, 20320 {FcFrom: uint16(0x0104), FcTo0: uint8(0x41)}, 20321 {FcFrom: uint16(0x0105), FcTo0: uint8(0x61)}, 20322 {FcFrom: uint16(0x0106), FcTo0: uint8(0x43)}, 20323 {FcFrom: uint16(0x0107), FcTo0: uint8(0x63)}, 20324 {FcFrom: uint16(0x0108), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20325 {FcFrom: uint16(0x0109), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20326 {FcFrom: uint16(0x010A), FcTo0: uint8(0x43)}, 20327 {FcFrom: uint16(0x010B), FcTo0: uint8(0x63)}, 20328 {FcFrom: uint16(0x010C), FcTo0: uint8(0x43)}, 20329 {FcFrom: uint16(0x010D), FcTo0: uint8(0x63)}, 20330 {FcFrom: uint16(0x010E), FcTo0: uint8(0x44)}, 20331 {FcFrom: uint16(0x010F), FcTo0: uint8(0x64)}, 20332 {FcFrom: uint16(0x0110), FcTo0: uint8(0x44)}, 20333 {FcFrom: uint16(0x0111), FcTo0: uint8(0x64)}, 20334 {FcFrom: uint16(0x0112), FcTo0: uint8(0x45)}, 20335 {FcFrom: uint16(0x0113), FcTo0: uint8(0x65)}, 20336 {FcFrom: uint16(0x0114), FcTo0: uint8(0x45)}, 20337 {FcFrom: uint16(0x0115), FcTo0: uint8(0x65)}, 20338 {FcFrom: uint16(0x0116), FcTo0: uint8(0x45)}, 20339 {FcFrom: uint16(0x0117), FcTo0: uint8(0x65)}, 20340 {FcFrom: uint16(0x0118), FcTo0: uint8(0x45)}, 20341 {FcFrom: uint16(0x0119), FcTo0: uint8(0x65)}, 20342 {FcFrom: uint16(0x011A), FcTo0: uint8(0x45)}, 20343 {FcFrom: uint16(0x011B), FcTo0: uint8(0x65)}, 20344 {FcFrom: uint16(0x011C), FcTo0: uint8(0x47), FcTo1: uint8(0x68)}, 20345 {FcFrom: uint16(0x011D), FcTo0: uint8(0x67), FcTo1: uint8(0x68)}, 20346 {FcFrom: uint16(0x011E), FcTo0: uint8(0x47)}, 20347 {FcFrom: uint16(0x011F), FcTo0: uint8(0x67)}, 20348 {FcFrom: uint16(0x0120), FcTo0: uint8(0x47)}, 20349 {FcFrom: uint16(0x0121), FcTo0: uint8(0x67)}, 20350 {FcFrom: uint16(0x0122), FcTo0: uint8(0x47)}, 20351 {FcFrom: uint16(0x0123), FcTo0: uint8(0x67)}, 20352 {FcFrom: uint16(0x0124), FcTo0: uint8(0x48), FcTo1: uint8(0x68)}, 20353 {FcFrom: uint16(0x0125), FcTo0: uint8(0x68), FcTo1: uint8(0x68)}, 20354 {FcFrom: uint16(0x0126), FcTo0: uint8(0x48)}, 20355 {FcFrom: uint16(0x0127), FcTo0: uint8(0x68)}, 20356 {FcFrom: uint16(0x0128), FcTo0: uint8(0x49)}, 20357 {FcFrom: uint16(0x0129), FcTo0: uint8(0x69)}, 20358 {FcFrom: uint16(0x012A), FcTo0: uint8(0x49)}, 20359 {FcFrom: uint16(0x012B), FcTo0: uint8(0x69)}, 20360 {FcFrom: uint16(0x012C), FcTo0: uint8(0x49)}, 20361 {FcFrom: uint16(0x012D), FcTo0: uint8(0x69)}, 20362 {FcFrom: uint16(0x012E), FcTo0: uint8(0x49)}, 20363 {FcFrom: uint16(0x012F), FcTo0: uint8(0x69)}, 20364 {FcFrom: uint16(0x0130), FcTo0: uint8(0x49)}, 20365 {FcFrom: uint16(0x0131), FcTo0: uint8(0x69)}, 20366 {FcFrom: uint16(0x0132), FcTo0: uint8(0x49), FcTo1: uint8(0x4A)}, 20367 {FcFrom: uint16(0x0133), FcTo0: uint8(0x69), FcTo1: uint8(0x6A)}, 20368 {FcFrom: uint16(0x0134), FcTo0: uint8(0x4A), FcTo1: uint8(0x68)}, 20369 {FcFrom: uint16(0x0135), FcTo0: uint8(0x6A), FcTo1: uint8(0x68)}, 20370 {FcFrom: uint16(0x0136), FcTo0: uint8(0x4B)}, 20371 {FcFrom: uint16(0x0137), FcTo0: uint8(0x6B)}, 20372 {FcFrom: uint16(0x0138), FcTo0: uint8(0x6B)}, 20373 {FcFrom: uint16(0x0139), FcTo0: uint8(0x4C)}, 20374 {FcFrom: uint16(0x013A), FcTo0: uint8(0x6C)}, 20375 {FcFrom: uint16(0x013B), FcTo0: uint8(0x4C)}, 20376 {FcFrom: uint16(0x013C), FcTo0: uint8(0x6C)}, 20377 {FcFrom: uint16(0x013D), FcTo0: uint8(0x4C)}, 20378 {FcFrom: uint16(0x013E), FcTo0: uint8(0x6C)}, 20379 {FcFrom: uint16(0x013F), FcTo0: uint8(0x4C), FcTo1: uint8(0x2E)}, 20380 {FcFrom: uint16(0x0140), FcTo0: uint8(0x6C), FcTo1: uint8(0x2E)}, 20381 {FcFrom: uint16(0x0141), FcTo0: uint8(0x4C)}, 20382 {FcFrom: uint16(0x0142), FcTo0: uint8(0x6C)}, 20383 {FcFrom: uint16(0x0143), FcTo0: uint8(0x4E)}, 20384 {FcFrom: uint16(0x0144), FcTo0: uint8(0x6E)}, 20385 {FcFrom: uint16(0x0145), FcTo0: uint8(0x4E)}, 20386 {FcFrom: uint16(0x0146), FcTo0: uint8(0x6E)}, 20387 {FcFrom: uint16(0x0147), FcTo0: uint8(0x4E)}, 20388 {FcFrom: uint16(0x0148), FcTo0: uint8(0x6E)}, 20389 {FcFrom: uint16(0x0149), FcTo0: uint8(0x27), FcTo1: uint8(0x6E)}, 20390 {FcFrom: uint16(0x014A), FcTo0: uint8(0x4E), FcTo1: uint8(0x47)}, 20391 {FcFrom: uint16(0x014B), FcTo0: uint8(0x6E), FcTo1: uint8(0x67)}, 20392 {FcFrom: uint16(0x014C), FcTo0: uint8(0x4F)}, 20393 {FcFrom: uint16(0x014D), FcTo0: uint8(0x6F)}, 20394 {FcFrom: uint16(0x014E), FcTo0: uint8(0x4F)}, 20395 {FcFrom: uint16(0x014F), FcTo0: uint8(0x6F)}, 20396 {FcFrom: uint16(0x0150), FcTo0: uint8(0x4F)}, 20397 {FcFrom: uint16(0x0151), FcTo0: uint8(0x6F)}, 20398 {FcFrom: uint16(0x0152), FcTo0: uint8(0x4F), FcTo1: uint8(0x45)}, 20399 {FcFrom: uint16(0x0153), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20400 {FcFrom: uint16(0x0154), FcTo0: uint8(0x52)}, 20401 {FcFrom: uint16(0x0155), FcTo0: uint8(0x72)}, 20402 {FcFrom: uint16(0x0156), FcTo0: uint8(0x52)}, 20403 {FcFrom: uint16(0x0157), FcTo0: uint8(0x72)}, 20404 {FcFrom: uint16(0x0158), FcTo0: uint8(0x52)}, 20405 {FcFrom: uint16(0x0159), FcTo0: uint8(0x72)}, 20406 {FcFrom: uint16(0x015A), FcTo0: uint8(0x53)}, 20407 {FcFrom: uint16(0x015B), FcTo0: uint8(0x73)}, 20408 {FcFrom: uint16(0x015C), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 20409 {FcFrom: uint16(0x015D), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 20410 {FcFrom: uint16(0x015E), FcTo0: uint8(0x53)}, 20411 {FcFrom: uint16(0x015F), FcTo0: uint8(0x73)}, 20412 {FcFrom: uint16(0x0160), FcTo0: uint8(0x53)}, 20413 {FcFrom: uint16(0x0161), FcTo0: uint8(0x73)}, 20414 {FcFrom: uint16(0x0162), FcTo0: uint8(0x54)}, 20415 {FcFrom: uint16(0x0163), FcTo0: uint8(0x74)}, 20416 {FcFrom: uint16(0x0164), FcTo0: uint8(0x54)}, 20417 {FcFrom: uint16(0x0165), FcTo0: uint8(0x74)}, 20418 {FcFrom: uint16(0x0166), FcTo0: uint8(0x54)}, 20419 {FcFrom: uint16(0x0167), FcTo0: uint8(0x74)}, 20420 {FcFrom: uint16(0x0168), FcTo0: uint8(0x55)}, 20421 {FcFrom: uint16(0x0169), FcTo0: uint8(0x75)}, 20422 {FcFrom: uint16(0x016A), FcTo0: uint8(0x55)}, 20423 {FcFrom: uint16(0x016B), FcTo0: uint8(0x75)}, 20424 {FcFrom: uint16(0x016C), FcTo0: uint8(0x55)}, 20425 {FcFrom: uint16(0x016D), FcTo0: uint8(0x75)}, 20426 {FcFrom: uint16(0x016E), FcTo0: uint8(0x55)}, 20427 {FcFrom: uint16(0x016F), FcTo0: uint8(0x75)}, 20428 {FcFrom: uint16(0x0170), FcTo0: uint8(0x55)}, 20429 {FcFrom: uint16(0x0171), FcTo0: uint8(0x75)}, 20430 {FcFrom: uint16(0x0172), FcTo0: uint8(0x55)}, 20431 {FcFrom: uint16(0x0173), FcTo0: uint8(0x75)}, 20432 {FcFrom: uint16(0x0174), FcTo0: uint8(0x57)}, 20433 {FcFrom: uint16(0x0175), FcTo0: uint8(0x77)}, 20434 {FcFrom: uint16(0x0176), FcTo0: uint8(0x59)}, 20435 {FcFrom: uint16(0x0177), FcTo0: uint8(0x79)}, 20436 {FcFrom: uint16(0x0178), FcTo0: uint8(0x59)}, 20437 {FcFrom: uint16(0x0179), FcTo0: uint8(0x5A)}, 20438 {FcFrom: uint16(0x017A), FcTo0: uint8(0x7A)}, 20439 {FcFrom: uint16(0x017B), FcTo0: uint8(0x5A)}, 20440 {FcFrom: uint16(0x017C), FcTo0: uint8(0x7A)}, 20441 {FcFrom: uint16(0x017D), FcTo0: uint8(0x5A)}, 20442 {FcFrom: uint16(0x017E), FcTo0: uint8(0x7A)}, 20443 {FcFrom: uint16(0x017F), FcTo0: uint8(0x73)}, 20444 {FcFrom: uint16(0x0192), FcTo0: uint8(0x66)}, 20445 {FcFrom: uint16(0x0218), FcTo0: uint8(0x53)}, 20446 {FcFrom: uint16(0x0219), FcTo0: uint8(0x73)}, 20447 {FcFrom: uint16(0x021A), FcTo0: uint8(0x54)}, 20448 {FcFrom: uint16(0x021B), FcTo0: uint8(0x74)}, 20449 {FcFrom: uint16(0x0386), FcTo0: uint8(0x41)}, 20450 {FcFrom: uint16(0x0388), FcTo0: uint8(0x45)}, 20451 {FcFrom: uint16(0x0389), FcTo0: uint8(0x49)}, 20452 {FcFrom: uint16(0x038A), FcTo0: uint8(0x49)}, 20453 {FcFrom: uint16(0x038C), FcTo0: uint8(0x4f)}, 20454 {FcFrom: uint16(0x038E), FcTo0: uint8(0x59)}, 20455 {FcFrom: uint16(0x038F), FcTo0: uint8(0x4f)}, 20456 {FcFrom: uint16(0x0390), FcTo0: uint8(0x69)}, 20457 {FcFrom: uint16(0x0391), FcTo0: uint8(0x41)}, 20458 {FcFrom: uint16(0x0392), FcTo0: uint8(0x42)}, 20459 {FcFrom: uint16(0x0393), FcTo0: uint8(0x47)}, 20460 {FcFrom: uint16(0x0394), FcTo0: uint8(0x44)}, 20461 {FcFrom: uint16(0x0395), FcTo0: uint8(0x45)}, 20462 {FcFrom: uint16(0x0396), FcTo0: uint8(0x5a)}, 20463 {FcFrom: uint16(0x0397), FcTo0: uint8(0x49)}, 20464 {FcFrom: uint16(0x0398), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20465 {FcFrom: uint16(0x0399), FcTo0: uint8(0x49)}, 20466 {FcFrom: uint16(0x039A), FcTo0: uint8(0x4b)}, 20467 {FcFrom: uint16(0x039B), FcTo0: uint8(0x4c)}, 20468 {FcFrom: uint16(0x039C), FcTo0: uint8(0x4d)}, 20469 {FcFrom: uint16(0x039D), FcTo0: uint8(0x4e)}, 20470 {FcFrom: uint16(0x039E), FcTo0: uint8(0x58)}, 20471 {FcFrom: uint16(0x039F), FcTo0: uint8(0x4f)}, 20472 {FcFrom: uint16(0x03A0), FcTo0: uint8(0x50)}, 20473 {FcFrom: uint16(0x03A1), FcTo0: uint8(0x52)}, 20474 {FcFrom: uint16(0x03A3), FcTo0: uint8(0x53)}, 20475 {FcFrom: uint16(0x03A4), FcTo0: uint8(0x54)}, 20476 {FcFrom: uint16(0x03A5), FcTo0: uint8(0x59)}, 20477 {FcFrom: uint16(0x03A6), FcTo0: uint8(0x46)}, 20478 {FcFrom: uint16(0x03A7), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20479 {FcFrom: uint16(0x03A8), FcTo0: uint8(0x50), FcTo1: uint8(0x73)}, 20480 {FcFrom: uint16(0x03A9), FcTo0: uint8(0x4f)}, 20481 {FcFrom: uint16(0x03AA), FcTo0: uint8(0x49)}, 20482 {FcFrom: uint16(0x03AB), FcTo0: uint8(0x59)}, 20483 {FcFrom: uint16(0x03AC), FcTo0: uint8(0x61)}, 20484 {FcFrom: uint16(0x03AD), FcTo0: uint8(0x65)}, 20485 {FcFrom: uint16(0x03AE), FcTo0: uint8(0x69)}, 20486 {FcFrom: uint16(0x03AF), FcTo0: uint8(0x69)}, 20487 {FcFrom: uint16(0x03B1), FcTo0: uint8(0x61)}, 20488 {FcFrom: uint16(0x03B2), FcTo0: uint8(0x62)}, 20489 {FcFrom: uint16(0x03B3), FcTo0: uint8(0x67)}, 20490 {FcFrom: uint16(0x03B4), FcTo0: uint8(0x64)}, 20491 {FcFrom: uint16(0x03B5), FcTo0: uint8(0x65)}, 20492 {FcFrom: uint16(0x03B6), FcTo0: uint8(0x7a)}, 20493 {FcFrom: uint16(0x03B7), FcTo0: uint8(0x69)}, 20494 {FcFrom: uint16(0x03B8), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 20495 {FcFrom: uint16(0x03B9), FcTo0: uint8(0x69)}, 20496 {FcFrom: uint16(0x03BA), FcTo0: uint8(0x6b)}, 20497 {FcFrom: uint16(0x03BB), FcTo0: uint8(0x6c)}, 20498 {FcFrom: uint16(0x03BC), FcTo0: uint8(0x6d)}, 20499 {FcFrom: uint16(0x03BD), FcTo0: uint8(0x6e)}, 20500 {FcFrom: uint16(0x03BE), FcTo0: uint8(0x78)}, 20501 {FcFrom: uint16(0x03BF), FcTo0: uint8(0x6f)}, 20502 {FcFrom: uint16(0x03C0), FcTo0: uint8(0x70)}, 20503 {FcFrom: uint16(0x03C1), FcTo0: uint8(0x72)}, 20504 {FcFrom: uint16(0x03C3), FcTo0: uint8(0x73)}, 20505 {FcFrom: uint16(0x03C4), FcTo0: uint8(0x74)}, 20506 {FcFrom: uint16(0x03C5), FcTo0: uint8(0x79)}, 20507 {FcFrom: uint16(0x03C6), FcTo0: uint8(0x66)}, 20508 {FcFrom: uint16(0x03C7), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20509 {FcFrom: uint16(0x03C8), FcTo0: uint8(0x70), FcTo1: uint8(0x73)}, 20510 {FcFrom: uint16(0x03C9), FcTo0: uint8(0x6f)}, 20511 {FcFrom: uint16(0x03CA), FcTo0: uint8(0x69)}, 20512 {FcFrom: uint16(0x03CB), FcTo0: uint8(0x79)}, 20513 {FcFrom: uint16(0x03CC), FcTo0: uint8(0x6f)}, 20514 {FcFrom: uint16(0x03CD), FcTo0: uint8(0x79)}, 20515 {FcFrom: uint16(0x03CE), FcTo0: uint8(0x69)}, 20516 {FcFrom: uint16(0x0400), FcTo0: uint8(0x45)}, 20517 {FcFrom: uint16(0x0401), FcTo0: uint8(0x45)}, 20518 {FcFrom: uint16(0x0402), FcTo0: uint8(0x44)}, 20519 {FcFrom: uint16(0x0403), FcTo0: uint8(0x47)}, 20520 {FcFrom: uint16(0x0404), FcTo0: uint8(0x45)}, 20521 {FcFrom: uint16(0x0405), FcTo0: uint8(0x5a)}, 20522 {FcFrom: uint16(0x0406), FcTo0: uint8(0x49)}, 20523 {FcFrom: uint16(0x0407), FcTo0: uint8(0x49)}, 20524 {FcFrom: uint16(0x0408), FcTo0: uint8(0x4a)}, 20525 {FcFrom: uint16(0x0409), FcTo0: uint8(0x49)}, 20526 {FcFrom: uint16(0x040A), FcTo0: uint8(0x4e)}, 20527 {FcFrom: uint16(0x040B), FcTo0: uint8(0x44)}, 20528 {FcFrom: uint16(0x040C), FcTo0: uint8(0x4b)}, 20529 {FcFrom: uint16(0x040D), FcTo0: uint8(0x49)}, 20530 {FcFrom: uint16(0x040E), FcTo0: uint8(0x55)}, 20531 {FcFrom: uint16(0x040F), FcTo0: uint8(0x44)}, 20532 {FcFrom: uint16(0x0410), FcTo0: uint8(0x41)}, 20533 {FcFrom: uint16(0x0411), FcTo0: uint8(0x42)}, 20534 {FcFrom: uint16(0x0412), FcTo0: uint8(0x56)}, 20535 {FcFrom: uint16(0x0413), FcTo0: uint8(0x47)}, 20536 {FcFrom: uint16(0x0414), FcTo0: uint8(0x44)}, 20537 {FcFrom: uint16(0x0415), FcTo0: uint8(0x45)}, 20538 {FcFrom: uint16(0x0416), FcTo0: uint8(0x5a), FcTo1: uint8(0x68)}, 20539 {FcFrom: uint16(0x0417), FcTo0: uint8(0x5a)}, 20540 {FcFrom: uint16(0x0418), FcTo0: uint8(0x49)}, 20541 {FcFrom: uint16(0x0419), FcTo0: uint8(0x49)}, 20542 {FcFrom: uint16(0x041A), FcTo0: uint8(0x4b)}, 20543 {FcFrom: uint16(0x041B), FcTo0: uint8(0x4c)}, 20544 {FcFrom: uint16(0x041C), FcTo0: uint8(0x4d)}, 20545 {FcFrom: uint16(0x041D), FcTo0: uint8(0x4e)}, 20546 {FcFrom: uint16(0x041E), FcTo0: uint8(0x4f)}, 20547 {FcFrom: uint16(0x041F), FcTo0: uint8(0x50)}, 20548 {FcFrom: uint16(0x0420), FcTo0: uint8(0x52)}, 20549 {FcFrom: uint16(0x0421), FcTo0: uint8(0x53)}, 20550 {FcFrom: uint16(0x0422), FcTo0: uint8(0x54)}, 20551 {FcFrom: uint16(0x0423), FcTo0: uint8(0x55)}, 20552 {FcFrom: uint16(0x0424), FcTo0: uint8(0x46)}, 20553 {FcFrom: uint16(0x0425), FcTo0: uint8(0x4b), FcTo1: uint8(0x68)}, 20554 {FcFrom: uint16(0x0426), FcTo0: uint8(0x54), FcTo1: uint8(0x63)}, 20555 {FcFrom: uint16(0x0427), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20556 {FcFrom: uint16(0x0428), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 20557 {FcFrom: uint16(0x0429), FcTo0: uint8(0x53), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 20558 {FcFrom: uint16(0x042A), FcTo0: uint8(0x61)}, 20559 {FcFrom: uint16(0x042B), FcTo0: uint8(0x59)}, 20560 {FcFrom: uint16(0x042C), FcTo0: uint8(0x59)}, 20561 {FcFrom: uint16(0x042D), FcTo0: uint8(0x45)}, 20562 {FcFrom: uint16(0x042E), FcTo0: uint8(0x49), FcTo1: uint8(0x75)}, 20563 {FcFrom: uint16(0x042F), FcTo0: uint8(0x49), FcTo1: uint8(0x61)}, 20564 {FcFrom: uint16(0x0430), FcTo0: uint8(0x61)}, 20565 {FcFrom: uint16(0x0431), FcTo0: uint8(0x62)}, 20566 {FcFrom: uint16(0x0432), FcTo0: uint8(0x76)}, 20567 {FcFrom: uint16(0x0433), FcTo0: uint8(0x67)}, 20568 {FcFrom: uint16(0x0434), FcTo0: uint8(0x64)}, 20569 {FcFrom: uint16(0x0435), FcTo0: uint8(0x65)}, 20570 {FcFrom: uint16(0x0436), FcTo0: uint8(0x7a), FcTo1: uint8(0x68)}, 20571 {FcFrom: uint16(0x0437), FcTo0: uint8(0x7a)}, 20572 {FcFrom: uint16(0x0438), FcTo0: uint8(0x69)}, 20573 {FcFrom: uint16(0x0439), FcTo0: uint8(0x69)}, 20574 {FcFrom: uint16(0x043A), FcTo0: uint8(0x6b)}, 20575 {FcFrom: uint16(0x043B), FcTo0: uint8(0x6c)}, 20576 {FcFrom: uint16(0x043C), FcTo0: uint8(0x6d)}, 20577 {FcFrom: uint16(0x043D), FcTo0: uint8(0x6e)}, 20578 {FcFrom: uint16(0x043E), FcTo0: uint8(0x6f)}, 20579 {FcFrom: uint16(0x043F), FcTo0: uint8(0x70)}, 20580 {FcFrom: uint16(0x0440), FcTo0: uint8(0x72)}, 20581 {FcFrom: uint16(0x0441), FcTo0: uint8(0x73)}, 20582 {FcFrom: uint16(0x0442), FcTo0: uint8(0x74)}, 20583 {FcFrom: uint16(0x0443), FcTo0: uint8(0x75)}, 20584 {FcFrom: uint16(0x0444), FcTo0: uint8(0x66)}, 20585 {FcFrom: uint16(0x0445), FcTo0: uint8(0x6b), FcTo1: uint8(0x68)}, 20586 {FcFrom: uint16(0x0446), FcTo0: uint8(0x74), FcTo1: uint8(0x63)}, 20587 {FcFrom: uint16(0x0447), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20588 {FcFrom: uint16(0x0448), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 20589 {FcFrom: uint16(0x0449), FcTo0: uint8(0x73), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 20590 {FcFrom: uint16(0x044A), FcTo0: uint8(0x61)}, 20591 {FcFrom: uint16(0x044B), FcTo0: uint8(0x79)}, 20592 {FcFrom: uint16(0x044C), FcTo0: uint8(0x79)}, 20593 {FcFrom: uint16(0x044D), FcTo0: uint8(0x65)}, 20594 {FcFrom: uint16(0x044E), FcTo0: uint8(0x69), FcTo1: uint8(0x75)}, 20595 {FcFrom: uint16(0x044F), FcTo0: uint8(0x69), FcTo1: uint8(0x61)}, 20596 {FcFrom: uint16(0x0450), FcTo0: uint8(0x65)}, 20597 {FcFrom: uint16(0x0451), FcTo0: uint8(0x65)}, 20598 {FcFrom: uint16(0x0452), FcTo0: uint8(0x64)}, 20599 {FcFrom: uint16(0x0453), FcTo0: uint8(0x67)}, 20600 {FcFrom: uint16(0x0454), FcTo0: uint8(0x65)}, 20601 {FcFrom: uint16(0x0455), FcTo0: uint8(0x7a)}, 20602 {FcFrom: uint16(0x0456), FcTo0: uint8(0x69)}, 20603 {FcFrom: uint16(0x0457), FcTo0: uint8(0x69)}, 20604 {FcFrom: uint16(0x0458), FcTo0: uint8(0x6a)}, 20605 {FcFrom: uint16(0x0459), FcTo0: uint8(0x69)}, 20606 {FcFrom: uint16(0x045A), FcTo0: uint8(0x6e)}, 20607 {FcFrom: uint16(0x045B), FcTo0: uint8(0x64)}, 20608 {FcFrom: uint16(0x045C), FcTo0: uint8(0x6b)}, 20609 {FcFrom: uint16(0x045D), FcTo0: uint8(0x69)}, 20610 {FcFrom: uint16(0x045E), FcTo0: uint8(0x75)}, 20611 {FcFrom: uint16(0x045F), FcTo0: uint8(0x64)}, 20612 {FcFrom: uint16(0x1E02), FcTo0: uint8(0x42)}, 20613 {FcFrom: uint16(0x1E03), FcTo0: uint8(0x62)}, 20614 {FcFrom: uint16(0x1E0A), FcTo0: uint8(0x44)}, 20615 {FcFrom: uint16(0x1E0B), FcTo0: uint8(0x64)}, 20616 {FcFrom: uint16(0x1E1E), FcTo0: uint8(0x46)}, 20617 {FcFrom: uint16(0x1E1F), FcTo0: uint8(0x66)}, 20618 {FcFrom: uint16(0x1E40), FcTo0: uint8(0x4D)}, 20619 {FcFrom: uint16(0x1E41), FcTo0: uint8(0x6D)}, 20620 {FcFrom: uint16(0x1E56), FcTo0: uint8(0x50)}, 20621 {FcFrom: uint16(0x1E57), FcTo0: uint8(0x70)}, 20622 {FcFrom: uint16(0x1E60), FcTo0: uint8(0x53)}, 20623 {FcFrom: uint16(0x1E61), FcTo0: uint8(0x73)}, 20624 {FcFrom: uint16(0x1E6A), FcTo0: uint8(0x54)}, 20625 {FcFrom: uint16(0x1E6B), FcTo0: uint8(0x74)}, 20626 {FcFrom: uint16(0x1E80), FcTo0: uint8(0x57)}, 20627 {FcFrom: uint16(0x1E81), FcTo0: uint8(0x77)}, 20628 {FcFrom: uint16(0x1E82), FcTo0: uint8(0x57)}, 20629 {FcFrom: uint16(0x1E83), FcTo0: uint8(0x77)}, 20630 {FcFrom: uint16(0x1E84), FcTo0: uint8(0x57)}, 20631 {FcFrom: uint16(0x1E85), FcTo0: uint8(0x77)}, 20632 {FcFrom: uint16(0x1EF2), FcTo0: uint8(0x59)}, 20633 {FcFrom: uint16(0x1EF3), FcTo0: uint8(0x79)}, 20634 {FcFrom: uint16(0xFB00), FcTo0: uint8(0x66), FcTo1: uint8(0x66)}, 20635 {FcFrom: uint16(0xFB01), FcTo0: uint8(0x66), FcTo1: uint8(0x69)}, 20636 {FcFrom: uint16(0xFB02), FcTo0: uint8(0x66), FcTo1: uint8(0x6C)}, 20637 {FcFrom: uint16(0xFB05), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 20638 {FcFrom: uint16(0xFB06), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 20639 } 20640 20641 func spellfixFindTranslit(tls *libc.TLS, c int32, pxTop uintptr) uintptr { 20642 *(*int32)(unsafe.Pointer(pxTop)) = int32(uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{})) - uint64(1)) 20643 return uintptr(unsafe.Pointer(&translit)) 20644 } 20645 20646 func transliterate(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 20647 bp := tls.Alloc(8) 20648 defer tls.Free(8) 20649 20650 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn*4+1)) 20651 var c int32 20652 20653 var nOut int32 20654 if zOut == uintptr(0) { 20655 return uintptr(0) 20656 } 20657 nOut = 0 20658 for nIn > 0 { 20659 c = utf8Read(tls, zIn, nIn, bp) 20660 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 20661 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 20662 if c <= 127 { 20663 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8(c) 20664 } else { 20665 var xBtm int32 20666 var x int32 20667 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 20668 xBtm = 0 20669 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 20670 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 20671 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 20672 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo0 20673 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 20674 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo1 20675 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 20676 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo2 20677 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 20678 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo3 20679 } 20680 } 20681 } 20682 c = 0 20683 break 20684 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 20685 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 20686 } else { 20687 xBtm = x + 1 20688 } 20689 } 20690 if c != 0 { 20691 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8('?') 20692 } 20693 } 20694 } 20695 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 20696 return zOut 20697 } 20698 20699 func translen_to_charlen(tls *libc.TLS, zIn uintptr, nIn int32, nTrans int32) int32 { 20700 bp := tls.Alloc(8) 20701 defer tls.Free(8) 20702 20703 var i int32 20704 var c int32 20705 20706 var nOut int32 20707 var nChar int32 20708 20709 i = libc.AssignInt32(&nOut, 0) 20710 for nChar = 0; i < nIn && nOut < nTrans; nChar++ { 20711 c = utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 20712 i = i + *(*int32)(unsafe.Pointer(bp)) 20713 20714 nOut++ 20715 if c >= 128 { 20716 var xBtm int32 20717 var x int32 20718 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 20719 xBtm = 0 20720 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 20721 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 20722 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 20723 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 20724 nOut++ 20725 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 20726 nOut++ 20727 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 20728 nOut++ 20729 } 20730 } 20731 } 20732 break 20733 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 20734 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 20735 } else { 20736 xBtm = x + 1 20737 } 20738 } 20739 } 20740 } 20741 20742 return nChar 20743 } 20744 20745 func transliterateSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20746 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20747 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20748 var zOut uintptr = transliterate(tls, zIn, nIn) 20749 if zOut == uintptr(0) { 20750 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20751 } else { 20752 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 20753 } 20754 } 20755 20756 func scriptCodeSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20757 bp := tls.Alloc(4) 20758 defer tls.Free(4) 20759 20760 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20761 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20762 var c int32 20763 20764 var scriptMask int32 = 0 20765 var res int32 20766 var seenDigit int32 = 0 20767 20768 for nIn > 0 { 20769 c = utf8Read(tls, zIn, nIn, bp) 20770 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 20771 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 20772 if c < 0x02af { 20773 if c >= 0x80 || int32(midClass[c&0x7f]) < CCLASS_DIGIT { 20774 scriptMask = scriptMask | SCRIPT_LATIN 20775 } else if c >= '0' && c <= '9' { 20776 seenDigit = 1 20777 } 20778 } else if c >= 0x0400 && c <= 0x04ff { 20779 scriptMask = scriptMask | SCRIPT_CYRILLIC 20780 } else if c >= 0x0386 && c <= 0x03ce { 20781 scriptMask = scriptMask | SCRIPT_GREEK 20782 } else if c >= 0x0590 && c <= 0x05ff { 20783 scriptMask = scriptMask | SCRIPT_HEBREW 20784 } else if c >= 0x0600 && c <= 0x06ff { 20785 scriptMask = scriptMask | SCRIPT_ARABIC 20786 } 20787 } 20788 if scriptMask == 0 && seenDigit != 0 { 20789 scriptMask = SCRIPT_LATIN 20790 } 20791 switch scriptMask { 20792 case 0: 20793 res = 999 20794 break 20795 case SCRIPT_LATIN: 20796 res = 215 20797 break 20798 case SCRIPT_CYRILLIC: 20799 res = 220 20800 break 20801 case SCRIPT_GREEK: 20802 res = 200 20803 break 20804 case SCRIPT_HEBREW: 20805 res = 125 20806 break 20807 case SCRIPT_ARABIC: 20808 res = 160 20809 break 20810 default: 20811 res = 998 20812 break 20813 } 20814 sqlite3.Xsqlite3_result_int(tls, context, res) 20815 } 20816 20817 type spellfix1_vtab1 = struct { 20818 Fbase sqlite3_vtab 20819 Fdb uintptr 20820 FzDbName uintptr 20821 FzTableName uintptr 20822 FzCostTable uintptr 20823 FpConfig3 uintptr 20824 } 20825 20826 type spellfix1_vtab = spellfix1_vtab1 20827 type spellfix1_cursor1 = struct { 20828 Fbase sqlite3_vtab_cursor 20829 FpVTab uintptr 20830 FzPattern uintptr 20831 FidxNum int32 20832 FnRow int32 20833 FnAlloc int32 20834 FiRow int32 20835 FiLang int32 20836 FiTop int32 20837 FiScope int32 20838 FnSearch int32 20839 FpFullScan uintptr 20840 Fa uintptr 20841 } 20842 20843 type spellfix1_cursor = spellfix1_cursor1 20844 20845 type spellfix1_row = struct { 20846 FiRowid sqlite3_int64 20847 FzWord uintptr 20848 FiRank int32 20849 FiDistance int32 20850 FiScore int32 20851 FiMatchlen int32 20852 FzHash [32]int8 20853 } 20854 20855 func spellfix1DbExec(tls *libc.TLS, pRc uintptr, db uintptr, zFormat uintptr, va uintptr) { 20856 var ap va_list 20857 _ = ap 20858 var zSql uintptr 20859 if *(*int32)(unsafe.Pointer(pRc)) != 0 { 20860 return 20861 } 20862 ap = va 20863 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap) 20864 _ = ap 20865 if zSql == uintptr(0) { 20866 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 20867 } else { 20868 *(*int32)(unsafe.Pointer(pRc)) = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 20869 sqlite3.Xsqlite3_free(tls, zSql) 20870 } 20871 } 20872 20873 func spellfix1Uninit(tls *libc.TLS, isDestroy int32, pVTab uintptr) int32 { 20874 bp := tls.Alloc(20) 20875 defer tls.Free(20) 20876 20877 var p uintptr = pVTab 20878 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 20879 if isDestroy != 0 { 20880 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 20881 spellfix1DbExec(tls, bp+16, db, ts+7189, 20882 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 20883 } 20884 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 20885 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 20886 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 20887 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 20888 sqlite3.Xsqlite3_free(tls, p) 20889 } 20890 return *(*int32)(unsafe.Pointer(bp + 16)) 20891 } 20892 20893 func spellfix1Disconnect(tls *libc.TLS, pVTab uintptr) int32 { 20894 return spellfix1Uninit(tls, 0, pVTab) 20895 } 20896 20897 func spellfix1Destroy(tls *libc.TLS, pVTab uintptr) int32 { 20898 return spellfix1Uninit(tls, 1, pVTab) 20899 } 20900 20901 func spellfix1Dequote(tls *libc.TLS, zIn uintptr) uintptr { 20902 bp := tls.Alloc(8) 20903 defer tls.Free(8) 20904 20905 var zOut uintptr 20906 var i int32 20907 var j int32 20908 var c int8 20909 for libc.Xisspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zIn))))) != 0 { 20910 zIn++ 20911 } 20912 zOut = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zIn)) 20913 if zOut == uintptr(0) { 20914 return uintptr(0) 20915 } 20916 i = int32(libc.Xstrlen(tls, zOut)) 20917 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = int8(0) 20918 c = *(*int8)(unsafe.Pointer(zOut)) 20919 if int32(c) == '\'' || int32(c) == '"' { 20920 i = 1 20921 j = 0 20922 for ; 1 != 0; i++ { 20923 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zOut + uintptr(i))) 20924 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i)))) == int32(c) { 20925 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i+1)))) == int32(c) { 20926 i++ 20927 } else { 20928 *(*int8)(unsafe.Pointer(zOut + uintptr(j-1))) = int8(0) 20929 break 20930 } 20931 } 20932 } 20933 } 20934 return zOut 20935 } 20936 20937 func spellfix1Init(tls *libc.TLS, isCreate int32, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 20938 bp := tls.Alloc(60) 20939 defer tls.Free(60) 20940 20941 var pNew uintptr = uintptr(0) 20942 20943 var zDbName uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 20944 var zTableName uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 20945 var nDbName int32 20946 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_OK 20947 var i int32 20948 20949 nDbName = int32(libc.Xstrlen(tls, zDbName)) 20950 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_vtab{}))+uint64(nDbName)+uint64(1)) 20951 if pNew == uintptr(0) { 20952 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 20953 } else { 20954 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(spellfix1_vtab{}))) 20955 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName = pNew + 1*64 20956 libc.Xmemcpy(tls, (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName, zDbName, uint64(nDbName+1)) 20957 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 20958 (*spellfix1_vtab)(unsafe.Pointer(pNew)).Fdb = db 20959 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0) { 20960 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 20961 } else { 20962 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 20963 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_declare_vtab(tls, db, 20964 ts+7226) 20965 } 20966 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && isCreate != 0 { 20967 spellfix1DbExec(tls, bp+56, db, 20968 ts+7380, 20969 libc.VaList(bp+8, zDbName, zTableName)) 20970 spellfix1DbExec(tls, bp+56, db, 20971 ts+7514, 20972 libc.VaList(bp+24, zDbName, zTableName, zTableName)) 20973 } 20974 for i = 3; *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && i < argc; i++ { 20975 if libc.Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ts+7599, uint64(16)) == 0 && (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 20976 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable = spellfix1Dequote(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))+16) 20977 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 20978 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 20979 } 20980 continue 20981 } 20982 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+7616, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 20983 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_ERROR 20984 } 20985 } 20986 20987 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 && pNew != 0 { 20988 *(*uintptr)(unsafe.Pointer(ppVTab)) = uintptr(0) 20989 spellfix1Uninit(tls, 0, pNew) 20990 } else { 20991 *(*uintptr)(unsafe.Pointer(ppVTab)) = pNew 20992 } 20993 return *(*int32)(unsafe.Pointer(bp + 56)) 20994 } 20995 20996 func spellfix1Connect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 20997 return spellfix1Init(tls, 0, db, pAux, argc, argv, ppVTab, pzErr) 20998 } 20999 21000 func spellfix1Create(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21001 return spellfix1Init(tls, 1, db, pAux, argc, argv, ppVTab, pzErr) 21002 } 21003 21004 func spellfix1ResetCursor(tls *libc.TLS, pCur uintptr) { 21005 var i int32 21006 for i = 0; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21007 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(i)*64)).FzWord) 21008 } 21009 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = 0 21010 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 21011 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch = 0 21012 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21013 sqlite3.Xsqlite3_finalize(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21014 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan = uintptr(0) 21015 } 21016 } 21017 21018 func spellfix1ResizeCursor(tls *libc.TLS, pCur uintptr, N int32) { 21019 var aNew uintptr 21020 21021 aNew = sqlite3.Xsqlite3_realloc64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64(unsafe.Sizeof(spellfix1_row{}))*uint64(N)) 21022 if aNew == uintptr(0) && N > 0 { 21023 spellfix1ResetCursor(tls, pCur) 21024 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa) 21025 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = 0 21026 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = uintptr(0) 21027 } else { 21028 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = N 21029 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = aNew 21030 } 21031 } 21032 21033 func spellfix1Close(tls *libc.TLS, cur uintptr) int32 { 21034 var pCur uintptr = cur 21035 spellfix1ResetCursor(tls, pCur) 21036 spellfix1ResizeCursor(tls, pCur, 0) 21037 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21038 sqlite3.Xsqlite3_free(tls, pCur) 21039 return SQLITE_OK 21040 } 21041 21042 func spellfix1BestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 21043 var iPlan int32 = 0 21044 var iLangTerm int32 = -1 21045 var iTopTerm int32 = -1 21046 var iScopeTerm int32 = -1 21047 var iDistTerm int32 = -1 21048 var iRowidTerm int32 = -1 21049 var i int32 21050 var pConstraint uintptr 21051 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 21052 i = 0 21053 __1: 21054 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 21055 goto __3 21056 } 21057 { 21058 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 21059 goto __2 21060 } 21061 21062 if iPlan&SPELLFIX_IDXNUM_MATCH == 0 && 21063 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_WORD && 21064 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 21065 iPlan = iPlan | SPELLFIX_IDXNUM_MATCH 21066 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 21067 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 21068 } 21069 21070 if iPlan&SPELLFIX_IDXNUM_LANGID == 0 && 21071 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_LANGID && 21072 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21073 iPlan = iPlan | SPELLFIX_IDXNUM_LANGID 21074 iLangTerm = i 21075 } 21076 21077 if iPlan&SPELLFIX_IDXNUM_TOP == 0 && 21078 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_TOP && 21079 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21080 iPlan = iPlan | SPELLFIX_IDXNUM_TOP 21081 iTopTerm = i 21082 } 21083 21084 if iPlan&SPELLFIX_IDXNUM_SCOPE == 0 && 21085 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_SCOPE && 21086 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21087 iPlan = iPlan | SPELLFIX_IDXNUM_SCOPE 21088 iScopeTerm = i 21089 } 21090 21091 if iPlan&(0x10|0x20) == 0 && 21092 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_DISTANCE && 21093 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 21094 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 21095 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 21096 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLT 21097 } else { 21098 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLE 21099 } 21100 iDistTerm = i 21101 } 21102 21103 if iPlan&SPELLFIX_IDXNUM_ROWID == 0 && 21104 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < 0 && 21105 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21106 iPlan = iPlan | SPELLFIX_IDXNUM_ROWID 21107 iRowidTerm = i 21108 } 21109 21110 } 21111 goto __2 21112 __2: 21113 i++ 21114 pConstraint += 12 21115 goto __1 21116 goto __3 21117 __3: 21118 ; 21119 if iPlan&SPELLFIX_IDXNUM_MATCH != 0 { 21120 var idx int32 = 2 21121 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 21122 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 21123 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == SPELLFIX_COL_SCORE && 21124 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 21125 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 21126 } 21127 if iPlan&SPELLFIX_IDXNUM_LANGID != 0 { 21128 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21129 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).Fomit = uint8(1) 21130 } 21131 if iPlan&SPELLFIX_IDXNUM_TOP != 0 { 21132 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21133 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).Fomit = uint8(1) 21134 } 21135 if iPlan&SPELLFIX_IDXNUM_SCOPE != 0 { 21136 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21137 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).Fomit = uint8(1) 21138 } 21139 if iPlan&(0x10|0x20) != 0 { 21140 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21141 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).Fomit = uint8(1) 21142 } 21143 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e5 21144 } else if iPlan&SPELLFIX_IDXNUM_ROWID != 0 { 21145 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SPELLFIX_IDXNUM_ROWID 21146 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).FargvIndex = 1 21147 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).Fomit = uint8(1) 21148 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 21149 } else { 21150 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 21151 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e50 21152 } 21153 return SQLITE_OK 21154 } 21155 21156 func spellfix1Open(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 21157 var p uintptr = pVTab 21158 var pCur uintptr 21159 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21160 if pCur == uintptr(0) { 21161 return SQLITE_NOMEM 21162 } 21163 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21164 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab = p 21165 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 21166 return SQLITE_OK 21167 } 21168 21169 func spellfix1Score(tls *libc.TLS, iDistance int32, iRank int32) int32 { 21170 var iLog2 int32 21171 iLog2 = 0 21172 __1: 21173 if !(iRank > 0) { 21174 goto __3 21175 } 21176 { 21177 } 21178 goto __2 21179 __2: 21180 iLog2++ 21181 iRank >>= 1 21182 goto __1 21183 goto __3 21184 __3: 21185 ; 21186 return iDistance + 32 - iLog2 21187 } 21188 21189 func spellfix1RowCompare(tls *libc.TLS, A uintptr, B uintptr) int32 { 21190 var a uintptr = A 21191 var b uintptr = B 21192 return (*spellfix1_row)(unsafe.Pointer(a)).FiScore - (*spellfix1_row)(unsafe.Pointer(b)).FiScore 21193 } 21194 21195 type MatchQuery1 = struct { 21196 FpCur uintptr 21197 FpStmt uintptr 21198 FzHash [32]int8 21199 FzPattern uintptr 21200 FnPattern int32 21201 F__ccgo_pad1 [4]byte 21202 FpMatchStr3 uintptr 21203 FpConfig3 uintptr 21204 FpLang uintptr 21205 FiLang int32 21206 FiScope int32 21207 FiMaxDist int32 21208 Frc int32 21209 FnRun int32 21210 FazPrior [1][32]int8 21211 F__ccgo_pad2 [4]byte 21212 } 21213 21214 type MatchQuery = MatchQuery1 21215 21216 func spellfix1RunQuery(tls *libc.TLS, p uintptr, zQuery uintptr, nQuery int32) { 21217 bp := tls.Alloc(76) 21218 defer tls.Free(76) 21219 21220 var zK1 uintptr 21221 var zWord uintptr 21222 var iDist int32 21223 var iRank int32 21224 var iScore int32 21225 var iWorst int32 = 0 21226 var idx int32 21227 var idxWorst int32 = -1 21228 var i int32 21229 var iScope int32 = (*MatchQuery)(unsafe.Pointer(p)).FiScope 21230 var pCur uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpCur 21231 var pStmt uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpStmt 21232 21233 var zClass uintptr 21234 var nClass int32 21235 var rc int32 21236 21237 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) || (*MatchQuery)(unsafe.Pointer(p)).Frc != 0 { 21238 return 21239 } 21240 zClass = phoneticHash(tls, zQuery, nQuery) 21241 if zClass == uintptr(0) { 21242 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21243 return 21244 } 21245 nClass = int32(libc.Xstrlen(tls, zClass)) 21246 if nClass > SPELLFIX_MX_HASH-2 { 21247 nClass = SPELLFIX_MX_HASH - 2 21248 *(*int8)(unsafe.Pointer(zClass + uintptr(nClass))) = int8(0) 21249 } 21250 if nClass <= iScope { 21251 if nClass > 2 { 21252 iScope = nClass - 1 21253 } else { 21254 iScope = nClass 21255 } 21256 } 21257 libc.Xmemcpy(tls, bp+8, zClass, uint64(iScope)) 21258 sqlite3.Xsqlite3_free(tls, zClass) 21259 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(iScope))) = int8(0) 21260 libc.Xmemcpy(tls, bp+40, bp+8, uint64(iScope)) 21261 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope))) = int8('Z') 21262 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope+1))) = int8(0) 21263 21264 libc.Xmemcpy(tls, p+108+uintptr(libc.PostIncInt32(&(*MatchQuery)(unsafe.Pointer(p)).FnRun, 1))*32, bp+8, uint64(iScope+1)) 21265 if sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, bp+8, -1, uintptr(0)) == SQLITE_NOMEM || 21266 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, bp+40, -1, uintptr(0)) == SQLITE_NOMEM { 21267 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21268 return 21269 } 21270 for sqlite3.Xsqlite3_step(tls, pStmt) == SQLITE_ROW { 21271 *(*int32)(unsafe.Pointer(bp + 72)) = -1 21272 iRank = sqlite3.Xsqlite3_column_int(tls, pStmt, 2) 21273 if (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3 != 0 { 21274 var nWord int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, 1) 21275 zWord = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 21276 iDist = editDist3Core(tls, (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3, zWord, nWord, (*MatchQuery)(unsafe.Pointer(p)).FpLang, bp+72) 21277 } else { 21278 zK1 = sqlite3.Xsqlite3_column_text(tls, pStmt, 3) 21279 if zK1 == uintptr(0) { 21280 continue 21281 } 21282 iDist = editdist1(tls, (*MatchQuery)(unsafe.Pointer(p)).FzPattern, zK1, uintptr(0)) 21283 } 21284 if iDist < 0 { 21285 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21286 break 21287 } 21288 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch++ 21289 21290 if (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist >= 0 { 21291 if iDist > (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist { 21292 continue 21293 } 21294 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc && (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum&SPELLFIX_IDXNUM_TOP == 0 { 21295 spellfix1ResizeCursor(tls, pCur, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc*2+10) 21296 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) { 21297 break 21298 } 21299 } 21300 } 21301 21302 iScore = spellfix1Score(tls, iDist, iRank) 21303 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21304 idx = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 21305 } else if iScore < iWorst { 21306 idx = idxWorst 21307 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord) 21308 } else { 21309 continue 21310 } 21311 21312 (*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))) 21313 if (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord == uintptr(0) { 21314 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21315 break 21316 } 21317 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRowid = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 21318 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRank = iRank 21319 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiDistance = iDist 21320 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiScore = iScore 21321 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiMatchlen = *(*int32)(unsafe.Pointer(bp + 72)) 21322 libc.Xmemcpy(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64+32, bp+8, uint64(iScope+1)) 21323 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21324 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow++ 21325 } 21326 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow == (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21327 iWorst = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa)).FiScore 21328 idxWorst = 0 21329 for i = 1; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21330 iScore = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(i)*64)).FiScore 21331 if iWorst < iScore { 21332 iWorst = iScore 21333 idxWorst = i 21334 } 21335 } 21336 } 21337 } 21338 rc = sqlite3.Xsqlite3_reset(tls, pStmt) 21339 if rc != 0 { 21340 (*MatchQuery)(unsafe.Pointer(p)).Frc = rc 21341 } 21342 } 21343 21344 func spellfix1FilterForMatch(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 21345 bp := tls.Alloc(176) 21346 defer tls.Free(176) 21347 21348 var idxNum int32 21349 var zMatchThis uintptr 21350 var pMatchStr3 uintptr 21351 var zPattern uintptr 21352 var nPattern int32 21353 var iLimit int32 21354 var iScope int32 21355 var iLang int32 21356 var zSql uintptr 21357 21358 var rc int32 21359 var idx int32 21360 var p uintptr 21361 21362 idxNum = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 21363 pMatchStr3 = uintptr(0) 21364 iLimit = 20 21365 iScope = 3 21366 iLang = 0 21367 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 21368 idx = 1 21369 p = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 21370 21371 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable != uintptr(0) && (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 21372 goto __1 21373 } 21374 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 21375 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 21376 goto __2 21377 } 21378 return SQLITE_NOMEM 21379 __2: 21380 ; 21381 libc.Xmemset(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 21382 rc = editDist3ConfigLoad(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21383 if !(rc != 0) { 21384 goto __3 21385 } 21386 return rc 21387 __3: 21388 ; 21389 __1: 21390 ; 21391 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(MatchQuery{}))) 21392 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 3 21393 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = -1 21394 21395 if !(idxNum&2 != 0) { 21396 goto __4 21397 } 21398 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21399 __4: 21400 ; 21401 if !(idxNum&4 != 0) { 21402 goto __5 21403 } 21404 iLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21405 if !(iLimit < 1) { 21406 goto __6 21407 } 21408 iLimit = 1 21409 __6: 21410 ; 21411 __5: 21412 ; 21413 if !(idxNum&8 != 0) { 21414 goto __7 21415 } 21416 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21417 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope < 1) { 21418 goto __8 21419 } 21420 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 1 21421 __8: 21422 ; 21423 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope > SPELLFIX_MX_HASH-2) { 21424 goto __9 21425 } 21426 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = SPELLFIX_MX_HASH - 2 21427 __9: 21428 ; 21429 __7: 21430 ; 21431 if !(idxNum&(16|32) != 0) { 21432 goto __10 21433 } 21434 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 21435 if !(idxNum&16 != 0) { 21436 goto __11 21437 } 21438 (*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist-- 21439 __11: 21440 ; 21441 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist < 0) { 21442 goto __12 21443 } 21444 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = 0 21445 __12: 21446 ; 21447 __10: 21448 ; 21449 spellfix1ResetCursor(tls, pCur) 21450 spellfix1ResizeCursor(tls, pCur, iLimit) 21451 zMatchThis = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21452 if !(zMatchThis == uintptr(0)) { 21453 goto __13 21454 } 21455 return SQLITE_OK 21456 __13: 21457 ; 21458 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 != 0) { 21459 goto __14 21460 } 21461 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = editDist3FindLang(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, iLang) 21462 pMatchStr3 = editDist3FromStringNew(tls, (*MatchQuery)(unsafe.Pointer(bp+24)).FpLang, zMatchThis, -1) 21463 if !(pMatchStr3 == uintptr(0)) { 21464 goto __16 21465 } 21466 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21467 goto filter_exit 21468 __16: 21469 ; 21470 goto __15 21471 __14: 21472 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = uintptr(0) 21473 __15: 21474 ; 21475 zPattern = transliterate(tls, zMatchThis, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 21476 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21477 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern = zPattern 21478 if !(zPattern == uintptr(0)) { 21479 goto __17 21480 } 21481 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21482 goto filter_exit 21483 __17: 21484 ; 21485 nPattern = int32(libc.Xstrlen(tls, zPattern)) 21486 if !(int32(*(*int8)(unsafe.Pointer(zPattern + uintptr(nPattern-1)))) == '*') { 21487 goto __18 21488 } 21489 nPattern-- 21490 __18: 21491 ; 21492 zSql = sqlite3.Xsqlite3_mprintf(tls, 21493 ts+7650, 21494 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, iLang)) 21495 if !(zSql == uintptr(0)) { 21496 goto __19 21497 } 21498 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21499 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 21500 goto filter_exit 21501 __19: 21502 ; 21503 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, bp+168, uintptr(0)) 21504 sqlite3.Xsqlite3_free(tls, zSql) 21505 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang = iLang 21506 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpCur = pCur 21507 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpStmt = *(*uintptr)(unsafe.Pointer(bp + 168)) 21508 (*MatchQuery)(unsafe.Pointer(bp + 24)).FzPattern = zPattern 21509 (*MatchQuery)(unsafe.Pointer(bp + 24)).FnPattern = nPattern 21510 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpMatchStr3 = pMatchStr3 21511 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiLang = iLang 21512 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = rc 21513 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpConfig3 = (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 21514 if !((*MatchQuery)(unsafe.Pointer(bp+24)).Frc == SQLITE_OK) { 21515 goto __20 21516 } 21517 spellfix1RunQuery(tls, bp+24, zPattern, nPattern) 21518 __20: 21519 ; 21520 if !((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa != 0) { 21521 goto __21 21522 } 21523 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 { 21524 f func(*libc.TLS, uintptr, uintptr) int32 21525 }{spellfix1RowCompare}))) 21526 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop = iLimit 21527 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope = iScope 21528 goto __22 21529 __21: 21530 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21531 __22: 21532 ; 21533 filter_exit: 21534 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 21535 editDist3FromStringDelete(tls, pMatchStr3) 21536 return (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc 21537 } 21538 21539 func spellfix1FilterForFullScan(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 21540 bp := tls.Alloc(24) 21541 defer tls.Free(24) 21542 21543 var rc int32 = SQLITE_OK 21544 var idxNum int32 = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 21545 var zSql uintptr 21546 var pVTab uintptr = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 21547 spellfix1ResetCursor(tls, pCur) 21548 21549 zSql = sqlite3.Xsqlite3_mprintf(tls, 21550 ts+7750, 21551 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzTableName, 21552 func() uintptr { 21553 if idxNum&64 != 0 { 21554 return ts + 7809 21555 } 21556 return ts + 584 21557 }())) 21558 if zSql == uintptr(0) { 21559 return SQLITE_NOMEM 21560 } 21561 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).Fdb, zSql, -1, pCur+56, uintptr(0)) 21562 sqlite3.Xsqlite3_free(tls, zSql) 21563 if rc == SQLITE_OK && idxNum&64 != 0 { 21564 rc = sqlite3.Xsqlite3_bind_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 1, *(*uintptr)(unsafe.Pointer(argv))) 21565 } 21566 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = libc.AssignPtrInt32(pCur+36, 0) 21567 if rc == SQLITE_OK { 21568 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21569 if rc == SQLITE_ROW { 21570 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = -1 21571 rc = SQLITE_OK 21572 } 21573 if rc == SQLITE_DONE { 21574 rc = SQLITE_OK 21575 } 21576 } else { 21577 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 21578 } 21579 return rc 21580 } 21581 21582 func spellfix1Filter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 21583 var pCur uintptr = cur 21584 var rc int32 21585 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum = idxNum 21586 if idxNum&1 != 0 { 21587 rc = spellfix1FilterForMatch(tls, pCur, argc, argv) 21588 } else { 21589 rc = spellfix1FilterForFullScan(tls, pCur, argc, argv) 21590 } 21591 return rc 21592 } 21593 21594 func spellfix1Next(tls *libc.TLS, cur uintptr) int32 { 21595 var pCur uintptr = cur 21596 var rc int32 = SQLITE_OK 21597 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow { 21598 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21599 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21600 if rc != SQLITE_ROW { 21601 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 21602 } 21603 if rc == SQLITE_ROW || rc == SQLITE_DONE { 21604 rc = SQLITE_OK 21605 } 21606 } else { 21607 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow++ 21608 } 21609 } 21610 return rc 21611 } 21612 21613 func spellfix1Eof(tls *libc.TLS, cur uintptr) int32 { 21614 var pCur uintptr = cur 21615 return libc.Bool32((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow) 21616 } 21617 21618 func spellfix1Column(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 21619 bp := tls.Alloc(4) 21620 defer tls.Free(4) 21621 21622 var pCur uintptr = cur 21623 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21624 if i <= SPELLFIX_COL_LANGID { 21625 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, i)) 21626 } else { 21627 sqlite3.Xsqlite3_result_null(tls, ctx) 21628 } 21629 return SQLITE_OK 21630 } 21631 switch i { 21632 case SPELLFIX_COL_WORD: 21633 { 21634 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)) 21635 break 21636 21637 } 21638 case SPELLFIX_COL_RANK: 21639 { 21640 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) 21641 break 21642 21643 } 21644 case SPELLFIX_COL_DISTANCE: 21645 { 21646 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) 21647 break 21648 21649 } 21650 case SPELLFIX_COL_LANGID: 21651 { 21652 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang) 21653 break 21654 21655 } 21656 case SPELLFIX_COL_SCORE: 21657 { 21658 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) 21659 break 21660 21661 } 21662 case SPELLFIX_COL_MATCHLEN: 21663 { 21664 *(*int32)(unsafe.Pointer(bp)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiMatchlen 21665 if *(*int32)(unsafe.Pointer(bp)) < 0 { 21666 var nPattern int32 = int32(libc.Xstrlen(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern)) 21667 var zWord uintptr = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FzWord 21668 var nWord int32 = int32(libc.Xstrlen(tls, zWord)) 21669 21670 if nPattern > 0 && int32(*(*int8)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern + uintptr(nPattern-1)))) == '*' { 21671 var zTranslit uintptr 21672 var res int32 21673 zTranslit = transliterate(tls, zWord, nWord) 21674 if !(zTranslit != 0) { 21675 return SQLITE_NOMEM 21676 } 21677 res = editdist1(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern, zTranslit, bp) 21678 sqlite3.Xsqlite3_free(tls, zTranslit) 21679 if res < 0 { 21680 return SQLITE_NOMEM 21681 } 21682 *(*int32)(unsafe.Pointer(bp)) = translen_to_charlen(tls, zWord, nWord, *(*int32)(unsafe.Pointer(bp))) 21683 } else { 21684 *(*int32)(unsafe.Pointer(bp)) = utf8Charlen(tls, zWord, nWord) 21685 } 21686 } 21687 21688 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(bp))) 21689 break 21690 21691 } 21692 case SPELLFIX_COL_PHONEHASH: 21693 { 21694 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64+32, -1, uintptr(0)) 21695 break 21696 21697 } 21698 case SPELLFIX_COL_TOP: 21699 { 21700 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop) 21701 break 21702 21703 } 21704 case SPELLFIX_COL_SCOPE: 21705 { 21706 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope) 21707 break 21708 21709 } 21710 case SPELLFIX_COL_SRCHCNT: 21711 { 21712 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch) 21713 break 21714 21715 } 21716 default: 21717 { 21718 sqlite3.Xsqlite3_result_null(tls, ctx) 21719 break 21720 21721 } 21722 } 21723 return SQLITE_OK 21724 } 21725 21726 func spellfix1Rowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 21727 var pCur uintptr = cur 21728 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21729 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 4) 21730 } else { 21731 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiRowid 21732 } 21733 return SQLITE_OK 21734 } 21735 21736 func spellfix1GetConflict(tls *libc.TLS, db uintptr) uintptr { 21737 var eConflict int32 = sqlite3.Xsqlite3_vtab_on_conflict(tls, db) 21738 21739 return azConflict[eConflict-1] 21740 } 21741 21742 var azConflict = [5]uintptr{ 21743 ts + 7824, ts + 7833, ts + 7840, ts + 7840, ts + 7846, 21744 } 21745 21746 func spellfix1Update(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 21747 bp := tls.Alloc(284) 21748 defer tls.Free(284) 21749 21750 *(*int32)(unsafe.Pointer(bp + 280)) = SQLITE_OK 21751 var rowid sqlite3_int64 21752 var newRowid sqlite3_int64 21753 var p uintptr = pVTab 21754 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 21755 21756 if argc == 1 { 21757 rowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 21758 spellfix1DbExec(tls, bp+280, db, 21759 ts+7854, 21760 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, rowid)) 21761 } else { 21762 var zWord uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 21763 var nWord int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 21764 var iLang int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 21765 var iRank int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 21766 var zSoundslike uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 21767 var nSoundslike int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 21768 var zK1 uintptr 21769 var zK2 uintptr 21770 var i int32 21771 var c int8 21772 var zConflict uintptr = spellfix1GetConflict(tls, db) 21773 21774 if zWord == uintptr(0) { 21775 var zCmd uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 13*8))) 21776 if zCmd == uintptr(0) { 21777 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7897, 21778 libc.VaList(bp+24, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 21779 return SQLITE_CONSTRAINT | int32(5)<<8 21780 } 21781 if libc.Xstrcmp(tls, zCmd, ts+7933) == 0 { 21782 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 21783 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 21784 return SQLITE_OK 21785 } 21786 if libc.Xstrncmp(tls, zCmd, ts+7599, uint64(16)) == 0 { 21787 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 21788 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 21789 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21790 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = spellfix1Dequote(tls, zCmd+uintptr(16)) 21791 if (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable == uintptr(0) { 21792 return SQLITE_NOMEM 21793 } 21794 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 { 21795 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21796 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = uintptr(0) 21797 } 21798 return SQLITE_OK 21799 } 21800 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7944, 21801 libc.VaList(bp+32, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zCmd)) 21802 return SQLITE_ERROR 21803 } 21804 if iRank < 1 { 21805 iRank = 1 21806 } 21807 if zSoundslike != 0 { 21808 zK1 = transliterate(tls, zSoundslike, nSoundslike) 21809 } else { 21810 zK1 = transliterate(tls, zWord, nWord) 21811 } 21812 if zK1 == uintptr(0) { 21813 return SQLITE_NOMEM 21814 } 21815 for i = 0; int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zK1 + uintptr(i))))) != 0; i++ { 21816 if int32(c) >= 'A' && int32(c) <= 'Z' { 21817 *(*int8)(unsafe.Pointer(zK1 + uintptr(i))) += int8('a' - 'A') 21818 } 21819 } 21820 zK2 = phoneticHash(tls, zK1, i) 21821 if zK2 == uintptr(0) { 21822 sqlite3.Xsqlite3_free(tls, zK1) 21823 return SQLITE_NOMEM 21824 } 21825 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 21826 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_NULL { 21827 spellfix1DbExec(tls, bp+280, db, 21828 ts+7979, 21829 libc.VaList(bp+48, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 21830 iRank, iLang, zWord, zK1, zWord, zK2)) 21831 } else { 21832 newRowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 21833 spellfix1DbExec(tls, bp+280, db, 21834 ts+8065, 21835 libc.VaList(bp+112, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 21836 newRowid, iRank, iLang, zWord, zK1, zWord, zK2)) 21837 } 21838 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 21839 } else { 21840 rowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 21841 newRowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 21842 spellfix1DbExec(tls, bp+280, db, 21843 ts+8165, 21844 libc.VaList(bp+192, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, newRowid, iRank, iLang, 21845 zWord, zK1, zWord, zK2, rowid)) 21846 } 21847 sqlite3.Xsqlite3_free(tls, zK1) 21848 sqlite3.Xsqlite3_free(tls, zK2) 21849 } 21850 return *(*int32)(unsafe.Pointer(bp + 280)) 21851 } 21852 21853 func spellfix1Rename(tls *libc.TLS, pVTab uintptr, zNew uintptr) int32 { 21854 bp := tls.Alloc(36) 21855 defer tls.Free(36) 21856 21857 var p uintptr = pVTab 21858 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 21859 *(*int32)(unsafe.Pointer(bp + 32)) = SQLITE_OK 21860 var zNewName uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zNew)) 21861 if zNewName == uintptr(0) { 21862 return SQLITE_NOMEM 21863 } 21864 spellfix1DbExec(tls, bp+32, db, 21865 ts+8274, 21866 libc.VaList(bp+8, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zNewName)) 21867 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK { 21868 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 21869 (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName = zNewName 21870 } else { 21871 sqlite3.Xsqlite3_free(tls, zNewName) 21872 } 21873 return *(*int32)(unsafe.Pointer(bp + 32)) 21874 } 21875 21876 var spellfix1Module = sqlite3_module{ 21877 FxCreate: 0, 21878 FxConnect: 0, 21879 FxBestIndex: 0, 21880 FxDisconnect: 0, 21881 FxDestroy: 0, 21882 FxOpen: 0, 21883 FxClose: 0, 21884 FxFilter: 0, 21885 FxNext: 0, 21886 FxEof: 0, 21887 FxColumn: 0, 21888 FxRowid: 0, 21889 FxUpdate: 0, 21890 FxRename: 0, 21891 } 21892 21893 func spellfix1Register(tls *libc.TLS, db uintptr) int32 { 21894 var rc int32 = SQLITE_OK 21895 var i int32 21896 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8323, 1, 21897 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 21898 *(*uintptr)(unsafe.Pointer(&struct { 21899 f func(*libc.TLS, uintptr, int32, uintptr) 21900 }{transliterateSqlFunc})), uintptr(0), uintptr(0)) 21901 if rc == SQLITE_OK { 21902 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8342, 2, 21903 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 21904 *(*uintptr)(unsafe.Pointer(&struct { 21905 f func(*libc.TLS, uintptr, int32, uintptr) 21906 }{editdistSqlFunc})), uintptr(0), uintptr(0)) 21907 } 21908 if rc == SQLITE_OK { 21909 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8361, 1, 21910 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 21911 *(*uintptr)(unsafe.Pointer(&struct { 21912 f func(*libc.TLS, uintptr, int32, uintptr) 21913 }{phoneticHashSqlFunc})), uintptr(0), uintptr(0)) 21914 } 21915 if rc == SQLITE_OK { 21916 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8381, 1, 21917 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 21918 *(*uintptr)(unsafe.Pointer(&struct { 21919 f func(*libc.TLS, uintptr, int32, uintptr) 21920 }{scriptCodeSqlFunc})), uintptr(0), uintptr(0)) 21921 } 21922 if rc == SQLITE_OK { 21923 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8402, uintptr(unsafe.Pointer(&spellfix1Module)), uintptr(0)) 21924 } 21925 if rc == SQLITE_OK { 21926 rc = editDist3Install(tls, db) 21927 } 21928 21929 for i = 0; uint64(i) < uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{}))-uint64(1); i++ { 21930 } 21931 21932 return rc 21933 } 21934 21935 func sqlite3_spellfix_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 21936 _ = pApi 21937 21938 return spellfix1Register(tls, db) 21939 return SQLITE_OK 21940 } 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 0 != 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 1 != 0 { 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 Fsc_rdi int64 26828 Fsc_rsi int64 26829 Fsc_rdx int64 26830 Fsc_rcx int64 26831 Fsc_r8 int64 26832 Fsc_r9 int64 26833 Fsc_r10 int64 26834 Fsc_r11 int64 26835 Fsc_r12 int64 26836 Fsc_r13 int64 26837 Fsc_r14 int64 26838 Fsc_r15 int64 26839 Fsc_rbp int64 26840 Fsc_rbx int64 26841 Fsc_rax int64 26842 Fsc_gs int64 26843 Fsc_fs int64 26844 Fsc_es int64 26845 Fsc_ds int64 26846 Fsc_trapno int64 26847 Fsc_err int64 26848 Fsc_rip int64 26849 Fsc_cs int64 26850 Fsc_rflags int64 26851 Fsc_rsp int64 26852 Fsc_ss int64 26853 Fsc_fpstate uintptr 26854 F__sc_unused int32 26855 Fsc_mask int32 26856 Fsc_cookie int64 26857 } 26858 26859 type sigval = struct { 26860 F__ccgo_pad1 [0]uint64 26861 Fsival_int int32 26862 F__ccgo_pad2 [4]byte 26863 } 26864 26865 type siginfo_t = struct { 26866 Fsi_signo int32 26867 Fsi_code int32 26868 Fsi_errno int32 26869 F__ccgo_pad1 [4]byte 26870 F_data struct { 26871 F__ccgo_pad1 [0]uint64 26872 F_pad [29]int32 26873 F__ccgo_pad2 [4]byte 26874 } 26875 } 26876 26877 type sigaction = struct { 26878 F__sigaction_u struct{ F__sa_handler uintptr } 26879 Fsa_mask sigset_t 26880 Fsa_flags int32 26881 } 26882 26883 type sig_t = uintptr 26884 26885 type sigvec = struct { 26886 Fsv_handler uintptr 26887 Fsv_mask int32 26888 Fsv_flags int32 26889 } 26890 26891 type sigaltstack = struct { 26892 Fss_sp uintptr 26893 Fss_size size_t 26894 Fss_flags int32 26895 F__ccgo_pad1 [4]byte 26896 } 26897 26898 type stack_t = sigaltstack 26899 26900 type ucontext_t = sigcontext 26901 26902 type SqliteDb = struct { 26903 Fdb uintptr 26904 Finterp uintptr 26905 FzBusy uintptr 26906 FzCommit uintptr 26907 FzTrace uintptr 26908 FzTraceV2 uintptr 26909 FzProfile uintptr 26910 FzProgress uintptr 26911 FzBindFallback uintptr 26912 FzAuth uintptr 26913 FdisableAuth int32 26914 F__ccgo_pad1 [4]byte 26915 FzNull uintptr 26916 FpFunc uintptr 26917 FpUpdateHook uintptr 26918 FpPreUpdateHook uintptr 26919 FpRollbackHook uintptr 26920 FpWalHook uintptr 26921 FpUnlockNotify uintptr 26922 FpCollate uintptr 26923 Frc int32 26924 F__ccgo_pad2 [4]byte 26925 FpCollateNeeded uintptr 26926 FstmtList uintptr 26927 FstmtLast uintptr 26928 FmaxStmt int32 26929 FnStmt int32 26930 FpIncrblob uintptr 26931 FnStep int32 26932 FnSort int32 26933 FnIndex int32 26934 FnVMStep int32 26935 FnTransaction int32 26936 FopenFlags int32 26937 FnRef int32 26938 FbLegacyPrepare int32 26939 } 26940 26941 type SqlFunc1 = struct { 26942 Finterp uintptr 26943 FpScript uintptr 26944 FpDb uintptr 26945 FuseEvalObjv int32 26946 FeType int32 26947 FzName uintptr 26948 FpNext uintptr 26949 } 26950 26951 type SqlFunc = SqlFunc1 26952 26953 type SqlCollate1 = struct { 26954 Finterp uintptr 26955 FzScript uintptr 26956 FpNext uintptr 26957 } 26958 26959 type SqlCollate = SqlCollate1 26960 26961 type SqlPreparedStmt1 = struct { 26962 FpNext uintptr 26963 FpPrev uintptr 26964 FpStmt uintptr 26965 FnSql int32 26966 F__ccgo_pad1 [4]byte 26967 FzSql uintptr 26968 FnParm int32 26969 F__ccgo_pad2 [4]byte 26970 FapParm uintptr 26971 } 26972 26973 type SqlPreparedStmt = SqlPreparedStmt1 26974 26975 type IncrblobChannel1 = struct { 26976 FpBlob uintptr 26977 FpDb uintptr 26978 FiSeek int32 26979 F__ccgo_pad1 [4]byte 26980 Fchannel Tcl_Channel 26981 FpNext uintptr 26982 FpPrev uintptr 26983 } 26984 26985 type IncrblobChannel = IncrblobChannel1 26986 26987 func strlen30(tls *libc.TLS, z uintptr) int32 { 26988 var z2 uintptr = z 26989 for *(*int8)(unsafe.Pointer(z2)) != 0 { 26990 z2++ 26991 } 26992 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 26993 } 26994 26995 func closeIncrblobChannels(tls *libc.TLS, pDb uintptr) { 26996 var p uintptr 26997 var pNext uintptr 26998 26999 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob; p != 0; p = pNext { 27000 pNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27001 27002 tcl.XTcl_UnregisterChannel(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27003 } 27004 } 27005 27006 func incrblobClose(tls *libc.TLS, instanceData ClientData, interp uintptr) int32 { 27007 var p uintptr = instanceData 27008 var rc int32 = sqlite3.Xsqlite3_blob_close(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27009 var db uintptr = (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).Fdb 27010 27011 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27012 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev 27013 } 27014 if (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev != 0 { 27015 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpPrev)).FpNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27016 } 27017 if (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob == p { 27018 (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27019 } 27020 27021 tcl.XTcl_Free(tls, p) 27022 27023 if rc != SQLITE_OK { 27024 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(1)) 27025 return TCL_ERROR 27026 } 27027 return TCL_OK 27028 } 27029 27030 func incrblobInput(tls *libc.TLS, instanceData ClientData, buf uintptr, bufSize int32, errorCodePtr uintptr) int32 { 27031 var p uintptr = instanceData 27032 var nRead int32 = bufSize 27033 var nBlob int32 27034 var rc int32 27035 27036 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27037 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nRead > nBlob { 27038 nRead = nBlob - (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27039 } 27040 if nRead <= 0 { 27041 return 0 27042 } 27043 27044 rc = sqlite3.Xsqlite3_blob_read(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nRead, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27045 if rc != SQLITE_OK { 27046 *(*int32)(unsafe.Pointer(errorCodePtr)) = rc 27047 return -1 27048 } 27049 27050 *(*int32)(unsafe.Pointer(p + 16)) += nRead 27051 return nRead 27052 } 27053 27054 func incrblobOutput(tls *libc.TLS, instanceData ClientData, buf uintptr, toWrite int32, errorCodePtr uintptr) int32 { 27055 var p uintptr = instanceData 27056 var nWrite int32 = toWrite 27057 var nBlob int32 27058 var rc int32 27059 27060 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27061 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nWrite > nBlob { 27062 *(*int32)(unsafe.Pointer(errorCodePtr)) = EINVAL 27063 return -1 27064 } 27065 if nWrite <= 0 { 27066 return 0 27067 } 27068 27069 rc = sqlite3.Xsqlite3_blob_write(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nWrite, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27070 if rc != SQLITE_OK { 27071 *(*int32)(unsafe.Pointer(errorCodePtr)) = EIO 27072 return -1 27073 } 27074 27075 *(*int32)(unsafe.Pointer(p + 16)) += nWrite 27076 return nWrite 27077 } 27078 27079 func incrblobSeek(tls *libc.TLS, instanceData ClientData, offset int64, seekMode int32, errorCodePtr uintptr) int32 { 27080 var p uintptr = instanceData 27081 27082 switch seekMode { 27083 case SEEK_SET: 27084 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(offset) 27085 break 27086 case SEEK_CUR: 27087 *(*int32)(unsafe.Pointer(p + 16)) += int32(offset) 27088 break 27089 case SEEK_END: 27090 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(int64(sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob)) + offset) 27091 break 27092 27093 default: 27094 } 27095 27096 return (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27097 } 27098 27099 func incrblobWatch(tls *libc.TLS, instanceData ClientData, mode int32) { 27100 } 27101 27102 func incrblobHandle(tls *libc.TLS, instanceData ClientData, dir int32, hPtr uintptr) int32 { 27103 return TCL_ERROR 27104 } 27105 27106 var IncrblobChannelType = Tcl_ChannelType{ 27107 FtypeName: ts + 10868, 27108 Fversion: uintptr(0x2), 27109 FcloseProc: 0, 27110 FinputProc: 0, 27111 FoutputProc: 0, 27112 FseekProc: 0, 27113 FwatchProc: 0, 27114 FgetHandleProc: 0, 27115 } 27116 27117 func createIncrblobChannel(tls *libc.TLS, interp uintptr, pDb uintptr, zDb uintptr, zTable uintptr, zColumn uintptr, iRow sqlite_int64, isReadonly int32) int32 { 27118 bp := tls.Alloc(80) 27119 defer tls.Free(80) 27120 27121 var p uintptr 27122 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 27123 27124 var rc int32 27125 var flags int32 = int32(1)<<1 | func() int32 { 27126 if isReadonly != 0 { 27127 return 0 27128 } 27129 return int32(1) << 2 27130 }() 27131 27132 rc = sqlite3.Xsqlite3_blob_open(tls, db, zDb, zTable, zColumn, iRow, libc.BoolInt32(!(isReadonly != 0)), bp+8) 27133 if rc != SQLITE_OK { 27134 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 27135 return TCL_ERROR 27136 } 27137 27138 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(IncrblobChannel{}))) 27139 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = 0 27140 (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob = *(*uintptr)(unsafe.Pointer(bp + 8)) 27141 27142 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+10877, libc.VaList(bp, libc.PreIncInt32(&count, 1))) 27143 (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel = tcl.XTcl_CreateChannel(tls, uintptr(unsafe.Pointer(&IncrblobChannelType)), bp+16, p, flags) 27144 tcl.XTcl_RegisterChannel(tls, interp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27145 27146 (*IncrblobChannel)(unsafe.Pointer(p)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob 27147 (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev = uintptr(0) 27148 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27149 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = p 27150 } 27151 (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob = p 27152 (*IncrblobChannel)(unsafe.Pointer(p)).FpDb = pDb 27153 27154 tcl.XTcl_SetResult(tls, interp, tcl.XTcl_GetChannelName(tls, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel), uintptr(1)) 27155 return TCL_OK 27156 } 27157 27158 var count int32 = 0 27159 27160 func safeToUseEvalObjv(tls *libc.TLS, interp uintptr, pCmd uintptr) int32 { 27161 bp := tls.Alloc(4) 27162 defer tls.Free(4) 27163 27164 var z uintptr 27165 27166 z = tcl.XTcl_GetStringFromObj(tls, pCmd, bp) 27167 for libc.PostDecInt32(&*(*int32)(unsafe.Pointer(bp)), 1) > 0 { 27168 var c int32 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 27169 if c == '$' || c == '[' || c == ';' { 27170 return 0 27171 } 27172 } 27173 return 1 27174 } 27175 27176 func findSqlFunc(tls *libc.TLS, pDb uintptr, zName uintptr) uintptr { 27177 var p uintptr 27178 var pNew uintptr 27179 var nName int32 = strlen30(tls, zName) 27180 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlFunc{}))+uint64(nName)+uint64(1))) 27181 (*SqlFunc)(unsafe.Pointer(pNew)).FzName = pNew + 1*48 27182 libc.Xmemcpy(tls, (*SqlFunc)(unsafe.Pointer(pNew)).FzName, zName, uint64(nName+1)) 27183 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc; p != 0; p = (*SqlFunc)(unsafe.Pointer(p)).FpNext { 27184 if sqlite3.Xsqlite3_stricmp(tls, (*SqlFunc)(unsafe.Pointer(p)).FzName, (*SqlFunc)(unsafe.Pointer(pNew)).FzName) == 0 { 27185 tcl.XTcl_Free(tls, pNew) 27186 return p 27187 } 27188 } 27189 (*SqlFunc)(unsafe.Pointer(pNew)).Finterp = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 27190 (*SqlFunc)(unsafe.Pointer(pNew)).FpDb = pDb 27191 (*SqlFunc)(unsafe.Pointer(pNew)).FpScript = uintptr(0) 27192 (*SqlFunc)(unsafe.Pointer(pNew)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27193 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = pNew 27194 return pNew 27195 } 27196 27197 func dbFreeStmt(tls *libc.TLS, pStmt uintptr) { 27198 if sqlite3.Xsqlite3_sql(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) == uintptr(0) { 27199 tcl.XTcl_Free(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FzSql) 27200 } 27201 sqlite3.Xsqlite3_finalize(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) 27202 tcl.XTcl_Free(tls, pStmt) 27203 } 27204 27205 func flushStmtCache(tls *libc.TLS, pDb uintptr) { 27206 var pPreStmt uintptr 27207 var pNext uintptr 27208 27209 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = pNext { 27210 pNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 27211 dbFreeStmt(tls, pPreStmt) 27212 } 27213 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt = 0 27214 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = uintptr(0) 27215 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = uintptr(0) 27216 } 27217 27218 func addDatabaseRef(tls *libc.TLS, pDb uintptr) { 27219 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef++ 27220 } 27221 27222 func delDatabaseRef(tls *libc.TLS, pDb uintptr) { 27223 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef-- 27224 if (*SqliteDb)(unsafe.Pointer(pDb)).FnRef == 0 { 27225 flushStmtCache(tls, pDb) 27226 closeIncrblobChannels(tls, pDb) 27227 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 27228 for (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc != 0 { 27229 var pFunc uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27230 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = (*SqlFunc)(unsafe.Pointer(pFunc)).FpNext 27231 27232 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27233 var _objPtr uintptr = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 27234 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27235 tcl.XTclFreeObj(tls, _objPtr) 27236 } 27237 } 27238 tcl.XTcl_Free(tls, pFunc) 27239 } 27240 for (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate != 0 { 27241 var pCollate uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 27242 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext 27243 tcl.XTcl_Free(tls, pCollate) 27244 } 27245 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0 { 27246 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 27247 } 27248 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0 { 27249 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 27250 } 27251 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0 { 27252 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 27253 } 27254 if (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0 { 27255 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 27256 } 27257 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0 { 27258 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 27259 } 27260 if (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0 { 27261 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 27262 } 27263 if (*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0 { 27264 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 27265 } 27266 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 27267 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27268 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook 27269 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27270 tcl.XTclFreeObj(tls, _objPtr) 27271 } 27272 } 27273 } 27274 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 27275 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27276 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook 27277 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27278 tcl.XTclFreeObj(tls, _objPtr) 27279 } 27280 } 27281 } 27282 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 27283 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 27284 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook 27285 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27286 tcl.XTclFreeObj(tls, _objPtr) 27287 } 27288 } 27289 } 27290 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 27291 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 27292 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook 27293 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27294 tcl.XTclFreeObj(tls, _objPtr) 27295 } 27296 } 27297 } 27298 if (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0 { 27299 for __ccgo5 := true; __ccgo5; __ccgo5 = 0 != 0 { 27300 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 27301 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27302 tcl.XTclFreeObj(tls, _objPtr) 27303 } 27304 } 27305 } 27306 tcl.XTcl_Free(tls, pDb) 27307 } 27308 } 27309 27310 func DbDeleteCmd(tls *libc.TLS, db uintptr) { 27311 var pDb uintptr = db 27312 delDatabaseRef(tls, pDb) 27313 } 27314 27315 func DbBusyHandler(tls *libc.TLS, cd uintptr, nTries int32) int32 { 27316 bp := tls.Alloc(70) 27317 defer tls.Free(70) 27318 27319 var pDb uintptr = cd 27320 var rc int32 27321 27322 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+40, ts+1333, libc.VaList(bp, nTries)) 27323 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))) 27324 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27325 return 0 27326 } 27327 return 1 27328 } 27329 27330 func DbProgressHandler(tls *libc.TLS, cd uintptr) int32 { 27331 var pDb uintptr = cd 27332 var rc int32 27333 27334 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 27335 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27336 return 1 27337 } 27338 return 0 27339 } 27340 27341 func DbTraceHandler(tls *libc.TLS, cd uintptr, zSql uintptr) { 27342 bp := tls.Alloc(216) 27343 defer tls.Free(216) 27344 27345 var pDb uintptr = cd 27346 27347 tcl.XTcl_DStringInit(tls, bp) 27348 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, -1) 27349 tcl.XTcl_DStringAppendElement(tls, bp, zSql) 27350 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 27351 tcl.XTcl_DStringFree(tls, bp) 27352 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27353 } 27354 27355 func DbTraceV2Handler(tls *libc.TLS, type1 uint32, cd uintptr, pd uintptr, xd uintptr) int32 { 27356 var pDb uintptr = cd 27357 var pCmd uintptr 27358 27359 switch type1 { 27360 case uint32(SQLITE_TRACE_STMT): 27361 { 27362 var pStmt uintptr = pd 27363 var zSql uintptr = 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_NewStringObj(tls, zSql, -1)) 27371 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27372 for __ccgo := true; __ccgo; __ccgo = 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_PROFILE): 27383 { 27384 var pStmt uintptr = pd 27385 var ns sqlite3_int64 = *(*sqlite3_int64)(unsafe.Pointer(xd)) 27386 27387 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27388 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27389 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27390 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27391 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27392 tcl.XTcl_NewWideIntObj(tls, ns)) 27393 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27394 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27395 var _objPtr uintptr = pCmd 27396 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27397 tcl.XTclFreeObj(tls, _objPtr) 27398 } 27399 } 27400 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27401 break 27402 27403 } 27404 case uint32(SQLITE_TRACE_ROW): 27405 { 27406 var pStmt uintptr = pd 27407 27408 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27409 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27410 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27411 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27412 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27413 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27414 var _objPtr uintptr = pCmd 27415 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27416 tcl.XTclFreeObj(tls, _objPtr) 27417 } 27418 } 27419 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27420 break 27421 27422 } 27423 case uint32(SQLITE_TRACE_CLOSE): 27424 { 27425 var db uintptr = pd 27426 27427 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27428 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27429 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27430 tcl.XTcl_NewWideIntObj(tls, int64(db))) 27431 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27432 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 27433 var _objPtr uintptr = pCmd 27434 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27435 tcl.XTclFreeObj(tls, _objPtr) 27436 } 27437 } 27438 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27439 break 27440 27441 } 27442 } 27443 return SQLITE_OK 27444 } 27445 27446 func DbProfileHandler(tls *libc.TLS, cd uintptr, zSql uintptr, tm1 sqlite_uint64) { 27447 bp := tls.Alloc(328) 27448 defer tls.Free(328) 27449 27450 var pDb uintptr = cd 27451 27452 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([100]int8{}))-uint64(1)), bp+8, ts+6325, libc.VaList(bp, tm1)) 27453 tcl.XTcl_DStringInit(tls, bp+112) 27454 tcl.XTcl_DStringAppend(tls, bp+112, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, -1) 27455 tcl.XTcl_DStringAppendElement(tls, bp+112, zSql) 27456 tcl.XTcl_DStringAppendElement(tls, bp+112, bp+8) 27457 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+112)).Fstring) 27458 tcl.XTcl_DStringFree(tls, bp+112) 27459 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27460 } 27461 27462 func DbCommitHandler(tls *libc.TLS, cd uintptr) int32 { 27463 var pDb uintptr = cd 27464 var rc int32 27465 27466 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 27467 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27468 return 1 27469 } 27470 return 0 27471 } 27472 27473 func DbRollbackHandler(tls *libc.TLS, clientData uintptr) { 27474 var pDb uintptr = clientData 27475 27476 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook, 0) { 27477 tcl.XTcl_BackgroundError(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27478 } 27479 } 27480 27481 func DbWalHandler(tls *libc.TLS, clientData uintptr, db uintptr, zDb uintptr, nEntry int32) int32 { 27482 bp := tls.Alloc(4) 27483 defer tls.Free(4) 27484 27485 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 27486 var p uintptr 27487 var pDb uintptr = clientData 27488 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 27489 27490 p = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook) 27491 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 27492 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewStringObj(tls, zDb, -1)) 27493 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewIntObj(tls, nEntry)) 27494 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, p, 0) || 27495 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 27496 tcl.XTcl_BackgroundError(tls, interp) 27497 } 27498 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27499 var _objPtr uintptr = p 27500 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27501 tcl.XTclFreeObj(tls, _objPtr) 27502 } 27503 } 27504 27505 return *(*int32)(unsafe.Pointer(bp)) 27506 } 27507 27508 func setTestUnlockNotifyVars(tls *libc.TLS, interp uintptr, iArg int32, nArg int32) { 27509 bp := tls.Alloc(80) 27510 defer tls.Free(80) 27511 27512 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp, iArg)) 27513 tcl.XTcl_SetVar2(tls, interp, ts+10889, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 27514 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp+8, nArg)) 27515 tcl.XTcl_SetVar2(tls, interp, ts+10914, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 27516 } 27517 27518 func DbUnlockNotify(tls *libc.TLS, apArg uintptr, nArg int32) { 27519 var i int32 27520 for i = 0; i < nArg; i++ { 27521 var flags int32 = TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT 27522 var pDb uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 27523 setTestUnlockNotifyVars(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, i, nArg) 27524 27525 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify, flags) 27526 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27527 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 27528 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27529 tcl.XTclFreeObj(tls, _objPtr) 27530 } 27531 } 27532 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 27533 } 27534 } 27535 27536 func DbPreUpdateHandler(tls *libc.TLS, p uintptr, db uintptr, op int32, zDb uintptr, zTbl uintptr, iKey1 sqlite_int64, iKey2 sqlite_int64) { 27537 var pDb uintptr = p 27538 var pCmd uintptr 27539 27540 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook) 27541 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27542 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr[(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, iKey1)) 27546 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey2)) 27547 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27548 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27549 var _objPtr uintptr = pCmd 27550 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27551 tcl.XTclFreeObj(tls, _objPtr) 27552 } 27553 } 27554 } 27555 27556 var azStr = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 27557 27558 func DbUpdateHandler(tls *libc.TLS, p uintptr, op int32, zDb uintptr, zTbl uintptr, rowid sqlite_int64) { 27559 var pDb uintptr = p 27560 var pCmd uintptr 27561 27562 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook) 27563 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27564 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr1[(op-1)/9], -1)) 27565 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 27566 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 27567 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, rowid)) 27568 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27569 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27570 var _objPtr uintptr = pCmd 27571 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27572 tcl.XTclFreeObj(tls, _objPtr) 27573 } 27574 } 27575 } 27576 27577 var azStr1 = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 27578 27579 func tclCollateNeeded(tls *libc.TLS, pCtx uintptr, db uintptr, enc int32, zName uintptr) { 27580 var pDb uintptr = pCtx 27581 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 27582 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 27583 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 27584 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pScript, 0) 27585 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27586 var _objPtr uintptr = pScript 27587 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27588 tcl.XTclFreeObj(tls, _objPtr) 27589 } 27590 } 27591 } 27592 27593 func tclSqlCollate(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 27594 var p uintptr = pCtx 27595 var pCmd uintptr 27596 27597 pCmd = tcl.XTcl_NewStringObj(tls, (*SqlCollate)(unsafe.Pointer(p)).FzScript, -1) 27598 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27599 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zA, nA)) 27600 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zB, nB)) 27601 tcl.XTcl_EvalObjEx(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 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 return libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp)) 27609 } 27610 27611 func tclSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 27612 bp := tls.Alloc(40) 27613 defer tls.Free(40) 27614 27615 var p uintptr = sqlite3.Xsqlite3_user_data(tls, context) 27616 var pCmd uintptr 27617 var i int32 27618 var rc int32 27619 27620 if argc == 0 { 27621 pCmd = (*SqlFunc)(unsafe.Pointer(p)).FpScript 27622 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27623 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, 0) 27624 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27625 var _objPtr uintptr = pCmd 27626 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27627 tcl.XTclFreeObj(tls, _objPtr) 27628 } 27629 } 27630 } else { 27631 if tcl.XTcl_ListObjGetElements(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, (*SqlFunc)(unsafe.Pointer(p)).FpScript, bp, bp+8) != 0 { 27632 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 27633 return 27634 } 27635 pCmd = tcl.XTcl_NewListObj(tls, *(*int32)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 27636 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27637 for i = 0; i < argc; i++ { 27638 var pIn uintptr = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 27639 var pVal uintptr 27640 27641 switch sqlite3.Xsqlite3_value_type(tls, pIn) { 27642 case SQLITE_BLOB: 27643 { 27644 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 27645 pVal = tcl.XTcl_NewByteArrayObj(tls, sqlite3.Xsqlite3_value_blob(tls, pIn), bytes) 27646 break 27647 27648 } 27649 fallthrough 27650 case SQLITE_INTEGER: 27651 { 27652 var v sqlite_int64 = sqlite3.Xsqlite3_value_int64(tls, pIn) 27653 if v >= int64(-2147483647) && v <= int64(2147483647) { 27654 pVal = tcl.XTcl_NewIntObj(tls, int32(v)) 27655 } else { 27656 pVal = tcl.XTcl_NewWideIntObj(tls, v) 27657 } 27658 break 27659 27660 } 27661 fallthrough 27662 case SQLITE_FLOAT: 27663 { 27664 var r float64 = sqlite3.Xsqlite3_value_double(tls, pIn) 27665 pVal = tcl.XTcl_NewDoubleObj(tls, r) 27666 break 27667 27668 } 27669 fallthrough 27670 case SQLITE_NULL: 27671 { 27672 pVal = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 27673 break 27674 27675 } 27676 fallthrough 27677 default: 27678 { 27679 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 27680 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pIn), bytes) 27681 break 27682 27683 } 27684 } 27685 rc = tcl.XTcl_ListObjAppendElement(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, pVal) 27686 if rc != 0 { 27687 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27688 var _objPtr uintptr = pCmd 27689 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27690 tcl.XTclFreeObj(tls, _objPtr) 27691 } 27692 } 27693 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 27694 return 27695 } 27696 } 27697 if !((*SqlFunc)(unsafe.Pointer(p)).FuseEvalObjv != 0) { 27698 tcl.XTcl_GetString(tls, pCmd) 27699 } 27700 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 27701 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27702 var _objPtr uintptr = pCmd 27703 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27704 tcl.XTclFreeObj(tls, _objPtr) 27705 } 27706 } 27707 } 27708 27709 if rc != 0 && rc != TCL_RETURN { 27710 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 27711 } else { 27712 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp) 27713 27714 var data uintptr 27715 var zType uintptr = func() uintptr { 27716 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 27717 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 27718 } 27719 return ts + 584 27720 }() 27721 var c int8 = *(*int8)(unsafe.Pointer(zType)) 27722 var eType int32 = (*SqlFunc)(unsafe.Pointer(p)).FeType 27723 27724 if eType == SQLITE_NULL { 27725 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 27726 eType = SQLITE_BLOB 27727 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 || 27728 int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || 27729 int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 27730 eType = SQLITE_INTEGER 27731 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 27732 eType = SQLITE_FLOAT 27733 } else { 27734 eType = SQLITE_TEXT 27735 } 27736 } 27737 27738 switch eType { 27739 case SQLITE_BLOB: 27740 { 27741 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+16) 27742 sqlite3.Xsqlite3_result_blob(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 27743 break 27744 27745 } 27746 fallthrough 27747 case SQLITE_INTEGER: 27748 { 27749 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+24) { 27750 sqlite3.Xsqlite3_result_int64(tls, context, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 27751 break 27752 } 27753 27754 } 27755 fallthrough 27756 case SQLITE_FLOAT: 27757 { 27758 if TCL_OK == tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+32) { 27759 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 32))) 27760 break 27761 } 27762 27763 } 27764 fallthrough 27765 default: 27766 { 27767 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+16) 27768 sqlite3.Xsqlite3_result_text(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 27769 break 27770 27771 } 27772 } 27773 27774 } 27775 } 27776 27777 func auth_callback(tls *libc.TLS, pArg uintptr, code int32, zArg1 uintptr, zArg2 uintptr, zArg3 uintptr, zArg4 uintptr) int32 { 27778 bp := tls.Alloc(216) 27779 defer tls.Free(216) 27780 27781 var zCode uintptr 27782 27783 var rc int32 27784 var zReply uintptr 27785 27786 var pDb uintptr = pArg 27787 if (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth != 0 { 27788 return SQLITE_OK 27789 } 27790 27791 switch code { 27792 case SQLITE_COPY: 27793 zCode = ts + 10944 27794 break 27795 case SQLITE_CREATE_INDEX: 27796 zCode = ts + 10956 27797 break 27798 case SQLITE_CREATE_TABLE: 27799 zCode = ts + 10976 27800 break 27801 case SQLITE_CREATE_TEMP_INDEX: 27802 zCode = ts + 10996 27803 break 27804 case SQLITE_CREATE_TEMP_TABLE: 27805 zCode = ts + 11021 27806 break 27807 case SQLITE_CREATE_TEMP_TRIGGER: 27808 zCode = ts + 11046 27809 break 27810 case SQLITE_CREATE_TEMP_VIEW: 27811 zCode = ts + 11073 27812 break 27813 case SQLITE_CREATE_TRIGGER: 27814 zCode = ts + 11097 27815 break 27816 case SQLITE_CREATE_VIEW: 27817 zCode = ts + 11119 27818 break 27819 case SQLITE_DELETE: 27820 zCode = ts + 11138 27821 break 27822 case SQLITE_DROP_INDEX: 27823 zCode = ts + 11152 27824 break 27825 case SQLITE_DROP_TABLE: 27826 zCode = ts + 11170 27827 break 27828 case SQLITE_DROP_TEMP_INDEX: 27829 zCode = ts + 11188 27830 break 27831 case SQLITE_DROP_TEMP_TABLE: 27832 zCode = ts + 11211 27833 break 27834 case SQLITE_DROP_TEMP_TRIGGER: 27835 zCode = ts + 11234 27836 break 27837 case SQLITE_DROP_TEMP_VIEW: 27838 zCode = ts + 11259 27839 break 27840 case SQLITE_DROP_TRIGGER: 27841 zCode = ts + 11281 27842 break 27843 case SQLITE_DROP_VIEW: 27844 zCode = ts + 11301 27845 break 27846 case SQLITE_INSERT: 27847 zCode = ts + 11318 27848 break 27849 case SQLITE_PRAGMA: 27850 zCode = ts + 11332 27851 break 27852 case SQLITE_READ: 27853 zCode = ts + 11346 27854 break 27855 case SQLITE_SELECT: 27856 zCode = ts + 11358 27857 break 27858 case SQLITE_TRANSACTION: 27859 zCode = ts + 11372 27860 break 27861 case SQLITE_UPDATE: 27862 zCode = ts + 11391 27863 break 27864 case SQLITE_ATTACH: 27865 zCode = ts + 11405 27866 break 27867 case SQLITE_DETACH: 27868 zCode = ts + 11419 27869 break 27870 case SQLITE_ALTER_TABLE: 27871 zCode = ts + 11433 27872 break 27873 case SQLITE_REINDEX: 27874 zCode = ts + 11452 27875 break 27876 case SQLITE_ANALYZE: 27877 zCode = ts + 11467 27878 break 27879 case SQLITE_CREATE_VTABLE: 27880 zCode = ts + 11482 27881 break 27882 case SQLITE_DROP_VTABLE: 27883 zCode = ts + 11503 27884 break 27885 case SQLITE_FUNCTION: 27886 zCode = ts + 11522 27887 break 27888 case SQLITE_SAVEPOINT: 27889 zCode = ts + 11538 27890 break 27891 case SQLITE_RECURSIVE: 27892 zCode = ts + 11555 27893 break 27894 default: 27895 zCode = ts + 11572 27896 break 27897 } 27898 tcl.XTcl_DStringInit(tls, bp) 27899 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, -1) 27900 tcl.XTcl_DStringAppendElement(tls, bp, zCode) 27901 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 27902 if zArg1 != 0 { 27903 return zArg1 27904 } 27905 return ts + 584 27906 }()) 27907 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 27908 if zArg2 != 0 { 27909 return zArg2 27910 } 27911 return ts + 584 27912 }()) 27913 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 27914 if zArg3 != 0 { 27915 return zArg3 27916 } 27917 return ts + 584 27918 }()) 27919 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 27920 if zArg4 != 0 { 27921 return zArg4 27922 } 27923 return ts + 584 27924 }()) 27925 rc = tcl.XTcl_GlobalEval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 27926 tcl.XTcl_DStringFree(tls, bp) 27927 if rc == TCL_OK { 27928 zReply = tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27929 } else { 27930 zReply = ts + 11577 27931 } 27932 if libc.Xstrcmp(tls, zReply, ts+2127) == 0 { 27933 rc = SQLITE_OK 27934 } else if libc.Xstrcmp(tls, zReply, ts+11577) == 0 { 27935 rc = SQLITE_DENY 27936 } else if libc.Xstrcmp(tls, zReply, ts+11589) == 0 { 27937 rc = SQLITE_IGNORE 27938 } else { 27939 rc = 999 27940 } 27941 return rc 27942 } 27943 27944 func local_getline(tls *libc.TLS, zPrompt uintptr, in uintptr) uintptr { 27945 var zLine uintptr 27946 var nLine int32 27947 var n int32 27948 27949 nLine = 100 27950 zLine = libc.Xmalloc(tls, uint64(nLine)) 27951 if zLine == uintptr(0) { 27952 return uintptr(0) 27953 } 27954 n = 0 27955 for 1 != 0 { 27956 if n+100 > nLine { 27957 nLine = nLine*2 + 100 27958 zLine = libc.Xrealloc(tls, zLine, uint64(nLine)) 27959 if zLine == uintptr(0) { 27960 return uintptr(0) 27961 } 27962 } 27963 if libc.Xfgets(tls, zLine+uintptr(n), nLine-n, in) == uintptr(0) { 27964 if n == 0 { 27965 libc.Xfree(tls, zLine) 27966 return uintptr(0) 27967 } 27968 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 27969 break 27970 } 27971 for *(*int8)(unsafe.Pointer(zLine + uintptr(n))) != 0 { 27972 n++ 27973 } 27974 if n > 0 && int32(*(*int8)(unsafe.Pointer(zLine + uintptr(n-1)))) == '\n' { 27975 n-- 27976 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 27977 break 27978 } 27979 } 27980 zLine = libc.Xrealloc(tls, zLine, uint64(n+1)) 27981 return zLine 27982 } 27983 27984 func DbTransPostCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 27985 bp := tls.Alloc(16) 27986 defer tls.Free(16) 27987 27988 var pDb uintptr = *(*ClientData)(unsafe.Pointer(data)) 27989 var rc int32 = result 27990 var zEnd uintptr 27991 27992 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction-- 27993 zEnd = azEnd[libc.Bool32(rc == TCL_ERROR)*2+libc.Bool32((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0)] 27994 27995 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 27996 if sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zEnd, uintptr(0), uintptr(0), uintptr(0)) != 0 { 27997 if rc != TCL_ERROR { 27998 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 27999 rc = TCL_ERROR 28000 } 28001 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+7824, uintptr(0), uintptr(0), uintptr(0)) 28002 } 28003 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 28004 28005 delDatabaseRef(tls, pDb) 28006 return rc 28007 } 28008 28009 var azEnd = [4]uintptr{ 28010 ts + 11603, 28011 ts + 11628, 28012 ts + 11635, 28013 ts + 7824, 28014 } 28015 28016 func dbPrepare(tls *libc.TLS, pDb uintptr, zSql uintptr, ppStmt uintptr, pzOut uintptr) int32 { 28017 var prepFlags uint32 = uint32(0) 28018 if (*SqliteDb)(unsafe.Pointer(pDb)).FbLegacyPrepare != 0 { 28019 return sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, ppStmt, pzOut) 28020 } 28021 28022 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt > 5 { 28023 prepFlags = uint32(SQLITE_PREPARE_PERSISTENT) 28024 } 28025 28026 return sqlite3.Xsqlite3_prepare_v3(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, prepFlags, ppStmt, pzOut) 28027 } 28028 28029 func dbPrepareAndBind(tls *libc.TLS, pDb uintptr, zIn uintptr, pzOut uintptr, ppPreStmt uintptr) int32 { 28030 bp := tls.Alloc(32) 28031 defer tls.Free(32) 28032 28033 var zSql uintptr = zIn 28034 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 28035 var pPreStmt uintptr 28036 var nSql int32 28037 var nVar int32 = 0 28038 var iParm int32 = 0 28039 var c int8 28040 var i int32 28041 var needResultReset int32 = 0 28042 var rc int32 = SQLITE_OK 28043 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28044 28045 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = uintptr(0) 28046 28047 for int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zSql)))) == ' ' || int32(c) == '\t' || int32(c) == '\r' || int32(c) == '\n' { 28048 zSql++ 28049 } 28050 nSql = strlen30(tls, zSql) 28051 28052 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext { 28053 var n int32 = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql 28054 if nSql >= n && 28055 libc.Xmemcmp(tls, (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql, zSql, uint64(n)) == 0 && 28056 (int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n)))) == 0 || int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n-1)))) == ';') { 28057 *(*uintptr)(unsafe.Pointer(bp)) = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28058 *(*uintptr)(unsafe.Pointer(pzOut)) = zSql + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql) 28059 28060 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev != 0 { 28061 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev)).FpNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28062 } else { 28063 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28064 } 28065 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext != 0 { 28066 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext)).FpPrev = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28067 } else { 28068 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28069 } 28070 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28071 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28072 break 28073 } 28074 } 28075 28076 if pPreStmt == uintptr(0) { 28077 var nByte int32 28078 28079 if SQLITE_OK != dbPrepare(tls, pDb, zSql, bp, pzOut) { 28080 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28081 return TCL_ERROR 28082 } 28083 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 28084 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) { 28085 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28086 return TCL_ERROR 28087 } else { 28088 return TCL_OK 28089 } 28090 } 28091 28092 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28093 nByte = int32(uint64(unsafe.Sizeof(SqlPreparedStmt{})) + uint64(nVar)*uint64(unsafe.Sizeof(uintptr(0)))) 28094 pPreStmt = tcl.XTcl_Alloc(tls, uint32(nByte)) 28095 libc.Xmemset(tls, pPreStmt, 0, uint64(nByte)) 28096 28097 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt = *(*uintptr)(unsafe.Pointer(bp)) 28098 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql = int32((int64(*(*uintptr)(unsafe.Pointer(pzOut))) - int64(zSql)) / 1) 28099 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 28100 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm = pPreStmt + 1*56 28101 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql == uintptr(0) { 28102 var zCopy uintptr = tcl.XTcl_Alloc(tls, uint32((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql+1)) 28103 libc.Xmemcpy(tls, zCopy, zSql, uint64((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql)) 28104 *(*int8)(unsafe.Pointer(zCopy + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql))) = int8(0) 28105 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = zCopy 28106 } 28107 } 28108 28109 for i = 1; i <= nVar; i++ { 28110 var zVar uintptr = sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28111 if zVar != uintptr(0) && (int32(*(*int8)(unsafe.Pointer(zVar))) == '$' || int32(*(*int8)(unsafe.Pointer(zVar))) == ':' || int32(*(*int8)(unsafe.Pointer(zVar))) == '@') { 28112 var pVar uintptr = tcl.XTcl_GetVar2Ex(tls, interp, zVar+1, uintptr(0), 0) 28113 if pVar == uintptr(0) && (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != uintptr(0) { 28114 var pCmd uintptr 28115 var rx int32 28116 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, -1) 28117 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28118 tcl.XTcl_ListObjAppendElement(tls, interp, pCmd, tcl.XTcl_NewStringObj(tls, zVar, -1)) 28119 if needResultReset != 0 { 28120 tcl.XTcl_ResetResult(tls, interp) 28121 } 28122 needResultReset = 1 28123 rx = tcl.XTcl_EvalObjEx(tls, interp, pCmd, TCL_EVAL_DIRECT) 28124 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28125 var _objPtr uintptr = pCmd 28126 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28127 tcl.XTclFreeObj(tls, _objPtr) 28128 } 28129 } 28130 if rx == TCL_OK { 28131 pVar = tcl.XTcl_GetObjResult(tls, interp) 28132 } else if rx == TCL_ERROR { 28133 rc = TCL_ERROR 28134 break 28135 } else { 28136 pVar = uintptr(0) 28137 } 28138 } 28139 if pVar != 0 { 28140 var data uintptr 28141 var zType uintptr = func() uintptr { 28142 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28143 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28144 } 28145 return ts + 584 28146 }() 28147 c = *(*int8)(unsafe.Pointer(zType)) 28148 if int32(*(*int8)(unsafe.Pointer(zVar))) == '@' || int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28149 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+8) 28150 sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 28151 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28152 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 28153 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 28154 tcl.XTcl_GetIntFromObj(tls, interp, pVar, bp+8) 28155 sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*int32)(unsafe.Pointer(bp + 8))) 28156 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28157 tcl.XTcl_GetDoubleFromObj(tls, interp, pVar, bp+16) 28158 sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*float64)(unsafe.Pointer(bp + 16))) 28159 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28160 tcl.XTcl_GetWideIntFromObj(tls, interp, pVar, bp+24) 28161 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 28162 } else { 28163 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+8) 28164 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 28165 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28166 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 28167 } 28168 } else { 28169 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28170 } 28171 if needResultReset != 0 { 28172 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28173 } 28174 } 28175 } 28176 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = iParm 28177 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = pPreStmt 28178 if needResultReset != 0 && rc == TCL_OK { 28179 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28180 } 28181 28182 return rc 28183 } 28184 28185 func dbReleaseStmt(tls *libc.TLS, pDb uintptr, pPreStmt uintptr, discard int32) { 28186 var i int32 28187 28188 for i = 0; i < (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm; i++ { 28189 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28190 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(i)*8)) 28191 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28192 tcl.XTclFreeObj(tls, _objPtr) 28193 } 28194 } 28195 } 28196 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = 0 28197 28198 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt <= 0 || discard != 0 { 28199 dbFreeStmt(tls, pPreStmt) 28200 } else { 28201 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList 28202 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev = uintptr(0) 28203 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 28204 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpPrev = pPreStmt 28205 } 28206 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = pPreStmt 28207 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast == uintptr(0) { 28208 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = pPreStmt 28209 } else { 28210 } 28211 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt++ 28212 28213 for (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt > (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt { 28214 var pLast uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast 28215 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pLast)).FpPrev 28216 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast)).FpNext = uintptr(0) 28217 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28218 dbFreeStmt(tls, pLast) 28219 } 28220 } 28221 } 28222 28223 type DbEvalContext1 = struct { 28224 FpDb uintptr 28225 FpSql uintptr 28226 FzSql uintptr 28227 FpPreStmt uintptr 28228 FnCol int32 28229 FevalFlags int32 28230 FpArray uintptr 28231 FapColName uintptr 28232 } 28233 28234 type DbEvalContext = DbEvalContext1 28235 28236 func dbReleaseColumnNames(tls *libc.TLS, p uintptr) { 28237 if (*DbEvalContext)(unsafe.Pointer(p)).FapColName != 0 { 28238 var i int32 28239 for i = 0; i < (*DbEvalContext)(unsafe.Pointer(p)).FnCol; i++ { 28240 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28241 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FapColName + uintptr(i)*8)) 28242 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28243 tcl.XTclFreeObj(tls, _objPtr) 28244 } 28245 } 28246 } 28247 tcl.XTcl_Free(tls, (*DbEvalContext)(unsafe.Pointer(p)).FapColName) 28248 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = uintptr(0) 28249 } 28250 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = 0 28251 } 28252 28253 func dbEvalInit(tls *libc.TLS, p uintptr, pDb uintptr, pSql uintptr, pArray uintptr, evalFlags int32) { 28254 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(DbEvalContext{}))) 28255 (*DbEvalContext)(unsafe.Pointer(p)).FpDb = pDb 28256 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = tcl.XTcl_GetString(tls, pSql) 28257 (*DbEvalContext)(unsafe.Pointer(p)).FpSql = pSql 28258 (*Tcl_Obj)(unsafe.Pointer(pSql)).FrefCount++ 28259 if pArray != 0 { 28260 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = pArray 28261 (*Tcl_Obj)(unsafe.Pointer(pArray)).FrefCount++ 28262 } 28263 (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags = evalFlags 28264 addDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 28265 } 28266 28267 func dbEvalRowInfo(tls *libc.TLS, p uintptr, pnCol uintptr, papColName uintptr) { 28268 if uintptr(0) == (*DbEvalContext)(unsafe.Pointer(p)).FapColName { 28269 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 28270 var i int32 28271 var nCol int32 28272 var apColName uintptr = uintptr(0) 28273 28274 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = libc.AssignInt32(&nCol, sqlite3.Xsqlite3_column_count(tls, pStmt)) 28275 if nCol > 0 && (papColName != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0) { 28276 apColName = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol))) 28277 for i = 0; i < nCol; i++ { 28278 *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)) = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_name(tls, pStmt, i), -1) 28279 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)))).FrefCount++ 28280 } 28281 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = apColName 28282 } 28283 28284 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28285 var interp uintptr = (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).Finterp 28286 var pColList uintptr = tcl.XTcl_NewObj(tls) 28287 var pStar uintptr = tcl.XTcl_NewStringObj(tls, ts+3840, -1) 28288 28289 for i = 0; i < nCol; i++ { 28290 tcl.XTcl_ListObjAppendElement(tls, interp, pColList, *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8))) 28291 } 28292 (*Tcl_Obj)(unsafe.Pointer(pStar)).FrefCount++ 28293 tcl.XTcl_ObjSetVar2(tls, interp, (*DbEvalContext)(unsafe.Pointer(p)).FpArray, pStar, pColList, 0) 28294 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28295 var _objPtr uintptr = pStar 28296 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28297 tcl.XTclFreeObj(tls, _objPtr) 28298 } 28299 } 28300 } 28301 } 28302 28303 if papColName != 0 { 28304 *(*uintptr)(unsafe.Pointer(papColName)) = (*DbEvalContext)(unsafe.Pointer(p)).FapColName 28305 } 28306 if pnCol != 0 { 28307 *(*int32)(unsafe.Pointer(pnCol)) = (*DbEvalContext)(unsafe.Pointer(p)).FnCol 28308 } 28309 } 28310 28311 func dbEvalStep(tls *libc.TLS, p uintptr) int32 { 28312 var zPrevSql uintptr = uintptr(0) 28313 28314 for *(*int8)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FzSql)) != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 28315 var rc int32 28316 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt == uintptr(0) { 28317 zPrevSql = func() uintptr { 28318 if (*DbEvalContext)(unsafe.Pointer(p)).FzSql == zPrevSql { 28319 return uintptr(0) 28320 } 28321 return (*DbEvalContext)(unsafe.Pointer(p)).FzSql 28322 }() 28323 rc = dbPrepareAndBind(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FzSql, p+16, p+24) 28324 if rc != TCL_OK { 28325 return rc 28326 } 28327 } else { 28328 var rcs int32 28329 var pDb uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpDb 28330 var pPreStmt uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt 28331 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28332 28333 rcs = sqlite3.Xsqlite3_step(tls, pStmt) 28334 if rcs == SQLITE_ROW { 28335 return TCL_OK 28336 } 28337 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28338 dbEvalRowInfo(tls, p, uintptr(0), uintptr(0)) 28339 } 28340 rcs = sqlite3.Xsqlite3_reset(tls, pStmt) 28341 28342 (*SqliteDb)(unsafe.Pointer(pDb)).FnStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, 1) 28343 (*SqliteDb)(unsafe.Pointer(pDb)).FnSort = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_SORT, 1) 28344 (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_AUTOINDEX, 1) 28345 (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_VM_STEP, 1) 28346 dbReleaseColumnNames(tls, p) 28347 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 28348 28349 if rcs != SQLITE_OK { 28350 dbReleaseStmt(tls, pDb, pPreStmt, 1) 28351 if (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FbLegacyPrepare != 0 && rcs == SQLITE_SCHEMA && zPrevSql != 0 { 28352 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = zPrevSql 28353 continue 28354 } 28355 tcl.XTcl_SetObjResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, 28356 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28357 return TCL_ERROR 28358 } else { 28359 dbReleaseStmt(tls, pDb, pPreStmt, 0) 28360 } 28361 } 28362 } 28363 28364 return TCL_BREAK 28365 } 28366 28367 func dbEvalFinalize(tls *libc.TLS, p uintptr) { 28368 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 28369 sqlite3.Xsqlite3_reset(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt) 28370 dbReleaseStmt(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt, 0) 28371 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 28372 } 28373 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28374 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28375 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 28376 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28377 tcl.XTclFreeObj(tls, _objPtr) 28378 } 28379 } 28380 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = uintptr(0) 28381 } 28382 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28383 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpSql 28384 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28385 tcl.XTclFreeObj(tls, _objPtr) 28386 } 28387 } 28388 dbReleaseColumnNames(tls, p) 28389 delDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 28390 } 28391 28392 func dbEvalColumnValue(tls *libc.TLS, p uintptr, iCol int32) uintptr { 28393 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 28394 switch sqlite3.Xsqlite3_column_type(tls, pStmt, iCol) { 28395 case SQLITE_BLOB: 28396 { 28397 var bytes int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, iCol) 28398 var zBlob uintptr = sqlite3.Xsqlite3_column_blob(tls, pStmt, iCol) 28399 if !(zBlob != 0) { 28400 bytes = 0 28401 } 28402 return tcl.XTcl_NewByteArrayObj(tls, zBlob, bytes) 28403 28404 } 28405 case SQLITE_INTEGER: 28406 { 28407 var v sqlite_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, iCol) 28408 if v >= int64(-2147483647) && v <= int64(2147483647) { 28409 return tcl.XTcl_NewIntObj(tls, int32(v)) 28410 } else { 28411 return tcl.XTcl_NewWideIntObj(tls, v) 28412 } 28413 28414 } 28415 fallthrough 28416 case SQLITE_FLOAT: 28417 { 28418 return tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_column_double(tls, pStmt, iCol)) 28419 28420 } 28421 case SQLITE_NULL: 28422 { 28423 return tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 28424 28425 } 28426 } 28427 28428 return tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_text(tls, pStmt, iCol), -1) 28429 } 28430 28431 func DbUseNre(tls *libc.TLS) int32 { 28432 bp := tls.Alloc(8) 28433 defer tls.Free(8) 28434 28435 tcl.XTcl_GetVersion(tls, bp, bp+4, uintptr(0), uintptr(0)) 28436 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == 8 && *(*int32)(unsafe.Pointer(bp + 4)) >= 6 || *(*int32)(unsafe.Pointer(bp)) > 8) 28437 } 28438 28439 func DbEvalNextCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 28440 bp := tls.Alloc(16) 28441 defer tls.Free(16) 28442 28443 var rc int32 = result 28444 28445 var p uintptr = *(*ClientData)(unsafe.Pointer(data)) 28446 var pScript uintptr = *(*ClientData)(unsafe.Pointer(data + 1*8)) 28447 var pArray uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 28448 28449 for (rc == TCL_OK || rc == TCL_CONTINUE) && TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, p)) { 28450 var i int32 28451 28452 dbEvalRowInfo(tls, p, bp, bp+8) 28453 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 28454 if pArray == uintptr(0) { 28455 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(0), dbEvalColumnValue(tls, p, i), 0) 28456 } else if (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags&SQLITE_EVAL_WITHOUTNULLS != 0 && 28457 sqlite3.Xsqlite3_column_type(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt, i) == SQLITE_NULL { 28458 tcl.XTcl_UnsetVar2(tls, interp, tcl.XTcl_GetString(tls, pArray), 28459 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8))), 0) 28460 } else { 28461 tcl.XTcl_ObjSetVar2(tls, interp, pArray, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), dbEvalColumnValue(tls, p, i), 0) 28462 } 28463 } 28464 28465 if DbUseNre(tls) != 0 { 28466 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 28467 f func(*libc.TLS, uintptr, uintptr, int32) int32 28468 }{DbEvalNextCmd})), p, pScript, uintptr(0), uintptr(0)) 28469 return tcl.XTcl_NREvalObj(tls, interp, pScript, 0) 28470 } else { 28471 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 28472 } 28473 } 28474 28475 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28476 var _objPtr uintptr = pScript 28477 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28478 tcl.XTclFreeObj(tls, _objPtr) 28479 } 28480 } 28481 dbEvalFinalize(tls, p) 28482 tcl.XTcl_Free(tls, p) 28483 28484 if rc == TCL_OK || rc == TCL_BREAK { 28485 tcl.XTcl_ResetResult(tls, interp) 28486 rc = TCL_OK 28487 } 28488 return rc 28489 } 28490 28491 func DbHookCmd(tls *libc.TLS, interp uintptr, pDb uintptr, pArg uintptr, ppHook uintptr) { 28492 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 28493 28494 if *(*uintptr)(unsafe.Pointer(ppHook)) != 0 { 28495 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(ppHook))) 28496 if pArg != 0 { 28497 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28498 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer(ppHook)) 28499 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28500 tcl.XTclFreeObj(tls, _objPtr) 28501 } 28502 } 28503 *(*uintptr)(unsafe.Pointer(ppHook)) = uintptr(0) 28504 } 28505 } 28506 if pArg != 0 { 28507 if tcl.XTcl_GetCharLength(tls, pArg) > 0 { 28508 *(*uintptr)(unsafe.Pointer(ppHook)) = pArg 28509 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppHook)))).FrefCount++ 28510 } 28511 } 28512 28513 sqlite3.Xsqlite3_preupdate_hook(tls, db, func() uintptr { 28514 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 28515 return *(*uintptr)(unsafe.Pointer(&struct { 28516 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, sqlite_int64, sqlite_int64) 28517 }{DbPreUpdateHandler})) 28518 } 28519 return uintptr(0) 28520 }(), pDb) 28521 sqlite3.Xsqlite3_update_hook(tls, db, func() uintptr { 28522 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 28523 return *(*uintptr)(unsafe.Pointer(&struct { 28524 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, sqlite_int64) 28525 }{DbUpdateHandler})) 28526 } 28527 return uintptr(0) 28528 }(), pDb) 28529 sqlite3.Xsqlite3_rollback_hook(tls, db, func() uintptr { 28530 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 28531 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbRollbackHandler})) 28532 } 28533 return uintptr(0) 28534 }(), pDb) 28535 sqlite3.Xsqlite3_wal_hook(tls, db, func() uintptr { 28536 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 28537 return *(*uintptr)(unsafe.Pointer(&struct { 28538 f func(*libc.TLS, uintptr, uintptr, uintptr, int32) int32 28539 }{DbWalHandler})) 28540 } 28541 return uintptr(0) 28542 }(), pDb) 28543 } 28544 28545 func DbObjCmd(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 28546 bp := tls.Alloc(1588) 28547 defer tls.Free(1588) 28548 *(*uintptr)(unsafe.Pointer(bp + 1464)) = cd 28549 28550 var pDb uintptr 28551 28552 var rc int32 28553 var zAuth uintptr 28554 28555 var zDestFile uintptr 28556 var zSrcDb uintptr 28557 28558 var pBackup uintptr 28559 var zCallback uintptr 28560 28561 var zBusy uintptr 28562 28563 var subCmd uintptr 28564 28565 var pResult uintptr 28566 var pCollate uintptr 28567 var zName uintptr 28568 var zScript uintptr 28569 28570 var _objPtr uintptr 28571 var zCommit uintptr 28572 28573 var pResult1 uintptr 28574 var isComplete int32 28575 28576 var zOpt uintptr 28577 28578 var pResult2 uintptr 28579 var ii int32 28580 var zErr uintptr 28581 var nErr int32 28582 var z uintptr 28583 var zTable uintptr 28584 var zFile uintptr 28585 var zConflict uintptr 28586 28587 var nCol int32 28588 var nByte int32 28589 var i int32 28590 var j int32 28591 var nSep int32 28592 var nNull int32 28593 var zSql uintptr 28594 var zLine uintptr 28595 var azCol uintptr 28596 var zCommit1 uintptr 28597 var in uintptr 28598 var lineno int32 28599 28600 var pResult3 uintptr 28601 28602 var zSep uintptr 28603 var zNull uintptr 28604 28605 var z1 uintptr 28606 var flags int32 28607 var zSchema uintptr 28608 var pValue uintptr 28609 var pBA uintptr 28610 var pData uintptr 28611 28612 var xrc int32 28613 28614 var i1 int32 28615 28616 var pResult4 uintptr 28617 28618 var i2 int32 28619 28620 var _objPtr1 uintptr 28621 28622 var pRet uintptr 28623 28624 var p uintptr 28625 var pArray uintptr 28626 var pScript uintptr 28627 var evalFlags int32 28628 var zOpt1 uintptr 28629 28630 var z2 uintptr 28631 var n1 int32 28632 var _objPtr2 uintptr 28633 var flags1 int32 28634 var pFunc uintptr 28635 var pScript1 uintptr 28636 var zName1 uintptr 28637 28638 var i3 int32 28639 28640 var isReadonly1 int32 28641 var zDb uintptr 28642 var zTable1 uintptr 28643 var zColumn uintptr 28644 28645 var zNull1 uintptr 28646 var pResult5 uintptr 28647 var rowid Tcl_WideInt 28648 var zProgress uintptr 28649 28650 var zProfile uintptr 28651 28652 var zSrcFile uintptr 28653 var zDestDb uintptr 28654 28655 var pBackup1 uintptr 28656 var nTimeout int32 28657 var needFree int32 28658 var zSchema1 uintptr 28659 28660 var pData1 uintptr 28661 var v2 int32 28662 var zOp uintptr 28663 28664 var pResult6 uintptr 28665 var zTrace uintptr 28666 28667 var _objPtr3 uintptr 28668 var _objPtr4 uintptr 28669 28670 var pError uintptr 28671 28672 var i4 int32 28673 var zTraceV2 uintptr 28674 28675 var wMask Tcl_WideInt 28676 28677 var pScript2 uintptr 28678 var zBegin uintptr 28679 var _objPtr5 uintptr 28680 var xNotify uintptr 28681 var pNotifyArg uintptr 28682 var nCol2 int32 28683 var pRet1 uintptr 28684 var pObj1 uintptr 28685 28686 var ppHook uintptr 28687 28688 var zArg uintptr 28689 var i5 int32 28690 pDb = *(*uintptr)(unsafe.Pointer(bp + 1464)) 28691 rc = TCL_OK 28692 28693 if !(objc < 2) { 28694 goto __1 28695 } 28696 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 28697 return TCL_ERROR 28698 __1: 28699 ; 28700 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) { 28701 goto __2 28702 } 28703 return TCL_ERROR 28704 __2: 28705 ; 28706 switch uint32(*(*int32)(unsafe.Pointer(bp + 1016))) { 28707 case uint32(0): 28708 goto __4 28709 28710 case uint32(1): 28711 goto __5 28712 28713 case uint32(2): 28714 goto __6 28715 28716 case uint32(3): 28717 goto __7 28718 28719 case uint32(4): 28720 goto __8 28721 28722 case uint32(5): 28723 goto __9 28724 28725 case uint32(6): 28726 goto __10 28727 28728 case uint32(7): 28729 goto __11 28730 28731 case uint32(8): 28732 goto __12 28733 28734 case uint32(9): 28735 goto __13 28736 28737 case uint32(10): 28738 goto __14 28739 28740 case uint32(11): 28741 goto __15 28742 28743 case uint32(12): 28744 goto __16 28745 28746 case uint32(13): 28747 goto __17 28748 28749 case uint32(14): 28750 goto __18 28751 28752 case uint32(15): 28753 goto __19 28754 28755 case uint32(16): 28756 goto __20 28757 28758 case uint32(18): 28759 goto __21 28760 case uint32(24): 28761 goto __22 28762 28763 case uint32(17): 28764 goto __23 28765 28766 case uint32(19): 28767 goto __24 28768 28769 case uint32(20): 28770 goto __25 28771 28772 case uint32(21): 28773 goto __26 28774 28775 case uint32(23): 28776 goto __27 28777 28778 case uint32(22): 28779 goto __28 28780 28781 case uint32(27): 28782 goto __29 28783 28784 case uint32(26): 28785 goto __30 28786 28787 case uint32(28): 28788 goto __31 28789 28790 case uint32(29): 28791 goto __32 28792 28793 case uint32(31): 28794 goto __33 28795 28796 case uint32(32): 28797 goto __34 28798 28799 case uint32(33): 28800 goto __35 28801 28802 case uint32(34): 28803 goto __36 28804 28805 case uint32(35): 28806 goto __37 28807 28808 case uint32(36): 28809 goto __38 28810 28811 case uint32(37): 28812 goto __39 28813 28814 case uint32(38): 28815 goto __40 28816 28817 case uint32(25): 28818 goto __41 28819 28820 case uint32(41): 28821 goto __42 28822 case uint32(39): 28823 goto __43 28824 case uint32(30): 28825 goto __44 28826 28827 case uint32(40): 28828 goto __45 28829 } 28830 goto __3 28831 28832 __4: 28833 if !(objc > 3) { 28834 goto __46 28835 } 28836 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 28837 return TCL_ERROR 28838 goto __47 28839 __46: 28840 if !(objc == 2) { 28841 goto __48 28842 } 28843 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 28844 goto __50 28845 } 28846 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, uintptr(0))) 28847 __50: 28848 ; 28849 goto __49 28850 __48: 28851 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 28852 goto __51 28853 } 28854 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 28855 __51: 28856 ; 28857 zAuth = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1020) 28858 if !(zAuth != 0 && *(*int32)(unsafe.Pointer(bp + 1020)) > 0) { 28859 goto __52 28860 } 28861 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 28862 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, zAuth, uint64(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 28863 goto __53 28864 __52: 28865 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = uintptr(0) 28866 __53: 28867 ; 28868 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 28869 goto __54 28870 } 28871 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 28872 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 28873 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 28874 }{auth_callback})), pDb) 28875 goto __55 28876 __54: 28877 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 28878 __55: 28879 ; 28880 __49: 28881 ; 28882 __47: 28883 ; 28884 goto __3 28885 28886 __5: 28887 if !(objc == 3) { 28888 goto __56 28889 } 28890 zSrcDb = ts + 85 28891 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28892 goto __57 28893 __56: 28894 if !(objc == 4) { 28895 goto __58 28896 } 28897 zSrcDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28898 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 28899 goto __59 28900 __58: 28901 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 28902 return TCL_ERROR 28903 __59: 28904 ; 28905 __57: 28906 ; 28907 rc = sqlite3.Xsqlite3_open_v2(tls, zDestFile, bp+1024, 28908 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 28909 if !(rc != SQLITE_OK) { 28910 goto __60 28911 } 28912 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+11729, 28913 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 28914 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 28915 return TCL_ERROR 28916 __60: 28917 ; 28918 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 1024)), ts+85, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSrcDb) 28919 if !(pBackup == uintptr(0)) { 28920 goto __61 28921 } 28922 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+11759, 28923 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 28924 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 28925 return TCL_ERROR 28926 __61: 28927 ; 28928 __62: 28929 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup, 100)) == SQLITE_OK) { 28930 goto __63 28931 } 28932 goto __62 28933 __63: 28934 ; 28935 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 28936 if !(rc == SQLITE_DONE) { 28937 goto __64 28938 } 28939 rc = TCL_OK 28940 goto __65 28941 __64: 28942 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+11759, 28943 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 28944 rc = TCL_ERROR 28945 __65: 28946 ; 28947 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 28948 goto __3 28949 28950 __6: 28951 if !(objc > 3) { 28952 goto __66 28953 } 28954 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 28955 return TCL_ERROR 28956 goto __67 28957 __66: 28958 if !(objc == 2) { 28959 goto __68 28960 } 28961 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 28962 goto __70 28963 } 28964 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+88, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, uintptr(0))) 28965 __70: 28966 ; 28967 goto __69 28968 __68: 28969 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 28970 goto __71 28971 } 28972 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 28973 __71: 28974 ; 28975 zCallback = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1032) 28976 if !(zCallback != 0 && *(*int32)(unsafe.Pointer(bp + 1032)) > 0) { 28977 goto __72 28978 } 28979 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 28980 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, zCallback, uint64(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 28981 goto __73 28982 __72: 28983 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = uintptr(0) 28984 __73: 28985 ; 28986 __69: 28987 ; 28988 __67: 28989 ; 28990 goto __3 28991 28992 __7: 28993 if !(objc > 3) { 28994 goto __74 28995 } 28996 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11775) 28997 return TCL_ERROR 28998 goto __75 28999 __74: 29000 if !(objc == 2) { 29001 goto __76 29002 } 29003 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29004 goto __78 29005 } 29006 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, uintptr(0))) 29007 __78: 29008 ; 29009 goto __77 29010 __76: 29011 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29012 goto __79 29013 } 29014 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 29015 __79: 29016 ; 29017 zBusy = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1036) 29018 if !(zBusy != 0 && *(*int32)(unsafe.Pointer(bp + 1036)) > 0) { 29019 goto __80 29020 } 29021 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 29022 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, zBusy, uint64(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 29023 goto __81 29024 __80: 29025 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = uintptr(0) 29026 __81: 29027 ; 29028 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29029 goto __82 29030 } 29031 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29032 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29033 f func(*libc.TLS, uintptr, int32) int32 29034 }{DbBusyHandler})), pDb) 29035 goto __83 29036 __82: 29037 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29038 __83: 29039 ; 29040 __77: 29041 ; 29042 __75: 29043 ; 29044 goto __3 29045 29046 __8: 29047 if !(objc <= 2) { 29048 goto __84 29049 } 29050 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+11784) 29051 return TCL_ERROR 29052 __84: 29053 ; 29054 subCmd = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29055 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 'f' && libc.Xstrcmp(tls, subCmd, ts+11803) == 0) { 29056 goto __85 29057 } 29058 if !(objc != 3) { 29059 goto __87 29060 } 29061 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11803) 29062 return TCL_ERROR 29063 goto __88 29064 __87: 29065 flushStmtCache(tls, pDb) 29066 __88: 29067 ; 29068 goto __86 29069 __85: 29070 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 's' && libc.Xstrcmp(tls, subCmd, ts+11809) == 0) { 29071 goto __89 29072 } 29073 if !(objc != 4) { 29074 goto __91 29075 } 29076 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11814) 29077 return TCL_ERROR 29078 goto __92 29079 __91: 29080 if !(TCL_ERROR == tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1040)) { 29081 goto __93 29082 } 29083 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+120, ts+11821, 29084 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)), ts+11838, uintptr(0))) 29085 return TCL_ERROR 29086 goto __94 29087 __93: 29088 if !(*(*int32)(unsafe.Pointer(bp + 1040)) < 0) { 29089 goto __95 29090 } 29091 flushStmtCache(tls, pDb) 29092 *(*int32)(unsafe.Pointer(bp + 1040)) = 0 29093 goto __96 29094 __95: 29095 if !(*(*int32)(unsafe.Pointer(bp + 1040)) > MAX_PREPARED_STMTS) { 29096 goto __97 29097 } 29098 *(*int32)(unsafe.Pointer(bp + 1040)) = MAX_PREPARED_STMTS 29099 __97: 29100 ; 29101 __96: 29102 ; 29103 (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt = *(*int32)(unsafe.Pointer(bp + 1040)) 29104 __94: 29105 ; 29106 __92: 29107 ; 29108 goto __90 29109 __89: 29110 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+152, ts+11851, 29111 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)), ts+11864, 29112 uintptr(0))) 29113 return TCL_ERROR 29114 __90: 29115 ; 29116 __86: 29117 ; 29118 goto __3 29119 29120 __9: 29121 if !(objc != 2) { 29122 goto __98 29123 } 29124 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 29125 return TCL_ERROR 29126 __98: 29127 ; 29128 pResult = tcl.XTcl_GetObjResult(tls, interp) 29129 tcl.XTcl_SetWideIntObj(tls, pResult, sqlite3.Xsqlite3_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 29130 goto __3 29131 29132 __10: 29133 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0))) 29134 goto __3 29135 29136 __11: 29137 if !(objc != 4) { 29138 goto __99 29139 } 29140 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11889) 29141 return TCL_ERROR 29142 __99: 29143 ; 29144 zName = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29145 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1044) 29146 pCollate = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlCollate{}))+uint64(*(*int32)(unsafe.Pointer(bp + 1044)))+uint64(1))) 29147 if !(pCollate == uintptr(0)) { 29148 goto __100 29149 } 29150 return TCL_ERROR 29151 __100: 29152 ; 29153 (*SqlCollate)(unsafe.Pointer(pCollate)).Finterp = interp 29154 (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 29155 (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript = pCollate + 1*24 29156 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = pCollate 29157 libc.Xmemcpy(tls, (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 1044))+1)) 29158 if !(sqlite3.Xsqlite3_create_collation(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName, SQLITE_UTF8, 29159 pCollate, *(*uintptr)(unsafe.Pointer(&struct { 29160 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 29161 }{tclSqlCollate}))) != 0) { 29162 goto __101 29163 } 29164 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 29165 return TCL_ERROR 29166 __101: 29167 ; 29168 goto __3 29169 29170 __12: 29171 if !(objc != 3) { 29172 goto __102 29173 } 29174 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+10187) 29175 return TCL_ERROR 29176 __102: 29177 ; 29178 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0) { 29179 goto __103 29180 } 29181 __104: 29182 _objPtr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 29183 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1) { 29184 goto __107 29185 } 29186 tcl.XTclFreeObj(tls, _objPtr) 29187 __107: 29188 ; 29189 goto __105 29190 __105: 29191 if 0 != 0 { 29192 goto __104 29193 } 29194 goto __106 29195 __106: 29196 ; 29197 __103: 29198 ; 29199 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29200 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount++ 29201 sqlite3.Xsqlite3_collation_needed(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, pDb, *(*uintptr)(unsafe.Pointer(&struct { 29202 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 29203 }{tclCollateNeeded}))) 29204 goto __3 29205 29206 __13: 29207 if !(objc > 3) { 29208 goto __108 29209 } 29210 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29211 return TCL_ERROR 29212 goto __109 29213 __108: 29214 if !(objc == 2) { 29215 goto __110 29216 } 29217 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29218 goto __112 29219 } 29220 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+184, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, uintptr(0))) 29221 __112: 29222 ; 29223 goto __111 29224 __110: 29225 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29226 goto __113 29227 } 29228 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 29229 __113: 29230 ; 29231 zCommit = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1048) 29232 if !(zCommit != 0 && *(*int32)(unsafe.Pointer(bp + 1048)) > 0) { 29233 goto __114 29234 } 29235 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 29236 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, zCommit, uint64(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 29237 goto __115 29238 __114: 29239 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = uintptr(0) 29240 __115: 29241 ; 29242 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29243 goto __116 29244 } 29245 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29246 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29247 f func(*libc.TLS, uintptr) int32 29248 }{DbCommitHandler})), pDb) 29249 goto __117 29250 __116: 29251 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29252 __117: 29253 ; 29254 __111: 29255 ; 29256 __109: 29257 ; 29258 goto __3 29259 29260 __14: 29261 if !(objc != 3) { 29262 goto __118 29263 } 29264 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 29265 return TCL_ERROR 29266 __118: 29267 ; 29268 isComplete = sqlite3.Xsqlite3_complete(tls, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0))) 29269 pResult1 = tcl.XTcl_GetObjResult(tls, interp) 29270 tcl.XTcl_SetIntObj(tls, pResult1, libc.Bool32(isComplete != 0)) 29271 goto __3 29272 29273 __15: 29274 if !(objc > 4) { 29275 goto __119 29276 } 29277 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11901) 29278 return TCL_ERROR 29279 __119: 29280 ; 29281 if !(objc == 2) { 29282 goto __120 29283 } 29284 29285 pResult2 = tcl.XTcl_NewListObj(tls, 0, uintptr(0)) 29286 ii = 0 29287 __122: 29288 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29289 goto __124 29290 } 29291 *(*int32)(unsafe.Pointer(bp + 1052)) = 0 29292 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+200, -1, bp+1052)) 29293 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 29294 tcl.XTcl_NewStringObj(tls, aDbConfig[ii].FzName, -1)) 29295 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 29296 tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1052)))) 29297 goto __123 29298 __123: 29299 ii++ 29300 goto __122 29301 goto __124 29302 __124: 29303 ; 29304 goto __121 29305 __120: 29306 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29307 *(*int32)(unsafe.Pointer(bp + 1056)) = -1 29308 *(*int32)(unsafe.Pointer(bp + 1060)) = 0 29309 if !(int32(*(*int8)(unsafe.Pointer(zOpt))) == '-') { 29310 goto __125 29311 } 29312 zOpt++ 29313 __125: 29314 ; 29315 ii = 0 29316 __126: 29317 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29318 goto __128 29319 } 29320 if !(libc.Xstrcmp(tls, aDbConfig[ii].FzName, zOpt) == 0) { 29321 goto __129 29322 } 29323 goto __128 29324 __129: 29325 ; 29326 goto __127 29327 __127: 29328 ii++ 29329 goto __126 29330 goto __128 29331 __128: 29332 ; 29333 if !(uint64(ii) >= uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 29334 goto __130 29335 } 29336 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+216, ts+11920, zOpt, 29337 ts+11945, uintptr(0))) 29338 return TCL_ERROR 29339 __130: 29340 ; 29341 if !(objc == 4) { 29342 goto __131 29343 } 29344 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1056) != 0) { 29345 goto __132 29346 } 29347 return TCL_ERROR 29348 __132: 29349 ; 29350 __131: 29351 ; 29352 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+248, *(*int32)(unsafe.Pointer(bp + 1056)), bp+1060)) 29353 pResult2 = tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1060))) 29354 __121: 29355 ; 29356 tcl.XTcl_SetObjResult(tls, interp, pResult2) 29357 goto __3 29358 29359 __16: 29360 lineno = 0 29361 if !(objc < 5 || objc > 7) { 29362 goto __133 29363 } 29364 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 29365 ts+11947) 29366 return TCL_ERROR 29367 __133: 29368 ; 29369 if !(objc >= 6) { 29370 goto __134 29371 } 29372 zSep = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8)), uintptr(0)) 29373 goto __135 29374 __134: 29375 zSep = ts + 12009 29376 __135: 29377 ; 29378 if !(objc >= 7) { 29379 goto __136 29380 } 29381 zNull = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8)), uintptr(0)) 29382 goto __137 29383 __136: 29384 zNull = ts + 584 29385 __137: 29386 ; 29387 zConflict = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29388 zTable = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)) 29389 zFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0)) 29390 nSep = strlen30(tls, zSep) 29391 nNull = strlen30(tls, zNull) 29392 if !(nSep == 0) { 29393 goto __138 29394 } 29395 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+264, ts+12011, 29396 uintptr(0))) 29397 return TCL_ERROR 29398 __138: 29399 ; 29400 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) { 29401 goto __139 29402 } 29403 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+280, ts+12090, zConflict, 29404 ts+12099, uintptr(0))) 29405 return TCL_ERROR 29406 __139: 29407 ; 29408 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+12179, libc.VaList(bp+312, zTable)) 29409 if !(zSql == uintptr(0)) { 29410 goto __140 29411 } 29412 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+320, ts+12198, zTable, uintptr(0))) 29413 return TCL_ERROR 29414 __140: 29415 ; 29416 nByte = strlen30(tls, zSql) 29417 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 29418 sqlite3.Xsqlite3_free(tls, zSql) 29419 if !(rc != 0) { 29420 goto __141 29421 } 29422 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+344, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29423 nCol = 0 29424 goto __142 29425 __141: 29426 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29427 __142: 29428 ; 29429 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29430 if !(nCol == 0) { 29431 goto __143 29432 } 29433 return TCL_ERROR 29434 __143: 29435 ; 29436 zSql = libc.Xmalloc(tls, uint64(nByte+50+nCol*2)) 29437 if !(zSql == uintptr(0)) { 29438 goto __144 29439 } 29440 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+368, ts+12229, uintptr(0))) 29441 return TCL_ERROR 29442 __144: 29443 ; 29444 sqlite3.Xsqlite3_snprintf(tls, nByte+50, zSql, ts+12251, 29445 libc.VaList(bp+384, zConflict, zTable)) 29446 j = strlen30(tls, zSql) 29447 i = 1 29448 __145: 29449 if !(i < nCol) { 29450 goto __147 29451 } 29452 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(',') 29453 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 29454 goto __146 29455 __146: 29456 i++ 29457 goto __145 29458 goto __147 29459 __147: 29460 ; 29461 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(')') 29462 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 29463 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 29464 libc.Xfree(tls, zSql) 29465 if !(rc != 0) { 29466 goto __148 29467 } 29468 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+400, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29469 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29470 return TCL_ERROR 29471 __148: 29472 ; 29473 in = libc.Xfopen(tls, zFile, ts+4402) 29474 if !(in == uintptr(0)) { 29475 goto __149 29476 } 29477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+424, ts+12283, zFile, uintptr(0))) 29478 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29479 return TCL_ERROR 29480 __149: 29481 ; 29482 azCol = libc.Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol+1)) 29483 if !(azCol == uintptr(0)) { 29484 goto __150 29485 } 29486 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+448, ts+12229, uintptr(0))) 29487 libc.Xfclose(tls, in) 29488 return TCL_ERROR 29489 __150: 29490 ; 29491 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+12309, uintptr(0), uintptr(0), uintptr(0)) 29492 zCommit1 = ts + 11628 29493 __151: 29494 if !(libc.AssignUintptr(&zLine, local_getline(tls, uintptr(0), in)) != uintptr(0)) { 29495 goto __152 29496 } 29497 lineno++ 29498 *(*uintptr)(unsafe.Pointer(azCol)) = zLine 29499 i = 0 29500 z = zLine 29501 __153: 29502 if !(*(*int8)(unsafe.Pointer(z)) != 0) { 29503 goto __155 29504 } 29505 if !(int32(*(*int8)(unsafe.Pointer(z))) == int32(*(*int8)(unsafe.Pointer(zSep))) && libc.Xstrncmp(tls, z, zSep, uint64(nSep)) == 0) { 29506 goto __156 29507 } 29508 *(*int8)(unsafe.Pointer(z)) = int8(0) 29509 i++ 29510 if !(i < nCol) { 29511 goto __157 29512 } 29513 *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)) = z + uintptr(nSep) 29514 z += uintptr(nSep - 1) 29515 __157: 29516 ; 29517 __156: 29518 ; 29519 goto __154 29520 __154: 29521 z++ 29522 goto __153 29523 goto __155 29524 __155: 29525 ; 29526 if !(i+1 != nCol) { 29527 goto __158 29528 } 29529 nErr = strlen30(tls, zFile) + 200 29530 zErr = libc.Xmalloc(tls, uint64(nErr)) 29531 if !(zErr != 0) { 29532 goto __159 29533 } 29534 sqlite3.Xsqlite3_snprintf(tls, nErr, zErr, 29535 ts+12315, 29536 libc.VaList(bp+464, zFile, lineno, nCol, i+1)) 29537 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+496, zErr, uintptr(0))) 29538 libc.Xfree(tls, zErr) 29539 __159: 29540 ; 29541 zCommit1 = ts + 7824 29542 goto __152 29543 __158: 29544 ; 29545 i = 0 29546 __160: 29547 if !(i < nCol) { 29548 goto __162 29549 } 29550 29551 if !(nNull > 0 && libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), zNull) == 0 || 29552 strlen30(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8))) == 0) { 29553 goto __163 29554 } 29555 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1) 29556 goto __164 29557 __163: 29558 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), -1, uintptr(0)) 29559 __164: 29560 ; 29561 goto __161 29562 __161: 29563 i++ 29564 goto __160 29565 goto __162 29566 __162: 29567 ; 29568 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29569 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29570 libc.Xfree(tls, zLine) 29571 if !(rc != SQLITE_OK) { 29572 goto __165 29573 } 29574 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+512, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29575 zCommit1 = ts + 7824 29576 goto __152 29577 __165: 29578 ; 29579 goto __151 29580 __152: 29581 ; 29582 libc.Xfree(tls, azCol) 29583 libc.Xfclose(tls, in) 29584 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 29585 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zCommit1, uintptr(0), uintptr(0), uintptr(0)) 29586 29587 if !(int32(*(*int8)(unsafe.Pointer(zCommit1))) == 'C') { 29588 goto __166 29589 } 29590 29591 pResult3 = tcl.XTcl_GetObjResult(tls, interp) 29592 tcl.XTcl_SetIntObj(tls, pResult3, lineno) 29593 rc = TCL_OK 29594 goto __167 29595 __166: 29596 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+1072, ts+1333, libc.VaList(bp+536, lineno)) 29597 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+544, ts+12375, bp+1072, 29598 uintptr(0))) 29599 rc = TCL_ERROR 29600 __167: 29601 ; 29602 goto __3 29603 29604 __17: 29605 zSchema = uintptr(0) 29606 pValue = uintptr(0) 29607 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = int64(0) 29608 *(*int32)(unsafe.Pointer(bp + 1160)) = 0 29609 29610 if !(objc < 3) { 29611 goto __168 29612 } 29613 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12408) 29614 rc = TCL_ERROR 29615 goto __3 29616 __168: 29617 ; 29618 i1 = 2 29619 __169: 29620 if !(i1 < objc-1) { 29621 goto __171 29622 } 29623 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i1)*8))) 29624 if !(libc.Xstrcmp(tls, z1, ts+12425) == 0 && i1 < objc-2) { 29625 goto __172 29626 } 29627 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1152) 29628 if !(rc != 0) { 29629 goto __173 29630 } 29631 goto deserialize_error 29632 __173: 29633 ; 29634 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 1152)) 29635 goto __170 29636 __172: 29637 ; 29638 if !(libc.Xstrcmp(tls, z1, ts+12434) == 0 && i1 < objc-2) { 29639 goto __174 29640 } 29641 rc = tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1160) 29642 if !(rc != 0) { 29643 goto __175 29644 } 29645 goto deserialize_error 29646 __175: 29647 ; 29648 goto __170 29649 __174: 29650 ; 29651 if !(zSchema == uintptr(0) && i1 == objc-2 && int32(*(*int8)(unsafe.Pointer(z1))) != '-') { 29652 goto __176 29653 } 29654 zSchema = z1 29655 goto __170 29656 __176: 29657 ; 29658 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+568, ts+12444, z1, uintptr(0))) 29659 rc = TCL_ERROR 29660 goto deserialize_error 29661 goto __170 29662 __170: 29663 i1++ 29664 goto __169 29665 goto __171 29666 __171: 29667 ; 29668 pValue = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 29669 pBA = tcl.XTcl_GetByteArrayFromObj(tls, pValue, bp+1164) 29670 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 29671 if !(pData == uintptr(0) && *(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 29672 goto __177 29673 } 29674 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+592, ts+2069, uintptr(0))) 29675 rc = TCL_ERROR 29676 goto __178 29677 __177: 29678 if !(*(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 29679 goto __179 29680 } 29681 libc.Xmemcpy(tls, pData, pBA, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 29682 __179: 29683 ; 29684 if !(*(*int32)(unsafe.Pointer(bp + 1160)) != 0) { 29685 goto __180 29686 } 29687 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY 29688 goto __181 29689 __180: 29690 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE 29691 __181: 29692 ; 29693 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)) 29694 if !(xrc != 0) { 29695 goto __182 29696 } 29697 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+608, ts+12461, uintptr(0))) 29698 rc = TCL_ERROR 29699 __182: 29700 ; 29701 if !(*(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) > int64(0)) { 29702 goto __183 29703 } 29704 sqlite3.Xsqlite3_file_control(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, SQLITE_FCNTL_SIZE_LIMIT, bp+1168) 29705 __183: 29706 ; 29707 __178: 29708 ; 29709 deserialize_error: 29710 goto __3 29711 29712 __18: 29713 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+624, ts+12489, 29714 uintptr(0))) 29715 return TCL_ERROR 29716 29717 __19: 29718 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 29719 goto __3 29720 29721 __20: 29722 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_error_offset(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 29723 goto __3 29724 29725 __21: 29726 __22: 29727 pResult4 = uintptr(0) 29728 if !(objc != 3) { 29729 goto __184 29730 } 29731 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 29732 return TCL_ERROR 29733 __184: 29734 ; 29735 dbEvalInit(tls, bp+1176, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 29736 rc = dbEvalStep(tls, bp+1176) 29737 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 24) { 29738 goto __185 29739 } 29740 if !(rc == TCL_OK) { 29741 goto __187 29742 } 29743 pResult4 = dbEvalColumnValue(tls, bp+1176, 0) 29744 goto __188 29745 __187: 29746 if !(rc == TCL_BREAK) { 29747 goto __189 29748 } 29749 tcl.XTcl_ResetResult(tls, interp) 29750 __189: 29751 ; 29752 __188: 29753 ; 29754 goto __186 29755 __185: 29756 if !(rc == TCL_BREAK || rc == TCL_OK) { 29757 goto __190 29758 } 29759 pResult4 = tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(rc == TCL_OK) != 0)) 29760 __190: 29761 ; 29762 __186: 29763 ; 29764 dbEvalFinalize(tls, bp+1176) 29765 if !(pResult4 != 0) { 29766 goto __191 29767 } 29768 tcl.XTcl_SetObjResult(tls, interp, pResult4) 29769 __191: 29770 ; 29771 if !(rc == TCL_BREAK) { 29772 goto __192 29773 } 29774 rc = TCL_OK 29775 __192: 29776 ; 29777 goto __3 29778 29779 __23: 29780 evalFlags = 0 29781 __193: 29782 if !(objc > 3 && libc.AssignUintptr(&zOpt1, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) != uintptr(0) && int32(*(*int8)(unsafe.Pointer(zOpt1))) == '-') { 29783 goto __194 29784 } 29785 if !(libc.Xstrcmp(tls, zOpt1, ts+12537) == 0) { 29786 goto __195 29787 } 29788 evalFlags = evalFlags | SQLITE_EVAL_WITHOUTNULLS 29789 goto __196 29790 __195: 29791 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+640, ts+12551, zOpt1, ts+11945, uintptr(0))) 29792 return TCL_ERROR 29793 __196: 29794 ; 29795 objc-- 29796 objv += 8 29797 goto __193 29798 __194: 29799 ; 29800 if !(objc < 3 || objc > 5) { 29801 goto __197 29802 } 29803 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 29804 ts+12569) 29805 return TCL_ERROR 29806 __197: 29807 ; 29808 if !(objc == 3) { 29809 goto __198 29810 } 29811 pRet = tcl.XTcl_NewObj(tls) 29812 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 29813 dbEvalInit(tls, bp+1232, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 29814 __200: 29815 if !(TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, bp+1232))) { 29816 goto __201 29817 } 29818 dbEvalRowInfo(tls, bp+1232, bp+1288, uintptr(0)) 29819 i2 = 0 29820 __202: 29821 if !(i2 < *(*int32)(unsafe.Pointer(bp + 1288))) { 29822 goto __204 29823 } 29824 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, dbEvalColumnValue(tls, bp+1232, i2)) 29825 goto __203 29826 __203: 29827 i2++ 29828 goto __202 29829 goto __204 29830 __204: 29831 ; 29832 goto __200 29833 __201: 29834 ; 29835 dbEvalFinalize(tls, bp+1232) 29836 if !(rc == TCL_BREAK) { 29837 goto __205 29838 } 29839 tcl.XTcl_SetObjResult(tls, interp, pRet) 29840 rc = TCL_OK 29841 __205: 29842 ; 29843 __206: 29844 _objPtr1 = pRet 29845 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr1)).FrefCount, 1) <= 1) { 29846 goto __209 29847 } 29848 tcl.XTclFreeObj(tls, _objPtr1) 29849 __209: 29850 ; 29851 goto __207 29852 __207: 29853 if 0 != 0 { 29854 goto __206 29855 } 29856 goto __208 29857 __208: 29858 ; 29859 goto __199 29860 __198: 29861 pArray = uintptr(0) 29862 29863 if !(objc >= 5 && *(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))))) != 0) { 29864 goto __210 29865 } 29866 pArray = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 29867 __210: 29868 ; 29869 pScript = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 29870 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 29871 29872 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(DbEvalContext{}))) 29873 dbEvalInit(tls, p, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), pArray, evalFlags) 29874 29875 *(*ClientData)(unsafe.Pointer(bp + 1296)) = p 29876 *(*ClientData)(unsafe.Pointer(bp + 1296 + 1*8)) = pScript 29877 rc = DbEvalNextCmd(tls, bp+1296, interp, TCL_OK) 29878 __199: 29879 ; 29880 goto __3 29881 29882 __24: 29883 flags1 = SQLITE_UTF8 29884 *(*int32)(unsafe.Pointer(bp + 1312)) = -1 29885 *(*int32)(unsafe.Pointer(bp + 1368)) = SQLITE_NULL 29886 if !(objc < 4) { 29887 goto __211 29888 } 29889 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12605) 29890 return TCL_ERROR 29891 __211: 29892 ; 29893 i3 = 3 29894 __212: 29895 if !(i3 < objc-1) { 29896 goto __214 29897 } 29898 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8))) 29899 n1 = strlen30(tls, z2) 29900 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12628, uint64(n1)) == 0) { 29901 goto __215 29902 } 29903 if !(i3 == objc-2) { 29904 goto __217 29905 } 29906 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+672, ts+12638, z2, uintptr(0))) 29907 return TCL_ERROR 29908 __217: 29909 ; 29910 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3+1)*8)), bp+1312) != 0) { 29911 goto __218 29912 } 29913 return TCL_ERROR 29914 __218: 29915 ; 29916 if !(*(*int32)(unsafe.Pointer(bp + 1312)) < 0) { 29917 goto __219 29918 } 29919 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+696, ts+12668, 29920 uintptr(0))) 29921 return TCL_ERROR 29922 __219: 29923 ; 29924 i3++ 29925 goto __216 29926 __215: 29927 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12709, uint64(n1)) == 0) { 29928 goto __220 29929 } 29930 flags1 = flags1 | SQLITE_DETERMINISTIC 29931 goto __221 29932 __220: 29933 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12724, uint64(n1)) == 0) { 29934 goto __222 29935 } 29936 flags1 = flags1 | SQLITE_DIRECTONLY 29937 goto __223 29938 __222: 29939 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12736, uint64(n1)) == 0) { 29940 goto __224 29941 } 29942 flags1 = flags1 | SQLITE_INNOCUOUS 29943 goto __225 29944 __224: 29945 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12747, uint64(n1)) == 0) { 29946 goto __226 29947 } 29948 *(*[6]uintptr)(unsafe.Pointer(bp + 1320)) = [6]uintptr{ts + 8470, ts + 12759, ts + 12764, ts + 12769, ts + 12774, uintptr(0)} 29949 29950 if !(i3 == objc-2) { 29951 goto __228 29952 } 29953 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+712, ts+12638, z2, uintptr(0))) 29954 return TCL_ERROR 29955 __228: 29956 ; 29957 i3++ 29958 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) { 29959 goto __229 29960 } 29961 return TCL_ERROR 29962 __229: 29963 ; 29964 *(*int32)(unsafe.Pointer(bp + 1368))++ 29965 goto __227 29966 __226: 29967 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+736, ts+11851, z2, 29968 ts+12783, uintptr(0))) 29969 return TCL_ERROR 29970 __227: 29971 ; 29972 __225: 29973 ; 29974 __223: 29975 ; 29976 __221: 29977 ; 29978 __216: 29979 ; 29980 goto __213 29981 __213: 29982 i3++ 29983 goto __212 29984 goto __214 29985 __214: 29986 ; 29987 pScript1 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 29988 zName1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29989 pFunc = findSqlFunc(tls, pDb, zName1) 29990 if !(pFunc == uintptr(0)) { 29991 goto __230 29992 } 29993 return TCL_ERROR 29994 __230: 29995 ; 29996 if !((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript != 0) { 29997 goto __231 29998 } 29999 __232: 30000 _objPtr2 = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 30001 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr2)).FrefCount, 1) <= 1) { 30002 goto __235 30003 } 30004 tcl.XTclFreeObj(tls, _objPtr2) 30005 __235: 30006 ; 30007 goto __233 30008 __233: 30009 if 0 != 0 { 30010 goto __232 30011 } 30012 goto __234 30013 __234: 30014 ; 30015 __231: 30016 ; 30017 (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript = pScript1 30018 (*Tcl_Obj)(unsafe.Pointer(pScript1)).FrefCount++ 30019 (*SqlFunc)(unsafe.Pointer(pFunc)).FuseEvalObjv = safeToUseEvalObjv(tls, interp, pScript1) 30020 (*SqlFunc)(unsafe.Pointer(pFunc)).FeType = *(*int32)(unsafe.Pointer(bp + 1368)) 30021 rc = sqlite3.Xsqlite3_create_function(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName1, *(*int32)(unsafe.Pointer(bp + 1312)), flags1, 30022 pFunc, *(*uintptr)(unsafe.Pointer(&struct { 30023 f func(*libc.TLS, uintptr, int32, uintptr) 30024 }{tclSqlFunc})), uintptr(0), uintptr(0)) 30025 if !(rc != SQLITE_OK) { 30026 goto __236 30027 } 30028 rc = TCL_ERROR 30029 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 30030 __236: 30031 ; 30032 goto __3 30033 30034 __25: 30035 isReadonly1 = 0 30036 zDb = ts + 85 30037 30038 if !(objc > 3 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), ts+12434) == 0) { 30039 goto __237 30040 } 30041 isReadonly1 = 1 30042 __237: 30043 ; 30044 if !(objc != 5+isReadonly1 && objc != 6+isReadonly1) { 30045 goto __238 30046 } 30047 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12861) 30048 return TCL_ERROR 30049 __238: 30050 ; 30051 if !(objc == 6+isReadonly1) { 30052 goto __239 30053 } 30054 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(2+isReadonly1)*8))) 30055 __239: 30056 ; 30057 zTable1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8))) 30058 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 30059 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+1376) 30060 30061 if !(rc == TCL_OK) { 30062 goto __240 30063 } 30064 rc = createIncrblobChannel(tls, 30065 interp, pDb, zDb, zTable1, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 1376)), isReadonly1) 30066 __240: 30067 ; 30068 goto __3 30069 30070 __26: 30071 sqlite3.Xsqlite3_interrupt(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30072 goto __3 30073 30074 __27: 30075 if !(objc != 2 && objc != 3) { 30076 goto __241 30077 } 30078 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12897) 30079 return TCL_ERROR 30080 __241: 30081 ; 30082 if !(objc == 3) { 30083 goto __242 30084 } 30085 zNull1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1384) 30086 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0) { 30087 goto __243 30088 } 30089 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 30090 __243: 30091 ; 30092 if !(zNull1 != 0 && *(*int32)(unsafe.Pointer(bp + 1384)) > 0) { 30093 goto __244 30094 } 30095 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1384))+1)) 30096 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, zNull1, uint64(*(*int32)(unsafe.Pointer(bp + 1384)))) 30097 *(*int8)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FzNull + uintptr(*(*int32)(unsafe.Pointer(bp + 1384))))) = int8(0) 30098 goto __245 30099 __244: 30100 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = uintptr(0) 30101 __245: 30102 ; 30103 __242: 30104 ; 30105 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, -1)) 30106 goto __3 30107 30108 __28: 30109 if !(objc != 2) { 30110 goto __246 30111 } 30112 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30113 return TCL_ERROR 30114 __246: 30115 ; 30116 rowid = sqlite3.Xsqlite3_last_insert_rowid(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30117 pResult5 = tcl.XTcl_GetObjResult(tls, interp) 30118 tcl.XTcl_SetWideIntObj(tls, pResult5, rowid) 30119 goto __3 30120 30121 __29: 30122 if !(objc == 2) { 30123 goto __247 30124 } 30125 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30126 goto __249 30127 } 30128 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+768, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, uintptr(0))) 30129 __249: 30130 ; 30131 goto __248 30132 __247: 30133 if !(objc == 4) { 30134 goto __250 30135 } 30136 if !(TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1388)) { 30137 goto __252 30138 } 30139 return TCL_ERROR 30140 __252: 30141 ; 30142 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30143 goto __253 30144 } 30145 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 30146 __253: 30147 ; 30148 zProgress = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1392) 30149 if !(zProgress != 0 && *(*int32)(unsafe.Pointer(bp + 1392)) > 0) { 30150 goto __254 30151 } 30152 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 30153 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, zProgress, uint64(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 30154 goto __255 30155 __254: 30156 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = uintptr(0) 30157 __255: 30158 ; 30159 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30160 goto __256 30161 } 30162 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30163 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1388)), *(*uintptr)(unsafe.Pointer(&struct { 30164 f func(*libc.TLS, uintptr) int32 30165 }{DbProgressHandler})), pDb) 30166 goto __257 30167 __256: 30168 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, 0, uintptr(0), uintptr(0)) 30169 __257: 30170 ; 30171 goto __251 30172 __250: 30173 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12907) 30174 return TCL_ERROR 30175 __251: 30176 ; 30177 __248: 30178 ; 30179 goto __3 30180 30181 __30: 30182 if !(objc > 3) { 30183 goto __258 30184 } 30185 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30186 return TCL_ERROR 30187 goto __259 30188 __258: 30189 if !(objc == 2) { 30190 goto __260 30191 } 30192 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30193 goto __262 30194 } 30195 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+784, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, uintptr(0))) 30196 __262: 30197 ; 30198 goto __261 30199 __260: 30200 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30201 goto __263 30202 } 30203 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 30204 __263: 30205 ; 30206 zProfile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1396) 30207 if !(zProfile != 0 && *(*int32)(unsafe.Pointer(bp + 1396)) > 0) { 30208 goto __264 30209 } 30210 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 30211 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, zProfile, uint64(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 30212 goto __265 30213 __264: 30214 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = uintptr(0) 30215 __265: 30216 ; 30217 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30218 goto __266 30219 } 30220 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30221 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30222 f func(*libc.TLS, uintptr, uintptr, sqlite_uint64) 30223 }{DbProfileHandler})), pDb) 30224 goto __267 30225 __266: 30226 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30227 __267: 30228 ; 30229 __261: 30230 ; 30231 __259: 30232 ; 30233 goto __3 30234 30235 __31: 30236 if !(objc != 3) { 30237 goto __268 30238 } 30239 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12918) 30240 return TCL_ERROR 30241 __268: 30242 ; 30243 goto __3 30244 30245 __32: 30246 nTimeout = 0 30247 30248 if !(objc == 3) { 30249 goto __269 30250 } 30251 zDestDb = ts + 85 30252 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30253 goto __270 30254 __269: 30255 if !(objc == 4) { 30256 goto __271 30257 } 30258 zDestDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30259 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 30260 goto __272 30261 __271: 30262 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 30263 return TCL_ERROR 30264 __272: 30265 ; 30266 __270: 30267 ; 30268 rc = sqlite3.Xsqlite3_open_v2(tls, zSrcFile, bp+1400, 30269 SQLITE_OPEN_READONLY|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 30270 if !(rc != SQLITE_OK) { 30271 goto __273 30272 } 30273 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+800, ts+12922, 30274 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))), uintptr(0))) 30275 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30276 return TCL_ERROR 30277 __273: 30278 ; 30279 pBackup1 = sqlite3.Xsqlite3_backup_init(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zDestDb, *(*uintptr)(unsafe.Pointer(bp + 1400)), ts+85) 30280 if !(pBackup1 == uintptr(0)) { 30281 goto __274 30282 } 30283 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+824, ts+12952, 30284 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30285 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30286 return TCL_ERROR 30287 __274: 30288 ; 30289 __275: 30290 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup1, 100)) == SQLITE_OK || 30291 rc == SQLITE_BUSY) { 30292 goto __276 30293 } 30294 if !(rc == SQLITE_BUSY) { 30295 goto __277 30296 } 30297 if !(libc.PostIncInt32(&nTimeout, 1) >= 3) { 30298 goto __278 30299 } 30300 goto __276 30301 __278: 30302 ; 30303 sqlite3.Xsqlite3_sleep(tls, 100) 30304 __277: 30305 ; 30306 goto __275 30307 __276: 30308 ; 30309 sqlite3.Xsqlite3_backup_finish(tls, pBackup1) 30310 if !(rc == SQLITE_DONE) { 30311 goto __279 30312 } 30313 rc = TCL_OK 30314 goto __280 30315 __279: 30316 if !(rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { 30317 goto __281 30318 } 30319 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+848, ts+12969, 30320 uintptr(0))) 30321 rc = TCL_ERROR 30322 goto __282 30323 __281: 30324 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+864, ts+12952, 30325 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30326 rc = TCL_ERROR 30327 __282: 30328 ; 30329 __280: 30330 ; 30331 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 30332 goto __3 30333 30334 __33: 30335 if objc >= 3 { 30336 zSchema1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30337 } else { 30338 zSchema1 = ts + 85 30339 } 30340 *(*sqlite3_int64)(unsafe.Pointer(bp + 1408)) = int64(0) 30341 if !(objc != 2 && objc != 3) { 30342 goto __283 30343 } 30344 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13006) 30345 rc = TCL_ERROR 30346 goto __284 30347 __283: 30348 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(SQLITE_SERIALIZE_NOCOPY)) 30349 if !(pData1 != 0) { 30350 goto __285 30351 } 30352 needFree = 0 30353 goto __286 30354 __285: 30355 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(0)) 30356 needFree = 1 30357 __286: 30358 ; 30359 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pData1, int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 1408))))) 30360 if !(needFree != 0) { 30361 goto __287 30362 } 30363 sqlite3.Xsqlite3_free(tls, pData1) 30364 __287: 30365 ; 30366 __284: 30367 ; 30368 goto __3 30369 30370 __34: 30371 if !(objc != 3) { 30372 goto __288 30373 } 30374 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13017) 30375 return TCL_ERROR 30376 __288: 30377 ; 30378 zOp = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30379 if !(libc.Xstrcmp(tls, zOp, ts+9485) == 0) { 30380 goto __289 30381 } 30382 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnStep 30383 goto __290 30384 __289: 30385 if !(libc.Xstrcmp(tls, zOp, ts+13039) == 0) { 30386 goto __291 30387 } 30388 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnSort 30389 goto __292 30390 __291: 30391 if !(libc.Xstrcmp(tls, zOp, ts+13044) == 0) { 30392 goto __293 30393 } 30394 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex 30395 goto __294 30396 __293: 30397 if !(libc.Xstrcmp(tls, zOp, ts+13054) == 0) { 30398 goto __295 30399 } 30400 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep 30401 goto __296 30402 __295: 30403 tcl.XTcl_AppendResult(tls, interp, 30404 libc.VaList(bp+888, ts+13061, 30405 uintptr(0))) 30406 return TCL_ERROR 30407 __296: 30408 ; 30409 __294: 30410 ; 30411 __292: 30412 ; 30413 __290: 30414 ; 30415 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, v2)) 30416 goto __3 30417 30418 __35: 30419 if !(objc != 3) { 30420 goto __297 30421 } 30422 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13117) 30423 return TCL_ERROR 30424 __297: 30425 ; 30426 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1416) != 0) { 30427 goto __298 30428 } 30429 return TCL_ERROR 30430 __298: 30431 ; 30432 sqlite3.Xsqlite3_busy_timeout(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1416))) 30433 goto __3 30434 30435 __36: 30436 if !(objc != 2) { 30437 goto __299 30438 } 30439 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30440 return TCL_ERROR 30441 __299: 30442 ; 30443 pResult6 = tcl.XTcl_GetObjResult(tls, interp) 30444 tcl.XTcl_SetWideIntObj(tls, pResult6, sqlite3.Xsqlite3_total_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 30445 goto __3 30446 30447 __37: 30448 if !(objc > 3) { 30449 goto __300 30450 } 30451 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30452 return TCL_ERROR 30453 goto __301 30454 __300: 30455 if !(objc == 2) { 30456 goto __302 30457 } 30458 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30459 goto __304 30460 } 30461 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+904, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, uintptr(0))) 30462 __304: 30463 ; 30464 goto __303 30465 __302: 30466 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30467 goto __305 30468 } 30469 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 30470 __305: 30471 ; 30472 zTrace = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1420) 30473 if !(zTrace != 0 && *(*int32)(unsafe.Pointer(bp + 1420)) > 0) { 30474 goto __306 30475 } 30476 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 30477 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, zTrace, uint64(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 30478 goto __307 30479 __306: 30480 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = uintptr(0) 30481 __307: 30482 ; 30483 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 30484 goto __308 30485 } 30486 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30487 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30488 f func(*libc.TLS, uintptr, uintptr) 30489 }{DbTraceHandler})), pDb) 30490 goto __309 30491 __308: 30492 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30493 __309: 30494 ; 30495 __303: 30496 ; 30497 __301: 30498 ; 30499 goto __3 30500 30501 __38: 30502 if !(objc > 4) { 30503 goto __310 30504 } 30505 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13130) 30506 return TCL_ERROR 30507 goto __311 30508 __310: 30509 if !(objc == 2) { 30510 goto __312 30511 } 30512 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 30513 goto __314 30514 } 30515 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+920, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, uintptr(0))) 30516 __314: 30517 ; 30518 goto __313 30519 __312: 30520 wMask = int64(0) 30521 if !(objc == 4) { 30522 goto __315 30523 } 30524 if !(TCL_OK != tcl.XTcl_ListObjLength(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1424)) { 30525 goto __317 30526 } 30527 return TCL_ERROR 30528 __317: 30529 ; 30530 i4 = 0 30531 __318: 30532 if !(i4 < *(*int32)(unsafe.Pointer(bp + 1424))) { 30533 goto __320 30534 } 30535 if !(TCL_OK != tcl.XTcl_ListObjIndex(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), i4, bp+1432)) { 30536 goto __321 30537 } 30538 return TCL_ERROR 30539 __321: 30540 ; 30541 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) { 30542 goto __322 30543 } 30544 pError = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, interp)) 30545 (*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount++ 30546 if !(TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), bp+1448)) { 30547 goto __324 30548 } 30549 __326: 30550 _objPtr3 = pError 30551 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr3)).FrefCount, 1) <= 1) { 30552 goto __329 30553 } 30554 tcl.XTclFreeObj(tls, _objPtr3) 30555 __329: 30556 ; 30557 goto __327 30558 __327: 30559 if 0 != 0 { 30560 goto __326 30561 } 30562 goto __328 30563 __328: 30564 ; 30565 wMask = wMask | *(*Tcl_WideInt)(unsafe.Pointer(bp + 1448)) 30566 goto __325 30567 __324: 30568 tcl.XTcl_SetObjResult(tls, interp, pError) 30569 __330: 30570 _objPtr4 = pError 30571 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr4)).FrefCount, 1) <= 1) { 30572 goto __333 30573 } 30574 tcl.XTclFreeObj(tls, _objPtr4) 30575 __333: 30576 ; 30577 goto __331 30578 __331: 30579 if 0 != 0 { 30580 goto __330 30581 } 30582 goto __332 30583 __332: 30584 ; 30585 return TCL_ERROR 30586 __325: 30587 ; 30588 goto __323 30589 __322: 30590 switch uint32(*(*int32)(unsafe.Pointer(bp + 1440))) { 30591 case uint32(0): 30592 goto __335 30593 case uint32(1): 30594 goto __336 30595 case uint32(2): 30596 goto __337 30597 case uint32(3): 30598 goto __338 30599 } 30600 goto __334 30601 __335: 30602 wMask = wMask | int64(SQLITE_TRACE_STMT) 30603 goto __334 30604 __336: 30605 wMask = wMask | int64(SQLITE_TRACE_PROFILE) 30606 goto __334 30607 __337: 30608 wMask = wMask | int64(SQLITE_TRACE_ROW) 30609 goto __334 30610 __338: 30611 wMask = wMask | int64(SQLITE_TRACE_CLOSE) 30612 goto __334 30613 __334: 30614 ; 30615 __323: 30616 ; 30617 goto __319 30618 __319: 30619 i4++ 30620 goto __318 30621 goto __320 30622 __320: 30623 ; 30624 goto __316 30625 __315: 30626 wMask = int64(SQLITE_TRACE_STMT) 30627 __316: 30628 ; 30629 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 30630 goto __339 30631 } 30632 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 30633 __339: 30634 ; 30635 zTraceV2 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1424) 30636 if !(zTraceV2 != 0 && *(*int32)(unsafe.Pointer(bp + 1424)) > 0) { 30637 goto __340 30638 } 30639 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 30640 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, zTraceV2, uint64(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 30641 goto __341 30642 __340: 30643 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = uintptr(0) 30644 __341: 30645 ; 30646 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 30647 goto __342 30648 } 30649 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30650 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(wMask), *(*uintptr)(unsafe.Pointer(&struct { 30651 f func(*libc.TLS, uint32, uintptr, uintptr, uintptr) int32 30652 }{DbTraceV2Handler})), pDb) 30653 goto __343 30654 __342: 30655 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(0), uintptr(0), uintptr(0)) 30656 __343: 30657 ; 30658 __313: 30659 ; 30660 __311: 30661 ; 30662 goto __3 30663 30664 __39: 30665 zBegin = ts + 13159 30666 if !(objc != 3 && objc != 4) { 30667 goto __344 30668 } 30669 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13186) 30670 return TCL_ERROR 30671 __344: 30672 ; 30673 if !((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0 && objc == 4) { 30674 goto __345 30675 } 30676 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) { 30677 goto __346 30678 } 30679 return TCL_ERROR 30680 __346: 30681 ; 30682 switch uint32(*(*int32)(unsafe.Pointer(bp + 1456))) { 30683 case uint32(0): 30684 goto __348 30685 case uint32(1): 30686 goto __349 30687 case uint32(2): 30688 goto __350 30689 } 30690 goto __347 30691 __348: 30692 ; 30693 goto __347 30694 __349: 30695 zBegin = ts + 13217 30696 goto __347 30697 __350: 30698 zBegin = ts + 13233 30699 goto __347 30700 __347: 30701 ; 30702 __345: 30703 ; 30704 pScript2 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30705 30706 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 30707 rc = sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zBegin, uintptr(0), uintptr(0), uintptr(0)) 30708 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 30709 if !(rc != SQLITE_OK) { 30710 goto __351 30711 } 30712 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+936, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30713 return TCL_ERROR 30714 __351: 30715 ; 30716 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction++ 30717 30718 addDatabaseRef(tls, pDb) 30719 if !(DbUseNre(tls) != 0) { 30720 goto __352 30721 } 30722 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 30723 f func(*libc.TLS, uintptr, uintptr, int32) int32 30724 }{DbTransPostCmd})), *(*uintptr)(unsafe.Pointer(bp + 1464)), uintptr(0), uintptr(0), uintptr(0)) 30725 tcl.XTcl_NREvalObj(tls, interp, pScript2, 0) 30726 goto __353 30727 __352: 30728 rc = DbTransPostCmd(tls, bp+1464, interp, tcl.XTcl_EvalObjEx(tls, interp, pScript2, 0)) 30729 __353: 30730 ; 30731 goto __3 30732 30733 __40: 30734 if !(objc != 2 && objc != 3) { 30735 goto __354 30736 } 30737 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 30738 rc = TCL_ERROR 30739 goto __355 30740 __354: 30741 xNotify = uintptr(0) 30742 pNotifyArg = uintptr(0) 30743 30744 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify != 0) { 30745 goto __356 30746 } 30747 __357: 30748 _objPtr5 = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 30749 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr5)).FrefCount, 1) <= 1) { 30750 goto __360 30751 } 30752 tcl.XTclFreeObj(tls, _objPtr5) 30753 __360: 30754 ; 30755 goto __358 30756 __358: 30757 if 0 != 0 { 30758 goto __357 30759 } 30760 goto __359 30761 __359: 30762 ; 30763 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 30764 __356: 30765 ; 30766 if !(objc == 3) { 30767 goto __361 30768 } 30769 xNotify = *(*uintptr)(unsafe.Pointer(&struct { 30770 f func(*libc.TLS, uintptr, int32) 30771 }{DbUnlockNotify})) 30772 pNotifyArg = pDb 30773 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 30774 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount++ 30775 __361: 30776 ; 30777 if !(sqlite3.Xsqlite3_unlock_notify(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, xNotify, pNotifyArg) != 0) { 30778 goto __362 30779 } 30780 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+952, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30781 rc = TCL_ERROR 30782 __362: 30783 ; 30784 __355: 30785 ; 30786 goto __3 30787 30788 __41: 30789 if !(objc < 3) { 30790 goto __363 30791 } 30792 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13258) 30793 __363: 30794 ; 30795 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) { 30796 goto __364 30797 } 30798 return TCL_ERROR 30799 __364: 30800 ; 30801 switch uint32(*(*int32)(unsafe.Pointer(bp + 1472))) { 30802 case uint32(0): 30803 goto __366 30804 30805 case uint32(2): 30806 goto __367 30807 30808 case uint32(1): 30809 goto __368 30810 30811 case uint32(3): 30812 goto __369 30813 case uint32(4): 30814 goto __370 30815 } 30816 goto __365 30817 __366: 30818 nCol2 = sqlite3.Xsqlite3_preupdate_count(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30819 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol2)) 30820 goto __365 30821 30822 __367: 30823 if !(objc > 4) { 30824 goto __371 30825 } 30826 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13277) 30827 return TCL_ERROR 30828 __371: 30829 ; 30830 DbHookCmd(tls, interp, pDb, func() uintptr { 30831 if objc == 4 { 30832 return *(*uintptr)(unsafe.Pointer(objv + 3*8)) 30833 } 30834 return uintptr(0) 30835 }(), pDb+112) 30836 goto __365 30837 30838 __368: 30839 if !(objc != 3) { 30840 goto __372 30841 } 30842 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+584) 30843 return TCL_ERROR 30844 __372: 30845 ; 30846 pRet1 = tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_preupdate_depth(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 30847 tcl.XTcl_SetObjResult(tls, interp, pRet1) 30848 goto __365 30849 30850 __369: 30851 __370: 30852 if !(objc != 4) { 30853 goto __373 30854 } 30855 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+13291) 30856 return TCL_ERROR 30857 __373: 30858 ; 30859 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1476) != 0) { 30860 goto __374 30861 } 30862 return TCL_ERROR 30863 __374: 30864 ; 30865 if !(*(*int32)(unsafe.Pointer(bp + 1472)) == 4) { 30866 goto __375 30867 } 30868 rc = sqlite3.Xsqlite3_preupdate_old(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 30869 goto __376 30870 __375: 30871 ; 30872 rc = sqlite3.Xsqlite3_preupdate_new(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 30873 __376: 30874 ; 30875 if !(rc == SQLITE_OK) { 30876 goto __377 30877 } 30878 pObj1 = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1480))), -1) 30879 tcl.XTcl_SetObjResult(tls, interp, pObj1) 30880 goto __378 30881 __377: 30882 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+968, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30883 return TCL_ERROR 30884 __378: 30885 ; 30886 __365: 30887 ; 30888 goto __3 30889 30890 __42: 30891 __43: 30892 __44: 30893 ppHook = uintptr(0) 30894 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 41) { 30895 goto __379 30896 } 30897 ppHook = pDb + 128 30898 __379: 30899 ; 30900 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 39) { 30901 goto __380 30902 } 30903 ppHook = pDb + 104 30904 __380: 30905 ; 30906 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 30) { 30907 goto __381 30908 } 30909 ppHook = pDb + 120 30910 __381: 30911 ; 30912 if !(objc > 3) { 30913 goto __382 30914 } 30915 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 30916 return TCL_ERROR 30917 __382: 30918 ; 30919 DbHookCmd(tls, interp, pDb, func() uintptr { 30920 if objc == 3 { 30921 return *(*uintptr)(unsafe.Pointer(objv + 2*8)) 30922 } 30923 return uintptr(0) 30924 }(), ppHook) 30925 goto __3 30926 30927 __45: 30928 i5 = 2 30929 __383: 30930 if !(i5 < objc) { 30931 goto __385 30932 } 30933 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8))) 30934 30935 if !(libc.Xstrcmp(tls, zArg, ts+13297) == 0 && i5+1 < objc) { 30936 goto __386 30937 } 30938 i5++ 30939 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8)), pDb+228) != 0) { 30940 goto __388 30941 } 30942 return TCL_ERROR 30943 __388: 30944 ; 30945 goto __387 30946 __386: 30947 if !(libc.Xstrcmp(tls, zArg, ts+13317) == 0) { 30948 goto __389 30949 } 30950 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+1488, ts+9889, 30951 libc.VaList(bp+984, func() uintptr { 30952 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 30953 return (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpStmt 30954 } 30955 return uintptr(0) 30956 }())) 30957 tcl.XTcl_SetResult(tls, interp, bp+1488, uintptr(1)) 30958 goto __390 30959 __389: 30960 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+992, ts+13332, zArg, uintptr(0))) 30961 return TCL_ERROR 30962 __390: 30963 ; 30964 __387: 30965 ; 30966 goto __384 30967 __384: 30968 i5++ 30969 goto __383 30970 goto __385 30971 __385: 30972 ; 30973 if !(i5 == 2) { 30974 goto __391 30975 } 30976 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_libversion(tls), uintptr(0)) 30977 __391: 30978 ; 30979 goto __3 30980 30981 __3: 30982 ; 30983 return rc 30984 } 30985 30986 type DbConfigChoices = struct { 30987 FzName uintptr 30988 Fop int32 30989 F__ccgo_pad1 [4]byte 30990 } 30991 30992 var DB_strs = [43]uintptr{ 30993 ts + 13351, ts + 13362, ts + 13369, 30994 ts + 13383, ts + 13388, ts + 13394, 30995 ts + 9490, ts + 13402, ts + 13410, 30996 ts + 13427, ts + 13439, ts + 13448, 30997 ts + 13455, ts + 13460, ts + 13472, 30998 ts + 13494, ts + 13504, ts + 4896, 30999 ts + 13516, ts + 13523, ts + 10868, 31000 ts + 13532, ts + 13542, ts + 13560, 31001 ts + 13570, ts + 13580, ts + 13590, 31002 ts + 9564, ts + 13598, ts + 13604, 31003 ts + 13612, ts + 13626, ts + 13636, 31004 ts + 13643, ts + 13651, ts + 13665, 31005 ts + 13671, ts + 13680, ts + 13692, 31006 ts + 13706, ts + 13718, ts + 13726, 31007 uintptr(0), 31008 } 31009 var aDbConfig = [16]DbConfigChoices{ 31010 {FzName: ts + 13735, Fop: SQLITE_DBCONFIG_DEFENSIVE}, 31011 {FzName: ts + 13745, Fop: SQLITE_DBCONFIG_DQS_DDL}, 31012 {FzName: ts + 13753, Fop: SQLITE_DBCONFIG_DQS_DML}, 31013 {FzName: ts + 13761, Fop: SQLITE_DBCONFIG_ENABLE_FKEY}, 31014 {FzName: ts + 13773, Fop: SQLITE_DBCONFIG_ENABLE_QPSG}, 31015 {FzName: ts + 13785, Fop: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 31016 {FzName: ts + 13800, Fop: SQLITE_DBCONFIG_ENABLE_VIEW}, 31017 {FzName: ts + 13812, Fop: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 31018 {FzName: ts + 13827, Fop: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 31019 {FzName: ts + 13846, Fop: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 31020 {FzName: ts + 13865, Fop: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 31021 {FzName: ts + 13880, Fop: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 31022 {FzName: ts + 13897, Fop: SQLITE_DBCONFIG_RESET_DATABASE}, 31023 {FzName: ts + 13912, Fop: SQLITE_DBCONFIG_TRIGGER_EQP}, 31024 {FzName: ts + 13924, Fop: SQLITE_DBCONFIG_TRUSTED_SCHEMA}, 31025 {FzName: ts + 13939, Fop: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 31026 } 31027 var TTYPE_strs = [5]uintptr{ 31028 ts + 13955, ts + 13590, ts + 13965, ts + 9490, uintptr(0), 31029 } 31030 var TTYPE_strs1 = [4]uintptr{ 31031 ts + 13969, ts + 13978, ts + 13988, uintptr(0), 31032 } 31033 var azSub = [6]uintptr{ts + 1965, ts + 13998, ts + 14004, ts + 14009, ts + 14013, uintptr(0)} 31034 31035 func DbObjCmdAdaptor(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31036 return tcl.XTcl_NRCallObjProc(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31037 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31038 }{DbObjCmd})), cd, objc, objv) 31039 } 31040 31041 func sqliteCmdUsage(tls *libc.TLS, interp uintptr, objv uintptr) int32 { 31042 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 31043 ts+14017) 31044 return TCL_ERROR 31045 } 31046 31047 func DbMain(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31048 bp := tls.Alloc(336) 31049 defer tls.Free(336) 31050 31051 var p uintptr 31052 var zArg uintptr 31053 var zErrMsg uintptr 31054 var i int32 31055 var zFile uintptr = uintptr(0) 31056 var zVfs uintptr = uintptr(0) 31057 var flags int32 31058 *(*int32)(unsafe.Pointer(bp + 112)) = 1 31059 31060 var rc int32 31061 31062 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX 31063 31064 if objc == 1 { 31065 return sqliteCmdUsage(tls, interp, objv) 31066 } 31067 if objc == 2 { 31068 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 31069 if libc.Xstrcmp(tls, zArg, ts+14163) == 0 { 31070 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_libversion(tls), uintptr(0))) 31071 return TCL_OK 31072 } 31073 if libc.Xstrcmp(tls, zArg, ts+14172) == 0 { 31074 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3_sourceid(tls), uintptr(0))) 31075 return TCL_OK 31076 } 31077 if libc.Xstrcmp(tls, zArg, ts+14182) == 0 { 31078 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+14193, uintptr(0))) 31079 return TCL_OK 31080 } 31081 if int32(*(*int8)(unsafe.Pointer(zArg))) == '-' { 31082 return sqliteCmdUsage(tls, interp, objv) 31083 } 31084 } 31085 for i = 2; i < objc; i++ { 31086 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 31087 if int32(*(*int8)(unsafe.Pointer(zArg))) != '-' { 31088 if zFile != uintptr(0) { 31089 return sqliteCmdUsage(tls, interp, objv) 31090 } 31091 zFile = zArg 31092 continue 31093 } 31094 if i == objc-1 { 31095 return sqliteCmdUsage(tls, interp, objv) 31096 } 31097 i++ 31098 if libc.Xstrcmp(tls, zArg, ts+14195) == 0 { 31099 } else if libc.Xstrcmp(tls, zArg, ts+14200) == 0 { 31100 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 31101 } else if libc.Xstrcmp(tls, zArg, ts+12434) == 0 { 31102 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0 { 31103 return TCL_ERROR 31104 } 31105 if *(*int32)(unsafe.Pointer(bp + 88)) != 0 { 31106 flags = flags & libc.CplInt32(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE) 31107 flags = flags | SQLITE_OPEN_READONLY 31108 } else { 31109 flags = flags & libc.CplInt32(SQLITE_OPEN_READONLY) 31110 flags = flags | SQLITE_OPEN_READWRITE 31111 } 31112 } else if libc.Xstrcmp(tls, zArg, ts+14205) == 0 { 31113 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+92) != 0 { 31114 return TCL_ERROR 31115 } 31116 if *(*int32)(unsafe.Pointer(bp + 92)) != 0 && flags&SQLITE_OPEN_READONLY == 0 { 31117 flags = flags | SQLITE_OPEN_CREATE 31118 } else { 31119 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 31120 } 31121 } else if libc.Xstrcmp(tls, zArg, ts+14213) == 0 { 31122 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+96) != 0 { 31123 return TCL_ERROR 31124 } 31125 if *(*int32)(unsafe.Pointer(bp + 96)) != 0 { 31126 flags = flags | SQLITE_OPEN_NOFOLLOW 31127 } else { 31128 flags = flags & libc.CplInt32(SQLITE_OPEN_NOFOLLOW) 31129 } 31130 } else if libc.Xstrcmp(tls, zArg, ts+14223) == 0 { 31131 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+100) != 0 { 31132 return TCL_ERROR 31133 } 31134 if *(*int32)(unsafe.Pointer(bp + 100)) != 0 { 31135 flags = flags | SQLITE_OPEN_NOMUTEX 31136 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31137 } else { 31138 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31139 } 31140 } else if libc.Xstrcmp(tls, zArg, ts+14232) == 0 { 31141 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+104) != 0 { 31142 return TCL_ERROR 31143 } 31144 if *(*int32)(unsafe.Pointer(bp + 104)) != 0 { 31145 flags = flags | SQLITE_OPEN_FULLMUTEX 31146 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31147 } else { 31148 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31149 } 31150 } else if libc.Xstrcmp(tls, zArg, ts+14243) == 0 { 31151 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+108) != 0 { 31152 return TCL_ERROR 31153 } 31154 if *(*int32)(unsafe.Pointer(bp + 108)) != 0 { 31155 flags = flags | SQLITE_OPEN_URI 31156 } else { 31157 flags = flags & libc.CplInt32(SQLITE_OPEN_URI) 31158 } 31159 } else if libc.Xstrcmp(tls, zArg, ts+14248) == 0 { 31160 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+112) != 0 { 31161 return TCL_ERROR 31162 } 31163 } else { 31164 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+12444, zArg, uintptr(0))) 31165 return TCL_ERROR 31166 } 31167 } 31168 zErrMsg = uintptr(0) 31169 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqliteDb{}))) 31170 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(SqliteDb{}))) 31171 if zFile == uintptr(0) { 31172 zFile = ts + 584 31173 } 31174 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31175 zFile = tcl.XTcl_TranslateFileName(tls, interp, zFile, bp+120) 31176 } 31177 rc = sqlite3.Xsqlite3_open_v2(tls, zFile, p, flags, zVfs) 31178 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31179 tcl.XTcl_DStringFree(tls, bp+120) 31180 } 31181 if (*SqliteDb)(unsafe.Pointer(p)).Fdb != 0 { 31182 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) { 31183 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb))) 31184 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) 31185 (*SqliteDb)(unsafe.Pointer(p)).Fdb = uintptr(0) 31186 } 31187 } else { 31188 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+80, sqlite3.Xsqlite3_errstr(tls, rc))) 31189 } 31190 if (*SqliteDb)(unsafe.Pointer(p)).Fdb == uintptr(0) { 31191 tcl.XTcl_SetResult(tls, interp, zErrMsg, uintptr(1)) 31192 tcl.XTcl_Free(tls, p) 31193 sqlite3.Xsqlite3_free(tls, zErrMsg) 31194 return TCL_ERROR 31195 } 31196 (*SqliteDb)(unsafe.Pointer(p)).FmaxStmt = NUM_PREPARED_STMTS 31197 (*SqliteDb)(unsafe.Pointer(p)).FopenFlags = flags & SQLITE_OPEN_URI 31198 (*SqliteDb)(unsafe.Pointer(p)).Finterp = interp 31199 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 31200 if DbUseNre(tls) != 0 { 31201 tcl.XTcl_NRCreateCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31202 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31203 }{DbObjCmdAdaptor})), *(*uintptr)(unsafe.Pointer(&struct { 31204 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31205 }{DbObjCmd})), 31206 p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31207 } else { 31208 tcl.XTcl_CreateObjCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31209 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31210 }{DbObjCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31211 } 31212 (*SqliteDb)(unsafe.Pointer(p)).FnRef = 1 31213 return TCL_OK 31214 } 31215 31216 func Sqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31217 var rc int32 31218 if 1 != 0 { 31219 rc = TCL_OK 31220 } else { 31221 rc = TCL_ERROR 31222 } 31223 if rc == TCL_OK { 31224 tcl.XTcl_CreateObjCommand(tls, interp, ts+14267, *(*uintptr)(unsafe.Pointer(&struct { 31225 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31226 }{DbMain})), uintptr(0), uintptr(0)) 31227 31228 tcl.XTcl_CreateObjCommand(tls, interp, ts+14275, *(*uintptr)(unsafe.Pointer(&struct { 31229 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31230 }{DbMain})), uintptr(0), uintptr(0)) 31231 rc = tcl.XTcl_PkgProvideEx(tls, interp, ts+14267, ts+14282, uintptr(0)) 31232 } 31233 return rc 31234 } 31235 31236 func Tclsqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31237 return Sqlite3_Init(tls, interp) 31238 } 31239 31240 func Sqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31241 return TCL_OK 31242 } 31243 31244 func Tclsqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31245 return TCL_OK 31246 } 31247 31248 func Sqlite3_SafeInit(tls *libc.TLS, interp uintptr) int32 { 31249 return TCL_ERROR 31250 } 31251 31252 func Sqlite3_SafeUnload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31253 return TCL_ERROR 31254 } 31255 31256 func Sqlite_Init(tls *libc.TLS, interp uintptr) int32 { 31257 return Sqlite3_Init(tls, interp) 31258 } 31259 31260 func Tclsqlite_Init(tls *libc.TLS, interp uintptr) int32 { 31261 return Sqlite3_Init(tls, interp) 31262 } 31263 31264 func Sqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31265 return TCL_OK 31266 } 31267 31268 func Tclsqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31269 return TCL_OK 31270 } 31271 31272 func tclsh_main_loop(tls *libc.TLS) uintptr { 31273 return uintptr(unsafe.Pointer(&zMainloop)) 31274 } 31275 31276 var zMainloop = *(*[431]int8)(unsafe.Pointer(ts + 14289)) 31277 31278 func main1(tls *libc.TLS, argc int32, argv uintptr) int32 { 31279 bp := tls.Alloc(64) 31280 defer tls.Free(64) 31281 31282 var interp uintptr 31283 var i int32 31284 var zScript uintptr = uintptr(0) 31285 31286 if libc.Xgetenv(tls, ts+14720) != 0 { 31287 if libc.Xisatty(tls, 0) != 0 && libc.Xisatty(tls, 2) != 0 { 31288 libc.Xfprintf(tls, uintptr(unsafe.Pointer(&libc.X__sF))+2*152, 31289 ts+14739, 31290 libc.VaList(bp, libc.Xgetpid(tls))) 31291 libc.Xfgetc(tls, uintptr(unsafe.Pointer(&libc.X__sF))) 31292 } else { 31293 libc.Xraise(tls, SIGTRAP) 31294 } 31295 } 31296 31297 sqlite3.Xsqlite3_shutdown(tls) 31298 31299 tcl.XTcl_FindExecutable(tls, *(*uintptr)(unsafe.Pointer(argv))) 31300 tcl.XTcl_SetSystemEncoding(tls, uintptr(0), ts+14801) 31301 interp = tcl.XTcl_CreateInterp(tls) 31302 Sqlite3_Init(tls, interp) 31303 31304 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]int8{})), bp+32, ts+1333, libc.VaList(bp+8, argc-1)) 31305 tcl.XTcl_SetVar2(tls, interp, ts+14807, uintptr(0), bp+32, TCL_GLOBAL_ONLY) 31306 tcl.XTcl_SetVar2(tls, interp, ts+14812, uintptr(0), *(*uintptr)(unsafe.Pointer(argv)), TCL_GLOBAL_ONLY) 31307 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), ts+584, TCL_GLOBAL_ONLY) 31308 for i = 1; i < argc; i++ { 31309 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) 31310 } 31311 zScript = sqlite3TestInit(tls, interp) 31312 if zScript == uintptr(0) { 31313 zScript = tclsh_main_loop(tls) 31314 } 31315 if tcl.XTcl_GlobalEval(tls, interp, zScript) != TCL_OK { 31316 var zInfo uintptr = tcl.XTcl_GetVar2(tls, interp, ts+14823, uintptr(0), TCL_GLOBAL_ONLY) 31317 if zInfo == uintptr(0) { 31318 zInfo = tcl.XTcl_GetStringResult(tls, interp) 31319 } 31320 libc.Xfprintf(tls, uintptr(unsafe.Pointer(&libc.X__sF))+2*152, ts+14833, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv)), zInfo)) 31321 return 1 31322 } 31323 return 0 31324 } 31325 31326 type sqlite3_value = sqlite3_value1 31327 31328 type sqlite3_context = sqlite3_context1 31329 type PreUpdate = PreUpdate1 31330 31331 type Vdbe = Vdbe1 31332 31333 type Mem = sqlite3_value1 31334 31335 type Op = VdbeOp1 31336 31337 type Bool = uint32 31338 31339 type AuxData1 = struct { 31340 FiAuxOp int32 31341 FiAuxArg int32 31342 FpAux uintptr 31343 FxDeleteAux uintptr 31344 FpNextAux uintptr 31345 } 31346 31347 type AuxData = AuxData1 31348 31349 type VdbeCursor1 = struct { 31350 FeCurType u8 31351 FiDb i8 31352 FnullRow u8 31353 FdeferredMoveto u8 31354 FisTable u8 31355 F__ccgo_pad1 [3]byte 31356 FisEphemeral uint8 31357 F__ccgo_pad2 [1]byte 31358 FseekHit u16 31359 F__ccgo_pad3 [4]byte 31360 Fub struct{ FpBtx uintptr } 31361 FseqCount i64 31362 FcacheStatus u32 31363 FseekResult int32 31364 FpAltCursor uintptr 31365 Fuc struct{ FpCursor uintptr } 31366 FpKeyInfo uintptr 31367 FiHdrOffset u32 31368 FpgnoRoot Pgno 31369 FnField i16 31370 FnHdrParsed u16 31371 F__ccgo_pad4 [4]byte 31372 FmovetoTarget i64 31373 FaOffset uintptr 31374 FaRow uintptr 31375 FpayloadSize u32 31376 FszRow u32 31377 FaType [1]u32 31378 F__ccgo_pad5 [4]byte 31379 } 31380 31381 type VdbeCursor = VdbeCursor1 31382 31383 type VdbeFrame1 = struct { 31384 Fv uintptr 31385 FpParent uintptr 31386 FaOp uintptr 31387 FanExec uintptr 31388 FaMem uintptr 31389 FapCsr uintptr 31390 FaOnce uintptr 31391 Ftoken uintptr 31392 FlastRowid i64 31393 FpAuxData uintptr 31394 FnCursor int32 31395 Fpc int32 31396 FnOp int32 31397 FnMem int32 31398 FnChildMem int32 31399 FnChildCsr int32 31400 FnChange i64 31401 FnDbChange i64 31402 } 31403 31404 type VdbeFrame = VdbeFrame1 31405 31406 type MemValue = struct{ Fr float64 } 31407 31408 type bft = uint32 31409 31410 type ScanStatus1 = struct { 31411 FaddrExplain int32 31412 FaddrLoop int32 31413 FaddrVisit int32 31414 FiSelectID int32 31415 FnEst LogEst 31416 F__ccgo_pad1 [6]byte 31417 FzName uintptr 31418 } 31419 31420 type ScanStatus = ScanStatus1 31421 31422 type DblquoteStr1 = struct { 31423 FpNextStr uintptr 31424 Fz [8]int8 31425 } 31426 31427 type DblquoteStr = DblquoteStr1 31428 31429 type ValueList1 = struct { 31430 FpCsr uintptr 31431 FpOut uintptr 31432 } 31433 31434 type ValueList = ValueList1 31435 31436 func testHexToInt(tls *libc.TLS, h int32) int32 { 31437 if h >= '0' && h <= '9' { 31438 return h - '0' 31439 } else if h >= 'a' && h <= 'f' { 31440 return h - 'a' + 10 31441 } else { 31442 return h - 'A' + 10 31443 } 31444 return int32(0) 31445 } 31446 31447 func sqlite3TestTextToPtr(tls *libc.TLS, z uintptr) uintptr { 31448 bp := tls.Alloc(20) 31449 defer tls.Free(20) 31450 31451 if int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 'x' { 31452 z += uintptr(2) 31453 } 31454 *(*u64)(unsafe.Pointer(bp + 8)) = uint64(0) 31455 for *(*int8)(unsafe.Pointer(z)) != 0 { 31456 *(*u64)(unsafe.Pointer(bp + 8)) = *(*u64)(unsafe.Pointer(bp + 8))<<4 + u64(testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(z))))) 31457 z++ 31458 } 31459 if uint64(unsafe.Sizeof(uintptr(0))) == uint64(unsafe.Sizeof(u64(0))) { 31460 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 31461 } else { 31462 *(*u32)(unsafe.Pointer(bp + 16)) = u32(*(*u64)(unsafe.Pointer(bp + 8))) 31463 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 31464 } 31465 return *(*uintptr)(unsafe.Pointer(bp)) 31466 } 31467 31468 func get_sqlite_pointer(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31469 bp := tls.Alloc(212) 31470 defer tls.Free(212) 31471 31472 var p uintptr 31473 31474 if objc != 2 { 31475 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+14841) 31476 return TCL_ERROR 31477 } 31478 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 31479 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 31480 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 31481 return TCL_ERROR 31482 } 31483 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData 31484 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+112, ts+9889, libc.VaList(bp+24, (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb)) 31485 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+112, 0)) 31486 return TCL_OK 31487 } 31488 31489 func getDbPointer(tls *libc.TLS, interp uintptr, zA uintptr, ppDb uintptr) int32 { 31490 bp := tls.Alloc(64) 31491 defer tls.Free(64) 31492 31493 var p uintptr 31494 31495 if tcl.XTcl_GetCommandInfo(tls, interp, zA, bp) != 0 { 31496 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 31497 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 31498 } else { 31499 *(*uintptr)(unsafe.Pointer(ppDb)) = sqlite3TestTextToPtr(tls, zA) 31500 } 31501 return TCL_OK 31502 } 31503 31504 func sqlite3TestErrCode(tls *libc.TLS, interp uintptr, db uintptr, rc int32) int32 { 31505 bp := tls.Alloc(248) 31506 defer tls.Free(248) 31507 31508 if sqlite3.Xsqlite3_threadsafe(tls) == 0 && rc != SQLITE_MISUSE && rc != SQLITE_OK && 31509 sqlite3.Xsqlite3_errcode(tls, db) != rc { 31510 var r2 int32 = sqlite3.Xsqlite3_errcode(tls, db) 31511 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+48, 31512 ts+14879, 31513 libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), rc, sqlite3.Xsqlite3ErrName(tls, r2), r2)) 31514 tcl.XTcl_ResetResult(tls, interp) 31515 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 31516 return 1 31517 } 31518 return 0 31519 } 31520 31521 func getStmtPointer(tls *libc.TLS, interp uintptr, zArg uintptr, ppStmt uintptr) int32 { 31522 *(*uintptr)(unsafe.Pointer(ppStmt)) = sqlite3TestTextToPtr(tls, zArg) 31523 return TCL_OK 31524 } 31525 31526 func sqlite3TestMakePointerStr(tls *libc.TLS, interp uintptr, zPtr uintptr, p uintptr) int32 { 31527 bp := tls.Alloc(8) 31528 defer tls.Free(8) 31529 31530 sqlite3.Xsqlite3_snprintf(tls, 100, zPtr, ts+9889, libc.VaList(bp, p)) 31531 return TCL_OK 31532 } 31533 31534 func exec_printf_cb(tls *libc.TLS, pArg uintptr, argc int32, argv uintptr, name uintptr) int32 { 31535 var str uintptr = pArg 31536 var i int32 31537 31538 if (*Tcl_DString)(unsafe.Pointer(str)).Flength == 0 { 31539 for i = 0; i < argc; i++ { 31540 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 31541 if *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) != 0 { 31542 return *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) 31543 } 31544 return ts + 5846 31545 }()) 31546 } 31547 } 31548 for i = 0; i < argc; i++ { 31549 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 31550 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 31551 return *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 31552 } 31553 return ts + 5846 31554 }()) 31555 } 31556 return 0 31557 } 31558 31559 func test_io_trace(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31560 return TCL_OK 31561 } 31562 31563 func clang_sanitize_address(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31564 var res int32 = 0 31565 if res == 0 && libc.Xgetenv(tls, ts+14937) != uintptr(0) { 31566 res = 1 31567 } 31568 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 31569 return TCL_OK 31570 } 31571 31572 func test_exec_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31573 bp := tls.Alloc(310) 31574 defer tls.Free(310) 31575 31576 var rc int32 31577 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 31578 var zSql uintptr 31579 31580 if argc != 4 { 31581 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31582 ts+14975, 0)) 31583 return TCL_ERROR 31584 } 31585 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 31586 return TCL_ERROR 31587 } 31588 tcl.XTcl_DStringInit(tls, bp+56) 31589 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 31590 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 31591 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 31592 }{exec_printf_cb})), bp+56, bp+272) 31593 sqlite3.Xsqlite3_free(tls, zSql) 31594 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 31595 tcl.XTcl_AppendElement(tls, interp, bp+280) 31596 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 31597 if rc == SQLITE_OK { 31598 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 31599 } 31600 return *(*uintptr)(unsafe.Pointer(bp + 272)) 31601 }()) 31602 tcl.XTcl_DStringFree(tls, bp+56) 31603 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 31604 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 31605 } 31606 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 31607 return TCL_ERROR 31608 } 31609 return TCL_OK 31610 } 31611 31612 func test_exec_hex(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31613 bp := tls.Alloc(806) 31614 defer tls.Free(806) 31615 31616 var rc int32 31617 var i int32 31618 var j int32 31619 *(*uintptr)(unsafe.Pointer(bp + 768)) = uintptr(0) 31620 var zHex uintptr 31621 31622 if argc != 3 { 31623 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31624 ts+14993, 0)) 31625 return TCL_ERROR 31626 } 31627 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 31628 return TCL_ERROR 31629 } 31630 zHex = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 31631 i = libc.AssignInt32(&j, 0) 31632 __1: 31633 if !(uint64(i) < uint64(unsafe.Sizeof([501]int8{}))-uint64(1) && *(*int8)(unsafe.Pointer(zHex + uintptr(j))) != 0) { 31634 goto __3 31635 } 31636 { 31637 if int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j)))) == '%' && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 { 31638 *(*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)))))) 31639 j = j + 2 31640 } else { 31641 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = *(*int8)(unsafe.Pointer(zHex + uintptr(j))) 31642 } 31643 31644 } 31645 goto __2 31646 __2: 31647 i++ 31648 j++ 31649 goto __1 31650 goto __3 31651 __3: 31652 ; 31653 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = int8(0) 31654 tcl.XTcl_DStringInit(tls, bp+552) 31655 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48, *(*uintptr)(unsafe.Pointer(&struct { 31656 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 31657 }{exec_printf_cb})), bp+552, bp+768) 31658 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+776, ts+1333, libc.VaList(bp+32, rc)) 31659 tcl.XTcl_AppendElement(tls, interp, bp+776) 31660 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 31661 if rc == SQLITE_OK { 31662 return (*Tcl_DString)(unsafe.Pointer(bp + 552)).Fstring 31663 } 31664 return *(*uintptr)(unsafe.Pointer(bp + 768)) 31665 }()) 31666 tcl.XTcl_DStringFree(tls, bp+552) 31667 if *(*uintptr)(unsafe.Pointer(bp + 768)) != 0 { 31668 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 768))) 31669 } 31670 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 40)), rc) != 0 { 31671 return TCL_ERROR 31672 } 31673 return TCL_OK 31674 } 31675 31676 func db_enter(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31677 bp := tls.Alloc(40) 31678 defer tls.Free(40) 31679 31680 if argc != 2 { 31681 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31682 ts+15001, 0)) 31683 return TCL_ERROR 31684 } 31685 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31686 return TCL_ERROR 31687 } 31688 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 31689 return TCL_OK 31690 } 31691 31692 func db_leave(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31693 bp := tls.Alloc(40) 31694 defer tls.Free(40) 31695 31696 if argc != 2 { 31697 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31698 ts+15001, 0)) 31699 return TCL_ERROR 31700 } 31701 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31702 return TCL_ERROR 31703 } 31704 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 31705 return TCL_OK 31706 } 31707 31708 func test_exec(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31709 bp := tls.Alloc(310) 31710 defer tls.Free(310) 31711 31712 var rc int32 31713 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 31714 var zSql uintptr 31715 var i int32 31716 var j int32 31717 31718 if argc != 3 { 31719 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31720 ts+15005, 0)) 31721 return TCL_ERROR 31722 } 31723 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 31724 return TCL_ERROR 31725 } 31726 tcl.XTcl_DStringInit(tls, bp+56) 31727 zSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 31728 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; { 31729 if int32(*(*int8)(unsafe.Pointer(zSql + uintptr(i)))) == '%' { 31730 *(*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)))))) 31731 i = i + 3 31732 } else { 31733 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&i, 1)))) 31734 } 31735 } 31736 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 31737 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 31738 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 31739 }{exec_printf_cb})), bp+56, bp+272) 31740 sqlite3.Xsqlite3_free(tls, zSql) 31741 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 31742 tcl.XTcl_AppendElement(tls, interp, bp+280) 31743 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 31744 if rc == SQLITE_OK { 31745 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 31746 } 31747 return *(*uintptr)(unsafe.Pointer(bp + 272)) 31748 }()) 31749 tcl.XTcl_DStringFree(tls, bp+56) 31750 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 31751 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 31752 } 31753 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 31754 return TCL_ERROR 31755 } 31756 return TCL_OK 31757 } 31758 31759 func test_exec_nr(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31760 bp := tls.Alloc(48) 31761 defer tls.Free(48) 31762 31763 var rc int32 31764 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 31765 if argc != 3 { 31766 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31767 ts+15005, 0)) 31768 return TCL_ERROR 31769 } 31770 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31771 return TCL_ERROR 31772 } 31773 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), uintptr(0), uintptr(0), bp+40) 31774 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 31775 return TCL_ERROR 31776 } 31777 return TCL_OK 31778 } 31779 31780 func test_mprintf_z(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31781 bp := tls.Alloc(40) 31782 defer tls.Free(40) 31783 31784 var zResult uintptr = uintptr(0) 31785 var i int32 31786 31787 for i = 2; i < argc && (i == 2 || zResult != 0); i++ { 31788 zResult = sqlite3.Xsqlite3_mprintf(tls, ts+15013, libc.VaList(bp, zResult, *(*uintptr)(unsafe.Pointer(argv + 1*8)), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 31789 } 31790 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zResult, 0)) 31791 sqlite3.Xsqlite3_free(tls, zResult) 31792 return TCL_OK 31793 } 31794 31795 func test_mprintf_n(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31796 bp := tls.Alloc(20) 31797 defer tls.Free(20) 31798 31799 var zStr uintptr 31800 *(*int32)(unsafe.Pointer(bp + 16)) = 0 31801 zStr = sqlite3.Xsqlite3_mprintf(tls, ts+15020, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+16)) 31802 sqlite3.Xsqlite3_free(tls, zStr) 31803 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 31804 return TCL_OK 31805 } 31806 31807 func test_snprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31808 bp := tls.Alloc(124) 31809 defer tls.Free(124) 31810 31811 var n int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 31812 var zFormat uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 31813 var a1 int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 31814 if uint64(n) > uint64(unsafe.Sizeof([100]int8{})) { 31815 n = int32(unsafe.Sizeof([100]int8{})) 31816 } 31817 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+15025, 0) 31818 sqlite3.Xsqlite3_snprintf(tls, n, bp+24, zFormat, libc.VaList(bp, a1)) 31819 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, 0)) 31820 return TCL_OK 31821 } 31822 31823 func test_get_table_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31824 bp := tls.Alloc(350) 31825 defer tls.Free(350) 31826 31827 var rc int32 31828 *(*uintptr)(unsafe.Pointer(bp + 304)) = uintptr(0) 31829 *(*int32)(unsafe.Pointer(bp + 312)) = 0 31830 *(*int32)(unsafe.Pointer(bp + 316)) = 0 31831 31832 var i int32 31833 31834 var zSql uintptr 31835 *(*int32)(unsafe.Pointer(bp + 64)) = -1 31836 if argc == 5 { 31837 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+64) != 0 { 31838 return TCL_ERROR 31839 } 31840 } 31841 if argc != 4 && argc != 5 { 31842 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31843 ts+15052, 0)) 31844 return TCL_ERROR 31845 } 31846 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) != 0 { 31847 return TCL_ERROR 31848 } 31849 tcl.XTcl_DStringInit(tls, bp+80) 31850 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 31851 if argc == 5 { 31852 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, uintptr(0), uintptr(0), bp+304) 31853 } else { 31854 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, bp+312, bp+316, bp+304) 31855 *(*int32)(unsafe.Pointer(bp + 64)) = (*(*int32)(unsafe.Pointer(bp + 312)) + 1) * *(*int32)(unsafe.Pointer(bp + 316)) 31856 } 31857 sqlite3.Xsqlite3_free(tls, zSql) 31858 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+40, rc)) 31859 tcl.XTcl_AppendElement(tls, interp, bp+320) 31860 if rc == SQLITE_OK { 31861 if argc == 4 { 31862 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 312)))) 31863 tcl.XTcl_AppendElement(tls, interp, bp+320) 31864 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+56, *(*int32)(unsafe.Pointer(bp + 316)))) 31865 tcl.XTcl_AppendElement(tls, interp, bp+320) 31866 } 31867 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 31868 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 31869 if *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) != 0 { 31870 return *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) 31871 } 31872 return ts + 5846 31873 }()) 31874 } 31875 } else { 31876 tcl.XTcl_AppendElement(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 304))) 31877 } 31878 sqlite3.Xsqlite3_free_table(tls, *(*uintptr)(unsafe.Pointer(bp + 296))) 31879 if *(*uintptr)(unsafe.Pointer(bp + 304)) != 0 { 31880 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 304))) 31881 } 31882 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 72)), rc) != 0 { 31883 return TCL_ERROR 31884 } 31885 return TCL_OK 31886 } 31887 31888 func test_last_rowid(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31889 bp := tls.Alloc(94) 31890 defer tls.Free(94) 31891 31892 if argc != 2 { 31893 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15078, 0)) 31894 return TCL_ERROR 31895 } 31896 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 31897 return TCL_ERROR 31898 } 31899 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))))) 31900 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 31901 return SQLITE_OK 31902 } 31903 31904 func test_key(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31905 return TCL_OK 31906 } 31907 31908 func test_rekey(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31909 return TCL_OK 31910 } 31911 31912 func sqlite_test_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31913 bp := tls.Alloc(40) 31914 defer tls.Free(40) 31915 31916 var rc int32 31917 if argc != 2 { 31918 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31919 ts+15083, 0)) 31920 return TCL_ERROR 31921 } 31922 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31923 return TCL_ERROR 31924 } 31925 rc = sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 31926 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 31927 return TCL_OK 31928 } 31929 31930 func sqlite_test_close_v2(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 31931 bp := tls.Alloc(40) 31932 defer tls.Free(40) 31933 31934 var rc int32 31935 if argc != 2 { 31936 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 31937 ts+15083, 0)) 31938 return TCL_ERROR 31939 } 31940 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 31941 return TCL_ERROR 31942 } 31943 rc = sqlite3.Xsqlite3_close_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 31944 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 31945 return TCL_OK 31946 } 31947 31948 func t1_ifnullFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 31949 var i int32 31950 for i = 0; i < argc; i++ { 31951 if SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) { 31952 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 31953 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))), 31954 n, libc.UintptrFromInt32(-1)) 31955 break 31956 } 31957 } 31958 } 31959 31960 func hex8Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 31961 bp := tls.Alloc(208) 31962 defer tls.Free(208) 31963 31964 var z uintptr 31965 var i int32 31966 31967 z = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 31968 for i = 0; uint64(i) < uint64(unsafe.Sizeof([200]int8{}))/uint64(2)-uint64(2) && *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 31969 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)))))) 31970 } 31971 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = int8(0) 31972 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 31973 } 31974 31975 func hex16Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 31976 bp := tls.Alloc(408) 31977 defer tls.Free(408) 31978 31979 var z uintptr 31980 var i int32 31981 31982 z = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 31983 for i = 0; uint64(i) < uint64(unsafe.Sizeof([400]int8{}))/uint64(4)-uint64(4) && *(*uint16)(unsafe.Pointer(z + uintptr(i)*2)) != 0; i++ { 31984 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)) 31985 } 31986 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*4))) = int8(0) 31987 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 31988 } 31989 31990 type dstr = struct { 31991 FnAlloc int32 31992 FnUsed int32 31993 Fz uintptr 31994 } 31995 31996 func dstrAppend(tls *libc.TLS, p uintptr, z uintptr, divider int32) { 31997 var n int32 = int32(libc.Xstrlen(tls, z)) 31998 if (*dstr)(unsafe.Pointer(p)).FnUsed+n+2 > (*dstr)(unsafe.Pointer(p)).FnAlloc { 31999 var zNew uintptr 32000 (*dstr)(unsafe.Pointer(p)).FnAlloc = (*dstr)(unsafe.Pointer(p)).FnAlloc*2 + n + 200 32001 zNew = sqlite3.Xsqlite3_realloc(tls, (*dstr)(unsafe.Pointer(p)).Fz, (*dstr)(unsafe.Pointer(p)).FnAlloc) 32002 if zNew == uintptr(0) { 32003 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(p)).Fz) 32004 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(dstr{}))) 32005 return 32006 } 32007 (*dstr)(unsafe.Pointer(p)).Fz = zNew 32008 } 32009 if divider != 0 && (*dstr)(unsafe.Pointer(p)).FnUsed > 0 { 32010 *(*int8)(unsafe.Pointer((*dstr)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*dstr)(unsafe.Pointer(p)).FnUsed, 1)))) = int8(divider) 32011 } 32012 libc.Xmemcpy(tls, (*dstr)(unsafe.Pointer(p)).Fz+uintptr((*dstr)(unsafe.Pointer(p)).FnUsed), z, uint64(n+1)) 32013 *(*int32)(unsafe.Pointer(p + 4)) += n 32014 } 32015 32016 func execFuncCallback(tls *libc.TLS, pData uintptr, argc int32, argv uintptr, NotUsed uintptr) int32 { 32017 var p uintptr = pData 32018 var i int32 32019 for i = 0; i < argc; i++ { 32020 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) == uintptr(0) { 32021 dstrAppend(tls, p, ts+5846, ' ') 32022 } else { 32023 dstrAppend(tls, p, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ' ') 32024 } 32025 } 32026 return 0 32027 } 32028 32029 func sqlite3ExecFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32030 bp := tls.Alloc(16) 32031 defer tls.Free(16) 32032 32033 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(dstr{}))) 32034 sqlite3.Xsqlite3_exec(tls, sqlite3.Xsqlite3_user_data(tls, context), 32035 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 32036 *(*uintptr)(unsafe.Pointer(&struct { 32037 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32038 }{execFuncCallback})), bp, uintptr(0)) 32039 sqlite3.Xsqlite3_result_text(tls, context, (*dstr)(unsafe.Pointer(bp)).Fz, (*dstr)(unsafe.Pointer(bp)).FnUsed, libc.UintptrFromInt32(-1)) 32040 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(bp)).Fz) 32041 } 32042 32043 func tkt2213Function(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32044 var nText int32 32045 var zText1 uintptr 32046 var zText2 uintptr 32047 var zText3 uintptr 32048 32049 nText = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32050 zText1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32051 zText2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32052 zText3 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32053 32054 if zText1 != zText2 || zText2 != zText3 { 32055 sqlite3.Xsqlite3_result_error(tls, context, ts+15099, -1) 32056 } else { 32057 var zCopy uintptr = sqlite3.Xsqlite3_malloc(tls, nText) 32058 libc.Xmemcpy(tls, zCopy, zText1, uint64(nText)) 32059 sqlite3.Xsqlite3_result_text(tls, context, zCopy, nText, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 32060 } 32061 } 32062 32063 func ptrChngFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32064 var p1 uintptr 32065 var p2 uintptr 32066 var zCmd uintptr 32067 if argc != 4 { 32068 return 32069 } 32070 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 32071 if zCmd == uintptr(0) { 32072 return 32073 } 32074 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32075 p1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32076 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32077 p1 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32078 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32079 p1 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32080 } else { 32081 return 32082 } 32083 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 32084 if zCmd == uintptr(0) { 32085 return 32086 } 32087 if libc.Xstrcmp(tls, zCmd, ts+15127) == 0 { 32088 sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32089 } else if libc.Xstrcmp(tls, zCmd, ts+15133) == 0 { 32090 sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32091 } else if libc.Xstrcmp(tls, zCmd, ts+15141) == 0 { 32092 } else { 32093 return 32094 } 32095 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 32096 if zCmd == uintptr(0) { 32097 return 32098 } 32099 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32100 p2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32101 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32102 p2 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32103 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32104 p2 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32105 } else { 32106 return 32107 } 32108 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(p1 != p2)) 32109 } 32110 32111 func nondeterministicFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32112 sqlite3.Xsqlite3_result_int(tls, context, libc.PostIncInt32(&cnt, 1)) 32113 } 32114 32115 var cnt int32 = 0 32116 32117 func intrealFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32118 bp := tls.Alloc(8) 32119 defer tls.Free(8) 32120 32121 var v sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 32122 sqlite3.Xsqlite3_result_int64(tls, context, v) 32123 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_RESULT_INTREAL, libc.VaList(bp, context)) 32124 } 32125 32126 func test_create_function(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32127 bp := tls.Alloc(40) 32128 defer tls.Free(40) 32129 32130 var rc int32 32131 32132 if argc != 2 { 32133 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32134 ts+15078, 0)) 32135 return TCL_ERROR 32136 } 32137 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32138 return TCL_ERROR 32139 } 32140 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15146, -1, SQLITE_UTF8, uintptr(0), 32141 *(*uintptr)(unsafe.Pointer(&struct { 32142 f func(*libc.TLS, uintptr, int32, uintptr) 32143 }{t1_ifnullFunc})), uintptr(0), uintptr(0)) 32144 if rc == SQLITE_OK { 32145 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15157, 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32146 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32147 f func(*libc.TLS, uintptr, int32, uintptr) 32148 }{hex8Func})), uintptr(0), uintptr(0)) 32149 } 32150 if rc == SQLITE_OK { 32151 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15162, 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 32152 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32153 f func(*libc.TLS, uintptr, int32, uintptr) 32154 }{hex16Func})), uintptr(0), uintptr(0)) 32155 } 32156 if rc == SQLITE_OK { 32157 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15168, 1, SQLITE_ANY, uintptr(0), 32158 *(*uintptr)(unsafe.Pointer(&struct { 32159 f func(*libc.TLS, uintptr, int32, uintptr) 32160 }{tkt2213Function})), uintptr(0), uintptr(0)) 32161 } 32162 if rc == SQLITE_OK { 32163 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15180, 4, SQLITE_ANY, uintptr(0), 32164 *(*uintptr)(unsafe.Pointer(&struct { 32165 f func(*libc.TLS, uintptr, int32, uintptr) 32166 }{ptrChngFunction})), uintptr(0), uintptr(0)) 32167 } 32168 32169 if rc == SQLITE_OK { 32170 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15195, -1, SQLITE_UTF8, 32171 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32172 f func(*libc.TLS, uintptr, int32, uintptr) 32173 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32174 } 32175 if rc == SQLITE_OK { 32176 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15204, -1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32177 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32178 f func(*libc.TLS, uintptr, int32, uintptr) 32179 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32180 } 32181 32182 if rc == SQLITE_OK { 32183 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15213, 1, SQLITE_UTF8, 32184 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32185 f func(*libc.TLS, uintptr, int32, uintptr) 32186 }{intrealFunction})), uintptr(0), uintptr(0)) 32187 } 32188 32189 if rc == SQLITE_OK { 32190 var zUtf16 uintptr 32191 var pVal uintptr 32192 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32193 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32194 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+15221, uint8(SQLITE_UTF8), uintptr(0)) 32195 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 32196 if (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FmallocFailed != 0 { 32197 rc = SQLITE_NOMEM 32198 } else { 32199 rc = sqlite3.Xsqlite3_create_function16(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zUtf16, 32200 1, SQLITE_UTF16, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct { 32201 f func(*libc.TLS, uintptr, int32, uintptr) 32202 }{sqlite3ExecFunc})), uintptr(0), uintptr(0)) 32203 } 32204 sqlite3.Xsqlite3ValueFree(tls, pVal) 32205 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32206 } 32207 32208 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32209 return TCL_ERROR 32210 } 32211 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32212 return TCL_OK 32213 } 32214 32215 func test_drop_modules(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32216 bp := tls.Alloc(40) 32217 defer tls.Free(40) 32218 32219 if argc < 2 { 32220 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32221 ts+15078, 0)) 32222 return TCL_ERROR 32223 } 32224 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32225 return TCL_ERROR 32226 } 32227 sqlite3.Xsqlite3_drop_modules(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), func() uintptr { 32228 if argc > 2 { 32229 return argv + uintptr(2)*8 32230 } 32231 return uintptr(0) 32232 }()) 32233 return TCL_OK 32234 } 32235 32236 type t1CountCtx1 = struct{ Fn int32 } 32237 32238 type t1CountCtx = t1CountCtx1 32239 32240 func t1CountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32241 bp := tls.Alloc(9) 32242 defer tls.Free(9) 32243 32244 var p uintptr 32245 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 32246 if (argc == 0 || SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv)))) && p != 0 { 32247 (*t1CountCtx)(unsafe.Pointer(p)).Fn++ 32248 } 32249 if argc > 0 { 32250 var v int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 32251 if v == 40 { 32252 sqlite3.Xsqlite3_result_error(tls, context, ts+15235, -1) 32253 } else if v == 41 { 32254 *(*[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)} 32255 sqlite3.Xsqlite3_result_error16(tls, context, bp+1, -1) 32256 } 32257 } 32258 } 32259 32260 func t1CountFinalize(tls *libc.TLS, context uintptr) { 32261 var p uintptr 32262 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 32263 if p != 0 { 32264 if (*t1CountCtx)(unsafe.Pointer(p)).Fn == 42 { 32265 sqlite3.Xsqlite3_result_error(tls, context, ts+15265, -1) 32266 } else { 32267 sqlite3.Xsqlite3_result_int(tls, context, func() int32 { 32268 if p != 0 { 32269 return (*t1CountCtx)(unsafe.Pointer(p)).Fn 32270 } 32271 return 0 32272 }()) 32273 } 32274 } 32275 } 32276 32277 func legacyCountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32278 } 32279 32280 func legacyCountFinalize(tls *libc.TLS, context uintptr) { 32281 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_aggregate_count(tls, context)) 32282 } 32283 32284 func test_create_aggregate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32285 bp := tls.Alloc(40) 32286 defer tls.Free(40) 32287 32288 var rc int32 32289 if argc != 2 { 32290 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32291 ts+15083, 0)) 32292 return TCL_ERROR 32293 } 32294 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32295 return TCL_ERROR 32296 } 32297 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 0, SQLITE_UTF8, uintptr(0), uintptr(0), 32298 *(*uintptr)(unsafe.Pointer(&struct { 32299 f func(*libc.TLS, uintptr, int32, uintptr) 32300 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 32301 if rc == SQLITE_OK { 32302 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 1, SQLITE_UTF8, uintptr(0), uintptr(0), 32303 *(*uintptr)(unsafe.Pointer(&struct { 32304 f func(*libc.TLS, uintptr, int32, uintptr) 32305 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 32306 } 32307 if rc == SQLITE_OK { 32308 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15294, 0, SQLITE_ANY, uintptr(0), uintptr(0), 32309 *(*uintptr)(unsafe.Pointer(&struct { 32310 f func(*libc.TLS, uintptr, int32, uintptr) 32311 }{legacyCountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{legacyCountFinalize}))) 32312 } 32313 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32314 return TCL_ERROR 32315 } 32316 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32317 return TCL_OK 32318 } 32319 32320 func test_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32321 bp := tls.Alloc(40) 32322 defer tls.Free(40) 32323 32324 if argc != 2 { 32325 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32326 ts+15307, 0)) 32327 return TCL_ERROR 32328 } 32329 libc.Xprintf(tls, ts+389, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 32330 return TCL_OK 32331 } 32332 32333 func sqlite3_mprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32334 bp := tls.Alloc(84) 32335 defer tls.Free(84) 32336 32337 var i int32 32338 var z uintptr 32339 if argc != 5 { 32340 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32341 ts+15314, 0)) 32342 return TCL_ERROR 32343 } 32344 for i = 2; i < 5; i++ { 32345 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32346 return TCL_ERROR 32347 } 32348 } 32349 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)))) 32350 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32351 sqlite3.Xsqlite3_free(tls, z) 32352 return TCL_OK 32353 } 32354 32355 func sqlite3_mprintf_int64(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32356 bp := tls.Alloc(112) 32357 defer tls.Free(112) 32358 32359 var i int32 32360 32361 var z uintptr 32362 if argc != 5 { 32363 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32364 ts+15314, 0)) 32365 return TCL_ERROR 32366 } 32367 for i = 2; i < 5; i++ { 32368 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 { 32369 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15335, 0)) 32370 return TCL_ERROR 32371 } 32372 } 32373 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)))) 32374 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32375 sqlite3.Xsqlite3_free(tls, z) 32376 return TCL_OK 32377 } 32378 32379 func sqlite3_mprintf_long(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32380 bp := tls.Alloc(112) 32381 defer tls.Free(112) 32382 32383 var i int32 32384 32385 var z uintptr 32386 if argc != 5 { 32387 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32388 ts+15314, 0)) 32389 return TCL_ERROR 32390 } 32391 for i = 2; i < 5; i++ { 32392 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32393 return TCL_ERROR 32394 } 32395 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) = int64(*(*int32)(unsafe.Pointer(bp + 72 + uintptr(i-2)*4))) 32396 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) &= int64(uint64(1)<<(uint64(unsafe.Sizeof(int32(0)))*uint64(8)) - uint64(1)) 32397 } 32398 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)))) 32399 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32400 sqlite3.Xsqlite3_free(tls, z) 32401 return TCL_OK 32402 } 32403 32404 func sqlite3_mprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32405 bp := tls.Alloc(84) 32406 defer tls.Free(84) 32407 32408 var i int32 32409 var z uintptr 32410 if argc < 4 || argc > 5 { 32411 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32412 ts+15374, 0)) 32413 return TCL_ERROR 32414 } 32415 for i = 2; i < 4; i++ { 32416 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32417 return TCL_ERROR 32418 } 32419 } 32420 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 { 32421 if argc > 4 { 32422 return *(*uintptr)(unsafe.Pointer(argv + 4*8)) 32423 } 32424 return uintptr(0) 32425 }())) 32426 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32427 sqlite3.Xsqlite3_free(tls, z) 32428 return TCL_OK 32429 } 32430 32431 func sqlite3_snprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32432 bp := tls.Alloc(104) 32433 defer tls.Free(104) 32434 32435 var i int32 32436 32437 var z uintptr 32438 if argc < 5 || argc > 6 { 32439 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32440 ts+15400, 0)) 32441 return TCL_ERROR 32442 } 32443 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+88) != 0 { 32444 return TCL_ERROR 32445 } 32446 if *(*int32)(unsafe.Pointer(bp + 88)) < 0 { 32447 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15430, 0)) 32448 return TCL_ERROR 32449 } 32450 for i = 3; i < 5; i++ { 32451 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+92+uintptr(i-3)*4) != 0 { 32452 return TCL_ERROR 32453 } 32454 } 32455 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 88))+1) 32456 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 { 32457 if argc > 4 { 32458 return *(*uintptr)(unsafe.Pointer(argv + 5*8)) 32459 } 32460 return uintptr(0) 32461 }())) 32462 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32463 sqlite3.Xsqlite3_free(tls, z) 32464 return TCL_OK 32465 } 32466 32467 func sqlite3_mprintf_double(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32468 bp := tls.Alloc(96) 32469 defer tls.Free(96) 32470 32471 var i int32 32472 32473 var z uintptr 32474 if argc != 5 { 32475 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32476 ts+15453, 0)) 32477 return TCL_ERROR 32478 } 32479 for i = 2; i < 4; i++ { 32480 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 32481 return TCL_ERROR 32482 } 32483 } 32484 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+88) != 0 { 32485 return TCL_ERROR 32486 } 32487 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)))) 32488 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32489 sqlite3.Xsqlite3_free(tls, z) 32490 return TCL_OK 32491 } 32492 32493 func sqlite3_mprintf_scaled(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32494 bp := tls.Alloc(72) 32495 defer tls.Free(72) 32496 32497 var i int32 32498 32499 var z uintptr 32500 if argc != 4 { 32501 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32502 ts+15477, 0)) 32503 return TCL_ERROR 32504 } 32505 for i = 2; i < 4; i++ { 32506 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+56+uintptr(i-2)*8) != 0 { 32507 return TCL_ERROR 32508 } 32509 } 32510 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)))) 32511 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 32512 sqlite3.Xsqlite3_free(tls, z) 32513 return TCL_OK 32514 } 32515 32516 func sqlite3_mprintf_stronly(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32517 bp := tls.Alloc(56) 32518 defer tls.Free(56) 32519 32520 var z uintptr 32521 if argc != 3 { 32522 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32523 ts+15500, 0)) 32524 return TCL_ERROR 32525 } 32526 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 32527 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 32528 sqlite3.Xsqlite3_free(tls, z) 32529 return TCL_OK 32530 } 32531 32532 func sqlite3_mprintf_hexdouble(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32533 bp := tls.Alloc(112) 32534 defer tls.Free(112) 32535 32536 var z uintptr 32537 32538 if argc != 3 { 32539 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32540 ts+15500, 0)) 32541 return TCL_ERROR 32542 } 32543 if libc.Xsscanf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), ts+15516, libc.VaList(bp+32, bp+88, bp+92)) != 2 { 32544 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+15525, 0)) 32545 return TCL_ERROR 32546 } 32547 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 88))) 32548 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = *(*sqlite_uint64)(unsafe.Pointer(bp + 104))<<32 + sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 92))) 32549 libc.Xmemcpy(tls, bp+96, bp+104, uint64(unsafe.Sizeof(float64(0)))) 32550 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+64, *(*float64)(unsafe.Pointer(bp + 96)))) 32551 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32552 sqlite3.Xsqlite3_free(tls, z) 32553 return TCL_OK 32554 } 32555 32556 func test_enable_shared(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32557 bp := tls.Alloc(4) 32558 defer tls.Free(4) 32559 32560 var rc int32 32561 32562 var ret int32 = 0 32563 32564 if objc != 2 && objc != 1 { 32565 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15569) 32566 return TCL_ERROR 32567 } 32568 ret = sqlite3.Xsqlite3Config.FsharedCacheEnabled 32569 32570 if objc == 2 { 32571 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 32572 return TCL_ERROR 32573 } 32574 rc = sqlite3.Xsqlite3_enable_shared_cache(tls, *(*int32)(unsafe.Pointer(bp))) 32575 if rc != SQLITE_OK { 32576 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 32577 return TCL_ERROR 32578 } 32579 } 32580 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(ret != 0))) 32581 return TCL_OK 32582 } 32583 32584 func test_extended_result_codes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32585 bp := tls.Alloc(12) 32586 defer tls.Free(12) 32587 32588 if objc != 3 { 32589 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15579) 32590 return TCL_ERROR 32591 } 32592 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 32593 return TCL_ERROR 32594 } 32595 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 32596 return TCL_ERROR 32597 } 32598 sqlite3.Xsqlite3_extended_result_codes(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 32599 return TCL_OK 32600 } 32601 32602 func test_libversion_number(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32603 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_libversion_number(tls))) 32604 return TCL_OK 32605 } 32606 32607 func test_table_column_metadata(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32608 bp := tls.Alloc(52) 32609 defer tls.Free(52) 32610 32611 var zDb uintptr 32612 var zTbl uintptr 32613 var zCol uintptr 32614 var rc int32 32615 var pRet uintptr 32616 32617 if objc != 5 && objc != 4 { 32618 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15590) 32619 return TCL_ERROR 32620 } 32621 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 32622 return TCL_ERROR 32623 } 32624 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 32625 zTbl = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 32626 if objc == 5 { 32627 zCol = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 32628 } else { 32629 zCol = uintptr(0) 32630 } 32631 32632 if libc.Xstrlen(tls, zDb) == uint64(0) { 32633 zDb = uintptr(0) 32634 } 32635 32636 rc = sqlite3.Xsqlite3_table_column_metadata(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDb, zTbl, zCol, 32637 bp+24, bp+32, bp+40, bp+44, bp+48) 32638 32639 if rc != SQLITE_OK { 32640 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 32641 return TCL_ERROR 32642 } 32643 32644 pRet = tcl.XTcl_NewObj(tls) 32645 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), -1)) 32646 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), -1)) 32647 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 32648 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 44)))) 32649 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 48)))) 32650 tcl.XTcl_SetObjResult(tls, interp, pRet) 32651 32652 return TCL_OK 32653 } 32654 32655 func blobHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 32656 bp := tls.Alloc(8) 32657 defer tls.Free(8) 32658 32659 var z uintptr 32660 32661 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 32662 if *(*int32)(unsafe.Pointer(bp)) == 0 { 32663 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 32664 } else { 32665 var channel Tcl_Channel 32666 var instanceData ClientData 32667 32668 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 32669 if !(channel != 0) { 32670 return TCL_ERROR 32671 } 32672 32673 tcl.XTcl_Flush(tls, channel) 32674 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 32675 32676 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 32677 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 32678 } 32679 32680 return TCL_OK 32681 } 32682 32683 func test_blob_reopen(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32684 bp := tls.Alloc(16) 32685 defer tls.Free(16) 32686 32687 var rc int32 32688 32689 if objc != 3 { 32690 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15616) 32691 return TCL_ERROR 32692 } 32693 32694 if blobHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 32695 return TCL_ERROR 32696 } 32697 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 32698 return TCL_ERROR 32699 } 32700 32701 rc = sqlite3.Xsqlite3_blob_reopen(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 8))) 32702 if rc != SQLITE_OK { 32703 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 32704 } 32705 32706 return func() int32 { 32707 if rc == SQLITE_OK { 32708 return TCL_OK 32709 } 32710 return TCL_ERROR 32711 }() 32712 } 32713 32714 type TestCollationX1 = struct { 32715 Finterp uintptr 32716 FpCmp uintptr 32717 FpDel uintptr 32718 } 32719 32720 type TestCollationX = TestCollationX1 32721 32722 func testCreateCollationDel(tls *libc.TLS, pCtx uintptr) { 32723 var p uintptr = pCtx 32724 32725 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, (*TestCollationX)(unsafe.Pointer(p)).FpDel, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) 32726 if rc != TCL_OK { 32727 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 32728 } 32729 32730 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 32731 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpCmp 32732 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32733 tcl.XTclFreeObj(tls, _objPtr) 32734 } 32735 } 32736 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 32737 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpDel 32738 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32739 tcl.XTclFreeObj(tls, _objPtr) 32740 } 32741 } 32742 sqlite3.Xsqlite3_free(tls, p) 32743 } 32744 32745 func testCreateCollationCmp(tls *libc.TLS, pCtx uintptr, nLeft int32, zLeft uintptr, nRight int32, zRight uintptr) int32 { 32746 bp := tls.Alloc(4) 32747 defer tls.Free(4) 32748 32749 var p uintptr = pCtx 32750 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpCmp) 32751 *(*int32)(unsafe.Pointer(bp)) = 0 32752 32753 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 32754 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zLeft, nLeft)) 32755 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zRight, nRight)) 32756 32757 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, pScript, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) || 32758 TCL_OK != tcl.XTcl_GetIntFromObj(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp), bp) { 32759 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 32760 } 32761 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 32762 var _objPtr uintptr = pScript 32763 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32764 tcl.XTclFreeObj(tls, _objPtr) 32765 } 32766 } 32767 32768 return *(*int32)(unsafe.Pointer(bp)) 32769 } 32770 32771 func test_create_collation_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32772 bp := tls.Alloc(24) 32773 defer tls.Free(24) 32774 32775 var p uintptr 32776 32777 var rc int32 32778 32779 if objc != 5 { 32780 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15630) 32781 return TCL_ERROR 32782 } 32783 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 32784 return TCL_ERROR 32785 } 32786 32787 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TestCollationX{}))) 32788 (*TestCollationX)(unsafe.Pointer(p)).FpCmp = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 32789 (*TestCollationX)(unsafe.Pointer(p)).FpDel = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 32790 (*TestCollationX)(unsafe.Pointer(p)).Finterp = interp 32791 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpCmp)).FrefCount++ 32792 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpDel)).FrefCount++ 32793 32794 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 16, 32795 p, *(*uintptr)(unsafe.Pointer(&struct { 32796 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 32797 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 32798 if rc != SQLITE_MISUSE { 32799 tcl.XTcl_AppendResult(tls, interp, 32800 libc.VaList(bp, ts+15663, uintptr(0))) 32801 return TCL_ERROR 32802 } 32803 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), SQLITE_UTF8, 32804 p, *(*uintptr)(unsafe.Pointer(&struct { 32805 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 32806 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 32807 return TCL_OK 32808 } 32809 32810 type CreateFunctionV21 = struct { 32811 Finterp uintptr 32812 FpFunc uintptr 32813 FpStep uintptr 32814 FpFinal uintptr 32815 FpDestroy uintptr 32816 } 32817 32818 type CreateFunctionV2 = CreateFunctionV21 32819 32820 func cf2Func(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 32821 } 32822 32823 func cf2Step(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 32824 } 32825 32826 func cf2Final(tls *libc.TLS, ctx uintptr) { 32827 } 32828 32829 func cf2Destroy(tls *libc.TLS, pUser uintptr) { 32830 var p uintptr = pUser 32831 32832 if (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp != 0 && (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 32833 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy, 0) 32834 if rc != TCL_OK { 32835 tcl.XTcl_BackgroundError(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp) 32836 } 32837 } 32838 32839 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 32840 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 32841 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc 32842 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32843 tcl.XTclFreeObj(tls, _objPtr) 32844 } 32845 } 32846 } 32847 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 32848 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 32849 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep 32850 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32851 tcl.XTclFreeObj(tls, _objPtr) 32852 } 32853 } 32854 } 32855 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 32856 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 32857 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal 32858 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32859 tcl.XTclFreeObj(tls, _objPtr) 32860 } 32861 } 32862 } 32863 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 32864 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 32865 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy 32866 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 32867 tcl.XTclFreeObj(tls, _objPtr) 32868 } 32869 } 32870 } 32871 sqlite3.Xsqlite3_free(tls, p) 32872 } 32873 32874 func test_create_function_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 32875 bp := tls.Alloc(180) 32876 defer tls.Free(180) 32877 32878 var zFunc uintptr 32879 32880 var p uintptr 32881 var i int32 32882 var rc int32 32883 32884 *(*[6]EncTable)(unsafe.Pointer(bp + 32)) = [6]EncTable{ 32885 {FzEnc: ts + 15728, Fenc: SQLITE_UTF8}, 32886 {FzEnc: ts + 15733, Fenc: SQLITE_UTF16}, 32887 {FzEnc: ts + 15739, Fenc: SQLITE_UTF16LE}, 32888 {FzEnc: ts + 15747, Fenc: SQLITE_UTF16BE}, 32889 {FzEnc: ts + 12774, Fenc: SQLITE_ANY}, 32890 {FzEnc: ts + 14193}, 32891 } 32892 32893 if objc < 5 || objc%2 == 0 { 32894 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15755) 32895 return TCL_ERROR 32896 } 32897 32898 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 32899 return TCL_ERROR 32900 } 32901 zFunc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 32902 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 32903 return TCL_ERROR 32904 } 32905 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+32, int32(unsafe.Sizeof(EncTable{})), 32906 ts+15784, 0, bp+128) != 0 { 32907 return TCL_ERROR 32908 } 32909 *(*int32)(unsafe.Pointer(bp + 128)) = (*EncTable)(unsafe.Pointer(bp + 32 + uintptr(*(*int32)(unsafe.Pointer(bp + 128)))*16)).Fenc 32910 32911 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CreateFunctionV2{}))) 32912 32913 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CreateFunctionV2{}))) 32914 (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp = interp 32915 32916 for i = 5; i < objc; i = i + 2 { 32917 *(*[5]uintptr)(unsafe.Pointer(bp + 136)) = [5]uintptr{ts + 15793, ts + 15799, ts + 15805, ts + 15812, uintptr(0)} 32918 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 { 32919 sqlite3.Xsqlite3_free(tls, p) 32920 return TCL_ERROR 32921 } 32922 32923 switch *(*int32)(unsafe.Pointer(bp + 176)) { 32924 case 0: 32925 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 32926 break 32927 case 1: 32928 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 32929 break 32930 case 2: 32931 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 32932 break 32933 case 3: 32934 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 32935 break 32936 } 32937 } 32938 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 32939 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc) 32940 } 32941 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 32942 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep) 32943 } 32944 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 32945 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal) 32946 } 32947 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 32948 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy) 32949 } 32950 32951 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 32952 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc)).FrefCount++ 32953 } 32954 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 32955 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpStep)).FrefCount++ 32956 } 32957 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 32958 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal)).FrefCount++ 32959 } 32960 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 32961 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy)).FrefCount++ 32962 } 32963 32964 rc = sqlite3.Xsqlite3_create_function_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zFunc, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 128)), p, 32965 func() uintptr { 32966 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 32967 return *(*uintptr)(unsafe.Pointer(&struct { 32968 f func(*libc.TLS, uintptr, int32, uintptr) 32969 }{cf2Func})) 32970 } 32971 return uintptr(0) 32972 }(), 32973 func() uintptr { 32974 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 32975 return *(*uintptr)(unsafe.Pointer(&struct { 32976 f func(*libc.TLS, uintptr, int32, uintptr) 32977 }{cf2Step})) 32978 } 32979 return uintptr(0) 32980 }(), 32981 func() uintptr { 32982 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 32983 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Final})) 32984 } 32985 return uintptr(0) 32986 }(), 32987 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Destroy}))) 32988 if rc != SQLITE_OK { 32989 tcl.XTcl_ResetResult(tls, interp) 32990 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 32991 return TCL_ERROR 32992 } 32993 return TCL_OK 32994 } 32995 32996 type EncTable = struct { 32997 FzEnc uintptr 32998 Fenc int32 32999 F__ccgo_pad1 [4]byte 33000 } 33001 33002 func test_load_extension(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33003 bp := tls.Alloc(88) 33004 defer tls.Free(88) 33005 33006 var db uintptr 33007 _ = db 33008 var rc int32 33009 var zDb uintptr 33010 var zFile uintptr 33011 _ = zFile 33012 var zProc uintptr = uintptr(0) 33013 _ = zProc 33014 var zErr uintptr = uintptr(0) 33015 33016 if objc != 4 && objc != 3 { 33017 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15828) 33018 return TCL_ERROR 33019 } 33020 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33021 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33022 if objc == 4 { 33023 zProc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 33024 } 33025 33026 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+24) != 0) { 33027 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33028 return TCL_ERROR 33029 } 33030 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)).Fdb 33031 33032 rc = SQLITE_ERROR 33033 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+15850, 0) 33034 _ = zProc 33035 _ = zFile 33036 if rc != SQLITE_OK { 33037 tcl.XTcl_SetResult(tls, interp, func() uintptr { 33038 if zErr != 0 { 33039 return zErr 33040 } 33041 return ts + 584 33042 }(), uintptr(1)) 33043 rc = TCL_ERROR 33044 } else { 33045 rc = TCL_OK 33046 } 33047 sqlite3.Xsqlite3_free(tls, zErr) 33048 33049 return rc 33050 } 33051 33052 func test_enable_load(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33053 bp := tls.Alloc(100) 33054 defer tls.Free(100) 33055 33056 var db uintptr 33057 _ = db 33058 var zDb uintptr 33059 33060 if objc != 3 { 33061 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15892) 33062 return TCL_ERROR 33063 } 33064 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33065 33066 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+32) != 0) { 33067 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33068 return TCL_ERROR 33069 } 33070 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 32)).FobjClientData)).Fdb 33071 33072 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+96) != 0 { 33073 return TCL_ERROR 33074 } 33075 33076 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+15850)) 33077 return TCL_ERROR 33078 } 33079 33080 func sqlite_abort(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33081 libc.Xexit(tls, 255) 33082 33083 return TCL_OK 33084 } 33085 33086 func testFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33087 var zArg0 uintptr 33088 __1: 33089 if !(argc >= 2) { 33090 goto __2 33091 } 33092 zArg0 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33093 if !(zArg0 != 0) { 33094 goto __3 33095 } 33096 if !(0 == sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2577)) { 33097 goto __5 33098 } 33099 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33100 goto __6 33101 __5: 33102 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+3973) == 0) { 33103 goto __7 33104 } 33105 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33106 goto __8 33107 __7: 33108 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+15908) == 0) { 33109 goto __9 33110 } 33111 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), -1, 33112 libc.UintptrFromInt32(-1)) 33113 goto __10 33114 __9: 33115 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2562) == 0) { 33116 goto __11 33117 } 33118 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33119 goto __12 33120 __11: 33121 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+7939) == 0) { 33122 goto __13 33123 } 33124 sqlite3.Xsqlite3_result_null(tls, context) 33125 goto __14 33126 __13: 33127 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+10013) == 0) { 33128 goto __15 33129 } 33130 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv + uintptr(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))*8))) 33131 goto __16 33132 __15: 33133 goto error_out 33134 __16: 33135 ; 33136 __14: 33137 ; 33138 __12: 33139 ; 33140 __10: 33141 ; 33142 __8: 33143 ; 33144 __6: 33145 ; 33146 goto __4 33147 __3: 33148 goto error_out 33149 __4: 33150 ; 33151 argc = argc - 2 33152 argv += 8 * uintptr(2) 33153 goto __1 33154 __2: 33155 ; 33156 return 33157 33158 error_out: 33159 sqlite3.Xsqlite3_result_error(tls, context, 33160 ts+15915, -1) 33161 } 33162 33163 func test_register_func(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33164 bp := tls.Alloc(56) 33165 defer tls.Free(56) 33166 33167 var rc int32 33168 if argc != 3 { 33169 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33170 ts+15983, 0)) 33171 return TCL_ERROR 33172 } 33173 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 33174 return TCL_ERROR 33175 } 33176 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), -1, SQLITE_UTF8, uintptr(0), 33177 *(*uintptr)(unsafe.Pointer(&struct { 33178 f func(*libc.TLS, uintptr, int32, uintptr) 33179 }{testFunc})), uintptr(0), uintptr(0)) 33180 if rc != 0 { 33181 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 33182 return TCL_ERROR 33183 } 33184 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 33185 return TCL_ERROR 33186 } 33187 return TCL_OK 33188 } 33189 33190 func test_finalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33191 bp := tls.Alloc(40) 33192 defer tls.Free(40) 33193 33194 var rc int32 33195 var db uintptr = uintptr(0) 33196 33197 if objc != 2 { 33198 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33199 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33200 return TCL_ERROR 33201 } 33202 33203 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33204 return TCL_ERROR 33205 } 33206 33207 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 { 33208 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33209 } 33210 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33211 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33212 if db != 0 && sqlite3TestErrCode(tls, interp, db, rc) != 0 { 33213 return TCL_ERROR 33214 } 33215 return TCL_OK 33216 } 33217 33218 func test_stmt_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33219 bp := tls.Alloc(16) 33220 defer tls.Free(16) 33221 33222 var iValue int32 33223 var i int32 33224 *(*int32)(unsafe.Pointer(bp + 8)) = 0 33225 33226 var zOpName uintptr 33227 33228 if objc != 4 { 33229 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16009) 33230 return TCL_ERROR 33231 } 33232 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33233 return TCL_ERROR 33234 } 33235 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33236 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 33237 FzName uintptr 33238 Fop int32 33239 F__ccgo_pad1 [4]byte 33240 }{}))); i++ { 33241 if libc.Xstrcmp(tls, aOp[i].FzName, zOpName) == 0 { 33242 *(*int32)(unsafe.Pointer(bp + 8)) = aOp[i].Fop 33243 break 33244 } 33245 } 33246 if i >= int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 33247 FzName uintptr 33248 Fop int32 33249 F__ccgo_pad1 [4]byte 33250 }{}))) { 33251 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33252 return TCL_ERROR 33253 } 33254 } 33255 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 33256 return TCL_ERROR 33257 } 33258 iValue = sqlite3.Xsqlite3_stmt_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 33259 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iValue)) 33260 return TCL_OK 33261 } 33262 33263 var aOp = [7]struct { 33264 FzName uintptr 33265 Fop int32 33266 F__ccgo_pad1 [4]byte 33267 }{ 33268 {FzName: ts + 16034, Fop: SQLITE_STMTSTATUS_FULLSCAN_STEP}, 33269 {FzName: ts + 16066, Fop: SQLITE_STMTSTATUS_SORT}, 33270 {FzName: ts + 16089, Fop: SQLITE_STMTSTATUS_AUTOINDEX}, 33271 {FzName: ts + 16117, Fop: SQLITE_STMTSTATUS_VM_STEP}, 33272 {FzName: ts + 16143, Fop: SQLITE_STMTSTATUS_REPREPARE}, 33273 {FzName: ts + 16171, Fop: SQLITE_STMTSTATUS_RUN}, 33274 {FzName: ts + 16193, Fop: SQLITE_STMTSTATUS_MEMUSED}, 33275 } 33276 33277 func test_config_sorterref(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33278 bp := tls.Alloc(12) 33279 defer tls.Free(12) 33280 33281 if objc != 2 { 33282 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 33283 return TCL_ERROR 33284 } 33285 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 33286 return TCL_ERROR 33287 } 33288 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_SORTERREF_SIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 33289 return TCL_OK 33290 } 33291 33292 func vfsCurrentTimeInt64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33293 bp := tls.Alloc(8) 33294 defer tls.Free(8) 33295 33296 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 33297 if objc != 1 { 33298 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 33299 return TCL_ERROR 33300 } 33301 (*struct { 33302 f func(*libc.TLS, uintptr, uintptr) int32 33303 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTimeInt64})).f(tls, pVfs, bp) 33304 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*i64)(unsafe.Pointer(bp)))) 33305 return TCL_OK 33306 } 33307 33308 func test_snapshot_get(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33309 bp := tls.Alloc(116) 33310 defer tls.Free(116) 33311 33312 var rc int32 33313 33314 var zName uintptr 33315 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 33316 33317 if objc != 3 { 33318 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33319 return TCL_ERROR 33320 } 33321 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33322 return TCL_ERROR 33323 } 33324 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33325 33326 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 33327 if rc != SQLITE_OK { 33328 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33329 return TCL_ERROR 33330 } else { 33331 if sqlite3TestMakePointerStr(tls, interp, bp+16, *(*uintptr)(unsafe.Pointer(bp + 8))) != 0 { 33332 return TCL_ERROR 33333 } 33334 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 33335 } 33336 return TCL_OK 33337 } 33338 33339 func test_snapshot_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33340 bp := tls.Alloc(8) 33341 defer tls.Free(8) 33342 33343 var rc int32 33344 33345 var zName uintptr 33346 33347 if objc != 3 { 33348 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33349 return TCL_ERROR 33350 } 33351 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33352 return TCL_ERROR 33353 } 33354 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33355 33356 rc = sqlite3.Xsqlite3_snapshot_recover(tls, *(*uintptr)(unsafe.Pointer(bp)), zName) 33357 if rc != SQLITE_OK { 33358 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33359 return TCL_ERROR 33360 } else { 33361 tcl.XTcl_ResetResult(tls, interp) 33362 } 33363 return TCL_OK 33364 } 33365 33366 func test_snapshot_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33367 bp := tls.Alloc(8) 33368 defer tls.Free(8) 33369 33370 var rc int32 33371 33372 var zName uintptr 33373 var pSnapshot uintptr 33374 33375 if objc != 4 { 33376 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 33377 return TCL_ERROR 33378 } 33379 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33380 return TCL_ERROR 33381 } 33382 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33383 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)))) 33384 33385 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, pSnapshot) 33386 if rc != SQLITE_OK { 33387 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33388 return TCL_ERROR 33389 } else { 33390 tcl.XTcl_ResetResult(tls, interp) 33391 } 33392 return TCL_OK 33393 } 33394 33395 func test_snapshot_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33396 var pSnapshot uintptr 33397 if objc != 2 { 33398 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16254) 33399 return TCL_ERROR 33400 } 33401 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 33402 sqlite3.Xsqlite3_snapshot_free(tls, pSnapshot) 33403 return TCL_OK 33404 } 33405 33406 func test_snapshot_cmp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33407 var res int32 33408 var p1 uintptr 33409 var p2 uintptr 33410 if objc != 3 { 33411 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 33412 return TCL_ERROR 33413 } 33414 p1 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 33415 p2 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 33416 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 33417 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 33418 return TCL_OK 33419 } 33420 33421 func test_snapshot_get_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33422 bp := tls.Alloc(16) 33423 defer tls.Free(16) 33424 33425 var rc int32 33426 33427 var zName uintptr 33428 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 33429 33430 if objc != 3 { 33431 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33432 return TCL_ERROR 33433 } 33434 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33435 return TCL_ERROR 33436 } 33437 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33438 33439 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 33440 if rc != SQLITE_OK { 33441 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33442 return TCL_ERROR 33443 } else { 33444 tcl.XTcl_SetObjResult(tls, interp, 33445 tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), int32(unsafe.Sizeof(sqlite3_snapshot{})))) 33446 sqlite3.Xsqlite3_snapshot_free(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 33447 } 33448 return TCL_OK 33449 } 33450 33451 func test_snapshot_open_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33452 bp := tls.Alloc(28) 33453 defer tls.Free(28) 33454 33455 var rc int32 33456 33457 var zName uintptr 33458 var pBlob uintptr 33459 33460 if objc != 4 { 33461 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 33462 return TCL_ERROR 33463 } 33464 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33465 return TCL_ERROR 33466 } 33467 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33468 pBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) 33469 if uint64(*(*int32)(unsafe.Pointer(bp + 24))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) { 33470 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 33471 return TCL_ERROR 33472 } 33473 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zName, pBlob) 33474 if rc != SQLITE_OK { 33475 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33476 return TCL_ERROR 33477 } 33478 return TCL_OK 33479 } 33480 33481 func test_snapshot_cmp_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33482 bp := tls.Alloc(24) 33483 defer tls.Free(24) 33484 33485 var res int32 33486 var p1 uintptr 33487 var p2 uintptr 33488 33489 if objc != 3 { 33490 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 33491 return TCL_ERROR 33492 } 33493 33494 p1 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 33495 p2 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) 33496 33497 if uint64(*(*int32)(unsafe.Pointer(bp + 16))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) || *(*int32)(unsafe.Pointer(bp + 16)) != *(*int32)(unsafe.Pointer(bp + 20)) { 33498 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 33499 return TCL_ERROR 33500 } 33501 33502 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 33503 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 33504 return TCL_OK 33505 } 33506 33507 func test_delete_database(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33508 var rc int32 33509 var zFile uintptr 33510 if objc != 2 { 33511 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16296) 33512 return TCL_ERROR 33513 } 33514 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33515 rc = sqlite3_delete_database(tls, zFile) 33516 33517 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33518 return TCL_OK 33519 } 33520 33521 func test_atomic_batch_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33522 bp := tls.Alloc(32) 33523 defer tls.Free(32) 33524 33525 var zFile uintptr = uintptr(0) 33526 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 33527 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 33528 var bRes int32 = 0 33529 var dc int32 = 0 33530 var rc int32 33531 33532 if objc != 2 { 33533 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16301) 33534 return TCL_ERROR 33535 } 33536 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33537 33538 rc = sqlite3.Xsqlite3_open(tls, zFile, bp+16) 33539 if rc != SQLITE_OK { 33540 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 33541 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 33542 return TCL_ERROR 33543 } 33544 33545 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 33546 dc = (*struct { 33547 f func(*libc.TLS, uintptr) int32 33548 })(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))) 33549 if dc&SQLITE_IOCAP_BATCH_ATOMIC != 0 { 33550 bRes = 1 33551 } 33552 33553 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bRes)) 33554 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 33555 return TCL_OK 33556 } 33557 33558 func test_next_stmt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33559 bp := tls.Alloc(114) 33560 defer tls.Free(114) 33561 33562 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 33563 33564 if objc != 3 { 33565 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33566 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16306, 0)) 33567 return TCL_ERROR 33568 } 33569 33570 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 33571 return TCL_ERROR 33572 } 33573 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+56) != 0 { 33574 return TCL_ERROR 33575 } 33576 *(*uintptr)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_next_stmt(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56))) 33577 if *(*uintptr)(unsafe.Pointer(bp + 56)) != 0 { 33578 if sqlite3TestMakePointerStr(tls, interp, bp+64, *(*uintptr)(unsafe.Pointer(bp + 56))) != 0 { 33579 return TCL_ERROR 33580 } 33581 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+64, 0)) 33582 } 33583 return TCL_OK 33584 } 33585 33586 func test_stmt_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33587 bp := tls.Alloc(40) 33588 defer tls.Free(40) 33589 33590 var rc int32 33591 33592 if objc != 2 { 33593 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33594 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 33595 return TCL_ERROR 33596 } 33597 33598 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33599 return TCL_ERROR 33600 } 33601 rc = sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33602 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 33603 return TCL_OK 33604 } 33605 33606 func test_stmt_isexplain(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33607 bp := tls.Alloc(40) 33608 defer tls.Free(40) 33609 33610 var rc int32 33611 33612 if objc != 2 { 33613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33614 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 33615 return TCL_ERROR 33616 } 33617 33618 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33619 return TCL_ERROR 33620 } 33621 rc = sqlite3.Xsqlite3_stmt_isexplain(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33622 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 33623 return TCL_OK 33624 } 33625 33626 func test_stmt_busy(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33627 bp := tls.Alloc(40) 33628 defer tls.Free(40) 33629 33630 var rc int32 33631 33632 if objc != 2 { 33633 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33634 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 33635 return TCL_ERROR 33636 } 33637 33638 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33639 return TCL_ERROR 33640 } 33641 rc = sqlite3.Xsqlite3_stmt_busy(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33642 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 33643 return TCL_OK 33644 } 33645 33646 func uses_stmt_journal(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33647 bp := tls.Alloc(40) 33648 defer tls.Free(40) 33649 33650 if objc != 2 { 33651 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33652 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 33653 return TCL_ERROR 33654 } 33655 33656 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33657 return TCL_ERROR 33658 } 33659 sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33660 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)) + 200))&0x20>>5) != 0))) 33661 return TCL_OK 33662 } 33663 33664 func test_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33665 bp := tls.Alloc(40) 33666 defer tls.Free(40) 33667 33668 var rc int32 33669 33670 if objc != 2 { 33671 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33672 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33673 return TCL_ERROR 33674 } 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 33680 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33681 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 && sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 33682 return TCL_ERROR 33683 } 33684 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33685 33686 return TCL_OK 33687 } 33688 33689 func test_expired(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33690 bp := tls.Alloc(40) 33691 defer tls.Free(40) 33692 33693 if objc != 2 { 33694 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33695 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33696 return TCL_ERROR 33697 } 33698 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33699 return TCL_ERROR 33700 } 33701 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(sqlite3.Xsqlite3_expired(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) != 0))) 33702 return TCL_OK 33703 } 33704 33705 func test_transfer_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33706 bp := tls.Alloc(48) 33707 defer tls.Free(48) 33708 33709 if objc != 3 { 33710 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33711 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16321, 0)) 33712 return TCL_ERROR 33713 } 33714 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33715 return TCL_ERROR 33716 } 33717 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+40) != 0 { 33718 return TCL_ERROR 33719 } 33720 tcl.XTcl_SetObjResult(tls, interp, 33721 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_transfer_bindings(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))))) 33722 return TCL_OK 33723 } 33724 33725 func test_changes(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33726 bp := tls.Alloc(40) 33727 defer tls.Free(40) 33728 33729 if objc != 2 { 33730 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33731 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 33732 return TCL_ERROR 33733 } 33734 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33735 return TCL_ERROR 33736 } 33737 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_changes(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 33738 return TCL_OK 33739 } 33740 33741 var sqlite_static_bind_value uintptr = uintptr(0) 33742 var sqlite_static_bind_nbyte int32 = 0 33743 33744 func test_bind(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33745 bp := tls.Alloc(142) 33746 defer tls.Free(142) 33747 33748 var rc int32 33749 33750 if argc != 5 { 33751 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33752 ts+16340, 0)) 33753 return TCL_ERROR 33754 } 33755 if getStmtPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 33756 return TCL_ERROR 33757 } 33758 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+88) != 0 { 33759 return TCL_ERROR 33760 } 33761 if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+7939) == 0 { 33762 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88))) 33763 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16376) == 0 { 33764 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, -1, uintptr(0)) 33765 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16383) == 0 { 33766 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, 33767 sqlite_static_bind_nbyte, uintptr(0)) 33768 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16397) == 0 { 33769 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)) 33770 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16404) == 0 { 33771 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), ts+16411, 10, uintptr(0)) 33772 } else { 33773 tcl.XTcl_AppendResult(tls, interp, 33774 libc.VaList(bp+32, ts+16422, 0)) 33775 return TCL_ERROR 33776 } 33777 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), rc) != 0 { 33778 return TCL_ERROR 33779 } 33780 if rc != 0 { 33781 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+92, ts+16476, libc.VaList(bp+48, rc)) 33782 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 33783 return TCL_ERROR 33784 } 33785 return TCL_OK 33786 } 33787 33788 var pTestCollateInterp uintptr 33789 33790 func test_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 33791 bp := tls.Alloc(4) 33792 defer tls.Free(4) 33793 33794 var i uintptr = pTestCollateInterp 33795 var encin int32 = int32(pCtx) 33796 33797 var n int32 33798 var pVal uintptr 33799 var pX uintptr 33800 33801 pX = tcl.XTcl_NewStringObj(tls, ts+16482, -1) 33802 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 33803 33804 switch encin { 33805 case SQLITE_UTF8: 33806 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 33807 break 33808 case SQLITE_UTF16LE: 33809 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 33810 break 33811 case SQLITE_UTF16BE: 33812 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 33813 break 33814 default: 33815 } 33816 33817 sqlite3.Xsqlite3BeginBenignMalloc(tls) 33818 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 33819 if pVal != 0 { 33820 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nA, zA, uint8(encin), uintptr(0)) 33821 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 33822 tcl.XTcl_ListObjAppendElement(tls, i, pX, 33823 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 33824 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nB, zB, uint8(encin), uintptr(0)) 33825 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 33826 tcl.XTcl_ListObjAppendElement(tls, i, pX, 33827 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 33828 sqlite3.Xsqlite3ValueFree(tls, pVal) 33829 } 33830 sqlite3.Xsqlite3EndBenignMalloc(tls) 33831 33832 tcl.XTcl_EvalObjEx(tls, i, pX, 0) 33833 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33834 var _objPtr uintptr = pX 33835 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33836 tcl.XTclFreeObj(tls, _objPtr) 33837 } 33838 } 33839 tcl.XTcl_GetIntFromObj(tls, i, tcl.XTcl_GetObjResult(tls, i), bp) 33840 return *(*int32)(unsafe.Pointer(bp)) 33841 } 33842 33843 func test_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33844 bp := tls.Alloc(60) 33845 defer tls.Free(60) 33846 33847 var pVal uintptr 33848 var rc int32 33849 var zUtf16 uintptr 33850 33851 if !(objc != 5) { 33852 goto __1 33853 } 33854 goto bad_args 33855 __1: 33856 ; 33857 pTestCollateInterp = interp 33858 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 33859 goto __2 33860 } 33861 return TCL_ERROR 33862 __2: 33863 ; 33864 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56)) { 33865 goto __3 33866 } 33867 return TCL_ERROR 33868 __3: 33869 ; 33870 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF8, 33871 uintptr(SQLITE_UTF8), func() uintptr { 33872 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 33873 return *(*uintptr)(unsafe.Pointer(&struct { 33874 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33875 }{test_collate_func})) 33876 } 33877 return uintptr(0) 33878 }()) 33879 if !(rc == SQLITE_OK) { 33880 goto __4 33881 } 33882 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+56)) { 33883 goto __5 33884 } 33885 return TCL_ERROR 33886 __5: 33887 ; 33888 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF16LE, 33889 uintptr(SQLITE_UTF16LE), func() uintptr { 33890 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 33891 return *(*uintptr)(unsafe.Pointer(&struct { 33892 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33893 }{test_collate_func})) 33894 } 33895 return uintptr(0) 33896 }()) 33897 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+56)) { 33898 goto __6 33899 } 33900 return TCL_ERROR 33901 __6: 33902 ; 33903 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 33904 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 33905 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+16482, uint8(SQLITE_UTF8), uintptr(0)) 33906 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 33907 if !((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FmallocFailed != 0) { 33908 goto __7 33909 } 33910 rc = SQLITE_NOMEM 33911 goto __8 33912 __7: 33913 rc = sqlite3.Xsqlite3_create_collation16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zUtf16, SQLITE_UTF16BE, 33914 uintptr(SQLITE_UTF16BE), func() uintptr { 33915 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 33916 return *(*uintptr)(unsafe.Pointer(&struct { 33917 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33918 }{test_collate_func})) 33919 } 33920 return uintptr(0) 33921 }()) 33922 __8: 33923 ; 33924 sqlite3.Xsqlite3ValueFree(tls, pVal) 33925 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 33926 __4: 33927 ; 33928 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0) { 33929 goto __9 33930 } 33931 return TCL_ERROR 33932 __9: 33933 ; 33934 if !(rc != SQLITE_OK) { 33935 goto __10 33936 } 33937 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 33938 return TCL_ERROR 33939 __10: 33940 ; 33941 return TCL_OK 33942 33943 bad_args: 33944 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+14949, 33945 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 33946 return TCL_ERROR 33947 } 33948 33949 func test_utf16bin_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 33950 var nCmp int32 = func() int32 { 33951 if nA > nB { 33952 return nB 33953 } 33954 return nA 33955 }() 33956 var res int32 = libc.Xmemcmp(tls, zA, zB, uint64(nCmp)) 33957 if res == 0 { 33958 res = nA - nB 33959 } 33960 return res 33961 } 33962 33963 func test_utf16bin_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33964 bp := tls.Alloc(8) 33965 defer tls.Free(8) 33966 33967 var rc int32 33968 33969 if !(objc != 2) { 33970 goto __1 33971 } 33972 goto bad_args 33973 __1: 33974 ; 33975 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 33976 goto __2 33977 } 33978 return TCL_ERROR 33979 __2: 33980 ; 33981 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16552, SQLITE_UTF16, uintptr(0), 33982 *(*uintptr)(unsafe.Pointer(&struct { 33983 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33984 }{test_utf16bin_collate_func}))) 33985 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 33986 goto __3 33987 } 33988 return TCL_ERROR 33989 __3: 33990 ; 33991 return TCL_OK 33992 33993 bad_args: 33994 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 33995 return TCL_ERROR 33996 } 33997 33998 var zNeededCollation [200]int8 33999 var pzNeededCollation uintptr = 0 34000 34001 func test_collate_needed_cb(tls *libc.TLS, pCtx uintptr, db uintptr, eTextRep int32, pName uintptr) { 34002 var enc int32 = int32((*sqlite31)(unsafe.Pointer(db)).Fenc) 34003 var i int32 34004 var z uintptr 34005 z = pName 34006 i = 0 34007 for ; *(*int8)(unsafe.Pointer(z)) != 0 || *(*int8)(unsafe.Pointer(z + 1)) != 0; z++ { 34008 if *(*int8)(unsafe.Pointer(z)) != 0 { 34009 zNeededCollation[libc.PostIncInt32(&i, 1)] = *(*int8)(unsafe.Pointer(z)) 34010 } 34011 } 34012 zNeededCollation[i] = int8(0) 34013 sqlite3.Xsqlite3_create_collation(tls, 34014 db, ts+16482, int32((*sqlite31)(unsafe.Pointer(db)).Fenc), uintptr(intptr_t(enc)), *(*uintptr)(unsafe.Pointer(&struct { 34015 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34016 }{test_collate_func}))) 34017 } 34018 34019 func test_collate_needed(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34020 bp := tls.Alloc(8) 34021 defer tls.Free(8) 34022 34023 var rc int32 34024 34025 if !(objc != 2) { 34026 goto __1 34027 } 34028 goto bad_args 34029 __1: 34030 ; 34031 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 34032 goto __2 34033 } 34034 return TCL_ERROR 34035 __2: 34036 ; 34037 rc = sqlite3.Xsqlite3_collation_needed16(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34038 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 34039 }{test_collate_needed_cb}))) 34040 zNeededCollation[0] = int8(0) 34041 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 34042 goto __3 34043 } 34044 return TCL_ERROR 34045 __3: 34046 ; 34047 return TCL_OK 34048 34049 bad_args: 34050 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 34051 return TCL_ERROR 34052 } 34053 34054 var unaligned_string_counter int32 = 0 34055 34056 func alignmentCollFunc(tls *libc.TLS, NotUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 34057 var rc int32 34058 var n int32 34059 if nKey1 < nKey2 { 34060 n = nKey1 34061 } else { 34062 n = nKey2 34063 } 34064 if nKey1 > 0 && 1 == 1&int32(pKey1) { 34065 unaligned_string_counter++ 34066 } 34067 if nKey2 > 0 && 1 == 1&int32(pKey2) { 34068 unaligned_string_counter++ 34069 } 34070 rc = libc.Xmemcmp(tls, pKey1, pKey2, uint64(n)) 34071 if rc == 0 { 34072 rc = nKey1 - nKey2 34073 } 34074 return rc 34075 } 34076 34077 func add_alignment_test_collations(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34078 bp := tls.Alloc(8) 34079 defer tls.Free(8) 34080 34081 if objc >= 2 { 34082 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34083 return TCL_ERROR 34084 } 34085 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16561, SQLITE_UTF16, 34086 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34087 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34088 }{alignmentCollFunc}))) 34089 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16577, SQLITE_UTF16_ALIGNED, 34090 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34091 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34092 }{alignmentCollFunc}))) 34093 } 34094 return SQLITE_OK 34095 } 34096 34097 func test_function_utf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34098 var interp uintptr 34099 var pX uintptr 34100 var pVal uintptr 34101 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34102 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34103 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34104 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34105 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34106 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34107 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34108 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34109 var _objPtr uintptr = pX 34110 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34111 tcl.XTclFreeObj(tls, _objPtr) 34112 } 34113 } 34114 sqlite3.Xsqlite3_result_text(tls, pCtx, tcl.XTcl_GetStringResult(tls, interp), -1, libc.UintptrFromInt32(-1)) 34115 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34116 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34117 uint8(SQLITE_UTF8), uintptr(0)) 34118 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16be(tls, pVal), 34119 -1, libc.UintptrFromInt32(-1)) 34120 sqlite3.Xsqlite3ValueFree(tls, pVal) 34121 } 34122 34123 func test_function_utf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34124 var interp uintptr 34125 var pX uintptr 34126 var pVal uintptr 34127 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34128 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34129 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34130 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34131 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34132 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34133 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34134 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34135 var _objPtr uintptr = pX 34136 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34137 tcl.XTclFreeObj(tls, _objPtr) 34138 } 34139 } 34140 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34141 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34142 uint8(SQLITE_UTF8), uintptr(0)) 34143 sqlite3.Xsqlite3_result_text(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, pVal), -1, libc.UintptrFromInt32(-1)) 34144 sqlite3.Xsqlite3ValueFree(tls, pVal) 34145 } 34146 34147 func test_function_utf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34148 var interp uintptr 34149 var pX uintptr 34150 var pVal uintptr 34151 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34152 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34153 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34154 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34155 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34156 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34157 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34158 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34159 var _objPtr uintptr = pX 34160 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34161 tcl.XTclFreeObj(tls, _objPtr) 34162 } 34163 } 34164 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34165 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34166 uint8(SQLITE_UTF8), uintptr(0)) 34167 sqlite3.Xsqlite3_result_text16(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34168 -1, libc.UintptrFromInt32(-1)) 34169 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34170 -1, libc.UintptrFromInt32(-1)) 34171 sqlite3.Xsqlite3_result_text16le(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34172 -1, libc.UintptrFromInt32(-1)) 34173 sqlite3.Xsqlite3ValueFree(tls, pVal) 34174 } 34175 34176 func test_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34177 bp := tls.Alloc(44) 34178 defer tls.Free(44) 34179 34180 if !(objc != 5) { 34181 goto __1 34182 } 34183 goto bad_args 34184 __1: 34185 ; 34186 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0) { 34187 goto __2 34188 } 34189 return TCL_ERROR 34190 __2: 34191 ; 34192 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40)) { 34193 goto __3 34194 } 34195 return TCL_ERROR 34196 __3: 34197 ; 34198 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34199 goto __4 34200 } 34201 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF8, 34202 interp, *(*uintptr)(unsafe.Pointer(&struct { 34203 f func(*libc.TLS, uintptr, int32, uintptr) 34204 }{test_function_utf8})), uintptr(0), uintptr(0)) 34205 __4: 34206 ; 34207 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+40)) { 34208 goto __5 34209 } 34210 return TCL_ERROR 34211 __5: 34212 ; 34213 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34214 goto __6 34215 } 34216 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16LE, 34217 interp, *(*uintptr)(unsafe.Pointer(&struct { 34218 f func(*libc.TLS, uintptr, int32, uintptr) 34219 }{test_function_utf16le})), uintptr(0), uintptr(0)) 34220 __6: 34221 ; 34222 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40)) { 34223 goto __7 34224 } 34225 return TCL_ERROR 34226 __7: 34227 ; 34228 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34229 goto __8 34230 } 34231 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16BE, 34232 interp, *(*uintptr)(unsafe.Pointer(&struct { 34233 f func(*libc.TLS, uintptr, int32, uintptr) 34234 }{test_function_utf16be})), uintptr(0), uintptr(0)) 34235 __8: 34236 ; 34237 return TCL_OK 34238 bad_args: 34239 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34240 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 34241 return TCL_ERROR 34242 } 34243 34244 func test_errstr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34245 var zCode uintptr 34246 var i int32 34247 if objc != 1 { 34248 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16605) 34249 } 34250 34251 zCode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34252 for i = 0; i < 200; i++ { 34253 if 0 == libc.Xstrcmp(tls, sqlite3.Xsqlite3ErrName(tls, i), zCode) { 34254 break 34255 } 34256 } 34257 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, i), uintptr(0)) 34258 return TCL_OK 34259 } 34260 34261 func test_breakpoint(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34262 return TCL_OK 34263 } 34264 34265 func test_bind_zeroblob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34266 bp := tls.Alloc(16) 34267 defer tls.Free(16) 34268 34269 var rc int32 34270 34271 if objc != 4 { 34272 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 34273 return TCL_ERROR 34274 } 34275 34276 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34277 return TCL_ERROR 34278 } 34279 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 34280 return TCL_ERROR 34281 } 34282 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 34283 return TCL_ERROR 34284 } 34285 34286 rc = sqlite3.Xsqlite3_bind_zeroblob(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 34287 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp))), rc) != 0 { 34288 return TCL_ERROR 34289 } 34290 if rc != SQLITE_OK { 34291 return TCL_ERROR 34292 } 34293 34294 return TCL_OK 34295 } 34296 34297 func test_bind_zeroblob64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34298 bp := tls.Alloc(40) 34299 defer tls.Free(40) 34300 34301 var rc int32 34302 34303 if objc != 4 { 34304 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 34305 return TCL_ERROR 34306 } 34307 34308 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 34309 return TCL_ERROR 34310 } 34311 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 34312 return TCL_ERROR 34313 } 34314 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+32) != 0 { 34315 return TCL_ERROR 34316 } 34317 34318 rc = sqlite3.Xsqlite3_bind_zeroblob64(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 24)), uint64(*(*Tcl_WideInt)(unsafe.Pointer(bp + 32)))) 34319 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), rc) != 0 { 34320 return TCL_ERROR 34321 } 34322 if rc != SQLITE_OK { 34323 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34324 return TCL_ERROR 34325 } 34326 34327 return TCL_OK 34328 } 34329 34330 func test_bind_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34331 bp := tls.Alloc(48) 34332 defer tls.Free(48) 34333 34334 var rc int32 34335 34336 if objc != 4 { 34337 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34338 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34339 return TCL_ERROR 34340 } 34341 34342 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34343 return TCL_ERROR 34344 } 34345 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34346 return TCL_ERROR 34347 } 34348 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 34349 return TCL_ERROR 34350 } 34351 34352 rc = sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*int32)(unsafe.Pointer(bp + 44))) 34353 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34354 return TCL_ERROR 34355 } 34356 if rc != SQLITE_OK { 34357 return TCL_ERROR 34358 } 34359 34360 return TCL_OK 34361 } 34362 34363 func test_intarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34364 var i int32 34365 34366 sqlite3.Xsqlite3_free(tls, p) 34367 p = uintptr(0) 34368 if objc > 1 { 34369 p = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(objc-1))) 34370 if p == uintptr(0) { 34371 return TCL_ERROR 34372 } 34373 for i = 0; i < objc-1; i++ { 34374 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p+uintptr(i)*4) != 0 { 34375 sqlite3.Xsqlite3_free(tls, p) 34376 p = uintptr(0) 34377 return TCL_ERROR 34378 } 34379 } 34380 } 34381 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p))) 34382 return TCL_OK 34383 } 34384 34385 var p uintptr = uintptr(0) 34386 34387 func test_int64array_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34388 bp := tls.Alloc(8) 34389 defer tls.Free(8) 34390 34391 var i int32 34392 34393 sqlite3.Xsqlite3_free(tls, p1) 34394 p1 = uintptr(0) 34395 if objc > 1 { 34396 p1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(objc-1))) 34397 if p1 == uintptr(0) { 34398 return TCL_ERROR 34399 } 34400 for i = 0; i < objc-1; i++ { 34401 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), bp) != 0 { 34402 sqlite3.Xsqlite3_free(tls, p1) 34403 p1 = uintptr(0) 34404 return TCL_ERROR 34405 } 34406 *(*sqlite3_int64)(unsafe.Pointer(p1 + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 34407 } 34408 } 34409 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p1))) 34410 return TCL_OK 34411 } 34412 34413 var p1 uintptr = uintptr(0) 34414 34415 func test_doublearray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34416 var i int32 34417 34418 sqlite3.Xsqlite3_free(tls, p2) 34419 p2 = uintptr(0) 34420 if objc > 1 { 34421 p2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(objc-1))) 34422 if p2 == uintptr(0) { 34423 return TCL_ERROR 34424 } 34425 for i = 0; i < objc-1; i++ { 34426 if tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p2+uintptr(i)*8) != 0 { 34427 sqlite3.Xsqlite3_free(tls, p2) 34428 p2 = uintptr(0) 34429 return TCL_ERROR 34430 } 34431 } 34432 } 34433 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p2))) 34434 return TCL_OK 34435 } 34436 34437 var p2 uintptr = uintptr(0) 34438 34439 func test_textarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34440 bp := tls.Alloc(8) 34441 defer tls.Free(8) 34442 34443 var i int32 34444 34445 for i = 0; i < n; i++ { 34446 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*8))) 34447 } 34448 sqlite3.Xsqlite3_free(tls, p3) 34449 p3 = uintptr(0) 34450 if objc > 1 { 34451 p3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(objc-1))) 34452 if p3 == uintptr(0) { 34453 return TCL_ERROR 34454 } 34455 for i = 0; i < objc-1; i++ { 34456 *(*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))))) 34457 } 34458 } 34459 n = objc - 1 34460 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p3))) 34461 return TCL_OK 34462 } 34463 34464 var n int32 = 0 34465 var p3 uintptr = uintptr(0) 34466 34467 func test_bind_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34468 bp := tls.Alloc(56) 34469 defer tls.Free(56) 34470 34471 var rc int32 34472 34473 if objc != 4 { 34474 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34475 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34476 return TCL_ERROR 34477 } 34478 34479 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34480 return TCL_ERROR 34481 } 34482 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34483 return TCL_ERROR 34484 } 34485 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 34486 return TCL_ERROR 34487 } 34488 34489 rc = sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 48))) 34490 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34491 return TCL_ERROR 34492 } 34493 if rc != SQLITE_OK { 34494 return TCL_ERROR 34495 } 34496 34497 return TCL_OK 34498 } 34499 34500 func test_bind_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34501 bp := tls.Alloc(64) 34502 defer tls.Free(64) 34503 34504 *(*float64)(unsafe.Pointer(bp + 48)) = float64(0) 34505 var rc int32 34506 var zVal uintptr 34507 var i int32 34508 34509 if objc != 4 { 34510 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34511 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34512 return TCL_ERROR 34513 } 34514 34515 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34516 return TCL_ERROR 34517 } 34518 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34519 return TCL_ERROR 34520 } 34521 34522 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 34523 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 34524 FzName uintptr 34525 FiUpper uint32 34526 FiLower uint32 34527 }{})); i++ { 34528 if libc.Xstrcmp(tls, aSpecialFp[i].FzName, zVal) == 0 { 34529 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) = sqlite3_uint64(aSpecialFp[i].FiUpper) 34530 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) <<= 32 34531 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) |= sqlite3_uint64(aSpecialFp[i].FiLower) 34532 34533 libc.Xmemcpy(tls, bp+48, bp+56, uint64(8)) 34534 break 34535 } 34536 } 34537 if uint64(i) >= uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 34538 FzName uintptr 34539 FiUpper uint32 34540 FiLower uint32 34541 }{})) && tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 34542 return TCL_ERROR 34543 } 34544 rc = sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*float64)(unsafe.Pointer(bp + 48))) 34545 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34546 return TCL_ERROR 34547 } 34548 if rc != SQLITE_OK { 34549 return TCL_ERROR 34550 } 34551 34552 return TCL_OK 34553 } 34554 34555 var aSpecialFp = [10]struct { 34556 FzName uintptr 34557 FiUpper uint32 34558 FiLower uint32 34559 }{ 34560 {FzName: ts + 16643, FiUpper: uint32(0x7fffffff), FiLower: 0xffffffff}, 34561 {FzName: ts + 16647, FiUpper: uint32(0x7ff7ffff), FiLower: 0xffffffff}, 34562 {FzName: ts + 16652, FiUpper: 0xffffffff, FiLower: 0xffffffff}, 34563 {FzName: ts + 16657, FiUpper: 0xfff7ffff, FiLower: 0xffffffff}, 34564 {FzName: ts + 16663, FiUpper: uint32(0x7ff00000)}, 34565 {FzName: ts + 16668, FiUpper: 0xfff00000}, 34566 {FzName: ts + 16673, FiLower: uint32(0x00000001)}, 34567 {FzName: ts + 16681, FiUpper: 0x80000000, FiLower: uint32(0x00000001)}, 34568 {FzName: ts + 16690, FiUpper: uint32(0x7ff80000)}, 34569 {FzName: ts + 16695, FiUpper: 0xfff80000}, 34570 } 34571 34572 func test_bind_null(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34573 bp := tls.Alloc(44) 34574 defer tls.Free(44) 34575 34576 var rc int32 34577 34578 if objc != 3 { 34579 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34580 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16701, 0)) 34581 return TCL_ERROR 34582 } 34583 34584 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34585 return TCL_ERROR 34586 } 34587 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 34588 return TCL_ERROR 34589 } 34590 34591 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 34592 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34593 return TCL_ERROR 34594 } 34595 if rc != SQLITE_OK { 34596 return TCL_ERROR 34597 } 34598 34599 return TCL_OK 34600 } 34601 34602 func test_bind_text(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34603 bp := tls.Alloc(84) 34604 defer tls.Free(84) 34605 34606 *(*int32)(unsafe.Pointer(bp + 76)) = 0 34607 34608 var value uintptr 34609 var rc int32 34610 var toFree uintptr = uintptr(0) 34611 34612 if objc != 5 { 34613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34614 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 34615 return TCL_ERROR 34616 } 34617 34618 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 34619 return TCL_ERROR 34620 } 34621 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 34622 return TCL_ERROR 34623 } 34624 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 34625 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 34626 return TCL_ERROR 34627 } 34628 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 { 34629 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+1)) 34630 if toFree == uintptr(0) { 34631 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 34632 return TCL_ERROR 34633 } 34634 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 34635 *(*int8)(unsafe.Pointer(toFree + uintptr(*(*int32)(unsafe.Pointer(bp + 76))))) = int8(0) 34636 value = toFree 34637 } 34638 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)) 34639 libc.Xfree(tls, toFree) 34640 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 34641 return TCL_ERROR 34642 } 34643 if rc != SQLITE_OK { 34644 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 34645 return TCL_ERROR 34646 } 34647 34648 return TCL_OK 34649 } 34650 34651 func test_bind_text16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34652 bp := tls.Alloc(84) 34653 defer tls.Free(84) 34654 34655 var value uintptr 34656 var toFree uintptr = uintptr(0) 34657 var rc int32 34658 *(*int32)(unsafe.Pointer(bp + 76)) = 0 34659 34660 var xDel uintptr = func() uintptr { 34661 if objc == 6 { 34662 return uintptr(0) 34663 } 34664 return libc.UintptrFromInt32(-1) 34665 }() 34666 var oStmt uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-4)*8)) 34667 var oN uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)) 34668 var oString uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)) 34669 var oBytes uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 34670 34671 if objc != 5 && objc != 6 { 34672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34673 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 34674 return TCL_ERROR 34675 } 34676 34677 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, oStmt), bp+64) != 0 { 34678 return TCL_ERROR 34679 } 34680 if tcl.XTcl_GetIntFromObj(tls, interp, oN, bp+72) != 0 { 34681 return TCL_ERROR 34682 } 34683 value = tcl.XTcl_GetByteArrayFromObj(tls, oString, bp+76) 34684 if tcl.XTcl_GetIntFromObj(tls, interp, oBytes, bp+80) != 0 { 34685 return TCL_ERROR 34686 } 34687 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 && xDel == libc.UintptrFromInt32(-1) { 34688 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+3)) 34689 if toFree == uintptr(0) { 34690 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 34691 return TCL_ERROR 34692 } 34693 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 34694 libc.Xmemset(tls, toFree+uintptr(*(*int32)(unsafe.Pointer(bp + 76))), 0, uint64(3)) 34695 value = toFree 34696 } 34697 rc = sqlite3.Xsqlite3_bind_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDel) 34698 libc.Xfree(tls, toFree) 34699 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 34700 return TCL_ERROR 34701 } 34702 if rc != SQLITE_OK { 34703 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34704 return TCL_ERROR 34705 } 34706 34707 return TCL_OK 34708 } 34709 34710 func test_bind_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34711 bp := tls.Alloc(284) 34712 defer tls.Free(284) 34713 34714 var value uintptr 34715 var rc int32 34716 var xDestructor sqlite3_destructor_type = libc.UintptrFromInt32(-1) 34717 34718 if objc != 5 && objc != 6 { 34719 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34720 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16729, 0)) 34721 return TCL_ERROR 34722 } 34723 34724 if objc == 6 { 34725 xDestructor = uintptr(0) 34726 objv += 8 34727 } 34728 34729 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 34730 return TCL_ERROR 34731 } 34732 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 34733 return TCL_ERROR 34734 } 34735 34736 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 34737 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 34738 return TCL_ERROR 34739 } 34740 34741 if *(*int32)(unsafe.Pointer(bp + 80)) > *(*int32)(unsafe.Pointer(bp + 76)) { 34742 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+84, 34743 ts+16748, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 76)))) 34744 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+84, uintptr(0))) 34745 return TCL_ERROR 34746 } 34747 34748 rc = sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDestructor) 34749 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 34750 return TCL_ERROR 34751 } 34752 if rc != SQLITE_OK { 34753 return TCL_ERROR 34754 } 34755 34756 return TCL_OK 34757 } 34758 34759 func test_bind_value_from_preupdate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34760 bp := tls.Alloc(48) 34761 defer tls.Free(48) 34762 34763 var z3 uintptr = uintptr(0) 34764 var db uintptr = uintptr(0) 34765 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 34766 34767 if objc != 5 { 34768 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16782) 34769 return TCL_ERROR 34770 } 34771 34772 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 34773 return TCL_ERROR 34774 } 34775 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+32) != 0 { 34776 return TCL_ERROR 34777 } 34778 z3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 34779 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+36) != 0 { 34780 return TCL_ERROR 34781 } 34782 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 34783 34784 if int32(*(*int8)(unsafe.Pointer(z3))) == 'n' { 34785 sqlite3.Xsqlite3_preupdate_new(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 34786 } else if int32(*(*int8)(unsafe.Pointer(z3))) == 'o' { 34787 sqlite3.Xsqlite3_preupdate_old(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 34788 } else { 34789 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16801, z3, uintptr(0))) 34790 return TCL_ERROR 34791 } 34792 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))) 34793 34794 return TCL_OK 34795 } 34796 34797 func test_bind_value_from_select(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34798 bp := tls.Alloc(72) 34799 defer tls.Free(72) 34800 34801 var zSql uintptr = uintptr(0) 34802 var db uintptr = uintptr(0) 34803 var rc int32 = SQLITE_OK 34804 34805 if objc != 4 { 34806 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16828) 34807 return TCL_ERROR 34808 } 34809 34810 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 34811 return TCL_ERROR 34812 } 34813 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) != 0 { 34814 return TCL_ERROR 34815 } 34816 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 34817 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 34818 34819 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 34820 if rc != SQLITE_OK { 34821 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16842, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 34822 return TCL_ERROR 34823 } 34824 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 34825 var pVal uintptr = sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 34826 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56)), pVal) 34827 } 34828 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 34829 if rc != SQLITE_OK { 34830 tcl.XTcl_AppendResult(tls, interp, 34831 libc.VaList(bp+24, ts+16857, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 34832 return TCL_ERROR 34833 } 34834 34835 return TCL_OK 34836 } 34837 34838 func test_carray_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34839 bp := tls.Alloc(112) 34840 defer tls.Free(112) 34841 34842 var eType int32 34843 var nData int32 34844 var aData uintptr 34845 var isTransient int32 34846 var isStatic int32 34847 34848 var i int32 34849 var j int32 34850 var rc int32 34851 var xDel uintptr 34852 var z uintptr 34853 34854 var a uintptr 34855 34856 var a1 uintptr 34857 34858 var a2 uintptr 34859 var v3 uintptr 34860 var a3 uintptr 34861 eType = 0 34862 nData = 0 34863 aData = uintptr(0) 34864 isTransient = 0 34865 isStatic = 0 34866 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 34867 34868 if !(aStaticData != 0) { 34869 goto __1 34870 } 34871 34872 if !(eStaticType == 3) { 34873 goto __2 34874 } 34875 i = 0 34876 __3: 34877 if !(i < nStaticData) { 34878 goto __5 34879 } 34880 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aStaticData + uintptr(i)*8))) 34881 goto __4 34882 __4: 34883 i++ 34884 goto __3 34885 goto __5 34886 __5: 34887 ; 34888 __2: 34889 ; 34890 sqlite3.Xsqlite3_free(tls, aStaticData) 34891 aStaticData = uintptr(0) 34892 nStaticData = 0 34893 eStaticType = 0 34894 __1: 34895 ; 34896 if !(objc == 1) { 34897 goto __6 34898 } 34899 return TCL_OK 34900 __6: 34901 ; 34902 i = 1 34903 __7: 34904 if !(i < objc && int32(*(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)))))) == '-') { 34905 goto __9 34906 } 34907 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 34908 if !(libc.Xstrcmp(tls, z, ts+16878) == 0) { 34909 goto __10 34910 } 34911 isTransient = 1 34912 xDel = libc.UintptrFromInt32(-1) 34913 goto __11 34914 __10: 34915 if !(libc.Xstrcmp(tls, z, ts+16889) == 0) { 34916 goto __12 34917 } 34918 isStatic = 1 34919 xDel = uintptr(0) 34920 goto __13 34921 __12: 34922 if !(libc.Xstrcmp(tls, z, ts+16897) == 0) { 34923 goto __14 34924 } 34925 eType = 0 34926 goto __15 34927 __14: 34928 if !(libc.Xstrcmp(tls, z, ts+16904) == 0) { 34929 goto __16 34930 } 34931 eType = 1 34932 goto __17 34933 __16: 34934 if !(libc.Xstrcmp(tls, z, ts+16911) == 0) { 34935 goto __18 34936 } 34937 eType = 2 34938 goto __19 34939 __18: 34940 if !(libc.Xstrcmp(tls, z, ts+16919) == 0) { 34941 goto __20 34942 } 34943 eType = 3 34944 goto __21 34945 __20: 34946 if !(libc.Xstrcmp(tls, z, ts+16925) == 0) { 34947 goto __22 34948 } 34949 goto __9 34950 goto __23 34951 __22: 34952 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+12444, z, uintptr(0))) 34953 return TCL_ERROR 34954 __23: 34955 ; 34956 __21: 34957 ; 34958 __19: 34959 ; 34960 __17: 34961 ; 34962 __15: 34963 ; 34964 __13: 34965 ; 34966 __11: 34967 ; 34968 goto __8 34969 __8: 34970 i++ 34971 goto __7 34972 goto __9 34973 __9: 34974 ; 34975 if !(eType == 3 && !(isStatic != 0) && !(isTransient != 0)) { 34976 goto __24 34977 } 34978 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+16928, 34979 uintptr(0))) 34980 return TCL_ERROR 34981 __24: 34982 ; 34983 if !(isStatic != 0 && isTransient != 0) { 34984 goto __25 34985 } 34986 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+16975, 34987 uintptr(0))) 34988 return TCL_ERROR 34989 __25: 34990 ; 34991 if !(objc-i < 2) { 34992 goto __26 34993 } 34994 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17013) 34995 return TCL_ERROR 34996 __26: 34997 ; 34998 if !(getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))), bp+80) != 0) { 34999 goto __27 35000 } 35001 return TCL_ERROR 35002 __27: 35003 ; 35004 i++ 35005 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0) { 35006 goto __28 35007 } 35008 return TCL_ERROR 35009 __28: 35010 ; 35011 i++ 35012 nData = objc - i 35013 switch eType + 4*libc.Bool32(nData <= 0) { 35014 case 0: 35015 goto __30 35016 case 1: 35017 goto __31 35018 case 2: 35019 goto __32 35020 case 3: 35021 goto __33 35022 case 4: 35023 goto __34 35024 } 35025 goto __29 35026 __30: 35027 a = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nData))) 35028 if !(a == uintptr(0)) { 35029 goto __35 35030 } 35031 rc = SQLITE_NOMEM 35032 goto carray_bind_done 35033 __35: 35034 ; 35035 j = 0 35036 __36: 35037 if !(j < nData) { 35038 goto __38 35039 } 35040 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+92) != 0) { 35041 goto __39 35042 } 35043 sqlite3.Xsqlite3_free(tls, a) 35044 return TCL_ERROR 35045 __39: 35046 ; 35047 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = *(*int32)(unsafe.Pointer(bp + 92)) 35048 goto __37 35049 __37: 35050 j++ 35051 goto __36 35052 goto __38 35053 __38: 35054 ; 35055 aData = a 35056 goto __29 35057 35058 __31: 35059 a1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(nData))) 35060 if !(a1 == uintptr(0)) { 35061 goto __40 35062 } 35063 rc = SQLITE_NOMEM 35064 goto carray_bind_done 35065 __40: 35066 ; 35067 j = 0 35068 __41: 35069 if !(j < nData) { 35070 goto __43 35071 } 35072 if !(tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+96) != 0) { 35073 goto __44 35074 } 35075 sqlite3.Xsqlite3_free(tls, a1) 35076 return TCL_ERROR 35077 __44: 35078 ; 35079 *(*sqlite3_int64)(unsafe.Pointer(a1 + uintptr(j)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) 35080 goto __42 35081 __42: 35082 j++ 35083 goto __41 35084 goto __43 35085 __43: 35086 ; 35087 aData = a1 35088 goto __29 35089 35090 __32: 35091 a2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(nData))) 35092 if !(a2 == uintptr(0)) { 35093 goto __45 35094 } 35095 rc = SQLITE_NOMEM 35096 goto carray_bind_done 35097 __45: 35098 ; 35099 j = 0 35100 __46: 35101 if !(j < nData) { 35102 goto __48 35103 } 35104 if !(tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+104) != 0) { 35105 goto __49 35106 } 35107 sqlite3.Xsqlite3_free(tls, a2) 35108 return TCL_ERROR 35109 __49: 35110 ; 35111 *(*float64)(unsafe.Pointer(a2 + uintptr(j)*8)) = *(*float64)(unsafe.Pointer(bp + 104)) 35112 goto __47 35113 __47: 35114 j++ 35115 goto __46 35116 goto __48 35117 __48: 35118 ; 35119 aData = a2 35120 goto __29 35121 35122 __33: 35123 a3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nData))) 35124 if !(a3 == uintptr(0)) { 35125 goto __50 35126 } 35127 rc = SQLITE_NOMEM 35128 goto carray_bind_done 35129 __50: 35130 ; 35131 j = 0 35132 __51: 35133 if !(j < nData) { 35134 goto __53 35135 } 35136 v3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8))) 35137 *(*uintptr)(unsafe.Pointer(a3 + uintptr(j)*8)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+56, v3)) 35138 goto __52 35139 __52: 35140 j++ 35141 goto __51 35142 goto __53 35143 __53: 35144 ; 35145 aData = a3 35146 goto __29 35147 35148 __34: 35149 aData = ts + 584 35150 xDel = uintptr(0) 35151 isTransient = 0 35152 isStatic = 0 35153 goto __29 35154 35155 __29: 35156 ; 35157 if !(isStatic != 0) { 35158 goto __54 35159 } 35160 aStaticData = aData 35161 nStaticData = nData 35162 eStaticType = eType 35163 __54: 35164 ; 35165 rc = sqlite3_carray_bind(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), aData, nData, eType, xDel) 35166 if !(isTransient != 0) { 35167 goto __55 35168 } 35169 if !(eType == 3) { 35170 goto __56 35171 } 35172 i = 0 35173 __57: 35174 if !(i < nData) { 35175 goto __59 35176 } 35177 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8))) 35178 goto __58 35179 __58: 35180 i++ 35181 goto __57 35182 goto __59 35183 __59: 35184 ; 35185 __56: 35186 ; 35187 sqlite3.Xsqlite3_free(tls, aData) 35188 __55: 35189 ; 35190 carray_bind_done: 35191 if !(rc != 0) { 35192 goto __60 35193 } 35194 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, sqlite3.Xsqlite3_errstr(tls, rc), uintptr(0))) 35195 return TCL_ERROR 35196 __60: 35197 ; 35198 return TCL_OK 35199 } 35200 35201 var aStaticData uintptr = uintptr(0) 35202 var nStaticData int32 = 0 35203 var eStaticType int32 = 0 35204 35205 func test_bind_parameter_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35206 bp := tls.Alloc(8) 35207 defer tls.Free(8) 35208 35209 if objc != 2 { 35210 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35211 return TCL_ERROR 35212 } 35213 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35214 return TCL_ERROR 35215 } 35216 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))))) 35217 return TCL_OK 35218 } 35219 35220 func test_bind_parameter_name(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35221 bp := tls.Alloc(12) 35222 defer tls.Free(12) 35223 35224 if objc != 3 { 35225 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17047) 35226 return TCL_ERROR 35227 } 35228 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35229 return TCL_ERROR 35230 } 35231 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 35232 return TCL_ERROR 35233 } 35234 tcl.XTcl_SetObjResult(tls, interp, 35235 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))), -1)) 35236 return TCL_OK 35237 } 35238 35239 func test_bind_parameter_index(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35240 bp := tls.Alloc(8) 35241 defer tls.Free(8) 35242 35243 if objc != 3 { 35244 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17054) 35245 return TCL_ERROR 35246 } 35247 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35248 return TCL_ERROR 35249 } 35250 tcl.XTcl_SetObjResult(tls, interp, 35251 tcl.XTcl_NewIntObj(tls, 35252 sqlite3.Xsqlite3_bind_parameter_index(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))))) 35253 return TCL_OK 35254 } 35255 35256 func test_clear_bindings(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35257 bp := tls.Alloc(8) 35258 defer tls.Free(8) 35259 35260 if objc != 2 { 35261 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35262 return TCL_ERROR 35263 } 35264 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35265 return TCL_ERROR 35266 } 35267 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_clear_bindings(tls, *(*uintptr)(unsafe.Pointer(bp))))) 35268 return TCL_OK 35269 } 35270 35271 func test_sleep(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35272 bp := tls.Alloc(4) 35273 defer tls.Free(4) 35274 35275 if objc != 2 { 35276 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+13117) 35277 return TCL_ERROR 35278 } 35279 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 35280 return TCL_ERROR 35281 } 35282 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_sleep(tls, *(*int32)(unsafe.Pointer(bp))))) 35283 return TCL_OK 35284 } 35285 35286 func test_ex_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35287 bp := tls.Alloc(56) 35288 defer tls.Free(56) 35289 35290 var rc int32 35291 35292 if objc != 2 { 35293 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35294 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35295 return TCL_ERROR 35296 } 35297 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35298 return TCL_ERROR 35299 } 35300 rc = sqlite3.Xsqlite3_extended_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35301 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35302 return TCL_OK 35303 } 35304 35305 func test_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35306 bp := tls.Alloc(56) 35307 defer tls.Free(56) 35308 35309 var rc int32 35310 35311 if objc != 2 { 35312 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35313 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35314 return TCL_ERROR 35315 } 35316 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35317 return TCL_ERROR 35318 } 35319 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35320 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35321 return TCL_OK 35322 } 35323 35324 func test_errmsg(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35325 bp := tls.Alloc(40) 35326 defer tls.Free(40) 35327 35328 var zErr uintptr 35329 35330 if objc != 2 { 35331 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35332 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35333 return TCL_ERROR 35334 } 35335 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35336 return TCL_ERROR 35337 } 35338 35339 zErr = sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35340 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErr, -1)) 35341 return TCL_OK 35342 } 35343 35344 func test_error_offset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35345 bp := tls.Alloc(40) 35346 defer tls.Free(40) 35347 35348 var iByteOffset int32 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 iByteOffset = sqlite3.Xsqlite3_error_offset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35360 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iByteOffset)) 35361 return TCL_OK 35362 } 35363 35364 func test_errmsg16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35365 bp := tls.Alloc(40) 35366 defer tls.Free(40) 35367 35368 var zErr uintptr 35369 var z uintptr 35370 var bytes int32 = 0 35371 35372 if objc != 2 { 35373 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35374 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35375 return TCL_ERROR 35376 } 35377 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35378 return TCL_ERROR 35379 } 35380 35381 zErr = sqlite3.Xsqlite3_errmsg16(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35382 if zErr != 0 { 35383 z = zErr 35384 for bytes = 0; *(*int8)(unsafe.Pointer(z + uintptr(bytes))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(bytes+1))) != 0; bytes = bytes + 2 { 35385 } 35386 } 35387 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zErr, bytes)) 35388 return TCL_OK 35389 } 35390 35391 func test_prepare(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35392 bp := tls.Alloc(162) 35393 defer tls.Free(162) 35394 35395 var zSql uintptr 35396 35397 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 35398 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 35399 35400 var rc int32 35401 35402 if objc != 5 && objc != 4 { 35403 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35404 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 35405 return TCL_ERROR 35406 } 35407 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35408 return TCL_ERROR 35409 } 35410 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35411 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 35412 return TCL_ERROR 35413 } 35414 35415 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, func() uintptr { 35416 if objc >= 5 { 35417 return bp + 104 35418 } 35419 return uintptr(0) 35420 }()) 35421 tcl.XTcl_ResetResult(tls, interp) 35422 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35423 return TCL_ERROR 35424 } 35425 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 35426 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35427 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 35428 } 35429 if int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) < *(*int32)(unsafe.Pointer(bp + 88)) { 35430 *(*int32)(unsafe.Pointer(bp + 88)) = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) 35431 } 35432 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) 35433 } 35434 if rc != SQLITE_OK { 35435 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 35436 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35437 return TCL_ERROR 35438 } 35439 35440 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 35441 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 35442 return TCL_ERROR 35443 } 35444 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 35445 } 35446 return TCL_OK 35447 } 35448 35449 func test_prepare_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35450 bp := tls.Alloc(162) 35451 defer tls.Free(162) 35452 35453 var zSql uintptr 35454 var zCopy uintptr = uintptr(0) 35455 35456 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 35457 var pzTail uintptr 35458 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 35459 35460 var rc int32 35461 35462 if objc != 5 && objc != 4 { 35463 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35464 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 35465 return TCL_ERROR 35466 } 35467 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35468 return TCL_ERROR 35469 } 35470 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35471 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 35472 return TCL_ERROR 35473 } 35474 35475 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35476 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35477 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35478 } else { 35479 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 35480 zCopy = libc.Xmalloc(tls, uint64(n)) 35481 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 35482 } 35483 if objc >= 5 { 35484 pzTail = bp + 96 35485 } else { 35486 pzTail = uintptr(0) 35487 } 35488 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 88)), bp+104, pzTail) 35489 if objc >= 5 { 35490 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 35491 } 35492 libc.Xfree(tls, zCopy) 35493 35494 tcl.XTcl_ResetResult(tls, interp) 35495 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35496 return TCL_ERROR 35497 } 35498 if rc == SQLITE_OK && objc >= 5 && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 35499 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35500 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 35501 } 35502 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) 35503 } 35504 if rc != SQLITE_OK { 35505 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 35506 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35507 return TCL_ERROR 35508 } 35509 35510 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 35511 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 35512 return TCL_ERROR 35513 } 35514 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 35515 } 35516 return TCL_OK 35517 } 35518 35519 func test_prepare_v3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35520 bp := tls.Alloc(162) 35521 defer tls.Free(162) 35522 35523 var zSql uintptr 35524 var zCopy uintptr = uintptr(0) 35525 35526 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 35527 var pzTail uintptr 35528 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 35529 35530 var rc int32 35531 35532 if objc != 6 && objc != 5 { 35533 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35534 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17110, 0)) 35535 return TCL_ERROR 35536 } 35537 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35538 return TCL_ERROR 35539 } 35540 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35541 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 35542 return TCL_ERROR 35543 } 35544 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+92) != 0 { 35545 return TCL_ERROR 35546 } 35547 35548 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35549 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35550 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 35551 } else { 35552 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 35553 zCopy = libc.Xmalloc(tls, uint64(n)) 35554 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 35555 } 35556 if objc >= 6 { 35557 pzTail = bp + 96 35558 } else { 35559 pzTail = uintptr(0) 35560 } 35561 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) 35562 libc.Xfree(tls, zCopy) 35563 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 35564 35565 tcl.XTcl_ResetResult(tls, interp) 35566 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35567 return TCL_ERROR 35568 } 35569 if rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 && objc >= 6 { 35570 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 35571 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 35572 } 35573 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) 35574 } 35575 if rc != SQLITE_OK { 35576 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 35577 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35578 return TCL_ERROR 35579 } 35580 35581 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 35582 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 35583 return TCL_ERROR 35584 } 35585 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 35586 } 35587 return TCL_OK 35588 } 35589 35590 func test_prepare_tkt3134(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35591 bp := tls.Alloc(146) 35592 defer tls.Free(146) 35593 35594 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 35595 35596 var rc int32 35597 35598 if objc != 2 { 35599 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35600 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 35601 return TCL_ERROR 35602 } 35603 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 35604 return TCL_ERROR 35605 } 35606 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), uintptr(unsafe.Pointer(&zSql))+1, 0, bp+88, uintptr(0)) 35607 35608 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 35609 return TCL_ERROR 35610 } 35611 if rc != SQLITE_OK { 35612 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+96, ts+16476, libc.VaList(bp+32, rc)) 35613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 35614 return TCL_ERROR 35615 } 35616 35617 if *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 35618 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 88))) != 0 { 35619 return TCL_ERROR 35620 } 35621 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 35622 } 35623 return TCL_OK 35624 } 35625 35626 var zSql = *(*[10]int8)(unsafe.Pointer(ts + 17138)) 35627 35628 func test_prepare16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35629 bp := tls.Alloc(130) 35630 defer tls.Free(130) 35631 35632 var zSql uintptr 35633 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 35634 var pTail uintptr = uintptr(0) 35635 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 35636 35637 var rc int32 35638 35639 if objc != 5 && objc != 4 { 35640 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35641 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 35642 return TCL_ERROR 35643 } 35644 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35645 return TCL_ERROR 35646 } 35647 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 35648 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 35649 return TCL_ERROR 35650 } 35651 35652 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 35653 if objc >= 5 { 35654 return bp + 72 35655 } 35656 return uintptr(0) 35657 }()) 35658 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 35659 return TCL_ERROR 35660 } 35661 if rc != 0 { 35662 return TCL_ERROR 35663 } 35664 35665 if objc >= 5 { 35666 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 35667 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 35668 } else { 35669 *(*int32)(unsafe.Pointer(bp + 56)) = 0 35670 } 35671 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 35672 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 35673 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 35674 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35675 var _objPtr uintptr = pTail 35676 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 35677 tcl.XTclFreeObj(tls, _objPtr) 35678 } 35679 } 35680 } 35681 35682 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 35683 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 35684 return TCL_ERROR 35685 } 35686 } 35687 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 35688 return TCL_OK 35689 } 35690 35691 func test_prepare16_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35692 bp := tls.Alloc(130) 35693 defer tls.Free(130) 35694 35695 var zSql uintptr 35696 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 35697 var pTail uintptr = uintptr(0) 35698 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 35699 35700 var rc int32 35701 35702 if objc != 5 && objc != 4 { 35703 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35704 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 35705 return TCL_ERROR 35706 } 35707 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35708 return TCL_ERROR 35709 } 35710 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 35711 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 35712 return TCL_ERROR 35713 } 35714 35715 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 35716 if objc >= 5 { 35717 return bp + 72 35718 } 35719 return uintptr(0) 35720 }()) 35721 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 35722 return TCL_ERROR 35723 } 35724 if rc != 0 { 35725 return TCL_ERROR 35726 } 35727 35728 if objc >= 5 { 35729 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 35730 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 35731 } else { 35732 *(*int32)(unsafe.Pointer(bp + 56)) = 0 35733 } 35734 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 35735 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 35736 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 35737 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35738 var _objPtr uintptr = pTail 35739 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 35740 tcl.XTclFreeObj(tls, _objPtr) 35741 } 35742 } 35743 } 35744 35745 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 35746 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 35747 return TCL_ERROR 35748 } 35749 } 35750 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 35751 return TCL_OK 35752 } 35753 35754 func test_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35755 bp := tls.Alloc(156) 35756 defer tls.Free(156) 35757 35758 var zFilename uintptr 35759 35760 if objc != 3 && objc != 2 && objc != 1 { 35761 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35762 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 35763 return TCL_ERROR 35764 } 35765 35766 if objc > 1 { 35767 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 35768 } else { 35769 zFilename = uintptr(0) 35770 } 35771 sqlite3.Xsqlite3_open(tls, zFilename, bp+48) 35772 35773 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 35774 return TCL_ERROR 35775 } 35776 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 35777 return TCL_OK 35778 } 35779 35780 func test_open_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35781 bp := tls.Alloc(484) 35782 defer tls.Free(484) 35783 35784 var zFilename uintptr 35785 var zVfs uintptr 35786 var flags int32 = 0 35787 35788 var rc int32 35789 35790 var i int32 35791 35792 if objc != 4 { 35793 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17171) 35794 return TCL_ERROR 35795 } 35796 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 35797 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35798 if int32(*(*int8)(unsafe.Pointer(zVfs))) == 0x00 { 35799 zVfs = uintptr(0) 35800 } 35801 35802 rc = tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16, bp+24) 35803 if rc != TCL_OK { 35804 return rc 35805 } 35806 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 16)); i++ { 35807 *(*[21]OpenFlag)(unsafe.Pointer(bp + 32)) = [21]OpenFlag{ 35808 {FzFlag: ts + 17190, Fflag: SQLITE_OPEN_READONLY}, 35809 {FzFlag: ts + 17211, Fflag: SQLITE_OPEN_READWRITE}, 35810 {FzFlag: ts + 17233, Fflag: SQLITE_OPEN_CREATE}, 35811 {FzFlag: ts + 17252, Fflag: SQLITE_OPEN_DELETEONCLOSE}, 35812 {FzFlag: ts + 17278, Fflag: SQLITE_OPEN_EXCLUSIVE}, 35813 {FzFlag: ts + 17300, Fflag: SQLITE_OPEN_AUTOPROXY}, 35814 {FzFlag: ts + 17322, Fflag: SQLITE_OPEN_MAIN_DB}, 35815 {FzFlag: ts + 17342, Fflag: SQLITE_OPEN_TEMP_DB}, 35816 {FzFlag: ts + 17362, Fflag: SQLITE_OPEN_TRANSIENT_DB}, 35817 {FzFlag: ts + 17387, Fflag: SQLITE_OPEN_MAIN_JOURNAL}, 35818 {FzFlag: ts + 17412, Fflag: SQLITE_OPEN_TEMP_JOURNAL}, 35819 {FzFlag: ts + 17437, Fflag: SQLITE_OPEN_SUBJOURNAL}, 35820 {FzFlag: ts + 17460, Fflag: SQLITE_OPEN_SUPER_JOURNAL}, 35821 {FzFlag: ts + 17486, Fflag: SQLITE_OPEN_NOMUTEX}, 35822 {FzFlag: ts + 17506, Fflag: SQLITE_OPEN_FULLMUTEX}, 35823 {FzFlag: ts + 17528, Fflag: SQLITE_OPEN_SHAREDCACHE}, 35824 {FzFlag: ts + 17552, Fflag: SQLITE_OPEN_PRIVATECACHE}, 35825 {FzFlag: ts + 17577, Fflag: SQLITE_OPEN_WAL}, 35826 {FzFlag: ts + 17593, Fflag: SQLITE_OPEN_URI}, 35827 {FzFlag: ts + 17609, Fflag: SQLITE_OPEN_EXRESCODE}, 35828 {}, 35829 } 35830 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)) + uintptr(i)*8)), bp+32, int32(unsafe.Sizeof(OpenFlag{})), 35831 ts+17631, 0, bp+368) 35832 if rc != TCL_OK { 35833 return rc 35834 } 35835 flags = flags | (*OpenFlag)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 368)))*16)).Fflag 35836 } 35837 35838 rc = sqlite3.Xsqlite3_open_v2(tls, zFilename, bp+376, flags, zVfs) 35839 if sqlite3TestMakePointerStr(tls, interp, bp+384, *(*uintptr)(unsafe.Pointer(bp + 376))) != 0 { 35840 return TCL_ERROR 35841 } 35842 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+384, 0)) 35843 return TCL_OK 35844 } 35845 35846 type OpenFlag = struct { 35847 FzFlag uintptr 35848 Fflag int32 35849 F__ccgo_pad1 [4]byte 35850 } 35851 35852 func test_open16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35853 bp := tls.Alloc(156) 35854 defer tls.Free(156) 35855 35856 var zFilename uintptr 35857 35858 if objc != 3 { 35859 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35860 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 35861 return TCL_ERROR 35862 } 35863 35864 zFilename = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 35865 sqlite3.Xsqlite3_open16(tls, zFilename, bp+48) 35866 35867 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 35868 return TCL_ERROR 35869 } 35870 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 35871 return TCL_OK 35872 } 35873 35874 func test_complete16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35875 var zBuf uintptr 35876 35877 if objc != 2 { 35878 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17636) 35879 return TCL_ERROR 35880 } 35881 35882 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 35883 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_complete16(tls, zBuf))) 35884 return TCL_OK 35885 } 35886 35887 func test_normalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35888 var zSql uintptr 35889 var zNorm uintptr 35890 35891 if objc != 2 { 35892 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9535) 35893 return TCL_ERROR 35894 } 35895 35896 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 35897 zNorm = sqlite3_normalize(tls, zSql) 35898 if zNorm != 0 { 35899 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zNorm, -1)) 35900 sqlite3.Xsqlite3_free(tls, zNorm) 35901 } 35902 return TCL_OK 35903 } 35904 35905 func test_step(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35906 bp := tls.Alloc(40) 35907 defer tls.Free(40) 35908 35909 var rc int32 35910 35911 if objc != 2 { 35912 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35913 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+16315, 0)) 35914 return TCL_ERROR 35915 } 35916 35917 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35918 return TCL_ERROR 35919 } 35920 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35921 35922 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 35923 return TCL_OK 35924 } 35925 35926 func test_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35927 bp := tls.Alloc(8) 35928 defer tls.Free(8) 35929 35930 if objc != 2 { 35931 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35932 return TCL_ERROR 35933 } 35934 35935 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35936 return TCL_ERROR 35937 } 35938 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 35939 return TCL_OK 35940 } 35941 35942 func test_ex_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35943 bp := tls.Alloc(8) 35944 defer tls.Free(8) 35945 35946 var z uintptr 35947 35948 if objc != 2 { 35949 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35950 return TCL_ERROR 35951 } 35952 35953 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35954 return TCL_ERROR 35955 } 35956 z = sqlite3.Xsqlite3_expanded_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 35957 tcl.XTcl_SetResult(tls, interp, z, uintptr(1)) 35958 sqlite3.Xsqlite3_free(tls, z) 35959 return TCL_OK 35960 } 35961 35962 func test_column_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35963 bp := tls.Alloc(40) 35964 defer tls.Free(40) 35965 35966 if objc != 2 { 35967 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35968 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 35969 return TCL_ERROR 35970 } 35971 35972 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35973 return TCL_ERROR 35974 } 35975 35976 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 35977 return TCL_OK 35978 } 35979 35980 func test_column_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35981 bp := tls.Alloc(44) 35982 defer tls.Free(44) 35983 35984 var tp int32 35985 35986 if objc != 3 { 35987 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35988 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 35989 return TCL_ERROR 35990 } 35991 35992 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35993 return TCL_ERROR 35994 } 35995 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35996 return TCL_ERROR 35997 } 35998 35999 tp = sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36000 switch tp { 36001 case SQLITE_INTEGER: 36002 tcl.XTcl_SetResult(tls, interp, ts+2413, uintptr(0)) 36003 break 36004 case SQLITE_NULL: 36005 tcl.XTcl_SetResult(tls, interp, ts+5846, uintptr(0)) 36006 break 36007 case SQLITE_FLOAT: 36008 tcl.XTcl_SetResult(tls, interp, ts+17662, uintptr(0)) 36009 break 36010 case SQLITE_TEXT: 36011 tcl.XTcl_SetResult(tls, interp, ts+17668, uintptr(0)) 36012 break 36013 case SQLITE_BLOB: 36014 tcl.XTcl_SetResult(tls, interp, ts+17673, uintptr(0)) 36015 break 36016 default: 36017 } 36018 36019 return TCL_OK 36020 } 36021 36022 func test_column_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36023 bp := tls.Alloc(44) 36024 defer tls.Free(44) 36025 36026 var iVal i64 36027 36028 if objc != 3 { 36029 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36030 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36031 return TCL_ERROR 36032 } 36033 36034 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36035 return TCL_ERROR 36036 } 36037 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36038 return TCL_ERROR 36039 } 36040 36041 iVal = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36042 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iVal)) 36043 return TCL_OK 36044 } 36045 36046 func test_column_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36047 bp := tls.Alloc(44) 36048 defer tls.Free(44) 36049 36050 var len int32 36051 var pBlob uintptr 36052 36053 if objc != 3 { 36054 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36055 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36056 return TCL_ERROR 36057 } 36058 36059 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36060 return TCL_ERROR 36061 } 36062 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36063 return TCL_ERROR 36064 } 36065 36066 len = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36067 pBlob = sqlite3.Xsqlite3_column_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36068 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pBlob, len)) 36069 return TCL_OK 36070 } 36071 36072 func test_column_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36073 bp := tls.Alloc(44) 36074 defer tls.Free(44) 36075 36076 var rVal float64 36077 36078 if objc != 3 { 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 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36088 return TCL_ERROR 36089 } 36090 36091 rVal = sqlite3.Xsqlite3_column_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36092 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewDoubleObj(tls, rVal)) 36093 return TCL_OK 36094 } 36095 36096 func test_data_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36097 bp := tls.Alloc(40) 36098 defer tls.Free(40) 36099 36100 if objc != 2 { 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 36110 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_data_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36111 return TCL_OK 36112 } 36113 36114 func test_stmt_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36115 bp := tls.Alloc(44) 36116 defer tls.Free(44) 36117 36118 var xFunc uintptr 36119 var zRet uintptr 36120 36121 xFunc = clientData 36122 if objc != 3 { 36123 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36124 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36125 return TCL_ERROR 36126 } 36127 36128 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36129 return TCL_ERROR 36130 } 36131 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36132 return TCL_ERROR 36133 } 36134 zRet = (*struct { 36135 f func(*libc.TLS, uintptr, int32) uintptr 36136 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36137 if zRet != 0 { 36138 tcl.XTcl_SetResult(tls, interp, zRet, uintptr(0)) 36139 } 36140 return TCL_OK 36141 } 36142 36143 func test_global_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36144 var rc int32 36145 if objc != 1 { 36146 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 36147 return TCL_ERROR 36148 } 36149 rc = sqlite3.Xsqlite3_global_recover(tls) 36150 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36151 return TCL_OK 36152 } 36153 36154 func test_stmt_utf16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36155 bp := tls.Alloc(44) 36156 defer tls.Free(44) 36157 36158 var pRet uintptr 36159 var zName16 uintptr 36160 var xFunc uintptr 36161 36162 xFunc = clientData 36163 if objc != 3 { 36164 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36165 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36166 return TCL_ERROR 36167 } 36168 36169 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36170 return TCL_ERROR 36171 } 36172 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36173 return TCL_ERROR 36174 } 36175 36176 zName16 = (*struct { 36177 f func(*libc.TLS, uintptr, int32) uintptr 36178 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36179 if zName16 != 0 { 36180 var n int32 36181 var z uintptr = zName16 36182 for n = 0; *(*int8)(unsafe.Pointer(z + uintptr(n))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(n+1))) != 0; n = n + 2 { 36183 } 36184 pRet = tcl.XTcl_NewByteArrayObj(tls, zName16, n+2) 36185 tcl.XTcl_SetObjResult(tls, interp, pRet) 36186 } 36187 36188 return TCL_OK 36189 } 36190 36191 func test_stmt_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36192 bp := tls.Alloc(44) 36193 defer tls.Free(44) 36194 36195 var xFunc uintptr 36196 36197 xFunc = clientData 36198 if objc != 3 { 36199 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36200 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36201 return TCL_ERROR 36202 } 36203 36204 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36205 return TCL_ERROR 36206 } 36207 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36208 return TCL_ERROR 36209 } 36210 36211 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*struct { 36212 f func(*libc.TLS, uintptr, int32) int32 36213 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))))) 36214 return TCL_OK 36215 } 36216 36217 func test_interrupt(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36218 bp := tls.Alloc(40) 36219 defer tls.Free(40) 36220 36221 if argc != 2 { 36222 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15001, 0)) 36223 return TCL_ERROR 36224 } 36225 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36226 return TCL_ERROR 36227 } 36228 sqlite3.Xsqlite3_interrupt(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36229 return TCL_OK 36230 } 36231 36232 func delete_function(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36233 bp := tls.Alloc(40) 36234 defer tls.Free(40) 36235 36236 var rc int32 36237 36238 if argc != 3 { 36239 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36240 ts+17678, 0)) 36241 return TCL_ERROR 36242 } 36243 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36244 return TCL_ERROR 36245 } 36246 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)) 36247 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36248 return TCL_OK 36249 } 36250 36251 func delete_collation(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36252 bp := tls.Alloc(40) 36253 defer tls.Free(40) 36254 36255 var rc int32 36256 36257 if argc != 3 { 36258 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36259 ts+17678, 0)) 36260 return TCL_ERROR 36261 } 36262 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 36263 return TCL_ERROR 36264 } 36265 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), SQLITE_UTF8, uintptr(0), uintptr(0)) 36266 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36267 return TCL_OK 36268 } 36269 36270 func get_autocommit(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36271 bp := tls.Alloc(94) 36272 defer tls.Free(94) 36273 36274 if argc != 2 { 36275 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36276 ts+15001, 0)) 36277 return TCL_ERROR 36278 } 36279 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 36280 return TCL_ERROR 36281 } 36282 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))))) 36283 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 36284 return TCL_OK 36285 } 36286 36287 func test_busy_timeout(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36288 bp := tls.Alloc(60) 36289 defer tls.Free(60) 36290 36291 var rc int32 36292 36293 if argc != 3 { 36294 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36295 ts+15001, 0)) 36296 return TCL_ERROR 36297 } 36298 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 36299 return TCL_ERROR 36300 } 36301 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 36302 return TCL_ERROR 36303 } 36304 rc = sqlite3.Xsqlite3_busy_timeout(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56))) 36305 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36306 return TCL_OK 36307 } 36308 36309 func tcl_variable_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36310 var pVar uintptr 36311 if objc != 2 { 36312 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17696) 36313 return TCL_ERROR 36314 } 36315 pVar = tcl.XTcl_GetVar2Ex(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0), TCL_LEAVE_ERR_MSG) 36316 if pVar == uintptr(0) { 36317 return TCL_ERROR 36318 } 36319 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 36320 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname, -1)) 36321 } 36322 return TCL_OK 36323 } 36324 36325 func test_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36326 bp := tls.Alloc(4) 36327 defer tls.Free(4) 36328 36329 var amt int32 36330 if objc != 1 && objc != 2 { 36331 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36332 return TCL_ERROR 36333 } 36334 if objc == 2 { 36335 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36336 return TCL_ERROR 36337 } 36338 } else { 36339 *(*int32)(unsafe.Pointer(bp)) = -1 36340 } 36341 amt = sqlite3.Xsqlite3_release_memory(tls, *(*int32)(unsafe.Pointer(bp))) 36342 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, amt)) 36343 return TCL_OK 36344 } 36345 36346 func test_db_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36347 bp := tls.Alloc(8) 36348 defer tls.Free(8) 36349 36350 var rc int32 36351 if objc != 2 { 36352 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36353 return TCL_ERROR 36354 } 36355 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36356 return TCL_ERROR 36357 } 36358 rc = sqlite3.Xsqlite3_db_release_memory(tls, *(*uintptr)(unsafe.Pointer(bp))) 36359 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36360 return TCL_OK 36361 } 36362 36363 func test_db_cacheflush(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 rc 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 rc = sqlite3.Xsqlite3_db_cacheflush(tls, *(*uintptr)(unsafe.Pointer(bp))) 36376 if rc != 0 { 36377 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 36378 return TCL_ERROR 36379 } 36380 36381 tcl.XTcl_ResetResult(tls, interp) 36382 return TCL_OK 36383 } 36384 36385 func test_system_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36386 bp := tls.Alloc(8) 36387 defer tls.Free(8) 36388 36389 var iErrno int32 36390 if objc != 2 { 36391 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36392 return TCL_ERROR 36393 } 36394 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36395 return TCL_ERROR 36396 } 36397 iErrno = sqlite3.Xsqlite3_system_errno(tls, *(*uintptr)(unsafe.Pointer(bp))) 36398 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iErrno)) 36399 return TCL_OK 36400 } 36401 36402 func test_db_filename(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36403 bp := tls.Alloc(24) 36404 defer tls.Free(24) 36405 36406 var zDbName uintptr 36407 if objc != 3 { 36408 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36409 return TCL_ERROR 36410 } 36411 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 36412 return TCL_ERROR 36413 } 36414 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36415 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_db_filename(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbName), uintptr(0))) 36416 return TCL_OK 36417 } 36418 36419 func test_db_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36420 bp := tls.Alloc(8) 36421 defer tls.Free(8) 36422 36423 var zDbName uintptr 36424 if objc != 3 { 36425 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36426 return TCL_ERROR 36427 } 36428 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36429 return TCL_ERROR 36430 } 36431 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36432 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_db_readonly(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName))) 36433 return TCL_OK 36434 } 36435 36436 func test_soft_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36437 bp := tls.Alloc(8) 36438 defer tls.Free(8) 36439 36440 var amt sqlite3_int64 36441 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 36442 if objc != 1 && objc != 2 { 36443 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36444 return TCL_ERROR 36445 } 36446 if objc == 2 { 36447 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36448 return TCL_ERROR 36449 } 36450 } 36451 amt = sqlite3.Xsqlite3_soft_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 36452 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 36453 return TCL_OK 36454 } 36455 36456 func test_hard_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36457 bp := tls.Alloc(8) 36458 defer tls.Free(8) 36459 36460 var amt sqlite3_int64 36461 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 36462 if objc != 1 && objc != 2 { 36463 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36464 return TCL_ERROR 36465 } 36466 if objc == 2 { 36467 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36468 return TCL_ERROR 36469 } 36470 } 36471 amt = sqlite3.Xsqlite3_hard_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 36472 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 36473 return TCL_OK 36474 } 36475 36476 func test_thread_cleanup(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36477 sqlite3.Xsqlite3_thread_cleanup(tls) 36478 return TCL_OK 36479 } 36480 36481 func test_pager_refcounts(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36482 bp := tls.Alloc(40) 36483 defer tls.Free(40) 36484 36485 var i int32 36486 var v int32 36487 var a uintptr 36488 var pResult uintptr 36489 36490 if objc != 2 { 36491 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36492 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 36493 return TCL_ERROR 36494 } 36495 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36496 return TCL_ERROR 36497 } 36498 pResult = tcl.XTcl_NewObj(tls) 36499 for i = 0; i < (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FnDb; i++ { 36500 if (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt == uintptr(0) { 36501 v = -1 36502 } else { 36503 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 36504 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt)) 36505 v = *(*int32)(unsafe.Pointer(a)) 36506 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 36507 } 36508 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, v)) 36509 } 36510 tcl.XTcl_SetObjResult(tls, interp, pResult) 36511 return TCL_OK 36512 } 36513 36514 func working_64bit_int(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36515 var pTestObj uintptr 36516 var working int32 = 0 36517 36518 pTestObj = tcl.XTcl_NewWideIntObj(tls, int64(1000000)*int64(1234567890)) 36519 working = libc.Bool32(libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, pTestObj), ts+17709) == 0) 36520 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36521 var _objPtr uintptr = pTestObj 36522 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36523 tcl.XTclFreeObj(tls, _objPtr) 36524 } 36525 } 36526 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(working != 0))) 36527 return TCL_OK 36528 } 36529 36530 func vfs_unlink_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36531 bp := tls.Alloc(496) 36532 defer tls.Free(496) 36533 36534 var i int32 36535 var pMain uintptr 36536 36537 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(0)) 36538 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 36539 (*sqlite3_vfs)(unsafe.Pointer(bp + 168)).FzName = ts + 17732 36540 36541 pMain = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 36542 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 36543 36544 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 0) 36545 36546 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 36547 36548 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 1) 36549 36550 if pMain != 0 { 36551 sqlite3.Xsqlite3_vfs_register(tls, pMain, 1) 36552 36553 } 36554 36555 for i = 0; uint64(i) < uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 36556 *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 36557 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 36558 sqlite3.Xsqlite3_vfs_unregister(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8))) 36559 36560 } 36561 } 36562 36563 sqlite3.Xsqlite3_vfs_register(tls, pMain, 0) 36564 36565 sqlite3.Xsqlite3_vfs_unregister(tls, pMain) 36566 36567 for i = int32(uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)); i >= 0; i-- { 36568 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 36569 sqlite3.Xsqlite3_vfs_register(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)), 1) 36570 36571 } 36572 } 36573 36574 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 36575 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 36576 36577 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 36578 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 36579 36580 return TCL_OK 36581 } 36582 36583 func vfs_initfail_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36584 bp := tls.Alloc(168) 36585 defer tls.Free(168) 36586 36587 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 36588 36589 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 36590 return TCL_ERROR 36591 } 36592 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 36593 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 36594 return TCL_ERROR 36595 } 36596 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 36597 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 36598 return TCL_ERROR 36599 } 36600 return TCL_OK 36601 } 36602 36603 var apVfs [20]uintptr 36604 var nVfs int32 = 0 36605 36606 func vfs_unregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36607 var i int32 36608 for i = 0; i < int32(uint64(unsafe.Sizeof(apVfs))/uint64(unsafe.Sizeof(uintptr(0)))); i++ { 36609 apVfs[i] = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 36610 if apVfs[i] == uintptr(0) { 36611 break 36612 } 36613 sqlite3.Xsqlite3_vfs_unregister(tls, apVfs[i]) 36614 } 36615 nVfs = i 36616 return TCL_OK 36617 } 36618 36619 func vfs_reregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36620 var i int32 36621 for i = nVfs - 1; i >= 0; i-- { 36622 sqlite3.Xsqlite3_vfs_register(tls, apVfs[i], 1) 36623 } 36624 return TCL_OK 36625 } 36626 36627 func file_control_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36628 bp := tls.Alloc(44) 36629 defer tls.Free(44) 36630 36631 *(*int32)(unsafe.Pointer(bp + 40)) = 0 36632 36633 var rc int32 36634 _ = rc 36635 36636 if objc != 2 { 36637 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36638 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 36639 return TCL_ERROR 36640 } 36641 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36642 return TCL_ERROR 36643 } 36644 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), uintptr(0), 0, bp+40) 36645 36646 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+17738, SQLITE_FCNTL_LOCKSTATE, bp+40) 36647 36648 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+85, -1, bp+40) 36649 36650 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+8931, -1, bp+40) 36651 36652 return TCL_OK 36653 } 36654 36655 func file_control_lasterrno_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36656 bp := tls.Alloc(76) 36657 defer tls.Free(76) 36658 36659 *(*int32)(unsafe.Pointer(bp + 72)) = 0 36660 36661 var rc int32 36662 36663 if objc != 2 { 36664 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36665 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 36666 return TCL_ERROR 36667 } 36668 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 36669 return TCL_ERROR 36670 } 36671 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_LAST_ERRNO, bp+72) 36672 if rc != 0 { 36673 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36674 return TCL_ERROR 36675 } 36676 if *(*int32)(unsafe.Pointer(bp + 72)) != 0 { 36677 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17751, 36678 tcl.XTcl_GetStringFromObj(tls, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 72))), uintptr(0)), ts+4894, 0)) 36679 return TCL_ERROR 36680 } 36681 return TCL_OK 36682 } 36683 36684 func file_control_data_version(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36685 bp := tls.Alloc(120) 36686 defer tls.Free(120) 36687 36688 var zDb uintptr 36689 36690 var rc int32 36691 36692 if objc != 3 && objc != 2 { 36693 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17779) 36694 return TCL_ERROR 36695 } 36696 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 36697 return TCL_ERROR 36698 } 36699 if objc == 3 { 36700 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36701 } else { 36702 zDb = uintptr(0) 36703 } 36704 36705 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, SQLITE_FCNTL_DATA_VERSION, bp+16) 36706 if rc != 0 { 36707 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36708 return TCL_ERROR 36709 } else { 36710 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+20, ts+17791, libc.VaList(bp, *(*uint32)(unsafe.Pointer(bp + 16)))) 36711 tcl.XTcl_SetResult(tls, interp, bp+20, uintptr(1)) 36712 return TCL_OK 36713 } 36714 return int32(0) 36715 } 36716 36717 func file_control_chunksize_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36718 bp := tls.Alloc(12) 36719 defer tls.Free(12) 36720 36721 var zDb uintptr 36722 36723 var rc int32 36724 36725 if objc != 4 { 36726 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 36727 return TCL_ERROR 36728 } 36729 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 36730 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 36731 return TCL_ERROR 36732 } 36733 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36734 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 36735 zDb = uintptr(0) 36736 } 36737 36738 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_CHUNK_SIZE, bp+8) 36739 if rc != 0 { 36740 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36741 return TCL_ERROR 36742 } 36743 return TCL_OK 36744 } 36745 36746 func file_control_sizehint_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36747 bp := tls.Alloc(16) 36748 defer tls.Free(16) 36749 36750 var zDb uintptr 36751 36752 var rc int32 36753 36754 if objc != 4 { 36755 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 36756 return TCL_ERROR 36757 } 36758 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 36759 tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 36760 return TCL_ERROR 36761 } 36762 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36763 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 36764 zDb = uintptr(0) 36765 } 36766 36767 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_SIZE_HINT, bp+8) 36768 if rc != 0 { 36769 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36770 return TCL_ERROR 36771 } 36772 return TCL_OK 36773 } 36774 36775 func file_control_lockproxy_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36776 bp := tls.Alloc(40) 36777 defer tls.Free(40) 36778 36779 if objc != 3 { 36780 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36781 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17809, 0)) 36782 return TCL_ERROR 36783 } 36784 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36785 return TCL_ERROR 36786 } 36787 36788 return TCL_OK 36789 } 36790 36791 func file_control_persist_wal(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36792 bp := tls.Alloc(176) 36793 defer tls.Free(176) 36794 36795 var rc int32 36796 36797 if objc != 3 { 36798 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36799 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 36800 return TCL_ERROR 36801 } 36802 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 36803 return TCL_ERROR 36804 } 36805 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 36806 return TCL_ERROR 36807 } 36808 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_PERSIST_WAL, bp+72) 36809 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 36810 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 36811 return TCL_OK 36812 } 36813 36814 func file_control_powersafe_overwrite(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36815 bp := tls.Alloc(176) 36816 defer tls.Free(176) 36817 36818 var rc int32 36819 36820 if objc != 3 { 36821 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36822 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 36823 return TCL_ERROR 36824 } 36825 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 36826 return TCL_ERROR 36827 } 36828 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 36829 return TCL_ERROR 36830 } 36831 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_POWERSAFE_OVERWRITE, bp+72) 36832 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 36833 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 36834 return TCL_OK 36835 } 36836 36837 func file_control_vfsname(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36838 bp := tls.Alloc(64) 36839 defer tls.Free(64) 36840 36841 var zDbName uintptr = ts + 85 36842 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 36843 36844 if objc != 2 && objc != 3 { 36845 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36846 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 36847 return TCL_ERROR 36848 } 36849 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36850 return TCL_ERROR 36851 } 36852 if objc == 3 { 36853 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36854 } 36855 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_VFSNAME, bp+56) 36856 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 36857 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 36858 return TCL_OK 36859 } 36860 36861 func file_control_reservebytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36862 bp := tls.Alloc(12) 36863 defer tls.Free(12) 36864 36865 var zDbName uintptr = ts + 85 36866 *(*int32)(unsafe.Pointer(bp + 8)) = 0 36867 var rc int32 36868 36869 if objc != 3 { 36870 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17844) 36871 return TCL_ERROR 36872 } 36873 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 36874 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 36875 return TCL_ERROR 36876 } 36877 36878 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName, SQLITE_FCNTL_RESERVE_BYTES, bp+8) 36879 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 36880 return TCL_OK 36881 } 36882 36883 func file_control_tempfilename(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36884 bp := tls.Alloc(64) 36885 defer tls.Free(64) 36886 36887 var zDbName uintptr = ts + 85 36888 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 36889 36890 if objc != 2 && objc != 3 { 36891 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36892 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 36893 return TCL_ERROR 36894 } 36895 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36896 return TCL_ERROR 36897 } 36898 if objc == 3 { 36899 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36900 } 36901 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_TEMPFILENAME, bp+56) 36902 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 36903 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 36904 return TCL_OK 36905 } 36906 36907 func file_control_external_reader(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36908 bp := tls.Alloc(44) 36909 defer tls.Free(44) 36910 36911 var zName uintptr = ts + 85 36912 *(*int32)(unsafe.Pointer(bp + 40)) = 0 36913 var rc int32 = SQLITE_OK 36914 36915 if objc != 2 && objc != 3 { 36916 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36917 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 36918 return TCL_ERROR 36919 } 36920 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36921 return TCL_ERROR 36922 } 36923 if objc == 3 { 36924 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36925 } 36926 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, SQLITE_FCNTL_EXTERNAL_READER, bp+40) 36927 if rc != SQLITE_OK { 36928 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36929 return TCL_ERROR 36930 } 36931 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 36932 return TCL_OK 36933 } 36934 36935 func vfs_list(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36936 var pVfs uintptr 36937 var pRet uintptr = tcl.XTcl_NewObj(tls) 36938 if objc != 1 { 36939 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 36940 return TCL_ERROR 36941 } 36942 for pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)); pVfs != 0; pVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpNext { 36943 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 36944 } 36945 tcl.XTcl_SetObjResult(tls, interp, pRet) 36946 return TCL_OK 36947 } 36948 36949 func test_limit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36950 bp := tls.Alloc(68) 36951 defer tls.Free(68) 36952 36953 var rc int32 36954 var i int32 36955 var id int32 = 0 36956 36957 var zId uintptr 36958 36959 if objc != 4 { 36960 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36961 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17849, 0)) 36962 return TCL_ERROR 36963 } 36964 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 36965 return TCL_ERROR 36966 } 36967 zId = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36968 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 36969 FzName uintptr 36970 Fid int32 36971 F__ccgo_pad1 [4]byte 36972 }{})); i++ { 36973 if libc.Xstrcmp(tls, zId, aId[i].FzName) == 0 { 36974 id = aId[i].Fid 36975 break 36976 } 36977 } 36978 if uint64(i) >= uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 36979 FzName uintptr 36980 Fid int32 36981 F__ccgo_pad1 [4]byte 36982 }{})) { 36983 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17862, zId, uintptr(0))) 36984 return TCL_ERROR 36985 } 36986 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 36987 return TCL_ERROR 36988 } 36989 rc = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), id, *(*int32)(unsafe.Pointer(bp + 64))) 36990 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36991 return TCL_OK 36992 } 36993 36994 var aId = [14]struct { 36995 FzName uintptr 36996 Fid int32 36997 F__ccgo_pad1 [4]byte 36998 }{ 36999 {FzName: ts + 17883}, 37000 {FzName: ts + 17903, Fid: SQLITE_LIMIT_SQL_LENGTH}, 37001 {FzName: ts + 17927, Fid: SQLITE_LIMIT_COLUMN}, 37002 {FzName: ts + 17947, Fid: SQLITE_LIMIT_EXPR_DEPTH}, 37003 {FzName: ts + 17971, Fid: SQLITE_LIMIT_COMPOUND_SELECT}, 37004 {FzName: ts + 18000, Fid: SQLITE_LIMIT_VDBE_OP}, 37005 {FzName: ts + 18021, Fid: SQLITE_LIMIT_FUNCTION_ARG}, 37006 {FzName: ts + 18047, Fid: SQLITE_LIMIT_ATTACHED}, 37007 {FzName: ts + 18069, Fid: SQLITE_LIMIT_LIKE_PATTERN_LENGTH}, 37008 {FzName: ts + 18102, Fid: SQLITE_LIMIT_VARIABLE_NUMBER}, 37009 {FzName: ts + 18131, Fid: SQLITE_LIMIT_TRIGGER_DEPTH}, 37010 {FzName: ts + 18158, Fid: SQLITE_LIMIT_WORKER_THREADS}, 37011 {FzName: ts + 18186, Fid: -1}, 37012 {FzName: ts + 18208, Fid: SQLITE_LIMIT_WORKER_THREADS + 1}, 37013 } 37014 37015 func save_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37016 var rc int32 = sqlite3.Xsqlite3_test_control(tls, 9999, 0) 37017 _ = rc 37018 37019 rc = sqlite3.Xsqlite3_test_control(tls, -1, 0) 37020 37021 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SAVE, 0) 37022 return TCL_OK 37023 } 37024 37025 func restore_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37026 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_RESTORE, 0) 37027 return TCL_OK 37028 } 37029 37030 func reset_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37031 sqlite3.Xsqlite3_randomness(tls, 0, uintptr(0)) 37032 return TCL_OK 37033 } 37034 37035 func prng_seed(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37036 bp := tls.Alloc(32) 37037 defer tls.Free(32) 37038 37039 *(*int32)(unsafe.Pointer(bp + 16)) = 0 37040 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 37041 if objc != 2 && objc != 3 { 37042 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18228) 37043 return TCL_ERROR 37044 } 37045 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 37046 return TCL_ERROR 37047 } 37048 if objc == 3 && getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) != 0 { 37049 return TCL_ERROR 37050 } 37051 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SEED, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 24)))) 37052 return TCL_OK 37053 } 37054 37055 func extra_schema_checks(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37056 bp := tls.Alloc(12) 37057 defer tls.Free(12) 37058 37059 *(*int32)(unsafe.Pointer(bp + 8)) = 0 37060 if objc != 2 { 37061 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 37062 return TCL_ERROR 37063 } 37064 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 37065 return TCL_ERROR 37066 } 37067 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 37068 return TCL_OK 37069 } 37070 37071 func database_may_be_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37072 bp := tls.Alloc(8) 37073 defer tls.Free(8) 37074 37075 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 0)) 37076 return TCL_OK 37077 } 37078 37079 func database_never_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37080 bp := tls.Alloc(8) 37081 defer tls.Free(8) 37082 37083 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 1)) 37084 return TCL_OK 37085 } 37086 37087 func test_pcache_stats(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37088 bp := tls.Alloc(16) 37089 defer tls.Free(16) 37090 37091 var pRet uintptr 37092 37093 sqlite3.Xsqlite3PcacheStats(tls, bp, bp+4, bp+8, bp+12) 37094 37095 pRet = tcl.XTcl_NewObj(tls) 37096 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18246, -1)) 37097 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp)))) 37098 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18254, -1)) 37099 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 37100 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18258, -1)) 37101 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 37102 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18262, -1)) 37103 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 37104 37105 tcl.XTcl_SetObjResult(tls, interp, pRet) 37106 37107 return TCL_OK 37108 } 37109 37110 func test_unlock_notify_cb(tls *libc.TLS, aArg uintptr, nArg int32) { 37111 var ii int32 37112 for ii = 0; ii < nArg; ii++ { 37113 tcl.XTcl_EvalEx(tls, *(*uintptr)(unsafe.Pointer(aArg + uintptr(ii)*8)), ts+13692, -1, TCL_EVAL_GLOBAL) 37114 } 37115 } 37116 37117 func test_unlock_notify(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37118 bp := tls.Alloc(8) 37119 defer tls.Free(8) 37120 37121 var rc int32 37122 37123 if objc != 2 { 37124 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37125 return TCL_ERROR 37126 } 37127 37128 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37129 return TCL_ERROR 37130 } 37131 rc = sqlite3.Xsqlite3_unlock_notify(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct { 37132 f func(*libc.TLS, uintptr, int32) 37133 }{test_unlock_notify_cb})), interp) 37134 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37135 return TCL_OK 37136 } 37137 37138 func test_wal_checkpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37139 bp := tls.Alloc(8) 37140 defer tls.Free(8) 37141 37142 var zDb uintptr = uintptr(0) 37143 37144 var rc int32 37145 37146 if objc != 3 && objc != 2 { 37147 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18273) 37148 return TCL_ERROR 37149 } 37150 37151 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37152 return TCL_ERROR 37153 } 37154 if objc == 3 { 37155 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37156 } 37157 rc = sqlite3.Xsqlite3_wal_checkpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 37158 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37159 return TCL_OK 37160 } 37161 37162 func test_wal_checkpoint_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37163 bp := tls.Alloc(96) 37164 defer tls.Free(96) 37165 37166 var zDb uintptr = uintptr(0) 37167 37168 var rc int32 37169 37170 *(*int32)(unsafe.Pointer(bp + 88)) = -555 37171 *(*int32)(unsafe.Pointer(bp + 92)) = -555 37172 var pRet uintptr 37173 37174 *(*[5]uintptr)(unsafe.Pointer(bp + 48)) = [5]uintptr{ts + 18283, ts + 18291, ts + 18296, ts + 18304, uintptr(0)} 37175 37176 if objc != 3 && objc != 4 { 37177 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18313) 37178 return TCL_ERROR 37179 } 37180 37181 if objc == 4 { 37182 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37183 } 37184 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) && 37185 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) { 37186 return TCL_ERROR 37187 } 37188 37189 rc = sqlite3.Xsqlite3_wal_checkpoint_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zDb, *(*int32)(unsafe.Pointer(bp + 40)), bp+88, bp+92) 37190 if rc != SQLITE_OK && rc != SQLITE_BUSY { 37191 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37192 tcl.XTcl_ResetResult(tls, interp) 37193 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErrCode, ts+9645, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0)) 37194 return TCL_ERROR 37195 } 37196 37197 pRet = tcl.XTcl_NewObj(tls) 37198 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, func() int32 { 37199 if rc == SQLITE_BUSY { 37200 return 1 37201 } 37202 return 0 37203 }())) 37204 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 88)))) 37205 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 92)))) 37206 tcl.XTcl_SetObjResult(tls, interp, pRet) 37207 37208 return TCL_OK 37209 } 37210 37211 func test_wal_autocheckpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37212 bp := tls.Alloc(12) 37213 defer tls.Free(12) 37214 37215 var rc int32 37216 37217 if objc != 3 { 37218 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18333) 37219 return TCL_ERROR 37220 } 37221 37222 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37223 tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 37224 return TCL_ERROR 37225 } 37226 37227 rc = sqlite3.Xsqlite3_wal_autocheckpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 37228 tcl.XTcl_ResetResult(tls, interp) 37229 if rc != SQLITE_OK { 37230 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37231 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErrCode, -1)) 37232 return TCL_ERROR 37233 } 37234 37235 return TCL_OK 37236 } 37237 37238 type LogCallback = struct { 37239 FpInterp uintptr 37240 FpObj uintptr 37241 } 37242 37243 var logcallback = LogCallback{} 37244 37245 func xLogcallback(tls *libc.TLS, unused uintptr, err int32, zMsg uintptr) { 37246 var pNew uintptr = tcl.XTcl_DuplicateObj(tls, logcallback.FpObj) 37247 (*Tcl_Obj)(unsafe.Pointer(pNew)).FrefCount++ 37248 tcl.XTcl_ListObjAppendElement(tls, 37249 uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, err), -1)) 37250 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, zMsg, -1)) 37251 tcl.XTcl_EvalObjEx(tls, logcallback.FpInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT) 37252 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37253 var _objPtr uintptr = pNew 37254 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37255 tcl.XTclFreeObj(tls, _objPtr) 37256 } 37257 } 37258 } 37259 37260 func test_sqlite3_log(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37261 bp := tls.Alloc(32) 37262 defer tls.Free(32) 37263 37264 if objc > 2 { 37265 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10187) 37266 return TCL_ERROR 37267 } 37268 if logcallback.FpObj != 0 { 37269 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37270 var _objPtr uintptr = logcallback.FpObj 37271 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37272 tcl.XTclFreeObj(tls, _objPtr) 37273 } 37274 } 37275 logcallback.FpObj = uintptr(0) 37276 logcallback.FpInterp = uintptr(0) 37277 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp, uintptr(0), uintptr(0))) 37278 } 37279 if objc > 1 { 37280 logcallback.FpObj = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 37281 (*Tcl_Obj)(unsafe.Pointer(logcallback.FpObj)).FrefCount++ 37282 logcallback.FpInterp = interp 37283 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct { 37284 f func(*libc.TLS, uintptr, int32, uintptr) 37285 }{xLogcallback})), uintptr(0))) 37286 } 37287 return TCL_OK 37288 } 37289 37290 func runAsObjProc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37291 bp := tls.Alloc(112) 37292 defer tls.Free(112) 37293 37294 if objc < 2 { 37295 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18342) 37296 return TCL_ERROR 37297 } 37298 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 37299 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 37300 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 37301 return TCL_ERROR 37302 } 37303 if (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjProc == uintptr(0) { 37304 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18354, 37305 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 37306 return TCL_ERROR 37307 } 37308 return (*struct { 37309 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 37310 })(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) 37311 } 37312 37313 func printExplainQueryPlan(tls *libc.TLS, pStmt uintptr) int32 { 37314 bp := tls.Alloc(48) 37315 defer tls.Free(48) 37316 37317 var zSql uintptr 37318 var zExplain uintptr 37319 37320 var rc int32 37321 37322 zSql = sqlite3.Xsqlite3_sql(tls, pStmt) 37323 if zSql == uintptr(0) { 37324 return SQLITE_ERROR 37325 } 37326 37327 zExplain = sqlite3.Xsqlite3_mprintf(tls, ts+330, libc.VaList(bp, zSql)) 37328 if zExplain == uintptr(0) { 37329 return SQLITE_NOMEM 37330 } 37331 37332 rc = sqlite3.Xsqlite3_prepare_v2(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt), zExplain, -1, bp+40, uintptr(0)) 37333 sqlite3.Xsqlite3_free(tls, zExplain) 37334 if rc != SQLITE_OK { 37335 return rc 37336 } 37337 37338 for SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 37339 var iSelectid int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 37340 var iOrder int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 37341 var iFrom int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 37342 var zDetail uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 3) 37343 37344 libc.Xprintf(tls, ts+18379, libc.VaList(bp+8, iSelectid, iOrder, iFrom, zDetail)) 37345 } 37346 37347 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 37348 } 37349 37350 func test_print_eqp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37351 bp := tls.Alloc(8) 37352 defer tls.Free(8) 37353 37354 var rc int32 37355 37356 if objc != 2 { 37357 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 37358 return TCL_ERROR 37359 } 37360 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37361 return TCL_ERROR 37362 } 37363 rc = printExplainQueryPlan(tls, *(*uintptr)(unsafe.Pointer(bp))) 37364 37365 libc.Xfflush(tls, uintptr(unsafe.Pointer(&libc.X__sF))+1*152) 37366 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37367 return TCL_OK 37368 } 37369 37370 func testLocaltime(tls *libc.TLS, aliasT uintptr, aliasTM uintptr) int32 { 37371 var t time_t = *(*time_t)(unsafe.Pointer(aliasT)) 37372 var pTm uintptr = aliasTM 37373 var altT time_t 37374 var iJD sqlite3_int64 37375 var Z int32 37376 var A int32 37377 var B int32 37378 var C int32 37379 var D int32 37380 var E int32 37381 var X1 int32 37382 var S int32 37383 37384 if t/int64(86400)&int64(1) != 0 { 37385 altT = t + int64(1800) 37386 } else { 37387 altT = t - int64(1800) 37388 } 37389 iJD = altT + 210866760000 37390 Z = int32((iJD + int64(43200)) / int64(86400)) 37391 A = libc.Int32FromFloat64((float64(Z) - 1867216.25) / 36524.25) 37392 A = Z + 1 + A - A/4 37393 B = A + 1524 37394 C = libc.Int32FromFloat64((float64(B) - 122.1) / 365.25) 37395 D = 36525 * (C & 32767) / 100 37396 E = libc.Int32FromFloat64(float64(B-D) / 30.6001) 37397 X1 = libc.Int32FromFloat64(30.6001 * float64(E)) 37398 (*tm)(unsafe.Pointer(pTm)).Ftm_mday = B - D - X1 37399 (*tm)(unsafe.Pointer(pTm)).Ftm_mon = func() int32 { 37400 if E < 14 { 37401 return E - 2 37402 } 37403 return E - 14 37404 }() 37405 (*tm)(unsafe.Pointer(pTm)).Ftm_year = func() int32 { 37406 if (*tm)(unsafe.Pointer(pTm)).Ftm_mon > 1 { 37407 return C - 4716 37408 } 37409 return C - 4715 37410 }() - 1900 37411 S = int32((iJD + int64(43200)) % int64(86400)) 37412 (*tm)(unsafe.Pointer(pTm)).Ftm_hour = S / 3600 37413 (*tm)(unsafe.Pointer(pTm)).Ftm_min = S / 60 % 60 37414 (*tm)(unsafe.Pointer(pTm)).Ftm_sec = S % 60 37415 return libc.Bool32(t == int64(959609760)) 37416 } 37417 37418 func test_test_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37419 bp := tls.Alloc(192) 37420 defer tls.Free(192) 37421 37422 *(*[4]Verb)(unsafe.Pointer(bp + 72)) = [4]Verb{ 37423 {FzName: ts + 18392, Fi: SQLITE_TESTCTRL_LOCALTIME_FAULT}, 37424 {FzName: ts + 18424, Fi: SQLITE_TESTCTRL_SORTER_MMAP}, 37425 {FzName: ts + 18452, Fi: SQLITE_TESTCTRL_IMPOSTER}, 37426 {FzName: ts + 18477, Fi: SQLITE_TESTCTRL_INTERNAL_FUNCTIONS}, 37427 } 37428 37429 var iFlag int32 37430 var rc int32 37431 37432 if objc < 2 { 37433 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18512) 37434 return TCL_ERROR 37435 } 37436 37437 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 37438 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+72, int32(unsafe.Sizeof(Verb{})), ts+18525, 0, bp+136) 37439 if rc != TCL_OK { 37440 return rc 37441 } 37442 37443 iFlag = (*Verb)(unsafe.Pointer(bp + 72 + uintptr(*(*int32)(unsafe.Pointer(bp + 136)))*16)).Fi 37444 switch iFlag { 37445 case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: 37446 { 37447 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 37448 if objc != 3 { 37449 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 37450 return TCL_ERROR 37451 } 37452 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+144) != 0 { 37453 return TCL_ERROR 37454 } 37455 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(bp + 144)))) 37456 break 37457 37458 } 37459 case SQLITE_TESTCTRL_LOCALTIME_FAULT: 37460 { 37461 if objc != 3 { 37462 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18530) 37463 return TCL_ERROR 37464 } 37465 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+152) != 0 { 37466 return TCL_ERROR 37467 } 37468 sqlite3.Xsqlite3_test_control(tls, iFlag, libc.VaList(bp+8, *(*int32)(unsafe.Pointer(bp + 152)), *(*uintptr)(unsafe.Pointer(&struct { 37469 f func(*libc.TLS, uintptr, uintptr) int32 37470 }{testLocaltime})))) 37471 break 37472 37473 } 37474 37475 case SQLITE_TESTCTRL_SORTER_MMAP: 37476 { 37477 if objc != 4 { 37478 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18536) 37479 return TCL_ERROR 37480 } 37481 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+160) != 0 { 37482 return TCL_ERROR 37483 } 37484 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168) != 0 { 37485 return TCL_ERROR 37486 } 37487 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_SORTER_MMAP, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 160)), *(*int32)(unsafe.Pointer(bp + 168)))) 37488 break 37489 37490 } 37491 37492 case SQLITE_TESTCTRL_IMPOSTER: 37493 { 37494 var zDbName uintptr 37495 37496 if objc != 6 { 37497 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18545) 37498 return TCL_ERROR 37499 } 37500 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+176) != 0 { 37501 return TCL_ERROR 37502 } 37503 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37504 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+184) != 0 { 37505 return TCL_ERROR 37506 } 37507 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+188) != 0 { 37508 return TCL_ERROR 37509 } 37510 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)))) 37511 break 37512 37513 } 37514 } 37515 37516 tcl.XTcl_ResetResult(tls, interp) 37517 return TCL_OK 37518 } 37519 37520 type Verb = struct { 37521 FzName uintptr 37522 Fi int32 37523 F__ccgo_pad1 [4]byte 37524 } 37525 37526 type rusage = struct { 37527 Fru_utime struct { 37528 Ftv_sec time_t 37529 Ftv_usec suseconds_t 37530 } 37531 Fru_stime struct { 37532 Ftv_sec time_t 37533 Ftv_usec suseconds_t 37534 } 37535 Fru_maxrss int64 37536 Fru_ixrss int64 37537 Fru_idrss int64 37538 Fru_isrss int64 37539 Fru_minflt int64 37540 Fru_majflt int64 37541 Fru_nswap int64 37542 Fru_inblock int64 37543 Fru_oublock int64 37544 Fru_msgsnd int64 37545 Fru_msgrcv int64 37546 Fru_nsignals int64 37547 Fru_nvcsw int64 37548 Fru_nivcsw int64 37549 } 37550 37551 type rlimit = struct { 37552 Frlim_cur rlim_t 37553 Frlim_max rlim_t 37554 } 37555 37556 type loadavg = struct { 37557 Fldavg [3]fixpt_t 37558 F__ccgo_pad1 [4]byte 37559 Ffscale int64 37560 } 37561 37562 func test_getrusage(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37563 bp := tls.Alloc(1216) 37564 defer tls.Free(1216) 37565 37566 libc.Xmemset(tls, bp+48, 0, uint64(unsafe.Sizeof(rusage{}))) 37567 libc.Xgetrusage(tls, RUSAGE_SELF, bp+48) 37568 37569 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1024]int8{})), bp+192, 37570 ts+18566, 37571 libc.VaList(bp, int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_usec), 37572 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_usec), 37573 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_minflt), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_majflt))) 37574 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+192, -1)) 37575 return TCL_OK 37576 } 37577 37578 func optimization_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37579 bp := tls.Alloc(68) 37580 defer tls.Free(68) 37581 37582 var i int32 37583 37584 var zOpt uintptr 37585 37586 var mask int32 = 0 37587 37588 if objc != 4 { 37589 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18626) 37590 return TCL_ERROR 37591 } 37592 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 37593 return TCL_ERROR 37594 } 37595 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 37596 return TCL_ERROR 37597 } 37598 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37599 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 37600 FzOptName uintptr 37601 Fmask int32 37602 F__ccgo_pad1 [4]byte 37603 }{})); i++ { 37604 if libc.Xstrcmp(tls, zOpt, aOpt[i].FzOptName) == 0 { 37605 mask = aOpt[i].Fmask 37606 break 37607 } 37608 } 37609 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 37610 mask = ^mask 37611 } 37612 if uint64(i) >= uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 37613 FzOptName uintptr 37614 Fmask int32 37615 F__ccgo_pad1 [4]byte 37616 }{})) { 37617 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18641, 37618 uintptr(0))) 37619 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 37620 FzOptName uintptr 37621 Fmask int32 37622 F__ccgo_pad1 [4]byte 37623 }{})); i++ { 37624 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+4894, aOpt[i].FzOptName, uintptr(0))) 37625 } 37626 return TCL_ERROR 37627 } 37628 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_OPTIMIZATIONS, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 56)), mask)) 37629 return TCL_OK 37630 } 37631 37632 var aOpt = [14]struct { 37633 FzOptName uintptr 37634 Fmask int32 37635 F__ccgo_pad1 [4]byte 37636 }{ 37637 {FzOptName: ts + 18682, Fmask: libc.Int32FromUint32(SQLITE_AllOpts)}, 37638 {FzOptName: ts + 18686}, 37639 {FzOptName: ts + 18691, Fmask: SQLITE_QueryFlattener}, 37640 {FzOptName: ts + 18707, Fmask: SQLITE_GroupByOrder}, 37641 {FzOptName: ts + 18721, Fmask: SQLITE_FactorOutConst}, 37642 {FzOptName: ts + 18738, Fmask: SQLITE_DistinctOpt}, 37643 {FzOptName: ts + 18751, Fmask: SQLITE_CoverIdxScan}, 37644 {FzOptName: ts + 18766, Fmask: SQLITE_OrderByIdxJoin}, 37645 {FzOptName: ts + 18784, Fmask: SQLITE_Transitive}, 37646 {FzOptName: ts + 18795, Fmask: SQLITE_OmitNoopJoin}, 37647 {FzOptName: ts + 18810, Fmask: SQLITE_Stat4}, 37648 {FzOptName: ts + 18816, Fmask: SQLITE_SkipScan}, 37649 {FzOptName: ts + 18826, Fmask: SQLITE_PushDown}, 37650 {FzOptName: ts + 18836, Fmask: SQLITE_BalancedMerge}, 37651 } 37652 37653 func tclLoadStaticExtensionCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37654 bp := tls.Alloc(80) 37655 defer tls.Free(80) 37656 37657 var zName uintptr 37658 var i int32 37659 var j int32 37660 var rc int32 37661 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 37662 if objc < 3 { 37663 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18851) 37664 return TCL_ERROR 37665 } 37666 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37667 return TCL_ERROR 37668 } 37669 for j = 2; j < objc; j++ { 37670 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(j)*8))) 37671 for i = 0; i < int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 37672 FzExtName uintptr 37673 FpInit uintptr 37674 }{}))); i++ { 37675 if libc.Xstrcmp(tls, zName, aExtension[i].FzExtName) == 0 { 37676 break 37677 } 37678 } 37679 if i >= int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 37680 FzExtName uintptr 37681 FpInit uintptr 37682 }{}))) { 37683 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18863, zName, uintptr(0))) 37684 return TCL_ERROR 37685 } 37686 if aExtension[i].FpInit != 0 { 37687 rc = (*struct { 37688 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 37689 })(unsafe.Pointer(&struct{ uintptr }{aExtension[i].FpInit})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), bp+72, uintptr(0)) 37690 } else { 37691 rc = SQLITE_OK 37692 } 37693 if rc != SQLITE_OK && rc != SQLITE_OK|int32(1)<<8 || *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 37694 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18883, zName, ts+18902, *(*uintptr)(unsafe.Pointer(bp + 72)), 37695 uintptr(0))) 37696 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 37697 return TCL_ERROR 37698 } 37699 } 37700 return TCL_OK 37701 } 37702 37703 var aExtension = [22]struct { 37704 FzExtName uintptr 37705 FpInit uintptr 37706 }{ 37707 {FzExtName: ts + 18912, FpInit: 0}, 37708 {FzExtName: ts + 18919, FpInit: 0}, 37709 {FzExtName: ts + 4060, FpInit: 0}, 37710 {FzExtName: ts + 18929, FpInit: 0}, 37711 {FzExtName: ts + 4815, FpInit: 0}, 37712 {FzExtName: ts + 4838, FpInit: 0}, 37713 {FzExtName: ts + 4896, FpInit: 0}, 37714 {FzExtName: ts + 4974, FpInit: 0}, 37715 {FzExtName: ts + 18937, FpInit: 0}, 37716 {FzExtName: ts + 5483, FpInit: 0}, 37717 {FzExtName: ts + 5507, FpInit: 0}, 37718 {FzExtName: ts + 18944, FpInit: 0}, 37719 {FzExtName: ts + 6087, FpInit: 0}, 37720 {FzExtName: ts + 6162, FpInit: 0}, 37721 {FzExtName: ts + 6535, FpInit: 0}, 37722 {FzExtName: ts + 6831, FpInit: 0}, 37723 {FzExtName: ts + 6846, FpInit: 0}, 37724 {FzExtName: ts + 18953, FpInit: 0}, 37725 {FzExtName: ts + 18960, FpInit: 0}, 37726 {FzExtName: ts + 18969, FpInit: 0}, 37727 {FzExtName: ts + 8921, FpInit: 0}, 37728 {FzExtName: ts + 9463, FpInit: 0}, 37729 } 37730 37731 func sorter_test_fakeheap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37732 bp := tls.Alloc(4) 37733 defer tls.Free(4) 37734 37735 if objc != 2 { 37736 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 37737 return TCL_ERROR 37738 } 37739 37740 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37741 return TCL_ERROR 37742 } 37743 37744 if *(*int32)(unsafe.Pointer(bp)) != 0 { 37745 if sqlite3.Xsqlite3Config.FpHeap == uintptr(0) { 37746 sqlite3.Xsqlite3Config.FpHeap = libc.UintptrFromInt64(int64(-1)) 37747 } 37748 } else { 37749 if sqlite3.Xsqlite3Config.FpHeap == libc.UintptrFromInt64(int64(-1)) { 37750 sqlite3.Xsqlite3Config.FpHeap = uintptr(0) 37751 } 37752 } 37753 37754 tcl.XTcl_ResetResult(tls, interp) 37755 return TCL_OK 37756 } 37757 37758 func sorter_test_sort4_helper(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37759 bp := tls.Alloc(80) 37760 defer tls.Free(80) 37761 37762 var zSql1 uintptr 37763 var zSql2 uintptr 37764 37765 var iStep int32 37766 var iCksum1 uint32 37767 var iCksum2 uint32 37768 var rc int32 37769 var iB int32 37770 37771 var a int32 37772 var a1 int32 37773 iCksum1 = uint32(0) 37774 iCksum2 = uint32(0) 37775 37776 if !(objc != 5) { 37777 goto __1 37778 } 37779 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18976) 37780 return TCL_ERROR 37781 __1: 37782 ; 37783 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0) { 37784 goto __2 37785 } 37786 return TCL_ERROR 37787 __2: 37788 ; 37789 zSql1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37790 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0) { 37791 goto __3 37792 } 37793 return TCL_ERROR 37794 __3: 37795 ; 37796 zSql2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 37797 37798 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql1, -1, bp+72, uintptr(0)) 37799 if !(rc != SQLITE_OK) { 37800 goto __4 37801 } 37802 goto sql_error 37803 __4: 37804 ; 37805 iB = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) - 1 37806 iStep = 0 37807 __5: 37808 if !(iStep < *(*int32)(unsafe.Pointer(bp + 64)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 37809 goto __7 37810 } 37811 a = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 37812 if !(a != sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), iB)) { 37813 goto __8 37814 } 37815 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18995, 0)) 37816 return TCL_ERROR 37817 __8: 37818 ; 37819 iCksum1 = iCksum1 + (iCksum1<<3 + uint32(a)) 37820 goto __6 37821 __6: 37822 iStep++ 37823 goto __5 37824 goto __7 37825 __7: 37826 ; 37827 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 37828 if !(rc != SQLITE_OK) { 37829 goto __9 37830 } 37831 goto sql_error 37832 __9: 37833 ; 37834 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql2, -1, bp+72, uintptr(0)) 37835 if !(rc != SQLITE_OK) { 37836 goto __10 37837 } 37838 goto sql_error 37839 __10: 37840 ; 37841 iStep = 0 37842 __11: 37843 if !(SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 37844 goto __13 37845 } 37846 a1 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 37847 iCksum2 = iCksum2 + (iCksum2<<3 + uint32(a1)) 37848 goto __12 37849 __12: 37850 iStep++ 37851 goto __11 37852 goto __13 37853 __13: 37854 ; 37855 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 37856 if !(rc != SQLITE_OK) { 37857 goto __14 37858 } 37859 goto sql_error 37860 __14: 37861 ; 37862 if !(iCksum1 != iCksum2) { 37863 goto __15 37864 } 37865 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19014, 0)) 37866 return TCL_ERROR 37867 __15: 37868 ; 37869 return TCL_OK 37870 sql_error: 37871 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19032, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 56))), 0)) 37872 return TCL_ERROR 37873 } 37874 37875 func test_bad_behavior(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37876 bp := tls.Alloc(44) 37877 defer tls.Free(44) 37878 37879 var xyz int32 37880 var i int32 = *(*int32)(unsafe.Pointer(clientData)) 37881 var j int32 37882 37883 var a uintptr 37884 if objc != 2 { 37885 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19044) 37886 return TCL_ERROR 37887 } 37888 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37889 return TCL_ERROR 37890 } 37891 switch *(*int32)(unsafe.Pointer(bp)) { 37892 case 1: 37893 { 37894 xyz = 0x7fffff00 - i 37895 xyz = xyz + 0x100 37896 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, xyz)) 37897 break 37898 37899 } 37900 case 2: 37901 { 37902 *(*int32)(unsafe.Pointer(bp + 4 + 1*4)) = 5 37903 if *(*int32)(unsafe.Pointer(bp + 4 + uintptr(i)*4)) > 0 { 37904 *(*int32)(unsafe.Pointer(bp + 4 + 1*4))++ 37905 } 37906 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4 + 1*4)))) 37907 break 37908 37909 } 37910 case 3: 37911 { 37912 a = libc.Xmalloc(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(10)) 37913 for j = 0; j < 10; j++ { 37914 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = j 37915 } 37916 libc.Xfree(tls, a) 37917 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 37918 break 37919 37920 } 37921 case 4: 37922 { 37923 tcl.XTcl_Panic(tls, ts+19049, 0) 37924 break 37925 37926 } 37927 } 37928 return TCL_OK 37929 } 37930 37931 func test_register_dbstat_vtab(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37932 bp := tls.Alloc(64) 37933 defer tls.Free(64) 37934 37935 var zDb uintptr 37936 37937 if objc != 2 { 37938 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37939 return TCL_ERROR 37940 } 37941 37942 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 37943 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp) != 0 { 37944 var db uintptr = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)).Fdb 37945 sqlite3.Xsqlite3DbstatRegister(tls, db) 37946 } 37947 return TCL_OK 37948 } 37949 37950 func test_sqlite3_db_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37951 bp := tls.Alloc(28) 37952 defer tls.Free(28) 37953 37954 var i int32 37955 *(*int32)(unsafe.Pointer(bp + 24)) = 0 37956 var zSetting uintptr 37957 37958 if objc != 4 && objc != 3 { 37959 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19066) 37960 return TCL_ERROR 37961 } 37962 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 37963 return TCL_ERROR 37964 } 37965 zSetting = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37966 if sqlite3.Xsqlite3_strglob(tls, ts+19085, zSetting) == 0 { 37967 zSetting += uintptr(7) 37968 } 37969 if sqlite3.Xsqlite3_strglob(tls, ts+19094, zSetting) == 0 { 37970 zSetting += uintptr(9) 37971 } 37972 if sqlite3.Xsqlite3_strglob(tls, ts+19105, zSetting) == 0 { 37973 zSetting += uintptr(7) 37974 } 37975 for i = 0; i < int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 37976 FzName uintptr 37977 FeVal int32 37978 F__ccgo_pad1 [4]byte 37979 }{}))); i++ { 37980 if libc.Xstrcmp(tls, zSetting, aSetting[i].FzName) == 0 { 37981 break 37982 } 37983 } 37984 if i >= int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 37985 FzName uintptr 37986 FeVal int32 37987 F__ccgo_pad1 [4]byte 37988 }{}))) { 37989 tcl.XTcl_SetObjResult(tls, interp, 37990 tcl.XTcl_NewStringObj(tls, ts+19114, -1)) 37991 return TCL_ERROR 37992 } 37993 if objc == 4 { 37994 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 37995 return TCL_ERROR 37996 } 37997 } else { 37998 *(*int32)(unsafe.Pointer(bp + 24)) = -1 37999 } 38000 sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), aSetting[i].FeVal, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 24)), bp+24)) 38001 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 24)))) 38002 return TCL_OK 38003 } 38004 38005 var aSetting = [14]struct { 38006 FzName uintptr 38007 FeVal int32 38008 F__ccgo_pad1 [4]byte 38009 }{ 38010 {FzName: ts + 19148, FeVal: SQLITE_DBCONFIG_ENABLE_FKEY}, 38011 {FzName: ts + 19153, FeVal: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 38012 {FzName: ts + 19161, FeVal: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 38013 {FzName: ts + 19176, FeVal: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 38014 {FzName: ts + 19191, FeVal: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 38015 {FzName: ts + 19208, FeVal: SQLITE_DBCONFIG_ENABLE_QPSG}, 38016 {FzName: ts + 19213, FeVal: SQLITE_DBCONFIG_TRIGGER_EQP}, 38017 {FzName: ts + 19225, FeVal: SQLITE_DBCONFIG_RESET_DATABASE}, 38018 {FzName: ts + 19234, FeVal: SQLITE_DBCONFIG_DEFENSIVE}, 38019 {FzName: ts + 19244, FeVal: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 38020 {FzName: ts + 19260, FeVal: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 38021 {FzName: ts + 19279, FeVal: SQLITE_DBCONFIG_DQS_DML}, 38022 {FzName: ts + 19287, FeVal: SQLITE_DBCONFIG_DQS_DDL}, 38023 {FzName: ts + 19295, FeVal: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 38024 } 38025 38026 func test_sqlite3_txn_state(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38027 bp := tls.Alloc(8) 38028 defer tls.Free(8) 38029 38030 var zSchema uintptr 38031 var iTxn int32 38032 38033 if objc != 2 && objc != 3 { 38034 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19314) 38035 return TCL_ERROR 38036 } 38037 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38038 return TCL_ERROR 38039 } 38040 if objc == 3 { 38041 zSchema = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38042 } else { 38043 zSchema = uintptr(0) 38044 } 38045 iTxn = sqlite3.Xsqlite3_txn_state(tls, *(*uintptr)(unsafe.Pointer(bp)), zSchema) 38046 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iTxn)) 38047 return TCL_OK 38048 } 38049 38050 func test_dbconfig_maindbname_icecube(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38051 bp := tls.Alloc(16) 38052 defer tls.Free(16) 38053 38054 var rc int32 38055 38056 if objc != 2 { 38057 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38058 return TCL_ERROR 38059 } else { 38060 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 38061 return TCL_ERROR 38062 } 38063 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), SQLITE_DBCONFIG_MAINDBNAME, libc.VaList(bp, ts+19326)) 38064 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 38065 return TCL_OK 38066 } 38067 return int32(0) 38068 } 38069 38070 func test_mmap_warm(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38071 bp := tls.Alloc(8) 38072 defer tls.Free(8) 38073 38074 if objc != 2 && objc != 3 { 38075 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19334) 38076 return TCL_ERROR 38077 } else { 38078 var rc int32 38079 38080 var zDb uintptr = uintptr(0) 38081 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38082 return TCL_ERROR 38083 } 38084 if objc == 3 { 38085 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38086 } 38087 rc = sqlite3_mmap_warm(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 38088 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 38089 return TCL_OK 38090 } 38091 return int32(0) 38092 } 38093 38094 func test_write_db(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38095 bp := tls.Alloc(32) 38096 defer tls.Free(32) 38097 38098 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 38099 *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) = int64(0) 38100 var aData uintptr = uintptr(0) 38101 *(*int32)(unsafe.Pointer(bp + 16)) = 0 38102 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 38103 var rc int32 38104 38105 if objc != 4 { 38106 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19346) 38107 return TCL_ERROR 38108 } 38109 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38110 return TCL_ERROR 38111 } 38112 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 38113 return TCL_ERROR 38114 } 38115 aData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16) 38116 38117 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 38118 rc = (*struct { 38119 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 38120 })(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))) 38121 38122 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38123 return TCL_OK 38124 } 38125 38126 func test_register_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38127 if objc != 1 { 38128 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38129 return TCL_ERROR 38130 } else { 38131 var rc int32 = sqlite3_register_cksumvfs(tls, uintptr(0)) 38132 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38133 } 38134 return TCL_OK 38135 } 38136 38137 func test_unregister_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38138 if objc != 1 { 38139 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38140 return TCL_ERROR 38141 } else { 38142 var rc int32 = sqlite3_unregister_cksumvfs(tls) 38143 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38144 } 38145 return TCL_OK 38146 } 38147 38148 func test_decode_hexdb(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38149 bp := tls.Alloc(296) 38150 defer tls.Free(296) 38151 38152 var zIn uintptr = uintptr(0) 38153 var a uintptr = uintptr(0) 38154 *(*int32)(unsafe.Pointer(bp + 216)) = 0 38155 var lineno int32 = 0 38156 var i int32 38157 var iNext int32 38158 var iOffset int32 = 0 38159 38160 var rc int32 38161 38162 if objc != 2 { 38163 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19361) 38164 return TCL_ERROR 38165 } 38166 zIn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38167 for i = 0; *(*int8)(unsafe.Pointer(zIn + uintptr(i))) != 0; i = iNext { 38168 lineno++ 38169 for iNext = i; *(*int8)(unsafe.Pointer(zIn + uintptr(iNext))) != 0 && int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) != '\n'; iNext++ { 38170 } 38171 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) == '\n' { 38172 iNext++ 38173 } 38174 for int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == ' ' || int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == '\t' { 38175 i++ 38176 } 38177 if a == uintptr(0) { 38178 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19367, libc.VaList(bp, bp+216, bp+220)) 38179 if rc != 2 { 38180 continue 38181 } 38182 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 { 38183 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19389, uintptr(0))) 38184 return TCL_ERROR 38185 } 38186 *(*int32)(unsafe.Pointer(bp + 216)) = (*(*int32)(unsafe.Pointer(bp + 216)) + *(*int32)(unsafe.Pointer(bp + 220)) - 1) & ^(*(*int32)(unsafe.Pointer(bp + 220)) - 1) 38187 if *(*int32)(unsafe.Pointer(bp + 216)) < 512 { 38188 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19410, uintptr(0))) 38189 return TCL_ERROR 38190 } 38191 a = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 38192 if a == uintptr(0) { 38193 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+2069, uintptr(0))) 38194 return TCL_ERROR 38195 } 38196 libc.Xmemset(tls, a, 0, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 38197 continue 38198 } 38199 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19427, libc.VaList(bp+64, bp+224, bp+228)) 38200 if rc == 2 { 38201 iOffset = *(*int32)(unsafe.Pointer(bp + 228)) 38202 continue 38203 } 38204 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19447, 38205 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, 38206 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)) 38207 if rc == 17 { 38208 *(*int32)(unsafe.Pointer(bp + 228)) = iOffset + *(*int32)(unsafe.Pointer(bp + 224)) 38209 if *(*int32)(unsafe.Pointer(bp + 228))+16 <= *(*int32)(unsafe.Pointer(bp + 216)) { 38210 var ii int32 38211 for ii = 0; ii < 16; ii++ { 38212 *(*uint8)(unsafe.Pointer(a + uintptr(*(*int32)(unsafe.Pointer(bp + 228))+ii))) = uint8(*(*uint32)(unsafe.Pointer(bp + 232 + uintptr(ii)*4)) & uint32(0xff)) 38213 } 38214 } 38215 continue 38216 } 38217 } 38218 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, a, *(*int32)(unsafe.Pointer(bp + 216)))) 38219 libc.Xfree(tls, a) 38220 return TCL_OK 38221 } 38222 38223 type AutovacPageData1 = struct { 38224 Finterp uintptr 38225 FzScript uintptr 38226 } 38227 38228 type AutovacPageData = AutovacPageData1 38229 38230 func test_autovacuum_pages_callback(tls *libc.TLS, pClientData uintptr, zSchema uintptr, nFilePages uint32, nFreePages uint32, nBytePerPage uint32) uint32 { 38231 bp := tls.Alloc(344) 38232 defer tls.Free(344) 38233 38234 var pData uintptr = pClientData 38235 38236 tcl.XTcl_DStringInit(tls, bp+24) 38237 tcl.XTcl_DStringAppend(tls, bp+24, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, -1) 38238 tcl.XTcl_DStringAppendElement(tls, bp+24, zSchema) 38239 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp, nFilePages)) 38240 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38241 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp+8, nFreePages)) 38242 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38243 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp+16, nBytePerPage)) 38244 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 38245 tcl.XTcl_ResetResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp) 38246 tcl.XTcl_Eval(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+24)).Fstring) 38247 tcl.XTcl_DStringFree(tls, bp+24) 38248 *(*uint32)(unsafe.Pointer(bp + 340)) = nFreePages 38249 tcl.XTcl_GetIntFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp), bp+340) 38250 return *(*uint32)(unsafe.Pointer(bp + 340)) 38251 } 38252 38253 func test_autovacuum_pages(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38254 bp := tls.Alloc(1048) 38255 defer tls.Free(1048) 38256 38257 var pData uintptr 38258 38259 var rc int32 38260 var zScript uintptr 38261 if objc != 2 && objc != 3 { 38262 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19501) 38263 return TCL_ERROR 38264 } 38265 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) != 0 { 38266 return TCL_ERROR 38267 } 38268 if objc == 3 { 38269 zScript = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38270 } else { 38271 zScript = uintptr(0) 38272 } 38273 if zScript != 0 { 38274 var nScript size_t = libc.Xstrlen(tls, zScript) 38275 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(AutovacPageData{}))+nScript+uint64(1)) 38276 if pData == uintptr(0) { 38277 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, uintptr(0))) 38278 return TCL_ERROR 38279 } 38280 (*AutovacPageData)(unsafe.Pointer(pData)).Finterp = interp 38281 (*AutovacPageData)(unsafe.Pointer(pData)).FzScript = pData + 1*16 38282 libc.Xmemcpy(tls, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, zScript, nScript+uint64(1)) 38283 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), *(*uintptr)(unsafe.Pointer(&struct { 38284 f func(*libc.TLS, uintptr, uintptr, uint32, uint32, uint32) uint32 38285 }{test_autovacuum_pages_callback})), 38286 pData, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 38287 } else { 38288 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), uintptr(0), uintptr(0), uintptr(0)) 38289 } 38290 if rc != 0 { 38291 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+48, 38292 ts+19513, libc.VaList(bp+16, rc)) 38293 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+48, uintptr(0))) 38294 return TCL_ERROR 38295 } 38296 return TCL_OK 38297 } 38298 38299 func Sqlitetest1_Init(tls *libc.TLS, interp uintptr) int32 { 38300 var i int32 38301 38302 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd1))/uint64(unsafe.Sizeof(struct { 38303 FzName uintptr 38304 FxProc uintptr 38305 }{})); i++ { 38306 tcl.XTcl_CreateCommand(tls, interp, aCmd1[i].FzName, aCmd1[i].FxProc, uintptr(0), uintptr(0)) 38307 } 38308 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd1))/uint64(unsafe.Sizeof(struct { 38309 FzName uintptr 38310 FxProc uintptr 38311 FclientData uintptr 38312 }{})); i++ { 38313 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd1[i].FzName, 38314 aObjCmd1[i].FxProc, aObjCmd1[i].FclientData, uintptr(0)) 38315 } 38316 tcl.XTcl_LinkVar(tls, interp, ts+19551, 38317 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_search_count)), TCL_LINK_INT) 38318 tcl.XTcl_LinkVar(tls, interp, ts+19571, 38319 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_found_count)), TCL_LINK_INT) 38320 tcl.XTcl_LinkVar(tls, interp, ts+19590, 38321 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sort_count)), TCL_LINK_INT) 38322 tcl.XTcl_LinkVar(tls, interp, ts+19608, 38323 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_max_blobsize)), TCL_LINK_INT) 38324 tcl.XTcl_LinkVar(tls, interp, ts+19629, 38325 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_like_count)), TCL_LINK_INT) 38326 tcl.XTcl_LinkVar(tls, interp, ts+19647, 38327 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_interrupt_count)), TCL_LINK_INT) 38328 tcl.XTcl_LinkVar(tls, interp, ts+19670, 38329 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_open_file_count)), TCL_LINK_INT) 38330 tcl.XTcl_LinkVar(tls, interp, ts+19693, 38331 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_current_time)), TCL_LINK_INT) 38332 tcl.XTcl_LinkVar(tls, interp, ts+19713, 38333 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_xferopt_count)), TCL_LINK_INT) 38334 tcl.XTcl_LinkVar(tls, interp, ts+19735, 38335 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_readdb_count)), TCL_LINK_INT) 38336 tcl.XTcl_LinkVar(tls, interp, ts+19762, 38337 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writedb_count)), TCL_LINK_INT) 38338 tcl.XTcl_LinkVar(tls, interp, ts+19790, 38339 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writej_count)), TCL_LINK_INT) 38340 tcl.XTcl_LinkVar(tls, interp, ts+19817, 38341 uintptr(unsafe.Pointer(&unaligned_string_counter)), TCL_LINK_INT) 38342 tcl.XTcl_LinkVar(tls, interp, ts+19842, 38343 uintptr(unsafe.Pointer(&pzNeededCollation)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 38344 { 38345 tcl.XTcl_LinkVar(tls, interp, ts+19871, 38346 uintptr(unsafe.Pointer(&query_plan)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 38347 38348 } 38349 tcl.XTcl_LinkVar(tls, interp, ts+19889, 38350 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_opentemp_count)), TCL_LINK_INT) 38351 tcl.XTcl_LinkVar(tls, interp, ts+19911, 38352 uintptr(unsafe.Pointer(&sqlite_static_bind_value)), TCL_LINK_STRING) 38353 tcl.XTcl_LinkVar(tls, interp, ts+19936, 38354 uintptr(unsafe.Pointer(&sqlite_static_bind_nbyte)), TCL_LINK_INT) 38355 tcl.XTcl_LinkVar(tls, interp, ts+19961, 38356 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_temp_directory)), TCL_LINK_STRING) 38357 tcl.XTcl_LinkVar(tls, interp, ts+19983, 38358 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_data_directory)), TCL_LINK_STRING) 38359 tcl.XTcl_LinkVar(tls, interp, ts+20005, 38360 uintptr(unsafe.Pointer(&bitmask_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 38361 tcl.XTcl_LinkVar(tls, interp, ts+20018, 38362 uintptr(unsafe.Pointer(&longdouble_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 38363 tcl.XTcl_LinkVar(tls, interp, ts+20034, 38364 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sync_count)), TCL_LINK_INT) 38365 tcl.XTcl_LinkVar(tls, interp, ts+20052, 38366 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_fullsync_count)), TCL_LINK_INT) 38367 return TCL_OK 38368 } 38369 38370 var iZero int32 = 0 38371 var aCmd1 = [39]struct { 38372 FzName uintptr 38373 FxProc uintptr 38374 }{ 38375 {FzName: ts + 20074, FxProc: 0}, 38376 {FzName: ts + 20083, FxProc: 0}, 38377 {FzName: ts + 20092, FxProc: 0}, 38378 {FzName: ts + 20112, FxProc: 0}, 38379 {FzName: ts + 20134, FxProc: 0}, 38380 {FzName: ts + 20155, FxProc: 0}, 38381 {FzName: ts + 20175, FxProc: 0}, 38382 {FzName: ts + 20196, FxProc: 0}, 38383 {FzName: ts + 20220, FxProc: 0}, 38384 {FzName: ts + 20243, FxProc: 0}, 38385 {FzName: ts + 20266, FxProc: 0}, 38386 {FzName: ts + 20292, FxProc: 0}, 38387 {FzName: ts + 20315, FxProc: 0}, 38388 {FzName: ts + 20338, FxProc: 0}, 38389 {FzName: ts + 20359, FxProc: 0}, 38390 {FzName: ts + 20385, FxProc: 0}, 38391 {FzName: ts + 20405, FxProc: 0}, 38392 {FzName: ts + 20422, FxProc: 0}, 38393 {FzName: ts + 20435, FxProc: 0}, 38394 {FzName: ts + 20451, FxProc: 0}, 38395 {FzName: ts + 20476, FxProc: 0}, 38396 {FzName: ts + 20490, FxProc: 0}, 38397 {FzName: ts + 20507, FxProc: 0}, 38398 {FzName: ts + 20531, FxProc: 0}, 38399 {FzName: ts + 20556, FxProc: 0}, 38400 {FzName: ts + 20577, FxProc: 0}, 38401 {FzName: ts + 20607, FxProc: 0}, 38402 {FzName: ts + 20620, FxProc: 0}, 38403 {FzName: ts + 20632, FxProc: 0}, 38404 {FzName: ts + 20643, FxProc: 0}, 38405 {FzName: ts + 20655, FxProc: 0}, 38406 {FzName: ts + 20669, FxProc: 0}, 38407 {FzName: ts + 20687, FxProc: 0}, 38408 {FzName: ts + 20710, FxProc: 0}, 38409 {FzName: ts + 20734, FxProc: 0}, 38410 {FzName: ts + 20757, FxProc: 0}, 38411 {FzName: ts + 20778, FxProc: 0}, 38412 {FzName: ts + 20785, FxProc: 0}, 38413 {FzName: ts + 20800, FxProc: 0}, 38414 } 38415 var aObjCmd1 = [165]struct { 38416 FzName uintptr 38417 FxProc uintptr 38418 FclientData uintptr 38419 }{ 38420 {FzName: ts + 20823, FxProc: 0}, 38421 {FzName: ts + 20841, FxProc: 0}, 38422 {FzName: ts + 20859, FxProc: 0, FclientData: 0}, 38423 {FzName: ts + 20872, FxProc: 0}, 38424 {FzName: ts + 20893, FxProc: 0}, 38425 {FzName: ts + 20920, FxProc: 0}, 38426 {FzName: ts + 20934, FxProc: 0}, 38427 {FzName: ts + 20950, FxProc: 0}, 38428 {FzName: ts + 20967, FxProc: 0}, 38429 {FzName: ts + 20982, FxProc: 0}, 38430 {FzName: ts + 20999, FxProc: 0}, 38431 {FzName: ts + 21021, FxProc: 0}, 38432 {FzName: ts + 21045, FxProc: 0}, 38433 {FzName: ts + 21064, FxProc: 0}, 38434 {FzName: ts + 21084, FxProc: 0}, 38435 {FzName: ts + 21102, FxProc: 0}, 38436 {FzName: ts + 21120, FxProc: 0}, 38437 {FzName: ts + 21140, FxProc: 0}, 38438 {FzName: ts + 21158, FxProc: 0}, 38439 {FzName: ts + 21189, FxProc: 0}, 38440 {FzName: ts + 21223, FxProc: 0}, 38441 {FzName: ts + 21243, FxProc: 0}, 38442 {FzName: ts + 21272, FxProc: 0}, 38443 {FzName: ts + 21300, FxProc: 0}, 38444 {FzName: ts + 21329, FxProc: 0}, 38445 {FzName: ts + 21352, FxProc: 0}, 38446 {FzName: ts + 21366, FxProc: 0}, 38447 {FzName: ts + 21382, FxProc: 0}, 38448 {FzName: ts + 21407, FxProc: 0}, 38449 {FzName: ts + 21422, FxProc: 0}, 38450 {FzName: ts + 21443, FxProc: 0}, 38451 {FzName: ts + 21460, FxProc: 0}, 38452 {FzName: ts + 21473, FxProc: 0}, 38453 {FzName: ts + 21488, FxProc: 0}, 38454 {FzName: ts + 21504, FxProc: 0}, 38455 {FzName: ts + 21523, FxProc: 0}, 38456 {FzName: ts + 21541, FxProc: 0}, 38457 {FzName: ts + 21557, FxProc: 0}, 38458 {FzName: ts + 21575, FxProc: 0}, 38459 {FzName: ts + 21594, FxProc: 0}, 38460 {FzName: ts + 21613, FxProc: 0}, 38461 {FzName: ts + 21637, FxProc: 0}, 38462 {FzName: ts + 21658, FxProc: 0}, 38463 {FzName: ts + 21675, FxProc: 0}, 38464 {FzName: ts + 21695, FxProc: 0}, 38465 {FzName: ts + 21709, FxProc: 0}, 38466 {FzName: ts + 21725, FxProc: 0}, 38467 {FzName: ts + 21751, FxProc: 0}, 38468 {FzName: ts + 21767, FxProc: 0}, 38469 {FzName: ts + 21780, FxProc: 0}, 38470 {FzName: ts + 21792, FxProc: 0}, 38471 {FzName: ts + 21813, FxProc: 0}, 38472 {FzName: ts + 21831, FxProc: 0}, 38473 {FzName: ts + 21853, FxProc: 0}, 38474 {FzName: ts + 21876, FxProc: 0}, 38475 {FzName: ts + 21894, FxProc: 0}, 38476 {FzName: ts + 21912, FxProc: 0}, 38477 {FzName: ts + 21935, FxProc: 0}, 38478 {FzName: ts + 21961, FxProc: 0}, 38479 {FzName: ts + 21983, FxProc: 0}, 38480 {FzName: ts + 22004, FxProc: 0}, 38481 {FzName: ts + 22024, FxProc: 0}, 38482 {FzName: ts + 22044, FxProc: 0}, 38483 {FzName: ts + 22068, FxProc: 0}, 38484 {FzName: ts + 22094, FxProc: 0}, 38485 {FzName: ts + 22120, FxProc: 0}, 38486 {FzName: ts + 22143, FxProc: 0}, 38487 {FzName: ts + 22167, FxProc: 0}, 38488 {FzName: ts + 22190, FxProc: 0}, 38489 {FzName: ts + 22220, FxProc: 0}, 38490 {FzName: ts + 22250, FxProc: 0}, 38491 {FzName: ts + 22264, FxProc: 0}, 38492 {FzName: ts + 22292, FxProc: 0}, 38493 {FzName: ts + 22308, FxProc: 0}, 38494 {FzName: ts + 22327, FxProc: 0}, 38495 {FzName: ts + 22344, FxProc: 0}, 38496 {FzName: ts + 22354, FxProc: 0}, 38497 {FzName: ts + 22374, FxProc: 0}, 38498 {FzName: ts + 22397, FxProc: 0}, 38499 {FzName: ts + 22421, FxProc: 0}, 38500 {FzName: ts + 22442, FxProc: 0}, 38501 {FzName: ts + 22454, FxProc: 0}, 38502 {FzName: ts + 22475, FxProc: 0}, 38503 {FzName: ts + 22494, FxProc: 0}, 38504 {FzName: ts + 22514, FxProc: 0}, 38505 {FzName: ts + 22534, FxProc: 0}, 38506 {FzName: ts + 22556, FxProc: 0}, 38507 {FzName: ts + 22577, FxProc: 0, FclientData: 0}, 38508 {FzName: ts + 22597, FxProc: 0, FclientData: 0}, 38509 {FzName: ts + 22617, FxProc: 0, FclientData: 0}, 38510 {FzName: ts + 22636, FxProc: 0, FclientData: 0}, 38511 {FzName: ts + 22657, FxProc: 0, FclientData: 0}, 38512 {FzName: ts + 22681, FxProc: 0, FclientData: 0}, 38513 {FzName: ts + 22710, FxProc: 0, FclientData: 0}, 38514 {FzName: ts + 22736, FxProc: 0, FclientData: 0}, 38515 {FzName: ts + 22763, FxProc: 0, FclientData: 0}, 38516 {FzName: ts + 22786, FxProc: 0, FclientData: 0}, 38517 {FzName: ts + 22808, FxProc: 0, FclientData: 0}, 38518 {FzName: ts + 22830, FxProc: 0}, 38519 {FzName: ts + 22860, FxProc: 0, FclientData: 0}, 38520 {FzName: ts + 22886, 38521 FxProc: 0, FclientData: 0}, 38522 {FzName: ts + 22917, FxProc: 0, FclientData: 0}, 38523 {FzName: ts + 22945, FxProc: 0, FclientData: 0}, 38524 {FzName: ts + 22974, FxProc: 0}, 38525 {FzName: ts + 23002, FxProc: 0}, 38526 {FzName: ts + 23025, FxProc: 0}, 38527 {FzName: ts + 23043, FxProc: 0}, 38528 {FzName: ts + 23059, FxProc: 0}, 38529 {FzName: ts + 23077, FxProc: 0}, 38530 {FzName: ts + 23096, FxProc: 0}, 38531 {FzName: ts + 23115, FxProc: 0}, 38532 {FzName: ts + 23133, FxProc: 0}, 38533 {FzName: ts + 23161, FxProc: 0}, 38534 {FzName: ts + 23189, FxProc: 0}, 38535 {FzName: ts + 23217, FxProc: 0}, 38536 {FzName: ts + 23244, FxProc: 0}, 38537 {FzName: ts + 23270, FxProc: 0}, 38538 {FzName: ts + 23295, FxProc: 0}, 38539 {FzName: ts + 23328, FxProc: 0}, 38540 {FzName: ts + 23349, FxProc: 0}, 38541 {FzName: ts + 23375, FxProc: 0}, 38542 {FzName: ts + 23401, FxProc: 0}, 38543 {FzName: ts + 23430, FxProc: 0}, 38544 {FzName: ts + 23447, FxProc: 0}, 38545 {FzName: ts + 23474, FxProc: 0}, 38546 {FzName: ts + 23491, FxProc: 0}, 38547 {FzName: ts + 23515, FxProc: 0}, 38548 {FzName: ts + 23533, FxProc: 0}, 38549 {FzName: ts + 23559, FxProc: 0}, 38550 {FzName: ts + 23579, FxProc: 0}, 38551 {FzName: ts + 23597, FxProc: 0}, 38552 {FzName: ts + 23625, FxProc: 0}, 38553 {FzName: ts + 23653, FxProc: 0}, 38554 {FzName: ts + 23679, FxProc: 0}, 38555 {FzName: ts + 23709, FxProc: 0}, 38556 {FzName: ts + 23729, FxProc: 0}, 38557 {FzName: ts + 23742, FxProc: 0}, 38558 {FzName: ts + 23764, FxProc: 0}, 38559 {FzName: ts + 23787, FxProc: 0}, 38560 {FzName: ts + 23813, FxProc: 0}, 38561 {FzName: ts + 23840, FxProc: 0}, 38562 {FzName: ts + 23857, FxProc: 0}, 38563 {FzName: ts + 23882, FxProc: 0}, 38564 {FzName: ts + 23903, FxProc: 0}, 38565 {FzName: ts + 23913, FxProc: 0}, 38566 {FzName: ts + 23935, FxProc: 0}, 38567 {FzName: ts + 23956, FxProc: 0}, 38568 {FzName: ts + 23981, FxProc: 0}, 38569 {FzName: ts + 24004, FxProc: 0}, 38570 {FzName: ts + 24025, FxProc: 0}, 38571 {FzName: ts + 24047, FxProc: 0}, 38572 {FzName: ts + 24069, FxProc: 0}, 38573 {FzName: ts + 24090, FxProc: 0}, 38574 {FzName: ts + 24115, FxProc: 0}, 38575 {FzName: ts + 24141, FxProc: 0}, 38576 {FzName: ts + 24168, FxProc: 0}, 38577 {FzName: ts + 24194, FxProc: 0}, 38578 {FzName: ts + 24218, FxProc: 0}, 38579 {FzName: ts + 24237, FxProc: 0}, 38580 {FzName: ts + 24255, FxProc: 0}, 38581 {FzName: ts + 24280, FxProc: 0}, 38582 {FzName: ts + 24305, FxProc: 0}, 38583 {FzName: ts + 24318, FxProc: 0}, 38584 {FzName: ts + 24332, FxProc: 0}, 38585 {FzName: ts + 24358, FxProc: 0}, 38586 } 38587 var bitmask_size int32 = int32(uint64(unsafe.Sizeof(Bitmask(0))) * uint64(8)) 38588 var longdouble_size int32 = int32(unsafe.Sizeof(float64(0))) 38589 var query_plan uintptr = ts + 24386 38590 38591 var test_pagesize int32 = 1024 38592 38593 func pager_test_reiniter(tls *libc.TLS, pNotUsed uintptr) { 38594 return 38595 } 38596 38597 func pager_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38598 bp := tls.Alloc(192) 38599 defer tls.Free(192) 38600 38601 var rc int32 38602 38603 if argc != 3 { 38604 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38605 ts+24412, 0)) 38606 return TCL_ERROR 38607 } 38608 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 38609 return TCL_ERROR 38610 } 38611 rc = sqlite3.Xsqlite3PagerOpen(tls, sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)), bp+80, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, 0, 38612 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB, 38613 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{pager_test_reiniter}))) 38614 if rc != SQLITE_OK { 38615 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38616 return TCL_ERROR 38617 } 38618 sqlite3.Xsqlite3PagerSetCachesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 38619 *(*u32)(unsafe.Pointer(bp + 88)) = u32(test_pagesize) 38620 sqlite3.Xsqlite3PagerSetPagesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), bp+88, -1) 38621 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+92, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 38622 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, 0)) 38623 return TCL_OK 38624 } 38625 38626 func pager_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38627 bp := tls.Alloc(48) 38628 defer tls.Free(48) 38629 38630 var pPager uintptr 38631 var rc int32 38632 if argc != 2 { 38633 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38634 ts+24430, 0)) 38635 return TCL_ERROR 38636 } 38637 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38638 rc = sqlite3.Xsqlite3PagerClose(tls, pPager, uintptr(0)) 38639 if rc != SQLITE_OK { 38640 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38641 return TCL_ERROR 38642 } 38643 return TCL_OK 38644 } 38645 38646 func pager_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38647 bp := tls.Alloc(48) 38648 defer tls.Free(48) 38649 38650 var pPager uintptr 38651 var rc int32 38652 if argc != 2 { 38653 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38654 ts+24430, 0)) 38655 return TCL_ERROR 38656 } 38657 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38658 rc = sqlite3.Xsqlite3PagerRollback(tls, pPager) 38659 if rc != SQLITE_OK { 38660 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38661 return TCL_ERROR 38662 } 38663 return TCL_OK 38664 } 38665 38666 func pager_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38667 bp := tls.Alloc(64) 38668 defer tls.Free(64) 38669 38670 var pPager uintptr 38671 var rc int32 38672 if argc != 2 { 38673 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38674 ts+24430, 0)) 38675 return TCL_ERROR 38676 } 38677 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38678 rc = sqlite3.Xsqlite3PagerCommitPhaseOne(tls, pPager, uintptr(0), 0) 38679 if rc != SQLITE_OK { 38680 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38681 return TCL_ERROR 38682 } 38683 rc = sqlite3.Xsqlite3PagerCommitPhaseTwo(tls, pPager) 38684 if rc != SQLITE_OK { 38685 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38686 return TCL_ERROR 38687 } 38688 return TCL_OK 38689 } 38690 38691 func pager_stmt_begin(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38692 bp := tls.Alloc(48) 38693 defer tls.Free(48) 38694 38695 var pPager uintptr 38696 var rc int32 38697 if argc != 2 { 38698 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38699 ts+24430, 0)) 38700 return TCL_ERROR 38701 } 38702 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38703 rc = sqlite3.Xsqlite3PagerOpenSavepoint(tls, pPager, 1) 38704 if rc != SQLITE_OK { 38705 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38706 return TCL_ERROR 38707 } 38708 return TCL_OK 38709 } 38710 38711 func pager_stmt_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38712 bp := tls.Alloc(48) 38713 defer tls.Free(48) 38714 38715 var pPager uintptr 38716 var rc int32 38717 if argc != 2 { 38718 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38719 ts+24430, 0)) 38720 return TCL_ERROR 38721 } 38722 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38723 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_ROLLBACK, 0) 38724 sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 38725 if rc != SQLITE_OK { 38726 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38727 return TCL_ERROR 38728 } 38729 return TCL_OK 38730 } 38731 38732 func pager_stmt_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38733 bp := tls.Alloc(48) 38734 defer tls.Free(48) 38735 38736 var pPager uintptr 38737 var rc int32 38738 if argc != 2 { 38739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38740 ts+24430, 0)) 38741 return TCL_ERROR 38742 } 38743 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38744 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 38745 if rc != SQLITE_OK { 38746 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38747 return TCL_ERROR 38748 } 38749 return TCL_OK 38750 } 38751 38752 func pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38753 bp := tls.Alloc(140) 38754 defer tls.Free(140) 38755 38756 var pPager uintptr 38757 var i int32 38758 var a uintptr 38759 if argc != 2 { 38760 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38761 ts+24430, 0)) 38762 return TCL_ERROR 38763 } 38764 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38765 a = sqlite3.Xsqlite3PagerStats(tls, pPager) 38766 for i = 0; i < 9; i++ { 38767 tcl.XTcl_AppendElement(tls, interp, zName[i]) 38768 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 38769 tcl.XTcl_AppendElement(tls, interp, bp+40) 38770 } 38771 return TCL_OK 38772 } 38773 38774 var zName = [9]uintptr{ 38775 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 38776 ts + 24448, ts + 24452, ts + 24457, 38777 } 38778 38779 func pager_pagecount(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38780 bp := tls.Alloc(160) 38781 defer tls.Free(160) 38782 38783 var pPager uintptr 38784 38785 if argc != 2 { 38786 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38787 ts+24430, 0)) 38788 return TCL_ERROR 38789 } 38790 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38791 sqlite3.Xsqlite3PagerPagecount(tls, pPager, bp+56) 38792 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 56)))) 38793 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 38794 return TCL_OK 38795 } 38796 38797 func page_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38798 bp := tls.Alloc(188) 38799 defer tls.Free(188) 38800 38801 var pPager uintptr 38802 38803 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 38804 38805 var rc int32 38806 if argc != 3 { 38807 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38808 ts+24462, 0)) 38809 return TCL_ERROR 38810 } 38811 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38812 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 38813 return TCL_ERROR 38814 } 38815 rc = sqlite3.Xsqlite3PagerSharedLock(tls, pPager) 38816 if rc == SQLITE_OK { 38817 rc = sqlite3.Xsqlite3PagerGet(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 72))), bp+80, 0) 38818 } 38819 if rc != SQLITE_OK { 38820 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38821 return TCL_ERROR 38822 } 38823 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 38824 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 38825 return TCL_OK 38826 } 38827 38828 func page_lookup(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38829 bp := tls.Alloc(160) 38830 defer tls.Free(160) 38831 38832 var pPager uintptr 38833 38834 var pPage uintptr 38835 38836 if argc != 3 { 38837 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38838 ts+24462, 0)) 38839 return TCL_ERROR 38840 } 38841 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38842 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 38843 return TCL_ERROR 38844 } 38845 pPage = sqlite3.Xsqlite3PagerLookup(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 56)))) 38846 if pPage != 0 { 38847 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+9889, libc.VaList(bp+32, pPage)) 38848 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 38849 } 38850 return TCL_OK 38851 } 38852 38853 func pager_truncate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38854 bp := tls.Alloc(36) 38855 defer tls.Free(36) 38856 38857 var pPager uintptr 38858 38859 if argc != 3 { 38860 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38861 ts+24462, 0)) 38862 return TCL_ERROR 38863 } 38864 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38865 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 38866 return TCL_ERROR 38867 } 38868 sqlite3.Xsqlite3PagerTruncateImage(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 32)))) 38869 return TCL_OK 38870 } 38871 38872 func page_unref(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38873 bp := tls.Alloc(32) 38874 defer tls.Free(32) 38875 38876 var pPage uintptr 38877 if argc != 2 { 38878 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38879 ts+24472, 0)) 38880 return TCL_ERROR 38881 } 38882 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38883 sqlite3.Xsqlite3PagerUnref(tls, pPage) 38884 return TCL_OK 38885 } 38886 38887 func page_read(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38888 bp := tls.Alloc(148) 38889 defer tls.Free(148) 38890 38891 var pPage uintptr 38892 if argc != 2 { 38893 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38894 ts+24472, 0)) 38895 return TCL_ERROR 38896 } 38897 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38898 libc.Xmemcpy(tls, bp+48, sqlite3.Xsqlite3PagerGetData(tls, pPage), uint64(unsafe.Sizeof([100]int8{}))) 38899 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 38900 return TCL_OK 38901 } 38902 38903 func page_number(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38904 bp := tls.Alloc(156) 38905 defer tls.Free(156) 38906 38907 var pPage uintptr 38908 if argc != 2 { 38909 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38910 ts+24472, 0)) 38911 return TCL_ERROR 38912 } 38913 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38914 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+56, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3PagerPagenumber(tls, pPage))) 38915 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 38916 return TCL_OK 38917 } 38918 38919 func page_write(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38920 bp := tls.Alloc(48) 38921 defer tls.Free(48) 38922 38923 var pPage uintptr 38924 var pData uintptr 38925 var rc int32 38926 if argc != 3 { 38927 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38928 ts+24479, 0)) 38929 return TCL_ERROR 38930 } 38931 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 38932 rc = sqlite3.Xsqlite3PagerWrite(tls, pPage) 38933 if rc != SQLITE_OK { 38934 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38935 return TCL_ERROR 38936 } 38937 pData = sqlite3.Xsqlite3PagerGetData(tls, pPage) 38938 libc.Xstrncpy(tls, pData, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(test_pagesize-1)) 38939 *(*int8)(unsafe.Pointer(pData + uintptr(test_pagesize-1))) = int8(0) 38940 return TCL_OK 38941 } 38942 38943 func fake_big_file(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38944 bp := tls.Alloc(96) 38945 defer tls.Free(96) 38946 38947 var pVfs uintptr 38948 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 38949 var rc int32 38950 38951 var offset i64 38952 var zFile uintptr 38953 var nFile int32 38954 if argc != 3 { 38955 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38956 ts+24491, 0)) 38957 return TCL_ERROR 38958 } 38959 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 38960 return TCL_ERROR 38961 } 38962 38963 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 38964 nFile = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 38965 zFile = sqlite3.Xsqlite3_malloc(tls, nFile+2) 38966 if zFile == uintptr(0) { 38967 return TCL_ERROR 38968 } 38969 libc.Xmemcpy(tls, zFile, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(nFile+1)) 38970 *(*int8)(unsafe.Pointer(zFile + uintptr(nFile+1))) = int8(0) 38971 rc = sqlite3.Xsqlite3OsOpenMalloc(tls, pVfs, zFile, bp+88, 38972 SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB, uintptr(0)) 38973 if rc != 0 { 38974 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+24510, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38975 sqlite3.Xsqlite3_free(tls, zFile) 38976 return TCL_ERROR 38977 } 38978 offset = i64(*(*int32)(unsafe.Pointer(bp + 80))) 38979 offset = offset * int64(1024*1024) 38980 rc = sqlite3.Xsqlite3OsWrite(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), ts+24524, 14, offset) 38981 sqlite3.Xsqlite3OsCloseFree(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 38982 sqlite3.Xsqlite3_free(tls, zFile) 38983 if rc != 0 { 38984 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, ts+24538, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38985 return TCL_ERROR 38986 } 38987 return TCL_OK 38988 } 38989 38990 func testPendingByte(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 38991 bp := tls.Alloc(44) 38992 defer tls.Free(44) 38993 38994 var rc int32 38995 if argc != 2 { 38996 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 38997 ts+24553, uintptr(0))) 38998 return TCL_ERROR 38999 } 39000 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 39001 return TCL_ERROR 39002 } 39003 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PENDING_BYTE, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 40)))) 39004 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39005 return TCL_OK 39006 } 39007 39008 var faultSimInterp uintptr = uintptr(0) 39009 var faultSimScriptSize int32 = 0 39010 var faultSimScript uintptr 39011 39012 func faultSimCallback(tls *libc.TLS, x int32) int32 { 39013 bp := tls.Alloc(38) 39014 defer tls.Free(38) 39015 39016 var i int32 39017 var isNeg int32 39018 var rc int32 39019 if x == 0 { 39020 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), ts+14193, uint64(2)) 39021 } else { 39022 if x < 0 { 39023 isNeg = 1 39024 x = -x 39025 } else { 39026 isNeg = 0 39027 } 39028 *(*int8)(unsafe.Pointer(bp + 8 + 29)) = int8(0) 39029 i = int32(uint64(unsafe.Sizeof([30]int8{})) - uint64(2)) 39030 __1: 39031 if !(i > 0 && x > 0) { 39032 goto __3 39033 } 39034 { 39035 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8(x%10 + '0') 39036 39037 } 39038 goto __2 39039 __2: 39040 i-- 39041 x = x / 10 39042 goto __1 39043 goto __3 39044 __3: 39045 ; 39046 if isNeg != 0 { 39047 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(libc.PostDecInt32(&i, 1)))) = int8('-') 39048 } 39049 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), bp+8+uintptr(i)+uintptr(1), uint64(unsafe.Sizeof([30]int8{}))-uint64(i)) 39050 } 39051 rc = tcl.XTcl_Eval(tls, faultSimInterp, faultSimScript) 39052 if rc != 0 { 39053 libc.Xfprintf(tls, uintptr(unsafe.Pointer(&libc.X__sF))+2*152, ts+24568, libc.VaList(bp, faultSimScript)) 39054 rc = SQLITE_ERROR 39055 } else { 39056 rc = libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, faultSimInterp)) 39057 } 39058 tcl.XTcl_ResetResult(tls, faultSimInterp) 39059 return rc 39060 } 39061 39062 func faultInstallCmd(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39063 bp := tls.Alloc(64) 39064 defer tls.Free(64) 39065 39066 var zScript uintptr 39067 var nScript int32 39068 var rc int32 39069 if argc != 1 && argc != 2 { 39070 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39071 ts+24604, uintptr(0))) 39072 } 39073 if argc == 2 { 39074 zScript = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 39075 } else { 39076 zScript = ts + 584 39077 } 39078 nScript = int32(libc.Xstrlen(tls, zScript)) 39079 if faultSimScript != 0 { 39080 libc.Xfree(tls, faultSimScript) 39081 faultSimScript = uintptr(0) 39082 } 39083 if nScript == 0 { 39084 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_FAULT_INSTALL, libc.VaList(bp+32, 0)) 39085 } else { 39086 faultSimScript = libc.Xmalloc(tls, uint64(nScript+100)) 39087 if faultSimScript == uintptr(0) { 39088 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2069, uintptr(0))) 39089 return SQLITE_ERROR 39090 } 39091 libc.Xmemcpy(tls, faultSimScript, zScript, uint64(nScript)) 39092 *(*int8)(unsafe.Pointer(faultSimScript + uintptr(nScript))) = int8(' ') 39093 faultSimScriptSize = nScript + 1 39094 faultSimInterp = interp 39095 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})))) 39096 } 39097 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39098 return SQLITE_OK 39099 } 39100 39101 func testBitvecBuiltinTest(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39102 bp := tls.Alloc(452) 39103 defer tls.Free(452) 39104 39105 var rc int32 39106 var nProg int32 = 0 39107 39108 var z uintptr 39109 if argc != 3 { 39110 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39111 ts+24613, uintptr(0))) 39112 } 39113 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 39114 return TCL_ERROR 39115 } 39116 z = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 39117 for nProg < 99 && *(*int8)(unsafe.Pointer(z)) != 0 { 39118 for *(*int8)(unsafe.Pointer(z)) != 0 && !(int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0) { 39119 z++ 39120 } 39121 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 39122 break 39123 } 39124 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(libc.PostIncInt32(&nProg, 1))*4)) = libc.Xatoi(tls, z) 39125 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 39126 z++ 39127 } 39128 } 39129 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(nProg)*4)) = 0 39130 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BITVEC_TEST, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 48)), bp+52)) 39131 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39132 return TCL_OK 39133 } 39134 39135 func Sqlitetest2_Init(tls *libc.TLS, interp uintptr) int32 { 39136 var i int32 39137 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd2))/uint64(unsafe.Sizeof(struct { 39138 FzName uintptr 39139 FxProc uintptr 39140 }{})); i++ { 39141 tcl.XTcl_CreateCommand(tls, interp, aCmd2[i].FzName, aCmd2[i].FxProc, uintptr(0), uintptr(0)) 39142 } 39143 tcl.XTcl_LinkVar(tls, interp, ts+24628, 39144 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_pending)), TCL_LINK_INT) 39145 tcl.XTcl_LinkVar(tls, interp, ts+24652, 39146 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_persist)), TCL_LINK_INT) 39147 tcl.XTcl_LinkVar(tls, interp, ts+24676, 39148 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hit)), TCL_LINK_INT) 39149 tcl.XTcl_LinkVar(tls, interp, ts+24696, 39150 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hardhit)), TCL_LINK_INT) 39151 tcl.XTcl_LinkVar(tls, interp, ts+24720, 39152 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull_pending)), TCL_LINK_INT) 39153 tcl.XTcl_LinkVar(tls, interp, ts+24744, 39154 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull)), TCL_LINK_INT) 39155 tcl.XTcl_LinkVar(tls, interp, ts+24760, 39156 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3PendingByte)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39157 return TCL_OK 39158 } 39159 39160 var aCmd2 = [20]struct { 39161 FzName uintptr 39162 FxProc uintptr 39163 }{ 39164 {FzName: ts + 24780, FxProc: 0}, 39165 {FzName: ts + 24791, FxProc: 0}, 39166 {FzName: ts + 24803, FxProc: 0}, 39167 {FzName: ts + 24816, FxProc: 0}, 39168 {FzName: ts + 24831, FxProc: 0}, 39169 {FzName: ts + 24848, FxProc: 0}, 39170 {FzName: ts + 24866, FxProc: 0}, 39171 {FzName: ts + 24886, FxProc: 0}, 39172 {FzName: ts + 24898, FxProc: 0}, 39173 {FzName: ts + 24914, FxProc: 0}, 39174 {FzName: ts + 24923, FxProc: 0}, 39175 {FzName: ts + 24935, FxProc: 0}, 39176 {FzName: ts + 24946, FxProc: 0}, 39177 {FzName: ts + 24956, FxProc: 0}, 39178 {FzName: ts + 24967, FxProc: 0}, 39179 {FzName: ts + 24979, FxProc: 0}, 39180 {FzName: ts + 24994, FxProc: 0}, 39181 {FzName: ts + 25008, FxProc: 0}, 39182 {FzName: ts + 25033, FxProc: 0}, 39183 {FzName: ts + 25067, FxProc: 0}, 39184 } 39185 39186 type Btree = Btree1 39187 type BtCursor = BtCursor1 39188 type BtShared = BtShared1 39189 39190 type MemPage1 = struct { 39191 FisInit u8 39192 FintKey u8 39193 FintKeyLeaf u8 39194 F__ccgo_pad1 [1]byte 39195 Fpgno Pgno 39196 Fleaf u8 39197 FhdrOffset u8 39198 FchildPtrSize u8 39199 Fmax1bytePayload u8 39200 FnOverflow u8 39201 F__ccgo_pad2 [1]byte 39202 FmaxLocal u16 39203 FminLocal u16 39204 FcellOffset u16 39205 FnFree int32 39206 FnCell u16 39207 FmaskPage u16 39208 FaiOvfl [4]u16 39209 F__ccgo_pad3 [4]byte 39210 FapOvfl [4]uintptr 39211 FpBt uintptr 39212 FaData uintptr 39213 FaDataEnd uintptr 39214 FaCellIdx uintptr 39215 FaDataOfst uintptr 39216 FpDbPage uintptr 39217 FxCellSize uintptr 39218 FxParseCell uintptr 39219 } 39220 39221 type MemPage = MemPage1 39222 type BtLock1 = struct { 39223 FpBtree uintptr 39224 FiTable Pgno 39225 FeLock u8 39226 F__ccgo_pad1 [3]byte 39227 FpNext uintptr 39228 } 39229 39230 type BtLock = BtLock1 39231 type CellInfo1 = struct { 39232 FnKey i64 39233 FpPayload uintptr 39234 FnPayload u32 39235 FnLocal u16 39236 FnSize u16 39237 } 39238 39239 type CellInfo = CellInfo1 39240 39241 type IntegrityCk1 = struct { 39242 FpBt uintptr 39243 FpPager uintptr 39244 FaPgRef uintptr 39245 FnPage Pgno 39246 FmxErr int32 39247 FnErr int32 39248 FbOomFault int32 39249 FzPfx uintptr 39250 Fv1 Pgno 39251 Fv2 int32 39252 FerrMsg StrAccum 39253 Fheap uintptr 39254 Fdb uintptr 39255 } 39256 39257 type IntegrityCk = IntegrityCk1 39258 39259 var sDb sqlite31 39260 var nRefSqlite3 int32 = 0 39261 39262 func btree_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39263 bp := tls.Alloc(188) 39264 defer tls.Free(188) 39265 39266 var rc int32 39267 39268 var n int32 39269 var zFilename uintptr 39270 if argc != 3 { 39271 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39272 ts+25102, 0)) 39273 return TCL_ERROR 39274 } 39275 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39276 return TCL_ERROR 39277 } 39278 nRefSqlite3++ 39279 if nRefSqlite3 == 1 { 39280 sDb.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39281 sDb.Fmutex = sqlite3.Xsqlite3MutexAlloc(tls, SQLITE_MUTEX_RECURSIVE) 39282 sqlite3.Xsqlite3_mutex_enter(tls, sDb.Fmutex) 39283 } 39284 n = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 39285 zFilename = sqlite3.Xsqlite3_malloc(tls, n+2) 39286 if zFilename == uintptr(0) { 39287 return TCL_ERROR 39288 } 39289 libc.Xmemcpy(tls, zFilename, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint64(n+1)) 39290 *(*int8)(unsafe.Pointer(zFilename + uintptr(n+1))) = int8(0) 39291 rc = sqlite3.Xsqlite3BtreeOpen(tls, sDb.FpVfs, zFilename, uintptr(unsafe.Pointer(&sDb)), bp+80, 0, 39292 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB) 39293 sqlite3.Xsqlite3_free(tls, zFilename) 39294 if rc != SQLITE_OK { 39295 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39296 return TCL_ERROR 39297 } 39298 sqlite3.Xsqlite3BtreeSetCacheSize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 39299 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39300 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 39301 return TCL_OK 39302 } 39303 39304 func btree_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39305 bp := tls.Alloc(48) 39306 defer tls.Free(48) 39307 39308 var pBt uintptr 39309 var rc int32 39310 if argc != 2 { 39311 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39312 ts+24430, 0)) 39313 return TCL_ERROR 39314 } 39315 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39316 rc = sqlite3.Xsqlite3BtreeClose(tls, pBt) 39317 if rc != SQLITE_OK { 39318 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39319 return TCL_ERROR 39320 } 39321 nRefSqlite3-- 39322 if nRefSqlite3 == 0 { 39323 sqlite3.Xsqlite3_mutex_leave(tls, sDb.Fmutex) 39324 sqlite3.Xsqlite3_mutex_free(tls, sDb.Fmutex) 39325 sDb.Fmutex = uintptr(0) 39326 sDb.FpVfs = uintptr(0) 39327 } 39328 return TCL_OK 39329 } 39330 39331 func btree_begin_transaction(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39332 bp := tls.Alloc(48) 39333 defer tls.Free(48) 39334 39335 var pBt uintptr 39336 var rc int32 39337 if argc != 2 { 39338 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39339 ts+24430, 0)) 39340 return TCL_ERROR 39341 } 39342 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39343 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39344 rc = sqlite3.Xsqlite3BtreeBeginTrans(tls, pBt, 1, uintptr(0)) 39345 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39346 if rc != SQLITE_OK { 39347 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39348 return TCL_ERROR 39349 } 39350 return TCL_OK 39351 } 39352 39353 func btree_pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39354 bp := tls.Alloc(140) 39355 defer tls.Free(140) 39356 39357 var pBt uintptr 39358 var i int32 39359 var a uintptr 39360 39361 if argc != 2 { 39362 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39363 ts+24430, 0)) 39364 return TCL_ERROR 39365 } 39366 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39367 39368 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39369 39370 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39371 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 39372 for i = 0; i < 11; i++ { 39373 tcl.XTcl_AppendElement(tls, interp, zName1[i]) 39374 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 39375 tcl.XTcl_AppendElement(tls, interp, bp+40) 39376 } 39377 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39378 39379 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39380 return TCL_OK 39381 } 39382 39383 var zName1 = [11]uintptr{ 39384 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 39385 ts + 24448, ts + 24452, ts + 24457, ts + 25126, ts + 25131, 39386 } 39387 39388 func btree_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39389 bp := tls.Alloc(110) 39390 defer tls.Free(110) 39391 39392 var pBt uintptr 39393 39394 var pCur uintptr 39395 var rc int32 = SQLITE_OK 39396 39397 if argc != 4 { 39398 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39399 ts+25137, 0)) 39400 return TCL_ERROR 39401 } 39402 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39403 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39404 return TCL_ERROR 39405 } 39406 if tcl.XTcl_GetBoolean(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+76) != 0 { 39407 return TCL_ERROR 39408 } 39409 if *(*int32)(unsafe.Pointer(bp + 76)) != 0 { 39410 *(*int32)(unsafe.Pointer(bp + 76)) = BTREE_WRCSR 39411 } 39412 pCur = tcl.XTcl_Alloc(tls, uint32(sqlite3.Xsqlite3BtreeCursorSize(tls))) 39413 libc.Xmemset(tls, pCur, 0, uint64(sqlite3.Xsqlite3BtreeCursorSize(tls))) 39414 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39415 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39416 rc = sqlite3.Xsqlite3BtreeLockTable(tls, pBt, *(*int32)(unsafe.Pointer(bp + 72)), libc.BoolUint8(!!(*(*int32)(unsafe.Pointer(bp + 76)) != 0))) 39417 if rc == SQLITE_OK { 39418 rc = sqlite3.Xsqlite3BtreeCursor(tls, pBt, uint32(*(*int32)(unsafe.Pointer(bp + 72))), *(*int32)(unsafe.Pointer(bp + 76)), uintptr(0), pCur) 39419 } 39420 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39421 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39422 if rc != 0 { 39423 tcl.XTcl_Free(tls, pCur) 39424 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39425 return TCL_ERROR 39426 } 39427 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+80, ts+9889, libc.VaList(bp+48, pCur)) 39428 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 39429 return SQLITE_OK 39430 } 39431 39432 func btree_close_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39433 bp := tls.Alloc(48) 39434 defer tls.Free(48) 39435 39436 var pCur uintptr 39437 var rc int32 39438 39439 if argc != 2 { 39440 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39441 ts+24430, 0)) 39442 return TCL_ERROR 39443 } 39444 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39445 { 39446 var pBt uintptr = (*BtCursor)(unsafe.Pointer(pCur)).FpBtree 39447 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39448 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39449 rc = sqlite3.Xsqlite3BtreeCloseCursor(tls, pCur) 39450 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39451 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39452 39453 } 39454 tcl.XTcl_Free(tls, pCur) 39455 if rc != 0 { 39456 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39457 return TCL_ERROR 39458 } 39459 return SQLITE_OK 39460 } 39461 39462 func btree_next(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39463 bp := tls.Alloc(172) 39464 defer tls.Free(172) 39465 39466 var pCur uintptr 39467 var rc int32 39468 var res int32 = 0 39469 39470 if argc != 2 { 39471 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39472 ts+24430, 0)) 39473 return TCL_ERROR 39474 } 39475 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39476 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39477 rc = sqlite3.Xsqlite3BtreeNext(tls, pCur, 0) 39478 if rc == SQLITE_DONE { 39479 res = 1 39480 rc = SQLITE_OK 39481 } 39482 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39483 if rc != 0 { 39484 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39485 return TCL_ERROR 39486 } 39487 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, res)) 39488 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 39489 return SQLITE_OK 39490 } 39491 39492 func btree_first(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39493 bp := tls.Alloc(176) 39494 defer tls.Free(176) 39495 39496 var pCur uintptr 39497 var rc int32 39498 *(*int32)(unsafe.Pointer(bp + 72)) = 0 39499 39500 if argc != 2 { 39501 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39502 ts+24430, 0)) 39503 return TCL_ERROR 39504 } 39505 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39506 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39507 rc = sqlite3.Xsqlite3BtreeFirst(tls, pCur, bp+72) 39508 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39509 if rc != 0 { 39510 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39511 return TCL_ERROR 39512 } 39513 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 72)))) 39514 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+76, 0)) 39515 return SQLITE_OK 39516 } 39517 39518 func btree_eof(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39519 bp := tls.Alloc(106) 39520 defer tls.Free(106) 39521 39522 var pCur uintptr 39523 var rc int32 39524 39525 if argc != 2 { 39526 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39527 ts+24430, 0)) 39528 return TCL_ERROR 39529 } 39530 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39531 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39532 rc = sqlite3.Xsqlite3BtreeEof(tls, pCur) 39533 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39534 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+1333, libc.VaList(bp+32, rc)) 39535 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 39536 return SQLITE_OK 39537 } 39538 39539 func btree_payload_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39540 bp := tls.Alloc(106) 39541 defer tls.Free(106) 39542 39543 var pCur uintptr 39544 var n u32 39545 39546 if argc != 2 { 39547 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39548 ts+24430, 0)) 39549 return TCL_ERROR 39550 } 39551 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39552 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39553 n = sqlite3.Xsqlite3BtreePayloadSize(tls, pCur) 39554 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39555 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+17791, libc.VaList(bp+32, n)) 39556 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 39557 return SQLITE_OK 39558 } 39559 39560 func btree_varint_test(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39561 bp := tls.Alloc(516) 39562 defer tls.Free(516) 39563 39564 var in u64 39565 39566 var n1 int32 39567 var n2 int32 39568 var i int32 39569 var j int32 39570 39571 if argc != 5 { 39572 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39573 ts+25161, 0)) 39574 return TCL_ERROR 39575 } 39576 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+184) != 0 { 39577 return TCL_ERROR 39578 } 39579 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+188) != 0 { 39580 return TCL_ERROR 39581 } 39582 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+192) != 0 { 39583 return TCL_ERROR 39584 } 39585 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+196) != 0 { 39586 return TCL_ERROR 39587 } 39588 in = u64(*(*u32)(unsafe.Pointer(bp + 184))) 39589 in = in * u64(*(*u32)(unsafe.Pointer(bp + 188))) 39590 for i = 0; i < int32(*(*u32)(unsafe.Pointer(bp + 192))); i++ { 39591 n1 = sqlite3.Xsqlite3PutVarint(tls, bp+200, in) 39592 if n1 > 9 || n1 < 1 { 39593 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39594 ts+25196, libc.VaList(bp+32, n1)) 39595 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+300, 0)) 39596 return TCL_ERROR 39597 } 39598 n2 = int32(sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504)) 39599 if n1 != n2 { 39600 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39601 ts+25246, libc.VaList(bp+56, n1, n2)) 39602 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, bp+300, 0)) 39603 return TCL_ERROR 39604 } 39605 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 39606 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39607 ts+25294, libc.VaList(bp+88, in, *(*u64)(unsafe.Pointer(bp + 504)))) 39608 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, bp+300, 0)) 39609 return TCL_ERROR 39610 } 39611 if in&uint64(0xffffffff) == in { 39612 n2 = int32(func() uint8 { 39613 if int32(*(*uint8)(unsafe.Pointer(bp + 200))) < int32(u8(0x80)) { 39614 return uint8(func() int32 { *(*u32)(unsafe.Pointer(bp + 512)) = u32(*(*uint8)(unsafe.Pointer(bp + 200))); return 1 }()) 39615 } 39616 return sqlite3.Xsqlite3GetVarint32(tls, bp+200, bp+512) 39617 }()) 39618 *(*u64)(unsafe.Pointer(bp + 504)) = u64(*(*u32)(unsafe.Pointer(bp + 512))) 39619 if n1 != n2 { 39620 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39621 ts+25333, 39622 libc.VaList(bp+120, n1, n2)) 39623 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+136, bp+300, 0)) 39624 return TCL_ERROR 39625 } 39626 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 39627 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 39628 ts+25383, 39629 libc.VaList(bp+152, in, *(*u64)(unsafe.Pointer(bp + 504)))) 39630 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+168, bp+300, 0)) 39631 return TCL_ERROR 39632 } 39633 } 39634 39635 for j = 0; j < 19; j++ { 39636 sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504) 39637 } 39638 in = in + u64(*(*u32)(unsafe.Pointer(bp + 196))) 39639 } 39640 return TCL_OK 39641 } 39642 39643 func btree_from_db(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39644 bp := tls.Alloc(236) 39645 defer tls.Free(236) 39646 39647 var db uintptr 39648 var pBt uintptr 39649 var iDb int32 = 0 39650 39651 if argc != 2 && argc != 3 { 39652 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39653 ts+25439, 0)) 39654 return TCL_ERROR 39655 } 39656 39657 if 1 != tcl.XTcl_GetCommandInfo(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) { 39658 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25455, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+11945, 0)) 39659 return TCL_ERROR 39660 } 39661 if argc == 3 { 39662 iDb = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 39663 } 39664 39665 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 72)).FobjClientData)) 39666 39667 pBt = (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(db)).FaDb + uintptr(iDb)*32)).FpBt 39668 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+136, ts+9889, libc.VaList(bp+64, pBt)) 39669 tcl.XTcl_SetResult(tls, interp, bp+136, uintptr(1)) 39670 return TCL_OK 39671 } 39672 39673 func btree_ismemdb(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39674 bp := tls.Alloc(32) 39675 defer tls.Free(32) 39676 39677 var pBt uintptr 39678 var res int32 39679 var pFile uintptr 39680 39681 if argc != 2 { 39682 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39683 ts+24430, 0)) 39684 return TCL_ERROR 39685 } 39686 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39687 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39688 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39689 pFile = sqlite3.Xsqlite3PagerFile(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 39690 res = libc.Bool32((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods == uintptr(0)) 39691 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39692 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39693 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(res != 0))) 39694 return SQLITE_OK 39695 } 39696 39697 func btree_set_cache_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39698 bp := tls.Alloc(36) 39699 defer tls.Free(36) 39700 39701 var pBt uintptr 39702 39703 if argc != 3 { 39704 tcl.XTcl_AppendResult(tls, 39705 interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+25476, 0)) 39706 return TCL_ERROR 39707 } 39708 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39709 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 39710 return TCL_ERROR 39711 } 39712 39713 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39714 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39715 sqlite3.Xsqlite3BtreeSetCacheSize(tls, pBt, *(*int32)(unsafe.Pointer(bp + 32))) 39716 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39717 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39718 return TCL_OK 39719 } 39720 39721 func btree_insert(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39722 bp := tls.Alloc(68) 39723 defer tls.Free(68) 39724 39725 var pCur uintptr 39726 39727 if objc != 4 && objc != 3 { 39728 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+25488) 39729 return TCL_ERROR 39730 } 39731 39732 libc.Xmemset(tls, bp+16, 0, uint64(unsafe.Sizeof(BtreePayload{}))) 39733 if objc == 4 { 39734 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 39735 return TCL_ERROR 39736 } 39737 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 39738 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16+36) 39739 } else { 39740 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpKey = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) 39741 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 39742 } 39743 pCur = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 39744 39745 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 39746 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39747 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3BtreeInsert(tls, pCur, bp+16, 0, 0) 39748 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 39749 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 39750 39751 tcl.XTcl_ResetResult(tls, interp) 39752 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 39753 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, *(*int32)(unsafe.Pointer(bp + 64))), 0)) 39754 return TCL_ERROR 39755 } 39756 return TCL_OK 39757 } 39758 39759 func Sqlitetest3_Init(tls *libc.TLS, interp uintptr) int32 { 39760 var i int32 39761 39762 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd3))/uint64(unsafe.Sizeof(struct { 39763 FzName uintptr 39764 FxProc uintptr 39765 }{})); i++ { 39766 tcl.XTcl_CreateCommand(tls, interp, aCmd3[i].FzName, aCmd3[i].FxProc, uintptr(0), uintptr(0)) 39767 } 39768 39769 tcl.XTcl_CreateObjCommand(tls, interp, ts+25512, *(*uintptr)(unsafe.Pointer(&struct { 39770 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 39771 }{btree_insert})), uintptr(0), uintptr(0)) 39772 39773 return TCL_OK 39774 } 39775 39776 var aCmd3 = [14]struct { 39777 FzName uintptr 39778 FxProc uintptr 39779 }{ 39780 {FzName: ts + 25525, FxProc: 0}, 39781 {FzName: ts + 25536, FxProc: 0}, 39782 {FzName: ts + 25548, FxProc: 0}, 39783 {FzName: ts + 25572, FxProc: 0}, 39784 {FzName: ts + 25590, FxProc: 0}, 39785 {FzName: ts + 25603, FxProc: 0}, 39786 {FzName: ts + 25622, FxProc: 0}, 39787 {FzName: ts + 25633, FxProc: 0}, 39788 {FzName: ts + 25643, FxProc: 0}, 39789 {FzName: ts + 25662, FxProc: 0}, 39790 {FzName: ts + 25674, FxProc: 0}, 39791 {FzName: ts + 25692, FxProc: 0}, 39792 {FzName: ts + 25706, FxProc: 0}, 39793 {FzName: ts + 25720, FxProc: 0}, 39794 } 39795 39796 type sched_param = struct{ Fsched_priority int32 } 39797 39798 type pthread_once = struct { 39799 Fstate int32 39800 F__ccgo_pad1 [4]byte 39801 Fmutex pthread_mutex_t 39802 } 39803 39804 type pthread_t = uintptr 39805 type pthread_attr_t = uintptr 39806 type pthread_mutex_t = uintptr 39807 type pthread_mutexattr_t = uintptr 39808 type pthread_cond_t = uintptr 39809 type pthread_condattr_t = uintptr 39810 type pthread_key_t = int32 39811 type pthread_once_t = pthread_once 39812 type pthread_rwlock_t = uintptr 39813 type pthread_rwlockattr_t = uintptr 39814 type pthread_barrier_t = uintptr 39815 type pthread_barrierattr_t = uintptr 39816 type pthread_spinlock_t = uintptr 39817 39818 type pthread_addr_t = uintptr 39819 type pthread_startroutine_t = uintptr 39820 39821 type Thread = struct { 39822 FzFilename uintptr 39823 FxOp uintptr 39824 FzArg uintptr 39825 Fopnum int32 39826 Fbusy int32 39827 Fcompleted int32 39828 F__ccgo_pad1 [4]byte 39829 Fdb uintptr 39830 FpStmt uintptr 39831 FzErr uintptr 39832 FzStaticErr uintptr 39833 Frc int32 39834 Fargc int32 39835 Fargv [100]uintptr 39836 Fcolv [100]uintptr 39837 } 39838 39839 var threadset [26]Thread 39840 39841 func test_barrier(tls *libc.TLS) { 39842 var pMutex uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_APP1) 39843 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 39844 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 39845 } 39846 39847 func test_thread_main(tls *libc.TLS, pArg uintptr) uintptr { 39848 var p uintptr = pArg 39849 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 39850 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 39851 } 39852 sqlite3.Xsqlite3_open(tls, (*Thread)(unsafe.Pointer(p)).FzFilename, p+40) 39853 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread)(unsafe.Pointer(p)).Fdb) { 39854 (*Thread)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread)(unsafe.Pointer(p)).Fdb)) 39855 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 39856 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 39857 } 39858 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 39859 test_barrier(tls) 39860 (*Thread)(unsafe.Pointer(p)).Fcompleted = 1 39861 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 39862 libc.Xsched_yield(tls) 39863 } 39864 test_barrier(tls) 39865 for (*Thread)(unsafe.Pointer(p)).FxOp != 0 { 39866 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 39867 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 39868 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 39869 } 39870 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread)(unsafe.Pointer(p)).FxOp})).f(tls, p) 39871 test_barrier(tls) 39872 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 39873 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 39874 libc.Xsched_yield(tls) 39875 } 39876 test_barrier(tls) 39877 } 39878 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 39879 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 39880 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 39881 } 39882 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 39883 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 39884 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 39885 } 39886 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 39887 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 39888 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 39889 } 39890 test_barrier(tls) 39891 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 39892 sqlite3.Xsqlite3_thread_cleanup(tls) 39893 return uintptr(0) 39894 } 39895 39896 func parse_thread_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 39897 bp := tls.Alloc(16) 39898 defer tls.Free(16) 39899 39900 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) { 39901 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 39902 return -1 39903 } 39904 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 39905 } 39906 39907 func tcl_thread_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39908 bp := tls.Alloc(96) 39909 defer tls.Free(96) 39910 39911 var i int32 39912 39913 var rc int32 39914 39915 if argc != 3 { 39916 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39917 ts+25780, 0)) 39918 return TCL_ERROR 39919 } 39920 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39921 if i < 0 { 39922 return TCL_ERROR 39923 } 39924 if threadset[i].Fbusy != 0 { 39925 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 39926 return TCL_ERROR 39927 } 39928 threadset[i].Fbusy = 1 39929 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 39930 threadset[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 39931 threadset[i].Fopnum = 1 39932 threadset[i].Fcompleted = 0 39933 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 39934 f func(*libc.TLS, uintptr) uintptr 39935 }{test_thread_main})), uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 39936 if rc != 0 { 39937 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 39938 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 39939 threadset[i].Fbusy = 0 39940 return TCL_ERROR 39941 } 39942 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 39943 return TCL_OK 39944 } 39945 39946 func test_thread_wait(tls *libc.TLS, p uintptr) { 39947 test_barrier(tls) 39948 for (*Thread)(unsafe.Pointer(p)).Fopnum > (*Thread)(unsafe.Pointer(p)).Fcompleted { 39949 libc.Xsched_yield(tls) 39950 } 39951 test_barrier(tls) 39952 } 39953 39954 func tcl_thread_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39955 bp := tls.Alloc(48) 39956 defer tls.Free(48) 39957 39958 var i int32 39959 39960 if argc != 2 { 39961 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39962 ts+25849, 0)) 39963 return TCL_ERROR 39964 } 39965 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39966 if i < 0 { 39967 return TCL_ERROR 39968 } 39969 if !(threadset[i].Fbusy != 0) { 39970 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 39971 return TCL_ERROR 39972 } 39973 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 39974 return TCL_OK 39975 } 39976 39977 func test_stop_thread(tls *libc.TLS, p uintptr) { 39978 test_thread_wait(tls, p) 39979 (*Thread)(unsafe.Pointer(p)).FxOp = uintptr(0) 39980 (*Thread)(unsafe.Pointer(p)).Fopnum++ 39981 test_thread_wait(tls, p) 39982 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzArg) 39983 (*Thread)(unsafe.Pointer(p)).FzArg = uintptr(0) 39984 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzFilename) 39985 (*Thread)(unsafe.Pointer(p)).FzFilename = uintptr(0) 39986 (*Thread)(unsafe.Pointer(p)).Fbusy = 0 39987 } 39988 39989 func tcl_thread_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39990 bp := tls.Alloc(48) 39991 defer tls.Free(48) 39992 39993 var i int32 39994 39995 if argc != 2 { 39996 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39997 ts+25849, 0)) 39998 return TCL_ERROR 39999 } 40000 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 40001 for i = 0; i < N_THREAD; i++ { 40002 if threadset[i].Fbusy != 0 { 40003 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40004 } 40005 } 40006 } else { 40007 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40008 if i < 0 { 40009 return TCL_ERROR 40010 } 40011 if !(threadset[i].Fbusy != 0) { 40012 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40013 return TCL_ERROR 40014 } 40015 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40016 } 40017 return TCL_OK 40018 } 40019 40020 func tcl_thread_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40021 bp := tls.Alloc(172) 40022 defer tls.Free(172) 40023 40024 var i int32 40025 40026 if argc != 2 { 40027 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40028 ts+25849, 0)) 40029 return TCL_ERROR 40030 } 40031 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40032 if i < 0 { 40033 return TCL_ERROR 40034 } 40035 if !(threadset[i].Fbusy != 0) { 40036 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40037 return TCL_ERROR 40038 } 40039 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40040 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset[i].Fargc)) 40041 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40042 return TCL_OK 40043 } 40044 40045 func tcl_thread_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40046 bp := tls.Alloc(84) 40047 defer tls.Free(84) 40048 40049 var i int32 40050 40051 if argc != 3 { 40052 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40053 ts+25868, 0)) 40054 return TCL_ERROR 40055 } 40056 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40057 if i < 0 { 40058 return TCL_ERROR 40059 } 40060 if !(threadset[i].Fbusy != 0) { 40061 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40062 return TCL_ERROR 40063 } 40064 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 40065 return TCL_ERROR 40066 } 40067 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40068 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40069 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40070 return TCL_ERROR 40071 } 40072 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)) 40073 return TCL_OK 40074 } 40075 40076 func tcl_thread_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40077 bp := tls.Alloc(84) 40078 defer tls.Free(84) 40079 40080 var i int32 40081 40082 if argc != 3 { 40083 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40084 ts+25868, 0)) 40085 return TCL_ERROR 40086 } 40087 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40088 if i < 0 { 40089 return TCL_ERROR 40090 } 40091 if !(threadset[i].Fbusy != 0) { 40092 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40093 return TCL_ERROR 40094 } 40095 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 40096 return TCL_ERROR 40097 } 40098 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40099 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40100 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40101 return TCL_ERROR 40102 } 40103 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)) 40104 return TCL_OK 40105 } 40106 40107 func tcl_thread_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40108 bp := tls.Alloc(64) 40109 defer tls.Free(64) 40110 40111 var i int32 40112 var zName uintptr 40113 40114 if argc != 2 { 40115 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40116 ts+25849, 0)) 40117 return TCL_ERROR 40118 } 40119 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40120 if i < 0 { 40121 return TCL_ERROR 40122 } 40123 if !(threadset[i].Fbusy != 0) { 40124 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40125 return TCL_ERROR 40126 } 40127 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40128 zName = sqlite3.Xsqlite3ErrName(tls, threadset[i].Frc) 40129 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 40130 return TCL_OK 40131 } 40132 40133 func tcl_thread_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40134 bp := tls.Alloc(64) 40135 defer tls.Free(64) 40136 40137 var i int32 40138 40139 if argc != 2 { 40140 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40141 ts+25849, 0)) 40142 return TCL_ERROR 40143 } 40144 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40145 if i < 0 { 40146 return TCL_ERROR 40147 } 40148 if !(threadset[i].Fbusy != 0) { 40149 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40150 return TCL_ERROR 40151 } 40152 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40153 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset[i].FzErr, 0)) 40154 return TCL_OK 40155 } 40156 40157 func do_compile(tls *libc.TLS, p uintptr) { 40158 if (*Thread)(unsafe.Pointer(p)).Fdb == uintptr(0) { 40159 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 40160 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40161 return 40162 } 40163 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 40164 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40165 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40166 } 40167 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_prepare(tls, (*Thread)(unsafe.Pointer(p)).Fdb, (*Thread)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 40168 } 40169 40170 func tcl_thread_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40171 bp := tls.Alloc(56) 40172 defer tls.Free(56) 40173 40174 var i int32 40175 if argc != 3 { 40176 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40177 ts+25921, 0)) 40178 return TCL_ERROR 40179 } 40180 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40181 if i < 0 { 40182 return TCL_ERROR 40183 } 40184 if !(threadset[i].Fbusy != 0) { 40185 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40186 return TCL_ERROR 40187 } 40188 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40189 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile})) 40190 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 40191 threadset[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 40192 test_barrier(tls) 40193 threadset[i].Fopnum++ 40194 return TCL_OK 40195 } 40196 40197 func do_step(tls *libc.TLS, p uintptr) { 40198 var i int32 40199 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 40200 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 40201 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40202 return 40203 } 40204 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_step(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40205 if (*Thread)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 40206 (*Thread)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40207 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt); i++ { 40208 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 40209 } 40210 for i = 0; i < (*Thread)(unsafe.Pointer(p)).Fargc; i++ { 40211 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 40212 } 40213 } 40214 } 40215 40216 func tcl_thread_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40217 bp := tls.Alloc(48) 40218 defer tls.Free(48) 40219 40220 var i int32 40221 if argc != 2 { 40222 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40223 ts+25958, 0)) 40224 return TCL_ERROR 40225 } 40226 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40227 if i < 0 { 40228 return TCL_ERROR 40229 } 40230 if !(threadset[i].Fbusy != 0) { 40231 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40232 return TCL_ERROR 40233 } 40234 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40235 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step})) 40236 test_barrier(tls) 40237 threadset[i].Fopnum++ 40238 return TCL_OK 40239 } 40240 40241 func do_finalize(tls *libc.TLS, p uintptr) { 40242 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 40243 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 40244 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40245 return 40246 } 40247 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40248 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40249 } 40250 40251 func tcl_thread_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40252 bp := tls.Alloc(48) 40253 defer tls.Free(48) 40254 40255 var i int32 40256 if argc != 2 { 40257 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40258 ts+25958, 0)) 40259 return TCL_ERROR 40260 } 40261 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40262 if i < 0 { 40263 return TCL_ERROR 40264 } 40265 if !(threadset[i].Fbusy != 0) { 40266 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40267 return TCL_ERROR 40268 } 40269 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40270 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize})) 40271 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 40272 threadset[i].FzArg = uintptr(0) 40273 test_barrier(tls) 40274 threadset[i].Fopnum++ 40275 return TCL_OK 40276 } 40277 40278 func tcl_thread_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40279 bp := tls.Alloc(64) 40280 defer tls.Free(64) 40281 40282 var i int32 40283 var j int32 40284 var temp uintptr 40285 if argc != 3 { 40286 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40287 ts+25963, 0)) 40288 return TCL_ERROR 40289 } 40290 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40291 if i < 0 { 40292 return TCL_ERROR 40293 } 40294 if !(threadset[i].Fbusy != 0) { 40295 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40296 return TCL_ERROR 40297 } 40298 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40299 j = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40300 if j < 0 { 40301 return TCL_ERROR 40302 } 40303 if !(threadset[j].Fbusy != 0) { 40304 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 40305 return TCL_ERROR 40306 } 40307 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(j)*1680) 40308 temp = threadset[i].Fdb 40309 threadset[i].Fdb = threadset[j].Fdb 40310 threadset[j].Fdb = temp 40311 return TCL_OK 40312 } 40313 40314 func tcl_thread_db_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40315 bp := tls.Alloc(164) 40316 defer tls.Free(164) 40317 40318 var i int32 40319 40320 if argc != 2 { 40321 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40322 ts+25849, 0)) 40323 return TCL_ERROR 40324 } 40325 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40326 if i < 0 { 40327 return TCL_ERROR 40328 } 40329 if !(threadset[i].Fbusy != 0) { 40330 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40331 return TCL_ERROR 40332 } 40333 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40334 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].Fdb) 40335 threadset[i].Fdb = uintptr(0) 40336 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 40337 return TCL_OK 40338 } 40339 40340 func tcl_thread_db_put(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40341 bp := tls.Alloc(48) 40342 defer tls.Free(48) 40343 40344 var i int32 40345 if argc != 3 { 40346 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40347 ts+25972, 0)) 40348 return TCL_ERROR 40349 } 40350 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40351 if i < 0 { 40352 return TCL_ERROR 40353 } 40354 if !(threadset[i].Fbusy != 0) { 40355 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40356 return TCL_ERROR 40357 } 40358 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40359 40360 threadset[i].Fdb = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40361 return TCL_OK 40362 } 40363 40364 func tcl_thread_stmt_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40365 bp := tls.Alloc(164) 40366 defer tls.Free(164) 40367 40368 var i int32 40369 40370 if argc != 2 { 40371 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40372 ts+25849, 0)) 40373 return TCL_ERROR 40374 } 40375 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40376 if i < 0 { 40377 return TCL_ERROR 40378 } 40379 if !(threadset[i].Fbusy != 0) { 40380 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40381 return TCL_ERROR 40382 } 40383 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40384 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].FpStmt) 40385 threadset[i].FpStmt = uintptr(0) 40386 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 40387 return TCL_OK 40388 } 40389 40390 func Sqlitetest4_Init(tls *libc.TLS, interp uintptr) int32 { 40391 var i int32 40392 40393 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd4))/uint64(unsafe.Sizeof(struct { 40394 FzName uintptr 40395 FxProc uintptr 40396 }{})); i++ { 40397 tcl.XTcl_CreateCommand(tls, interp, aCmd4[i].FzName, aCmd4[i].FxProc, uintptr(0), uintptr(0)) 40398 } 40399 return TCL_OK 40400 } 40401 40402 var aCmd4 = [15]struct { 40403 FzName uintptr 40404 FxProc uintptr 40405 }{ 40406 {FzName: ts + 25979, FxProc: 0}, 40407 {FzName: ts + 25993, FxProc: 0}, 40408 {FzName: ts + 26005, FxProc: 0}, 40409 {FzName: ts + 26017, FxProc: 0}, 40410 {FzName: ts + 26029, FxProc: 0}, 40411 {FzName: ts + 26041, FxProc: 0}, 40412 {FzName: ts + 26056, FxProc: 0}, 40413 {FzName: ts + 26070, FxProc: 0}, 40414 {FzName: ts + 26083, FxProc: 0}, 40415 {FzName: ts + 26098, FxProc: 0}, 40416 {FzName: ts + 26110, FxProc: 0}, 40417 {FzName: ts + 26126, FxProc: 0}, 40418 {FzName: ts + 26138, FxProc: 0}, 40419 {FzName: ts + 26152, FxProc: 0}, 40420 {FzName: ts + 26166, FxProc: 0}, 40421 } 40422 40423 func binarize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40424 bp := tls.Alloc(4) 40425 defer tls.Free(4) 40426 40427 var bytes uintptr 40428 var pRet uintptr 40429 40430 bytes = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 40431 pRet = tcl.XTcl_NewByteArrayObj(tls, bytes, *(*int32)(unsafe.Pointer(bp))+1) 40432 tcl.XTcl_SetObjResult(tls, interp, pRet) 40433 return TCL_OK 40434 } 40435 40436 func test_value_overhead(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40437 bp := tls.Alloc(96) 40438 defer tls.Free(96) 40439 40440 var i int32 40441 40442 if objc != 3 { 40443 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 40444 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+26182, 0)) 40445 return TCL_ERROR 40446 } 40447 40448 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32) != 0 { 40449 return TCL_ERROR 40450 } 40451 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+36) != 0 { 40452 return TCL_ERROR 40453 } 40454 40455 (*Mem)(unsafe.Pointer(bp + 40)).Fflags = u16(MEM_Str | MEM_Term | MEM_Static) 40456 (*Mem)(unsafe.Pointer(bp + 40)).Fz = ts + 26209 40457 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = u8(SQLITE_UTF8) 40458 40459 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 40460 if *(*int32)(unsafe.Pointer(bp + 36)) != 0 { 40461 sqlite3.Xsqlite3_value_text(tls, bp+40) 40462 } 40463 } 40464 40465 return TCL_OK 40466 } 40467 40468 func name_to_enc(tls *libc.TLS, interp uintptr, pObj uintptr) u8 { 40469 bp := tls.Alloc(104) 40470 defer tls.Free(104) 40471 40472 *(*[5]EncName)(unsafe.Pointer(bp + 24)) = [5]EncName{ 40473 {FzName: ts + 26221, Fenc: u8(SQLITE_UTF8)}, 40474 {FzName: ts + 26226, Fenc: u8(SQLITE_UTF16LE)}, 40475 {FzName: ts + 26234, Fenc: u8(SQLITE_UTF16BE)}, 40476 {FzName: ts + 26242, Fenc: u8(SQLITE_UTF16)}, 40477 {}, 40478 } 40479 var pEnc uintptr 40480 var z uintptr = tcl.XTcl_GetString(tls, pObj) 40481 for pEnc = bp + 24; (*EncName)(unsafe.Pointer(pEnc)).FzName != 0; pEnc += 16 { 40482 if 0 == sqlite3.Xsqlite3StrICmp(tls, z, (*EncName)(unsafe.Pointer(pEnc)).FzName) { 40483 break 40484 } 40485 } 40486 if !(int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) != 0) { 40487 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26248, z, 0)) 40488 } 40489 if int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) == SQLITE_UTF16 { 40490 return u8(SQLITE_UTF16LE) 40491 } 40492 return (*EncName)(unsafe.Pointer(pEnc)).Fenc 40493 } 40494 40495 type EncName = struct { 40496 FzName uintptr 40497 Fenc u8 40498 F__ccgo_pad1 [7]byte 40499 } 40500 40501 func test_translate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40502 bp := tls.Alloc(44) 40503 defer tls.Free(44) 40504 40505 var enc_from u8 40506 var enc_to u8 40507 var pVal uintptr 40508 var z uintptr 40509 40510 var xDel uintptr = uintptr(0) 40511 40512 if objc != 4 && objc != 5 { 40513 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 40514 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), 40515 ts+26267, 0)) 40516 return TCL_ERROR 40517 } 40518 if objc == 5 { 40519 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 40520 } 40521 40522 enc_from = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 40523 if !(enc_from != 0) { 40524 return TCL_ERROR 40525 } 40526 enc_to = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 40527 if !(enc_to != 0) { 40528 return TCL_ERROR 40529 } 40530 40531 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 40532 40533 if int32(enc_from) == SQLITE_UTF8 { 40534 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 40535 if objc == 5 { 40536 z = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, z)) 40537 } 40538 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 40539 } else { 40540 z = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) 40541 if objc == 5 { 40542 var zTmp uintptr = z 40543 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 40))) 40544 libc.Xmemcpy(tls, z, zTmp, uint64(*(*int32)(unsafe.Pointer(bp + 40)))) 40545 } 40546 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 40547 } 40548 40549 z = sqlite3.Xsqlite3ValueText(tls, pVal, enc_to) 40550 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3ValueBytes(tls, pVal, enc_to) + func() int32 { 40551 if int32(enc_to) == SQLITE_UTF8 { 40552 return 1 40553 } 40554 return 2 40555 }() 40556 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, z, *(*int32)(unsafe.Pointer(bp + 40)))) 40557 40558 sqlite3.Xsqlite3ValueFree(tls, pVal) 40559 40560 return TCL_OK 40561 } 40562 40563 func test_translate_selftest(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40564 sqlite3.Xsqlite3UtfSelfTest(tls) 40565 return SQLITE_OK 40566 } 40567 40568 func Sqlitetest5_Init(tls *libc.TLS, interp uintptr) int32 { 40569 var i int32 40570 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd5))/uint64(unsafe.Sizeof(struct { 40571 FzName uintptr 40572 FxProc uintptr 40573 }{})); i++ { 40574 tcl.XTcl_CreateObjCommand(tls, interp, aCmd5[i].FzName, aCmd5[i].FxProc, uintptr(0), uintptr(0)) 40575 } 40576 return SQLITE_OK 40577 } 40578 40579 var aCmd5 = [4]struct { 40580 FzName uintptr 40581 FxProc uintptr 40582 }{ 40583 {FzName: ts + 26302, FxProc: 0}, 40584 {FzName: ts + 26311, FxProc: 0}, 40585 {FzName: ts + 26331, FxProc: 0}, 40586 {FzName: ts + 26346, FxProc: 0}, 40587 } 40588 40589 type CrashFile1 = struct { 40590 FpMethod uintptr 40591 FpRealFile uintptr 40592 FzName uintptr 40593 Fflags int32 40594 F__ccgo_pad1 [4]byte 40595 FzData uintptr 40596 FnData int32 40597 F__ccgo_pad2 [4]byte 40598 FiSize i64 40599 } 40600 40601 type CrashFile = CrashFile1 40602 type CrashGlobal1 = struct { 40603 FpWriteList uintptr 40604 FpWriteListEnd uintptr 40605 FiSectorSize int32 40606 FiDeviceCharacteristics int32 40607 FiCrash int32 40608 FzCrashFile [500]int8 40609 } 40610 40611 type CrashGlobal = CrashGlobal1 40612 type WriteBuffer1 = struct { 40613 FiOffset i64 40614 FnBuf int32 40615 F__ccgo_pad1 [4]byte 40616 FzBuf uintptr 40617 FpFile uintptr 40618 FpNext uintptr 40619 } 40620 40621 type WriteBuffer = WriteBuffer1 40622 40623 var g = CrashGlobal{FiSectorSize: SQLITE_DEFAULT_SECTOR_SIZE} 40624 40625 var sqlite3CrashTestEnable int32 = 0 40626 40627 func crash_malloc(tls *libc.TLS, nByte int32) uintptr { 40628 return tcl.XTcl_AttemptAlloc(tls, uint32(size_t(nByte))) 40629 } 40630 40631 func crash_free(tls *libc.TLS, p uintptr) { 40632 tcl.XTcl_Free(tls, p) 40633 } 40634 40635 func crash_realloc(tls *libc.TLS, p uintptr, n int32) uintptr { 40636 return tcl.XTcl_AttemptRealloc(tls, p, uint32(size_t(n))) 40637 } 40638 40639 func writeDbFile(tls *libc.TLS, p uintptr, z uintptr, iAmt i64, iOff i64) int32 { 40640 var rc int32 = SQLITE_OK 40641 var iSkip int32 = 0 40642 if iAmt-i64(iSkip) > int64(0) { 40643 rc = sqlite3.Xsqlite3OsWrite(tls, (*CrashFile)(unsafe.Pointer(p)).FpRealFile, z+uintptr(iSkip), int32(iAmt-i64(iSkip)), iOff+i64(iSkip)) 40644 } 40645 return rc 40646 } 40647 40648 func writeListSync(tls *libc.TLS, pFile uintptr, isCrash int32) int32 { 40649 bp := tls.Alloc(16) 40650 defer tls.Free(16) 40651 40652 var rc int32 = SQLITE_OK 40653 var iDc int32 = g.FiDeviceCharacteristics 40654 var pWrite uintptr 40655 var ppPtr uintptr 40656 40657 var pFinal uintptr = uintptr(0) 40658 if !(isCrash != 0) { 40659 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 40660 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile { 40661 pFinal = pWrite 40662 } 40663 } 40664 } else if iDc&(SQLITE_IOCAP_SEQUENTIAL|SQLITE_IOCAP_SAFE_APPEND) != 0 { 40665 var nWrite int32 = 0 40666 40667 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 40668 nWrite++ 40669 } 40670 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 40671 *(*int32)(unsafe.Pointer(bp)) = func() int32 { 40672 if *(*int32)(unsafe.Pointer(bp)) < 0 { 40673 return -1 * *(*int32)(unsafe.Pointer(bp)) 40674 } 40675 return *(*int32)(unsafe.Pointer(bp)) 40676 }() % nWrite 40677 for pWrite = g.FpWriteList; *(*int32)(unsafe.Pointer(bp)) > 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 40678 *(*int32)(unsafe.Pointer(bp))-- 40679 } 40680 pFinal = pWrite 40681 } 40682 40683 ppPtr = uintptr(unsafe.Pointer(&g)) 40684 for pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)); rc == SQLITE_OK && pWrite != 0; pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)) { 40685 var pRealFile uintptr = (*CrashFile)(unsafe.Pointer((*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile)).FpRealFile 40686 40687 var eAction int32 = 0 40688 if !(isCrash != 0) { 40689 eAction = 2 40690 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile || iDc&SQLITE_IOCAP_SEQUENTIAL != 0 { 40691 eAction = 1 40692 } 40693 } else { 40694 sqlite3.Xsqlite3_randomness(tls, 1, bp+4) 40695 40696 if iDc&SQLITE_IOCAP_ATOMIC != 0 || (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf == uintptr(0) { 40697 *(*int8)(unsafe.Pointer(bp + 4)) &= int8(0x01) 40698 } 40699 40700 if iDc&SQLITE_IOCAP_SEQUENTIAL != 0 && pWrite != pFinal { 40701 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 40702 } 40703 40704 if iDc&SQLITE_IOCAP_SAFE_APPEND != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 40705 sqlite3.Xsqlite3OsFileSize(tls, pRealFile, bp+8) 40706 if *(*i64)(unsafe.Pointer(bp + 8)) == (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset { 40707 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 40708 } 40709 } 40710 40711 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x06 == 0x06 { 40712 eAction = 3 40713 } else { 40714 eAction = func() int32 { 40715 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x01 != 0 { 40716 return 2 40717 } 40718 return 1 40719 }() 40720 } 40721 } 40722 40723 switch eAction { 40724 case 1: 40725 { 40726 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 40727 rc = writeDbFile(tls, 40728 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf, int64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf), (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 40729 } else { 40730 rc = sqlite3.Xsqlite3OsTruncate(tls, pRealFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 40731 } 40732 *(*uintptr)(unsafe.Pointer(ppPtr)) = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext 40733 crash_free(tls, pWrite) 40734 break 40735 40736 } 40737 case 2: 40738 { 40739 ppPtr = pWrite + 32 40740 break 40741 40742 } 40743 case 3: 40744 { 40745 var zGarbage uintptr 40746 var iFirst int32 = int32((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset / i64(g.FiSectorSize)) 40747 var iLast int32 = int32(((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset + i64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf) - int64(1)) / i64(g.FiSectorSize)) 40748 40749 zGarbage = crash_malloc(tls, g.FiSectorSize) 40750 if zGarbage != 0 { 40751 var i sqlite3_int64 40752 for i = sqlite3_int64(iFirst); rc == SQLITE_OK && i <= sqlite3_int64(iLast); i++ { 40753 sqlite3.Xsqlite3_randomness(tls, g.FiSectorSize, zGarbage) 40754 rc = writeDbFile(tls, 40755 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, zGarbage, int64(g.FiSectorSize), i*sqlite3_int64(g.FiSectorSize)) 40756 } 40757 crash_free(tls, zGarbage) 40758 } else { 40759 rc = SQLITE_NOMEM 40760 } 40761 40762 ppPtr = pWrite + 32 40763 break 40764 40765 } 40766 40767 default: 40768 } 40769 40770 if pWrite == pFinal { 40771 break 40772 } 40773 } 40774 40775 if rc == SQLITE_OK && isCrash != 0 { 40776 libc.Xexit(tls, -1) 40777 } 40778 40779 for pWrite = g.FpWriteList; pWrite != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 40780 } 40781 g.FpWriteListEnd = pWrite 40782 40783 return rc 40784 } 40785 40786 func writeListAppend(tls *libc.TLS, pFile uintptr, iOffset sqlite3_int64, zBuf uintptr, nBuf int32) int32 { 40787 var pNew uintptr 40788 40789 pNew = crash_malloc(tls, int32(uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf))) 40790 if pNew == uintptr(0) { 40791 libc.Xfprintf(tls, uintptr(unsafe.Pointer(&libc.X__sF))+2*152, ts+26365, 0) 40792 } 40793 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf)) 40794 (*WriteBuffer)(unsafe.Pointer(pNew)).FiOffset = iOffset 40795 (*WriteBuffer)(unsafe.Pointer(pNew)).FnBuf = nBuf 40796 (*WriteBuffer)(unsafe.Pointer(pNew)).FpFile = pFile 40797 if zBuf != 0 { 40798 (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf = pNew + 1*40 40799 libc.Xmemcpy(tls, (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf, zBuf, uint64(nBuf)) 40800 } 40801 40802 if g.FpWriteList != 0 { 40803 (*WriteBuffer)(unsafe.Pointer(g.FpWriteListEnd)).FpNext = pNew 40804 } else { 40805 g.FpWriteList = pNew 40806 } 40807 g.FpWriteListEnd = pNew 40808 40809 return SQLITE_OK 40810 } 40811 40812 func cfClose(tls *libc.TLS, pFile uintptr) int32 { 40813 var pCrash uintptr = pFile 40814 writeListSync(tls, pCrash, 0) 40815 sqlite3.Xsqlite3OsClose(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FpRealFile) 40816 return SQLITE_OK 40817 } 40818 40819 func cfRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 40820 var pCrash uintptr = pFile 40821 var nCopy int32 = func() int32 { 40822 if i64(iAmt) < (*CrashFile)(unsafe.Pointer(pCrash)).FiSize-iOfst { 40823 return int32(i64(iAmt)) 40824 } 40825 return int32((*CrashFile)(unsafe.Pointer(pCrash)).FiSize - iOfst) 40826 }() 40827 40828 if nCopy > 0 { 40829 libc.Xmemcpy(tls, zBuf, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), uint64(nCopy)) 40830 } 40831 40832 if nCopy < iAmt { 40833 return SQLITE_IOERR | int32(2)<<8 40834 } 40835 40836 return SQLITE_OK 40837 } 40838 40839 func cfWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 40840 var pCrash uintptr = pFile 40841 if sqlite_int64(iAmt)+iOfst > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 40842 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(sqlite_int64(iAmt) + iOfst)) 40843 } 40844 for (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > i64((*CrashFile)(unsafe.Pointer(pCrash)).FnData) { 40845 var zNew uintptr 40846 var nNew int32 = (*CrashFile)(unsafe.Pointer(pCrash)).FnData*2 + 4096 40847 zNew = crash_realloc(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData, nNew) 40848 if !(zNew != 0) { 40849 return SQLITE_NOMEM 40850 } 40851 libc.Xmemset(tls, zNew+uintptr((*CrashFile)(unsafe.Pointer(pCrash)).FnData), 0, uint64(nNew-(*CrashFile)(unsafe.Pointer(pCrash)).FnData)) 40852 (*CrashFile)(unsafe.Pointer(pCrash)).FnData = nNew 40853 (*CrashFile)(unsafe.Pointer(pCrash)).FzData = zNew 40854 } 40855 libc.Xmemcpy(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), zBuf, uint64(iAmt)) 40856 return writeListAppend(tls, pFile, iOfst, zBuf, iAmt) 40857 } 40858 40859 func cfTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 40860 var pCrash uintptr = pFile 40861 40862 if (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > size { 40863 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(size)) 40864 } 40865 return writeListAppend(tls, pFile, size, uintptr(0), 0) 40866 } 40867 40868 func cfSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 40869 var pCrash uintptr = pFile 40870 var isCrash int32 = 0 40871 40872 var zName uintptr = (*CrashFile)(unsafe.Pointer(pCrash)).FzName 40873 var zCrashFile uintptr = uintptr(unsafe.Pointer(&g)) + 28 40874 var nName int32 = int32(libc.Xstrlen(tls, zName)) 40875 var nCrashFile int32 = int32(libc.Xstrlen(tls, zCrashFile)) 40876 40877 if nCrashFile > 0 && int32(*(*int8)(unsafe.Pointer(zCrashFile + uintptr(nCrashFile-1)))) == '*' { 40878 nCrashFile-- 40879 if nName > nCrashFile { 40880 nName = nCrashFile 40881 } 40882 } 40883 40884 if nName == nCrashFile && 0 == libc.Xmemcmp(tls, zName, zCrashFile, uint64(nName)) { 40885 if libc.PreDecInt32(&g.FiCrash, 1) == 0 { 40886 isCrash = 1 40887 } 40888 } 40889 40890 return writeListSync(tls, pCrash, isCrash) 40891 } 40892 40893 func cfFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 40894 var pCrash uintptr = pFile 40895 *(*sqlite_int64)(unsafe.Pointer(pSize)) = (*CrashFile)(unsafe.Pointer(pCrash)).FiSize 40896 return SQLITE_OK 40897 } 40898 40899 func cfLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 40900 return sqlite3.Xsqlite3OsLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 40901 } 40902 40903 func cfUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 40904 return sqlite3.Xsqlite3OsUnlock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 40905 } 40906 40907 func cfCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 40908 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, pResOut) 40909 } 40910 40911 func cfFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 40912 if op == SQLITE_FCNTL_SIZE_HINT { 40913 var pCrash uintptr = pFile 40914 var nByte i64 = *(*i64)(unsafe.Pointer(pArg)) 40915 if nByte > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 40916 if SQLITE_OK == writeListAppend(tls, pFile, nByte, uintptr(0), 0) { 40917 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(nByte)) 40918 } 40919 } 40920 return SQLITE_OK 40921 } 40922 return sqlite3.Xsqlite3OsFileControl(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, op, pArg) 40923 } 40924 40925 func cfSectorSize(tls *libc.TLS, pFile uintptr) int32 { 40926 return g.FiSectorSize 40927 } 40928 40929 func cfDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 40930 return g.FiDeviceCharacteristics 40931 } 40932 40933 func cfShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 40934 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 40935 return (*struct { 40936 f func(*libc.TLS, uintptr, int32, int32, int32) int32 40937 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 40938 } 40939 40940 func cfShmBarrier(tls *libc.TLS, pFile uintptr) { 40941 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 40942 (*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) 40943 } 40944 40945 func cfShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 40946 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 40947 return (*struct { 40948 f func(*libc.TLS, uintptr, int32) int32 40949 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, delFlag) 40950 } 40951 40952 func cfShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, sz int32, w int32, pp uintptr) int32 { 40953 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 40954 return (*struct { 40955 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 40956 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iRegion, sz, w, pp) 40957 } 40958 40959 var CrashFileVtab = sqlite3_io_methods{ 40960 FiVersion: 2, 40961 FxClose: 0, 40962 FxRead: 0, 40963 FxWrite: 0, 40964 FxTruncate: 0, 40965 FxSync: 0, 40966 FxFileSize: 0, 40967 FxLock: 0, 40968 FxUnlock: 0, 40969 FxCheckReservedLock: 0, 40970 FxFileControl: 0, 40971 FxSectorSize: 0, 40972 FxDeviceCharacteristics: 0, 40973 FxShmMap: 0, 40974 FxShmLock: 0, 40975 FxShmBarrier: 0, 40976 FxShmUnmap: 0, 40977 } 40978 40979 type crashAppData = struct{ FpOrig uintptr } 40980 40981 func cfOpen(tls *libc.TLS, pCfVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 40982 bp := tls.Alloc(8) 40983 defer tls.Free(8) 40984 40985 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 40986 var rc int32 40987 var pWrapper uintptr = pFile 40988 var pReal uintptr = pWrapper + 1*56 40989 40990 libc.Xmemset(tls, pWrapper, 0, uint64(unsafe.Sizeof(CrashFile{}))) 40991 rc = sqlite3.Xsqlite3OsOpen(tls, pVfs, zName, pReal, flags, pOutFlags) 40992 40993 if rc == SQLITE_OK { 40994 (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod = uintptr(unsafe.Pointer(&CrashFileVtab)) 40995 (*CrashFile)(unsafe.Pointer(pWrapper)).FzName = zName 40996 (*CrashFile)(unsafe.Pointer(pWrapper)).FpRealFile = pReal 40997 rc = sqlite3.Xsqlite3OsFileSize(tls, pReal, bp) 40998 (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize = i64(int32(*(*i64)(unsafe.Pointer(bp)))) 40999 (*CrashFile)(unsafe.Pointer(pWrapper)).Fflags = flags 41000 } 41001 if rc == SQLITE_OK { 41002 (*CrashFile)(unsafe.Pointer(pWrapper)).FnData = int32(int64(4096) + (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize) 41003 (*CrashFile)(unsafe.Pointer(pWrapper)).FzData = crash_malloc(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FnData) 41004 if (*CrashFile)(unsafe.Pointer(pWrapper)).FzData != 0 { 41005 var iOff i64 41006 41007 libc.Xmemset(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData, 0, uint64((*CrashFile)(unsafe.Pointer(pWrapper)).FnData)) 41008 for iOff = int64(0); iOff < (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize; iOff = iOff + int64(512) { 41009 var nRead int32 = int32((*CrashFile)(unsafe.Pointer(pWrapper)).FiSize - iOff) 41010 if nRead > 512 { 41011 nRead = 512 41012 } 41013 rc = sqlite3.Xsqlite3OsRead(tls, pReal, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData+uintptr(iOff), nRead, iOff) 41014 } 41015 } else { 41016 rc = SQLITE_NOMEM 41017 } 41018 } 41019 if rc != SQLITE_OK && (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod != 0 { 41020 sqlite3.Xsqlite3OsClose(tls, pFile) 41021 } 41022 return rc 41023 } 41024 41025 func cfDelete(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, dirSync int32) int32 { 41026 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41027 return (*struct { 41028 f func(*libc.TLS, uintptr, uintptr, int32) int32 41029 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDelete})).f(tls, pVfs, zPath, dirSync) 41030 } 41031 41032 func cfAccess(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 41033 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41034 return (*struct { 41035 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41036 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxAccess})).f(tls, pVfs, zPath, flags, pResOut) 41037 } 41038 41039 func cfFullPathname(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) int32 { 41040 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41041 return (*struct { 41042 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41043 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})).f(tls, pVfs, zPath, nPathOut, zPathOut) 41044 } 41045 41046 func cfDlOpen(tls *libc.TLS, pCfVfs uintptr, zPath uintptr) uintptr { 41047 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41048 return (*struct { 41049 f func(*libc.TLS, uintptr, uintptr) uintptr 41050 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlOpen})).f(tls, pVfs, zPath) 41051 } 41052 41053 func cfDlError(tls *libc.TLS, pCfVfs uintptr, nByte int32, zErrMsg uintptr) { 41054 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41055 (*struct { 41056 f func(*libc.TLS, uintptr, int32, uintptr) 41057 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlError})).f(tls, pVfs, nByte, zErrMsg) 41058 } 41059 41060 func cfDlSym(tls *libc.TLS, pCfVfs uintptr, pH uintptr, zSym uintptr) uintptr { 41061 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41062 return (*struct { 41063 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 41064 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlSym})).f(tls, pVfs, pH, zSym) 41065 } 41066 41067 func cfDlClose(tls *libc.TLS, pCfVfs uintptr, pHandle uintptr) { 41068 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41069 (*struct { 41070 f func(*libc.TLS, uintptr, uintptr) 41071 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlClose})).f(tls, pVfs, pHandle) 41072 } 41073 41074 func cfRandomness(tls *libc.TLS, pCfVfs uintptr, nByte int32, zBufOut uintptr) int32 { 41075 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41076 return (*struct { 41077 f func(*libc.TLS, uintptr, int32, uintptr) int32 41078 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxRandomness})).f(tls, pVfs, nByte, zBufOut) 41079 } 41080 41081 func cfSleep(tls *libc.TLS, pCfVfs uintptr, nMicro int32) int32 { 41082 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41083 return (*struct { 41084 f func(*libc.TLS, uintptr, int32) int32 41085 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSleep})).f(tls, pVfs, nMicro) 41086 } 41087 41088 func cfCurrentTime(tls *libc.TLS, pCfVfs uintptr, pTimeOut uintptr) int32 { 41089 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41090 return (*struct { 41091 f func(*libc.TLS, uintptr, uintptr) int32 41092 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTime})).f(tls, pVfs, pTimeOut) 41093 } 41094 41095 func cfGetLastError(tls *libc.TLS, pCfVfs uintptr, n int32, z uintptr) int32 { 41096 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41097 return (*struct { 41098 f func(*libc.TLS, uintptr, int32, uintptr) int32 41099 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetLastError})).f(tls, pVfs, n, z) 41100 } 41101 41102 func processDevSymArgs(tls *libc.TLS, interp uintptr, objc int32, objv uintptr, piDeviceChar uintptr, piSectorSize uintptr) int32 { 41103 bp := tls.Alloc(316) 41104 defer tls.Free(316) 41105 41106 *(*[14]DeviceFlag)(unsafe.Pointer(bp + 88)) = [14]DeviceFlag{ 41107 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 41108 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 41109 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 41110 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 41111 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 41112 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 41113 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 41114 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 41115 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 41116 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 41117 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 41118 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 41119 {FzName: ts + 26529, FiValue: SQLITE_IOCAP_BATCH_ATOMIC}, 41120 {}, 41121 } 41122 var i int32 41123 var iDc int32 = 0 41124 *(*int32)(unsafe.Pointer(bp + 68)) = 0 41125 var setSectorsize int32 = 0 41126 var setDeviceChar int32 = 0 41127 41128 for i = 0; i < objc; i = i + 2 { 41129 var zOpt uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+64) 41130 41131 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) && 41132 (*(*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) { 41133 tcl.XTcl_AppendResult(tls, interp, 41134 libc.VaList(bp, ts+26571, zOpt, 41135 ts+26585, 0)) 41136 return TCL_ERROR 41137 } 41138 if i == objc-1 { 41139 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26633, zOpt, ts+11945, 0)) 41140 return TCL_ERROR 41141 } 41142 41143 if int32(*(*int8)(unsafe.Pointer(zOpt + 1))) == 's' { 41144 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+68) != 0 { 41145 return TCL_ERROR 41146 } 41147 setSectorsize = 1 41148 } else { 41149 var j int32 41150 41151 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+72, bp+80) != 0 { 41152 return TCL_ERROR 41153 } 41154 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 72)); j++ { 41155 var rc int32 41156 41157 var pFlag uintptr = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(j)*8))) 41158 (*Tcl_Obj)(unsafe.Pointer(pFlag)).FrefCount++ 41159 tcl.XTcl_UtfToLower(tls, tcl.XTcl_GetString(tls, pFlag)) 41160 41161 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 41162 interp, pFlag, bp+88, int32(unsafe.Sizeof(DeviceFlag{})), ts+26664, 0, bp+312) 41163 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 41164 var _objPtr uintptr = pFlag 41165 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 41166 tcl.XTclFreeObj(tls, _objPtr) 41167 } 41168 } 41169 if rc != 0 { 41170 return TCL_ERROR 41171 } 41172 41173 iDc = iDc | (*DeviceFlag)(unsafe.Pointer(bp+88+uintptr(*(*int32)(unsafe.Pointer(bp + 312)))*16)).FiValue 41174 } 41175 setDeviceChar = 1 41176 } 41177 } 41178 41179 if setDeviceChar != 0 { 41180 *(*int32)(unsafe.Pointer(piDeviceChar)) = iDc 41181 } 41182 if setSectorsize != 0 { 41183 *(*int32)(unsafe.Pointer(piSectorSize)) = *(*int32)(unsafe.Pointer(bp + 68)) 41184 } 41185 41186 return TCL_OK 41187 } 41188 41189 type DeviceFlag = struct { 41190 FzName uintptr 41191 FiValue int32 41192 F__ccgo_pad1 [4]byte 41193 } 41194 41195 func crashNowCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41196 if objc != 1 { 41197 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41198 return TCL_ERROR 41199 } 41200 writeListSync(tls, uintptr(0), 1) 41201 41202 return TCL_OK 41203 } 41204 41205 func crashEnableCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41206 bp := tls.Alloc(8) 41207 defer tls.Free(8) 41208 41209 *(*int32)(unsafe.Pointer(bp + 4)) = 0 41210 41211 if objc != 2 && objc != 3 { 41212 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26677) 41213 return TCL_ERROR 41214 } 41215 41216 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 41217 return TCL_ERROR 41218 } 41219 if objc == 3 && tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 41220 return TCL_ERROR 41221 } 41222 41223 if *(*int32)(unsafe.Pointer(bp)) != 0 && crashVfs.FpAppData != 0 || !(*(*int32)(unsafe.Pointer(bp)) != 0) && !(int32(crashVfs.FpAppData) != 0) { 41224 return TCL_OK 41225 } 41226 41227 if crashVfs.FpAppData == uintptr(0) { 41228 var pOriginalVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 41229 crashVfs.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FmxPathname 41230 crashVfs.FpAppData = pOriginalVfs 41231 crashVfs.FszOsFile = int32(uint64(unsafe.Sizeof(CrashFile{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FszOsFile)) 41232 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&crashVfs)), *(*int32)(unsafe.Pointer(bp + 4))) 41233 } else { 41234 crashVfs.FpAppData = uintptr(0) 41235 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&crashVfs))) 41236 } 41237 41238 return TCL_OK 41239 } 41240 41241 var crashVfs = sqlite3_vfs{ 41242 FiVersion: 2, 41243 FzName: ts + 26694, 41244 FxOpen: 0, 41245 FxDelete: 0, 41246 FxAccess: 0, 41247 FxFullPathname: 0, 41248 FxDlOpen: 0, 41249 FxDlError: 0, 41250 FxDlSym: 0, 41251 FxDlClose: 0, 41252 FxRandomness: 0, 41253 FxSleep: 0, 41254 FxCurrentTime: 0, 41255 FxGetLastError: 0, 41256 } 41257 41258 func crashParamsObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41259 bp := tls.Alloc(48) 41260 defer tls.Free(48) 41261 41262 var zCrashFile uintptr 41263 41264 *(*int32)(unsafe.Pointer(bp + 40)) = -1 41265 *(*int32)(unsafe.Pointer(bp + 44)) = -1 41266 41267 if !(objc < 3) { 41268 goto __1 41269 } 41270 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26700) 41271 goto error 41272 __1: 41273 ; 41274 zCrashFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+32) 41275 if !(uint64(*(*int32)(unsafe.Pointer(bp + 32))) >= uint64(unsafe.Sizeof([500]int8{}))) { 41276 goto __2 41277 } 41278 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26726, zCrashFile, ts+11945, 0)) 41279 goto error 41280 __2: 41281 ; 41282 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+36) != 0) { 41283 goto __3 41284 } 41285 goto error 41286 __3: 41287 ; 41288 if !(processDevSymArgs(tls, interp, objc-3, objv+1*8, bp+40, bp+44) != 0) { 41289 goto __4 41290 } 41291 return TCL_ERROR 41292 __4: 41293 ; 41294 if !(*(*int32)(unsafe.Pointer(bp + 40)) >= 0) { 41295 goto __5 41296 } 41297 g.FiDeviceCharacteristics = *(*int32)(unsafe.Pointer(bp + 40)) 41298 __5: 41299 ; 41300 if !(*(*int32)(unsafe.Pointer(bp + 44)) >= 0) { 41301 goto __6 41302 } 41303 g.FiSectorSize = *(*int32)(unsafe.Pointer(bp + 44)) 41304 __6: 41305 ; 41306 g.FiCrash = *(*int32)(unsafe.Pointer(bp + 36)) 41307 libc.Xmemcpy(tls, uintptr(unsafe.Pointer(&g))+28, zCrashFile, uint64(*(*int32)(unsafe.Pointer(bp + 32))+1)) 41308 sqlite3CrashTestEnable = 1 41309 return TCL_OK 41310 41311 error: 41312 return TCL_ERROR 41313 } 41314 41315 func devSymObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41316 bp := tls.Alloc(8) 41317 defer tls.Free(8) 41318 41319 *(*int32)(unsafe.Pointer(bp)) = -1 41320 *(*int32)(unsafe.Pointer(bp + 4)) = -1 41321 41322 if processDevSymArgs(tls, interp, objc-1, objv+1*8, bp, bp+4) != 0 { 41323 return TCL_ERROR 41324 } 41325 devsym_register(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 41326 41327 return TCL_OK 41328 } 41329 41330 func writeCrashObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41331 bp := tls.Alloc(4) 41332 defer tls.Free(4) 41333 41334 *(*int32)(unsafe.Pointer(bp)) = 0 41335 41336 if objc != 2 { 41337 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26750) 41338 return TCL_ERROR 41339 } 41340 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 41341 return TCL_ERROR 41342 } 41343 41344 devsym_crash_on_write(tls, *(*int32)(unsafe.Pointer(bp))) 41345 return TCL_OK 41346 } 41347 41348 func dsUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41349 if objc != 1 { 41350 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41351 return TCL_ERROR 41352 } 41353 41354 devsym_unregister(tls) 41355 return TCL_OK 41356 } 41357 41358 func jtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41359 bp := tls.Alloc(48) 41360 defer tls.Free(48) 41361 41362 var zParent uintptr = uintptr(0) 41363 41364 if objc != 2 && objc != 3 { 41365 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26757) 41366 return TCL_ERROR 41367 } 41368 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 41369 if objc == 3 { 41370 if libc.Xstrcmp(tls, zParent, ts+26779) != 0 { 41371 tcl.XTcl_AppendResult(tls, interp, 41372 libc.VaList(bp, ts+11851, zParent, ts+26788, 0)) 41373 return TCL_ERROR 41374 } 41375 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41376 } 41377 41378 if !(int32(*(*int8)(unsafe.Pointer(zParent))) != 0) { 41379 zParent = uintptr(0) 41380 } 41381 if jt_register(tls, zParent, libc.Bool32(objc == 3)) != 0 { 41382 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26808, 0)) 41383 return TCL_ERROR 41384 } 41385 41386 return TCL_OK 41387 } 41388 41389 func jtUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41390 if objc != 1 { 41391 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41392 return TCL_ERROR 41393 } 41394 41395 jt_unregister(tls) 41396 return TCL_OK 41397 } 41398 41399 func Sqlitetest6_Init(tls *libc.TLS, interp uintptr) int32 { 41400 tcl.XTcl_CreateObjCommand(tls, interp, ts+26829, *(*uintptr)(unsafe.Pointer(&struct { 41401 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41402 }{crashEnableCmd})), uintptr(0), uintptr(0)) 41403 tcl.XTcl_CreateObjCommand(tls, interp, ts+26850, *(*uintptr)(unsafe.Pointer(&struct { 41404 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41405 }{crashParamsObjCmd})), uintptr(0), uintptr(0)) 41406 tcl.XTcl_CreateObjCommand(tls, interp, ts+26870, *(*uintptr)(unsafe.Pointer(&struct { 41407 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41408 }{crashNowCmd})), uintptr(0), uintptr(0)) 41409 tcl.XTcl_CreateObjCommand(tls, interp, ts+26888, *(*uintptr)(unsafe.Pointer(&struct { 41410 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41411 }{devSymObjCmd})), uintptr(0), uintptr(0)) 41412 tcl.XTcl_CreateObjCommand(tls, interp, ts+26912, *(*uintptr)(unsafe.Pointer(&struct { 41413 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41414 }{writeCrashObjCmd})), uintptr(0), uintptr(0)) 41415 tcl.XTcl_CreateObjCommand(tls, interp, ts+26935, *(*uintptr)(unsafe.Pointer(&struct { 41416 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41417 }{dsUnregisterObjCmd})), uintptr(0), uintptr(0)) 41418 tcl.XTcl_CreateObjCommand(tls, interp, ts+26953, *(*uintptr)(unsafe.Pointer(&struct { 41419 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41420 }{jtObjCmd})), uintptr(0), uintptr(0)) 41421 tcl.XTcl_CreateObjCommand(tls, interp, ts+26969, *(*uintptr)(unsafe.Pointer(&struct { 41422 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41423 }{jtUnregisterObjCmd})), uintptr(0), uintptr(0)) 41424 return TCL_OK 41425 } 41426 41427 type Thread1 = struct { 41428 FzFilename uintptr 41429 FxOp uintptr 41430 FzArg uintptr 41431 Fopnum int32 41432 Fbusy int32 41433 Fcompleted int32 41434 F__ccgo_pad1 [4]byte 41435 Fdb uintptr 41436 FpStmt uintptr 41437 FzErr uintptr 41438 FzStaticErr uintptr 41439 Frc int32 41440 Fargc int32 41441 Fargv [100]uintptr 41442 Fcolv [100]uintptr 41443 FnServer int32 41444 F__ccgo_pad2 [4]byte 41445 } 41446 41447 var threadset1 [26]Thread1 41448 41449 func client_main(tls *libc.TLS, pArg uintptr) uintptr { 41450 var p uintptr = pArg 41451 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 41452 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 41453 } 41454 sqlite3_client_open(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename, p+40) 41455 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) { 41456 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread1)(unsafe.Pointer(p)).Fdb)) 41457 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 41458 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 41459 } 41460 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41461 (*Thread1)(unsafe.Pointer(p)).Fcompleted = 1 41462 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 41463 libc.Xsched_yield(tls) 41464 } 41465 for (*Thread1)(unsafe.Pointer(p)).FxOp != 0 { 41466 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 41467 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 41468 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 41469 } 41470 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread1)(unsafe.Pointer(p)).FxOp})).f(tls, p) 41471 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 41472 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 41473 libc.Xsched_yield(tls) 41474 } 41475 } 41476 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 41477 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41478 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41479 } 41480 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 41481 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 41482 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 41483 } 41484 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 41485 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 41486 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 41487 } 41488 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 41489 sqlite3.Xsqlite3_thread_cleanup(tls) 41490 return uintptr(0) 41491 } 41492 41493 func parse_client_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 41494 bp := tls.Alloc(16) 41495 defer tls.Free(16) 41496 41497 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) { 41498 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 41499 return -1 41500 } 41501 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 41502 } 41503 41504 func tcl_client_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41505 bp := tls.Alloc(96) 41506 defer tls.Free(96) 41507 41508 var i int32 41509 41510 var rc int32 41511 41512 if argc != 3 { 41513 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41514 ts+25780, 0)) 41515 return TCL_ERROR 41516 } 41517 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41518 if i < 0 { 41519 return TCL_ERROR 41520 } 41521 if threadset1[i].Fbusy != 0 { 41522 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 41523 return TCL_ERROR 41524 } 41525 threadset1[i].Fbusy = 1 41526 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 41527 threadset1[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 41528 threadset1[i].Fopnum = 1 41529 threadset1[i].Fcompleted = 0 41530 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 41531 f func(*libc.TLS, uintptr) uintptr 41532 }{client_main})), uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41533 if rc != 0 { 41534 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 41535 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 41536 threadset1[i].Fbusy = 0 41537 return TCL_ERROR 41538 } 41539 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 41540 if threadset1[i].FnServer == 0 { 41541 threadset1[i].FnServer = 1 41542 sqlite3_server_start2(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688+1680) 41543 } 41544 return TCL_OK 41545 } 41546 41547 func client_wait(tls *libc.TLS, p uintptr) { 41548 for (*Thread1)(unsafe.Pointer(p)).Fopnum > (*Thread1)(unsafe.Pointer(p)).Fcompleted { 41549 libc.Xsched_yield(tls) 41550 } 41551 } 41552 41553 func tcl_client_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41554 bp := tls.Alloc(48) 41555 defer tls.Free(48) 41556 41557 var i int32 41558 41559 if argc != 2 { 41560 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41561 ts+25849, 0)) 41562 return TCL_ERROR 41563 } 41564 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41565 if i < 0 { 41566 return TCL_ERROR 41567 } 41568 if !(threadset1[i].Fbusy != 0) { 41569 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41570 return TCL_ERROR 41571 } 41572 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41573 return TCL_OK 41574 } 41575 41576 func stop_thread(tls *libc.TLS, p uintptr) { 41577 client_wait(tls, p) 41578 (*Thread1)(unsafe.Pointer(p)).FxOp = uintptr(0) 41579 (*Thread1)(unsafe.Pointer(p)).Fopnum++ 41580 client_wait(tls, p) 41581 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzArg) 41582 (*Thread1)(unsafe.Pointer(p)).FzArg = uintptr(0) 41583 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename) 41584 (*Thread1)(unsafe.Pointer(p)).FzFilename = uintptr(0) 41585 (*Thread1)(unsafe.Pointer(p)).Fbusy = 0 41586 } 41587 41588 func tcl_client_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41589 bp := tls.Alloc(48) 41590 defer tls.Free(48) 41591 41592 var i int32 41593 41594 if argc != 2 { 41595 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41596 ts+25849, 0)) 41597 return TCL_ERROR 41598 } 41599 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 41600 for i = 0; i < N_THREAD; i++ { 41601 if threadset1[i].Fbusy != 0 { 41602 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41603 } 41604 } 41605 } else { 41606 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41607 if i < 0 { 41608 return TCL_ERROR 41609 } 41610 if !(threadset1[i].Fbusy != 0) { 41611 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41612 return TCL_ERROR 41613 } 41614 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41615 } 41616 41617 for i = 0; i < N_THREAD && threadset1[i].Fbusy == 0; i++ { 41618 } 41619 if i >= N_THREAD { 41620 sqlite3_server_stop(tls) 41621 for 1 != 0 { 41622 for i = 0; i < N_THREAD && threadset1[i].FnServer == 0; i++ { 41623 } 41624 if i == N_THREAD { 41625 break 41626 } 41627 libc.Xsched_yield(tls) 41628 } 41629 } 41630 return TCL_OK 41631 } 41632 41633 func tcl_client_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41634 bp := tls.Alloc(172) 41635 defer tls.Free(172) 41636 41637 var i int32 41638 41639 if argc != 2 { 41640 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41641 ts+25849, 0)) 41642 return TCL_ERROR 41643 } 41644 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41645 if i < 0 { 41646 return TCL_ERROR 41647 } 41648 if !(threadset1[i].Fbusy != 0) { 41649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41650 return TCL_ERROR 41651 } 41652 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41653 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset1[i].Fargc)) 41654 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 41655 return TCL_OK 41656 } 41657 41658 func tcl_client_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41659 bp := tls.Alloc(84) 41660 defer tls.Free(84) 41661 41662 var i int32 41663 41664 if argc != 3 { 41665 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41666 ts+25868, 0)) 41667 return TCL_ERROR 41668 } 41669 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41670 if i < 0 { 41671 return TCL_ERROR 41672 } 41673 if !(threadset1[i].Fbusy != 0) { 41674 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41675 return TCL_ERROR 41676 } 41677 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 41678 return TCL_ERROR 41679 } 41680 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41681 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 41682 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 41683 return TCL_ERROR 41684 } 41685 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)) 41686 return TCL_OK 41687 } 41688 41689 func tcl_client_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41690 bp := tls.Alloc(84) 41691 defer tls.Free(84) 41692 41693 var i int32 41694 41695 if argc != 3 { 41696 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41697 ts+25868, 0)) 41698 return TCL_ERROR 41699 } 41700 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41701 if i < 0 { 41702 return TCL_ERROR 41703 } 41704 if !(threadset1[i].Fbusy != 0) { 41705 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41706 return TCL_ERROR 41707 } 41708 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 41709 return TCL_ERROR 41710 } 41711 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41712 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 41713 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 41714 return TCL_ERROR 41715 } 41716 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)) 41717 return TCL_OK 41718 } 41719 41720 func tcl_client_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41721 bp := tls.Alloc(64) 41722 defer tls.Free(64) 41723 41724 var i int32 41725 var zName uintptr 41726 41727 if argc != 2 { 41728 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41729 ts+25849, 0)) 41730 return TCL_ERROR 41731 } 41732 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41733 if i < 0 { 41734 return TCL_ERROR 41735 } 41736 if !(threadset1[i].Fbusy != 0) { 41737 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41738 return TCL_ERROR 41739 } 41740 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41741 zName = sqlite3.Xsqlite3ErrName(tls, threadset1[i].Frc) 41742 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 41743 return TCL_OK 41744 } 41745 41746 func tcl_client_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41747 bp := tls.Alloc(64) 41748 defer tls.Free(64) 41749 41750 var i int32 41751 41752 if argc != 2 { 41753 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41754 ts+25849, 0)) 41755 return TCL_ERROR 41756 } 41757 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41758 if i < 0 { 41759 return TCL_ERROR 41760 } 41761 if !(threadset1[i].Fbusy != 0) { 41762 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41763 return TCL_ERROR 41764 } 41765 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41766 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset1[i].FzErr, 0)) 41767 return TCL_OK 41768 } 41769 41770 func do_compile1(tls *libc.TLS, p uintptr) { 41771 if (*Thread1)(unsafe.Pointer(p)).Fdb == uintptr(0) { 41772 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 41773 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41774 return 41775 } 41776 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 41777 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41778 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41779 } 41780 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_prepare(tls, (*Thread1)(unsafe.Pointer(p)).Fdb, (*Thread1)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 41781 } 41782 41783 func tcl_client_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41784 bp := tls.Alloc(56) 41785 defer tls.Free(56) 41786 41787 var i int32 41788 if argc != 3 { 41789 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41790 ts+25921, 0)) 41791 return TCL_ERROR 41792 } 41793 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41794 if i < 0 { 41795 return TCL_ERROR 41796 } 41797 if !(threadset1[i].Fbusy != 0) { 41798 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41799 return TCL_ERROR 41800 } 41801 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41802 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile1})) 41803 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 41804 threadset1[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 41805 threadset1[i].Fopnum++ 41806 return TCL_OK 41807 } 41808 41809 func do_step1(tls *libc.TLS, p uintptr) { 41810 var i int32 41811 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41812 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41813 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41814 return 41815 } 41816 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_step(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41817 if (*Thread1)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 41818 (*Thread1)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41819 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt); i++ { 41820 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 41821 } 41822 for i = 0; i < (*Thread1)(unsafe.Pointer(p)).Fargc; i++ { 41823 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 41824 } 41825 } 41826 } 41827 41828 func tcl_client_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41829 bp := tls.Alloc(48) 41830 defer tls.Free(48) 41831 41832 var i int32 41833 if argc != 2 { 41834 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41835 ts+25958, 0)) 41836 return TCL_ERROR 41837 } 41838 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41839 if i < 0 { 41840 return TCL_ERROR 41841 } 41842 if !(threadset1[i].Fbusy != 0) { 41843 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41844 return TCL_ERROR 41845 } 41846 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41847 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step1})) 41848 threadset1[i].Fopnum++ 41849 return TCL_OK 41850 } 41851 41852 func do_finalize1(tls *libc.TLS, p uintptr) { 41853 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41854 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41855 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41856 return 41857 } 41858 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41859 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41860 } 41861 41862 func tcl_client_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41863 bp := tls.Alloc(48) 41864 defer tls.Free(48) 41865 41866 var i int32 41867 if argc != 2 { 41868 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41869 ts+25958, 0)) 41870 return TCL_ERROR 41871 } 41872 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41873 if i < 0 { 41874 return TCL_ERROR 41875 } 41876 if !(threadset1[i].Fbusy != 0) { 41877 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41878 return TCL_ERROR 41879 } 41880 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41881 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize1})) 41882 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 41883 threadset1[i].FzArg = uintptr(0) 41884 threadset1[i].Fopnum++ 41885 return TCL_OK 41886 } 41887 41888 func do_reset(tls *libc.TLS, p uintptr) { 41889 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41890 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41891 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41892 return 41893 } 41894 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_reset(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 41895 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41896 } 41897 41898 func tcl_client_reset(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41899 bp := tls.Alloc(48) 41900 defer tls.Free(48) 41901 41902 var i int32 41903 if argc != 2 { 41904 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41905 ts+25958, 0)) 41906 return TCL_ERROR 41907 } 41908 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41909 if i < 0 { 41910 return TCL_ERROR 41911 } 41912 if !(threadset1[i].Fbusy != 0) { 41913 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41914 return TCL_ERROR 41915 } 41916 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41917 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_reset})) 41918 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 41919 threadset1[i].FzArg = uintptr(0) 41920 threadset1[i].Fopnum++ 41921 return TCL_OK 41922 } 41923 41924 func tcl_client_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41925 bp := tls.Alloc(64) 41926 defer tls.Free(64) 41927 41928 var i int32 41929 var j int32 41930 var temp uintptr 41931 if argc != 3 { 41932 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41933 ts+25963, 0)) 41934 return TCL_ERROR 41935 } 41936 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41937 if i < 0 { 41938 return TCL_ERROR 41939 } 41940 if !(threadset1[i].Fbusy != 0) { 41941 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41942 return TCL_ERROR 41943 } 41944 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 41945 j = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 41946 if j < 0 { 41947 return TCL_ERROR 41948 } 41949 if !(threadset1[j].Fbusy != 0) { 41950 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 41951 return TCL_ERROR 41952 } 41953 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(j)*1688) 41954 temp = threadset1[i].Fdb 41955 threadset1[i].Fdb = threadset1[j].Fdb 41956 threadset1[j].Fdb = temp 41957 return TCL_OK 41958 } 41959 41960 func Sqlitetest7_Init(tls *libc.TLS, interp uintptr) int32 { 41961 var i int32 41962 41963 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd6))/uint64(unsafe.Sizeof(struct { 41964 FzName uintptr 41965 FxProc uintptr 41966 }{})); i++ { 41967 tcl.XTcl_CreateCommand(tls, interp, aCmd6[i].FzName, aCmd6[i].FxProc, uintptr(0), uintptr(0)) 41968 } 41969 return TCL_OK 41970 } 41971 41972 var aCmd6 = [13]struct { 41973 FzName uintptr 41974 FxProc uintptr 41975 }{ 41976 {FzName: ts + 26987, FxProc: 0}, 41977 {FzName: ts + 27001, FxProc: 0}, 41978 {FzName: ts + 27013, FxProc: 0}, 41979 {FzName: ts + 27025, FxProc: 0}, 41980 {FzName: ts + 27037, FxProc: 0}, 41981 {FzName: ts + 27049, FxProc: 0}, 41982 {FzName: ts + 27064, FxProc: 0}, 41983 {FzName: ts + 27078, FxProc: 0}, 41984 {FzName: ts + 27091, FxProc: 0}, 41985 {FzName: ts + 27106, FxProc: 0}, 41986 {FzName: ts + 27118, FxProc: 0}, 41987 {FzName: ts + 27131, FxProc: 0}, 41988 {FzName: ts + 27147, FxProc: 0}, 41989 } 41990 41991 type echo_vtab1 = struct { 41992 Fbase sqlite3_vtab 41993 Finterp uintptr 41994 Fdb uintptr 41995 FisPattern int32 41996 FinTransaction int32 41997 FzThis uintptr 41998 FzTableName uintptr 41999 FzLogName uintptr 42000 FnCol int32 42001 F__ccgo_pad1 [4]byte 42002 FaIndex uintptr 42003 FaCol uintptr 42004 } 42005 42006 type echo_vtab = echo_vtab1 42007 type echo_cursor1 = struct { 42008 Fbase sqlite3_vtab_cursor 42009 FpStmt uintptr 42010 } 42011 42012 type echo_cursor = echo_cursor1 42013 42014 func simulateVtabError(tls *libc.TLS, p uintptr, zMethod uintptr) int32 { 42015 bp := tls.Alloc(152) 42016 defer tls.Free(152) 42017 42018 var zErr uintptr 42019 42020 *(*int8)(unsafe.Pointer(bp + 24 + 127)) = int8(0) 42021 sqlite3.Xsqlite3_snprintf(tls, 127, bp+24, ts+27159, libc.VaList(bp, zMethod, (*echo_vtab)(unsafe.Pointer(p)).FzTableName)) 42022 zErr = tcl.XTcl_GetVar2(tls, (*echo_vtab)(unsafe.Pointer(p)).Finterp, bp+24, uintptr(0), TCL_GLOBAL_ONLY) 42023 if zErr != 0 { 42024 (*echo_vtab)(unsafe.Pointer(p)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+16, zErr)) 42025 } 42026 return libc.Bool32(zErr != uintptr(0)) 42027 } 42028 42029 func dequoteString(tls *libc.TLS, z uintptr) { 42030 var quote int32 42031 var i int32 42032 var j int32 42033 if z == uintptr(0) { 42034 return 42035 } 42036 quote = int32(*(*int8)(unsafe.Pointer(z))) 42037 switch quote { 42038 case '\'': 42039 break 42040 case '"': 42041 break 42042 case '`': 42043 break 42044 case '[': 42045 quote = ']' 42046 break 42047 default: 42048 return 42049 } 42050 i = 1 42051 j = 0 42052 for ; *(*int8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 42053 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == quote { 42054 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i+1)))) == quote { 42055 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(quote) 42056 i++ 42057 } else { 42058 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(0) 42059 break 42060 } 42061 } else { 42062 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 42063 } 42064 } 42065 } 42066 42067 func getColumnNames(tls *libc.TLS, db uintptr, zTab uintptr, paCol uintptr, pnCol uintptr) int32 { 42068 bp := tls.Alloc(24) 42069 defer tls.Free(24) 42070 42071 var aCol uintptr 42072 var zSql uintptr 42073 42074 var rc int32 42075 var nCol int32 42076 var zName uintptr 42077 var ii int32 42078 var nBytes int32 42079 var zSpace uintptr 42080 aCol = uintptr(0) 42081 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42082 rc = SQLITE_OK 42083 nCol = 0 42084 42085 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27203, libc.VaList(bp, zTab)) 42086 if !!(zSql != 0) { 42087 goto __1 42088 } 42089 rc = SQLITE_NOMEM 42090 goto out 42091 __1: 42092 ; 42093 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42094 sqlite3.Xsqlite3_free(tls, zSql) 42095 42096 if !(rc == SQLITE_OK) { 42097 goto __2 42098 } 42099 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42100 42101 nBytes = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(nCol)) 42102 ii = 0 42103 __3: 42104 if !(ii < nCol) { 42105 goto __5 42106 } 42107 zName = sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii) 42108 if !!(zName != 0) { 42109 goto __6 42110 } 42111 rc = SQLITE_NOMEM 42112 goto out 42113 __6: 42114 ; 42115 nBytes = nBytes + (int32(libc.Xstrlen(tls, zName)) + 1) 42116 goto __4 42117 __4: 42118 ii++ 42119 goto __3 42120 goto __5 42121 __5: 42122 ; 42123 aCol = sqlite3.Xsqlite3MallocZero(tls, uint64(nBytes)) 42124 if !!(aCol != 0) { 42125 goto __7 42126 } 42127 rc = SQLITE_NOMEM 42128 goto out 42129 __7: 42130 ; 42131 zSpace = aCol + uintptr(nCol)*8 42132 ii = 0 42133 __8: 42134 if !(ii < nCol) { 42135 goto __10 42136 } 42137 *(*uintptr)(unsafe.Pointer(aCol + uintptr(ii)*8)) = zSpace 42138 sqlite3.Xsqlite3_snprintf(tls, nBytes, zSpace, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii))) 42139 zSpace += uintptr(int32(libc.Xstrlen(tls, zSpace)) + 1) 42140 goto __9 42141 __9: 42142 ii++ 42143 goto __8 42144 goto __10 42145 __10: 42146 ; 42147 __2: 42148 ; 42149 *(*uintptr)(unsafe.Pointer(paCol)) = aCol 42150 *(*int32)(unsafe.Pointer(pnCol)) = nCol 42151 42152 out: 42153 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42154 return rc 42155 } 42156 42157 func getIndexArray(tls *libc.TLS, db uintptr, zTab uintptr, nCol int32, paIndex uintptr) int32 { 42158 bp := tls.Alloc(32) 42159 defer tls.Free(32) 42160 42161 var aIndex uintptr 42162 var rc int32 42163 var zSql uintptr 42164 var cid int32 42165 var zIdx uintptr 42166 42167 var rc2 int32 42168 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42169 aIndex = uintptr(0) 42170 42171 aIndex = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(nCol)) 42172 if !!(aIndex != 0) { 42173 goto __1 42174 } 42175 rc = SQLITE_NOMEM 42176 goto get_index_array_out 42177 __1: 42178 ; 42179 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27220, libc.VaList(bp, zTab)) 42180 if !!(zSql != 0) { 42181 goto __2 42182 } 42183 rc = SQLITE_NOMEM 42184 goto get_index_array_out 42185 __2: 42186 ; 42187 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42188 sqlite3.Xsqlite3_free(tls, zSql) 42189 42190 __3: 42191 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW) { 42192 goto __4 42193 } 42194 zIdx = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 42195 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 42196 if !(zIdx == uintptr(0)) { 42197 goto __5 42198 } 42199 goto __3 42200 __5: 42201 ; 42202 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27242, libc.VaList(bp+8, zIdx)) 42203 if !!(zSql != 0) { 42204 goto __6 42205 } 42206 rc = SQLITE_NOMEM 42207 goto get_index_array_out 42208 __6: 42209 ; 42210 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+24, uintptr(0)) 42211 sqlite3.Xsqlite3_free(tls, zSql) 42212 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW) { 42213 goto __7 42214 } 42215 cid = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 42216 42217 *(*int32)(unsafe.Pointer(aIndex + uintptr(cid)*4)) = 1 42218 __7: 42219 ; 42220 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0) { 42221 goto __8 42222 } 42223 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 42224 __8: 42225 ; 42226 if !(rc != SQLITE_OK) { 42227 goto __9 42228 } 42229 goto get_index_array_out 42230 __9: 42231 ; 42232 goto __3 42233 __4: 42234 ; 42235 get_index_array_out: 42236 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { 42237 goto __10 42238 } 42239 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42240 if !(rc == SQLITE_OK) { 42241 goto __11 42242 } 42243 rc = rc2 42244 __11: 42245 ; 42246 __10: 42247 ; 42248 if !(rc != SQLITE_OK) { 42249 goto __12 42250 } 42251 sqlite3.Xsqlite3_free(tls, aIndex) 42252 aIndex = uintptr(0) 42253 __12: 42254 ; 42255 *(*uintptr)(unsafe.Pointer(paIndex)) = aIndex 42256 return rc 42257 } 42258 42259 func appendToEchoModule(tls *libc.TLS, interp uintptr, zArg uintptr) { 42260 var flags int32 = TCL_APPEND_VALUE | TCL_LIST_ELEMENT | TCL_GLOBAL_ONLY 42261 tcl.XTcl_SetVar2(tls, interp, ts+27264, uintptr(0), func() uintptr { 42262 if zArg != 0 { 42263 return zArg 42264 } 42265 return ts + 584 42266 }(), flags) 42267 } 42268 42269 func echoDeclareVtab(tls *libc.TLS, pVtab uintptr, db uintptr) int32 { 42270 bp := tls.Alloc(8) 42271 defer tls.Free(8) 42272 42273 var rc int32 = SQLITE_OK 42274 42275 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 { 42276 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 42277 rc = sqlite3.Xsqlite3_prepare(tls, db, 42278 ts+27276, 42279 -1, bp, uintptr(0)) 42280 if rc == SQLITE_OK { 42281 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, -1, uintptr(0)) 42282 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) == SQLITE_ROW { 42283 var rc2 int32 42284 var zCreateTable uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 42285 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 42286 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 42287 if rc == SQLITE_OK { 42288 rc = rc2 42289 } 42290 } else { 42291 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 42292 if rc == SQLITE_OK { 42293 rc = SQLITE_ERROR 42294 } 42295 } 42296 if rc == SQLITE_OK { 42297 rc = getColumnNames(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, pVtab+88, pVtab+72) 42298 } 42299 if rc == SQLITE_OK { 42300 rc = getIndexArray(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, (*echo_vtab)(unsafe.Pointer(pVtab)).FnCol, pVtab+80) 42301 } 42302 } 42303 } 42304 42305 return rc 42306 } 42307 42308 func echoDestructor(tls *libc.TLS, pVtab uintptr) int32 { 42309 var p uintptr = pVtab 42310 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaIndex) 42311 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaCol) 42312 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis) 42313 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzTableName) 42314 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzLogName) 42315 sqlite3.Xsqlite3_free(tls, p) 42316 return 0 42317 } 42318 42319 type EchoModule1 = struct { 42320 Finterp uintptr 42321 Fdb uintptr 42322 } 42323 42324 type EchoModule = EchoModule1 42325 42326 func echoConstructor(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42327 bp := tls.Alloc(32) 42328 defer tls.Free(32) 42329 42330 var rc int32 42331 var i int32 42332 var pVtab uintptr 42333 42334 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_vtab{}))) 42335 if !(pVtab != 0) { 42336 return SQLITE_NOMEM 42337 } 42338 (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp = (*EchoModule)(unsafe.Pointer(pAux)).Finterp 42339 (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb = db 42340 42341 (*echo_vtab)(unsafe.Pointer(pVtab)).FzThis = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42342 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzThis) != 0) { 42343 echoDestructor(tls, pVtab) 42344 return SQLITE_NOMEM 42345 } 42346 42347 if argc > 3 { 42348 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 42349 dequoteString(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 42350 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 && int32(*(*int8)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName))) == '*' { 42351 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)) 42352 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 42353 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = z 42354 (*echo_vtab)(unsafe.Pointer(pVtab)).FisPattern = 1 42355 } 42356 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) != 0) { 42357 echoDestructor(tls, pVtab) 42358 return SQLITE_NOMEM 42359 } 42360 } 42361 42362 for i = 0; i < argc; i++ { 42363 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 42364 } 42365 42366 rc = echoDeclareVtab(tls, pVtab, db) 42367 if rc != SQLITE_OK { 42368 echoDestructor(tls, pVtab) 42369 return rc 42370 } 42371 42372 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 42373 return SQLITE_OK 42374 } 42375 42376 func echoCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42377 bp := tls.Alloc(24) 42378 defer tls.Free(24) 42379 42380 var rc int32 = SQLITE_OK 42381 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27345) 42382 rc = echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 42383 42384 if rc == SQLITE_OK && argc == 5 { 42385 var zSql uintptr 42386 var pVtab uintptr = *(*uintptr)(unsafe.Pointer(ppVtab)) 42387 (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) 42388 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27353, libc.VaList(bp+8, (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName)) 42389 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 42390 sqlite3.Xsqlite3_free(tls, zSql) 42391 if rc != SQLITE_OK { 42392 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, sqlite3.Xsqlite3_errmsg(tls, db))) 42393 } 42394 } 42395 42396 if *(*uintptr)(unsafe.Pointer(ppVtab)) != 0 && rc != SQLITE_OK { 42397 echoDestructor(tls, *(*uintptr)(unsafe.Pointer(ppVtab))) 42398 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 42399 } 42400 42401 if rc == SQLITE_OK { 42402 (*echo_vtab)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppVtab)))).FinTransaction = 1 42403 } 42404 42405 return rc 42406 } 42407 42408 func echoConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42409 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27377) 42410 return echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 42411 } 42412 42413 func echoDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 42414 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27386) 42415 return echoDestructor(tls, pVtab) 42416 } 42417 42418 func echoDestroy(tls *libc.TLS, pVtab uintptr) int32 { 42419 bp := tls.Alloc(8) 42420 defer tls.Free(8) 42421 42422 var rc int32 = SQLITE_OK 42423 var p uintptr = pVtab 42424 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27398) 42425 42426 if p != 0 && (*echo_vtab)(unsafe.Pointer(p)).FzLogName != 0 { 42427 var zSql uintptr 42428 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27407, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzLogName)) 42429 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 42430 sqlite3.Xsqlite3_free(tls, zSql) 42431 } 42432 42433 if rc == SQLITE_OK { 42434 rc = echoDestructor(tls, pVtab) 42435 } 42436 return rc 42437 } 42438 42439 func echoOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 42440 var pCur uintptr 42441 if simulateVtabError(tls, pVTab, ts+27421) != 0 { 42442 return SQLITE_ERROR 42443 } 42444 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_cursor{}))) 42445 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 42446 return func() int32 { 42447 if pCur != 0 { 42448 return SQLITE_OK 42449 } 42450 return SQLITE_NOMEM 42451 }() 42452 } 42453 42454 func echoClose(tls *libc.TLS, cur uintptr) int32 { 42455 var rc int32 42456 var pCur uintptr = cur 42457 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt 42458 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 42459 sqlite3.Xsqlite3_free(tls, pCur) 42460 rc = sqlite3.Xsqlite3_finalize(tls, pStmt) 42461 return rc 42462 } 42463 42464 func echoEof(tls *libc.TLS, cur uintptr) int32 { 42465 return func() int32 { 42466 if (*echo_cursor)(unsafe.Pointer(cur)).FpStmt != 0 { 42467 return 0 42468 } 42469 return 1 42470 }() 42471 } 42472 42473 func echoNext(tls *libc.TLS, cur uintptr) int32 { 42474 var rc int32 = SQLITE_OK 42475 var pCur uintptr = cur 42476 42477 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27427) != 0 { 42478 return SQLITE_ERROR 42479 } 42480 42481 if (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt != 0 { 42482 rc = sqlite3.Xsqlite3_step(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 42483 if rc == SQLITE_ROW { 42484 rc = SQLITE_OK 42485 } else { 42486 rc = sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 42487 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 42488 } 42489 } 42490 42491 return rc 42492 } 42493 42494 func echoColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 42495 var iCol int32 = i + 1 42496 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 42497 42498 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27433) != 0 { 42499 return SQLITE_ERROR 42500 } 42501 42502 if !(pStmt != 0) { 42503 sqlite3.Xsqlite3_result_null(tls, ctx) 42504 } else { 42505 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, pStmt, iCol)) 42506 } 42507 return SQLITE_OK 42508 } 42509 42510 func echoRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 42511 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 42512 42513 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+2304) != 0 { 42514 return SQLITE_ERROR 42515 } 42516 42517 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 42518 return SQLITE_OK 42519 } 42520 42521 func hashString(tls *libc.TLS, zString uintptr) int32 { 42522 var val u32 = u32(0) 42523 var ii int32 42524 for ii = 0; *(*int8)(unsafe.Pointer(zString + uintptr(ii))) != 0; ii++ { 42525 val = val<<3 + u32(int32(*(*int8)(unsafe.Pointer(zString + uintptr(ii))))) 42526 } 42527 return int32(val & u32(0x7fffffff)) 42528 } 42529 42530 func echoFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 42531 var rc int32 42532 var i int32 42533 42534 var pCur uintptr = pVtabCursor 42535 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 42536 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 42537 42538 if simulateVtabError(tls, pVtab, ts+27441) != 0 { 42539 return SQLITE_ERROR 42540 } 42541 42542 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27441) 42543 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, idxStr) 42544 for i = 0; i < argc; i++ { 42545 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 42546 } 42547 42548 sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 42549 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 42550 42551 rc = sqlite3.Xsqlite3_prepare(tls, db, idxStr, -1, pCur+8, uintptr(0)) 42552 42553 for i = 0; rc == SQLITE_OK && i < argc; i++ { 42554 rc = sqlite3.Xsqlite3_bind_value(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt, i+1, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 42555 } 42556 42557 if rc == SQLITE_OK { 42558 rc = echoNext(tls, pVtabCursor) 42559 } 42560 42561 return rc 42562 } 42563 42564 func string_concat(tls *libc.TLS, pzStr uintptr, zAppend uintptr, doFree int32, pRc uintptr) { 42565 bp := tls.Alloc(24) 42566 defer tls.Free(24) 42567 42568 var zIn uintptr = *(*uintptr)(unsafe.Pointer(pzStr)) 42569 if !(zAppend != 0) && doFree != 0 && *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 42570 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 42571 } 42572 if *(*int32)(unsafe.Pointer(pRc)) != SQLITE_OK { 42573 sqlite3.Xsqlite3_free(tls, zIn) 42574 zIn = uintptr(0) 42575 } else { 42576 if zIn != 0 { 42577 var zTemp uintptr = zIn 42578 zIn = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp, zIn, zAppend)) 42579 sqlite3.Xsqlite3_free(tls, zTemp) 42580 } else { 42581 zIn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zAppend)) 42582 } 42583 if !(zIn != 0) { 42584 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 42585 } 42586 } 42587 *(*uintptr)(unsafe.Pointer(pzStr)) = zIn 42588 if doFree != 0 { 42589 sqlite3.Xsqlite3_free(tls, zAppend) 42590 } 42591 } 42592 42593 func echoSelectList(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) uintptr { 42594 bp := tls.Alloc(24) 42595 defer tls.Free(24) 42596 42597 var zRet uintptr = uintptr(0) 42598 if sqlite3.Xsqlite3_libversion_number(tls) < 3010000 { 42599 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27449, 0) 42600 } else { 42601 var i int32 42602 for i = 0; i < (*echo_vtab)(unsafe.Pointer(pTab)).FnCol; i++ { 42603 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed&(uint64(1)<<func() int32 { 42604 if i >= 63 { 42605 return 63 42606 } 42607 return i 42608 }()) != 0 { 42609 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27453, libc.VaList(bp, zRet, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pTab)).FaCol + uintptr(i)*8)))) 42610 } else { 42611 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27460, libc.VaList(bp+16, zRet)) 42612 } 42613 if !(zRet != 0) { 42614 break 42615 } 42616 } 42617 } 42618 return zRet 42619 } 42620 42621 func echoBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 42622 bp := tls.Alloc(100) 42623 defer tls.Free(100) 42624 42625 var ii int32 42626 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 42627 var zCol uintptr = uintptr(0) 42628 var zNew uintptr 42629 var nArg int32 = 0 42630 var zSep uintptr = ts + 9392 42631 var pVtab uintptr = tab 42632 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 42633 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 42634 42635 var nRow int32 = 0 42636 var useIdx int32 = 0 42637 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 42638 var useCost int32 = 0 42639 var cost float64 = float64(0) 42640 var isIgnoreUsable int32 = 0 42641 if tcl.XTcl_GetVar2(tls, interp, ts+27469, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 42642 isIgnoreUsable = 1 42643 } 42644 42645 if simulateVtabError(tls, pVtab, ts+27495) != 0 { 42646 return SQLITE_ERROR 42647 } 42648 42649 if tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 42650 cost = libc.Xatof(tls, tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY)) 42651 useCost = 1 42652 } else { 42653 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27523, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42654 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 42655 return SQLITE_NOMEM 42656 } 42657 *(*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)) 42658 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 42659 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 42660 return *(*int32)(unsafe.Pointer(bp + 96)) 42661 } 42662 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 42663 nRow = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 42664 *(*int32)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 42665 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 42666 return *(*int32)(unsafe.Pointer(bp + 96)) 42667 } 42668 } 42669 42670 zCol = echoSelectList(tls, pVtab, pIdxInfo) 42671 if !(zCol != 0) { 42672 return SQLITE_NOMEM 42673 } 42674 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27547, libc.VaList(bp+8, zCol, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42675 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 42676 return SQLITE_NOMEM 42677 } 42678 42679 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 42680 var pConstraint uintptr 42681 var pUsage uintptr 42682 var iCol int32 42683 42684 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 42685 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 42686 42687 if !(isIgnoreUsable != 0) && !(int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) != 0) { 42688 continue 42689 } 42690 42691 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn 42692 if iCol < 0 || *(*int32)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaIndex + uintptr(iCol)*4)) != 0 { 42693 var zNewCol uintptr 42694 if iCol >= 0 { 42695 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 42696 } else { 42697 zNewCol = ts + 6427 42698 } 42699 var zOp uintptr = uintptr(0) 42700 useIdx = 1 42701 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) { 42702 case SQLITE_INDEX_CONSTRAINT_EQ: 42703 zOp = ts + 27570 42704 break 42705 fallthrough 42706 case SQLITE_INDEX_CONSTRAINT_LT: 42707 zOp = ts + 27572 42708 break 42709 fallthrough 42710 case SQLITE_INDEX_CONSTRAINT_GT: 42711 zOp = ts + 27574 42712 break 42713 fallthrough 42714 case SQLITE_INDEX_CONSTRAINT_LE: 42715 zOp = ts + 27576 42716 break 42717 fallthrough 42718 case SQLITE_INDEX_CONSTRAINT_GE: 42719 zOp = ts + 27579 42720 break 42721 fallthrough 42722 case SQLITE_INDEX_CONSTRAINT_MATCH: 42723 zOp = ts + 27582 42724 break 42725 fallthrough 42726 case SQLITE_INDEX_CONSTRAINT_LIKE: 42727 zOp = ts + 27587 42728 break 42729 fallthrough 42730 case SQLITE_INDEX_CONSTRAINT_GLOB: 42731 zOp = ts + 27592 42732 break 42733 fallthrough 42734 case SQLITE_INDEX_CONSTRAINT_REGEXP: 42735 zOp = ts + 6831 42736 break 42737 } 42738 if zOp != 0 { 42739 if int32(*(*int8)(unsafe.Pointer(zOp))) == 'L' { 42740 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27597, 42741 libc.VaList(bp+24, zSep, zNewCol)) 42742 } else { 42743 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27632, libc.VaList(bp+40, zSep, zNewCol, zOp)) 42744 } 42745 string_concat(tls, bp+88, zNew, 1, bp+96) 42746 zSep = ts + 9419 42747 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&nArg, 1) 42748 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 42749 } 42750 } 42751 } 42752 42753 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) { 42754 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn 42755 var zNewCol uintptr 42756 if iCol >= 0 { 42757 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 42758 } else { 42759 zNewCol = ts + 6427 42760 } 42761 var zDir uintptr 42762 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 42763 zDir = ts + 27644 42764 } else { 42765 zDir = ts + 27649 42766 } 42767 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27653, libc.VaList(bp+64, zNewCol, zDir)) 42768 string_concat(tls, bp+88, zNew, 1, bp+96) 42769 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 42770 } 42771 42772 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27495) 42773 42774 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(bp + 88))) 42775 42776 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 42777 return *(*int32)(unsafe.Pointer(bp + 96)) 42778 } 42779 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = hashString(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 42780 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = *(*uintptr)(unsafe.Pointer(bp + 88)) 42781 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 42782 if useCost != 0 { 42783 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = cost 42784 } else if useIdx != 0 { 42785 for ii = 0; uint64(ii) < uint64(unsafe.Sizeof(int32(0)))*uint64(8)-uint64(1); ii++ { 42786 if nRow&(int32(1)<<ii) != 0 { 42787 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(ii) 42788 } 42789 } 42790 } else { 42791 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(nRow) 42792 } 42793 return *(*int32)(unsafe.Pointer(bp + 96)) 42794 } 42795 42796 func echoUpdate(tls *libc.TLS, tab uintptr, nData int32, apData uintptr, pRowid uintptr) int32 { 42797 bp := tls.Alloc(136) 42798 defer tls.Free(136) 42799 42800 var pVtab uintptr = tab 42801 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 42802 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 42803 42804 *(*uintptr)(unsafe.Pointer(bp + 128)) = uintptr(0) 42805 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 42806 var bindArgZero int32 = 0 42807 var bindArgOne int32 = 0 42808 var i int32 42809 42810 if simulateVtabError(tls, pVtab, ts+27669) != 0 { 42811 return SQLITE_ERROR 42812 } 42813 42814 if nData > 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 42815 var zSep uintptr = ts + 27677 42816 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27682, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42817 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 42818 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 42819 } 42820 42821 bindArgOne = libc.Bool32(*(*uintptr)(unsafe.Pointer(apData + 1*8)) != 0 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER) 42822 bindArgZero = 1 42823 42824 if bindArgOne != 0 { 42825 string_concat(tls, bp+96, ts+27692, 0, bp+104) 42826 zSep = ts + 4758 42827 } 42828 for i = 2; i < nData; i++ { 42829 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) == uintptr(0) { 42830 continue 42831 } 42832 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, 42833 ts+27707, libc.VaList(bp+8, zSep, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(i-2)*8)), i)), 1, bp+104) 42834 zSep = ts + 4758 42835 } 42836 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, ts+27717, libc.VaList(bp+32, nData)), 1, bp+104) 42837 } else if nData == 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 42838 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27734, libc.VaList(bp+40, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42839 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 42840 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 42841 } 42842 bindArgZero = 1 42843 } else if nData > 2 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_NULL { 42844 var ii int32 42845 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 42846 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 42847 42848 *(*uintptr)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_mprintf(tls, ts+27766, libc.VaList(bp+48, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42849 if !(*(*uintptr)(unsafe.Pointer(bp + 112)) != 0) { 42850 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 42851 } 42852 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER { 42853 bindArgOne = 1 42854 *(*uintptr)(unsafe.Pointer(bp + 120)) = sqlite3.Xsqlite3_mprintf(tls, ts+3405, 0) 42855 string_concat(tls, bp+112, ts+6427, 0, bp+104) 42856 } 42857 42858 for ii = 2; ii < nData; ii++ { 42859 string_concat(tls, bp+112, 42860 sqlite3.Xsqlite3_mprintf(tls, ts+27783, libc.VaList(bp+56, func() uintptr { 42861 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 42862 return ts + 97 42863 } 42864 return ts + 584 42865 }(), *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(ii-2)*8)))), 1, bp+104) 42866 string_concat(tls, bp+120, 42867 sqlite3.Xsqlite3_mprintf(tls, ts+27788, libc.VaList(bp+72, func() uintptr { 42868 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 42869 return ts + 97 42870 } 42871 return ts + 584 42872 }(), ii)), 1, bp+104) 42873 } 42874 42875 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 112)), 1, bp+104) 42876 string_concat(tls, bp+96, ts+27794, 0, bp+104) 42877 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 120)), 1, bp+104) 42878 string_concat(tls, bp+96, ts+585, 0, bp+104) 42879 } else { 42880 return SQLITE_ERROR 42881 } 42882 42883 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 42884 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_prepare(tls, db, *(*uintptr)(unsafe.Pointer(bp + 96)), -1, bp+128, uintptr(0)) 42885 } 42886 42887 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 96))) 42888 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 42889 if bindArgZero != 0 { 42890 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), nData, *(*uintptr)(unsafe.Pointer(apData))) 42891 } 42892 if bindArgOne != 0 { 42893 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), 1, *(*uintptr)(unsafe.Pointer(apData + 1*8))) 42894 } 42895 for i = 2; i < nData && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK; i++ { 42896 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) != 0 { 42897 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), i, *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8))) 42898 } 42899 } 42900 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 42901 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 42902 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 42903 } else { 42904 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 42905 } 42906 } 42907 42908 if pRowid != 0 && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 42909 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 42910 } 42911 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 42912 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+88, sqlite3.Xsqlite3_errmsg(tls, db))) 42913 } 42914 42915 return *(*int32)(unsafe.Pointer(bp + 104)) 42916 } 42917 42918 func echoTransactionCall(tls *libc.TLS, tab uintptr, zCall uintptr) int32 { 42919 bp := tls.Alloc(8) 42920 defer tls.Free(8) 42921 42922 var z uintptr 42923 var pVtab uintptr = tab 42924 z = sqlite3.Xsqlite3_mprintf(tls, ts+27804, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 42925 if z == uintptr(0) { 42926 return SQLITE_NOMEM 42927 } 42928 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, zCall) 42929 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, z) 42930 sqlite3.Xsqlite3_free(tls, z) 42931 return SQLITE_OK 42932 } 42933 42934 func echoBegin(tls *libc.TLS, tab uintptr) int32 { 42935 var rc int32 42936 var pVtab uintptr = tab 42937 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 42938 var zVal uintptr 42939 42940 if simulateVtabError(tls, pVtab, ts+27813) != 0 { 42941 return SQLITE_ERROR 42942 } 42943 42944 rc = echoTransactionCall(tls, tab, ts+27813) 42945 42946 if rc == SQLITE_OK { 42947 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27820, uintptr(0), TCL_GLOBAL_ONLY) 42948 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 42949 rc = SQLITE_ERROR 42950 } 42951 } 42952 if rc == SQLITE_OK { 42953 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 1 42954 } 42955 return rc 42956 } 42957 42958 func echoSync(tls *libc.TLS, tab uintptr) int32 { 42959 var rc int32 42960 var pVtab uintptr = tab 42961 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 42962 var zVal uintptr 42963 42964 if simulateVtabError(tls, pVtab, ts+27843) != 0 { 42965 return SQLITE_ERROR 42966 } 42967 42968 rc = echoTransactionCall(tls, tab, ts+27843) 42969 42970 if rc == SQLITE_OK { 42971 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27849, uintptr(0), TCL_GLOBAL_ONLY) 42972 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 42973 rc = -1 42974 } 42975 } 42976 return rc 42977 } 42978 42979 func echoCommit(tls *libc.TLS, tab uintptr) int32 { 42980 var pVtab uintptr = tab 42981 var rc int32 42982 42983 if simulateVtabError(tls, pVtab, ts+27871) != 0 { 42984 return SQLITE_ERROR 42985 } 42986 42987 sqlite3.Xsqlite3BeginBenignMalloc(tls) 42988 rc = echoTransactionCall(tls, tab, ts+27871) 42989 sqlite3.Xsqlite3EndBenignMalloc(tls) 42990 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 42991 return rc 42992 } 42993 42994 func echoRollback(tls *libc.TLS, tab uintptr) int32 { 42995 var rc int32 42996 var pVtab uintptr = tab 42997 42998 rc = echoTransactionCall(tls, tab, ts+27879) 42999 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 43000 return rc 43001 } 43002 43003 func overloadedGlobFunction(tls *libc.TLS, pContext uintptr, nArg int32, apArg uintptr) { 43004 bp := tls.Alloc(216) 43005 defer tls.Free(216) 43006 43007 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pContext) 43008 43009 var i int32 43010 var rc int32 43011 tcl.XTcl_DStringInit(tls, bp) 43012 tcl.XTcl_DStringAppendElement(tls, bp, ts+27889) 43013 for i = 0; i < nArg; i++ { 43014 tcl.XTcl_DStringAppendElement(tls, bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)))) 43015 } 43016 rc = tcl.XTcl_Eval(tls, interp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 43017 tcl.XTcl_DStringFree(tls, bp) 43018 if rc != 0 { 43019 sqlite3.Xsqlite3_result_error(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), -1) 43020 } else { 43021 sqlite3.Xsqlite3_result_text(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), 43022 -1, libc.UintptrFromInt32(-1)) 43023 } 43024 tcl.XTcl_ResetResult(tls, interp) 43025 } 43026 43027 func echoFindFunction(tls *libc.TLS, vtab uintptr, nArg int32, zFuncName uintptr, pxFunc uintptr, ppArg uintptr) int32 { 43028 bp := tls.Alloc(64) 43029 defer tls.Free(64) 43030 43031 var pVtab uintptr = vtab 43032 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43033 43034 if libc.Xstrcmp(tls, zFuncName, ts+27592) != 0 { 43035 return 0 43036 } 43037 if tcl.XTcl_GetCommandInfo(tls, interp, ts+27889, bp) == 0 { 43038 return 0 43039 } 43040 *(*uintptr)(unsafe.Pointer(pxFunc)) = *(*uintptr)(unsafe.Pointer(&struct { 43041 f func(*libc.TLS, uintptr, int32, uintptr) 43042 }{overloadedGlobFunction})) 43043 *(*uintptr)(unsafe.Pointer(ppArg)) = interp 43044 return 1 43045 } 43046 43047 func echoRename(tls *libc.TLS, vtab uintptr, zNewName uintptr) int32 { 43048 bp := tls.Alloc(24) 43049 defer tls.Free(24) 43050 43051 var rc int32 = SQLITE_OK 43052 var p uintptr = vtab 43053 43054 if simulateVtabError(tls, p, ts+27910) != 0 { 43055 return SQLITE_ERROR 43056 } 43057 43058 if (*echo_vtab)(unsafe.Pointer(p)).FisPattern != 0 { 43059 var nThis int32 = int32(libc.Xstrlen(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis)) 43060 var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27918, 43061 libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzTableName, zNewName, (*echo_vtab)(unsafe.Pointer(p)).FzTableName+uintptr(nThis))) 43062 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 43063 sqlite3.Xsqlite3_free(tls, zSql) 43064 } 43065 43066 return rc 43067 } 43068 43069 func echoSavepoint(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43070 return SQLITE_OK 43071 } 43072 43073 func echoRelease(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43074 return SQLITE_OK 43075 } 43076 43077 func echoRollbackTo(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43078 return SQLITE_OK 43079 } 43080 43081 var echoModule = sqlite3_module{ 43082 FiVersion: 1, 43083 FxCreate: 0, 43084 FxConnect: 0, 43085 FxBestIndex: 0, 43086 FxDisconnect: 0, 43087 FxDestroy: 0, 43088 FxOpen: 0, 43089 FxClose: 0, 43090 FxFilter: 0, 43091 FxNext: 0, 43092 FxEof: 0, 43093 FxColumn: 0, 43094 FxRowid: 0, 43095 FxUpdate: 0, 43096 FxBegin: 0, 43097 FxSync: 0, 43098 FxCommit: 0, 43099 FxRollback: 0, 43100 FxFindFunction: 0, 43101 FxRename: 0, 43102 } 43103 43104 var echoModuleV2 = sqlite3_module{ 43105 FiVersion: 2, 43106 FxCreate: 0, 43107 FxConnect: 0, 43108 FxBestIndex: 0, 43109 FxDisconnect: 0, 43110 FxDestroy: 0, 43111 FxOpen: 0, 43112 FxClose: 0, 43113 FxFilter: 0, 43114 FxNext: 0, 43115 FxEof: 0, 43116 FxColumn: 0, 43117 FxRowid: 0, 43118 FxUpdate: 0, 43119 FxBegin: 0, 43120 FxSync: 0, 43121 FxCommit: 0, 43122 FxRollback: 0, 43123 FxFindFunction: 0, 43124 FxRename: 0, 43125 FxSavepoint: 0, 43126 FxRelease: 0, 43127 FxRollbackTo: 0, 43128 } 43129 43130 func moduleDestroy(tls *libc.TLS, p uintptr) { 43131 var pMod uintptr = p 43132 sqlite3.Xsqlite3_create_function(tls, (*EchoModule)(unsafe.Pointer(pMod)).Fdb, ts+27948, 43133 SQLITE_ANY, 1, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 43134 sqlite3.Xsqlite3_free(tls, p) 43135 } 43136 43137 func register_echo_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43138 bp := tls.Alloc(8) 43139 defer tls.Free(8) 43140 43141 var rc int32 43142 43143 var pMod uintptr 43144 if objc != 2 { 43145 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 43146 return TCL_ERROR 43147 } 43148 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 43149 return TCL_ERROR 43150 } 43151 43152 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43153 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43154 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43155 rc = sqlite3.Xsqlite3_create_module_v2(tls, 43156 *(*uintptr)(unsafe.Pointer(bp)), ts+27986, uintptr(unsafe.Pointer(&echoModule)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43157 43158 if rc == SQLITE_OK { 43159 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43160 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43161 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43162 rc = sqlite3.Xsqlite3_create_module_v2(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+27991, 43163 uintptr(unsafe.Pointer(&echoModuleV2)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43164 } 43165 43166 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43167 return TCL_OK 43168 } 43169 43170 func declare_vtab(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43171 bp := tls.Alloc(8) 43172 defer tls.Free(8) 43173 43174 var rc int32 43175 if objc != 3 { 43176 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 43177 return TCL_ERROR 43178 } 43179 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 43180 return TCL_ERROR 43181 } 43182 rc = sqlite3.Xsqlite3_declare_vtab(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 43183 if rc != SQLITE_OK { 43184 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 43185 return TCL_ERROR 43186 } 43187 return TCL_OK 43188 } 43189 43190 func Sqlitetest8_Init(tls *libc.TLS, interp uintptr) int32 { 43191 var i int32 43192 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd2))/uint64(unsafe.Sizeof(struct { 43193 FzName uintptr 43194 FxProc uintptr 43195 FclientData uintptr 43196 }{})); i++ { 43197 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd2[i].FzName, 43198 aObjCmd2[i].FxProc, aObjCmd2[i].FclientData, uintptr(0)) 43199 } 43200 return TCL_OK 43201 } 43202 43203 var aObjCmd2 = [2]struct { 43204 FzName uintptr 43205 FxProc uintptr 43206 FclientData uintptr 43207 }{ 43208 {FzName: ts + 27999, FxProc: 0}, 43209 {FzName: ts + 28020, FxProc: 0}, 43210 } 43211 43212 func c_collation_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43213 bp := tls.Alloc(32) 43214 defer tls.Free(32) 43215 43216 var zErrFunction uintptr 43217 43218 var rc int32 43219 zErrFunction = ts + 28041 43220 if !(objc != 1) { 43221 goto __1 43222 } 43223 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43224 return TCL_ERROR 43225 __1: 43226 ; 43227 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 43228 if !(rc != SQLITE_OK) { 43229 goto __2 43230 } 43231 zErrFunction = ts + 21460 43232 goto error_out 43233 __2: 43234 ; 43235 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), ts+13402, 456, uintptr(0), uintptr(0)) 43236 if !(rc != SQLITE_MISUSE) { 43237 goto __3 43238 } 43239 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43240 zErrFunction = ts + 28045 43241 goto error_out 43242 __3: 43243 ; 43244 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43245 return TCL_OK 43246 43247 error_out: 43248 tcl.XTcl_ResetResult(tls, interp) 43249 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43250 return TCL_ERROR 43251 } 43252 43253 func c_realloc_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43254 bp := tls.Alloc(24) 43255 defer tls.Free(24) 43256 43257 var p uintptr 43258 var zErrFunction uintptr 43259 zErrFunction = ts + 28041 43260 43261 if !(objc != 1) { 43262 goto __1 43263 } 43264 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43265 return TCL_ERROR 43266 __1: 43267 ; 43268 p = sqlite3.Xsqlite3_malloc(tls, 5) 43269 if !!(p != 0) { 43270 goto __2 43271 } 43272 zErrFunction = ts + 28095 43273 goto error_out 43274 __2: 43275 ; 43276 p = sqlite3.Xsqlite3_realloc(tls, p, -1) 43277 if !(p != 0) { 43278 goto __3 43279 } 43280 zErrFunction = ts + 28110 43281 goto error_out 43282 __3: 43283 ; 43284 return TCL_OK 43285 43286 error_out: 43287 tcl.XTcl_ResetResult(tls, interp) 43288 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43289 return TCL_ERROR 43290 } 43291 43292 func c_misuse_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43293 bp := tls.Alloc(40) 43294 defer tls.Free(40) 43295 43296 var zErrFunction uintptr 43297 43298 var rc int32 43299 zErrFunction = ts + 28041 43300 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 43301 43302 if !(objc != 1) { 43303 goto __1 43304 } 43305 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43306 return TCL_ERROR 43307 __1: 43308 ; 43309 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 43310 if !(rc != SQLITE_OK) { 43311 goto __2 43312 } 43313 zErrFunction = ts + 21460 43314 goto error_out 43315 __2: 43316 ; 43317 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43318 43319 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43320 if !(rc != SQLITE_MISUSE) { 43321 goto __3 43322 } 43323 zErrFunction = ts + 21366 43324 goto error_out 43325 __3: 43326 ; 43327 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43328 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43329 if !(rc != SQLITE_MISUSE) { 43330 goto __4 43331 } 43332 zErrFunction = ts + 21541 43333 goto error_out 43334 __4: 43335 ; 43336 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43337 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43338 if !(rc != SQLITE_MISUSE) { 43339 goto __5 43340 } 43341 zErrFunction = ts + 21575 43342 goto error_out 43343 __5: 43344 ; 43345 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43346 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43347 if !(rc != SQLITE_MISUSE) { 43348 goto __6 43349 } 43350 zErrFunction = ts + 21557 43351 goto error_out 43352 __6: 43353 ; 43354 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 43355 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 43356 if !(rc != SQLITE_MISUSE) { 43357 goto __7 43358 } 43359 zErrFunction = ts + 21637 43360 goto error_out 43361 __7: 43362 ; 43363 return TCL_OK 43364 43365 error_out: 43366 tcl.XTcl_ResetResult(tls, interp) 43367 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43368 return TCL_ERROR 43369 } 43370 43371 func Sqlitetest9_Init(tls *libc.TLS, interp uintptr) int32 { 43372 var i int32 43373 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd3))/uint64(unsafe.Sizeof(struct { 43374 FzName uintptr 43375 FxProc uintptr 43376 FclientData uintptr 43377 }{})); i++ { 43378 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd3[i].FzName, 43379 aObjCmd3[i].FxProc, aObjCmd3[i].FclientData, uintptr(0)) 43380 } 43381 return TCL_OK 43382 } 43383 43384 var aObjCmd3 = [3]struct { 43385 FzName uintptr 43386 FxProc uintptr 43387 FclientData uintptr 43388 }{ 43389 {FzName: ts + 28126, FxProc: 0}, 43390 {FzName: ts + 28140, FxProc: 0}, 43391 {FzName: ts + 28155, FxProc: 0}, 43392 } 43393 43394 func Sqlitetestasync_Init(tls *libc.TLS, interp uintptr) int32 { 43395 return TCL_OK 43396 } 43397 43398 func resetAutoExtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 43399 sqlite3.Xsqlite3_reset_auto_extension(tls) 43400 return SQLITE_OK 43401 } 43402 43403 func Sqlitetest_autoext_Init(tls *libc.TLS, interp uintptr) int32 { 43404 tcl.XTcl_CreateObjCommand(tls, interp, ts+28172, 43405 *(*uintptr)(unsafe.Pointer(&struct { 43406 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 43407 }{resetAutoExtObjCmd})), uintptr(0), uintptr(0)) 43408 return TCL_OK 43409 } 43410 43411 func backupTestCmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43412 bp := tls.Alloc(196) 43413 defer tls.Free(196) 43414 43415 *(*[5]BackupSubCommand)(unsafe.Pointer(bp)) = [5]BackupSubCommand{ 43416 {FzCmd: ts + 9485, FnArg: 1, FzArg: ts + 28201}, 43417 {FzCmd: ts + 28207, FeCmd: uint32(1), FzArg: ts + 584}, 43418 {FzCmd: ts + 28214, FeCmd: uint32(2), FzArg: ts + 584}, 43419 {FzCmd: ts + 28224, FeCmd: uint32(3), FzArg: ts + 584}, 43420 {}, 43421 } 43422 43423 var p uintptr = clientData 43424 43425 var rc int32 43426 43427 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 43428 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(BackupSubCommand{})), ts+11691, 0, bp+120) 43429 if rc != TCL_OK { 43430 return rc 43431 } 43432 if objc != 2+(*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FnArg { 43433 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FzArg) 43434 return TCL_ERROR 43435 } 43436 43437 switch (*BackupSubCommand)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FeCmd { 43438 case uint32(1): 43439 { 43440 var zCmdName uintptr 43441 43442 zCmdName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))) 43443 tcl.XTcl_GetCommandInfo(tls, interp, zCmdName, bp+128) 43444 (*Tcl_CmdInfo)(unsafe.Pointer(bp + 128)).FdeleteProc = uintptr(0) 43445 tcl.XTcl_SetCommandInfo(tls, interp, zCmdName, bp+128) 43446 tcl.XTcl_DeleteCommand(tls, interp, zCmdName) 43447 43448 rc = sqlite3.Xsqlite3_backup_finish(tls, p) 43449 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43450 break 43451 43452 } 43453 43454 case uint32(0): 43455 { 43456 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+192) { 43457 return TCL_ERROR 43458 } 43459 rc = sqlite3.Xsqlite3_backup_step(tls, p, *(*int32)(unsafe.Pointer(bp + 192))) 43460 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43461 break 43462 43463 } 43464 43465 case uint32(2): 43466 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_remaining(tls, p))) 43467 break 43468 43469 case uint32(3): 43470 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_pagecount(tls, p))) 43471 break 43472 } 43473 43474 return TCL_OK 43475 } 43476 43477 type BackupSubCommand = struct { 43478 FzCmd uintptr 43479 FeCmd uint32 43480 FnArg int32 43481 FzArg uintptr 43482 } 43483 43484 func backupTestFinish(tls *libc.TLS, clientData ClientData) { 43485 var pBackup uintptr = clientData 43486 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 43487 } 43488 43489 func backupTestInit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43490 bp := tls.Alloc(32) 43491 defer tls.Free(32) 43492 43493 var pBackup uintptr 43494 43495 var zDestName uintptr 43496 var zSrcName uintptr 43497 var zCmd uintptr 43498 43499 if objc != 6 { 43500 tcl.XTcl_WrongNumArgs(tls, 43501 interp, 1, objv, ts+28234) 43502 return TCL_ERROR 43503 } 43504 43505 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 43506 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+16) 43507 zDestName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 43508 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))), bp+24) 43509 zSrcName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 43510 43511 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDestName, *(*uintptr)(unsafe.Pointer(bp + 24)), zSrcName) 43512 if !(pBackup != 0) { 43513 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28280, 0)) 43514 return TCL_ERROR 43515 } 43516 43517 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 43518 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 43519 }{backupTestCmd})), pBackup, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{backupTestFinish}))) 43520 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 43521 return TCL_OK 43522 } 43523 43524 func Sqlitetestbackup_Init(tls *libc.TLS, interp uintptr) int32 { 43525 tcl.XTcl_CreateObjCommand(tls, interp, ts+28309, *(*uintptr)(unsafe.Pointer(&struct { 43526 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 43527 }{backupTestInit})), uintptr(0), uintptr(0)) 43528 return TCL_OK 43529 } 43530 43531 type tcl_vtab1 = struct { 43532 Fbase sqlite3_vtab 43533 Finterp uintptr 43534 FpCmd uintptr 43535 Fdb uintptr 43536 } 43537 43538 type tcl_vtab = tcl_vtab1 43539 type tcl_cursor1 = struct { 43540 Fbase sqlite3_vtab_cursor 43541 FpStmt uintptr 43542 } 43543 43544 type tcl_cursor = tcl_cursor1 43545 43546 func tclDequote(tls *libc.TLS, z uintptr) { 43547 var q int8 = *(*int8)(unsafe.Pointer(z)) 43548 43549 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 43550 var iIn int32 = 1 43551 var iOut int32 = 0 43552 if int32(q) == '[' { 43553 q = int8(']') 43554 } 43555 43556 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 43557 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 43558 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 43559 iIn++ 43560 break 43561 } else { 43562 iIn = iIn + 2 43563 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 43564 } 43565 } else { 43566 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 43567 } 43568 } 43569 43570 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 43571 } 43572 } 43573 43574 func tclConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43575 bp := tls.Alloc(8) 43576 defer tls.Free(8) 43577 43578 var interp uintptr = pAux 43579 var pTab uintptr = uintptr(0) 43580 var zCmd uintptr = uintptr(0) 43581 var pScript uintptr = uintptr(0) 43582 var rc int32 = SQLITE_OK 43583 43584 if argc != 4 { 43585 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 43586 return SQLITE_ERROR 43587 } 43588 43589 zCmd = sqlite3.Xsqlite3_malloc64(tls, libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 43590 pTab = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(tcl_vtab{}))) 43591 if zCmd != 0 && pTab != 0 { 43592 libc.Xmemcpy(tls, zCmd, *(*uintptr)(unsafe.Pointer(argv + 3*8)), libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 43593 tclDequote(tls, zCmd) 43594 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(tcl_vtab{}))) 43595 43596 (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd = tcl.XTcl_NewStringObj(tls, zCmd, -1) 43597 (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp = interp 43598 (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb = db 43599 (*Tcl_Obj)(unsafe.Pointer((*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd)).FrefCount++ 43600 43601 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 43602 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 43603 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27377, -1)) 43604 43605 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 43606 if rc != TCL_OK { 43607 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetStringResult(tls, interp))) 43608 rc = SQLITE_ERROR 43609 } else { 43610 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, tcl.XTcl_GetStringResult(tls, interp)) 43611 } 43612 43613 if rc != SQLITE_OK { 43614 sqlite3.Xsqlite3_free(tls, pTab) 43615 pTab = uintptr(0) 43616 } 43617 } else { 43618 rc = SQLITE_NOMEM 43619 } 43620 43621 sqlite3.Xsqlite3_free(tls, zCmd) 43622 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 43623 return rc 43624 } 43625 43626 func tclDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 43627 var pTab uintptr = pVtab 43628 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 43629 var _objPtr uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd 43630 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43631 tcl.XTclFreeObj(tls, _objPtr) 43632 } 43633 } 43634 sqlite3.Xsqlite3_free(tls, pTab) 43635 return SQLITE_OK 43636 } 43637 43638 func tclOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 43639 var pCur uintptr 43640 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(tcl_cursor{}))) 43641 if pCur == uintptr(0) { 43642 return SQLITE_NOMEM 43643 } 43644 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(tcl_cursor{}))) 43645 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 43646 return SQLITE_OK 43647 } 43648 43649 func tclClose(tls *libc.TLS, cur uintptr) int32 { 43650 var pCur uintptr = cur 43651 if pCur != 0 { 43652 sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCur)).FpStmt) 43653 sqlite3.Xsqlite3_free(tls, pCur) 43654 } 43655 return SQLITE_OK 43656 } 43657 43658 func tclNext(tls *libc.TLS, pVtabCursor uintptr) int32 { 43659 bp := tls.Alloc(8) 43660 defer tls.Free(8) 43661 43662 var pCsr uintptr = pVtabCursor 43663 if (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt != 0 { 43664 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 43665 var rc int32 = sqlite3.Xsqlite3_step(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 43666 if rc != SQLITE_ROW { 43667 var zErr uintptr 43668 rc = sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 43669 (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 43670 if rc != SQLITE_OK { 43671 zErr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 43672 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 43673 } 43674 } 43675 } 43676 return SQLITE_OK 43677 } 43678 43679 func tclFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 43680 bp := tls.Alloc(56) 43681 defer tls.Free(56) 43682 43683 var pCsr uintptr = pVtabCursor 43684 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 43685 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 43686 var pScript uintptr 43687 var pArg uintptr 43688 var ii int32 43689 var rc int32 43690 43691 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 43692 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 43693 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27441, -1)) 43694 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewIntObj(tls, idxNum)) 43695 if idxStr != 0 { 43696 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, idxStr, -1)) 43697 } else { 43698 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 43699 } 43700 43701 pArg = tcl.XTcl_NewObj(tls) 43702 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 43703 for ii = 0; ii < argc; ii++ { 43704 var zVal uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8))) 43705 var pVal uintptr 43706 if zVal == uintptr(0) { 43707 pVal = tcl.XTcl_NewObj(tls) 43708 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) { 43709 var pVal2 uintptr = uintptr(0) 43710 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 43711 if zVal != 0 { 43712 pVal2 = tcl.XTcl_NewStringObj(tls, zVal, -1) 43713 } else { 43714 pVal2 = tcl.XTcl_NewObj(tls) 43715 } 43716 tcl.XTcl_ListObjAppendElement(tls, interp, pVal, pVal2) 43717 } 43718 } else { 43719 pVal = tcl.XTcl_NewStringObj(tls, zVal, -1) 43720 } 43721 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pVal) 43722 } 43723 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pArg) 43724 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 43725 var _objPtr uintptr = pArg 43726 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43727 tcl.XTclFreeObj(tls, _objPtr) 43728 } 43729 } 43730 43731 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 43732 if rc != TCL_OK { 43733 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 43734 rc = SQLITE_ERROR 43735 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 43736 } else { 43737 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 43738 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 43739 43740 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+40, bp+48) 43741 if rc != TCL_OK { 43742 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 43743 rc = SQLITE_ERROR 43744 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 43745 } else { 43746 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 40)); ii = ii + 2 { 43747 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii)*8))) 43748 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii+1)*8)) 43749 if sqlite3.Xsqlite3_stricmp(tls, ts+1947, zCmd) == 0 { 43750 var zSql uintptr = tcl.XTcl_GetString(tls, p) 43751 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 43752 if rc != SQLITE_OK { 43753 var zErr uintptr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 43754 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+16, zErr)) 43755 } 43756 } else { 43757 rc = SQLITE_ERROR 43758 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+24, zCmd)) 43759 } 43760 } 43761 } 43762 } 43763 43764 if rc == SQLITE_OK { 43765 rc = tclNext(tls, pVtabCursor) 43766 } 43767 return rc 43768 } 43769 43770 func tclColumn(tls *libc.TLS, pVtabCursor uintptr, ctx uintptr, i int32) int32 { 43771 var pCsr uintptr = pVtabCursor 43772 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 43773 return SQLITE_OK 43774 } 43775 43776 func tclRowid(tls *libc.TLS, pVtabCursor uintptr, pRowid uintptr) int32 { 43777 var pCsr uintptr = pVtabCursor 43778 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, 0) 43779 return SQLITE_OK 43780 } 43781 43782 func tclEof(tls *libc.TLS, pVtabCursor uintptr) int32 { 43783 var pCsr uintptr = pVtabCursor 43784 return libc.Bool32((*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 43785 } 43786 43787 func testBestIndexObjConstraints(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 43788 var ii int32 43789 var pRes uintptr = tcl.XTcl_NewObj(tls) 43790 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 43791 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 43792 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 43793 var pElem uintptr = tcl.XTcl_NewObj(tls) 43794 var zOp uintptr = ts + 3405 43795 43796 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 43797 43798 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) { 43799 case SQLITE_INDEX_CONSTRAINT_EQ: 43800 zOp = ts + 28365 43801 break 43802 case SQLITE_INDEX_CONSTRAINT_GT: 43803 zOp = ts + 28368 43804 break 43805 case SQLITE_INDEX_CONSTRAINT_LE: 43806 zOp = ts + 28371 43807 break 43808 case SQLITE_INDEX_CONSTRAINT_LT: 43809 zOp = ts + 28374 43810 break 43811 case SQLITE_INDEX_CONSTRAINT_GE: 43812 zOp = ts + 28377 43813 break 43814 case SQLITE_INDEX_CONSTRAINT_MATCH: 43815 zOp = ts + 28380 43816 break 43817 case SQLITE_INDEX_CONSTRAINT_LIKE: 43818 zOp = ts + 27587 43819 break 43820 case SQLITE_INDEX_CONSTRAINT_GLOB: 43821 zOp = ts + 27592 43822 break 43823 case SQLITE_INDEX_CONSTRAINT_REGEXP: 43824 zOp = ts + 6831 43825 break 43826 case SQLITE_INDEX_CONSTRAINT_NE: 43827 zOp = ts + 28386 43828 break 43829 case SQLITE_INDEX_CONSTRAINT_ISNOT: 43830 zOp = ts + 28389 43831 break 43832 case SQLITE_INDEX_CONSTRAINT_ISNOTNULL: 43833 zOp = ts + 28395 43834 break 43835 case SQLITE_INDEX_CONSTRAINT_ISNULL: 43836 zOp = ts + 28405 43837 break 43838 case SQLITE_INDEX_CONSTRAINT_IS: 43839 zOp = ts + 5851 43840 break 43841 case SQLITE_INDEX_CONSTRAINT_LIMIT: 43842 zOp = ts + 28412 43843 break 43844 case SQLITE_INDEX_CONSTRAINT_OFFSET: 43845 zOp = ts + 28418 43846 break 43847 } 43848 43849 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+6194, -1)) 43850 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, zOp, -1)) 43851 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 43852 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)) 43853 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28432, -1)) 43854 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable))) 43855 43856 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 43857 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 43858 var _objPtr uintptr = pElem 43859 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43860 tcl.XTclFreeObj(tls, _objPtr) 43861 } 43862 } 43863 } 43864 43865 tcl.XTcl_SetObjResult(tls, interp, pRes) 43866 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 43867 var _objPtr uintptr = pRes 43868 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43869 tcl.XTclFreeObj(tls, _objPtr) 43870 } 43871 } 43872 } 43873 43874 func testBestIndexObjOrderby(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 43875 var ii int32 43876 var pRes uintptr = tcl.XTcl_NewObj(tls) 43877 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 43878 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; ii++ { 43879 var pOrder uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(ii)*8 43880 var pElem uintptr = tcl.XTcl_NewObj(tls) 43881 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 43882 43883 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 43884 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).FiColumn)) 43885 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28439, -1)) 43886 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).Fdesc))) 43887 43888 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 43889 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 43890 var _objPtr uintptr = pElem 43891 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43892 tcl.XTclFreeObj(tls, _objPtr) 43893 } 43894 } 43895 } 43896 43897 tcl.XTcl_SetObjResult(tls, interp, pRes) 43898 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 43899 var _objPtr uintptr = pRes 43900 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 43901 tcl.XTclFreeObj(tls, _objPtr) 43902 } 43903 } 43904 } 43905 43906 func testBestIndexObj(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43907 bp := tls.Alloc(80) 43908 defer tls.Free(80) 43909 43910 *(*[7]uintptr)(unsafe.Pointer(bp)) = [7]uintptr{ 43911 ts + 28444, 43912 ts + 28456, 43913 ts + 28464, 43914 ts + 28469, 43915 ts + 28478, 43916 ts + 28481, 43917 uintptr(0), 43918 } 43919 43920 var pIdxInfo uintptr = clientData 43921 43922 if objc < 2 { 43923 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 43924 return TCL_ERROR 43925 } 43926 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+56) != 0 { 43927 return TCL_ERROR 43928 } 43929 43930 if *(*int32)(unsafe.Pointer(bp + 56)) < 4 && objc != 2 { 43931 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 43932 return TCL_ERROR 43933 } 43934 if *(*int32)(unsafe.Pointer(bp + 56)) == 4 && objc != 4 { 43935 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28491) 43936 return TCL_ERROR 43937 } 43938 if *(*int32)(unsafe.Pointer(bp + 56)) == 5 && objc != 3 && objc != 4 { 43939 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28505) 43940 return TCL_ERROR 43941 } 43942 43943 switch *(*int32)(unsafe.Pointer(bp + 56)) { 43944 case 0: 43945 testBestIndexObjConstraints(tls, interp, pIdxInfo) 43946 break 43947 43948 case 1: 43949 testBestIndexObjOrderby(tls, interp, pIdxInfo) 43950 break 43951 43952 case 2: 43953 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 43954 break 43955 43956 case 3: 43957 { 43958 var bDistinct int32 = sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo) 43959 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bDistinct)) 43960 break 43961 43962 } 43963 43964 case 4: 43965 { 43966 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+60) != 0 || 43967 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 43968 return TCL_ERROR 43969 } 43970 tcl.XTcl_SetObjResult(tls, interp, 43971 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_vtab_in(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 60)), *(*int32)(unsafe.Pointer(bp + 64))))) 43972 break 43973 43974 } 43975 43976 case 5: 43977 { 43978 *(*int32)(unsafe.Pointer(bp + 68)) = 0 43979 var rc int32 43980 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 43981 var zVal uintptr = ts + 584 43982 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+68) != 0 { 43983 return TCL_ERROR 43984 } 43985 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 43986 if rc != SQLITE_OK && rc != SQLITE_NOTFOUND { 43987 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 43988 return TCL_ERROR 43989 } 43990 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 43991 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 43992 } else if objc == 4 { 43993 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 43994 } 43995 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zVal, -1)) 43996 break 43997 43998 } 43999 } 44000 44001 return TCL_OK 44002 } 44003 44004 func tclBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 44005 bp := tls.Alloc(108) 44006 defer tls.Free(108) 44007 44008 var pTab uintptr = tab 44009 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 44010 var rc int32 = SQLITE_OK 44011 44012 var pScript uintptr 44013 44014 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44015 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44016 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27495, -1)) 44017 44018 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([24]int8{})), bp+56, ts+28521, libc.VaList(bp, libc.PostIncInt32(&iNext, 1))) 44019 tcl.XTcl_CreateObjCommand(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(&struct { 44020 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44021 }{testBestIndexObj})), pIdxInfo, uintptr(0)) 44022 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+56, -1)) 44023 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44024 tcl.XTcl_DeleteCommand(tls, interp, bp+56) 44025 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44026 var _objPtr uintptr = pScript 44027 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44028 tcl.XTclFreeObj(tls, _objPtr) 44029 } 44030 } 44031 44032 if rc != TCL_OK { 44033 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44034 rc = SQLITE_ERROR 44035 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44036 } else { 44037 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44038 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 44039 44040 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) 44041 if rc != TCL_OK { 44042 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44043 rc = SQLITE_ERROR 44044 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zErr)) 44045 } else { 44046 var ii int32 44047 var iArgv int32 = 1 44048 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 80)); ii = ii + 2 { 44049 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii)*8))) 44050 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii+1)*8)) 44051 if sqlite3.Xsqlite3_stricmp(tls, ts+28533, zCmd) == 0 { 44052 rc = tcl.XTcl_GetDoubleFromObj(tls, interp, p, pIdxInfo+64) 44053 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28456, zCmd) == 0 { 44054 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+60) 44055 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28538, zCmd) == 0 { 44056 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+40) 44057 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28545, zCmd) == 0 { 44058 sqlite3.Xsqlite3_free(tls, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr) 44059 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+24, tcl.XTcl_GetString(tls, p))) 44060 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 44061 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28552, zCmd) == 0 { 44062 *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) = int64(0) 44063 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, p, bp+96) 44064 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = sqlite3_int64(tRowcnt(*(*Tcl_WideInt)(unsafe.Pointer(bp + 96)))) 44065 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28557, zCmd) == 0 || 44066 sqlite3.Xsqlite3_stricmp(tls, ts+28561, zCmd) == 0 { 44067 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, bp+104) 44068 if rc == SQLITE_OK { 44069 if *(*int32)(unsafe.Pointer(bp + 104)) < 0 || *(*int32)(unsafe.Pointer(bp + 104)) >= (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint { 44070 rc = SQLITE_ERROR 44071 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28566, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 104)))) 44072 } else { 44073 var bOmit int32 = libc.Bool32(int32(*(*int8)(unsafe.Pointer(zCmd))) == 'o' || int32(*(*int8)(unsafe.Pointer(zCmd))) == 'O') 44074 (*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) 44075 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).Fomit = uint8(bOmit) 44076 } 44077 } 44078 } else { 44079 rc = SQLITE_ERROR 44080 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+40, zCmd)) 44081 } 44082 if rc != SQLITE_OK && (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg == uintptr(0) { 44083 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44084 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, zErr)) 44085 } 44086 } 44087 } 44088 } 44089 44090 return rc 44091 } 44092 44093 var iNext int32 = 43 44094 44095 var tclModule = sqlite3_module{ 44096 FxCreate: 0, 44097 FxConnect: 0, 44098 FxBestIndex: 0, 44099 FxDisconnect: 0, 44100 FxDestroy: 0, 44101 FxOpen: 0, 44102 FxClose: 0, 44103 FxFilter: 0, 44104 FxNext: 0, 44105 FxEof: 0, 44106 FxColumn: 0, 44107 FxRowid: 0, 44108 } 44109 44110 func register_tcl_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44111 bp := tls.Alloc(8) 44112 defer tls.Free(8) 44113 44114 if objc != 2 { 44115 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 44116 return TCL_ERROR 44117 } 44118 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 44119 return TCL_ERROR 44120 } 44121 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+28581, uintptr(unsafe.Pointer(&tclModule)), interp) 44122 return TCL_OK 44123 } 44124 44125 func Sqlitetesttcl_Init(tls *libc.TLS, interp uintptr) int32 { 44126 var i int32 44127 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd4))/uint64(unsafe.Sizeof(struct { 44128 FzName uintptr 44129 FxProc uintptr 44130 FclientData uintptr 44131 }{})); i++ { 44132 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd4[i].FzName, 44133 aObjCmd4[i].FxProc, aObjCmd4[i].FclientData, uintptr(0)) 44134 } 44135 return TCL_OK 44136 } 44137 44138 var aObjCmd4 = [1]struct { 44139 FzName uintptr 44140 FxProc uintptr 44141 FclientData uintptr 44142 }{ 44143 {FzName: ts + 28585, FxProc: 0}, 44144 } 44145 44146 func ptrToText(tls *libc.TLS, p uintptr) uintptr { 44147 bp := tls.Alloc(8) 44148 defer tls.Free(8) 44149 44150 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof(buf))-uint64(1)), uintptr(unsafe.Pointer(&buf)), ts+9889, libc.VaList(bp, p)) 44151 return uintptr(unsafe.Pointer(&buf)) 44152 } 44153 44154 var buf [100]int8 44155 44156 func blobHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 44157 bp := tls.Alloc(8) 44158 defer tls.Free(8) 44159 44160 var z uintptr 44161 44162 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44163 if *(*int32)(unsafe.Pointer(bp)) == 0 { 44164 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 44165 } else if *(*int32)(unsafe.Pointer(bp)) > 9 && 0 == libc.Xmemcmp(tls, ts+28605, z, uint64(9)) { 44166 var channel Tcl_Channel 44167 var instanceData ClientData 44168 44169 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 44170 if !(channel != 0) { 44171 return TCL_ERROR 44172 } 44173 44174 tcl.XTcl_Flush(tls, channel) 44175 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 44176 44177 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 44178 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 44179 } else { 44180 *(*uintptr)(unsafe.Pointer(ppBlob)) = sqlite3TestTextToPtr(tls, z) 44181 } 44182 44183 return TCL_OK 44184 } 44185 44186 func blobStringFromObj(tls *libc.TLS, pObj uintptr) uintptr { 44187 bp := tls.Alloc(4) 44188 defer tls.Free(4) 44189 44190 var z uintptr 44191 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44192 return func() uintptr { 44193 if *(*int32)(unsafe.Pointer(bp)) != 0 { 44194 return z 44195 } 44196 return uintptr(0) 44197 }() 44198 } 44199 44200 func test_blob_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44201 bp := tls.Alloc(40) 44202 defer tls.Free(40) 44203 44204 var zDb uintptr 44205 var zTable uintptr 44206 var zColumn uintptr 44207 44208 var zVarname uintptr 44209 44210 *(*uintptr)(unsafe.Pointer(bp + 32)) = bp 44211 var rc int32 44212 44213 if objc != 8 { 44214 var zUsage uintptr = ts + 28615 44215 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zUsage) 44216 return TCL_ERROR 44217 } 44218 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 44219 return TCL_ERROR 44220 } 44221 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 44222 zTable = blobStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 44223 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 44224 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+16) != 0 { 44225 return TCL_ERROR 44226 } 44227 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp) != 0 { 44228 return TCL_ERROR 44229 } 44230 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 7*8)), bp+24) 44231 44232 if *(*int32)(unsafe.Pointer(bp + 24)) > 0 { 44233 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) 44234 tcl.XTcl_SetVar2(tls, interp, zVarname, uintptr(0), ptrToText(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0) 44235 } else { 44236 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)) 44237 } 44238 44239 if rc == SQLITE_OK { 44240 tcl.XTcl_ResetResult(tls, interp) 44241 } else { 44242 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44243 return TCL_ERROR 44244 } 44245 return TCL_OK 44246 } 44247 44248 func test_blob_close(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44249 bp := tls.Alloc(8) 44250 defer tls.Free(8) 44251 44252 var rc int32 44253 44254 if objc != 2 { 44255 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 44256 return TCL_ERROR 44257 } 44258 44259 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44260 return TCL_ERROR 44261 } 44262 rc = sqlite3.Xsqlite3_blob_close(tls, *(*uintptr)(unsafe.Pointer(bp))) 44263 44264 if rc != 0 { 44265 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44266 } else { 44267 tcl.XTcl_ResetResult(tls, interp) 44268 } 44269 return TCL_OK 44270 } 44271 44272 func test_blob_bytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44273 bp := tls.Alloc(8) 44274 defer tls.Free(8) 44275 44276 var nByte int32 44277 44278 if objc != 2 { 44279 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 44280 return TCL_ERROR 44281 } 44282 44283 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44284 return TCL_ERROR 44285 } 44286 nByte = sqlite3.Xsqlite3_blob_bytes(tls, *(*uintptr)(unsafe.Pointer(bp))) 44287 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nByte)) 44288 44289 return TCL_OK 44290 } 44291 44292 func test_blob_read(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44293 bp := tls.Alloc(32) 44294 defer tls.Free(32) 44295 44296 var zBuf uintptr = uintptr(0) 44297 var rc int32 44298 44299 if objc != 4 { 44300 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28667) 44301 return TCL_ERROR 44302 } 44303 44304 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 44305 return TCL_ERROR 44306 } 44307 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) || 44308 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) { 44309 return TCL_ERROR 44310 } 44311 44312 if *(*int32)(unsafe.Pointer(bp + 28)) > 0 { 44313 zBuf = tcl.XTcl_AttemptAlloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 44314 if zBuf == uintptr(0) { 44315 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28684, 0)) 44316 return TCL_ERROR 44317 } 44318 } 44319 rc = sqlite3.Xsqlite3_blob_read(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zBuf, *(*int32)(unsafe.Pointer(bp + 28)), *(*int32)(unsafe.Pointer(bp + 24))) 44320 if rc == SQLITE_OK { 44321 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zBuf, *(*int32)(unsafe.Pointer(bp + 28)))) 44322 } else { 44323 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44324 } 44325 tcl.XTcl_Free(tls, zBuf) 44326 44327 return func() int32 { 44328 if rc == SQLITE_OK { 44329 return TCL_OK 44330 } 44331 return TCL_ERROR 44332 }() 44333 } 44334 44335 func test_blob_write(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44336 bp := tls.Alloc(16) 44337 defer tls.Free(16) 44338 44339 var rc int32 44340 var zBuf uintptr 44341 44342 if objc != 4 && objc != 5 { 44343 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28745) 44344 return TCL_ERROR 44345 } 44346 44347 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44348 return TCL_ERROR 44349 } 44350 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) { 44351 return TCL_ERROR 44352 } 44353 44354 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) 44355 if objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+12) != 0 { 44356 return TCL_ERROR 44357 } 44358 rc = sqlite3.Xsqlite3_blob_write(tls, *(*uintptr)(unsafe.Pointer(bp)), zBuf, *(*int32)(unsafe.Pointer(bp + 12)), *(*int32)(unsafe.Pointer(bp + 8))) 44359 if rc != SQLITE_OK { 44360 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44361 } 44362 44363 return func() int32 { 44364 if rc == SQLITE_OK { 44365 return TCL_OK 44366 } 44367 return TCL_ERROR 44368 }() 44369 } 44370 44371 func Sqlitetest_blob_Init(tls *libc.TLS, interp uintptr) int32 { 44372 var i int32 44373 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd5))/uint64(unsafe.Sizeof(struct { 44374 FzName uintptr 44375 FxProc uintptr 44376 }{})); i++ { 44377 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd5[i].FzName, aObjCmd5[i].FxProc, uintptr(0), uintptr(0)) 44378 } 44379 return TCL_OK 44380 } 44381 44382 var aObjCmd5 = [5]struct { 44383 FzName uintptr 44384 FxProc uintptr 44385 }{ 44386 {FzName: ts + 28772, FxProc: 0}, 44387 {FzName: ts + 28790, FxProc: 0}, 44388 {FzName: ts + 28809, FxProc: 0}, 44389 {FzName: ts + 28828, FxProc: 0}, 44390 {FzName: ts + 28846, FxProc: 0}, 44391 } 44392 44393 func sqlite3BtreeSharedCacheReport(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44394 var pBt uintptr 44395 var pRet uintptr = tcl.XTcl_NewObj(tls) 44396 for pBt = sqlite3.Xsqlite3SharedCacheList; pBt != 0; pBt = (*BtShared)(unsafe.Pointer(pBt)).FpNext { 44397 var zFile uintptr = sqlite3.Xsqlite3PagerFilename(tls, (*BtShared)(unsafe.Pointer(pBt)).FpPager, 1) 44398 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, zFile, -1)) 44399 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, (*BtShared)(unsafe.Pointer(pBt)).FnRef)) 44400 } 44401 tcl.XTcl_SetObjResult(tls, interp, pRet) 44402 return TCL_OK 44403 } 44404 44405 func sqlite3BtreeCursorList(tls *libc.TLS, p uintptr) { 44406 } 44407 44408 func set_options(tls *libc.TLS, interp uintptr) { 44409 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28880, ts+14193, 44410 TCL_GLOBAL_ONLY) 44411 44412 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28899, ts+14193, TCL_GLOBAL_ONLY) 44413 44414 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28907, ts+14193, TCL_GLOBAL_ONLY) 44415 44416 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28925, ts+28938, TCL_GLOBAL_ONLY) 44417 44418 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28942, ts+28949, TCL_GLOBAL_ONLY) 44419 44420 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28951, ts+14193, TCL_GLOBAL_ONLY) 44421 44422 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28963, ts+14193, TCL_GLOBAL_ONLY) 44423 44424 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28969, ts+14193, TCL_GLOBAL_ONLY) 44425 44426 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28991, ts+14193, TCL_GLOBAL_ONLY) 44427 44428 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29003, ts+28949, TCL_GLOBAL_ONLY) 44429 44430 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29011, ts+28949, TCL_GLOBAL_ONLY) 44431 44432 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29015, ts+28949, TCL_GLOBAL_ONLY) 44433 44434 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29040, ts+14193, TCL_GLOBAL_ONLY) 44435 44436 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29045, 44437 ts+29060, TCL_GLOBAL_ONLY) 44438 44439 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29062, ts+14193, TCL_GLOBAL_ONLY) 44440 44441 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29071, ts+14193, TCL_GLOBAL_ONLY) 44442 44443 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29081, ts+14193, TCL_GLOBAL_ONLY) 44444 44445 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29093, ts+14193, TCL_GLOBAL_ONLY) 44446 44447 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13460, ts+28949, TCL_GLOBAL_ONLY) 44448 44449 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29107, ts+28949, TCL_GLOBAL_ONLY) 44450 44451 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29115, ts+14193, TCL_GLOBAL_ONLY) 44452 44453 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29120, ts+14193, TCL_GLOBAL_ONLY) 44454 44455 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29125, ts+28949, TCL_GLOBAL_ONLY) 44456 44457 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13580, ts+28949, TCL_GLOBAL_ONLY) 44458 44459 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29141, ts+28949, TCL_GLOBAL_ONLY) 44460 44461 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29150, ts+28949, TCL_GLOBAL_ONLY) 44462 44463 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29156, ts+28949, TCL_GLOBAL_ONLY) 44464 44465 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29167, ts+28949, TCL_GLOBAL_ONLY) 44466 44467 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+1957, ts+28949, TCL_GLOBAL_ONLY) 44468 44469 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29178, ts+14193, TCL_GLOBAL_ONLY) 44470 44471 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29188, ts+14193, TCL_GLOBAL_ONLY) 44472 44473 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29200, ts+28949, TCL_GLOBAL_ONLY) 44474 44475 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29208, ts+28949, TCL_GLOBAL_ONLY) 44476 44477 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29214, ts+14193, TCL_GLOBAL_ONLY) 44478 44479 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29224, ts+14193, TCL_GLOBAL_ONLY) 44480 44481 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10121, ts+28949, TCL_GLOBAL_ONLY) 44482 44483 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29241, ts+28949, TCL_GLOBAL_ONLY) 44484 44485 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29246, ts+28949, TCL_GLOBAL_ONLY) 44486 44487 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13044, ts+28949, TCL_GLOBAL_ONLY) 44488 44489 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29254, ts+28949, TCL_GLOBAL_ONLY) 44490 44491 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29264, ts+28949, TCL_GLOBAL_ONLY) 44492 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29275, 44493 ts+14193, TCL_GLOBAL_ONLY) 44494 44495 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29294, ts+28949, TCL_GLOBAL_ONLY) 44496 44497 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29306, ts+28949, TCL_GLOBAL_ONLY) 44498 44499 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29319, ts+28949, TCL_GLOBAL_ONLY) 44500 44501 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29327, ts+28949, TCL_GLOBAL_ONLY) 44502 44503 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29332, ts+28949, TCL_GLOBAL_ONLY) 44504 44505 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29338, ts+28949, TCL_GLOBAL_ONLY) 44506 44507 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29342, ts+28949, TCL_GLOBAL_ONLY) 44508 44509 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29357, ts+14193, 44510 TCL_GLOBAL_ONLY) 44511 44512 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29377, ts+28949, TCL_GLOBAL_ONLY) 44513 44514 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13439, ts+28949, TCL_GLOBAL_ONLY) 44515 44516 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29397, ts+28949, TCL_GLOBAL_ONLY) 44517 44518 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29406, ts+28949, TCL_GLOBAL_ONLY) 44519 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29415, ts+28949, TCL_GLOBAL_ONLY) 44520 44521 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29425, ts+28949, TCL_GLOBAL_ONLY) 44522 44523 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29434, ts+28949, TCL_GLOBAL_ONLY) 44524 44525 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29443, ts+28949, TCL_GLOBAL_ONLY) 44526 44527 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29454, ts+28949, TCL_GLOBAL_ONLY) 44528 44529 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+4974, ts+28949, TCL_GLOBAL_ONLY) 44530 44531 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29461, ts+28949, TCL_GLOBAL_ONLY) 44532 44533 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29475, ts+28949, TCL_GLOBAL_ONLY) 44534 44535 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29486, ts+14193, TCL_GLOBAL_ONLY) 44536 44537 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29491, ts+14193, TCL_GLOBAL_ONLY) 44538 44539 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29496, ts+14193, TCL_GLOBAL_ONLY) 44540 44541 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29501, ts+28949, TCL_GLOBAL_ONLY) 44542 44543 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29506, ts+14193, TCL_GLOBAL_ONLY) 44544 44545 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29519, ts+28949, TCL_GLOBAL_ONLY) 44546 44547 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29533, ts+28949, TCL_GLOBAL_ONLY) 44548 44549 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29542, ts+14193, TCL_GLOBAL_ONLY) 44550 44551 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29546, ts+14193, TCL_GLOBAL_ONLY) 44552 44553 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10868, ts+28949, TCL_GLOBAL_ONLY) 44554 44555 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29561, ts+28949, TCL_GLOBAL_ONLY) 44556 44557 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29573, ts+14193, TCL_GLOBAL_ONLY) 44558 44559 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29586, ts+28949, TCL_GLOBAL_ONLY) 44560 44561 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29595, ts+14193, TCL_GLOBAL_ONLY) 44562 44563 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29604, ts+28949, TCL_GLOBAL_ONLY) 44564 44565 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29614, ts+28949, TCL_GLOBAL_ONLY) 44566 44567 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29624, 44568 func() uintptr { 44569 if uint64(unsafe.Sizeof(float64(0))) > uint64(unsafe.Sizeof(float64(0))) { 44570 return ts + 28949 44571 } 44572 return ts + 14193 44573 }(), 44574 TCL_GLOBAL_ONLY) 44575 44576 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29636, ts+28949, TCL_GLOBAL_ONLY) 44577 44578 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29645, ts+28949, TCL_GLOBAL_ONLY) 44579 44580 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29658, ts+28949, TCL_GLOBAL_ONLY) 44581 44582 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29668, ts+14193, TCL_GLOBAL_ONLY) 44583 44584 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29678, ts+28949, TCL_GLOBAL_ONLY) 44585 44586 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29685, ts+28949, TCL_GLOBAL_ONLY) 44587 44588 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29689, ts+28949, TCL_GLOBAL_ONLY) 44589 44590 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29703, ts+28949, TCL_GLOBAL_ONLY) 44591 44592 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+9564, ts+28949, TCL_GLOBAL_ONLY) 44593 44594 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29710, ts+28949, TCL_GLOBAL_ONLY) 44595 44596 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29718, ts+28949, TCL_GLOBAL_ONLY) 44597 44598 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29724, ts+14193, TCL_GLOBAL_ONLY) 44599 44600 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29739, ts+28949, TCL_GLOBAL_ONLY) 44601 44602 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29754, ts+28949, TCL_GLOBAL_ONLY) 44603 44604 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29769, ts+28949, TCL_GLOBAL_ONLY) 44605 44606 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+18810, ts+28949, TCL_GLOBAL_ONLY) 44607 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29777, ts+28949, TCL_GLOBAL_ONLY) 44608 44609 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29786, ts+14193, TCL_GLOBAL_ONLY) 44610 44611 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29797, ts+14193, TCL_GLOBAL_ONLY) 44612 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29816, ts+14193, TCL_GLOBAL_ONLY) 44613 44614 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29837, ts+28949, TCL_GLOBAL_ONLY) 44615 44616 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29850, ts+28949, TCL_GLOBAL_ONLY) 44617 44618 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29859, ts+28949, TCL_GLOBAL_ONLY) 44619 44620 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29866, 44621 func() uintptr { 44622 if 1 != 0 { 44623 return ts + 28949 44624 } 44625 return ts + 14193 44626 }(), TCL_GLOBAL_ONLY) 44627 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29877, 44628 func() uintptr { 44629 if SQLITE_THREADSAFE == 1 { 44630 return ts + 28949 44631 } 44632 return ts + 14193 44633 }(), TCL_GLOBAL_ONLY) 44634 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29889, 44635 func() uintptr { 44636 if SQLITE_THREADSAFE == 2 { 44637 return ts + 28949 44638 } 44639 return ts + 14193 44640 }(), TCL_GLOBAL_ONLY) 44641 44642 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29901, ts+28949, TCL_GLOBAL_ONLY) 44643 44644 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13665, ts+28949, TCL_GLOBAL_ONLY) 44645 44646 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29908, ts+28949, TCL_GLOBAL_ONLY) 44647 44648 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29916, ts+28949, TCL_GLOBAL_ONLY) 44649 44650 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+15733, ts+28949, TCL_GLOBAL_ONLY) 44651 44652 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29929, ts+28949, TCL_GLOBAL_ONLY) 44653 44654 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29936, ts+28949, TCL_GLOBAL_ONLY) 44655 44656 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29941, ts+28949, TCL_GLOBAL_ONLY) 44657 44658 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29946, ts+28949, TCL_GLOBAL_ONLY) 44659 44660 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29950, ts+28949, TCL_GLOBAL_ONLY) 44661 44662 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29954, ts+14193, TCL_GLOBAL_ONLY) 44663 44664 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13692, ts+28949, TCL_GLOBAL_ONLY) 44665 44666 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29974, ts+14193, TCL_GLOBAL_ONLY) 44667 44668 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29993, ts+14193, TCL_GLOBAL_ONLY) 44669 44670 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30007, ts+14193, TCL_GLOBAL_ONLY) 44671 44672 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30016, ts+14193, TCL_GLOBAL_ONLY) 44673 44674 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30040, ts+14193, TCL_GLOBAL_ONLY) 44675 44676 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30061, ts+14193, TCL_GLOBAL_ONLY) 44677 44678 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30068, ts+14193, TCL_GLOBAL_ONLY) 44679 44680 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30081, ts+14193, TCL_GLOBAL_ONLY) 44681 44682 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30091, ts+28949, TCL_GLOBAL_ONLY) 44683 44684 { 44685 tcl.XTcl_LinkVar(tls, interp, ts+30102, uintptr(unsafe.Pointer(&cv_MAX_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44686 } 44687 44688 { 44689 tcl.XTcl_LinkVar(tls, interp, ts+30120, uintptr(unsafe.Pointer(&cv_MAX_COLUMN)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44690 } 44691 44692 { 44693 tcl.XTcl_LinkVar(tls, interp, ts+30138, uintptr(unsafe.Pointer(&cv_MAX_SQL_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44694 } 44695 44696 { 44697 tcl.XTcl_LinkVar(tls, interp, ts+30160, uintptr(unsafe.Pointer(&cv_MAX_EXPR_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44698 } 44699 44700 { 44701 tcl.XTcl_LinkVar(tls, interp, ts+30182, uintptr(unsafe.Pointer(&cv_MAX_COMPOUND_SELECT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44702 } 44703 44704 { 44705 tcl.XTcl_LinkVar(tls, interp, ts+30209, uintptr(unsafe.Pointer(&cv_MAX_VDBE_OP)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44706 } 44707 44708 { 44709 tcl.XTcl_LinkVar(tls, interp, ts+30228, uintptr(unsafe.Pointer(&cv_MAX_FUNCTION_ARG)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44710 } 44711 44712 { 44713 tcl.XTcl_LinkVar(tls, interp, ts+30252, uintptr(unsafe.Pointer(&cv_MAX_VARIABLE_NUMBER)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44714 } 44715 44716 { 44717 tcl.XTcl_LinkVar(tls, interp, ts+30279, uintptr(unsafe.Pointer(&cv_MAX_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44718 } 44719 44720 { 44721 tcl.XTcl_LinkVar(tls, interp, ts+30300, uintptr(unsafe.Pointer(&cv_MAX_PAGE_COUNT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44722 } 44723 44724 { 44725 tcl.XTcl_LinkVar(tls, interp, ts+30322, uintptr(unsafe.Pointer(&cv_MAX_LIKE_PATTERN_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44726 } 44727 44728 { 44729 tcl.XTcl_LinkVar(tls, interp, ts+30353, uintptr(unsafe.Pointer(&cv_MAX_TRIGGER_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44730 } 44731 44732 { 44733 tcl.XTcl_LinkVar(tls, interp, ts+30378, uintptr(unsafe.Pointer(&cv_DEFAULT_CACHE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44734 } 44735 44736 { 44737 tcl.XTcl_LinkVar(tls, interp, ts+30404, uintptr(unsafe.Pointer(&cv_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44738 } 44739 44740 { 44741 tcl.XTcl_LinkVar(tls, interp, ts+30429, uintptr(unsafe.Pointer(&cv_DEFAULT_FILE_FORMAT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44742 } 44743 44744 { 44745 tcl.XTcl_LinkVar(tls, interp, ts+30456, uintptr(unsafe.Pointer(&cv_DEFAULT_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44746 } 44747 44748 { 44749 tcl.XTcl_LinkVar(tls, interp, ts+30483, uintptr(unsafe.Pointer(&cv_DEFAULT_WAL_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44750 } 44751 44752 { 44753 tcl.XTcl_LinkVar(tls, interp, ts+30514, uintptr(unsafe.Pointer(&cv_MAX_ATTACHED)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44754 } 44755 44756 { 44757 tcl.XTcl_LinkVar(tls, interp, ts+30534, uintptr(unsafe.Pointer(&cv_MAX_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44758 } 44759 44760 { 44761 tcl.XTcl_LinkVar(tls, interp, ts+30563, uintptr(unsafe.Pointer(&cv_MAX_WORKER_THREADS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 44762 } 44763 44764 { 44765 tcl.XTcl_LinkVar(tls, interp, ts+30589, uintptr(unsafe.Pointer(&cv_TEMP_STORE)), 44766 TCL_LINK_INT|TCL_LINK_READ_ONLY) 44767 44768 } 44769 44770 { 44771 tcl.XTcl_LinkVar(tls, interp, ts+30600, uintptr(unsafe.Pointer(&cv___GNUC__)), 44772 TCL_LINK_INT|TCL_LINK_READ_ONLY) 44773 44774 } 44775 } 44776 44777 var cv_MAX_LENGTH int32 = SQLITE_MAX_LENGTH 44778 var cv_MAX_COLUMN int32 = SQLITE_MAX_COLUMN 44779 var cv_MAX_SQL_LENGTH int32 = SQLITE_MAX_SQL_LENGTH 44780 var cv_MAX_EXPR_DEPTH int32 = SQLITE_MAX_EXPR_DEPTH 44781 var cv_MAX_COMPOUND_SELECT int32 = SQLITE_MAX_COMPOUND_SELECT 44782 var cv_MAX_VDBE_OP int32 = SQLITE_MAX_VDBE_OP 44783 var cv_MAX_FUNCTION_ARG int32 = SQLITE_MAX_FUNCTION_ARG 44784 var cv_MAX_VARIABLE_NUMBER int32 = SQLITE_MAX_VARIABLE_NUMBER 44785 var cv_MAX_PAGE_SIZE int32 = SQLITE_MAX_PAGE_SIZE 44786 var cv_MAX_PAGE_COUNT int32 = SQLITE_MAX_PAGE_COUNT 44787 var cv_MAX_LIKE_PATTERN_LENGTH int32 = SQLITE_MAX_LIKE_PATTERN_LENGTH 44788 var cv_MAX_TRIGGER_DEPTH int32 = SQLITE_MAX_TRIGGER_DEPTH 44789 var cv_DEFAULT_CACHE_SIZE int32 = -2000 44790 var cv_DEFAULT_PAGE_SIZE int32 = SQLITE_DEFAULT_PAGE_SIZE 44791 var cv_DEFAULT_FILE_FORMAT int32 = SQLITE_DEFAULT_FILE_FORMAT 44792 var cv_DEFAULT_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 44793 var cv_DEFAULT_WAL_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 44794 var cv_MAX_ATTACHED int32 = SQLITE_MAX_ATTACHED 44795 var cv_MAX_DEFAULT_PAGE_SIZE int32 = SQLITE_MAX_DEFAULT_PAGE_SIZE 44796 var cv_MAX_WORKER_THREADS int32 = SQLITE_MAX_WORKER_THREADS 44797 var cv_TEMP_STORE int32 = SQLITE_TEMP_STORE 44798 var cv___GNUC__ int32 = 1 44799 44800 func Sqliteconfig_Init(tls *libc.TLS, interp uintptr) int32 { 44801 set_options(tls, interp) 44802 return TCL_OK 44803 } 44804 44805 func sqlite3Delete83Name(tls *libc.TLS, z uintptr) { 44806 var i int32 44807 var sz int32 44808 sz = int32(libc.Xstrlen(tls, z)) 44809 for i = sz - 1; i > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '/' && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '.'; i-- { 44810 } 44811 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == '.' && sz > i+4 { 44812 libc.Xmemmove(tls, z+uintptr(i+1), z+uintptr(sz-3), uint64(4)) 44813 } 44814 } 44815 44816 func sqlite3DeleteUnlinkIfExists(tls *libc.TLS, pVfs uintptr, zFile uintptr, pbExists uintptr) int32 { 44817 var rc int32 = SQLITE_ERROR 44818 44819 rc = libc.Xaccess(tls, zFile, F_OK) 44820 if rc != 0 { 44821 if *(*int32)(unsafe.Pointer(libc.X__errno(tls))) == ENOENT { 44822 if pbExists != 0 { 44823 *(*int32)(unsafe.Pointer(pbExists)) = 0 44824 } 44825 rc = SQLITE_OK 44826 } 44827 } else { 44828 if pbExists != 0 { 44829 *(*int32)(unsafe.Pointer(pbExists)) = 1 44830 } 44831 rc = libc.Xunlink(tls, zFile) 44832 } 44833 return rc 44834 } 44835 44836 func sqlite3_delete_database(tls *libc.TLS, zFile uintptr) int32 { 44837 bp := tls.Alloc(156) 44838 defer tls.Free(156) 44839 44840 var zBuf uintptr 44841 var nBuf int32 44842 var rc int32 = 0 44843 var i int32 44844 44845 *(*[4]uintptr)(unsafe.Pointer(bp + 24)) = [4]uintptr{ts, ts + 30609, ts + 30620, ts + 30627} 44846 44847 *(*[6]MFile)(unsafe.Pointer(bp + 56)) = [6]MFile{ 44848 {FzFmt: ts + 30634}, 44849 {FzFmt: ts + 30641}, 44850 {FzFmt: ts + 30656}, 44851 {FzFmt: ts + 30634, Fb83: 1}, 44852 {FzFmt: ts + 30641, FiOffset: SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET, Fb83: 1}, 44853 {FzFmt: ts + 30656, FiOffset: SQLITE_MULTIPLEX_WAL_8_3_OFFSET, Fb83: 1}, 44854 } 44855 44856 var pVfs uintptr = uintptr(0) 44857 44858 nBuf = int32(libc.Xstrlen(tls, zFile)) + 100 44859 zBuf = sqlite3.Xsqlite3_malloc(tls, nBuf) 44860 if zBuf == uintptr(0) { 44861 return SQLITE_NOMEM 44862 } 44863 44864 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([4]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 44865 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, *(*uintptr)(unsafe.Pointer(bp + 24 + uintptr(i)*8)), libc.VaList(bp, zFile)) 44866 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 44867 if rc == 0 && i != 0 { 44868 sqlite3Delete83Name(tls, zBuf) 44869 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 44870 } 44871 } 44872 44873 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([6]MFile{}))/uint64(unsafe.Sizeof(MFile{})); i++ { 44874 var p uintptr = bp + 56 + uintptr(i)*16 44875 var iChunk int32 44876 for iChunk = 1; iChunk <= MX_CHUNK_NUMBER; iChunk++ { 44877 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, (*MFile)(unsafe.Pointer(p)).FzFmt, libc.VaList(bp+8, zFile, iChunk+(*MFile)(unsafe.Pointer(p)).FiOffset)) 44878 if (*MFile)(unsafe.Pointer(p)).Fb83 != 0 { 44879 sqlite3Delete83Name(tls, zBuf) 44880 } 44881 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, bp+152) 44882 if *(*int32)(unsafe.Pointer(bp + 152)) == 0 || rc != 0 { 44883 break 44884 } 44885 } 44886 } 44887 44888 sqlite3.Xsqlite3_free(tls, zBuf) 44889 return func() int32 { 44890 if rc != 0 { 44891 return SQLITE_ERROR 44892 } 44893 return SQLITE_OK 44894 }() 44895 } 44896 44897 type MFile = struct { 44898 FzFmt uintptr 44899 FiOffset int32 44900 Fb83 int32 44901 } 44902 44903 func Sqlitetest_demovfs_Init(tls *libc.TLS, interp uintptr) int32 { 44904 return TCL_OK 44905 } 44906 44907 type devsym_file1 = struct { 44908 Fbase sqlite3_file 44909 FpReal uintptr 44910 } 44911 44912 type devsym_file = devsym_file1 44913 44914 type DevsymGlobal = struct { 44915 FpVfs uintptr 44916 FiDeviceChar int32 44917 FiSectorSize int32 44918 FnWriteCrash int32 44919 F__ccgo_pad1 [4]byte 44920 } 44921 44922 var g1 = DevsymGlobal{FiSectorSize: 512} 44923 44924 func devsymClose(tls *libc.TLS, pFile uintptr) int32 { 44925 var p uintptr = pFile 44926 sqlite3.Xsqlite3OsClose(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 44927 return SQLITE_OK 44928 } 44929 44930 func devsymRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 44931 var p uintptr = pFile 44932 return sqlite3.Xsqlite3OsRead(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 44933 } 44934 44935 func devsymWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 44936 var p uintptr = pFile 44937 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 44938 } 44939 44940 func devsymTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 44941 var p uintptr = pFile 44942 return sqlite3.Xsqlite3OsTruncate(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, size) 44943 } 44944 44945 func devsymSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 44946 var p uintptr = pFile 44947 return sqlite3.Xsqlite3OsSync(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags) 44948 } 44949 44950 func devsymFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 44951 var p uintptr = pFile 44952 return sqlite3.Xsqlite3OsFileSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pSize) 44953 } 44954 44955 func devsymLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 44956 var p uintptr = pFile 44957 return sqlite3.Xsqlite3OsLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 44958 } 44959 44960 func devsymUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 44961 var p uintptr = pFile 44962 return sqlite3.Xsqlite3OsUnlock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 44963 } 44964 44965 func devsymCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 44966 var p uintptr = pFile 44967 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pResOut) 44968 } 44969 44970 func devsymFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 44971 var p uintptr = pFile 44972 return sqlite3.Xsqlite3OsFileControl(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, op, pArg) 44973 } 44974 44975 func devsymSectorSize(tls *libc.TLS, pFile uintptr) int32 { 44976 return g1.FiSectorSize 44977 } 44978 44979 func devsymDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 44980 return g1.FiDeviceChar 44981 } 44982 44983 func devsymShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 44984 var p uintptr = pFile 44985 return (*struct { 44986 f func(*libc.TLS, uintptr, int32, int32, int32) int32 44987 })(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) 44988 } 44989 44990 func devsymShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 44991 var p uintptr = pFile 44992 return (*struct { 44993 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 44994 })(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) 44995 } 44996 44997 func devsymShmBarrier(tls *libc.TLS, pFile uintptr) { 44998 var p uintptr = pFile 44999 (*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) 45000 } 45001 45002 func devsymShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 45003 var p uintptr = pFile 45004 return (*struct { 45005 f func(*libc.TLS, uintptr, int32) int32 45006 })(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) 45007 } 45008 45009 func devsymOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45010 var rc int32 45011 var p uintptr = pFile 45012 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 45013 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45014 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45015 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&devsym_io_methods)) 45016 } 45017 return rc 45018 } 45019 45020 var devsym_io_methods = sqlite3_io_methods{ 45021 FiVersion: 2, 45022 FxClose: 0, 45023 FxRead: 0, 45024 FxWrite: 0, 45025 FxTruncate: 0, 45026 FxSync: 0, 45027 FxFileSize: 0, 45028 FxLock: 0, 45029 FxUnlock: 0, 45030 FxCheckReservedLock: 0, 45031 FxFileControl: 0, 45032 FxSectorSize: 0, 45033 FxDeviceCharacteristics: 0, 45034 FxShmMap: 0, 45035 FxShmLock: 0, 45036 FxShmBarrier: 0, 45037 FxShmUnmap: 0, 45038 } 45039 45040 func devsymDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 45041 return sqlite3.Xsqlite3OsDelete(tls, g1.FpVfs, zPath, dirSync) 45042 } 45043 45044 func devsymAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 45045 return sqlite3.Xsqlite3OsAccess(tls, g1.FpVfs, zPath, flags, pResOut) 45046 } 45047 45048 func devsymFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 45049 return sqlite3.Xsqlite3OsFullPathname(tls, g1.FpVfs, zPath, nOut, zOut) 45050 } 45051 45052 func devsymRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 45053 return sqlite3.Xsqlite3OsRandomness(tls, g1.FpVfs, nByte, zBufOut) 45054 } 45055 45056 func devsymSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 45057 return sqlite3.Xsqlite3OsSleep(tls, g1.FpVfs, nMicro) 45058 } 45059 45060 func devsymCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 45061 return (*struct { 45062 f func(*libc.TLS, uintptr, uintptr) int32 45063 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FxCurrentTime})).f(tls, g1.FpVfs, pTimeOut) 45064 } 45065 45066 func writecrashSectorSize(tls *libc.TLS, pFile uintptr) int32 { 45067 var p uintptr = pFile 45068 return sqlite3.Xsqlite3OsSectorSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45069 } 45070 45071 func writecrashDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 45072 var p uintptr = pFile 45073 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45074 } 45075 45076 func writecrashWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45077 var p uintptr = pFile 45078 if g1.FnWriteCrash > 0 { 45079 g1.FnWriteCrash-- 45080 if g1.FnWriteCrash == 0 { 45081 libc.Xabort(tls) 45082 } 45083 } 45084 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45085 } 45086 45087 func writecrashOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45088 var rc int32 45089 var p uintptr = pFile 45090 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 45091 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45092 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45093 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&writecrash_io_methods)) 45094 } 45095 return rc 45096 } 45097 45098 var writecrash_io_methods = sqlite3_io_methods{ 45099 FiVersion: 2, 45100 FxClose: 0, 45101 FxRead: 0, 45102 FxWrite: 0, 45103 FxTruncate: 0, 45104 FxSync: 0, 45105 FxFileSize: 0, 45106 FxLock: 0, 45107 FxUnlock: 0, 45108 FxCheckReservedLock: 0, 45109 FxFileControl: 0, 45110 FxSectorSize: 0, 45111 FxDeviceCharacteristics: 0, 45112 FxShmMap: 0, 45113 FxShmLock: 0, 45114 FxShmBarrier: 0, 45115 FxShmUnmap: 0, 45116 } 45117 45118 var devsym_vfs = sqlite3_vfs{ 45119 FiVersion: 2, 45120 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45121 FmxPathname: DEVSYM_MAX_PATHNAME, 45122 FzName: ts + 30667, 45123 FxOpen: 0, 45124 FxDelete: 0, 45125 FxAccess: 0, 45126 FxFullPathname: 0, 45127 FxRandomness: 0, 45128 FxSleep: 0, 45129 FxCurrentTime: 0, 45130 } 45131 45132 var writecrash_vfs = sqlite3_vfs{ 45133 FiVersion: 2, 45134 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45135 FmxPathname: DEVSYM_MAX_PATHNAME, 45136 FzName: ts + 30674, 45137 FxOpen: 0, 45138 FxDelete: 0, 45139 FxAccess: 0, 45140 FxFullPathname: 0, 45141 FxRandomness: 0, 45142 FxSleep: 0, 45143 FxCurrentTime: 0, 45144 } 45145 45146 func devsym_register(tls *libc.TLS, iDeviceChar int32, iSectorSize int32) { 45147 if g1.FpVfs == uintptr(0) { 45148 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45149 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45150 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45151 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45152 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45153 } 45154 if iDeviceChar >= 0 { 45155 g1.FiDeviceChar = iDeviceChar 45156 } else { 45157 g1.FiDeviceChar = 0 45158 } 45159 if iSectorSize >= 0 { 45160 g1.FiSectorSize = iSectorSize 45161 } else { 45162 g1.FiSectorSize = 512 45163 } 45164 } 45165 45166 func devsym_unregister(tls *libc.TLS) { 45167 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&devsym_vfs))) 45168 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&writecrash_vfs))) 45169 g1.FpVfs = uintptr(0) 45170 g1.FiDeviceChar = 0 45171 g1.FiSectorSize = 0 45172 } 45173 45174 func devsym_crash_on_write(tls *libc.TLS, nWrite int32) { 45175 if g1.FpVfs == uintptr(0) { 45176 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45177 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45178 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45179 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45180 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45181 } 45182 g1.FnWriteCrash = nWrite 45183 } 45184 45185 type Tcl_StatBuf = stat 45186 45187 type fs_vtab1 = struct { 45188 Fbase sqlite3_vtab 45189 Fdb uintptr 45190 FzDb uintptr 45191 FzTbl uintptr 45192 } 45193 45194 type fs_vtab = fs_vtab1 45195 type fs_cursor1 = struct { 45196 Fbase sqlite3_vtab_cursor 45197 FpStmt uintptr 45198 FzBuf uintptr 45199 FnBuf int32 45200 FnAlloc int32 45201 } 45202 45203 type fs_cursor = fs_cursor1 45204 45205 type FsdirVtab1 = struct{ Fbase sqlite3_vtab } 45206 45207 type FsdirVtab = FsdirVtab1 45208 type FsdirCsr1 = struct { 45209 Fbase sqlite3_vtab_cursor 45210 FzDir uintptr 45211 FpDir uintptr 45212 FiRowid sqlite3_int64 45213 FpEntry uintptr 45214 } 45215 45216 type FsdirCsr = FsdirCsr1 45217 45218 func fsdirConnect1(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45219 var pTab uintptr 45220 45221 if argc != 3 { 45222 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45223 return SQLITE_ERROR 45224 } 45225 45226 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FsdirVtab{}))) 45227 if !(pTab != 0) { 45228 return SQLITE_NOMEM 45229 } 45230 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FsdirVtab{}))) 45231 45232 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 45233 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30685) 45234 45235 return SQLITE_OK 45236 } 45237 45238 func fsdirDisconnect1(tls *libc.TLS, pVtab uintptr) int32 { 45239 sqlite3.Xsqlite3_free(tls, pVtab) 45240 return SQLITE_OK 45241 } 45242 45243 func fsdirBestIndex1(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45244 var ii int32 45245 45246 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 45247 45248 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45249 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45250 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 { 45251 var pUsage uintptr 45252 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45253 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 45254 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45255 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 45256 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 45257 break 45258 } 45259 } 45260 45261 return SQLITE_OK 45262 } 45263 45264 func fsdirOpen1(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45265 var pCur uintptr 45266 45267 pCur = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(FsdirCsr{}))+uint64(256))) 45268 if pCur == uintptr(0) { 45269 return SQLITE_NOMEM 45270 } 45271 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FsdirCsr{}))) 45272 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45273 return SQLITE_OK 45274 } 45275 45276 func fsdirClose1(tls *libc.TLS, cur uintptr) int32 { 45277 var pCur uintptr = cur 45278 if (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir != 0 { 45279 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir) 45280 } 45281 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FzDir) 45282 sqlite3.Xsqlite3_free(tls, pCur) 45283 return SQLITE_OK 45284 } 45285 45286 func fsdirNext1(tls *libc.TLS, cur uintptr) int32 { 45287 var pCsr uintptr = cur 45288 45289 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 45290 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry = libc.Xreaddir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45291 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry == uintptr(0) { 45292 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45293 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 45294 } 45295 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid++ 45296 } 45297 45298 return SQLITE_OK 45299 } 45300 45301 func fsdirFilter1(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 45302 var pCsr uintptr = pVtabCursor 45303 var zDir uintptr 45304 var nDir int32 45305 45306 if idxNum != 1 || argc != 1 { 45307 return SQLITE_ERROR 45308 } 45309 45310 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 45311 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 45312 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 45313 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 45314 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 45315 } 45316 45317 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 45318 nDir = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 45319 (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir = sqlite3.Xsqlite3_malloc(tls, nDir+1) 45320 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir == uintptr(0) { 45321 return SQLITE_NOMEM 45322 } 45323 libc.Xmemcpy(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, zDir, uint64(nDir+1)) 45324 45325 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = libc.Xopendir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 45326 return fsdirNext1(tls, pVtabCursor) 45327 } 45328 45329 func fsdirEof1(tls *libc.TLS, cur uintptr) int32 { 45330 var pCsr uintptr = cur 45331 return libc.Bool32((*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir == uintptr(0)) 45332 } 45333 45334 func fsdirColumn1(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 45335 var pCsr uintptr = cur 45336 switch i { 45337 case 0: 45338 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, -1, uintptr(0)) 45339 break 45340 45341 case 1: 45342 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry+24, -1, libc.UintptrFromInt32(-1)) 45343 break 45344 45345 default: 45346 } 45347 45348 return SQLITE_OK 45349 } 45350 45351 func fsdirRowid1(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 45352 var pCsr uintptr = cur 45353 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid 45354 return SQLITE_OK 45355 } 45356 45357 type FstreeVtab1 = struct { 45358 Fbase sqlite3_vtab 45359 Fdb uintptr 45360 } 45361 45362 type FstreeVtab = FstreeVtab1 45363 type FstreeCsr1 = struct { 45364 Fbase sqlite3_vtab_cursor 45365 FpStmt uintptr 45366 Ffd int32 45367 F__ccgo_pad1 [4]byte 45368 } 45369 45370 type FstreeCsr = FstreeCsr1 45371 45372 func fstreeConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45373 var pTab uintptr 45374 45375 if argc != 3 { 45376 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45377 return SQLITE_ERROR 45378 } 45379 45380 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeVtab{}))) 45381 if !(pTab != 0) { 45382 return SQLITE_NOMEM 45383 } 45384 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FstreeVtab{}))) 45385 (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb = db 45386 45387 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 45388 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30714) 45389 45390 return SQLITE_OK 45391 } 45392 45393 func fstreeDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 45394 sqlite3.Xsqlite3_free(tls, pVtab) 45395 return SQLITE_OK 45396 } 45397 45398 func fstreeBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45399 var ii int32 45400 45401 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45402 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45403 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 || 45404 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE || 45405 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 45406 var pUsage uintptr 45407 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45408 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) 45409 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45410 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100000.0 45411 return SQLITE_OK 45412 } 45413 } 45414 45415 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 45416 return SQLITE_OK 45417 } 45418 45419 func fstreeOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45420 var pCur uintptr 45421 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeCsr{}))) 45422 if pCur == uintptr(0) { 45423 return SQLITE_NOMEM 45424 } 45425 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FstreeCsr{}))) 45426 (*FstreeCsr)(unsafe.Pointer(pCur)).Ffd = -1 45427 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45428 return SQLITE_OK 45429 } 45430 45431 func fstreeCloseFd(tls *libc.TLS, pCsr uintptr) { 45432 if (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd >= 0 { 45433 libc.Xclose(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd) 45434 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = -1 45435 } 45436 } 45437 45438 func fstreeClose(tls *libc.TLS, cur uintptr) int32 { 45439 var pCsr uintptr = cur 45440 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45441 fstreeCloseFd(tls, pCsr) 45442 sqlite3.Xsqlite3_free(tls, pCsr) 45443 return SQLITE_OK 45444 } 45445 45446 func fstreeNext(tls *libc.TLS, cur uintptr) int32 { 45447 var pCsr uintptr = cur 45448 var rc int32 45449 45450 fstreeCloseFd(tls, pCsr) 45451 rc = sqlite3.Xsqlite3_step(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45452 if rc != SQLITE_ROW { 45453 rc = sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45454 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 45455 } else { 45456 rc = SQLITE_OK 45457 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = libc.Xopen(tls, sqlite3.Xsqlite3_column_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0), O_RDONLY, 0) 45458 } 45459 45460 return rc 45461 } 45462 45463 func fstreeFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 45464 bp := tls.Alloc(2) 45465 defer tls.Free(2) 45466 45467 var pCsr uintptr = pVtabCursor 45468 var pTab uintptr = (*FstreeCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 45469 var rc int32 45470 var zSql uintptr = ts + 30750 45471 var zRoot uintptr 45472 var nRoot int32 45473 var zPrefix uintptr 45474 var nPrefix int32 45475 var zDir uintptr 45476 var nDir int32 45477 *(*[2]int8)(unsafe.Pointer(bp)) = [2]int8{int8(0), int8(0)} 45478 45479 zRoot = ts + 30982 45480 nRoot = 1 45481 zPrefix = ts + 584 45482 nPrefix = 0 45483 45484 zDir = zRoot 45485 nDir = nRoot 45486 45487 fstreeCloseFd(tls, pCsr) 45488 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 45489 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 45490 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 45491 if rc != SQLITE_OK { 45492 return rc 45493 } 45494 45495 if idxNum != 0 { 45496 var zQuery uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 45497 switch idxNum { 45498 case SQLITE_INDEX_CONSTRAINT_GLOB: 45499 *(*int8)(unsafe.Pointer(bp)) = int8('*') 45500 *(*int8)(unsafe.Pointer(bp + 1)) = int8('?') 45501 break 45502 fallthrough 45503 case SQLITE_INDEX_CONSTRAINT_LIKE: 45504 *(*int8)(unsafe.Pointer(bp)) = int8('_') 45505 *(*int8)(unsafe.Pointer(bp + 1)) = int8('%') 45506 break 45507 } 45508 45509 if sqlite3.Xsqlite3_strnicmp(tls, zQuery, zPrefix, nPrefix) == 0 { 45510 var i int32 45511 for i = nPrefix; *(*int8)(unsafe.Pointer(zQuery + uintptr(i))) != 0; i++ { 45512 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))) { 45513 break 45514 } 45515 if int32(*(*int8)(unsafe.Pointer(zQuery + uintptr(i)))) == '/' { 45516 nDir = i 45517 } 45518 } 45519 zDir = zQuery 45520 } 45521 } 45522 if nDir == 0 { 45523 nDir = 1 45524 } 45525 45526 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 1, zDir, nDir, libc.UintptrFromInt32(-1)) 45527 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 2, zRoot, nRoot, libc.UintptrFromInt32(-1)) 45528 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 3, zPrefix, nPrefix, libc.UintptrFromInt32(-1)) 45529 45530 return fstreeNext(tls, pVtabCursor) 45531 } 45532 45533 func fstreeEof(tls *libc.TLS, cur uintptr) int32 { 45534 var pCsr uintptr = cur 45535 return libc.Bool32((*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 45536 } 45537 45538 func fstreeColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 45539 bp := tls.Alloc(128) 45540 defer tls.Free(128) 45541 45542 var pCsr uintptr = cur 45543 if i == 0 { 45544 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0)) 45545 } else { 45546 libc.Xfstat(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, bp) 45547 45548 if (*stat)(unsafe.Pointer(bp)).Fst_mode&mode_t(0170000) == mode_t(0100000) { 45549 if i == 1 { 45550 sqlite3.Xsqlite3_result_int64(tls, ctx, (*stat)(unsafe.Pointer(bp)).Fst_size) 45551 } else { 45552 var nRead int32 45553 var aBuf uintptr = sqlite3.Xsqlite3_malloc(tls, int32((*stat)(unsafe.Pointer(bp)).Fst_mode+mode_t(1))) 45554 if !(aBuf != 0) { 45555 return SQLITE_NOMEM 45556 } 45557 nRead = int32(libc.Xread(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, aBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_mode))) 45558 if mode_t(nRead) != (*stat)(unsafe.Pointer(bp)).Fst_mode { 45559 return SQLITE_IOERR 45560 } 45561 sqlite3.Xsqlite3_result_blob(tls, ctx, aBuf, nRead, libc.UintptrFromInt32(-1)) 45562 sqlite3.Xsqlite3_free(tls, aBuf) 45563 } 45564 } 45565 } 45566 45567 return SQLITE_OK 45568 } 45569 45570 func fstreeRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 45571 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 45572 return SQLITE_OK 45573 } 45574 45575 func fsConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45576 var pVtab uintptr 45577 var nByte int32 45578 var zTbl uintptr 45579 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 45580 45581 if argc != 4 { 45582 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45583 return SQLITE_ERROR 45584 } 45585 zTbl = *(*uintptr)(unsafe.Pointer(argv + 3*8)) 45586 45587 nByte = int32(uint64(unsafe.Sizeof(fs_vtab{})) + uint64(int32(libc.Xstrlen(tls, zTbl))) + uint64(1) + uint64(int32(libc.Xstrlen(tls, zDb))) + uint64(1)) 45588 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(nByte)) 45589 if !(pVtab != 0) { 45590 return SQLITE_NOMEM 45591 } 45592 45593 (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl = pVtab + 1*48 45594 (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb = (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl + uintptr(libc.Xstrlen(tls, zTbl)+uint64(1)) 45595 (*fs_vtab)(unsafe.Pointer(pVtab)).Fdb = db 45596 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl, zTbl, libc.Xstrlen(tls, zTbl)) 45597 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb, zDb, libc.Xstrlen(tls, zDb)) 45598 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 45599 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30984) 45600 45601 return SQLITE_OK 45602 } 45603 45604 func fsDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 45605 sqlite3.Xsqlite3_free(tls, pVtab) 45606 return SQLITE_OK 45607 } 45608 45609 func fsOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45610 var pCur uintptr 45611 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(fs_cursor{}))) 45612 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45613 return SQLITE_OK 45614 } 45615 45616 func fsClose(tls *libc.TLS, cur uintptr) int32 { 45617 var pCur uintptr = cur 45618 sqlite3.Xsqlite3_finalize(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 45619 sqlite3.Xsqlite3_free(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf) 45620 sqlite3.Xsqlite3_free(tls, pCur) 45621 return SQLITE_OK 45622 } 45623 45624 func fsNext(tls *libc.TLS, cur uintptr) int32 { 45625 var pCur uintptr = cur 45626 var rc int32 45627 45628 rc = sqlite3.Xsqlite3_step(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 45629 if rc == SQLITE_ROW || rc == SQLITE_DONE { 45630 rc = SQLITE_OK 45631 } 45632 45633 return rc 45634 } 45635 45636 func fsFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 45637 bp := tls.Alloc(32) 45638 defer tls.Free(32) 45639 45640 var rc int32 45641 var pCur uintptr = pVtabCursor 45642 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 45643 45644 if idxNum == 1 { 45645 var zStmt uintptr = sqlite3.Xsqlite3_mprintf(tls, 45646 ts+31021, libc.VaList(bp, (*fs_vtab)(unsafe.Pointer(p)).FzDb, (*fs_vtab)(unsafe.Pointer(p)).FzTbl)) 45647 if !(zStmt != 0) { 45648 return SQLITE_NOMEM 45649 } 45650 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 45651 sqlite3.Xsqlite3_free(tls, zStmt) 45652 if rc == SQLITE_OK { 45653 sqlite3.Xsqlite3_bind_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1, *(*uintptr)(unsafe.Pointer(argv))) 45654 } 45655 } else { 45656 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)) 45657 if !(zStmt != 0) { 45658 return SQLITE_NOMEM 45659 } 45660 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 45661 sqlite3.Xsqlite3_free(tls, zStmt) 45662 } 45663 45664 if rc == SQLITE_OK { 45665 rc = fsNext(tls, pVtabCursor) 45666 } 45667 return rc 45668 } 45669 45670 func fsColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 45671 bp := tls.Alloc(128) 45672 defer tls.Free(128) 45673 45674 var pCur uintptr = cur 45675 45676 if i == 0 { 45677 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0)) 45678 } else { 45679 var zFile uintptr = sqlite3.Xsqlite3_column_text(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1) 45680 45681 var fd int32 45682 var n int32 45683 fd = libc.Xopen(tls, zFile, O_RDONLY, 0) 45684 if fd < 0 { 45685 return SQLITE_IOERR 45686 } 45687 libc.Xfstat(tls, fd, bp) 45688 45689 if (*stat)(unsafe.Pointer(bp)).Fst_size >= off_t((*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc) { 45690 var nNew sqlite3_int64 = (*stat)(unsafe.Pointer(bp)).Fst_size * int64(2) 45691 var zNew uintptr 45692 if nNew < int64(1024) { 45693 nNew = int64(1024) 45694 } 45695 45696 zNew = sqlite3.Xsqlite3Realloc(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64(nNew)) 45697 if zNew == uintptr(0) { 45698 libc.Xclose(tls, fd) 45699 return SQLITE_NOMEM 45700 } 45701 (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf = zNew 45702 (*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc = int32(nNew) 45703 } 45704 45705 n = int32(libc.Xread(tls, fd, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_size))) 45706 libc.Xclose(tls, fd) 45707 if off_t(n) != (*stat)(unsafe.Pointer(bp)).Fst_size { 45708 return SQLITE_ERROR 45709 } 45710 (*fs_cursor)(unsafe.Pointer(pCur)).FnBuf = int32((*stat)(unsafe.Pointer(bp)).Fst_size) 45711 *(*int8)(unsafe.Pointer((*fs_cursor)(unsafe.Pointer(pCur)).FzBuf + uintptr((*fs_cursor)(unsafe.Pointer(pCur)).FnBuf))) = int8(0) 45712 45713 sqlite3.Xsqlite3_result_text(tls, ctx, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 45714 } 45715 return SQLITE_OK 45716 } 45717 45718 func fsRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 45719 var pCur uintptr = cur 45720 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0) 45721 return SQLITE_OK 45722 } 45723 45724 func fsEof(tls *libc.TLS, cur uintptr) int32 { 45725 var pCur uintptr = cur 45726 return libc.Bool32(sqlite3.Xsqlite3_data_count(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) == 0) 45727 } 45728 45729 func fsBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45730 var ii int32 45731 45732 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45733 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45734 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn < 0 && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 45735 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 45736 var pUsage uintptr 45737 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45738 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 45739 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45740 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 45741 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 45742 break 45743 } 45744 } 45745 45746 return SQLITE_OK 45747 } 45748 45749 var fsModule = sqlite3_module{ 45750 FxCreate: 0, 45751 FxConnect: 0, 45752 FxBestIndex: 0, 45753 FxDisconnect: 0, 45754 FxDestroy: 0, 45755 FxOpen: 0, 45756 FxClose: 0, 45757 FxFilter: 0, 45758 FxNext: 0, 45759 FxEof: 0, 45760 FxColumn: 0, 45761 FxRowid: 0, 45762 } 45763 45764 var fsdirModule = sqlite3_module{ 45765 FxCreate: 0, 45766 FxConnect: 0, 45767 FxBestIndex: 0, 45768 FxDisconnect: 0, 45769 FxDestroy: 0, 45770 FxOpen: 0, 45771 FxClose: 0, 45772 FxFilter: 0, 45773 FxNext: 0, 45774 FxEof: 0, 45775 FxColumn: 0, 45776 FxRowid: 0, 45777 } 45778 45779 var fstreeModule = sqlite3_module{ 45780 FxCreate: 0, 45781 FxConnect: 0, 45782 FxBestIndex: 0, 45783 FxDisconnect: 0, 45784 FxDestroy: 0, 45785 FxOpen: 0, 45786 FxClose: 0, 45787 FxFilter: 0, 45788 FxNext: 0, 45789 FxEof: 0, 45790 FxColumn: 0, 45791 FxRowid: 0, 45792 } 45793 45794 func register_fs_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45795 bp := tls.Alloc(8) 45796 defer tls.Free(8) 45797 45798 if objc != 2 { 45799 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 45800 return TCL_ERROR 45801 } 45802 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 45803 return TCL_ERROR 45804 } 45805 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31055, uintptr(unsafe.Pointer(&fsModule)), interp) 45806 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+5325, uintptr(unsafe.Pointer(&fsdirModule)), uintptr(0)) 45807 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31058, uintptr(unsafe.Pointer(&fstreeModule)), uintptr(0)) 45808 return TCL_OK 45809 } 45810 45811 func Sqlitetestfs_Init(tls *libc.TLS, interp uintptr) int32 { 45812 var i int32 45813 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd6))/uint64(unsafe.Sizeof(struct { 45814 FzName uintptr 45815 FxProc uintptr 45816 FclientData uintptr 45817 }{})); i++ { 45818 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd6[i].FzName, 45819 aObjCmd6[i].FxProc, aObjCmd6[i].FclientData, uintptr(0)) 45820 } 45821 return TCL_OK 45822 } 45823 45824 var aObjCmd6 = [1]struct { 45825 FzName uintptr 45826 FxProc uintptr 45827 FclientData uintptr 45828 }{ 45829 {FzName: ts + 31065, FxProc: 0}, 45830 } 45831 45832 func testContextMalloc(tls *libc.TLS, context uintptr, nByte int32) uintptr { 45833 var z uintptr = sqlite3.Xsqlite3_malloc(tls, nByte) 45834 if !(z != 0) && nByte > 0 { 45835 sqlite3.Xsqlite3_result_error_nomem(tls, context) 45836 } 45837 return z 45838 } 45839 45840 func randStr(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 45841 bp := tls.Alloc(1004) 45842 defer tls.Free(1004) 45843 45844 var iMin int32 45845 var iMax int32 45846 var n int32 45847 45848 var i int32 45849 45850 iMin = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 45851 if iMin < 0 { 45852 iMin = 0 45853 } 45854 if uint64(iMin) >= uint64(unsafe.Sizeof([1000]uint8{})) { 45855 iMin = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 45856 } 45857 iMax = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 45858 if iMax < iMin { 45859 iMax = iMin 45860 } 45861 if uint64(iMax) >= uint64(unsafe.Sizeof([1000]uint8{})) { 45862 iMax = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 45863 } 45864 n = iMin 45865 if iMax > iMin { 45866 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 45867 *(*int32)(unsafe.Pointer(bp)) &= 0x7fffffff 45868 n = n + *(*int32)(unsafe.Pointer(bp))%(iMax+1-iMin) 45869 } 45870 45871 sqlite3.Xsqlite3_randomness(tls, n, bp+4) 45872 for i = 0; i < n; i++ { 45873 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))) = zSrc[uint64(*(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))))%(uint64(unsafe.Sizeof(zSrc))-uint64(1))] 45874 } 45875 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(n))) = uint8(0) 45876 sqlite3.Xsqlite3_result_text(tls, context, bp+4, n, libc.UintptrFromInt32(-1)) 45877 } 45878 45879 var zSrc = *(*[79]uint8)(unsafe.Pointer(ts + 31084)) 45880 45881 var test_destructor_count_var int32 = 0 45882 45883 func destructor(tls *libc.TLS, p uintptr) { 45884 var zVal uintptr = p 45885 45886 zVal-- 45887 sqlite3.Xsqlite3_free(tls, zVal) 45888 test_destructor_count_var-- 45889 } 45890 45891 func test_destructor(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45892 var zVal uintptr 45893 var len int32 45894 45895 test_destructor_count_var++ 45896 45897 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 45898 return 45899 } 45900 len = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 45901 zVal = testContextMalloc(tls, pCtx, len+3) 45902 if !(zVal != 0) { 45903 return 45904 } 45905 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 45906 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 45907 zVal++ 45908 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 45909 sqlite3.Xsqlite3_result_text(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 45910 } 45911 45912 func test_destructor16(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45913 var zVal uintptr 45914 var len int32 45915 45916 test_destructor_count_var++ 45917 45918 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 45919 return 45920 } 45921 len = sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 45922 zVal = testContextMalloc(tls, pCtx, len+3) 45923 if !(zVal != 0) { 45924 return 45925 } 45926 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 45927 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 45928 zVal++ 45929 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 45930 sqlite3.Xsqlite3_result_text16(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 45931 } 45932 45933 func test_destructor_count(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45934 sqlite3.Xsqlite3_result_int(tls, pCtx, test_destructor_count_var) 45935 } 45936 45937 func test_agg_errmsg16_step(tls *libc.TLS, a uintptr, b int32, c uintptr) { 45938 } 45939 45940 func test_agg_errmsg16_final(tls *libc.TLS, ctx uintptr) { 45941 var z uintptr 45942 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 45943 sqlite3.Xsqlite3_aggregate_context(tls, ctx, 2048) 45944 z = sqlite3.Xsqlite3_errmsg16(tls, db) 45945 sqlite3.Xsqlite3_result_text16(tls, ctx, z, -1, libc.UintptrFromInt32(-1)) 45946 } 45947 45948 func free_test_auxdata(tls *libc.TLS, p uintptr) { 45949 sqlite3.Xsqlite3_free(tls, p) 45950 } 45951 45952 func test_auxdata(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45953 var i int32 45954 var zRet uintptr = testContextMalloc(tls, pCtx, nArg*2) 45955 if !(zRet != 0) { 45956 return 45957 } 45958 libc.Xmemset(tls, zRet, 0, uint64(nArg*2)) 45959 for i = 0; i < nArg; i++ { 45960 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 45961 if z != 0 { 45962 var n int32 45963 var zAux uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, i) 45964 if zAux != 0 { 45965 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('1') 45966 45967 } else { 45968 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('0') 45969 } 45970 n = int32(libc.Xstrlen(tls, z)) + 1 45971 zAux = testContextMalloc(tls, pCtx, n) 45972 if zAux != 0 { 45973 libc.Xmemcpy(tls, zAux, z, uint64(n)) 45974 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, i, zAux, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 45975 } 45976 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2+1))) = int8(' ') 45977 } 45978 } 45979 sqlite3.Xsqlite3_result_text(tls, pCtx, zRet, 2*nArg-1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 45980 } 45981 45982 func test_error(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45983 sqlite3.Xsqlite3_result_error(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1) 45984 if nArg == 2 { 45985 sqlite3.Xsqlite3_result_error_code(tls, pCtx, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 45986 } 45987 } 45988 45989 func counterFunc(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 45990 var pCounter uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, 0) 45991 if pCounter == uintptr(0) { 45992 pCounter = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(int32(0)))) 45993 if pCounter == uintptr(0) { 45994 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 45995 return 45996 } 45997 *(*int32)(unsafe.Pointer(pCounter)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 45998 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, 0, pCounter, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 45999 } else { 46000 *(*int32)(unsafe.Pointer(pCounter))++ 46001 } 46002 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(pCounter))) 46003 } 46004 46005 func test_isolation(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46006 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46007 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46008 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46009 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46010 sqlite3.Xsqlite3_result_value(tls, pCtx, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 46011 } 46012 46013 func test_eval(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46014 bp := tls.Alloc(16) 46015 defer tls.Free(16) 46016 46017 var rc int32 46018 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, pCtx) 46019 var zSql uintptr 46020 46021 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46022 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 46023 if rc == SQLITE_OK { 46024 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46025 if rc == SQLITE_ROW { 46026 sqlite3.Xsqlite3_result_value(tls, pCtx, sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0)) 46027 } 46028 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46029 } 46030 if rc != 0 { 46031 var zErr uintptr 46032 46033 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+31163, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 46034 sqlite3.Xsqlite3_result_text(tls, pCtx, zErr, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46035 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 46036 } 46037 } 46038 46039 func testHexChar(tls *libc.TLS, c int8) int32 { 46040 if int32(c) >= '0' && int32(c) <= '9' { 46041 return int32(c) - '0' 46042 } else if int32(c) >= 'a' && int32(c) <= 'f' { 46043 return int32(c) - 'a' + 10 46044 } else if int32(c) >= 'A' && int32(c) <= 'F' { 46045 return int32(c) - 'A' + 10 46046 } 46047 return 0 46048 } 46049 46050 func testHexToBin(tls *libc.TLS, zIn uintptr, zOut uintptr) { 46051 for *(*int8)(unsafe.Pointer(zIn)) != 0 && *(*int8)(unsafe.Pointer(zIn + 1)) != 0 { 46052 *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zOut, 1))) = int8(testHexChar(tls, *(*int8)(unsafe.Pointer(zIn)))<<4 + testHexChar(tls, *(*int8)(unsafe.Pointer(zIn + 1)))) 46053 zIn += uintptr(2) 46054 } 46055 } 46056 46057 func testHexToUtf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46058 var n int32 46059 var zIn uintptr 46060 var zOut uintptr 46061 46062 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46063 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46064 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46065 if zOut == uintptr(0) { 46066 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46067 } else { 46068 testHexToBin(tls, zIn, zOut) 46069 sqlite3.Xsqlite3_result_text16be(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46070 } 46071 } 46072 46073 func testHexToUtf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46074 var n int32 46075 var zIn uintptr 46076 var zOut uintptr 46077 46078 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46079 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46080 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46081 if zOut == uintptr(0) { 46082 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46083 } else { 46084 testHexToBin(tls, zIn, zOut) 46085 sqlite3.Xsqlite3_result_text(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46086 } 46087 } 46088 46089 func testHexToUtf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46090 var n int32 46091 var zIn uintptr 46092 var zOut uintptr 46093 46094 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46095 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46096 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46097 if zOut == uintptr(0) { 46098 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46099 } else { 46100 testHexToBin(tls, zIn, zOut) 46101 sqlite3.Xsqlite3_result_text16le(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46102 } 46103 } 46104 46105 func real2hex(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46106 bp := tls.Alloc(28) 46107 defer tls.Free(28) 46108 46109 var i int32 46110 var bigEndian int32 46111 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(1) 46112 bigEndian = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(bp))) == 0) 46113 *(*float64)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 46114 for i = 0; i < 8; i++ { 46115 if bigEndian != 0 { 46116 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 46117 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 46118 } else { 46119 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 46120 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 46121 } 46122 } 46123 *(*int8)(unsafe.Pointer(bp + 8 + 16)) = int8(0) 46124 sqlite3.Xsqlite3_result_text(tls, context, bp+8, -1, libc.UintptrFromInt32(-1)) 46125 } 46126 46127 func test_extract(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46128 bp := tls.Alloc(72) 46129 defer tls.Free(72) 46130 46131 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 46132 var pRec uintptr 46133 var pEndHdr uintptr 46134 var pHdr uintptr 46135 var pBody uintptr 46136 46137 var iIdx int32 46138 var iCurrent int32 = 0 46139 46140 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 46141 iIdx = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 46142 46143 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp)) 46144 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp)))) 46145 46146 for iCurrent = 0; pHdr < pEndHdr && iCurrent <= iIdx; iCurrent++ { 46147 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(Mem{}))) 46148 (*Mem)(unsafe.Pointer(bp + 8)).Fdb = db 46149 (*Mem)(unsafe.Pointer(bp + 8)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 46150 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+64)) 46151 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 64))), bp+8) 46152 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 64))))) 46153 46154 if iCurrent == iIdx { 46155 sqlite3.Xsqlite3_result_value(tls, context, bp+8) 46156 } 46157 46158 if (*Mem)(unsafe.Pointer(bp+8)).FszMalloc != 0 { 46159 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+8)).FzMalloc) 46160 } 46161 } 46162 } 46163 46164 func test_decode(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46165 bp := tls.Alloc(123) 46166 defer tls.Free(123) 46167 46168 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 46169 var pRec uintptr 46170 var pEndHdr uintptr 46171 var pHdr uintptr 46172 var pBody uintptr 46173 46174 var pRet uintptr 46175 46176 pRet = tcl.XTcl_NewObj(tls) 46177 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 46178 46179 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 46180 46181 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp+32)) 46182 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp + 32)))) 46183 for pHdr < pEndHdr { 46184 var pVal uintptr = uintptr(0) 46185 46186 libc.Xmemset(tls, bp+40, 0, uint64(unsafe.Sizeof(Mem{}))) 46187 (*Mem)(unsafe.Pointer(bp + 40)).Fdb = db 46188 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 46189 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+96)) 46190 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 96))), bp+40) 46191 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 96))))) 46192 46193 switch sqlite3.Xsqlite3_value_type(tls, bp+40) { 46194 case SQLITE_TEXT: 46195 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, bp+40), -1) 46196 break 46197 46198 case SQLITE_BLOB: 46199 { 46200 *(*[16]int8)(unsafe.Pointer(bp + 107)) = [16]int8{ 46201 int8('0'), int8('1'), int8('2'), int8('3'), int8('4'), int8('5'), int8('6'), int8('7'), 46202 int8('8'), int8('9'), int8('a'), int8('b'), int8('c'), int8('d'), int8('e'), int8('f'), 46203 } 46204 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, bp+40) 46205 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, bp+40) 46206 var i int32 46207 pVal = tcl.XTcl_NewStringObj(tls, ts+6334, -1) 46208 for i = 0; i < n; i++ { 46209 *(*int8)(unsafe.Pointer(bp + 104)) = *(*int8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))>>4&0x0F))) 46210 *(*int8)(unsafe.Pointer(bp + 104 + 1)) = *(*int8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))&0x0F))) 46211 *(*int8)(unsafe.Pointer(bp + 104 + 2)) = int8(0) 46212 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp, bp+104, 0)) 46213 } 46214 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp+16, ts+5624, 0)) 46215 break 46216 46217 } 46218 46219 case SQLITE_FLOAT: 46220 pVal = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, bp+40)) 46221 break 46222 46223 case SQLITE_INTEGER: 46224 pVal = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, bp+40)) 46225 break 46226 46227 case SQLITE_NULL: 46228 pVal = tcl.XTcl_NewStringObj(tls, ts+5846, -1) 46229 break 46230 46231 default: 46232 } 46233 46234 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, pVal) 46235 46236 if (*Mem)(unsafe.Pointer(bp+40)).FszMalloc != 0 { 46237 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+40)).FzMalloc) 46238 } 46239 } 46240 46241 sqlite3.Xsqlite3_result_text(tls, context, tcl.XTcl_GetString(tls, pRet), -1, libc.UintptrFromInt32(-1)) 46242 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 46243 var _objPtr uintptr = pRet 46244 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 46245 tcl.XTclFreeObj(tls, _objPtr) 46246 } 46247 } 46248 } 46249 46250 func test_zeroblob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46251 var nZero int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46252 sqlite3.Xsqlite3_result_zeroblob(tls, context, nZero) 46253 } 46254 46255 func test_getsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46256 sqlite3.Xsqlite3_result_int(tls, context, int32(sqlite3.Xsqlite3_value_subtype(tls, *(*uintptr)(unsafe.Pointer(argv))))) 46257 } 46258 46259 func test_frombind(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46260 var m sqlite3_uint64 = uint64(0) 46261 var i int32 46262 for i = 0; i < argc && i < 63; i++ { 46263 if sqlite3.Xsqlite3_value_frombind(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) != 0 { 46264 m = m | uint64(1)<<i 46265 } 46266 } 46267 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3_int64(m)) 46268 } 46269 46270 func test_setsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46271 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv))) 46272 sqlite3.Xsqlite3_result_subtype(tls, context, uint32(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 46273 } 46274 46275 func registerTestFunctions(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 46276 var i int32 46277 46278 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aFuncs))/uint64(unsafe.Sizeof(struct { 46279 FzName uintptr 46280 FnArg int8 46281 F__ccgo_pad1 [3]byte 46282 FeTextRep uint32 46283 FxFunc uintptr 46284 }{})); i++ { 46285 sqlite3.Xsqlite3_create_function(tls, db, aFuncs[i].FzName, int32(aFuncs[i].FnArg), 46286 int32(aFuncs[i].FeTextRep), uintptr(0), aFuncs[i].FxFunc, uintptr(0), uintptr(0)) 46287 } 46288 46289 sqlite3.Xsqlite3_create_function(tls, db, ts+31211, 0, SQLITE_ANY, uintptr(0), uintptr(0), 46290 *(*uintptr)(unsafe.Pointer(&struct { 46291 f func(*libc.TLS, uintptr, int32, uintptr) 46292 }{test_agg_errmsg16_step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_agg_errmsg16_final}))) 46293 46294 return SQLITE_OK 46295 } 46296 46297 var aFuncs = [20]struct { 46298 FzName uintptr 46299 FnArg int8 46300 F__ccgo_pad1 [3]byte 46301 FeTextRep uint32 46302 FxFunc uintptr 46303 }{ 46304 {FzName: ts + 31229, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46305 {FzName: ts + 31237, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46306 {FzName: ts + 31253, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46307 {FzName: ts + 31271, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46308 {FzName: ts + 31286, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46309 {FzName: ts + 31301, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46310 {FzName: ts + 31313, FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46311 {FzName: ts + 31335, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46312 {FzName: ts + 31348, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46313 {FzName: ts + 31348, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46314 {FzName: ts + 31359, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46315 {FzName: ts + 31369, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46316 {FzName: ts + 31384, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46317 {FzName: ts + 31397, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46318 {FzName: ts + 31406, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46319 {FzName: ts + 31418, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46320 {FzName: ts + 31431, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8 | SQLITE_DETERMINISTIC), FxFunc: 0}, 46321 {FzName: ts + 31445, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46322 {FzName: ts + 31461, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46323 {FzName: ts + 31477, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 46324 } 46325 46326 func autoinstall_test_funcs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46327 var rc int32 = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46328 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46329 }{registerTestFunctions}))) 46330 if rc == SQLITE_OK { 46331 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46332 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46333 }{Md5_Register}))) 46334 } 46335 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 46336 return TCL_OK 46337 } 46338 46339 func tStep(tls *libc.TLS, a uintptr, b int32, c uintptr) { 46340 } 46341 46342 func tFinal(tls *libc.TLS, a uintptr) { 46343 } 46344 46345 func abuse_create_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46346 bp := tls.Alloc(24) 46347 defer tls.Free(24) 46348 46349 var rc int32 46350 var mxArg int32 46351 46352 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0) { 46353 goto __1 46354 } 46355 return TCL_ERROR 46356 __1: 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)(unsafe.Pointer(&struct { 46361 f func(*libc.TLS, uintptr, int32, uintptr) 46362 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 46363 if !(rc != SQLITE_MISUSE) { 46364 goto __2 46365 } 46366 goto abuse_err 46367 __2: 46368 ; 46369 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46370 f func(*libc.TLS, uintptr, int32, uintptr) 46371 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 46372 f func(*libc.TLS, uintptr, int32, uintptr) 46373 }{tStep})), uintptr(0)) 46374 if !(rc != SQLITE_MISUSE) { 46375 goto __3 46376 } 46377 goto abuse_err 46378 __3: 46379 ; 46380 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46381 f func(*libc.TLS, uintptr, int32, uintptr) 46382 }{tStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 46383 if !(rc != SQLITE_MISUSE) { 46384 goto __4 46385 } 46386 goto abuse_err 46387 __4: 46388 ; 46389 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}))) 46390 if !(rc != SQLITE_MISUSE) { 46391 goto __5 46392 } 46393 goto abuse_err 46394 __5: 46395 ; 46396 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46397 f func(*libc.TLS, uintptr, int32, uintptr) 46398 }{tStep})), uintptr(0)) 46399 if !(rc != SQLITE_MISUSE) { 46400 goto __6 46401 } 46402 goto abuse_err 46403 __6: 46404 ; 46405 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, -2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46406 f func(*libc.TLS, uintptr, int32, uintptr) 46407 }{tStep})), uintptr(0), uintptr(0)) 46408 if !(rc != SQLITE_MISUSE) { 46409 goto __7 46410 } 46411 goto abuse_err 46412 __7: 46413 ; 46414 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 128, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46415 f func(*libc.TLS, uintptr, int32, uintptr) 46416 }{tStep})), uintptr(0), uintptr(0)) 46417 if !(rc != SQLITE_MISUSE) { 46418 goto __8 46419 } 46420 goto abuse_err 46421 __8: 46422 ; 46423 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 46424 ts+31494, 46425 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46426 f func(*libc.TLS, uintptr, int32, uintptr) 46427 }{tStep})), uintptr(0), uintptr(0)) 46428 if !(rc != SQLITE_MISUSE) { 46429 goto __9 46430 } 46431 goto abuse_err 46432 __9: 46433 ; 46434 sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, 10000) 46435 mxArg = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, -1) 46436 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 46437 ts+31751, 46438 mxArg, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46439 f func(*libc.TLS, uintptr, int32, uintptr) 46440 }{tStep})), uintptr(0), uintptr(0)) 46441 if !(rc != SQLITE_OK) { 46442 goto __10 46443 } 46444 goto abuse_err 46445 __10: 46446 ; 46447 return TCL_OK 46448 46449 abuse_err: 46450 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32007, 46451 uintptr(0))) 46452 return TCL_ERROR 46453 } 46454 46455 func rankfunc(tls *libc.TLS, pCtx uintptr, nVal int32, apVal uintptr) { 46456 var aMatchinfo uintptr 46457 var nMatchinfo int32 46458 var nCol int32 46459 var nPhrase int32 46460 var iPhrase int32 46461 var score float64 46462 var nHitCount int32 46463 var nGlobalHitCount int32 46464 var weight float64 46465 var iCol int32 46466 46467 var aPhraseinfo uintptr 46468 nCol = 0 46469 nPhrase = 0 46470 score = 0.0 46471 46472 if !(nVal < 1) { 46473 goto __1 46474 } 46475 goto wrong_number_args 46476 __1: 46477 ; 46478 aMatchinfo = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal))) 46479 nMatchinfo = int32(uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal)))) / uint64(unsafe.Sizeof(int32(0)))) 46480 if !(nMatchinfo >= 2) { 46481 goto __2 46482 } 46483 nPhrase = *(*int32)(unsafe.Pointer(aMatchinfo)) 46484 nCol = *(*int32)(unsafe.Pointer(aMatchinfo + 1*4)) 46485 __2: 46486 ; 46487 if !(nMatchinfo != 2+3*nCol*nPhrase) { 46488 goto __3 46489 } 46490 sqlite3.Xsqlite3_result_error(tls, pCtx, 46491 ts+32050, -1) 46492 return 46493 __3: 46494 ; 46495 if !(nVal != 1+nCol) { 46496 goto __4 46497 } 46498 goto wrong_number_args 46499 __4: 46500 ; 46501 iPhrase = 0 46502 __5: 46503 if !(iPhrase < nPhrase) { 46504 goto __7 46505 } 46506 46507 aPhraseinfo = aMatchinfo + uintptr(2+iPhrase*nCol*3)*4 46508 iCol = 0 46509 __8: 46510 if !(iCol < nCol) { 46511 goto __10 46512 } 46513 nHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol)*4)) 46514 nGlobalHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol+1)*4)) 46515 weight = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(iCol+1)*8))) 46516 if !(nHitCount > 0) { 46517 goto __11 46518 } 46519 score = score + float64(nHitCount)/float64(nGlobalHitCount)*weight 46520 __11: 46521 ; 46522 goto __9 46523 __9: 46524 iCol++ 46525 goto __8 46526 goto __10 46527 __10: 46528 ; 46529 goto __6 46530 __6: 46531 iPhrase++ 46532 goto __5 46533 goto __7 46534 __7: 46535 ; 46536 sqlite3.Xsqlite3_result_double(tls, pCtx, score) 46537 return 46538 46539 wrong_number_args: 46540 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+32099, -1) 46541 } 46542 46543 func install_fts3_rank_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46544 bp := tls.Alloc(8) 46545 defer tls.Free(8) 46546 46547 if objc != 2 { 46548 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 46549 return TCL_ERROR 46550 } 46551 46552 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 46553 return TCL_ERROR 46554 } 46555 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+32144, -1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 46556 f func(*libc.TLS, uintptr, int32, uintptr) 46557 }{rankfunc})), uintptr(0), uintptr(0)) 46558 return TCL_OK 46559 } 46560 46561 func Sqlitetest_func_Init(tls *libc.TLS, interp uintptr) int32 { 46562 var i int32 46563 46564 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd7))/uint64(unsafe.Sizeof(struct { 46565 FzName uintptr 46566 FxProc uintptr 46567 }{})); i++ { 46568 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd7[i].FzName, aObjCmd7[i].FxProc, uintptr(0), uintptr(0)) 46569 } 46570 sqlite3.Xsqlite3_initialize(tls) 46571 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46572 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46573 }{registerTestFunctions}))) 46574 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 46575 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 46576 }{Md5_Register}))) 46577 return TCL_OK 46578 } 46579 46580 var aObjCmd7 = [3]struct { 46581 FzName uintptr 46582 FxProc uintptr 46583 }{ 46584 {FzName: ts + 32149, FxProc: 0}, 46585 {FzName: ts + 32176, FxProc: 0}, 46586 {FzName: ts + 32198, FxProc: 0}, 46587 } 46588 46589 func sqlite3TestBinToHex(tls *libc.TLS, zBuf uintptr, N int32) { 46590 bp := tls.Alloc(17) 46591 defer tls.Free(17) 46592 46593 *(*[17]uint8)(unsafe.Pointer(bp)) = *(*[17]uint8)(unsafe.Pointer(ts + 32225)) 46594 var i int32 46595 var j int32 46596 var c uint8 46597 i = N * 2 46598 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = uint8(0) 46599 for j = N - 1; j >= 0; j-- { 46600 c = *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) 46601 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)&0xf))) 46602 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)>>4))) 46603 } 46604 46605 } 46606 46607 func sqlite3TestHexToBin(tls *libc.TLS, zIn uintptr, N int32, aOut uintptr) int32 { 46608 bp := tls.Alloc(256) 46609 defer tls.Free(256) 46610 46611 *(*[256]uint8)(unsafe.Pointer(bp)) = [256]uint8{ 46612 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), 46613 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), 46614 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), 46615 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), 46616 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), 46617 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), 46618 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), 46619 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), 46620 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), 46621 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), 46622 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), 46623 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), 46624 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), 46625 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), 46626 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), 46627 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), 46628 } 46629 var i int32 46630 var j int32 46631 var hi int32 = 1 46632 var c uint8 46633 46634 for i = libc.AssignInt32(&j, 0); i < N; i++ { 46635 c = *(*uint8)(unsafe.Pointer(bp + uintptr(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))))) 46636 if int32(c) == 0 { 46637 continue 46638 } 46639 if hi != 0 { 46640 *(*uint8)(unsafe.Pointer(aOut + uintptr(j))) = uint8((int32(c) - 1) << 4) 46641 hi = 0 46642 } else { 46643 *(*uint8)(unsafe.Pointer(aOut + uintptr(libc.PostIncInt32(&j, 1)))) |= uint8(int32(c) - 1) 46644 hi = 1 46645 } 46646 } 46647 return j 46648 } 46649 46650 func hexio_read(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46651 bp := tls.Alloc(48) 46652 defer tls.Free(48) 46653 46654 var got int32 46655 var zFile uintptr 46656 var zBuf uintptr 46657 var in uintptr 46658 46659 if objc != 4 { 46660 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32242) 46661 return TCL_ERROR 46662 } 46663 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 46664 return TCL_ERROR 46665 } 46666 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 46667 return TCL_ERROR 46668 } 46669 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 46670 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 44))*2+1) 46671 if zBuf == uintptr(0) { 46672 return TCL_ERROR 46673 } 46674 in = libc.Xfopen(tls, zFile, ts+4402) 46675 if in == uintptr(0) { 46676 in = libc.Xfopen(tls, zFile, ts+32262) 46677 } 46678 if in == uintptr(0) { 46679 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32264, zFile, 0)) 46680 return TCL_ERROR 46681 } 46682 libc.Xfseek(tls, in, int64(*(*int32)(unsafe.Pointer(bp + 40))), SEEK_SET) 46683 got = int32(libc.Xfread(tls, zBuf, uint64(1), uint64(*(*int32)(unsafe.Pointer(bp + 44))), in)) 46684 libc.Xfclose(tls, in) 46685 if got < 0 { 46686 got = 0 46687 } 46688 sqlite3TestBinToHex(tls, zBuf, got) 46689 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zBuf, 0)) 46690 sqlite3.Xsqlite3_free(tls, zBuf) 46691 return TCL_OK 46692 } 46693 46694 func hexio_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46695 bp := tls.Alloc(32) 46696 defer tls.Free(32) 46697 46698 var nOut int32 46699 var written int32 46700 var zFile uintptr 46701 var zIn uintptr 46702 var aOut uintptr 46703 var out uintptr 46704 46705 if objc != 4 { 46706 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32288) 46707 return TCL_ERROR 46708 } 46709 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 46710 return TCL_ERROR 46711 } 46712 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 46713 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) 46714 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp + 28))/2) 46715 if aOut == uintptr(0) { 46716 return TCL_ERROR 46717 } 46718 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp + 28)), aOut) 46719 out = libc.Xfopen(tls, zFile, ts+32312) 46720 if out == uintptr(0) { 46721 out = libc.Xfopen(tls, zFile, ts+32316) 46722 } 46723 if out == uintptr(0) { 46724 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32319, zFile, 0)) 46725 return TCL_ERROR 46726 } 46727 libc.Xfseek(tls, out, int64(*(*int32)(unsafe.Pointer(bp + 24))), SEEK_SET) 46728 written = int32(libc.Xfwrite(tls, aOut, uint64(1), uint64(nOut), out)) 46729 sqlite3.Xsqlite3_free(tls, aOut) 46730 libc.Xfclose(tls, out) 46731 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, written)) 46732 return TCL_OK 46733 } 46734 46735 func hexio_get_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46736 bp := tls.Alloc(8) 46737 defer tls.Free(8) 46738 46739 var val int32 46740 46741 var nOut int32 46742 var zIn uintptr 46743 var aOut uintptr 46744 46745 if objc != 2 { 46746 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32344) 46747 return TCL_ERROR 46748 } 46749 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 46750 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp))/2) 46751 if aOut == uintptr(0) { 46752 return TCL_ERROR 46753 } 46754 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp)), aOut) 46755 if nOut >= 4 { 46756 libc.Xmemcpy(tls, bp+4, aOut, uint64(4)) 46757 } else { 46758 libc.Xmemset(tls, bp+4, 0, uint64(unsafe.Sizeof([4]uint8{}))) 46759 libc.Xmemcpy(tls, bp+4+uintptr(4-nOut), aOut, uint64(nOut)) 46760 } 46761 sqlite3.Xsqlite3_free(tls, aOut) 46762 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))) 46763 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, val)) 46764 return TCL_OK 46765 } 46766 46767 func hexio_render_int16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46768 bp := tls.Alloc(14) 46769 defer tls.Free(14) 46770 46771 if objc != 2 { 46772 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 46773 return TCL_ERROR 46774 } 46775 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 46776 return TCL_ERROR 46777 } 46778 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 46779 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp))) 46780 sqlite3TestBinToHex(tls, bp+4, 2) 46781 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 4)) 46782 return TCL_OK 46783 } 46784 46785 func hexio_render_int32(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46786 bp := tls.Alloc(14) 46787 defer tls.Free(14) 46788 46789 if objc != 2 { 46790 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 46791 return TCL_ERROR 46792 } 46793 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 46794 return TCL_ERROR 46795 } 46796 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 24) 46797 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 16) 46798 *(*uint8)(unsafe.Pointer(bp + 4 + 2)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 46799 *(*uint8)(unsafe.Pointer(bp + 4 + 3)) = uint8(*(*int32)(unsafe.Pointer(bp))) 46800 sqlite3TestBinToHex(tls, bp+4, 4) 46801 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 8)) 46802 return TCL_OK 46803 } 46804 46805 func utf8_to_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46806 bp := tls.Alloc(16) 46807 defer tls.Free(16) 46808 46809 tcl.XTcl_AppendResult(tls, interp, 46810 libc.VaList(bp, ts+32352, 0)) 46811 return TCL_ERROR 46812 } 46813 46814 func getFts3Varint(tls *libc.TLS, p uintptr, v uintptr) int32 { 46815 var q uintptr = p 46816 var x sqlite_uint64 = uint64(0) 46817 var y sqlite_uint64 = uint64(1) 46818 for int32(*(*uint8)(unsafe.Pointer(q)))&0x80 == 0x80 { 46819 x = x + y*sqlite_uint64(int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))))&0x7f) 46820 y <<= 7 46821 } 46822 x = x + y*sqlite_uint64(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1)))) 46823 *(*sqlite_int64)(unsafe.Pointer(v)) = sqlite_int64(x) 46824 return int32((int64(q) - int64(p)) / 1) 46825 } 46826 46827 func putFts3Varint(tls *libc.TLS, p uintptr, v sqlite_int64) int32 { 46828 var q uintptr = p 46829 var vu sqlite_uint64 = sqlite_uint64(v) 46830 for __ccgo := true; __ccgo; __ccgo = vu != uint64(0) { 46831 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))) = uint8(vu&uint64(0x7f) | uint64(0x80)) 46832 vu >>= 7 46833 } 46834 *(*uint8)(unsafe.Pointer(q + libc.UintptrFromInt32(-1))) &= uint8(0x7f) 46835 46836 return int32((int64(q) - int64(p)) / 1) 46837 } 46838 46839 func read_fts3varint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46840 bp := tls.Alloc(16) 46841 defer tls.Free(16) 46842 46843 var zBlob uintptr 46844 46845 var nVal int32 46846 46847 if objc != 3 { 46848 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32406) 46849 return TCL_ERROR 46850 } 46851 zBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 46852 46853 nVal = getFts3Varint(tls, zBlob, bp+8) 46854 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))), 0) 46855 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nVal)) 46856 return TCL_OK 46857 } 46858 46859 func make_fts3record(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46860 bp := tls.Alloc(28) 46861 defer tls.Free(28) 46862 46863 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 46864 *(*int32)(unsafe.Pointer(bp)) = 0 46865 var aOut uintptr = uintptr(0) 46866 var nOut int32 = 0 46867 var nAlloc int32 = 0 46868 var i int32 46869 46870 if objc != 2 { 46871 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32419) 46872 return TCL_ERROR 46873 } 46874 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 46875 return TCL_ERROR 46876 } 46877 46878 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 46879 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+16) { 46880 if nOut+10 > nAlloc { 46881 var nNew int32 46882 if nAlloc != 0 { 46883 nNew = nAlloc * 2 46884 } else { 46885 nNew = 128 46886 } 46887 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 46888 if aNew == uintptr(0) { 46889 sqlite3.Xsqlite3_free(tls, aOut) 46890 return TCL_ERROR 46891 } 46892 aOut = aNew 46893 nAlloc = nNew 46894 } 46895 nOut = nOut + putFts3Varint(tls, aOut+uintptr(nOut), *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 46896 } else { 46897 *(*int32)(unsafe.Pointer(bp + 24)) = 0 46898 var zVal uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+24) 46899 for nOut+*(*int32)(unsafe.Pointer(bp + 24)) > nAlloc { 46900 var nNew int32 46901 if nAlloc != 0 { 46902 nNew = nAlloc * 2 46903 } else { 46904 nNew = 128 46905 } 46906 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 46907 if aNew == uintptr(0) { 46908 sqlite3.Xsqlite3_free(tls, aOut) 46909 return TCL_ERROR 46910 } 46911 aOut = aNew 46912 nAlloc = nNew 46913 } 46914 libc.Xmemcpy(tls, aOut+uintptr(nOut), zVal, uint64(*(*int32)(unsafe.Pointer(bp + 24)))) 46915 nOut = nOut + *(*int32)(unsafe.Pointer(bp + 24)) 46916 } 46917 } 46918 46919 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, aOut, nOut)) 46920 sqlite3.Xsqlite3_free(tls, aOut) 46921 return TCL_OK 46922 } 46923 46924 func Sqlitetest_hexio_Init(tls *libc.TLS, interp uintptr) int32 { 46925 var i int32 46926 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd8))/uint64(unsafe.Sizeof(struct { 46927 FzName uintptr 46928 FxProc uintptr 46929 }{})); i++ { 46930 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd8[i].FzName, aObjCmd8[i].FxProc, uintptr(0), uintptr(0)) 46931 } 46932 return TCL_OK 46933 } 46934 46935 var aObjCmd8 = [8]struct { 46936 FzName uintptr 46937 FxProc uintptr 46938 }{ 46939 {FzName: ts + 32424, FxProc: 0}, 46940 {FzName: ts + 32435, FxProc: 0}, 46941 {FzName: ts + 32447, FxProc: 0}, 46942 {FzName: ts + 32461, FxProc: 0}, 46943 {FzName: ts + 32480, FxProc: 0}, 46944 {FzName: ts + 32499, FxProc: 0}, 46945 {FzName: ts + 32512, FxProc: 0}, 46946 {FzName: ts + 32528, FxProc: 0}, 46947 } 46948 46949 type Wrapped = struct { 46950 Fpcache sqlite3_pcache_methods2 46951 Fmem sqlite3_mem_methods 46952 Fmutex sqlite3_mutex_methods 46953 Fmem_init int32 46954 Fmem_fail int32 46955 Fmutex_init int32 46956 Fmutex_fail int32 46957 Fpcache_init int32 46958 Fpcache_fail int32 46959 } 46960 46961 var wrapped Wrapped 46962 46963 func wrMemInit(tls *libc.TLS, pAppData uintptr) int32 { 46964 var rc int32 46965 if wrapped.Fmem_fail != 0 { 46966 rc = SQLITE_ERROR 46967 } else { 46968 rc = (*struct { 46969 f func(*libc.TLS, uintptr) int32 46970 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxInit})).f(tls, wrapped.Fmem.FpAppData) 46971 } 46972 if rc == SQLITE_OK { 46973 wrapped.Fmem_init = 1 46974 } 46975 return rc 46976 } 46977 46978 func wrMemShutdown(tls *libc.TLS, pAppData uintptr) { 46979 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxShutdown})).f(tls, wrapped.Fmem.FpAppData) 46980 wrapped.Fmem_init = 0 46981 } 46982 46983 func wrMemMalloc(tls *libc.TLS, n int32) uintptr { 46984 return (*struct { 46985 f func(*libc.TLS, int32) uintptr 46986 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxMalloc})).f(tls, n) 46987 } 46988 46989 func wrMemFree(tls *libc.TLS, p uintptr) { 46990 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxFree})).f(tls, p) 46991 } 46992 46993 func wrMemRealloc(tls *libc.TLS, p uintptr, n int32) uintptr { 46994 return (*struct { 46995 f func(*libc.TLS, uintptr, int32) uintptr 46996 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRealloc})).f(tls, p, n) 46997 } 46998 46999 func wrMemSize(tls *libc.TLS, p uintptr) int32 { 47000 return (*struct { 47001 f func(*libc.TLS, uintptr) int32 47002 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxSize})).f(tls, p) 47003 } 47004 47005 func wrMemRoundup(tls *libc.TLS, n int32) int32 { 47006 return (*struct{ f func(*libc.TLS, int32) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRoundup})).f(tls, n) 47007 } 47008 47009 func wrMutexInit(tls *libc.TLS) int32 { 47010 var rc int32 47011 if wrapped.Fmutex_fail != 0 { 47012 rc = SQLITE_ERROR 47013 } else { 47014 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexInit})).f(tls) 47015 } 47016 if rc == SQLITE_OK { 47017 wrapped.Fmutex_init = 1 47018 } 47019 return rc 47020 } 47021 47022 func wrMutexEnd(tls *libc.TLS) int32 { 47023 (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnd})).f(tls) 47024 wrapped.Fmutex_init = 0 47025 return SQLITE_OK 47026 } 47027 47028 func wrMutexAlloc(tls *libc.TLS, e int32) uintptr { 47029 return (*struct { 47030 f func(*libc.TLS, int32) uintptr 47031 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexAlloc})).f(tls, e) 47032 } 47033 47034 func wrMutexFree(tls *libc.TLS, p uintptr) { 47035 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexFree})).f(tls, p) 47036 } 47037 47038 func wrMutexEnter(tls *libc.TLS, p uintptr) { 47039 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnter})).f(tls, p) 47040 } 47041 47042 func wrMutexTry(tls *libc.TLS, p uintptr) int32 { 47043 return (*struct { 47044 f func(*libc.TLS, uintptr) int32 47045 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexTry})).f(tls, p) 47046 } 47047 47048 func wrMutexLeave(tls *libc.TLS, p uintptr) { 47049 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexLeave})).f(tls, p) 47050 } 47051 47052 func wrMutexHeld(tls *libc.TLS, p uintptr) int32 { 47053 return (*struct { 47054 f func(*libc.TLS, uintptr) int32 47055 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexHeld})).f(tls, p) 47056 } 47057 47058 func wrMutexNotheld(tls *libc.TLS, p uintptr) int32 { 47059 return (*struct { 47060 f func(*libc.TLS, uintptr) int32 47061 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexNotheld})).f(tls, p) 47062 } 47063 47064 func wrPCacheInit(tls *libc.TLS, pArg uintptr) int32 { 47065 var rc int32 47066 if wrapped.Fpcache_fail != 0 { 47067 rc = SQLITE_ERROR 47068 } else { 47069 rc = (*struct { 47070 f func(*libc.TLS, uintptr) int32 47071 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxInit})).f(tls, wrapped.Fpcache.FpArg) 47072 } 47073 if rc == SQLITE_OK { 47074 wrapped.Fpcache_init = 1 47075 } 47076 return rc 47077 } 47078 47079 func wrPCacheShutdown(tls *libc.TLS, pArg uintptr) { 47080 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxShutdown})).f(tls, wrapped.Fpcache.FpArg) 47081 wrapped.Fpcache_init = 0 47082 } 47083 47084 func wrPCacheCreate(tls *libc.TLS, a int32, b int32, c int32) uintptr { 47085 return (*struct { 47086 f func(*libc.TLS, int32, int32, int32) uintptr 47087 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCreate})).f(tls, a, b, c) 47088 } 47089 47090 func wrPCacheCachesize(tls *libc.TLS, p uintptr, n int32) { 47091 (*struct { 47092 f func(*libc.TLS, uintptr, int32) 47093 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCachesize})).f(tls, p, n) 47094 } 47095 47096 func wrPCachePagecount(tls *libc.TLS, p uintptr) int32 { 47097 return (*struct { 47098 f func(*libc.TLS, uintptr) int32 47099 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxPagecount})).f(tls, p) 47100 } 47101 47102 func wrPCacheFetch(tls *libc.TLS, p uintptr, a uint32, b int32) uintptr { 47103 return (*struct { 47104 f func(*libc.TLS, uintptr, uint32, int32) uintptr 47105 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxFetch})).f(tls, p, a, b) 47106 } 47107 47108 func wrPCacheUnpin(tls *libc.TLS, p uintptr, a uintptr, b int32) { 47109 (*struct { 47110 f func(*libc.TLS, uintptr, uintptr, int32) 47111 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxUnpin})).f(tls, p, a, b) 47112 } 47113 47114 func wrPCacheRekey(tls *libc.TLS, p uintptr, a uintptr, b uint32, c uint32) { 47115 (*struct { 47116 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 47117 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxRekey})).f(tls, p, a, b, c) 47118 } 47119 47120 func wrPCacheTruncate(tls *libc.TLS, p uintptr, a uint32) { 47121 (*struct { 47122 f func(*libc.TLS, uintptr, uint32) 47123 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxTruncate})).f(tls, p, a) 47124 } 47125 47126 func wrPCacheDestroy(tls *libc.TLS, p uintptr) { 47127 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxDestroy})).f(tls, p) 47128 } 47129 47130 func installInitWrappers(tls *libc.TLS) { 47131 bp := tls.Alloc(288) 47132 defer tls.Free(288) 47133 47134 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 48)) = sqlite3_mutex_methods{ 47135 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 { 47136 f func(*libc.TLS, int32) uintptr 47137 }{wrMutexAlloc})), 47138 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 { 47139 f func(*libc.TLS, uintptr) int32 47140 }{wrMutexTry})), 47141 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexLeave})), FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 47142 f func(*libc.TLS, uintptr) int32 47143 }{wrMutexHeld})), FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 47144 f func(*libc.TLS, uintptr) int32 47145 }{wrMutexNotheld})), 47146 } 47147 *(*sqlite3_pcache_methods2)(unsafe.Pointer(bp + 184)) = sqlite3_pcache_methods2{ 47148 FiVersion: 1, 47149 FxInit: *(*uintptr)(unsafe.Pointer(&struct { 47150 f func(*libc.TLS, uintptr) int32 47151 }{wrPCacheInit})), FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheShutdown})), FxCreate: *(*uintptr)(unsafe.Pointer(&struct { 47152 f func(*libc.TLS, int32, int32, int32) uintptr 47153 }{wrPCacheCreate})), 47154 FxCachesize: *(*uintptr)(unsafe.Pointer(&struct { 47155 f func(*libc.TLS, uintptr, int32) 47156 }{wrPCacheCachesize})), FxPagecount: *(*uintptr)(unsafe.Pointer(&struct { 47157 f func(*libc.TLS, uintptr) int32 47158 }{wrPCachePagecount})), FxFetch: *(*uintptr)(unsafe.Pointer(&struct { 47159 f func(*libc.TLS, uintptr, uint32, int32) uintptr 47160 }{wrPCacheFetch})), 47161 FxUnpin: *(*uintptr)(unsafe.Pointer(&struct { 47162 f func(*libc.TLS, uintptr, uintptr, int32) 47163 }{wrPCacheUnpin})), FxRekey: *(*uintptr)(unsafe.Pointer(&struct { 47164 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 47165 }{wrPCacheRekey})), FxTruncate: *(*uintptr)(unsafe.Pointer(&struct { 47166 f func(*libc.TLS, uintptr, uint32) 47167 }{wrPCacheTruncate})), 47168 FxDestroy: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheDestroy})), 47169 } 47170 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 120)) = sqlite3_mem_methods{ 47171 FxMalloc: *(*uintptr)(unsafe.Pointer(&struct { 47172 f func(*libc.TLS, int32) uintptr 47173 }{wrMemMalloc})), FxFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemFree})), FxRealloc: *(*uintptr)(unsafe.Pointer(&struct { 47174 f func(*libc.TLS, uintptr, int32) uintptr 47175 }{wrMemRealloc})), 47176 FxSize: *(*uintptr)(unsafe.Pointer(&struct { 47177 f func(*libc.TLS, uintptr) int32 47178 }{wrMemSize})), FxRoundup: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{wrMemRoundup})), FxInit: *(*uintptr)(unsafe.Pointer(&struct { 47179 f func(*libc.TLS, uintptr) int32 47180 }{wrMemInit})), 47181 FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemShutdown})), 47182 } 47183 47184 libc.Xmemset(tls, uintptr(unsafe.Pointer(&wrapped)), 0, uint64(unsafe.Sizeof(wrapped))) 47185 47186 sqlite3.Xsqlite3_shutdown(tls) 47187 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 47188 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 47189 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 47190 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+24, bp+48)) 47191 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+120)) 47192 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+40, bp+184)) 47193 } 47194 47195 func init_wrapper_install(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47196 bp := tls.Alloc(24) 47197 defer tls.Free(24) 47198 47199 var i int32 47200 installInitWrappers(tls) 47201 for i = 1; i < objc; i++ { 47202 var z uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 47203 if libc.Xstrcmp(tls, z, ts+32544) == 0 { 47204 wrapped.Fmem_fail = 1 47205 } else if libc.Xstrcmp(tls, z, ts+29150) == 0 { 47206 wrapped.Fmutex_fail = 1 47207 } else if libc.Xstrcmp(tls, z, ts+32548) == 0 { 47208 wrapped.Fpcache_fail = 1 47209 } else { 47210 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32555, z, ts+11945)) 47211 return TCL_ERROR 47212 } 47213 } 47214 return TCL_OK 47215 } 47216 47217 func init_wrapper_uninstall(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47218 bp := tls.Alloc(24) 47219 defer tls.Free(24) 47220 47221 if objc != 1 { 47222 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47223 return TCL_ERROR 47224 } 47225 47226 sqlite3.Xsqlite3_shutdown(tls) 47227 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 47228 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 47229 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 47230 return TCL_OK 47231 } 47232 47233 func init_wrapper_clear(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47234 if objc != 1 { 47235 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47236 return TCL_ERROR 47237 } 47238 47239 wrapped.Fmem_fail = 0 47240 wrapped.Fmutex_fail = 0 47241 wrapped.Fpcache_fail = 0 47242 return TCL_OK 47243 } 47244 47245 func init_wrapper_query(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47246 var pRet uintptr 47247 47248 if objc != 1 { 47249 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47250 return TCL_ERROR 47251 } 47252 47253 pRet = tcl.XTcl_NewObj(tls) 47254 if wrapped.Fmutex_init != 0 { 47255 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+29150, -1)) 47256 } 47257 if wrapped.Fmem_init != 0 { 47258 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32544, -1)) 47259 } 47260 if wrapped.Fpcache_init != 0 { 47261 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32548, -1)) 47262 } 47263 47264 tcl.XTcl_SetObjResult(tls, interp, pRet) 47265 return TCL_OK 47266 } 47267 47268 func Sqlitetest_init_Init(tls *libc.TLS, interp uintptr) int32 { 47269 var i int32 47270 47271 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd9))/uint64(unsafe.Sizeof(struct { 47272 FzName uintptr 47273 FxProc uintptr 47274 }{})); i++ { 47275 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd9[i].FzName, aObjCmd9[i].FxProc, uintptr(0), uintptr(0)) 47276 } 47277 47278 return TCL_OK 47279 } 47280 47281 var aObjCmd9 = [4]struct { 47282 FzName uintptr 47283 FxProc uintptr 47284 }{ 47285 {FzName: ts + 32575, FxProc: 0}, 47286 {FzName: ts + 32596, FxProc: 0}, 47287 {FzName: ts + 32615, FxProc: 0}, 47288 {FzName: ts + 32638, FxProc: 0}, 47289 } 47290 47291 type sqlite3_intarray1 = struct { 47292 Fn int32 47293 F__ccgo_pad1 [4]byte 47294 Fa uintptr 47295 FxFree uintptr 47296 } 47297 47298 type sqlite3_intarray = sqlite3_intarray1 47299 47300 type intarray_vtab1 = struct { 47301 Fbase sqlite3_vtab 47302 FpContent uintptr 47303 } 47304 47305 type intarray_vtab = intarray_vtab1 47306 type intarray_cursor1 = struct { 47307 Fbase sqlite3_vtab_cursor 47308 Fi int32 47309 F__ccgo_pad1 [4]byte 47310 } 47311 47312 type intarray_cursor = intarray_cursor1 47313 47314 func intarrayFree(tls *libc.TLS, p uintptr) { 47315 if (*sqlite3_intarray)(unsafe.Pointer(p)).FxFree != 0 { 47316 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(p)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(p)).Fa) 47317 } 47318 sqlite3.Xsqlite3_free(tls, p) 47319 } 47320 47321 func intarrayDestroy(tls *libc.TLS, p uintptr) int32 { 47322 var pVtab uintptr = p 47323 sqlite3.Xsqlite3_free(tls, pVtab) 47324 return 0 47325 } 47326 47327 func intarrayCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 47328 var rc int32 = SQLITE_NOMEM 47329 var pVtab uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_vtab{}))) 47330 47331 if pVtab != 0 { 47332 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(intarray_vtab{}))) 47333 (*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent = pAux 47334 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+32657) 47335 } 47336 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 47337 return rc 47338 } 47339 47340 func intarrayOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 47341 var rc int32 = SQLITE_NOMEM 47342 var pCur uintptr 47343 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_cursor{}))) 47344 if pCur != 0 { 47345 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(intarray_cursor{}))) 47346 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 47347 rc = SQLITE_OK 47348 } 47349 return rc 47350 } 47351 47352 func intarrayClose(tls *libc.TLS, cur uintptr) int32 { 47353 var pCur uintptr = cur 47354 sqlite3.Xsqlite3_free(tls, pCur) 47355 return SQLITE_OK 47356 } 47357 47358 func intarrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 47359 var pCur uintptr = cur 47360 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 47361 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 { 47362 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))) 47363 } 47364 return SQLITE_OK 47365 } 47366 47367 func intarrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 47368 var pCur uintptr = cur 47369 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*intarray_cursor)(unsafe.Pointer(pCur)).Fi) 47370 return SQLITE_OK 47371 } 47372 47373 func intarrayEof(tls *libc.TLS, cur uintptr) int32 { 47374 var pCur uintptr = cur 47375 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 47376 return libc.Bool32((*intarray_cursor)(unsafe.Pointer(pCur)).Fi >= (*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fn) 47377 } 47378 47379 func intarrayNext(tls *libc.TLS, cur uintptr) int32 { 47380 var pCur uintptr = cur 47381 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi++ 47382 return SQLITE_OK 47383 } 47384 47385 func intarrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 47386 var pCur uintptr = pVtabCursor 47387 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi = 0 47388 return SQLITE_OK 47389 } 47390 47391 func intarrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 47392 return SQLITE_OK 47393 } 47394 47395 var intarrayModule = sqlite3_module{ 47396 FxCreate: 0, 47397 FxConnect: 0, 47398 FxBestIndex: 0, 47399 FxDisconnect: 0, 47400 FxDestroy: 0, 47401 FxOpen: 0, 47402 FxClose: 0, 47403 FxFilter: 0, 47404 FxNext: 0, 47405 FxEof: 0, 47406 FxColumn: 0, 47407 FxRowid: 0, 47408 } 47409 47410 func sqlite3_intarray_create(tls *libc.TLS, db uintptr, zName uintptr, ppReturn uintptr) int32 { 47411 bp := tls.Alloc(16) 47412 defer tls.Free(16) 47413 47414 var rc int32 = SQLITE_OK 47415 var p uintptr 47416 47417 *(*uintptr)(unsafe.Pointer(ppReturn)) = libc.AssignUintptr(&p, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_intarray{})))) 47418 if p == uintptr(0) { 47419 return SQLITE_NOMEM 47420 } 47421 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(sqlite3_intarray{}))) 47422 rc = sqlite3.Xsqlite3_create_module_v2(tls, db, zName, uintptr(unsafe.Pointer(&intarrayModule)), p, 47423 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{intarrayFree}))) 47424 if rc == SQLITE_OK { 47425 var zSql uintptr 47426 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+32699, 47427 libc.VaList(bp, zName, zName)) 47428 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 47429 sqlite3.Xsqlite3_free(tls, zSql) 47430 } 47431 return rc 47432 } 47433 47434 func sqlite3_intarray_bind(tls *libc.TLS, pIntArray uintptr, nElements int32, aElements uintptr, xFree uintptr) int32 { 47435 if (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree != 0 { 47436 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa) 47437 } 47438 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fn = nElements 47439 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa = aElements 47440 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree = xFree 47441 return SQLITE_OK 47442 } 47443 47444 func test_intarray_create(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47445 bp := tls.Alloc(148) 47446 defer tls.Free(148) 47447 47448 var zName uintptr 47449 47450 var rc int32 = SQLITE_OK 47451 47452 if objc != 3 { 47453 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 47454 return TCL_ERROR 47455 } 47456 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 47457 return TCL_ERROR 47458 } 47459 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 47460 rc = sqlite3_intarray_create(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, bp+40) 47461 if rc != SQLITE_OK { 47462 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 47463 return TCL_ERROR 47464 } 47465 sqlite3TestMakePointerStr(tls, interp, bp+48, *(*uintptr)(unsafe.Pointer(bp + 40))) 47466 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, bp+48, uintptr(0))) 47467 return TCL_OK 47468 } 47469 47470 func test_intarray_bind(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47471 bp := tls.Alloc(40) 47472 defer tls.Free(40) 47473 47474 var pArray uintptr 47475 var rc int32 = SQLITE_OK 47476 var i int32 47477 var n int32 47478 var a uintptr 47479 47480 if objc < 2 { 47481 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32737) 47482 return TCL_ERROR 47483 } 47484 pArray = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 47485 n = objc - 2 47486 a = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(n)) 47487 if a == uintptr(0) { 47488 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32746, uintptr(0))) 47489 return TCL_ERROR 47490 } 47491 for i = 0; i < n; i++ { 47492 *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) = int64(0) 47493 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + uintptr(i+2)*8)), bp+32) 47494 *(*sqlite3_int64)(unsafe.Pointer(a + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) 47495 } 47496 rc = sqlite3_intarray_bind(tls, pArray, n, a, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47497 if rc != SQLITE_OK { 47498 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 47499 return TCL_ERROR 47500 } 47501 return TCL_OK 47502 } 47503 47504 func Sqlitetestintarray_Init(tls *libc.TLS, interp uintptr) int32 { 47505 var i int32 47506 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd10))/uint64(unsafe.Sizeof(struct { 47507 FzName uintptr 47508 FxProc uintptr 47509 FclientData uintptr 47510 }{})); i++ { 47511 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd10[i].FzName, 47512 aObjCmd10[i].FxProc, aObjCmd10[i].FclientData, uintptr(0)) 47513 } 47514 return TCL_OK 47515 } 47516 47517 var aObjCmd10 = [2]struct { 47518 FzName uintptr 47519 FxProc uintptr 47520 FclientData uintptr 47521 }{ 47522 {FzName: ts + 32759, FxProc: 0}, 47523 {FzName: ts + 32783, FxProc: 0}, 47524 } 47525 47526 type jt_file1 = struct { 47527 Fbase sqlite3_file 47528 FzName uintptr 47529 Fflags int32 47530 FeLock int32 47531 FnPage u32 47532 FnPagesize u32 47533 FpWritable uintptr 47534 FaCksum uintptr 47535 FnSync int32 47536 F__ccgo_pad1 [4]byte 47537 FiMaxOff sqlite3_int64 47538 FpNext uintptr 47539 FpReal uintptr 47540 } 47541 47542 type jt_file = jt_file1 47543 47544 var jt_vfs = sqlite3_vfs{ 47545 FiVersion: 2, 47546 FszOsFile: int32(unsafe.Sizeof(jt_file{})), 47547 FmxPathname: JT_MAX_PATHNAME, 47548 FzName: ts + 32805, 47549 FxOpen: 0, 47550 FxDelete: 0, 47551 FxAccess: 0, 47552 FxFullPathname: 0, 47553 FxDlOpen: 0, 47554 FxDlError: 0, 47555 FxDlSym: 0, 47556 FxDlClose: 0, 47557 FxRandomness: 0, 47558 FxSleep: 0, 47559 FxCurrentTime: 0, 47560 FxGetLastError: 0, 47561 FxCurrentTimeInt64: 0, 47562 } 47563 47564 var jt_io_methods = sqlite3_io_methods{ 47565 FiVersion: 1, 47566 FxClose: 0, 47567 FxRead: 0, 47568 FxWrite: 0, 47569 FxTruncate: 0, 47570 FxSync: 0, 47571 FxFileSize: 0, 47572 FxLock: 0, 47573 FxUnlock: 0, 47574 FxCheckReservedLock: 0, 47575 FxFileControl: 0, 47576 FxSectorSize: 0, 47577 FxDeviceCharacteristics: 0, 47578 } 47579 47580 type JtGlobal = struct { 47581 FpVfs uintptr 47582 FpList uintptr 47583 } 47584 47585 var g2 = JtGlobal{} 47586 47587 func enterJtMutex(tls *libc.TLS) { 47588 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 47589 } 47590 47591 func leaveJtMutex(tls *libc.TLS) { 47592 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 47593 } 47594 47595 func stop_ioerr_simulation(tls *libc.TLS, piSave uintptr, piSave2 uintptr) { 47596 *(*int32)(unsafe.Pointer(piSave)) = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 47597 *(*int32)(unsafe.Pointer(piSave2)) = sqlite3.Xsqlite3_io_error_hit 47598 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(-1)) 47599 sqlite3.Xsqlite3_io_error_hit = 0 47600 } 47601 47602 func start_ioerr_simulation(tls *libc.TLS, iSave int32, iSave2 int32) { 47603 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, iSave) 47604 sqlite3.Xsqlite3_io_error_hit = iSave2 47605 } 47606 47607 func closeTransaction(tls *libc.TLS, p uintptr) { 47608 sqlite3.Xsqlite3BitvecDestroy(tls, (*jt_file)(unsafe.Pointer(p)).FpWritable) 47609 sqlite3.Xsqlite3_free(tls, (*jt_file)(unsafe.Pointer(p)).FaCksum) 47610 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 47611 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 47612 (*jt_file)(unsafe.Pointer(p)).FnSync = 0 47613 } 47614 47615 func jtClose(tls *libc.TLS, pFile uintptr) int32 { 47616 var pp uintptr 47617 var p uintptr = pFile 47618 47619 closeTransaction(tls, p) 47620 enterJtMutex(tls) 47621 if (*jt_file)(unsafe.Pointer(p)).FzName != 0 { 47622 for pp = uintptr(unsafe.Pointer(&g2)) + 8; *(*uintptr)(unsafe.Pointer(pp)) != p; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 47623 } 47624 *(*uintptr)(unsafe.Pointer(pp)) = (*jt_file)(unsafe.Pointer(p)).FpNext 47625 } 47626 leaveJtMutex(tls) 47627 sqlite3.Xsqlite3OsClose(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 47628 return SQLITE_OK 47629 } 47630 47631 func jtRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 47632 var p uintptr = pFile 47633 return sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 47634 } 47635 47636 func locateDatabaseHandle(tls *libc.TLS, zJournal uintptr, noLock int32) uintptr { 47637 var pMain uintptr = uintptr(0) 47638 enterJtMutex(tls) 47639 for pMain = g2.FpList; pMain != 0; pMain = (*jt_file)(unsafe.Pointer(pMain)).FpNext { 47640 var nName int32 = int32(libc.Xstrlen(tls, zJournal) - libc.Xstrlen(tls, ts+32808)) 47641 if (*jt_file)(unsafe.Pointer(pMain)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && 47642 int32(libc.Xstrlen(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName)) == nName && 47643 0 == libc.Xmemcmp(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName, zJournal, uint64(nName)) && 47644 ((*jt_file)(unsafe.Pointer(pMain)).FeLock >= SQLITE_LOCK_RESERVED || noLock != 0) { 47645 break 47646 } 47647 } 47648 leaveJtMutex(tls) 47649 return pMain 47650 } 47651 47652 func decodeUint32(tls *libc.TLS, z uintptr) u32 { 47653 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)))) 47654 } 47655 47656 func genCksum(tls *libc.TLS, z uintptr, n int32) u32 { 47657 var i int32 47658 var cksum u32 = u32(0) 47659 for i = 0; i < n; i++ { 47660 cksum = cksum + u32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) + cksum<<3 47661 } 47662 return cksum 47663 } 47664 47665 func decodeJournalHdr(tls *libc.TLS, zBuf uintptr, pnRec uintptr, pnPage uintptr, pnSector uintptr, pnPagesize uintptr) int32 { 47666 bp := tls.Alloc(8) 47667 defer tls.Free(8) 47668 47669 *(*[8]uint8)(unsafe.Pointer(bp)) = [8]uint8{uint8(0xd9), uint8(0xd5), uint8(0x05), uint8(0xf9), uint8(0x20), uint8(0xa1), uint8(0x63), uint8(0xd7)} 47670 if libc.Xmemcmp(tls, bp, zBuf, uint64(8)) != 0 { 47671 return SQLITE_ERROR 47672 } 47673 if pnRec != 0 { 47674 *(*u32)(unsafe.Pointer(pnRec)) = decodeUint32(tls, zBuf+8) 47675 } 47676 if pnPage != 0 { 47677 *(*u32)(unsafe.Pointer(pnPage)) = decodeUint32(tls, zBuf+16) 47678 } 47679 if pnSector != 0 { 47680 *(*u32)(unsafe.Pointer(pnSector)) = decodeUint32(tls, zBuf+20) 47681 } 47682 if pnPagesize != 0 { 47683 *(*u32)(unsafe.Pointer(pnPagesize)) = decodeUint32(tls, zBuf+24) 47684 } 47685 return SQLITE_OK 47686 } 47687 47688 func openTransaction(tls *libc.TLS, pMain uintptr, pJournal uintptr) int32 { 47689 bp := tls.Alloc(8) 47690 defer tls.Free(8) 47691 47692 var aData uintptr 47693 var p uintptr = (*jt_file)(unsafe.Pointer(pMain)).FpReal 47694 var rc int32 = SQLITE_OK 47695 47696 closeTransaction(tls, pMain) 47697 aData = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 47698 (*jt_file)(unsafe.Pointer(pMain)).FpWritable = sqlite3.Xsqlite3BitvecCreate(tls, (*jt_file)(unsafe.Pointer(pMain)).FnPage) 47699 (*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)))) 47700 (*jt_file)(unsafe.Pointer(pJournal)).FiMaxOff = int64(0) 47701 47702 if !(int32((*jt_file)(unsafe.Pointer(pMain)).FpWritable) != 0) || !(int32((*jt_file)(unsafe.Pointer(pMain)).FaCksum) != 0) || !(aData != 0) { 47703 rc = SQLITE_IOERR | int32(12)<<8 47704 } else if (*jt_file)(unsafe.Pointer(pMain)).FnPage > u32(0) { 47705 var iTrunk u32 47706 47707 stop_ioerr_simulation(tls, bp, bp+4) 47708 47709 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), int64(0)) 47710 if rc == SQLITE_OK { 47711 var nDbsize u32 = decodeUint32(tls, aData+28) 47712 if nDbsize > u32(0) && libc.Xmemcmp(tls, aData+24, aData+92, uint64(4)) == 0 { 47713 var iPg u32 47714 for iPg = nDbsize + u32(1); iPg <= (*jt_file)(unsafe.Pointer(pMain)).FnPage; iPg++ { 47715 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, iPg) 47716 } 47717 } 47718 } 47719 iTrunk = decodeUint32(tls, aData+32) 47720 for rc == SQLITE_OK && iTrunk > u32(0) { 47721 var nLeaf u32 47722 var iLeaf u32 47723 var iOff sqlite3_int64 = i64(iTrunk-u32(1)) * i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 47724 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 47725 nLeaf = decodeUint32(tls, aData+4) 47726 for iLeaf = u32(0); rc == SQLITE_OK && iLeaf < nLeaf; iLeaf++ { 47727 var pgno u32 = decodeUint32(tls, aData+uintptr(u32(8)+u32(4)*iLeaf)) 47728 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 47729 } 47730 iTrunk = decodeUint32(tls, aData) 47731 } 47732 47733 if rc == SQLITE_OK { 47734 var ii int32 47735 for ii = 0; rc == SQLITE_OK && ii < int32((*jt_file)(unsafe.Pointer(pMain)).FnPage); ii++ { 47736 var iOff i64 = i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) * i64(ii) 47737 if iOff == i64(sqlite3.Xsqlite3PendingByte) { 47738 continue 47739 } 47740 rc = sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(pMain)).FpReal, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 47741 *(*u32)(unsafe.Pointer((*jt_file)(unsafe.Pointer(pMain)).FaCksum + uintptr(ii)*4)) = genCksum(tls, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 47742 if ii+1 == int32((*jt_file)(unsafe.Pointer(pMain)).FnPage) && rc == SQLITE_IOERR|int32(2)<<8 { 47743 rc = SQLITE_OK 47744 } 47745 } 47746 } 47747 47748 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 47749 } 47750 47751 sqlite3.Xsqlite3_free(tls, aData) 47752 return rc 47753 } 47754 47755 func readJournalFile(tls *libc.TLS, p uintptr, pMain uintptr) int32 { 47756 bp := tls.Alloc(52) 47757 defer tls.Free(52) 47758 47759 var rc int32 47760 47761 var pReal uintptr 47762 var iOff sqlite3_int64 47763 var iSize sqlite3_int64 47764 var aPage uintptr 47765 47766 var cksum u32 47767 _ = cksum 47768 var pgno u32 47769 47770 var ii u32 47771 rc = SQLITE_OK 47772 pReal = (*jt_file)(unsafe.Pointer(p)).FpReal 47773 iOff = int64(0) 47774 iSize = (*jt_file)(unsafe.Pointer(p)).FiMaxOff 47775 47776 aPage = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 47777 if !!(aPage != 0) { 47778 goto __1 47779 } 47780 return SQLITE_IOERR | int32(12)<<8 47781 __1: 47782 ; 47783 stop_ioerr_simulation(tls, bp, bp+4) 47784 47785 __2: 47786 if !(rc == SQLITE_OK && iOff < iSize) { 47787 goto __3 47788 } 47789 47790 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 47791 if !(rc != SQLITE_OK || 47792 decodeJournalHdr(tls, bp+8, bp+36, bp+40, bp+44, bp+48) != 0) { 47793 goto __4 47794 } 47795 goto finish_rjf 47796 __4: 47797 ; 47798 iOff = iOff + sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) 47799 47800 if !(*(*u32)(unsafe.Pointer(bp + 36)) == u32(0)) { 47801 goto __5 47802 } 47803 47804 if !(iSize >= iOff+sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44)))) { 47805 goto __6 47806 } 47807 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 47808 if !(rc != SQLITE_OK || 0 == decodeJournalHdr(tls, bp+8, uintptr(0), uintptr(0), uintptr(0), uintptr(0))) { 47809 goto __7 47810 } 47811 goto __2 47812 __7: 47813 ; 47814 __6: 47815 ; 47816 *(*u32)(unsafe.Pointer(bp + 36)) = u32((iSize - iOff) / sqlite3_int64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize+u32(8))) 47817 __5: 47818 ; 47819 ii = u32(0) 47820 __8: 47821 if !(rc == SQLITE_OK && ii < *(*u32)(unsafe.Pointer(bp + 36)) && iOff < iSize) { 47822 goto __10 47823 } 47824 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 4, iOff) 47825 if !(rc == SQLITE_OK) { 47826 goto __11 47827 } 47828 pgno = decodeUint32(tls, bp+8) 47829 if !(pgno > u32(0) && pgno <= (*jt_file)(unsafe.Pointer(pMain)).FnPage) { 47830 goto __12 47831 } 47832 if !(0 == sqlite3.Xsqlite3BitvecTest(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno)) { 47833 goto __13 47834 } 47835 rc = sqlite3.Xsqlite3OsRead(tls, pReal, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff+int64(4)) 47836 if !(rc == SQLITE_OK) { 47837 goto __14 47838 } 47839 cksum = genCksum(tls, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 47840 47841 __14: 47842 ; 47843 __13: 47844 ; 47845 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 47846 __12: 47847 ; 47848 iOff = iOff + sqlite3_int64(u32(8)+(*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 47849 __11: 47850 ; 47851 goto __9 47852 __9: 47853 ii++ 47854 goto __8 47855 goto __10 47856 __10: 47857 ; 47858 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))) 47859 goto __2 47860 __3: 47861 ; 47862 finish_rjf: 47863 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 47864 sqlite3.Xsqlite3_free(tls, aPage) 47865 if !(rc == SQLITE_IOERR|int32(2)<<8) { 47866 goto __15 47867 } 47868 rc = SQLITE_OK 47869 __15: 47870 ; 47871 return rc 47872 } 47873 47874 func jtWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 47875 var rc int32 47876 var p uintptr = pFile 47877 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 47878 if iOfst == int64(0) { 47879 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 47880 47881 if iAmt == 28 { 47882 closeTransaction(tls, pMain) 47883 } else if iAmt != 12 { 47884 var z uintptr = zBuf 47885 (*jt_file)(unsafe.Pointer(pMain)).FnPage = decodeUint32(tls, z+16) 47886 (*jt_file)(unsafe.Pointer(pMain)).FnPagesize = decodeUint32(tls, z+24) 47887 if SQLITE_OK != libc.AssignInt32(&rc, openTransaction(tls, pMain, p)) { 47888 return rc 47889 } 47890 } 47891 } 47892 if (*jt_file)(unsafe.Pointer(p)).FiMaxOff < iOfst+sqlite_int64(iAmt) { 47893 (*jt_file)(unsafe.Pointer(p)).FiMaxOff = iOfst + sqlite_int64(iAmt) 47894 } 47895 } 47896 47897 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 47898 if iAmt < int32((*jt_file)(unsafe.Pointer(p)).FnPagesize) && 47899 (*jt_file)(unsafe.Pointer(p)).FnPagesize%u32(iAmt) == u32(0) && 47900 iOfst >= sqlite_int64(sqlite3.Xsqlite3PendingByte+512) && 47901 iOfst+sqlite_int64(iAmt) <= sqlite_int64(u32(sqlite3.Xsqlite3PendingByte)+(*jt_file)(unsafe.Pointer(p)).FnPagesize) { 47902 } else { 47903 var pgno u32 = u32(iOfst/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)) 47904 _ = pgno 47905 47906 } 47907 } 47908 47909 rc = sqlite3.Xsqlite3OsWrite(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 47910 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && iAmt == 12 { 47911 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 47912 var rc2 int32 = readJournalFile(tls, p, pMain) 47913 if rc == SQLITE_OK { 47914 rc = rc2 47915 } 47916 } 47917 return rc 47918 } 47919 47920 func jtTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 47921 var p uintptr = pFile 47922 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && size == int64(0) { 47923 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 47924 closeTransaction(tls, pMain) 47925 } 47926 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 47927 var pgno u32 47928 var locking_page u32 = u32(sqlite3.Xsqlite3PendingByte)/(*jt_file)(unsafe.Pointer(p)).FnPagesize + u32(1) 47929 _ = locking_page 47930 for pgno = u32(size/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)); pgno <= (*jt_file)(unsafe.Pointer(p)).FnPage; pgno++ { 47931 } 47932 } 47933 return sqlite3.Xsqlite3OsTruncate(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, size) 47934 } 47935 47936 func jtSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 47937 var p uintptr = pFile 47938 47939 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 47940 var rc int32 47941 var pMain uintptr 47942 47943 pMain = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 47944 47945 if pMain != 0 && (*jt_file)(unsafe.Pointer(pMain)).FpWritable != 0 { 47946 (*jt_file)(unsafe.Pointer(pMain)).FnSync++ 47947 rc = readJournalFile(tls, p, pMain) 47948 if rc != SQLITE_OK { 47949 return rc 47950 } 47951 } 47952 } 47953 47954 return sqlite3.Xsqlite3OsSync(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, flags) 47955 } 47956 47957 func jtFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 47958 var p uintptr = pFile 47959 return sqlite3.Xsqlite3OsFileSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pSize) 47960 } 47961 47962 func jtLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 47963 var rc int32 47964 var p uintptr = pFile 47965 rc = sqlite3.Xsqlite3OsLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 47966 if rc == SQLITE_OK && eLock > (*jt_file)(unsafe.Pointer(p)).FeLock { 47967 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 47968 } 47969 return rc 47970 } 47971 47972 func jtUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 47973 var rc int32 47974 var p uintptr = pFile 47975 rc = sqlite3.Xsqlite3OsUnlock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 47976 if rc == SQLITE_OK && eLock < (*jt_file)(unsafe.Pointer(p)).FeLock { 47977 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 47978 } 47979 return rc 47980 } 47981 47982 func jtCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 47983 var p uintptr = pFile 47984 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pResOut) 47985 } 47986 47987 func jtFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 47988 var p uintptr = pFile 47989 return (*struct { 47990 f func(*libc.TLS, uintptr, int32, uintptr) int32 47991 })(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) 47992 } 47993 47994 func jtSectorSize(tls *libc.TLS, pFile uintptr) int32 { 47995 var p uintptr = pFile 47996 return sqlite3.Xsqlite3OsSectorSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 47997 } 47998 47999 func jtDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 48000 var p uintptr = pFile 48001 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48002 } 48003 48004 func jtOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 48005 var rc int32 48006 var p uintptr = pFile 48007 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 48008 (*jt_file)(unsafe.Pointer(p)).FpReal = p + 1*80 48009 (*sqlite3_file)(unsafe.Pointer((*jt_file)(unsafe.Pointer(p)).FpReal)).FpMethods = uintptr(0) 48010 rc = sqlite3.Xsqlite3OsOpen(tls, g2.FpVfs, zName, (*jt_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 48011 48012 if rc == SQLITE_OK { 48013 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&jt_io_methods)) 48014 (*jt_file)(unsafe.Pointer(p)).FeLock = 0 48015 (*jt_file)(unsafe.Pointer(p)).FzName = zName 48016 (*jt_file)(unsafe.Pointer(p)).Fflags = flags 48017 (*jt_file)(unsafe.Pointer(p)).FpNext = uintptr(0) 48018 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 48019 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 48020 enterJtMutex(tls) 48021 if zName != 0 { 48022 (*jt_file)(unsafe.Pointer(p)).FpNext = g2.FpList 48023 g2.FpList = p 48024 } 48025 leaveJtMutex(tls) 48026 } 48027 return rc 48028 } 48029 48030 func jtDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 48031 var nPath int32 = int32(libc.Xstrlen(tls, zPath)) 48032 if nPath > 8 && 0 == libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nPath-8)) { 48033 var pMain uintptr = locateDatabaseHandle(tls, zPath, 0) 48034 if pMain != 0 { 48035 closeTransaction(tls, pMain) 48036 } 48037 } 48038 48039 return sqlite3.Xsqlite3OsDelete(tls, g2.FpVfs, zPath, dirSync) 48040 } 48041 48042 func jtAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 48043 return sqlite3.Xsqlite3OsAccess(tls, g2.FpVfs, zPath, flags, pResOut) 48044 } 48045 48046 func jtFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 48047 return sqlite3.Xsqlite3OsFullPathname(tls, g2.FpVfs, zPath, nOut, zOut) 48048 } 48049 48050 func jtDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 48051 return (*struct { 48052 f func(*libc.TLS, uintptr, uintptr) uintptr 48053 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlOpen})).f(tls, g2.FpVfs, zPath) 48054 } 48055 48056 func jtDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 48057 (*struct { 48058 f func(*libc.TLS, uintptr, int32, uintptr) 48059 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlError})).f(tls, g2.FpVfs, nByte, zErrMsg) 48060 } 48061 48062 func jtDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 48063 return (*struct { 48064 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 48065 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlSym})).f(tls, g2.FpVfs, p, zSym) 48066 } 48067 48068 func jtDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 48069 (*struct { 48070 f func(*libc.TLS, uintptr, uintptr) 48071 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlClose})).f(tls, g2.FpVfs, pHandle) 48072 } 48073 48074 func jtRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 48075 return sqlite3.Xsqlite3OsRandomness(tls, g2.FpVfs, nByte, zBufOut) 48076 } 48077 48078 func jtSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 48079 return sqlite3.Xsqlite3OsSleep(tls, g2.FpVfs, nMicro) 48080 } 48081 48082 func jtCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48083 return (*struct { 48084 f func(*libc.TLS, uintptr, uintptr) int32 48085 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTime})).f(tls, g2.FpVfs, pTimeOut) 48086 } 48087 48088 func jtCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48089 return (*struct { 48090 f func(*libc.TLS, uintptr, uintptr) int32 48091 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64})).f(tls, g2.FpVfs, pTimeOut) 48092 } 48093 48094 func jtGetLastError(tls *libc.TLS, pVfs uintptr, n int32, z uintptr) int32 { 48095 return (*struct { 48096 f func(*libc.TLS, uintptr, int32, uintptr) int32 48097 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxGetLastError})).f(tls, g2.FpVfs, n, z) 48098 } 48099 48100 func jt_register(tls *libc.TLS, zWrap uintptr, isDefault int32) int32 { 48101 g2.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, zWrap) 48102 if g2.FpVfs == uintptr(0) { 48103 return SQLITE_ERROR 48104 } 48105 jt_vfs.FszOsFile = int32(uint64(unsafe.Sizeof(jt_file{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FszOsFile)) 48106 if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FiVersion == 1 { 48107 jt_vfs.FiVersion = 1 48108 } else if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64 == uintptr(0) { 48109 jt_vfs.FxCurrentTimeInt64 = uintptr(0) 48110 } 48111 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&jt_vfs)), isDefault) 48112 return SQLITE_OK 48113 } 48114 48115 func jt_unregister(tls *libc.TLS) { 48116 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&jt_vfs))) 48117 } 48118 48119 type MemFault = struct { 48120 FiCountdown int32 48121 FnRepeat int32 48122 FnBenign int32 48123 FnFail int32 48124 FnOkBefore int32 48125 FnOkAfter int32 48126 Fenable u8 48127 F__ccgo_pad1 [3]byte 48128 FisInstalled int32 48129 FisBenignMode int32 48130 F__ccgo_pad2 [4]byte 48131 Fm sqlite3_mem_methods 48132 } 48133 48134 var memfault MemFault 48135 48136 func sqlite3Fault(tls *libc.TLS) { 48137 cnt1++ 48138 } 48139 48140 var cnt1 int32 = 0 48141 48142 func sqlite3FirstFault(tls *libc.TLS) { 48143 cnt2++ 48144 } 48145 48146 var cnt2 int32 = 0 48147 48148 func faultsimStep(tls *libc.TLS) int32 { 48149 if !(int32(memfault.Fenable) != 0) { 48150 memfault.FnOkAfter++ 48151 return 0 48152 } 48153 if memfault.FiCountdown > 0 { 48154 memfault.FiCountdown-- 48155 memfault.FnOkBefore++ 48156 return 0 48157 } 48158 if memfault.FnFail == 0 { 48159 sqlite3FirstFault(tls) 48160 } 48161 sqlite3Fault(tls) 48162 memfault.FnFail++ 48163 if memfault.FisBenignMode > 0 { 48164 memfault.FnBenign++ 48165 } 48166 memfault.FnRepeat-- 48167 if memfault.FnRepeat <= 0 { 48168 memfault.Fenable = u8(0) 48169 } 48170 return 1 48171 } 48172 48173 func faultsimMalloc(tls *libc.TLS, n int32) uintptr { 48174 var p uintptr = uintptr(0) 48175 if !(faultsimStep(tls) != 0) { 48176 p = (*struct { 48177 f func(*libc.TLS, int32) uintptr 48178 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxMalloc})).f(tls, n) 48179 } 48180 return p 48181 } 48182 48183 func faultsimRealloc(tls *libc.TLS, pOld uintptr, n int32) uintptr { 48184 var p uintptr = uintptr(0) 48185 if !(faultsimStep(tls) != 0) { 48186 p = (*struct { 48187 f func(*libc.TLS, uintptr, int32) uintptr 48188 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxRealloc})).f(tls, pOld, n) 48189 } 48190 return p 48191 } 48192 48193 func faultsimConfig(tls *libc.TLS, nDelay int32, nRepeat int32) { 48194 memfault.FiCountdown = nDelay 48195 memfault.FnRepeat = nRepeat 48196 memfault.FnBenign = 0 48197 memfault.FnFail = 0 48198 memfault.FnOkBefore = 0 48199 memfault.FnOkAfter = 0 48200 memfault.Fenable = u8(libc.Bool32(nDelay >= 0)) 48201 48202 memfault.FisBenignMode = 0 48203 } 48204 48205 func faultsimFailures(tls *libc.TLS) int32 { 48206 return memfault.FnFail 48207 } 48208 48209 func faultsimBenignFailures(tls *libc.TLS) int32 { 48210 return memfault.FnBenign 48211 } 48212 48213 func faultsimPending(tls *libc.TLS) int32 { 48214 if memfault.Fenable != 0 { 48215 return memfault.FiCountdown 48216 } else { 48217 return -1 48218 } 48219 return int32(0) 48220 } 48221 48222 func faultsimBeginBenign(tls *libc.TLS) { 48223 memfault.FisBenignMode++ 48224 } 48225 48226 func faultsimEndBenign(tls *libc.TLS) { 48227 memfault.FisBenignMode-- 48228 } 48229 48230 func faultsimInstall(tls *libc.TLS, install int32) int32 { 48231 bp := tls.Alloc(200) 48232 defer tls.Free(200) 48233 48234 var rc int32 48235 48236 install = func() int32 { 48237 if install != 0 { 48238 return 1 48239 } 48240 return 0 48241 }() 48242 48243 if install == memfault.FisInstalled { 48244 return SQLITE_ERROR 48245 } 48246 48247 if install != 0 { 48248 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp, uintptr(unsafe.Pointer(&memfault))+40)) 48249 48250 if rc == SQLITE_OK { 48251 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)) = memfault.Fm 48252 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxMalloc = *(*uintptr)(unsafe.Pointer(&struct { 48253 f func(*libc.TLS, int32) uintptr 48254 }{faultsimMalloc})) 48255 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxRealloc = *(*uintptr)(unsafe.Pointer(&struct { 48256 f func(*libc.TLS, uintptr, int32) uintptr 48257 }{faultsimRealloc})) 48258 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, bp+72)) 48259 } 48260 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 48261 libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimBeginBenign})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimEndBenign})))) 48262 } else { 48263 libc.Xmemset(tls, bp+136, 0, uint64(unsafe.Sizeof(sqlite3_mem_methods{}))) 48264 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+136)) 48265 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+40, bp+136)) 48266 48267 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+48, uintptr(unsafe.Pointer(&memfault))+40)) 48268 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 48269 libc.VaList(bp+56, uintptr(0), uintptr(0))) 48270 } 48271 48272 if rc == SQLITE_OK { 48273 memfault.FisInstalled = 1 48274 } 48275 return rc 48276 } 48277 48278 func pointerToText(tls *libc.TLS, p uintptr, z uintptr) { 48279 bp := tls.Alloc(20) 48280 defer tls.Free(20) 48281 *(*uintptr)(unsafe.Pointer(bp + 8)) = p 48282 48283 var i int32 48284 var k int32 48285 48286 if *(*uintptr)(unsafe.Pointer(bp + 8)) == uintptr(0) { 48287 libc.Xstrcpy(tls, z, ts+14193) 48288 return 48289 } 48290 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48291 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 48292 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48293 libc.Xmemcpy(tls, bp+16, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 48294 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = sqlite3_uint64(*(*uint32)(unsafe.Pointer(bp + 16))) 48295 } else { 48296 } 48297 i = 0 48298 k = int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) - uint64(1)) 48299 __1: 48300 if !(uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2)) { 48301 goto __3 48302 } 48303 { 48304 *(*int8)(unsafe.Pointer(z + uintptr(k))) = zHex[*(*sqlite3_uint64)(unsafe.Pointer(bp))&uint64(0xf)] 48305 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 4 48306 48307 } 48308 goto __2 48309 __2: 48310 i++ 48311 k-- 48312 goto __1 48313 goto __3 48314 __3: 48315 ; 48316 *(*int8)(unsafe.Pointer(z + 16)) = int8(0) 48317 } 48318 48319 var zHex = *(*[17]int8)(unsafe.Pointer(ts + 31194)) 48320 48321 func hexToInt(tls *libc.TLS, h int32) int32 { 48322 if h >= '0' && h <= '9' { 48323 return h - '0' 48324 } else if h >= 'a' && h <= 'f' { 48325 return h - 'a' + 10 48326 } else { 48327 return -1 48328 } 48329 return int32(0) 48330 } 48331 48332 func textToPointer(tls *libc.TLS, z uintptr, pp uintptr) int32 { 48333 bp := tls.Alloc(12) 48334 defer tls.Free(12) 48335 48336 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(0) 48337 var i int32 48338 48339 for i = 0; uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) && *(*int8)(unsafe.Pointer(z)) != 0; i++ { 48340 var v int32 48341 v = hexToInt(tls, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) 48342 if v < 0 { 48343 return TCL_ERROR 48344 } 48345 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = *(*sqlite3_uint64)(unsafe.Pointer(bp))*uint64(16) + sqlite3_uint64(v) 48346 } 48347 if int32(*(*int8)(unsafe.Pointer(z))) != 0 { 48348 return TCL_ERROR 48349 } 48350 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48351 libc.Xmemcpy(tls, pp, bp, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 48352 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 48353 *(*uint32)(unsafe.Pointer(bp + 8)) = uint32(*(*sqlite3_uint64)(unsafe.Pointer(bp))) 48354 libc.Xmemcpy(tls, pp, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 48355 } else { 48356 } 48357 return TCL_OK 48358 } 48359 48360 func test_malloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48361 bp := tls.Alloc(120) 48362 defer tls.Free(120) 48363 48364 var p uintptr 48365 48366 if objc != 2 { 48367 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32817) 48368 return TCL_ERROR 48369 } 48370 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 48371 return TCL_ERROR 48372 } 48373 p = sqlite3.Xsqlite3_malloc(tls, int32(uint32(*(*int32)(unsafe.Pointer(bp + 16))))) 48374 pointerToText(tls, p, bp+20) 48375 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+20, uintptr(0))) 48376 return TCL_OK 48377 } 48378 48379 func test_realloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48380 bp := tls.Alloc(156) 48381 defer tls.Free(156) 48382 48383 var p uintptr 48384 48385 if objc != 3 { 48386 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32824) 48387 return TCL_ERROR 48388 } 48389 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 48390 return TCL_ERROR 48391 } 48392 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 48393 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48394 return TCL_ERROR 48395 } 48396 p = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), int32(uint32(*(*int32)(unsafe.Pointer(bp + 40))))) 48397 pointerToText(tls, p, bp+56) 48398 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+56, uintptr(0))) 48399 return TCL_OK 48400 } 48401 48402 func test_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48403 bp := tls.Alloc(32) 48404 defer tls.Free(32) 48405 48406 if objc != 2 { 48407 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32851) 48408 return TCL_ERROR 48409 } 48410 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 48411 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48412 return TCL_ERROR 48413 } 48414 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 48415 return TCL_OK 48416 } 48417 48418 func test_memset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48419 bp := tls.Alloc(172) 48420 defer tls.Free(172) 48421 48422 var i int32 48423 var zHex uintptr 48424 var zOut uintptr 48425 48426 if objc != 4 { 48427 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32857) 48428 return TCL_ERROR 48429 } 48430 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 48431 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48432 return TCL_ERROR 48433 } 48434 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 48435 return TCL_ERROR 48436 } 48437 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 48438 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 48439 return TCL_ERROR 48440 } 48441 zHex = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+68) 48442 if uint64(*(*int32)(unsafe.Pointer(bp + 68))) > uint64(unsafe.Sizeof([100]int8{}))*uint64(2) { 48443 *(*int32)(unsafe.Pointer(bp + 68)) = int32(uint64(unsafe.Sizeof([100]int8{})) * uint64(2)) 48444 } 48445 *(*int32)(unsafe.Pointer(bp + 68)) = sqlite3TestHexToBin(tls, zHex, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 48446 if *(*int32)(unsafe.Pointer(bp + 68)) == 0 { 48447 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+32896, uintptr(0))) 48448 return TCL_ERROR 48449 } 48450 zOut = *(*uintptr)(unsafe.Pointer(bp + 56)) 48451 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 48452 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i%*(*int32)(unsafe.Pointer(bp + 68))))) 48453 } 48454 return TCL_OK 48455 } 48456 48457 func test_memget(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48458 bp := tls.Alloc(168) 48459 defer tls.Free(168) 48460 48461 var n int32 48462 var zBin uintptr 48463 48464 if objc != 3 { 48465 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32904) 48466 return TCL_ERROR 48467 } 48468 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 48469 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 48470 return TCL_ERROR 48471 } 48472 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 48473 return TCL_ERROR 48474 } 48475 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 48476 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 48477 return TCL_ERROR 48478 } 48479 zBin = *(*uintptr)(unsafe.Pointer(bp + 56)) 48480 for *(*int32)(unsafe.Pointer(bp + 64)) > 0 { 48481 if uint64(*(*int32)(unsafe.Pointer(bp + 64))) > (uint64(unsafe.Sizeof([100]int8{}))-uint64(1))/uint64(2) { 48482 n = int32((uint64(unsafe.Sizeof([100]int8{})) - uint64(1)) / uint64(2)) 48483 } else { 48484 n = *(*int32)(unsafe.Pointer(bp + 64)) 48485 } 48486 libc.Xmemcpy(tls, bp+68, zBin, uint64(n)) 48487 zBin += uintptr(n) 48488 *(*int32)(unsafe.Pointer(bp + 64)) -= n 48489 sqlite3TestBinToHex(tls, bp+68, n) 48490 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+68, uintptr(0))) 48491 } 48492 return TCL_OK 48493 } 48494 48495 func test_memory_used(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48496 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_used(tls))) 48497 return TCL_OK 48498 } 48499 48500 func test_memory_highwater(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48501 bp := tls.Alloc(4) 48502 defer tls.Free(4) 48503 48504 *(*int32)(unsafe.Pointer(bp)) = 0 48505 if objc != 1 && objc != 2 { 48506 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32917) 48507 return TCL_ERROR 48508 } 48509 if objc == 2 { 48510 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 48511 return TCL_ERROR 48512 } 48513 } 48514 tcl.XTcl_SetObjResult(tls, interp, 48515 tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_highwater(tls, *(*int32)(unsafe.Pointer(bp))))) 48516 return TCL_OK 48517 } 48518 48519 func test_memdebug_backtrace(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48520 bp := tls.Alloc(4) 48521 defer tls.Free(4) 48522 48523 if objc != 2 { 48524 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32925) 48525 return TCL_ERROR 48526 } 48527 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 48528 return TCL_ERROR 48529 } 48530 return TCL_OK 48531 } 48532 48533 func test_memdebug_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48534 if objc != 2 { 48535 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 48536 return TCL_ERROR 48537 } 48538 return TCL_OK 48539 } 48540 48541 func test_memdebug_malloc_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48542 var nMalloc int32 = -1 48543 if objc != 1 { 48544 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48545 return TCL_ERROR 48546 } 48547 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nMalloc)) 48548 return TCL_OK 48549 } 48550 48551 func test_memdebug_fail(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48552 bp := tls.Alloc(36) 48553 defer tls.Free(36) 48554 48555 var ii int32 48556 48557 *(*int32)(unsafe.Pointer(bp + 32)) = 1 48558 var pBenignCnt uintptr = uintptr(0) 48559 var nBenign int32 48560 var nFail int32 = 0 48561 48562 if objc < 2 { 48563 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32939) 48564 return TCL_ERROR 48565 } 48566 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24) != 0 { 48567 return TCL_ERROR 48568 } 48569 48570 for ii = 2; ii < objc; ii = ii + 2 { 48571 var zOption uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii)*8)), bp+28) 48572 var zErr uintptr = uintptr(0) 48573 48574 if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32957, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 48575 if ii == objc-1 { 48576 zErr = ts + 12638 48577 } else { 48578 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)), bp+32) != 0 { 48579 return TCL_ERROR 48580 } 48581 } 48582 } else if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32965, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 48583 if ii == objc-1 { 48584 zErr = ts + 12638 48585 } else { 48586 pBenignCnt = *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)) 48587 } 48588 } else { 48589 zErr = ts + 12444 48590 } 48591 48592 if zErr != 0 { 48593 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErr, zOption, 0)) 48594 return TCL_ERROR 48595 } 48596 } 48597 48598 nBenign = faultsimBenignFailures(tls) 48599 nFail = faultsimFailures(tls) 48600 faultsimConfig(tls, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32))) 48601 48602 if pBenignCnt != 0 { 48603 tcl.XTcl_ObjSetVar2(tls, interp, pBenignCnt, uintptr(0), tcl.XTcl_NewIntObj(tls, nBenign), 0) 48604 } 48605 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nFail)) 48606 return TCL_OK 48607 } 48608 48609 func test_memdebug_pending(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48610 var nPending int32 48611 if objc != 1 { 48612 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48613 return TCL_ERROR 48614 } 48615 nPending = faultsimPending(tls) 48616 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPending)) 48617 return TCL_OK 48618 } 48619 48620 var sqlite3_memdebug_title_count int32 = 0 48621 48622 func test_memdebug_settitle(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48623 sqlite3_memdebug_title_count++ 48624 if objc != 2 { 48625 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32976) 48626 return TCL_ERROR 48627 } 48628 return TCL_OK 48629 } 48630 48631 var aMallocLog Tcl_HashTable 48632 var mallocLogEnabled int32 = 0 48633 48634 type MallocLog1 = struct { 48635 FnCall int32 48636 FnByte int32 48637 } 48638 48639 type MallocLog = MallocLog1 48640 48641 func test_memdebug_log_clear(tls *libc.TLS) { 48642 bp := tls.Alloc(24) 48643 defer tls.Free(24) 48644 48645 var pEntry uintptr 48646 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp) { 48647 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 48648 tcl.XTcl_Free(tls, pLog) 48649 } 48650 tcl.XTcl_DeleteHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog))) 48651 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 48652 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 48653 return uint64(1) 48654 } 48655 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 48656 }())) 48657 } 48658 48659 func test_memdebug_log(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48660 bp := tls.Alloc(128) 48661 defer tls.Free(128) 48662 48663 if !(isInit != 0) { 48664 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 48665 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 48666 return uint64(1) 48667 } 48668 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 48669 }())) 48670 isInit = 1 48671 } 48672 48673 if objc < 2 { 48674 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 48675 } 48676 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 { 48677 return TCL_ERROR 48678 } 48679 48680 switch uint32(*(*int32)(unsafe.Pointer(bp))) { 48681 case uint32(0): 48682 mallocLogEnabled = 1 48683 break 48684 case uint32(1): 48685 mallocLogEnabled = 0 48686 break 48687 case uint32(2): 48688 { 48689 var pEntry uintptr 48690 var pRet uintptr = tcl.XTcl_NewObj(tls) 48691 48692 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp+8); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp+8) { 48693 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 48694 var aKey uintptr = func() uintptr { 48695 if (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == 1 || (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == -1 { 48696 return *(*uintptr)(unsafe.Pointer(pEntry + 32)) 48697 } 48698 return pEntry + 32 48699 }() 48700 var ii int32 48701 48702 *(*uintptr)(unsafe.Pointer(bp + 32)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnCall) 48703 *(*uintptr)(unsafe.Pointer(bp + 32 + 1*8)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnByte) 48704 for ii = 0; ii < MALLOC_LOG_FRAMES; ii++ { 48705 *(*uintptr)(unsafe.Pointer(bp + 32 + uintptr(ii+2)*8)) = tcl.XTcl_NewWideIntObj(tls, *(*Tcl_WideInt)(unsafe.Pointer(aKey + uintptr(ii)*8))) 48706 } 48707 48708 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, 48709 tcl.XTcl_NewListObj(tls, MALLOC_LOG_FRAMES+2, bp+32)) 48710 } 48711 48712 tcl.XTcl_SetObjResult(tls, interp, pRet) 48713 break 48714 48715 } 48716 case uint32(3): 48717 { 48718 test_memdebug_log_clear(tls) 48719 break 48720 48721 } 48722 48723 case uint32(4): 48724 { 48725 break 48726 48727 } 48728 } 48729 48730 return TCL_OK 48731 } 48732 48733 var isInit int32 = 0 48734 var MB_strs = [5]uintptr{ts + 32998, ts + 33004, ts + 33009, ts + 33014, ts + 33020} 48735 48736 func test_config_pagecache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48737 bp := tls.Alloc(56) 48738 defer tls.Free(56) 48739 48740 var pRes uintptr 48741 if objc != 3 { 48742 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33025) 48743 return TCL_ERROR 48744 } 48745 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+48) != 0 { 48746 return TCL_ERROR 48747 } 48748 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+52) != 0 { 48749 return TCL_ERROR 48750 } 48751 libc.Xfree(tls, buf1) 48752 buf1 = uintptr(0) 48753 48754 pRes = tcl.XTcl_NewObj(tls) 48755 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszPage)) 48756 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnPage)) 48757 tcl.XTcl_SetObjResult(tls, interp, pRes) 48758 48759 if *(*int32)(unsafe.Pointer(bp + 48)) < 0 { 48760 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp, uintptr(0), 0, 0)) 48761 } else { 48762 buf1 = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 48))**(*int32)(unsafe.Pointer(bp + 52)))) 48763 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp+24, buf1, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 48764 } 48765 return TCL_OK 48766 } 48767 48768 var buf1 uintptr = uintptr(0) 48769 48770 func test_alt_pcache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48771 bp := tls.Alloc(32) 48772 defer tls.Free(32) 48773 48774 *(*int32)(unsafe.Pointer(bp + 20)) = 0 48775 *(*int32)(unsafe.Pointer(bp + 24)) = 0 48776 *(*int32)(unsafe.Pointer(bp + 28)) = 0 48777 if objc < 2 || objc > 5 { 48778 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 48779 ts+33032) 48780 return TCL_ERROR 48781 } 48782 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 48783 return TCL_ERROR 48784 } 48785 if objc >= 3 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 48786 return TCL_ERROR 48787 } 48788 if objc >= 4 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 48789 return TCL_ERROR 48790 } 48791 if objc >= 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 48792 return TCL_ERROR 48793 } 48794 if *(*int32)(unsafe.Pointer(bp + 20)) < 0 || *(*int32)(unsafe.Pointer(bp + 20)) > 100 { 48795 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33079, 48796 uintptr(0))) 48797 return TCL_ERROR 48798 } 48799 installTestPCache(tls, *(*int32)(unsafe.Pointer(bp + 16)), uint32(*(*int32)(unsafe.Pointer(bp + 20))), uint32(*(*int32)(unsafe.Pointer(bp + 24))), 48800 uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 48801 return TCL_OK 48802 } 48803 48804 func test_config_memstatus(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48805 bp := tls.Alloc(12) 48806 defer tls.Free(12) 48807 48808 var rc int32 48809 if objc != 2 { 48810 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 48811 return TCL_ERROR 48812 } 48813 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 48814 return TCL_ERROR 48815 } 48816 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MEMSTATUS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 48817 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 48818 return TCL_OK 48819 } 48820 48821 func test_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48822 bp := tls.Alloc(24) 48823 defer tls.Free(24) 48824 48825 var pRet uintptr 48826 if objc != 3 { 48827 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33122) 48828 return TCL_ERROR 48829 } 48830 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 48831 return TCL_ERROR 48832 } 48833 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 48834 return TCL_ERROR 48835 } 48836 pRet = tcl.XTcl_NewObj(tls) 48837 tcl.XTcl_ListObjAppendElement(tls, 48838 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszLookaside)) 48839 tcl.XTcl_ListObjAppendElement(tls, 48840 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnLookaside)) 48841 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOOKASIDE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 20)))) 48842 tcl.XTcl_SetObjResult(tls, interp, pRet) 48843 return TCL_OK 48844 } 48845 48846 func test_db_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48847 bp := tls.Alloc(84) 48848 defer tls.Free(84) 48849 48850 var rc int32 48851 48852 if objc != 5 { 48853 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33133) 48854 return TCL_ERROR 48855 } 48856 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 48857 return TCL_ERROR 48858 } 48859 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 48860 return TCL_ERROR 48861 } 48862 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) != 0 { 48863 return TCL_ERROR 48864 } 48865 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 48866 return TCL_ERROR 48867 } 48868 if *(*int32)(unsafe.Pointer(bp + 72)) == 0 { 48869 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)))) 48870 } 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{})) { 48871 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)))) 48872 } else { 48873 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+33150, uintptr(0))) 48874 return TCL_ERROR 48875 } 48876 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 48877 return TCL_OK 48878 } 48879 48880 var azBuf [2][10000]int8 48881 48882 func test_config_heap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48883 bp := tls.Alloc(56) 48884 defer tls.Free(56) 48885 48886 var rc int32 48887 48888 var aArg uintptr = objv + 1*8 48889 var nArg int32 = objc - 1 48890 48891 if nArg != 2 { 48892 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33188) 48893 return TCL_ERROR 48894 } 48895 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+48) != 0 { 48896 return TCL_ERROR 48897 } 48898 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg + 1*8)), bp+52) != 0 { 48899 return TCL_ERROR 48900 } 48901 48902 if *(*int32)(unsafe.Pointer(bp + 48)) == 0 { 48903 libc.Xfree(tls, zBuf) 48904 zBuf = uintptr(0) 48905 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp, uintptr(0), 0, 0)) 48906 } else { 48907 zBuf = libc.Xrealloc(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp + 48)))) 48908 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp+24, zBuf, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 48909 } 48910 48911 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 48912 return TCL_OK 48913 } 48914 48915 var zBuf uintptr 48916 48917 func test_config_heap_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48918 bp := tls.Alloc(12) 48919 defer tls.Free(12) 48920 48921 var rc int32 48922 48923 var aArg uintptr = objv + 1*8 48924 var nArg int32 = objc - 1 48925 48926 if nArg != 1 { 48927 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 48928 return TCL_ERROR 48929 } 48930 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+8) != 0 { 48931 return TCL_ERROR 48932 } 48933 48934 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_WIN32_HEAPSIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 48935 48936 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 48937 return TCL_OK 48938 } 48939 48940 func test_config_error(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48941 bp := tls.Alloc(40) 48942 defer tls.Free(40) 48943 48944 if objc != 2 && objc != 1 { 48945 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33204) 48946 return TCL_ERROR 48947 } 48948 if objc == 2 { 48949 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 48950 return TCL_ERROR 48951 } 48952 if sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 99999, 0) != SQLITE_ERROR { 48953 tcl.XTcl_AppendResult(tls, interp, 48954 libc.VaList(bp, ts+33209, 48955 uintptr(0))) 48956 return TCL_ERROR 48957 } 48958 } else { 48959 if sqlite3.Xsqlite3_config(tls, 99999, 0) != SQLITE_ERROR { 48960 tcl.XTcl_AppendResult(tls, interp, 48961 libc.VaList(bp+16, ts+33267, 48962 uintptr(0))) 48963 return TCL_ERROR 48964 } 48965 } 48966 return TCL_OK 48967 } 48968 48969 func test_config_uri(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48970 bp := tls.Alloc(12) 48971 defer tls.Free(12) 48972 48973 var rc int32 48974 48975 if objc != 2 { 48976 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 48977 return TCL_ERROR 48978 } 48979 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 48980 return TCL_ERROR 48981 } 48982 48983 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_URI, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 48984 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 48985 48986 return TCL_OK 48987 } 48988 48989 func test_config_cis(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48990 bp := tls.Alloc(12) 48991 defer tls.Free(12) 48992 48993 var rc int32 48994 48995 if objc != 2 { 48996 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 48997 return TCL_ERROR 48998 } 48999 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49000 return TCL_ERROR 49001 } 49002 49003 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_COVERING_INDEX_SCAN, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49004 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49005 49006 return TCL_OK 49007 } 49008 49009 func test_config_pmasz(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49010 bp := tls.Alloc(12) 49011 defer tls.Free(12) 49012 49013 var rc int32 49014 49015 if objc != 2 { 49016 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49017 return TCL_ERROR 49018 } 49019 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49020 return TCL_ERROR 49021 } 49022 49023 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PMASZ, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49024 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49025 49026 return TCL_OK 49027 } 49028 49029 func test_dump_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49030 if objc != 2 { 49031 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49032 return TCL_ERROR 49033 } 49034 49035 switch int32(clientData) { 49036 case 3: 49037 { 49038 } 49039 fallthrough 49040 case 5: 49041 { 49042 } 49043 } 49044 return TCL_OK 49045 } 49046 49047 func test_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49048 bp := tls.Alloc(16) 49049 defer tls.Free(16) 49050 49051 var rc int32 49052 49053 var i int32 49054 *(*int32)(unsafe.Pointer(bp)) = 0 49055 49056 var zOpName uintptr 49057 var pResult uintptr 49058 if objc != 3 { 49059 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33318) 49060 return TCL_ERROR 49061 } 49062 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 49063 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 49064 FzName uintptr 49065 Fop int32 49066 F__ccgo_pad1 [4]byte 49067 }{}))); i++ { 49068 if libc.Xstrcmp(tls, aOp1[i].FzName, zOpName) == 0 { 49069 *(*int32)(unsafe.Pointer(bp)) = aOp1[i].Fop 49070 break 49071 } 49072 } 49073 if i >= int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 49074 FzName uintptr 49075 Fop int32 49076 F__ccgo_pad1 [4]byte 49077 }{}))) { 49078 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49079 return TCL_ERROR 49080 } 49081 } 49082 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 49083 return TCL_ERROR 49084 } 49085 *(*int32)(unsafe.Pointer(bp + 8)) = 0 49086 *(*int32)(unsafe.Pointer(bp + 12)) = 0 49087 rc = sqlite3.Xsqlite3_status(tls, *(*int32)(unsafe.Pointer(bp)), bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 4))) 49088 pResult = tcl.XTcl_NewObj(tls) 49089 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 49090 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 49091 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 49092 tcl.XTcl_SetObjResult(tls, interp, pResult) 49093 return TCL_OK 49094 } 49095 49096 var aOp1 = [10]struct { 49097 FzName uintptr 49098 Fop int32 49099 F__ccgo_pad1 [4]byte 49100 }{ 49101 {FzName: ts + 33338}, 49102 {FzName: ts + 33364, Fop: SQLITE_STATUS_MALLOC_SIZE}, 49103 {FzName: ts + 33390, Fop: SQLITE_STATUS_PAGECACHE_USED}, 49104 {FzName: ts + 33419, Fop: SQLITE_STATUS_PAGECACHE_OVERFLOW}, 49105 {FzName: ts + 33452, Fop: SQLITE_STATUS_PAGECACHE_SIZE}, 49106 {FzName: ts + 33481, Fop: SQLITE_STATUS_SCRATCH_USED}, 49107 {FzName: ts + 33508, Fop: SQLITE_STATUS_SCRATCH_OVERFLOW}, 49108 {FzName: ts + 33539, Fop: SQLITE_STATUS_SCRATCH_SIZE}, 49109 {FzName: ts + 33566, Fop: SQLITE_STATUS_PARSER_STACK}, 49110 {FzName: ts + 33593, Fop: SQLITE_STATUS_MALLOC_COUNT}, 49111 } 49112 49113 func test_db_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49114 bp := tls.Alloc(24) 49115 defer tls.Free(24) 49116 49117 var rc int32 49118 49119 var i int32 49120 *(*int32)(unsafe.Pointer(bp + 8)) = 0 49121 49122 var zOpName uintptr 49123 49124 var pResult uintptr 49125 if objc != 4 { 49126 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33620) 49127 return TCL_ERROR 49128 } 49129 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 49130 return TCL_ERROR 49131 } 49132 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 49133 if libc.Xmemcmp(tls, zOpName, ts+33643, uint64(7)) == 0 { 49134 zOpName += uintptr(7) 49135 } 49136 if libc.Xmemcmp(tls, zOpName, ts+33651, uint64(9)) == 0 { 49137 zOpName += uintptr(9) 49138 } 49139 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 49140 FzName uintptr 49141 Fop int32 49142 F__ccgo_pad1 [4]byte 49143 }{}))); i++ { 49144 if libc.Xstrcmp(tls, aOp2[i].FzName, zOpName) == 0 { 49145 *(*int32)(unsafe.Pointer(bp + 8)) = aOp2[i].Fop 49146 break 49147 } 49148 } 49149 if i >= int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 49150 FzName uintptr 49151 Fop int32 49152 F__ccgo_pad1 [4]byte 49153 }{}))) { 49154 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 49155 return TCL_ERROR 49156 } 49157 } 49158 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 49159 return TCL_ERROR 49160 } 49161 *(*int32)(unsafe.Pointer(bp + 16)) = 0 49162 *(*int32)(unsafe.Pointer(bp + 20)) = 0 49163 rc = sqlite3.Xsqlite3_db_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+16, bp+20, *(*int32)(unsafe.Pointer(bp + 12))) 49164 pResult = tcl.XTcl_NewObj(tls) 49165 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 49166 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 49167 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 20)))) 49168 tcl.XTcl_SetObjResult(tls, interp, pResult) 49169 return TCL_OK 49170 } 49171 49172 var aOp2 = [13]struct { 49173 FzName uintptr 49174 Fop int32 49175 F__ccgo_pad1 [4]byte 49176 }{ 49177 {FzName: ts + 33661}, 49178 {FzName: ts + 33676, Fop: SQLITE_DBSTATUS_CACHE_USED}, 49179 {FzName: ts + 33687, Fop: SQLITE_DBSTATUS_SCHEMA_USED}, 49180 {FzName: ts + 33699, Fop: SQLITE_DBSTATUS_STMT_USED}, 49181 {FzName: ts + 33709, Fop: SQLITE_DBSTATUS_LOOKASIDE_HIT}, 49182 {FzName: ts + 33723, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE}, 49183 {FzName: ts + 33743, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL}, 49184 {FzName: ts + 33763, Fop: SQLITE_DBSTATUS_CACHE_HIT}, 49185 {FzName: ts + 33773, Fop: SQLITE_DBSTATUS_CACHE_MISS}, 49186 {FzName: ts + 33784, Fop: SQLITE_DBSTATUS_CACHE_WRITE}, 49187 {FzName: ts + 33796, Fop: SQLITE_DBSTATUS_DEFERRED_FKS}, 49188 {FzName: ts + 33809, Fop: SQLITE_DBSTATUS_CACHE_USED_SHARED}, 49189 {FzName: ts + 33827, Fop: SQLITE_DBSTATUS_CACHE_SPILL}, 49190 } 49191 49192 func test_install_malloc_faultsim(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49193 bp := tls.Alloc(4) 49194 defer tls.Free(4) 49195 49196 var rc int32 49197 49198 if objc != 2 { 49199 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 49200 return TCL_ERROR 49201 } 49202 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) { 49203 return TCL_ERROR 49204 } 49205 rc = faultsimInstall(tls, *(*int32)(unsafe.Pointer(bp))) 49206 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49207 return TCL_OK 49208 } 49209 49210 func test_install_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49211 var rc int32 = SQLITE_MISUSE 49212 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49213 return TCL_OK 49214 } 49215 49216 func test_vfs_oom_test(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49217 bp := tls.Alloc(4) 49218 defer tls.Free(4) 49219 49220 if objc > 2 { 49221 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33839) 49222 return TCL_ERROR 49223 } else if objc == 2 { 49224 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49225 return TCL_ERROR 49226 } 49227 sqlite3.Xsqlite3_memdebug_vfs_oom_test = *(*int32)(unsafe.Pointer(bp)) 49228 } 49229 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_memdebug_vfs_oom_test)) 49230 return TCL_OK 49231 } 49232 49233 func Sqlitetest_malloc_Init(tls *libc.TLS, interp uintptr) int32 { 49234 var i int32 49235 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd11))/uint64(unsafe.Sizeof(struct { 49236 FzName uintptr 49237 FxProc uintptr 49238 FclientData int32 49239 F__ccgo_pad1 [4]byte 49240 }{})); i++ { 49241 var c ClientData = uintptr(intptr_t(aObjCmd11[i].FclientData)) 49242 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd11[i].FzName, aObjCmd11[i].FxProc, c, uintptr(0)) 49243 } 49244 return TCL_OK 49245 } 49246 49247 var aObjCmd11 = [32]struct { 49248 FzName uintptr 49249 FxProc uintptr 49250 FclientData int32 49251 F__ccgo_pad1 [4]byte 49252 }{ 49253 {FzName: ts + 28095, FxProc: 0}, 49254 {FzName: ts + 28110, FxProc: 0}, 49255 {FzName: ts + 33849, FxProc: 0}, 49256 {FzName: ts + 33862, FxProc: 0}, 49257 {FzName: ts + 33869, FxProc: 0}, 49258 {FzName: ts + 33876, FxProc: 0}, 49259 {FzName: ts + 33896, FxProc: 0}, 49260 {FzName: ts + 33921, FxProc: 0}, 49261 {FzName: ts + 33948, FxProc: 0}, 49262 {FzName: ts + 33970, FxProc: 0}, 49263 {FzName: ts + 33992, FxProc: 0}, 49264 {FzName: ts + 34017, FxProc: 0}, 49265 {FzName: ts + 34043, FxProc: 0}, 49266 {FzName: ts + 34073, FxProc: 0}, 49267 {FzName: ts + 34094, FxProc: 0}, 49268 {FzName: ts + 34119, FxProc: 0}, 49269 {FzName: ts + 34145, FxProc: 0}, 49270 {FzName: ts + 34160, FxProc: 0}, 49271 {FzName: ts + 34178, FxProc: 0}, 49272 {FzName: ts + 34202, FxProc: 0}, 49273 {FzName: ts + 34222, FxProc: 0}, 49274 {FzName: ts + 34247, FxProc: 0}, 49275 {FzName: ts + 34272, FxProc: 0}, 49276 {FzName: ts + 34297, FxProc: 0}, 49277 {FzName: ts + 34318, FxProc: 0}, 49278 {FzName: ts + 34337, FxProc: 0}, 49279 {FzName: ts + 34356, FxProc: 0}, 49280 {FzName: ts + 34377, FxProc: 0}, 49281 {FzName: ts + 34405, FxProc: 0, FclientData: 3}, 49282 {FzName: ts + 34426, FxProc: 0, FclientData: 5}, 49283 {FzName: ts + 34447, FxProc: 0}, 49284 {FzName: ts + 34471, FxProc: 0}, 49285 } 49286 49287 type MD5Context1 = struct { 49288 FisInit int32 49289 Fbuf [4]uint32 49290 Fbits [2]uint32 49291 Fin [64]uint8 49292 } 49293 49294 type MD5Context = MD5Context1 49295 49296 func byteReverse(tls *libc.TLS, buf uintptr, longs uint32) { 49297 var t uint32 49298 for __ccgo := true; __ccgo; __ccgo = libc.PreDecUint32(&longs, 1) != 0 { 49299 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)))) 49300 *(*uint32)(unsafe.Pointer(buf)) = t 49301 buf += uintptr(4) 49302 } 49303 } 49304 49305 func MD5Transform(tls *libc.TLS, buf uintptr, in uintptr) { 49306 var a uint32 49307 var b uint32 49308 var c uint32 49309 var d uint32 49310 49311 a = *(*uint32)(unsafe.Pointer(buf)) 49312 b = *(*uint32)(unsafe.Pointer(buf + 1*4)) 49313 c = *(*uint32)(unsafe.Pointer(buf + 2*4)) 49314 d = *(*uint32)(unsafe.Pointer(buf + 3*4)) 49315 49316 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xd76aa478) 49317 a = a<<7 | a>>(32-7) 49318 a = a + b 49319 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xe8c7b756) 49320 d = d<<12 | d>>(32-12) 49321 d = d + a 49322 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x242070db)) 49323 c = c<<17 | c>>(32-17) 49324 c = c + d 49325 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xc1bdceee) 49326 b = b<<22 | b>>(32-22) 49327 b = b + c 49328 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf57c0faf) 49329 a = a<<7 | a>>(32-7) 49330 a = a + b 49331 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + uint32(0x4787c62a)) 49332 d = d<<12 | d>>(32-12) 49333 d = d + a 49334 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa8304613) 49335 c = c<<17 | c>>(32-17) 49336 c = c + d 49337 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xfd469501) 49338 b = b<<22 | b>>(32-22) 49339 b = b + c 49340 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x698098d8)) 49341 a = a<<7 | a>>(32-7) 49342 a = a + b 49343 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0x8b44f7af) 49344 d = d<<12 | d>>(32-12) 49345 d = d + a 49346 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffff5bb1) 49347 c = c<<17 | c>>(32-17) 49348 c = c + d 49349 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0x895cd7be) 49350 b = b<<22 | b>>(32-22) 49351 b = b + c 49352 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x6b901122)) 49353 a = a<<7 | a>>(32-7) 49354 a = a + b 49355 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xfd987193) 49356 d = d<<12 | d>>(32-12) 49357 d = d + a 49358 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xa679438e) 49359 c = c<<17 | c>>(32-17) 49360 c = c + d 49361 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x49b40821)) 49362 b = b<<22 | b>>(32-22) 49363 b = b + c 49364 49365 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xf61e2562) 49366 a = a<<5 | a>>(32-5) 49367 a = a + b 49368 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xc040b340) 49369 d = d<<9 | d>>(32-9) 49370 d = d + a 49371 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x265e5a51)) 49372 c = c<<14 | c>>(32-14) 49373 c = c + d 49374 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xe9b6c7aa) 49375 b = b<<20 | b>>(32-20) 49376 b = b + c 49377 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xd62f105d) 49378 a = a<<5 | a>>(32-5) 49379 a = a + b 49380 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + uint32(0x02441453)) 49381 d = d<<9 | d>>(32-9) 49382 d = d + a 49383 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xd8a1e681) 49384 c = c<<14 | c>>(32-14) 49385 c = c + d 49386 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xe7d3fbc8) 49387 b = b<<20 | b>>(32-20) 49388 b = b + c 49389 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + uint32(0x21e1cde6)) 49390 a = a<<5 | a>>(32-5) 49391 a = a + b 49392 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xc33707d6) 49393 d = d<<9 | d>>(32-9) 49394 d = d + a 49395 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xf4d50d87) 49396 c = c<<14 | c>>(32-14) 49397 c = c + d 49398 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x455a14ed)) 49399 b = b<<20 | b>>(32-20) 49400 b = b + c 49401 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xa9e3e905) 49402 a = a<<5 | a>>(32-5) 49403 a = a + b 49404 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xfcefa3f8) 49405 d = d<<9 | d>>(32-9) 49406 d = d + a 49407 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x676f02d9)) 49408 c = c<<14 | c>>(32-14) 49409 c = c + d 49410 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0x8d2a4c8a) 49411 b = b<<20 | b>>(32-20) 49412 b = b + c 49413 49414 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfffa3942) 49415 a = a<<4 | a>>(32-4) 49416 a = a + b 49417 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 8*4)) + 0x8771f681) 49418 d = d<<11 | d>>(32-11) 49419 d = d + a 49420 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x6d9d6122)) 49421 c = c<<16 | c>>(32-16) 49422 c = c + d 49423 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xfde5380c) 49424 b = b<<23 | b>>(32-23) 49425 b = b + c 49426 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xa4beea44) 49427 a = a<<4 | a>>(32-4) 49428 a = a + b 49429 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 4*4)) + uint32(0x4bdecfa9)) 49430 d = d<<11 | d>>(32-11) 49431 d = d + a 49432 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xf6bb4b60) 49433 c = c<<16 | c>>(32-16) 49434 c = c + d 49435 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xbebfbc70) 49436 b = b<<23 | b>>(32-23) 49437 b = b + c 49438 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x289b7ec6)) 49439 a = a<<4 | a>>(32-4) 49440 a = a + b 49441 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in)) + 0xeaa127fa) 49442 d = d<<11 | d>>(32-11) 49443 d = d + a 49444 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xd4ef3085) 49445 c = c<<16 | c>>(32-16) 49446 c = c + d 49447 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 6*4)) + uint32(0x04881d05)) 49448 b = b<<23 | b>>(32-23) 49449 b = b + c 49450 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xd9d4d039) 49451 a = a<<4 | a>>(32-4) 49452 a = a + b 49453 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0xe6db99e5) 49454 d = d<<11 | d>>(32-11) 49455 d = d + a 49456 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x1fa27cf8)) 49457 c = c<<16 | c>>(32-16) 49458 c = c + d 49459 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xc4ac5665) 49460 b = b<<23 | b>>(32-23) 49461 b = b + c 49462 49463 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in)) + 0xf4292244) 49464 a = a<<6 | a>>(32-6) 49465 a = a + b 49466 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x432aff97)) 49467 d = d<<10 | d>>(32-10) 49468 d = d + a 49469 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xab9423a7) 49470 c = c<<15 | c>>(32-15) 49471 c = c + d 49472 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfc93a039) 49473 b = b<<21 | b>>(32-21) 49474 b = b + c 49475 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x655b59c3)) 49476 a = a<<6 | a>>(32-6) 49477 a = a + b 49478 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0x8f0ccc92) 49479 d = d<<10 | d>>(32-10) 49480 d = d + a 49481 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffeff47d) 49482 c = c<<15 | c>>(32-15) 49483 c = c + d 49484 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0x85845dd1) 49485 b = b<<21 | b>>(32-21) 49486 b = b + c 49487 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x6fa87e4f)) 49488 a = a<<6 | a>>(32-6) 49489 a = a + b 49490 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xfe2ce6e0) 49491 d = d<<10 | d>>(32-10) 49492 d = d + a 49493 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa3014314) 49494 c = c<<15 | c>>(32-15) 49495 c = c + d 49496 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x4e0811a1)) 49497 b = b<<21 | b>>(32-21) 49498 b = b + c 49499 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf7537e82) 49500 a = a<<6 | a>>(32-6) 49501 a = a + b 49502 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0xbd3af235) 49503 d = d<<10 | d>>(32-10) 49504 d = d + a 49505 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x2ad7d2bb)) 49506 c = c<<15 | c>>(32-15) 49507 c = c + d 49508 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xeb86d391) 49509 b = b<<21 | b>>(32-21) 49510 b = b + c 49511 49512 *(*uint32)(unsafe.Pointer(buf)) += a 49513 *(*uint32)(unsafe.Pointer(buf + 1*4)) += b 49514 *(*uint32)(unsafe.Pointer(buf + 2*4)) += c 49515 *(*uint32)(unsafe.Pointer(buf + 3*4)) += d 49516 } 49517 49518 func MD5Init(tls *libc.TLS, ctx uintptr) { 49519 (*MD5Context)(unsafe.Pointer(ctx)).FisInit = 1 49520 *(*uint32)(unsafe.Pointer(ctx + 4)) = uint32(0x67452301) 49521 *(*uint32)(unsafe.Pointer(ctx + 4 + 1*4)) = 0xefcdab89 49522 *(*uint32)(unsafe.Pointer(ctx + 4 + 2*4)) = 0x98badcfe 49523 *(*uint32)(unsafe.Pointer(ctx + 4 + 3*4)) = uint32(0x10325476) 49524 *(*uint32)(unsafe.Pointer(ctx + 20)) = uint32(0) 49525 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) = uint32(0) 49526 } 49527 49528 func MD5Update(tls *libc.TLS, ctx uintptr, buf uintptr, len uint32) { 49529 var t uint32 49530 49531 t = *(*uint32)(unsafe.Pointer(ctx + 20)) 49532 if libc.AssignPtrUint32(ctx+20, t+len<<3) < t { 49533 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4))++ 49534 } 49535 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) += len >> 29 49536 49537 t = t >> 3 & uint32(0x3f) 49538 49539 if t != 0 { 49540 var p uintptr = ctx + 28 + uintptr(t) 49541 49542 t = uint32(64) - t 49543 if len < t { 49544 libc.Xmemcpy(tls, p, buf, uint64(len)) 49545 return 49546 } 49547 libc.Xmemcpy(tls, p, buf, uint64(t)) 49548 byteReverse(tls, ctx+28, uint32(16)) 49549 MD5Transform(tls, ctx+4, ctx+28) 49550 buf += uintptr(t) 49551 len = len - t 49552 } 49553 49554 for len >= uint32(64) { 49555 libc.Xmemcpy(tls, ctx+28, buf, uint64(64)) 49556 byteReverse(tls, ctx+28, uint32(16)) 49557 MD5Transform(tls, ctx+4, ctx+28) 49558 buf += uintptr(64) 49559 len = len - uint32(64) 49560 } 49561 49562 libc.Xmemcpy(tls, ctx+28, buf, uint64(len)) 49563 } 49564 49565 func MD5Final(tls *libc.TLS, digest uintptr, ctx uintptr) { 49566 var count uint32 49567 var p uintptr 49568 49569 count = *(*uint32)(unsafe.Pointer(ctx + 20)) >> 3 & uint32(0x3F) 49570 49571 p = ctx + 28 + uintptr(count) 49572 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&p, 1))) = uint8(0x80) 49573 49574 count = uint32(64-1) - count 49575 49576 if count < uint32(8) { 49577 libc.Xmemset(tls, p, 0, uint64(count)) 49578 byteReverse(tls, ctx+28, uint32(16)) 49579 MD5Transform(tls, ctx+4, ctx+28) 49580 49581 libc.Xmemset(tls, ctx+28, 0, uint64(56)) 49582 } else { 49583 libc.Xmemset(tls, p, 0, uint64(count-uint32(8))) 49584 } 49585 byteReverse(tls, ctx+28, uint32(14)) 49586 49587 libc.Xmemcpy(tls, ctx+28+uintptr(14*4), ctx+20, uint64(8)) 49588 49589 MD5Transform(tls, ctx+4, ctx+28) 49590 byteReverse(tls, ctx+4, uint32(4)) 49591 libc.Xmemcpy(tls, digest, ctx+4, uint64(16)) 49592 } 49593 49594 func MD5DigestToBase16(tls *libc.TLS, digest uintptr, zBuf uintptr) { 49595 var i int32 49596 var j int32 49597 49598 for j = libc.AssignInt32(&i, 0); i < 16; i++ { 49599 var a int32 = int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i)))) 49600 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a>>4&0xf] 49601 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a&0xf] 49602 } 49603 *(*int8)(unsafe.Pointer(zBuf + uintptr(j))) = int8(0) 49604 } 49605 49606 var zEncode = *(*[17]int8)(unsafe.Pointer(ts + 31194)) 49607 49608 func MD5DigestToBase10x8(tls *libc.TLS, digest uintptr, zDigest uintptr) { 49609 bp := tls.Alloc(8) 49610 defer tls.Free(8) 49611 49612 var i int32 49613 var j int32 49614 var x uint32 49615 for i = libc.AssignInt32(&j, 0); i < 16; i = i + 2 { 49616 x = uint32(int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i))))*256 + int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i+1))))) 49617 if i > 0 { 49618 *(*int8)(unsafe.Pointer(zDigest + uintptr(libc.PostIncInt32(&j, 1)))) = int8('-') 49619 } 49620 sqlite3.Xsqlite3_snprintf(tls, 50-j, zDigest+uintptr(j), ts+34501, libc.VaList(bp, x)) 49621 j = j + 5 49622 } 49623 *(*int8)(unsafe.Pointer(zDigest + uintptr(j))) = int8(0) 49624 } 49625 49626 func md5_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 49627 bp := tls.Alloc(206) 49628 defer tls.Free(206) 49629 49630 var converter uintptr 49631 49632 if argc != 2 { 49633 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 49634 ts+15307, uintptr(0))) 49635 return TCL_ERROR 49636 } 49637 MD5Init(tls, bp+48) 49638 MD5Update(tls, bp+48, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 49639 MD5Final(tls, bp+140, bp+48) 49640 converter = cd 49641 (*struct { 49642 f func(*libc.TLS, uintptr, uintptr) 49643 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+140, bp+156) 49644 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+156, uintptr(0))) 49645 return TCL_OK 49646 } 49647 49648 func md5file_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 49649 bp := tls.Alloc(10428) 49650 defer tls.Free(10428) 49651 49652 var in uintptr 49653 var ofst int32 49654 var amt int32 49655 49656 var converter uintptr 49657 49658 if argc != 2 && argc != 4 { 49659 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 49660 ts+34506, uintptr(0))) 49661 return TCL_ERROR 49662 } 49663 if argc == 4 { 49664 ofst = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 49665 amt = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 49666 } else { 49667 ofst = 0 49668 amt = 2147483647 49669 } 49670 in = libc.Xfopen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4402) 49671 if in == uintptr(0) { 49672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+34530, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 49673 ts+34552, uintptr(0))) 49674 return TCL_ERROR 49675 } 49676 libc.Xfseek(tls, in, int64(ofst), SEEK_SET) 49677 MD5Init(tls, bp+80) 49678 for amt > 0 { 49679 var n int32 49680 n = int32(libc.Xfread(tls, bp+172, uint64(1), func() uint64 { 49681 if uint64(unsafe.Sizeof([10240]int8{})) <= uint64(amt) { 49682 return uint64(unsafe.Sizeof([10240]int8{})) 49683 } 49684 return uint64(amt) 49685 }(), in)) 49686 if n <= 0 { 49687 break 49688 } 49689 MD5Update(tls, bp+80, bp+172, uint32(n)) 49690 amt = amt - n 49691 } 49692 libc.Xfclose(tls, in) 49693 MD5Final(tls, bp+10412, bp+80) 49694 converter = cd 49695 (*struct { 49696 f func(*libc.TLS, uintptr, uintptr) 49697 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+10412, bp+172) 49698 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+172, uintptr(0))) 49699 return TCL_OK 49700 } 49701 49702 func Md5_Init(tls *libc.TLS, interp uintptr) int32 { 49703 tcl.XTcl_CreateCommand(tls, interp, ts+34566, *(*uintptr)(unsafe.Pointer(&struct { 49704 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49705 }{md5_cmd})), 49706 *(*uintptr)(unsafe.Pointer(&struct { 49707 f func(*libc.TLS, uintptr, uintptr) 49708 }{MD5DigestToBase16})), uintptr(0)) 49709 tcl.XTcl_CreateCommand(tls, interp, ts+34570, *(*uintptr)(unsafe.Pointer(&struct { 49710 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49711 }{md5_cmd})), 49712 *(*uintptr)(unsafe.Pointer(&struct { 49713 f func(*libc.TLS, uintptr, uintptr) 49714 }{MD5DigestToBase10x8})), uintptr(0)) 49715 tcl.XTcl_CreateCommand(tls, interp, ts+34579, *(*uintptr)(unsafe.Pointer(&struct { 49716 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49717 }{md5file_cmd})), 49718 *(*uintptr)(unsafe.Pointer(&struct { 49719 f func(*libc.TLS, uintptr, uintptr) 49720 }{MD5DigestToBase16})), uintptr(0)) 49721 tcl.XTcl_CreateCommand(tls, interp, ts+34587, *(*uintptr)(unsafe.Pointer(&struct { 49722 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49723 }{md5file_cmd})), 49724 *(*uintptr)(unsafe.Pointer(&struct { 49725 f func(*libc.TLS, uintptr, uintptr) 49726 }{MD5DigestToBase10x8})), uintptr(0)) 49727 return TCL_OK 49728 } 49729 49730 func md5step(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49731 var p uintptr 49732 var i int32 49733 if argc < 1 { 49734 return 49735 } 49736 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 49737 if p == uintptr(0) { 49738 return 49739 } 49740 if !((*MD5Context)(unsafe.Pointer(p)).FisInit != 0) { 49741 MD5Init(tls, p) 49742 } 49743 for i = 0; i < argc; i++ { 49744 var zData uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 49745 if zData != 0 { 49746 MD5Update(tls, p, zData, uint32(int32(libc.Xstrlen(tls, zData)))) 49747 } 49748 } 49749 } 49750 49751 func md5finalize(tls *libc.TLS, context uintptr) { 49752 bp := tls.Alloc(49) 49753 defer tls.Free(49) 49754 49755 var p uintptr 49756 49757 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 49758 MD5Final(tls, bp, p) 49759 MD5DigestToBase16(tls, bp, bp+16) 49760 sqlite3.Xsqlite3_result_text(tls, context, bp+16, -1, libc.UintptrFromInt32(-1)) 49761 } 49762 49763 func Md5_Register(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 49764 var rc int32 = sqlite3.Xsqlite3_create_function(tls, db, ts+34600, -1, SQLITE_UTF8, uintptr(0), uintptr(0), 49765 *(*uintptr)(unsafe.Pointer(&struct { 49766 f func(*libc.TLS, uintptr, int32, uintptr) 49767 }{md5step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{md5finalize}))) 49768 sqlite3.Xsqlite3_overload_function(tls, db, ts+34600, -1) 49769 return rc 49770 } 49771 49772 type multiplexGroup1 = struct { 49773 FaReal uintptr 49774 FnReal int32 49775 F__ccgo_pad1 [4]byte 49776 FzName uintptr 49777 FnName int32 49778 Fflags int32 49779 FszChunk uint32 49780 FbEnabled uint8 49781 FbTruncate uint8 49782 F__ccgo_pad2 [2]byte 49783 } 49784 49785 type multiplexGroup = multiplexGroup1 49786 type multiplexConn1 = struct { 49787 Fbase sqlite3_file 49788 FpGroup uintptr 49789 } 49790 49791 type multiplexConn = multiplexConn1 49792 49793 type multiplexReal = struct { 49794 Fp uintptr 49795 Fz uintptr 49796 } 49797 49798 var gMultiplex struct { 49799 FpOrigVfs uintptr 49800 FsThisVfs sqlite3_vfs 49801 FsIoMethodsV1 sqlite3_io_methods 49802 FsIoMethodsV2 sqlite3_io_methods 49803 FisInitialized int32 49804 F__ccgo_pad1 [4]byte 49805 } 49806 49807 func multiplexStrlen30(tls *libc.TLS, z uintptr) int32 { 49808 var z2 uintptr = z 49809 if z == uintptr(0) { 49810 return 0 49811 } 49812 for *(*int8)(unsafe.Pointer(z2)) != 0 { 49813 z2++ 49814 } 49815 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 49816 } 49817 49818 func multiplexFilename(tls *libc.TLS, zBase uintptr, nBase int32, flags int32, iChunk int32, zOut uintptr) { 49819 bp := tls.Alloc(8) 49820 defer tls.Free(8) 49821 49822 var n int32 = nBase 49823 libc.Xmemcpy(tls, zOut, zBase, uint64(n+1)) 49824 if iChunk != 0 && iChunk <= MX_CHUNK_NUMBER { 49825 sqlite3.Xsqlite3_snprintf(tls, 4, zOut+uintptr(n), ts+34607, libc.VaList(bp, iChunk)) 49826 n = n + 3 49827 } 49828 49829 *(*int8)(unsafe.Pointer(zOut + uintptr(n+1))) = int8(0) 49830 } 49831 49832 func multiplexSubFilename(tls *libc.TLS, pGroup uintptr, iChunk int32) int32 { 49833 if iChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal { 49834 var p uintptr 49835 p = sqlite3.Xsqlite3_realloc64(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal, uint64(iChunk+1)*uint64(unsafe.Sizeof(multiplexReal{}))) 49836 if p == uintptr(0) { 49837 return SQLITE_NOMEM 49838 } 49839 libc.Xmemset(tls, p+uintptr((*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))*uint64(iChunk+1-(*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)) 49840 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = p 49841 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = iChunk + 1 49842 } 49843 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 49844 var z uintptr 49845 var n int32 = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName 49846 z = sqlite3.Xsqlite3_malloc64(tls, uint64(n+5)) 49847 if z == uintptr(0) { 49848 return SQLITE_NOMEM 49849 } 49850 multiplexFilename(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName, (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags, iChunk, z) 49851 (*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)) 49852 sqlite3.Xsqlite3_free(tls, z) 49853 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 49854 return SQLITE_NOMEM 49855 } 49856 } 49857 return SQLITE_OK 49858 } 49859 49860 func multiplexSubOpen(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr, pOutFlags uintptr, createFlag int32) uintptr { 49861 bp := tls.Alloc(20) 49862 defer tls.Free(20) 49863 49864 var pSubOpen uintptr = uintptr(0) 49865 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 49866 49867 *(*int32)(unsafe.Pointer(rc)) = multiplexSubFilename(tls, pGroup, iChunk) 49868 if *(*int32)(unsafe.Pointer(rc)) == SQLITE_OK && libc.AssignUintptr(&pSubOpen, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) == uintptr(0) { 49869 var flags int32 49870 49871 flags = (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags 49872 if createFlag != 0 { 49873 flags = flags | SQLITE_OPEN_CREATE 49874 } else if iChunk == 0 { 49875 } else if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 49876 return uintptr(0) 49877 } else { 49878 *(*int32)(unsafe.Pointer(rc)) = (*struct { 49879 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 49880 })(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, 49881 SQLITE_ACCESS_EXISTS, bp+16) 49882 if *(*int32)(unsafe.Pointer(rc)) != 0 || !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) { 49883 if *(*int32)(unsafe.Pointer(rc)) != 0 { 49884 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34612, 49885 libc.VaList(bp, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 49886 } 49887 return uintptr(0) 49888 } 49889 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 49890 } 49891 pSubOpen = sqlite3.Xsqlite3_malloc64(tls, uint64((*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FszOsFile)) 49892 if pSubOpen == uintptr(0) { 49893 *(*int32)(unsafe.Pointer(rc)) = SQLITE_IOERR | int32(12)<<8 49894 return uintptr(0) 49895 } 49896 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = pSubOpen 49897 *(*int32)(unsafe.Pointer(rc)) = (*struct { 49898 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 49899 })(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, 49900 flags, pOutFlags) 49901 if *(*int32)(unsafe.Pointer(rc)) != SQLITE_OK { 49902 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34646, 49903 libc.VaList(bp+8, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 49904 sqlite3.Xsqlite3_free(tls, pSubOpen) 49905 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = uintptr(0) 49906 return uintptr(0) 49907 } 49908 } 49909 return pSubOpen 49910 } 49911 49912 func multiplexSubSize(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr) sqlite3_int64 { 49913 bp := tls.Alloc(8) 49914 defer tls.Free(8) 49915 49916 var pSub uintptr 49917 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 49918 49919 if *(*int32)(unsafe.Pointer(rc)) != 0 { 49920 return int64(0) 49921 } 49922 pSub = multiplexSubOpen(tls, pGroup, iChunk, rc, uintptr(0), 0) 49923 if pSub == uintptr(0) { 49924 return int64(0) 49925 } 49926 *(*int32)(unsafe.Pointer(rc)) = (*struct { 49927 f func(*libc.TLS, uintptr, uintptr) int32 49928 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSub)).FpMethods)).FxFileSize})).f(tls, pSub, bp) 49929 return *(*sqlite3_int64)(unsafe.Pointer(bp)) 49930 } 49931 49932 func multiplexControlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49933 bp := tls.Alloc(4) 49934 defer tls.Free(4) 49935 49936 var rc int32 = SQLITE_OK 49937 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 49938 var op int32 = 0 49939 49940 if !(db != 0) || argc != 2 { 49941 rc = SQLITE_ERROR 49942 } else { 49943 op = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 49944 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 49945 49946 switch op { 49947 case 1: 49948 op = MULTIPLEX_CTRL_ENABLE 49949 break 49950 fallthrough 49951 case 2: 49952 op = MULTIPLEX_CTRL_SET_CHUNK_SIZE 49953 break 49954 fallthrough 49955 case 3: 49956 op = MULTIPLEX_CTRL_SET_MAX_CHUNKS 49957 break 49958 fallthrough 49959 default: 49960 rc = SQLITE_NOTFOUND 49961 break 49962 } 49963 } 49964 if rc == SQLITE_OK { 49965 rc = sqlite3.Xsqlite3_file_control(tls, db, uintptr(0), op, bp) 49966 } 49967 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 49968 } 49969 49970 func multiplexFuncInit(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 49971 var rc int32 49972 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+34678, 2, SQLITE_ANY, 49973 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49974 f func(*libc.TLS, uintptr, int32, uintptr) 49975 }{multiplexControlFunc})), uintptr(0), uintptr(0)) 49976 return rc 49977 } 49978 49979 func multiplexSubClose(tls *libc.TLS, pGroup uintptr, iChunk int32, pOrigVfs uintptr) { 49980 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp 49981 if pSubOpen != 0 { 49982 (*struct { 49983 f func(*libc.TLS, uintptr) int32 49984 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 49985 if pOrigVfs != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz != 0 { 49986 (*struct { 49987 f func(*libc.TLS, uintptr, uintptr, int32) int32 49988 })(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) 49989 } 49990 sqlite3.Xsqlite3_free(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) 49991 } 49992 sqlite3.Xsqlite3_free_filename(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz) 49993 libc.Xmemset(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))) 49994 } 49995 49996 func multiplexFreeComponents(tls *libc.TLS, pGroup uintptr) { 49997 var i int32 49998 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 49999 multiplexSubClose(tls, pGroup, i, uintptr(0)) 50000 } 50001 sqlite3.Xsqlite3_free(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal) 50002 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = uintptr(0) 50003 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = 0 50004 } 50005 50006 func multiplexOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 50007 bp := tls.Alloc(20) 50008 defer tls.Free(20) 50009 50010 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50011 var pMultiplexOpen uintptr 50012 var pGroup uintptr = uintptr(0) 50013 var pSubOpen uintptr = uintptr(0) 50014 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50015 var nName int32 = 0 50016 var sz int32 = 0 50017 var zToFree uintptr = uintptr(0) 50018 50019 _ = pVfs 50020 libc.Xmemset(tls, pConn, 0, uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile)) 50021 50022 pMultiplexOpen = pConn 50023 50024 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50025 if zName != 0 { 50026 nName = multiplexStrlen30(tls, zName) 50027 } else { 50028 nName = 0 50029 } 50030 sz = int32(uint64(unsafe.Sizeof(multiplexGroup{})) + 50031 uint64(nName) + uint64(1)) 50032 pGroup = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 50033 if pGroup == uintptr(0) { 50034 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 50035 } 50036 } 50037 50038 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50039 var zUri uintptr 50040 if flags&SQLITE_OPEN_URI != 0 { 50041 zUri = zName 50042 } else { 50043 zUri = uintptr(0) 50044 } 50045 50046 libc.Xmemset(tls, pGroup, 0, uint64(sz)) 50047 (*multiplexConn)(unsafe.Pointer(pMultiplexOpen)).FpGroup = pGroup 50048 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = libc.Uint8(libc.Uint8FromInt32(-1)) 50049 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(sqlite3.Xsqlite3_uri_boolean(tls, zUri, ts+18304, 50050 libc.Bool32(flags&SQLITE_OPEN_MAIN_DB == 0))) 50051 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(sqlite3.Xsqlite3_uri_int64(tls, zUri, ts+34696, 50052 int64(SQLITE_MULTIPLEX_CHUNK_SIZE)))) 50053 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = ((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk + uint32(0xffff)) & libc.Uint32FromInt32(libc.CplInt32(0xffff)) 50054 if zName != 0 { 50055 var p uintptr = pGroup + 1*40 50056 (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName = p 50057 libc.Xmemcpy(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, zName, uint64(nName+1)) 50058 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName = nName 50059 } 50060 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 50061 for uint32(sqlite3.Xsqlite3PendingByte)%(*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk-uint32(65536) { 50062 *(*uint32)(unsafe.Pointer(pGroup + 32)) += uint32(65536) 50063 } 50064 } 50065 (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags = flags & libc.CplInt32(SQLITE_OPEN_URI) 50066 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, 1) 50067 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50068 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp, pOutFlags, 0) 50069 if pSubOpen == uintptr(0) && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50070 *(*int32)(unsafe.Pointer(bp)) = SQLITE_CANTOPEN 50071 } 50072 } 50073 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50074 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50075 f func(*libc.TLS, uintptr, uintptr) int32 50076 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp+8) 50077 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && zName != 0 { 50078 if flags&SQLITE_OPEN_SUPER_JOURNAL != 0 { 50079 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 50080 } else if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 50081 if flags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 50082 var iChunk int32 = 1 50083 for __ccgo := true; __ccgo; __ccgo = *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 50084 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50085 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50086 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, 50087 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, SQLITE_ACCESS_EXISTS, bp+16) 50088 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 50089 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50090 f func(*libc.TLS, uintptr, uintptr, int32) int32 50091 })(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) 50092 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50093 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, libc.PreIncInt32(&iChunk, 1)) 50094 } 50095 } 50096 } 50097 } 50098 } else { 50099 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50100 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50101 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+1*16)).Fz, 50102 SQLITE_ACCESS_EXISTS, bp+16) 50103 *(*int32)(unsafe.Pointer(bp + 16)) = libc.Bool32(multiplexSubSize(tls, pGroup, 1, bp) > int64(0)) 50104 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) && 50105 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) != sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 50106 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)))) 50107 } 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) { 50108 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 50109 } 50110 } 50111 } 50112 } 50113 50114 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50115 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 50116 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 176 50117 } else { 50118 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 328 50119 } 50120 } else { 50121 multiplexFreeComponents(tls, pGroup) 50122 sqlite3.Xsqlite3_free(tls, pGroup) 50123 } 50124 } 50125 sqlite3.Xsqlite3_free(tls, zToFree) 50126 return *(*int32)(unsafe.Pointer(bp)) 50127 } 50128 50129 func multiplexDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 50130 bp := tls.Alloc(4) 50131 defer tls.Free(4) 50132 50133 var rc int32 50134 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50135 rc = (*struct { 50136 f func(*libc.TLS, uintptr, uintptr, int32) int32 50137 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 50138 if rc == SQLITE_OK { 50139 var nName int32 = int32(libc.Xstrlen(tls, zName)) 50140 var z uintptr 50141 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nName+5)) 50142 if z == uintptr(0) { 50143 rc = SQLITE_IOERR | int32(12)<<8 50144 } else { 50145 var iChunk int32 = 0 50146 50147 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 50148 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreIncInt32(&iChunk, 1), z) 50149 rc = (*struct { 50150 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50151 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 50152 } 50153 for rc == SQLITE_OK && iChunk > 1 { 50154 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreDecInt32(&iChunk, 1), z) 50155 rc = (*struct { 50156 f func(*libc.TLS, uintptr, uintptr, int32) int32 50157 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 50158 } 50159 if rc == SQLITE_OK { 50160 iChunk = 0 50161 for __ccgo1 := true; __ccgo1; __ccgo1 = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 50162 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreIncInt32(&iChunk, 1), z) 50163 rc = (*struct { 50164 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50165 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 50166 } 50167 for rc == SQLITE_OK && iChunk > 1 { 50168 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreDecInt32(&iChunk, 1), z) 50169 rc = (*struct { 50170 f func(*libc.TLS, uintptr, uintptr, int32) int32 50171 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 50172 } 50173 } 50174 } 50175 sqlite3.Xsqlite3_free(tls, z) 50176 } 50177 return rc 50178 } 50179 50180 func multiplexAccess(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 50181 return (*struct { 50182 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50183 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxAccess})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 50184 } 50185 50186 func multiplexFullPathname(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 50187 return (*struct { 50188 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50189 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxFullPathname})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 50190 } 50191 50192 func multiplexDlOpen(tls *libc.TLS, a uintptr, b uintptr) uintptr { 50193 return (*struct { 50194 f func(*libc.TLS, uintptr, uintptr) uintptr 50195 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlOpen})).f(tls, gMultiplex.FpOrigVfs, b) 50196 } 50197 50198 func multiplexDlError(tls *libc.TLS, a uintptr, b int32, c uintptr) { 50199 (*struct { 50200 f func(*libc.TLS, uintptr, int32, uintptr) 50201 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlError})).f(tls, gMultiplex.FpOrigVfs, b, c) 50202 } 50203 50204 func multiplexDlSym(tls *libc.TLS, a uintptr, b uintptr, c uintptr) uintptr { 50205 return (*struct { 50206 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 50207 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlSym})).f(tls, gMultiplex.FpOrigVfs, b, c) 50208 } 50209 50210 func multiplexDlClose(tls *libc.TLS, a uintptr, b uintptr) { 50211 (*struct { 50212 f func(*libc.TLS, uintptr, uintptr) 50213 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlClose})).f(tls, gMultiplex.FpOrigVfs, b) 50214 } 50215 50216 func multiplexRandomness(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 50217 return (*struct { 50218 f func(*libc.TLS, uintptr, int32, uintptr) int32 50219 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxRandomness})).f(tls, gMultiplex.FpOrigVfs, b, c) 50220 } 50221 50222 func multiplexSleep(tls *libc.TLS, a uintptr, b int32) int32 { 50223 return (*struct { 50224 f func(*libc.TLS, uintptr, int32) int32 50225 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxSleep})).f(tls, gMultiplex.FpOrigVfs, b) 50226 } 50227 50228 func multiplexCurrentTime(tls *libc.TLS, a uintptr, b uintptr) int32 { 50229 return (*struct { 50230 f func(*libc.TLS, uintptr, uintptr) int32 50231 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTime})).f(tls, gMultiplex.FpOrigVfs, b) 50232 } 50233 50234 func multiplexGetLastError(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 50235 if (*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError != 0 { 50236 return (*struct { 50237 f func(*libc.TLS, uintptr, int32, uintptr) int32 50238 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError})).f(tls, gMultiplex.FpOrigVfs, b, c) 50239 } else { 50240 return 0 50241 } 50242 return int32(0) 50243 } 50244 50245 func multiplexCurrentTimeInt64(tls *libc.TLS, a uintptr, b uintptr) int32 { 50246 return (*struct { 50247 f func(*libc.TLS, uintptr, uintptr) int32 50248 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTimeInt64})).f(tls, gMultiplex.FpOrigVfs, b) 50249 } 50250 50251 func multiplexClose(tls *libc.TLS, pConn uintptr) int32 { 50252 var p uintptr = pConn 50253 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50254 var rc int32 = SQLITE_OK 50255 multiplexFreeComponents(tls, pGroup) 50256 sqlite3.Xsqlite3_free(tls, pGroup) 50257 return rc 50258 } 50259 50260 func multiplexRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 50261 bp := tls.Alloc(4) 50262 defer tls.Free(4) 50263 50264 var p uintptr = pConn 50265 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50266 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50267 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50268 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50269 if pSubOpen == uintptr(0) { 50270 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 50271 } else { 50272 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50273 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50274 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 50275 } 50276 } else { 50277 for iAmt > 0 { 50278 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50279 var pSubOpen uintptr 50280 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 50281 if pSubOpen != 0 { 50282 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 50283 if extra < 0 { 50284 extra = 0 50285 } 50286 iAmt = iAmt - extra 50287 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50288 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50289 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, 50290 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50291 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 50292 break 50293 } 50294 pBuf = pBuf + uintptr(iAmt) 50295 iOfst = iOfst + sqlite3_int64(iAmt) 50296 iAmt = extra 50297 } else { 50298 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 50299 break 50300 } 50301 } 50302 } 50303 50304 return *(*int32)(unsafe.Pointer(bp)) 50305 } 50306 50307 func multiplexWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 50308 bp := tls.Alloc(4) 50309 defer tls.Free(4) 50310 50311 var p uintptr = pConn 50312 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50313 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50314 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50315 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50316 if pSubOpen == uintptr(0) { 50317 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(3)<<8 50318 } else { 50319 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50320 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50321 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 50322 } 50323 } else { 50324 for *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && iAmt > 0 { 50325 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50326 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 50327 if pSubOpen != 0 { 50328 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 50329 if extra < 0 { 50330 extra = 0 50331 } 50332 iAmt = iAmt - extra 50333 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50334 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50335 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, 50336 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50337 pBuf = pBuf + uintptr(iAmt) 50338 iOfst = iOfst + sqlite3_int64(iAmt) 50339 iAmt = extra 50340 } 50341 } 50342 } 50343 return *(*int32)(unsafe.Pointer(bp)) 50344 } 50345 50346 func multiplexTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 50347 bp := tls.Alloc(4) 50348 defer tls.Free(4) 50349 50350 var p uintptr = pConn 50351 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50352 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50353 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50354 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50355 if pSubOpen == uintptr(0) { 50356 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 50357 } else { 50358 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50359 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50360 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 50361 } 50362 } else { 50363 var i int32 50364 var iBaseGroup int32 = int32(size / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50365 var pSubOpen uintptr 50366 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50367 50368 for i = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal - 1; i > iBaseGroup && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i-- { 50369 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 50370 multiplexSubClose(tls, pGroup, i, pOrigVfs) 50371 } else { 50372 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 0) 50373 if pSubOpen != 0 { 50374 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50375 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50376 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, int64(0)) 50377 } 50378 } 50379 } 50380 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50381 pSubOpen = multiplexSubOpen(tls, pGroup, iBaseGroup, bp, uintptr(0), 0) 50382 if pSubOpen != 0 { 50383 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50384 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50385 })(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)) 50386 } 50387 } 50388 if *(*int32)(unsafe.Pointer(bp)) != 0 { 50389 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 50390 } 50391 } 50392 return *(*int32)(unsafe.Pointer(bp)) 50393 } 50394 50395 func multiplexSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 50396 var p uintptr = pConn 50397 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50398 var rc int32 = SQLITE_OK 50399 var i int32 50400 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 50401 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(i)*16)).Fp 50402 if pSubOpen != 0 { 50403 var rc2 int32 = (*struct { 50404 f func(*libc.TLS, uintptr, int32) int32 50405 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 50406 if rc2 != SQLITE_OK { 50407 rc = rc2 50408 } 50409 } 50410 } 50411 return rc 50412 } 50413 50414 func multiplexFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 50415 bp := tls.Alloc(4) 50416 defer tls.Free(4) 50417 50418 var p uintptr = pConn 50419 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50420 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50421 var i int32 50422 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50423 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50424 if pSubOpen == uintptr(0) { 50425 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(7)<<8 50426 } else { 50427 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50428 f func(*libc.TLS, uintptr, uintptr) int32 50429 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, pSize) 50430 } 50431 } else { 50432 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = int64(0) 50433 for i = 0; *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i++ { 50434 var sz sqlite3_int64 = multiplexSubSize(tls, pGroup, i, bp) 50435 if sz == int64(0) { 50436 break 50437 } 50438 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = sqlite3_int64(i)*sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) + sz 50439 } 50440 } 50441 return *(*int32)(unsafe.Pointer(bp)) 50442 } 50443 50444 func multiplexLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 50445 bp := tls.Alloc(4) 50446 defer tls.Free(4) 50447 50448 var p uintptr = pConn 50449 50450 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50451 if pSubOpen != 0 { 50452 return (*struct { 50453 f func(*libc.TLS, uintptr, int32) int32 50454 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 50455 } 50456 return SQLITE_BUSY 50457 } 50458 50459 func multiplexUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 50460 bp := tls.Alloc(4) 50461 defer tls.Free(4) 50462 50463 var p uintptr = pConn 50464 50465 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50466 if pSubOpen != 0 { 50467 return (*struct { 50468 f func(*libc.TLS, uintptr, int32) int32 50469 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 50470 } 50471 return SQLITE_IOERR | int32(8)<<8 50472 } 50473 50474 func multiplexCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 50475 bp := tls.Alloc(4) 50476 defer tls.Free(4) 50477 50478 var p uintptr = pConn 50479 50480 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50481 if pSubOpen != 0 { 50482 return (*struct { 50483 f func(*libc.TLS, uintptr, uintptr) int32 50484 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 50485 } 50486 return SQLITE_IOERR | int32(14)<<8 50487 } 50488 50489 func multiplexFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 50490 bp := tls.Alloc(44) 50491 defer tls.Free(44) 50492 50493 var p uintptr = pConn 50494 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50495 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 50496 var pSubOpen uintptr 50497 50498 if !(gMultiplex.FisInitialized != 0) { 50499 return SQLITE_MISUSE 50500 } 50501 switch op { 50502 case MULTIPLEX_CTRL_ENABLE: 50503 if pArg != 0 { 50504 var bEnabled int32 = *(*int32)(unsafe.Pointer(pArg)) 50505 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(bEnabled) 50506 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50507 } 50508 break 50509 case MULTIPLEX_CTRL_SET_CHUNK_SIZE: 50510 if pArg != 0 { 50511 var szChunk uint32 = *(*uint32)(unsafe.Pointer(pArg)) 50512 if szChunk < uint32(1) { 50513 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_MISUSE 50514 } else { 50515 szChunk = szChunk + uint32(MAX_PAGE_SIZE-1) 50516 szChunk = szChunk & libc.Uint32FromInt32(libc.CplInt32(MAX_PAGE_SIZE-1)) 50517 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = szChunk 50518 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50519 } 50520 } 50521 break 50522 case MULTIPLEX_CTRL_SET_MAX_CHUNKS: 50523 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50524 break 50525 case SQLITE_FCNTL_SIZE_HINT: 50526 fallthrough 50527 case SQLITE_FCNTL_CHUNK_SIZE: 50528 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50529 break 50530 case SQLITE_FCNTL_PRAGMA: 50531 { 50532 var aFcntl uintptr = pArg 50533 50534 if *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)) != 0 && sqlite3.Xsqlite3_strnicmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34706, 10) == 0 { 50535 *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) = int64(0) 50536 multiplexFileSize(tls, pConn, bp+32) 50537 50538 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34717) == 0 { 50539 if *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(aFcntl + 2*8)))) != 0 { 50540 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4178) == 0 || 50541 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+28949) == 0 { 50542 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(1) 50543 } else if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4542) == 0 || 50544 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+14193) == 0 { 50545 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(0) 50546 } 50547 } 50548 50549 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, func() uintptr { 50550 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 50551 return ts + 4178 50552 } 50553 return ts + 4542 50554 }(), 0) 50555 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50556 break 50557 } 50558 50559 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34736) == 0 { 50560 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, libc.Bool32(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0))) 50561 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50562 break 50563 } 50564 50565 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34754) == 0 && 50566 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 50567 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+17791, libc.VaList(bp+8, (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50568 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50569 break 50570 } 50571 50572 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34774) == 0 { 50573 var n int32 = 0 50574 var ii int32 50575 for ii = 0; ii < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; ii++ { 50576 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(ii)*16)).Fp != uintptr(0) { 50577 n++ 50578 } 50579 } 50580 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+16, n)) 50581 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 50582 break 50583 } 50584 } 50585 50586 } 50587 fallthrough 50588 default: 50589 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp+40, uintptr(0), 0) 50590 if pSubOpen != 0 { 50591 *(*int32)(unsafe.Pointer(bp + 40)) = (*struct { 50592 f func(*libc.TLS, uintptr, int32, uintptr) int32 50593 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 50594 if op == SQLITE_FCNTL_VFSNAME && *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 50595 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+34794, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(pArg)))) 50596 } 50597 } 50598 break 50599 } 50600 return *(*int32)(unsafe.Pointer(bp + 40)) 50601 } 50602 50603 func multiplexSectorSize(tls *libc.TLS, pConn uintptr) int32 { 50604 bp := tls.Alloc(4) 50605 defer tls.Free(4) 50606 50607 var p uintptr = pConn 50608 50609 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50610 if pSubOpen != 0 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize != 0 { 50611 return (*struct { 50612 f func(*libc.TLS, uintptr) int32 50613 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 50614 } 50615 return DEFAULT_SECTOR_SIZE 50616 } 50617 50618 func multiplexDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 50619 bp := tls.Alloc(4) 50620 defer tls.Free(4) 50621 50622 var p uintptr = pConn 50623 50624 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50625 if pSubOpen != 0 { 50626 return (*struct { 50627 f func(*libc.TLS, uintptr) int32 50628 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 50629 } 50630 return 0 50631 } 50632 50633 func multiplexShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 50634 bp := tls.Alloc(4) 50635 defer tls.Free(4) 50636 50637 var p uintptr = pConn 50638 50639 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50640 if pSubOpen != 0 { 50641 return (*struct { 50642 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 50643 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 50644 } 50645 return SQLITE_IOERR 50646 } 50647 50648 func multiplexShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 50649 bp := tls.Alloc(4) 50650 defer tls.Free(4) 50651 50652 var p uintptr = pConn 50653 50654 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50655 if pSubOpen != 0 { 50656 return (*struct { 50657 f func(*libc.TLS, uintptr, int32, int32, int32) int32 50658 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 50659 } 50660 return SQLITE_BUSY 50661 } 50662 50663 func multiplexShmBarrier(tls *libc.TLS, pConn uintptr) { 50664 bp := tls.Alloc(4) 50665 defer tls.Free(4) 50666 50667 var p uintptr = pConn 50668 50669 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50670 if pSubOpen != 0 { 50671 (*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) 50672 } 50673 } 50674 50675 func multiplexShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 50676 bp := tls.Alloc(4) 50677 defer tls.Free(4) 50678 50679 var p uintptr = pConn 50680 50681 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 50682 if pSubOpen != 0 { 50683 return (*struct { 50684 f func(*libc.TLS, uintptr, int32) int32 50685 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 50686 } 50687 return SQLITE_OK 50688 } 50689 50690 func sqlite3_multiplex_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 50691 var pOrigVfs uintptr 50692 if gMultiplex.FisInitialized != 0 { 50693 return SQLITE_MISUSE 50694 } 50695 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 50696 if pOrigVfs == uintptr(0) { 50697 return SQLITE_ERROR 50698 } 50699 50700 gMultiplex.FisInitialized = 1 50701 gMultiplex.FpOrigVfs = pOrigVfs 50702 gMultiplex.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 50703 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gMultiplex)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(multiplexConn{}))) 50704 gMultiplex.FsThisVfs.FzName = ts + 34807 50705 gMultiplex.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 50706 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 50707 }{multiplexOpen})) 50708 gMultiplex.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 50709 f func(*libc.TLS, uintptr, uintptr, int32) int32 50710 }{multiplexDelete})) 50711 gMultiplex.FsThisVfs.FxAccess = *(*uintptr)(unsafe.Pointer(&struct { 50712 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50713 }{multiplexAccess})) 50714 gMultiplex.FsThisVfs.FxFullPathname = *(*uintptr)(unsafe.Pointer(&struct { 50715 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50716 }{multiplexFullPathname})) 50717 gMultiplex.FsThisVfs.FxDlOpen = *(*uintptr)(unsafe.Pointer(&struct { 50718 f func(*libc.TLS, uintptr, uintptr) uintptr 50719 }{multiplexDlOpen})) 50720 gMultiplex.FsThisVfs.FxDlError = *(*uintptr)(unsafe.Pointer(&struct { 50721 f func(*libc.TLS, uintptr, int32, uintptr) 50722 }{multiplexDlError})) 50723 gMultiplex.FsThisVfs.FxDlSym = *(*uintptr)(unsafe.Pointer(&struct { 50724 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 50725 }{multiplexDlSym})) 50726 gMultiplex.FsThisVfs.FxDlClose = *(*uintptr)(unsafe.Pointer(&struct { 50727 f func(*libc.TLS, uintptr, uintptr) 50728 }{multiplexDlClose})) 50729 gMultiplex.FsThisVfs.FxRandomness = *(*uintptr)(unsafe.Pointer(&struct { 50730 f func(*libc.TLS, uintptr, int32, uintptr) int32 50731 }{multiplexRandomness})) 50732 gMultiplex.FsThisVfs.FxSleep = *(*uintptr)(unsafe.Pointer(&struct { 50733 f func(*libc.TLS, uintptr, int32) int32 50734 }{multiplexSleep})) 50735 gMultiplex.FsThisVfs.FxCurrentTime = *(*uintptr)(unsafe.Pointer(&struct { 50736 f func(*libc.TLS, uintptr, uintptr) int32 50737 }{multiplexCurrentTime})) 50738 gMultiplex.FsThisVfs.FxGetLastError = *(*uintptr)(unsafe.Pointer(&struct { 50739 f func(*libc.TLS, uintptr, int32, uintptr) int32 50740 }{multiplexGetLastError})) 50741 gMultiplex.FsThisVfs.FxCurrentTimeInt64 = *(*uintptr)(unsafe.Pointer(&struct { 50742 f func(*libc.TLS, uintptr, uintptr) int32 50743 }{multiplexCurrentTimeInt64})) 50744 50745 gMultiplex.FsIoMethodsV1.FiVersion = 1 50746 gMultiplex.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 50747 f func(*libc.TLS, uintptr) int32 50748 }{multiplexClose})) 50749 gMultiplex.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 50750 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50751 }{multiplexRead})) 50752 gMultiplex.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 50753 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50754 }{multiplexWrite})) 50755 gMultiplex.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 50756 f func(*libc.TLS, uintptr, sqlite3_int64) int32 50757 }{multiplexTruncate})) 50758 gMultiplex.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 50759 f func(*libc.TLS, uintptr, int32) int32 50760 }{multiplexSync})) 50761 gMultiplex.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 50762 f func(*libc.TLS, uintptr, uintptr) int32 50763 }{multiplexFileSize})) 50764 gMultiplex.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 50765 f func(*libc.TLS, uintptr, int32) int32 50766 }{multiplexLock})) 50767 gMultiplex.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 50768 f func(*libc.TLS, uintptr, int32) int32 50769 }{multiplexUnlock})) 50770 gMultiplex.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 50771 f func(*libc.TLS, uintptr, uintptr) int32 50772 }{multiplexCheckReservedLock})) 50773 gMultiplex.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 50774 f func(*libc.TLS, uintptr, int32, uintptr) int32 50775 }{multiplexFileControl})) 50776 gMultiplex.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 50777 f func(*libc.TLS, uintptr) int32 50778 }{multiplexSectorSize})) 50779 gMultiplex.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 50780 f func(*libc.TLS, uintptr) int32 50781 }{multiplexDeviceCharacteristics})) 50782 gMultiplex.FsIoMethodsV2 = gMultiplex.FsIoMethodsV1 50783 gMultiplex.FsIoMethodsV2.FiVersion = 2 50784 gMultiplex.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 50785 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 50786 }{multiplexShmMap})) 50787 gMultiplex.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 50788 f func(*libc.TLS, uintptr, int32, int32, int32) int32 50789 }{multiplexShmLock})) 50790 gMultiplex.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{multiplexShmBarrier})) 50791 gMultiplex.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 50792 f func(*libc.TLS, uintptr, int32) int32 50793 }{multiplexShmUnmap})) 50794 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gMultiplex))+8, makeDefault) 50795 50796 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 50797 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 50798 }{multiplexFuncInit}))) 50799 50800 return SQLITE_OK 50801 } 50802 50803 func sqlite3_multiplex_shutdown(tls *libc.TLS, eForce int32) int32 { 50804 var rc int32 = SQLITE_OK 50805 if gMultiplex.FisInitialized == 0 { 50806 return SQLITE_MISUSE 50807 } 50808 gMultiplex.FisInitialized = 0 50809 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gMultiplex))+8) 50810 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gMultiplex)), 0, uint64(unsafe.Sizeof(gMultiplex))) 50811 return rc 50812 } 50813 50814 func test_multiplex_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50815 bp := tls.Alloc(4) 50816 defer tls.Free(4) 50817 50818 var zName uintptr 50819 50820 var rc int32 50821 50822 _ = clientData 50823 50824 if objc != 3 { 50825 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 50826 return TCL_ERROR 50827 } 50828 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 50829 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 50830 return TCL_ERROR 50831 } 50832 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 50833 zName = uintptr(0) 50834 } 50835 50836 rc = sqlite3_multiplex_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 50837 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 50838 50839 return TCL_OK 50840 } 50841 50842 func test_multiplex_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50843 var rc int32 50844 50845 _ = clientData 50846 50847 if objc == 2 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+34834) != 0 { 50848 objc = 3 50849 } 50850 if objc != 1 && objc != 2 { 50851 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34841) 50852 return TCL_ERROR 50853 } 50854 50855 rc = sqlite3_multiplex_shutdown(tls, libc.Bool32(objc == 2)) 50856 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 50857 50858 return TCL_OK 50859 } 50860 50861 func test_multiplex_control(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 50862 bp := tls.Alloc(176) 50863 defer tls.Free(176) 50864 50865 var rc int32 50866 50867 var db uintptr 50868 *(*int32)(unsafe.Pointer(bp + 172)) = 0 50869 var pArg uintptr = uintptr(0) 50870 50871 *(*[4]struct { 50872 FzName uintptr 50873 Fop int32 50874 Fargtype int32 50875 })(unsafe.Pointer(bp + 104)) = [4]struct { 50876 FzName uintptr 50877 Fop int32 50878 Fargtype int32 50879 }{ 50880 {FzName: ts + 10145, Fop: MULTIPLEX_CTRL_ENABLE, Fargtype: 1}, 50881 {FzName: ts + 34850, Fop: MULTIPLEX_CTRL_SET_CHUNK_SIZE, Fargtype: 1}, 50882 {FzName: ts + 34861, Fop: MULTIPLEX_CTRL_SET_MAX_CHUNKS, Fargtype: 1}, 50883 {}, 50884 } 50885 50886 if objc != 5 { 50887 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34872) 50888 return TCL_ERROR 50889 } 50890 50891 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) { 50892 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+34908, 0)) 50893 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+11945, 0)) 50894 return TCL_ERROR 50895 } else { 50896 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 40)).FobjClientData)) 50897 } 50898 50899 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 50900 interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+104, int32(unsafe.Sizeof(struct { 50901 FzName uintptr 50902 Fop int32 50903 Fargtype int32 50904 }{})), ts+2014, 0, bp+168) 50905 if rc != TCL_OK { 50906 return rc 50907 } 50908 50909 switch (*struct { 50910 FzName uintptr 50911 Fop int32 50912 Fargtype int32 50913 })(unsafe.Pointer(bp + 104 + uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fargtype { 50914 case 1: 50915 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+172) != 0 { 50916 return TCL_ERROR 50917 } 50918 pArg = bp + 172 50919 break 50920 default: 50921 tcl.XTcl_WrongNumArgs(tls, interp, 4, objv, ts+2523) 50922 return TCL_ERROR 50923 } 50924 50925 rc = sqlite3.Xsqlite3_file_control(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), (*struct { 50926 FzName uintptr 50927 Fop int32 50928 Fargtype int32 50929 })(unsafe.Pointer(bp+104+uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fop, pArg) 50930 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 50931 if rc == SQLITE_OK { 50932 return TCL_OK 50933 } 50934 return TCL_ERROR 50935 } 50936 50937 func Sqlitemultiplex_Init(tls *libc.TLS, interp uintptr) int32 { 50938 var i int32 50939 50940 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd7))/uint64(unsafe.Sizeof(struct { 50941 FzName uintptr 50942 FxProc uintptr 50943 }{})); i++ { 50944 tcl.XTcl_CreateObjCommand(tls, interp, aCmd7[i].FzName, aCmd7[i].FxProc, uintptr(0), uintptr(0)) 50945 } 50946 50947 return TCL_OK 50948 } 50949 50950 var aCmd7 = [3]struct { 50951 FzName uintptr 50952 FxProc uintptr 50953 }{ 50954 {FzName: ts + 34940, FxProc: 0}, 50955 {FzName: ts + 34969, FxProc: 0}, 50956 {FzName: ts + 34996, FxProc: 0}, 50957 } 50958 50959 type sqlite3_mutex = sqlite3_mutex1 50960 50961 var aName = [15]uintptr{ 50962 ts + 35022, ts + 35027, ts + 35037, ts + 35049, 50963 ts + 35060, ts + 35072, ts + 35084, ts + 35095, 50964 ts + 35107, ts + 35119, ts + 35131, ts + 35143, 50965 ts + 35155, ts + 35167, uintptr(0), 50966 } 50967 50968 type test_mutex_globals = struct { 50969 FisInstalled int32 50970 FdisableInit int32 50971 FdisableTry int32 50972 FisInit int32 50973 Fm sqlite3_mutex_methods 50974 FaCounter [14]int32 50975 FaStatic [12]sqlite3_mutex 50976 } 50977 50978 var g3 = test_mutex_globals{} 50979 50980 func counterMutexHeld(tls *libc.TLS, p uintptr) int32 { 50981 return (*struct { 50982 f func(*libc.TLS, uintptr) int32 50983 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexHeld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 50984 } 50985 50986 func counterMutexNotheld(tls *libc.TLS, p uintptr) int32 { 50987 return (*struct { 50988 f func(*libc.TLS, uintptr) int32 50989 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexNotheld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 50990 } 50991 50992 func counterMutexInit(tls *libc.TLS) int32 { 50993 var rc int32 50994 if g3.FdisableInit != 0 { 50995 return g3.FdisableInit 50996 } 50997 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexInit})).f(tls) 50998 g3.FisInit = 1 50999 return rc 51000 } 51001 51002 func counterMutexEnd(tls *libc.TLS) int32 { 51003 g3.FisInit = 0 51004 return (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnd})).f(tls) 51005 } 51006 51007 func counterMutexAlloc(tls *libc.TLS, eType int32) uintptr { 51008 var pReal uintptr 51009 var pRet uintptr = uintptr(0) 51010 51011 pReal = (*struct { 51012 f func(*libc.TLS, int32) uintptr 51013 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexAlloc})).f(tls, eType) 51014 if !(pReal != 0) { 51015 return uintptr(0) 51016 } 51017 51018 if eType == SQLITE_MUTEX_FAST || eType == SQLITE_MUTEX_RECURSIVE { 51019 pRet = libc.Xmalloc(tls, uint64(unsafe.Sizeof(sqlite3_mutex{}))) 51020 } else { 51021 var eStaticType int32 = eType - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_RECURSIVE + 1))) 51022 51023 pRet = uintptr(unsafe.Pointer(&g3)) + 144 + uintptr(eStaticType)*16 51024 } 51025 51026 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FeType = eType 51027 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FpReal = pReal 51028 return pRet 51029 } 51030 51031 func counterMutexFree(tls *libc.TLS, p uintptr) { 51032 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexFree})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51033 if (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_FAST || (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_RECURSIVE { 51034 libc.Xfree(tls, p) 51035 } 51036 } 51037 51038 func counterMutexEnter(tls *libc.TLS, p uintptr) { 51039 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51040 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnter})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51041 } 51042 51043 func counterMutexTry(tls *libc.TLS, p uintptr) int32 { 51044 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51045 if g3.FdisableTry != 0 { 51046 return SQLITE_BUSY 51047 } 51048 return (*struct { 51049 f func(*libc.TLS, uintptr) int32 51050 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexTry})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51051 } 51052 51053 func counterMutexLeave(tls *libc.TLS, p uintptr) { 51054 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexLeave})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51055 } 51056 51057 func test_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51058 var rc int32 51059 51060 if objc != 1 { 51061 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51062 return TCL_ERROR 51063 } 51064 51065 rc = sqlite3.Xsqlite3_shutdown(tls) 51066 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51067 return TCL_OK 51068 } 51069 51070 func test_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51071 var rc int32 51072 51073 if objc != 1 { 51074 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51075 return TCL_ERROR 51076 } 51077 51078 rc = sqlite3.Xsqlite3_initialize(tls) 51079 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51080 return TCL_OK 51081 } 51082 51083 func test_install_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51084 bp := tls.Alloc(136) 51085 defer tls.Free(136) 51086 51087 var rc int32 = SQLITE_OK 51088 51089 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 64)) = sqlite3_mutex_methods{ 51090 FxMutexInit: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexInit})), 51091 FxMutexEnd: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexEnd})), 51092 FxMutexAlloc: *(*uintptr)(unsafe.Pointer(&struct { 51093 f func(*libc.TLS, int32) uintptr 51094 }{counterMutexAlloc})), 51095 FxMutexFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexFree})), 51096 FxMutexEnter: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexEnter})), 51097 FxMutexTry: *(*uintptr)(unsafe.Pointer(&struct { 51098 f func(*libc.TLS, uintptr) int32 51099 }{counterMutexTry})), 51100 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexLeave})), 51101 FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 51102 f func(*libc.TLS, uintptr) int32 51103 }{counterMutexHeld})), 51104 FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 51105 f func(*libc.TLS, uintptr) int32 51106 }{counterMutexNotheld})), 51107 } 51108 51109 if objc != 2 { 51110 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 51111 return TCL_ERROR 51112 } 51113 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+56) { 51114 return TCL_ERROR 51115 } 51116 51117 if *(*int32)(unsafe.Pointer(bp + 56)) == g3.FisInstalled { 51118 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35179, 0)) 51119 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, func() uintptr { 51120 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 51121 return ts + 35199 51122 } 51123 return ts + 35217 51124 }(), 0)) 51125 return TCL_ERROR 51126 } 51127 51128 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 51129 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp+32, uintptr(unsafe.Pointer(&g3))+16)) 51130 if rc == SQLITE_OK { 51131 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+40, bp+64)) 51132 } 51133 g3.FdisableTry = 0 51134 } else { 51135 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+48, uintptr(unsafe.Pointer(&g3))+16)) 51136 libc.Xmemset(tls, uintptr(unsafe.Pointer(&g3))+16, 0, uint64(unsafe.Sizeof(sqlite3_mutex_methods{}))) 51137 } 51138 51139 if rc == SQLITE_OK { 51140 g3.FisInstalled = *(*int32)(unsafe.Pointer(bp + 56)) 51141 } 51142 51143 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51144 return TCL_OK 51145 } 51146 51147 func test_read_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51148 var pRet uintptr 51149 var ii int32 51150 51151 if objc != 1 { 51152 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51153 return TCL_ERROR 51154 } 51155 51156 pRet = tcl.XTcl_NewObj(tls) 51157 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 51158 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 51159 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, aName[ii], -1)) 51160 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)))) 51161 } 51162 tcl.XTcl_SetObjResult(tls, interp, pRet) 51163 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 51164 var _objPtr uintptr = pRet 51165 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 51166 tcl.XTclFreeObj(tls, _objPtr) 51167 } 51168 } 51169 51170 return TCL_OK 51171 } 51172 51173 func test_clear_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51174 var ii int32 51175 51176 if objc != 1 { 51177 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51178 return TCL_ERROR 51179 } 51180 51181 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 51182 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)) = 0 51183 } 51184 return TCL_OK 51185 } 51186 51187 func test_alloc_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51188 bp := tls.Alloc(124) 51189 defer tls.Free(124) 51190 51191 var p uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 51192 51193 sqlite3.Xsqlite3_mutex_free(tls, p) 51194 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+9889, libc.VaList(bp, p)) 51195 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, uintptr(0))) 51196 return TCL_OK 51197 } 51198 51199 func test_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51200 bp := tls.Alloc(68) 51201 defer tls.Free(68) 51202 51203 *(*[4]ConfigOption)(unsafe.Pointer(bp)) = [4]ConfigOption{ 51204 {FzName: ts + 35231, FiValue: SQLITE_CONFIG_SINGLETHREAD}, 51205 {FzName: ts + 35244, FiValue: SQLITE_CONFIG_MULTITHREAD}, 51206 {FzName: ts + 35256, FiValue: SQLITE_CONFIG_SERIALIZED}, 51207 {}, 51208 } 51209 var s int32 = int32(unsafe.Sizeof(ConfigOption{})) 51210 51211 var rc int32 51212 51213 if objc != 2 { 51214 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51215 return TCL_ERROR 51216 } 51217 51218 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, s, ts+17631, 0, bp+64) != 0 { 51219 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+64) != 0 { 51220 return TCL_ERROR 51221 } 51222 } else { 51223 *(*int32)(unsafe.Pointer(bp + 64)) = (*ConfigOption)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 64)))*16)).FiValue 51224 } 51225 51226 rc = sqlite3.Xsqlite3_config(tls, *(*int32)(unsafe.Pointer(bp + 64)), 0) 51227 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51228 return TCL_OK 51229 } 51230 51231 type ConfigOption = struct { 51232 FzName uintptr 51233 FiValue int32 51234 F__ccgo_pad1 [4]byte 51235 } 51236 51237 func getDbPointer1(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 51238 bp := tls.Alloc(64) 51239 defer tls.Free(64) 51240 51241 var db uintptr 51242 51243 var zCmd uintptr = tcl.XTcl_GetString(tls, pObj) 51244 if tcl.XTcl_GetCommandInfo(tls, pInterp, zCmd, bp) != 0 { 51245 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)) 51246 } else { 51247 db = sqlite3TestTextToPtr(tls, zCmd) 51248 } 51249 51250 return db 51251 } 51252 51253 func getStaticMutexPointer(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 51254 bp := tls.Alloc(4) 51255 defer tls.Free(4) 51256 51257 if tcl.XTcl_GetIndexFromObjStruct(tls, pInterp, pObj, uintptr(unsafe.Pointer(&aName)), int32(unsafe.Sizeof(uintptr(0))), ts+35267, 0, bp) != 0 { 51258 return uintptr(0) 51259 } 51260 51261 return counterMutexAlloc(tls, *(*int32)(unsafe.Pointer(bp))) 51262 } 51263 51264 func test_enter_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51265 var pMutex uintptr 51266 if objc != 2 { 51267 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 51268 return TCL_ERROR 51269 } 51270 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51271 if !(pMutex != 0) { 51272 return TCL_ERROR 51273 } 51274 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 51275 return TCL_OK 51276 } 51277 51278 func test_leave_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51279 var pMutex uintptr 51280 if objc != 2 { 51281 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 51282 return TCL_ERROR 51283 } 51284 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51285 if !(pMutex != 0) { 51286 return TCL_ERROR 51287 } 51288 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 51289 return TCL_OK 51290 } 51291 51292 func test_enter_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51293 var db uintptr 51294 if objc != 2 { 51295 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 51296 return TCL_ERROR 51297 } 51298 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51299 if !(db != 0) { 51300 return TCL_ERROR 51301 } 51302 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 51303 return TCL_OK 51304 } 51305 51306 func test_leave_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51307 var db uintptr 51308 if objc != 2 { 51309 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 51310 return TCL_ERROR 51311 } 51312 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51313 if !(db != 0) { 51314 return TCL_ERROR 51315 } 51316 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 51317 return TCL_OK 51318 } 51319 51320 func Sqlitetest_mutex_Init(tls *libc.TLS, interp uintptr) int32 { 51321 var i int32 51322 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd8))/uint64(unsafe.Sizeof(struct { 51323 FzName uintptr 51324 FxProc uintptr 51325 }{})); i++ { 51326 tcl.XTcl_CreateObjCommand(tls, interp, aCmd8[i].FzName, aCmd8[i].FxProc, uintptr(0), uintptr(0)) 51327 } 51328 51329 tcl.XTcl_LinkVar(tls, interp, ts+35278, 51330 uintptr(unsafe.Pointer(&g3))+4, TCL_LINK_INT) 51331 tcl.XTcl_LinkVar(tls, interp, ts+35297, 51332 uintptr(unsafe.Pointer(&g3))+8, TCL_LINK_INT) 51333 return SQLITE_OK 51334 } 51335 51336 var aCmd8 = [11]struct { 51337 FzName uintptr 51338 FxProc uintptr 51339 }{ 51340 {FzName: ts + 35315, FxProc: 0}, 51341 {FzName: ts + 35332, FxProc: 0}, 51342 {FzName: ts + 35351, FxProc: 0}, 51343 {FzName: ts + 35366, FxProc: 0}, 51344 {FzName: ts + 35385, FxProc: 0}, 51345 {FzName: ts + 35404, FxProc: 0}, 51346 {FzName: ts + 35419, FxProc: 0}, 51347 {FzName: ts + 35434, FxProc: 0}, 51348 {FzName: ts + 35454, FxProc: 0}, 51349 {FzName: ts + 35477, FxProc: 0}, 51350 {FzName: ts + 35497, FxProc: 0}, 51351 } 51352 51353 type fs_real_file1 = struct { 51354 FpFile uintptr 51355 FzName uintptr 51356 FnDatabase int32 51357 FnJournal int32 51358 FnBlob int32 51359 FnRef int32 51360 FpNext uintptr 51361 FppThis uintptr 51362 } 51363 51364 type fs_real_file = fs_real_file1 51365 51366 type fs_file1 = struct { 51367 Fbase sqlite3_file 51368 FeType int32 51369 F__ccgo_pad1 [4]byte 51370 FpReal uintptr 51371 } 51372 51373 type fs_file = fs_file1 51374 51375 type tmp_file1 = struct { 51376 Fbase sqlite3_file 51377 FnSize int32 51378 FnAlloc int32 51379 FzAlloc uintptr 51380 } 51381 51382 type tmp_file = tmp_file1 51383 51384 type fs_vfs_t1 = struct { 51385 Fbase sqlite3_vfs 51386 FpFileList uintptr 51387 FpParent uintptr 51388 } 51389 51390 type fs_vfs_t = fs_vfs_t1 51391 51392 var fs_vfs = fs_vfs_t{ 51393 Fbase: sqlite3_vfs{ 51394 FiVersion: 1, 51395 FzName: ts + 31055, 51396 FxOpen: 0, 51397 FxDelete: 0, 51398 FxAccess: 0, 51399 FxFullPathname: 0, 51400 FxDlOpen: 0, 51401 FxDlError: 0, 51402 FxDlSym: 0, 51403 FxDlClose: 0, 51404 FxRandomness: 0, 51405 FxSleep: 0, 51406 FxCurrentTime: 0, 51407 }, 51408 } 51409 51410 var fs_io_methods = sqlite3_io_methods{ 51411 FiVersion: 1, 51412 FxClose: 0, 51413 FxRead: 0, 51414 FxWrite: 0, 51415 FxTruncate: 0, 51416 FxSync: 0, 51417 FxFileSize: 0, 51418 FxLock: 0, 51419 FxUnlock: 0, 51420 FxCheckReservedLock: 0, 51421 FxFileControl: 0, 51422 FxSectorSize: 0, 51423 FxDeviceCharacteristics: 0, 51424 } 51425 51426 var tmp_io_methods = sqlite3_io_methods{ 51427 FiVersion: 1, 51428 FxClose: 0, 51429 FxRead: 0, 51430 FxWrite: 0, 51431 FxTruncate: 0, 51432 FxSync: 0, 51433 FxFileSize: 0, 51434 FxLock: 0, 51435 FxUnlock: 0, 51436 FxCheckReservedLock: 0, 51437 FxFileControl: 0, 51438 FxSectorSize: 0, 51439 FxDeviceCharacteristics: 0, 51440 } 51441 51442 func tmpClose(tls *libc.TLS, pFile uintptr) int32 { 51443 var pTmp uintptr = pFile 51444 sqlite3.Xsqlite3_free(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc) 51445 return SQLITE_OK 51446 } 51447 51448 func tmpRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51449 var pTmp uintptr = pFile 51450 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) { 51451 return SQLITE_IOERR | int32(2)<<8 51452 } 51453 libc.Xmemcpy(tls, zBuf, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), uint64(iAmt)) 51454 return SQLITE_OK 51455 } 51456 51457 func tmpWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51458 var pTmp uintptr = pFile 51459 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc) { 51460 var nNew int32 = int32(int64(2) * (sqlite_int64(iAmt) + iOfst + sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc))) 51461 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc, nNew) 51462 if !(zNew != 0) { 51463 return SQLITE_NOMEM 51464 } 51465 (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc = zNew 51466 (*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc = nNew 51467 } 51468 libc.Xmemcpy(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), zBuf, uint64(iAmt)) 51469 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 51470 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) > iOfst+sqlite_int64(iAmt) { 51471 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 51472 } 51473 return int32(iOfst + sqlite_int64(iAmt)) 51474 }() 51475 return SQLITE_OK 51476 } 51477 51478 func tmpTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 51479 var pTmp uintptr = pFile 51480 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 51481 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) < size { 51482 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 51483 } 51484 return int32(size) 51485 }() 51486 return SQLITE_OK 51487 } 51488 51489 func tmpSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 51490 return SQLITE_OK 51491 } 51492 51493 func tmpFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 51494 var pTmp uintptr = pFile 51495 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) 51496 return SQLITE_OK 51497 } 51498 51499 func tmpLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51500 return SQLITE_OK 51501 } 51502 51503 func tmpUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51504 return SQLITE_OK 51505 } 51506 51507 func tmpCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 51508 *(*int32)(unsafe.Pointer(pResOut)) = 0 51509 return SQLITE_OK 51510 } 51511 51512 func tmpFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 51513 return SQLITE_OK 51514 } 51515 51516 func tmpSectorSize(tls *libc.TLS, pFile uintptr) int32 { 51517 return 0 51518 } 51519 51520 func tmpDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 51521 return 0 51522 } 51523 51524 func fsClose1(tls *libc.TLS, pFile uintptr) int32 { 51525 var rc int32 = SQLITE_OK 51526 var p uintptr = pFile 51527 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51528 51529 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef-- 51530 51531 if (*fs_real_file)(unsafe.Pointer(pReal)).FnRef == 0 { 51532 *(*uintptr)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FppThis)) = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 51533 if (*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0 { 51534 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = (*fs_real_file)(unsafe.Pointer(pReal)).FppThis 51535 } 51536 rc = (*struct { 51537 f func(*libc.TLS, uintptr) int32 51538 })(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) 51539 sqlite3.Xsqlite3_free(tls, pReal) 51540 } 51541 51542 return rc 51543 } 51544 51545 func fsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51546 var rc int32 = SQLITE_OK 51547 var p uintptr = pFile 51548 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51549 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51550 51551 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) || 51552 (*fs_file)(unsafe.Pointer(p)).FeType == JOURNAL_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 51553 rc = SQLITE_IOERR | int32(2)<<8 51554 } else if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51555 rc = (*struct { 51556 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51557 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxRead})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 51558 } else { 51559 var iRem int32 = iAmt 51560 var iBuf int32 = 0 51561 var ii int32 = int32(iOfst) 51562 for iRem > 0 && rc == SQLITE_OK { 51563 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 51564 var iRealAmt int32 = func() int32 { 51565 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 51566 return iRem 51567 } 51568 return BLOCKSIZE - iRealOff%BLOCKSIZE 51569 }() 51570 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)).FxRead})).f(tls, pF, zBuf+uintptr(iBuf), iRealAmt, int64(iRealOff)) 51574 ii = ii + iRealAmt 51575 iBuf = iBuf + iRealAmt 51576 iRem = iRem - iRealAmt 51577 } 51578 } 51579 51580 return rc 51581 } 51582 51583 func fsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51584 var rc int32 = SQLITE_OK 51585 var p uintptr = pFile 51586 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51587 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51588 51589 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51590 if sqlite_int64(iAmt)+iOfst+int64(BLOCKSIZE) > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-(*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 51591 rc = SQLITE_FULL 51592 } else { 51593 rc = (*struct { 51594 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51595 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 51596 if rc == SQLITE_OK { 51597 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 51598 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) > sqlite_int64(iAmt)+iOfst { 51599 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 51600 } 51601 return int32(sqlite_int64(iAmt) + iOfst) 51602 }() 51603 } 51604 } 51605 } else { 51606 var iRem int32 = iAmt 51607 var iBuf int32 = 0 51608 var ii int32 = int32(iOfst) 51609 for iRem > 0 && rc == SQLITE_OK { 51610 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 51611 var iRealAmt int32 = func() int32 { 51612 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 51613 return iRem 51614 } 51615 return BLOCKSIZE - iRealOff%BLOCKSIZE 51616 }() 51617 51618 if iRealOff < (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase+BLOCKSIZE { 51619 rc = SQLITE_FULL 51620 } else { 51621 rc = (*struct { 51622 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51623 })(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)) 51624 ii = ii + iRealAmt 51625 iBuf = iBuf + iRealAmt 51626 iRem = iRem - iRealAmt 51627 } 51628 } 51629 if rc == SQLITE_OK { 51630 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 51631 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) > sqlite_int64(iAmt)+iOfst { 51632 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 51633 } 51634 return int32(sqlite_int64(iAmt) + iOfst) 51635 }() 51636 } 51637 } 51638 51639 return rc 51640 } 51641 51642 func fsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 51643 var p uintptr = pFile 51644 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51645 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51646 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 51647 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) < size { 51648 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 51649 } 51650 return int32(size) 51651 }() 51652 } else { 51653 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 51654 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) < size { 51655 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 51656 } 51657 return int32(size) 51658 }() 51659 } 51660 return SQLITE_OK 51661 } 51662 51663 func fsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 51664 bp := tls.Alloc(4) 51665 defer tls.Free(4) 51666 51667 var p uintptr = pFile 51668 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51669 var pRealFile uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51670 var rc int32 = SQLITE_OK 51671 51672 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51673 *(*uint8)(unsafe.Pointer(bp)) = uint8(uint32((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) & 0xFF000000 >> 24) 51674 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x00FF0000 >> 16) 51675 *(*uint8)(unsafe.Pointer(bp + 2)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x0000FF00 >> 8) 51676 *(*uint8)(unsafe.Pointer(bp + 3)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x000000FF) 51677 rc = (*struct { 51678 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51679 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, bp, 4, int64(0)) 51680 } 51681 if rc == SQLITE_OK { 51682 rc = (*struct { 51683 f func(*libc.TLS, uintptr, int32) int32 51684 })(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)) 51685 } 51686 51687 return rc 51688 } 51689 51690 func fsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 51691 var p uintptr = pFile 51692 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 51693 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 51694 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) 51695 } else { 51696 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) 51697 } 51698 return SQLITE_OK 51699 } 51700 51701 func fsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51702 return SQLITE_OK 51703 } 51704 51705 func fsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51706 return SQLITE_OK 51707 } 51708 51709 func fsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 51710 *(*int32)(unsafe.Pointer(pResOut)) = 0 51711 return SQLITE_OK 51712 } 51713 51714 func fsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 51715 if op == SQLITE_FCNTL_PRAGMA { 51716 return SQLITE_NOTFOUND 51717 } 51718 return SQLITE_OK 51719 } 51720 51721 func fsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 51722 return BLOCKSIZE 51723 } 51724 51725 func fsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 51726 return 0 51727 } 51728 51729 func fsOpen1(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 51730 bp := tls.Alloc(12) 51731 defer tls.Free(12) 51732 51733 var pFsVfs uintptr 51734 var p uintptr 51735 var pReal uintptr 51736 var eType int32 51737 var nName int32 51738 var rc int32 51739 var p2 uintptr 51740 51741 var real_flags int32 51742 51743 var pRealFile uintptr 51744 var pParent uintptr 51745 pFsVfs = pVfs 51746 p = pFile 51747 pReal = uintptr(0) 51748 rc = SQLITE_OK 51749 51750 if !(0 == flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL)) { 51751 goto __1 51752 } 51753 p2 = pFile 51754 libc.Xmemset(tls, p2, 0, uint64(unsafe.Sizeof(tmp_file{}))) 51755 (*tmp_file)(unsafe.Pointer(p2)).Fbase.FpMethods = uintptr(unsafe.Pointer(&tmp_io_methods)) 51756 return SQLITE_OK 51757 __1: 51758 ; 51759 eType = func() int32 { 51760 if flags&SQLITE_OPEN_MAIN_DB != 0 { 51761 return DATABASE_FILE 51762 } 51763 return JOURNAL_FILE 51764 }() 51765 (*fs_file)(unsafe.Pointer(p)).Fbase.FpMethods = uintptr(unsafe.Pointer(&fs_io_methods)) 51766 (*fs_file)(unsafe.Pointer(p)).FeType = eType 51767 51768 nName = int32(libc.Xstrlen(tls, zName)) - func() int32 { 51769 if eType == JOURNAL_FILE { 51770 return 8 51771 } 51772 return 0 51773 }() 51774 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 51775 __2: 51776 if !(pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zName, uint64(nName)) != 0) { 51777 goto __4 51778 } 51779 goto __3 51780 __3: 51781 pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 51782 goto __2 51783 goto __4 51784 __4: 51785 ; 51786 if !!(pReal != 0) { 51787 goto __5 51788 } 51789 real_flags = flags&libc.CplInt32(SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB 51790 pParent = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpParent 51791 51792 pReal = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile))) 51793 if !!(pReal != 0) { 51794 goto __6 51795 } 51796 rc = SQLITE_NOMEM 51797 goto open_out 51798 __6: 51799 ; 51800 libc.Xmemset(tls, pReal, 0, uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile)) 51801 (*fs_real_file)(unsafe.Pointer(pReal)).FzName = zName 51802 (*fs_real_file)(unsafe.Pointer(pReal)).FpFile = pReal + 1*48 51803 51804 rc = (*struct { 51805 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 51806 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zName, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile, real_flags, pOutFlags) 51807 if !(rc != SQLITE_OK) { 51808 goto __7 51809 } 51810 goto open_out 51811 __7: 51812 ; 51813 pRealFile = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51814 51815 rc = (*struct { 51816 f func(*libc.TLS, uintptr, uintptr) int32 51817 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxFileSize})).f(tls, pRealFile, bp) 51818 if !(rc != SQLITE_OK) { 51819 goto __8 51820 } 51821 goto open_out 51822 __8: 51823 ; 51824 if !(*(*sqlite3_int64)(unsafe.Pointer(bp)) == int64(0)) { 51825 goto __9 51826 } 51827 rc = (*struct { 51828 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51829 })(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)) 51830 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = BLOBSIZE 51831 goto __10 51832 __9: 51833 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = int32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 51834 rc = (*struct { 51835 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51836 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxRead})).f(tls, pRealFile, bp+8, 4, int64(0)) 51837 (*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))) 51838 if !(rc == SQLITE_OK) { 51839 goto __11 51840 } 51841 rc = (*struct { 51842 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51843 })(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)) 51844 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) { 51845 goto __12 51846 } 51847 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob 51848 __12: 51849 ; 51850 __11: 51851 ; 51852 __10: 51853 ; 51854 if !(rc == SQLITE_OK) { 51855 goto __13 51856 } 51857 (*fs_real_file)(unsafe.Pointer(pReal)).FpNext = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 51858 if !((*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0) { 51859 goto __14 51860 } 51861 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = pReal + 32 51862 __14: 51863 ; 51864 (*fs_real_file)(unsafe.Pointer(pReal)).FppThis = pFsVfs + 168 51865 (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList = pReal 51866 __13: 51867 ; 51868 __5: 51869 ; 51870 open_out: 51871 if !(pReal != 0) { 51872 goto __15 51873 } 51874 if !(rc == SQLITE_OK) { 51875 goto __16 51876 } 51877 (*fs_file)(unsafe.Pointer(p)).FpReal = pReal 51878 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef++ 51879 goto __17 51880 __16: 51881 if !((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods != 0) { 51882 goto __18 51883 } 51884 (*struct { 51885 f func(*libc.TLS, uintptr) int32 51886 })(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) 51887 __18: 51888 ; 51889 sqlite3.Xsqlite3_free(tls, pReal) 51890 __17: 51891 ; 51892 __15: 51893 ; 51894 return rc 51895 } 51896 51897 func fsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 51898 var rc int32 = SQLITE_OK 51899 var pFsVfs uintptr = pVfs 51900 var pReal uintptr 51901 var pF uintptr 51902 var nName int32 = int32(libc.Xstrlen(tls, zPath)) - 8 51903 51904 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 51905 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 { 51906 } 51907 if pReal != 0 { 51908 pF = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 51909 rc = (*struct { 51910 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51911 })(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)) 51912 if rc == SQLITE_OK { 51913 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = 0 51914 } 51915 } 51916 return rc 51917 } 51918 51919 func fsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 51920 var pFsVfs uintptr = pVfs 51921 var pReal uintptr 51922 var isJournal int32 = 0 51923 var nName int32 = int32(libc.Xstrlen(tls, zPath)) 51924 51925 if flags != SQLITE_ACCESS_EXISTS { 51926 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51927 return (*struct { 51928 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51929 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxAccess})).f(tls, pParent, zPath, flags, pResOut) 51930 } 51931 51932 if nName > 8 && libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nName-8)) == 0 { 51933 nName = nName - 8 51934 isJournal = 1 51935 } 51936 51937 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 51938 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 { 51939 } 51940 51941 *(*int32)(unsafe.Pointer(pResOut)) = libc.Bool32(pReal != 0 && (!(isJournal != 0) || (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal > 0)) 51942 return SQLITE_OK 51943 } 51944 51945 func fsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 51946 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51947 return (*struct { 51948 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51949 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zPath, nOut, zOut) 51950 } 51951 51952 func fsDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 51953 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51954 return (*struct { 51955 f func(*libc.TLS, uintptr, uintptr) uintptr 51956 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlOpen})).f(tls, pParent, zPath) 51957 } 51958 51959 func fsDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 51960 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51961 (*struct { 51962 f func(*libc.TLS, uintptr, int32, uintptr) 51963 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlError})).f(tls, pParent, nByte, zErrMsg) 51964 } 51965 51966 func fsDlSym(tls *libc.TLS, pVfs uintptr, pH uintptr, zSym uintptr) uintptr { 51967 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51968 return (*struct { 51969 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51970 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlSym})).f(tls, pParent, pH, zSym) 51971 } 51972 51973 func fsDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 51974 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51975 (*struct { 51976 f func(*libc.TLS, uintptr, uintptr) 51977 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlClose})).f(tls, pParent, pHandle) 51978 } 51979 51980 func fsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 51981 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51982 return (*struct { 51983 f func(*libc.TLS, uintptr, int32, uintptr) int32 51984 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxRandomness})).f(tls, pParent, nByte, zBufOut) 51985 } 51986 51987 func fsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 51988 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51989 return (*struct { 51990 f func(*libc.TLS, uintptr, int32) int32 51991 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxSleep})).f(tls, pParent, nMicro) 51992 } 51993 51994 func fsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 51995 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 51996 return (*struct { 51997 f func(*libc.TLS, uintptr, uintptr) int32 51998 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxCurrentTime})).f(tls, pParent, pTimeOut) 51999 } 52000 52001 func fs_register(tls *libc.TLS) int32 { 52002 if fs_vfs.FpParent != 0 { 52003 return SQLITE_OK 52004 } 52005 fs_vfs.FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 52006 fs_vfs.Fbase.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(fs_vfs.FpParent)).FmxPathname 52007 fs_vfs.Fbase.FszOsFile = func() int32 { 52008 if uint64(unsafe.Sizeof(tmp_file{})) > uint64(unsafe.Sizeof(fs_file{})) { 52009 return int32(unsafe.Sizeof(tmp_file{})) 52010 } 52011 return int32(unsafe.Sizeof(fs_file{})) 52012 }() 52013 return sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&fs_vfs)), 0) 52014 } 52015 52016 func SqlitetestOnefile_Init(tls *libc.TLS) int32 { 52017 return fs_register(tls) 52018 } 52019 52020 type VfslogVfs1 = struct { 52021 Fbase sqlite3_vfs 52022 FpVfs uintptr 52023 FiNextFileId int32 52024 F__ccgo_pad1 [4]byte 52025 FpLog uintptr 52026 FiOffset sqlite3_int64 52027 FnBuf int32 52028 FaBuf [8192]int8 52029 F__ccgo_pad2 [4]byte 52030 } 52031 52032 type VfslogVfs = VfslogVfs1 52033 type VfslogFile1 = struct { 52034 Fbase sqlite3_file 52035 FpReal uintptr 52036 FpVfslog uintptr 52037 FiFileId int32 52038 F__ccgo_pad1 [4]byte 52039 } 52040 52041 type VfslogFile = VfslogFile1 52042 52043 var vfslog_vfs = sqlite3_vfs{ 52044 FiVersion: 1, 52045 FszOsFile: int32(unsafe.Sizeof(VfslogFile{})), 52046 FmxPathname: INST_MAX_PATHNAME, 52047 FxOpen: 0, 52048 FxDelete: 0, 52049 FxAccess: 0, 52050 FxFullPathname: 0, 52051 FxDlOpen: 0, 52052 FxDlError: 0, 52053 FxDlSym: 0, 52054 FxDlClose: 0, 52055 FxRandomness: 0, 52056 FxSleep: 0, 52057 FxCurrentTime: 0, 52058 FxGetLastError: 0, 52059 FxCurrentTimeInt64: 0, 52060 } 52061 52062 var vfslog_io_methods = sqlite3_io_methods{ 52063 FiVersion: 2, 52064 FxClose: 0, 52065 FxRead: 0, 52066 FxWrite: 0, 52067 FxTruncate: 0, 52068 FxSync: 0, 52069 FxFileSize: 0, 52070 FxLock: 0, 52071 FxUnlock: 0, 52072 FxCheckReservedLock: 0, 52073 FxFileControl: 0, 52074 FxSectorSize: 0, 52075 FxDeviceCharacteristics: 0, 52076 FxShmMap: 0, 52077 FxShmLock: 0, 52078 FxShmBarrier: 0, 52079 FxShmUnmap: 0, 52080 } 52081 52082 func vfslog_time(tls *libc.TLS) sqlite3_uint64 { 52083 bp := tls.Alloc(16) 52084 defer tls.Free(16) 52085 52086 libc.Xgettimeofday(tls, bp, uintptr(0)) 52087 return sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_usec) + sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_sec)*uint64(1000000) 52088 } 52089 52090 func vfslogClose(tls *libc.TLS, pFile uintptr) int32 { 52091 var t sqlite3_uint64 52092 var rc int32 = SQLITE_OK 52093 var p uintptr = pFile 52094 52095 t = vfslog_time(tls) 52096 if (*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 52097 rc = (*struct { 52098 f func(*libc.TLS, uintptr) int32 52099 })(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) 52100 } 52101 t = vfslog_time(tls) - t 52102 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CLOSE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52103 return rc 52104 } 52105 52106 func vfslogRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52107 var rc int32 52108 var t sqlite3_uint64 52109 var p uintptr = pFile 52110 t = vfslog_time(tls) 52111 rc = (*struct { 52112 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52113 })(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) 52114 t = vfslog_time(tls) - t 52115 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_READ, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 52116 return rc 52117 } 52118 52119 func vfslogWrite(tls *libc.TLS, pFile uintptr, z uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52120 var rc int32 52121 var t sqlite3_uint64 52122 var p uintptr = pFile 52123 t = vfslog_time(tls) 52124 rc = (*struct { 52125 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52126 })(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) 52127 t = vfslog_time(tls) - t 52128 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_WRITE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 52129 return rc 52130 } 52131 52132 func vfslogTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52133 var rc int32 52134 var t sqlite3_uint64 52135 var p uintptr = pFile 52136 t = vfslog_time(tls) 52137 rc = (*struct { 52138 f func(*libc.TLS, uintptr, sqlite3_int64) int32 52139 })(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) 52140 t = vfslog_time(tls) - t 52141 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_TRUNCATE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, int32(size)) 52142 return rc 52143 } 52144 52145 func vfslogSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52146 var rc int32 52147 var t sqlite3_uint64 52148 var p uintptr = pFile 52149 t = vfslog_time(tls) 52150 rc = (*struct { 52151 f func(*libc.TLS, uintptr, int32) int32 52152 })(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) 52153 t = vfslog_time(tls) - t 52154 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SYNC, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, flags, 0) 52155 return rc 52156 } 52157 52158 func vfslogFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52159 var rc int32 52160 var t sqlite3_uint64 52161 var p uintptr = pFile 52162 t = vfslog_time(tls) 52163 rc = (*struct { 52164 f func(*libc.TLS, uintptr, uintptr) int32 52165 })(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) 52166 t = vfslog_time(tls) - t 52167 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)))) 52168 return rc 52169 } 52170 52171 func vfslogLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52172 var rc int32 52173 var t sqlite3_uint64 52174 var p uintptr = pFile 52175 t = vfslog_time(tls) 52176 rc = (*struct { 52177 f func(*libc.TLS, uintptr, int32) int32 52178 })(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) 52179 t = vfslog_time(tls) - t 52180 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_LOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 52181 return rc 52182 } 52183 52184 func vfslogUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52185 var rc int32 52186 var t sqlite3_uint64 52187 var p uintptr = pFile 52188 t = vfslog_time(tls) 52189 rc = (*struct { 52190 f func(*libc.TLS, uintptr, int32) int32 52191 })(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) 52192 t = vfslog_time(tls) - t 52193 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_UNLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 52194 return rc 52195 } 52196 52197 func vfslogCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52198 var rc int32 52199 var t sqlite3_uint64 52200 var p uintptr = pFile 52201 t = vfslog_time(tls) 52202 rc = (*struct { 52203 f func(*libc.TLS, uintptr, uintptr) int32 52204 })(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) 52205 t = vfslog_time(tls) - t 52206 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CHECKRESERVEDLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, *(*int32)(unsafe.Pointer(pResOut)), 0) 52207 return rc 52208 } 52209 52210 func vfslogFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52211 bp := tls.Alloc(8) 52212 defer tls.Free(8) 52213 52214 var p uintptr = pFile 52215 var rc int32 = (*struct { 52216 f func(*libc.TLS, uintptr, int32, uintptr) int32 52217 })(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) 52218 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 52219 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35525, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 52220 } 52221 return rc 52222 } 52223 52224 func vfslogSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52225 var rc int32 52226 var t sqlite3_uint64 52227 var p uintptr = pFile 52228 t = vfslog_time(tls) 52229 rc = (*struct { 52230 f func(*libc.TLS, uintptr) int32 52231 })(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) 52232 t = vfslog_time(tls) - t 52233 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SECTORSIZE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52234 return rc 52235 } 52236 52237 func vfslogDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52238 var rc int32 52239 var t sqlite3_uint64 52240 var p uintptr = pFile 52241 t = vfslog_time(tls) 52242 rc = (*struct { 52243 f func(*libc.TLS, uintptr) int32 52244 })(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) 52245 t = vfslog_time(tls) - t 52246 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_DEVCHAR, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52247 return rc 52248 } 52249 52250 func vfslogShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 52251 var rc int32 52252 var t sqlite3_uint64 52253 var p uintptr = pFile 52254 t = vfslog_time(tls) 52255 rc = (*struct { 52256 f func(*libc.TLS, uintptr, int32, int32, int32) int32 52257 })(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) 52258 t = vfslog_time(tls) - t 52259 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52260 return rc 52261 } 52262 52263 func vfslogShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) 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, int32, uintptr) int32 52270 })(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) 52271 t = vfslog_time(tls) - t 52272 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52273 return rc 52274 } 52275 52276 func vfslogShmBarrier(tls *libc.TLS, pFile uintptr) { 52277 var t sqlite3_uint64 52278 var p uintptr = pFile 52279 t = vfslog_time(tls) 52280 (*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) 52281 t = vfslog_time(tls) - t 52282 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMBARRIER, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), SQLITE_OK, 0, 0) 52283 } 52284 52285 func vfslogShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 52286 var rc int32 52287 var t sqlite3_uint64 52288 var p uintptr = pFile 52289 t = vfslog_time(tls) 52290 rc = (*struct { 52291 f func(*libc.TLS, uintptr, int32) int32 52292 })(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) 52293 t = vfslog_time(tls) - t 52294 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMUNMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52295 return rc 52296 } 52297 52298 func vfslogOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 52299 var rc int32 52300 var t sqlite3_uint64 52301 var p uintptr = pFile 52302 var pLog uintptr = pVfs 52303 52304 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&vfslog_io_methods)) 52305 (*VfslogFile)(unsafe.Pointer(p)).FpReal = p + 1*32 52306 (*VfslogFile)(unsafe.Pointer(p)).FpVfslog = pVfs 52307 (*VfslogFile)(unsafe.Pointer(p)).FiFileId = libc.PreIncInt32(&(*VfslogVfs)(unsafe.Pointer(pLog)).FiNextFileId, 1) 52308 52309 t = vfslog_time(tls) 52310 rc = (*struct { 52311 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52312 })(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) 52313 t = vfslog_time(tls) - t 52314 52315 vfslog_call(tls, pVfs, OS_OPEN, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52316 vfslog_string(tls, pVfs, zName) 52317 return rc 52318 } 52319 52320 func vfslogDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 52321 var rc int32 52322 var t sqlite3_uint64 52323 t = vfslog_time(tls) 52324 rc = (*struct { 52325 f func(*libc.TLS, uintptr, uintptr, int32) int32 52326 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDelete})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, dirSync) 52327 t = vfslog_time(tls) - t 52328 vfslog_call(tls, pVfs, OS_DELETE, 0, int64(t), rc, dirSync, 0) 52329 vfslog_string(tls, pVfs, zPath) 52330 return rc 52331 } 52332 52333 func vfslogAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 52334 var rc int32 52335 var t sqlite3_uint64 52336 t = vfslog_time(tls) 52337 rc = (*struct { 52338 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52339 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxAccess})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, flags, pResOut) 52340 t = vfslog_time(tls) - t 52341 vfslog_call(tls, pVfs, OS_ACCESS, 0, int64(t), rc, flags, *(*int32)(unsafe.Pointer(pResOut))) 52342 vfslog_string(tls, pVfs, zPath) 52343 return rc 52344 } 52345 52346 func vfslogFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 52347 return (*struct { 52348 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52349 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxFullPathname})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, nOut, zOut) 52350 } 52351 52352 func vfslogDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 52353 return (*struct { 52354 f func(*libc.TLS, uintptr, uintptr) uintptr 52355 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlOpen})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath) 52356 } 52357 52358 func vfslogDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 52359 (*struct { 52360 f func(*libc.TLS, uintptr, int32, uintptr) 52361 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zErrMsg) 52362 } 52363 52364 func vfslogDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 52365 return (*struct { 52366 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 52367 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlSym})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p, zSym) 52368 } 52369 52370 func vfslogDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 52371 (*struct { 52372 f func(*libc.TLS, uintptr, uintptr) 52373 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlClose})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pHandle) 52374 } 52375 52376 func vfslogRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 52377 return (*struct { 52378 f func(*libc.TLS, uintptr, int32, uintptr) int32 52379 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxRandomness})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zBufOut) 52380 } 52381 52382 func vfslogSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 52383 return (*struct { 52384 f func(*libc.TLS, uintptr, int32) int32 52385 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxSleep})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nMicro) 52386 } 52387 52388 func vfslogCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 52389 return (*struct { 52390 f func(*libc.TLS, uintptr, uintptr) int32 52391 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTime})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pTimeOut) 52392 } 52393 52394 func vfslogGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 52395 return (*struct { 52396 f func(*libc.TLS, uintptr, int32, uintptr) int32 52397 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxGetLastError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, a, b) 52398 } 52399 52400 func vfslogCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 52401 return (*struct { 52402 f func(*libc.TLS, uintptr, uintptr) int32 52403 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTimeInt64})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p) 52404 } 52405 52406 func vfslog_flush(tls *libc.TLS, p uintptr) { 52407 var pending int32 = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 52408 var persist int32 = sqlite3.Xsqlite3_io_error_persist 52409 var diskfull int32 = sqlite3.Xsqlite3_diskfull_pending 52410 52411 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(0)) 52412 sqlite3.Xsqlite3_io_error_persist = 0 52413 sqlite3.Xsqlite3_diskfull_pending = 0 52414 52415 if (*VfslogVfs)(unsafe.Pointer(p)).FnBuf != 0 { 52416 (*struct { 52417 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52418 })(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) 52419 *(*sqlite3_int64)(unsafe.Pointer(p + 192)) += sqlite3_int64((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 52420 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 0 52421 } 52422 52423 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, pending) 52424 sqlite3.Xsqlite3_io_error_persist = persist 52425 sqlite3.Xsqlite3_diskfull_pending = diskfull 52426 } 52427 52428 func put32bits(tls *libc.TLS, p uintptr, v uint32) { 52429 *(*uint8)(unsafe.Pointer(p)) = uint8(v >> 24) 52430 *(*uint8)(unsafe.Pointer(p + 1)) = uint8(v >> 16) 52431 *(*uint8)(unsafe.Pointer(p + 2)) = uint8(v >> 8) 52432 *(*uint8)(unsafe.Pointer(p + 3)) = uint8(v) 52433 } 52434 52435 func vfslog_call(tls *libc.TLS, pVfs uintptr, eEvent int32, iFileid int32, nClick sqlite3_int64, return_code int32, size int32, offset int32) { 52436 var p uintptr = pVfs 52437 var zRec uintptr 52438 if uint64(24+(*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(eEvent)) 52443 put32bits(tls, zRec+4, uint32(iFileid)) 52444 put32bits(tls, zRec+8, uint32(nClick&int64(0xffff))) 52445 put32bits(tls, zRec+12, uint32(return_code)) 52446 put32bits(tls, zRec+16, uint32(size)) 52447 put32bits(tls, zRec+20, uint32(offset)) 52448 *(*int32)(unsafe.Pointer(p + 200)) += 24 52449 } 52450 52451 func vfslog_string(tls *libc.TLS, pVfs uintptr, zStr uintptr) { 52452 var p uintptr = pVfs 52453 var zRec uintptr 52454 var nStr int32 52455 if zStr != 0 { 52456 nStr = int32(libc.Xstrlen(tls, zStr)) 52457 } else { 52458 nStr = 0 52459 } 52460 if uint64(4+nStr+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]int8{})) { 52461 vfslog_flush(tls, p) 52462 } 52463 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 52464 put32bits(tls, zRec, uint32(nStr)) 52465 if zStr != 0 { 52466 libc.Xmemcpy(tls, zRec+4, zStr, uint64(nStr)) 52467 } 52468 *(*int32)(unsafe.Pointer(p + 200)) += 4 + nStr 52469 } 52470 52471 func vfslog_finalize(tls *libc.TLS, p uintptr) { 52472 if (*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods != 0 { 52473 vfslog_flush(tls, p) 52474 (*struct { 52475 f func(*libc.TLS, uintptr) int32 52476 })(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) 52477 } 52478 sqlite3.Xsqlite3_free(tls, p) 52479 } 52480 52481 func sqlite3_vfslog_finalize(tls *libc.TLS, zVfs uintptr) int32 { 52482 var pVfs uintptr 52483 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 52484 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 52485 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52486 }{vfslogOpen})) { 52487 return SQLITE_ERROR 52488 } 52489 sqlite3.Xsqlite3_vfs_unregister(tls, pVfs) 52490 vfslog_finalize(tls, pVfs) 52491 return SQLITE_OK 52492 } 52493 52494 func sqlite3_vfslog_new(tls *libc.TLS, zVfs uintptr, zParentVfs uintptr, zLog uintptr) int32 { 52495 bp := tls.Alloc(4) 52496 defer tls.Free(4) 52497 52498 var p uintptr 52499 var pParent uintptr 52500 var nByte int32 52501 52502 var rc int32 52503 var zFile uintptr 52504 var nVfs int32 52505 52506 pParent = sqlite3.Xsqlite3_vfs_find(tls, zParentVfs) 52507 if !(pParent != 0) { 52508 return SQLITE_ERROR 52509 } 52510 52511 nVfs = int32(libc.Xstrlen(tls, zVfs)) 52512 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)) 52513 p = sqlite3.Xsqlite3_malloc(tls, nByte) 52514 libc.Xmemset(tls, p, 0, uint64(nByte)) 52515 52516 (*VfslogVfs)(unsafe.Pointer(p)).FpVfs = pParent 52517 (*VfslogVfs)(unsafe.Pointer(p)).FpLog = p + 1*8400 52518 libc.Xmemcpy(tls, p, uintptr(unsafe.Pointer(&vfslog_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 52519 (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName = (*VfslogVfs)(unsafe.Pointer(p)).FpLog + uintptr((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) 52520 *(*int32)(unsafe.Pointer(p + 4)) += (*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile 52521 libc.Xmemcpy(tls, (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName, zVfs, uint64(nVfs)) 52522 52523 zFile = (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName + uintptr(nVfs+1) 52524 (*struct { 52525 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52526 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zLog, (*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname, zFile) 52527 52528 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SUPER_JOURNAL 52529 (*struct { 52530 f func(*libc.TLS, uintptr, uintptr, int32) int32 52531 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDelete})).f(tls, pParent, zFile, 0) 52532 rc = (*struct { 52533 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52534 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zFile, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, *(*int32)(unsafe.Pointer(bp)), bp) 52535 if rc == SQLITE_OK { 52536 libc.Xmemcpy(tls, p+204, ts+35535, uint64(20)) 52537 (*VfslogVfs)(unsafe.Pointer(p)).FiOffset = int64(0) 52538 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 20 52539 rc = sqlite3.Xsqlite3_vfs_register(tls, p, 1) 52540 } 52541 if rc != 0 { 52542 vfslog_finalize(tls, p) 52543 } 52544 return rc 52545 } 52546 52547 func sqlite3_vfslog_annotate(tls *libc.TLS, zVfs uintptr, zMsg uintptr) int32 { 52548 var pVfs uintptr 52549 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 52550 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 52551 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52552 }{vfslogOpen})) { 52553 return SQLITE_ERROR 52554 } 52555 vfslog_call(tls, pVfs, OS_ANNOTATE, 0, int64(0), 0, 0, 0) 52556 vfslog_string(tls, pVfs, zMsg) 52557 return SQLITE_OK 52558 } 52559 52560 func vfslog_eventname(tls *libc.TLS, eEvent int32) uintptr { 52561 var zEvent uintptr = uintptr(0) 52562 52563 switch eEvent { 52564 case OS_CLOSE: 52565 zEvent = ts + 35556 52566 break 52567 case OS_READ: 52568 zEvent = ts + 35563 52569 break 52570 case OS_WRITE: 52571 zEvent = ts + 35569 52572 break 52573 case OS_TRUNCATE: 52574 zEvent = ts + 35576 52575 break 52576 case OS_SYNC: 52577 zEvent = ts + 27843 52578 break 52579 case OS_FILESIZE: 52580 zEvent = ts + 35586 52581 break 52582 case OS_LOCK: 52583 zEvent = ts + 35596 52584 break 52585 case OS_UNLOCK: 52586 zEvent = ts + 35602 52587 break 52588 case OS_CHECKRESERVEDLOCK: 52589 zEvent = ts + 35610 52590 break 52591 case OS_FILECONTROL: 52592 zEvent = ts + 35624 52593 break 52594 case OS_SECTORSIZE: 52595 zEvent = ts + 35637 52596 break 52597 case OS_DEVCHAR: 52598 zEvent = ts + 35649 52599 break 52600 case OS_OPEN: 52601 zEvent = ts + 27421 52602 break 52603 case OS_DELETE: 52604 zEvent = ts + 35661 52605 break 52606 case OS_ACCESS: 52607 zEvent = ts + 35669 52608 break 52609 case OS_FULLPATHNAME: 52610 zEvent = ts + 35677 52611 break 52612 case OS_RANDOMNESS: 52613 zEvent = ts + 35691 52614 break 52615 case OS_SLEEP: 52616 zEvent = ts + 35703 52617 break 52618 case OS_CURRENTTIME: 52619 zEvent = ts + 35710 52620 break 52621 52622 case OS_SHMUNMAP: 52623 zEvent = ts + 35723 52624 break 52625 case OS_SHMLOCK: 52626 zEvent = ts + 35733 52627 break 52628 case OS_SHMBARRIER: 52629 zEvent = ts + 35742 52630 break 52631 case OS_SHMMAP: 52632 zEvent = ts + 35754 52633 break 52634 52635 case OS_ANNOTATE: 52636 zEvent = ts + 35762 52637 break 52638 } 52639 52640 return zEvent 52641 } 52642 52643 type VfslogVtab1 = struct { 52644 Fbase sqlite3_vtab 52645 FpFd uintptr 52646 FnByte sqlite3_int64 52647 FzFile uintptr 52648 } 52649 52650 type VfslogVtab = VfslogVtab1 52651 type VfslogCsr1 = struct { 52652 Fbase sqlite3_vtab_cursor 52653 FiRowid sqlite3_int64 52654 FiOffset sqlite3_int64 52655 FzTransient uintptr 52656 FnFile int32 52657 F__ccgo_pad1 [4]byte 52658 FazFile uintptr 52659 FaBuf [1024]uint8 52660 } 52661 52662 type VfslogCsr = VfslogCsr1 52663 52664 func get32bits(tls *libc.TLS, p uintptr) uint32 { 52665 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)))) 52666 } 52667 52668 func dequote(tls *libc.TLS, z uintptr) { 52669 var quote int8 52670 quote = *(*int8)(unsafe.Pointer(z)) 52671 if int32(quote) == '[' || int32(quote) == '\'' || int32(quote) == '"' || int32(quote) == '`' { 52672 var iIn int32 = 1 52673 var iOut int32 = 0 52674 if int32(quote) == '[' { 52675 quote = int8(']') 52676 } 52677 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 52678 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(quote) { 52679 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(quote) { 52680 break 52681 } 52682 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = quote 52683 iIn = iIn + 2 52684 } else { 52685 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 52686 } 52687 } 52688 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 52689 } 52690 } 52691 52692 func vlogConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 52693 bp := tls.Alloc(12) 52694 defer tls.Free(12) 52695 52696 var pVfs uintptr 52697 52698 var p uintptr 52699 var rc int32 52700 var nByte int32 52701 var zFile uintptr 52702 52703 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 52704 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 52705 nByte = int32(uint64(unsafe.Sizeof(VfslogVtab{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname)) 52706 p = sqlite3.Xsqlite3_malloc(tls, nByte) 52707 if p == uintptr(0) { 52708 return SQLITE_NOMEM 52709 } 52710 libc.Xmemset(tls, p, 0, uint64(nByte)) 52711 52712 (*VfslogVtab)(unsafe.Pointer(p)).FpFd = p + 1*48 52713 (*VfslogVtab)(unsafe.Pointer(p)).FzFile = (*VfslogVtab)(unsafe.Pointer(p)).FpFd + uintptr((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) 52714 52715 zFile = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 52716 if !(zFile != 0) { 52717 sqlite3.Xsqlite3_free(tls, p) 52718 return SQLITE_NOMEM 52719 } 52720 dequote(tls, zFile) 52721 (*struct { 52722 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52723 })(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) 52724 sqlite3.Xsqlite3_free(tls, zFile) 52725 52726 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL 52727 rc = (*struct { 52728 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52729 })(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) 52730 52731 if rc == SQLITE_OK { 52732 (*struct { 52733 f func(*libc.TLS, uintptr, uintptr) int32 52734 })(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) 52735 sqlite3.Xsqlite3_declare_vtab(tls, db, 52736 ts+35773) 52737 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 52738 } else { 52739 sqlite3.Xsqlite3_free(tls, p) 52740 } 52741 52742 return rc 52743 } 52744 52745 func vlogBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 52746 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 52747 return SQLITE_OK 52748 } 52749 52750 func vlogDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 52751 var p uintptr = pVtab 52752 if (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods != 0 { 52753 (*struct { 52754 f func(*libc.TLS, uintptr) int32 52755 })(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) 52756 (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods = uintptr(0) 52757 } 52758 sqlite3.Xsqlite3_free(tls, p) 52759 return SQLITE_OK 52760 } 52761 52762 func vlogOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 52763 var pCsr uintptr 52764 52765 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(VfslogCsr{}))) 52766 if !(pCsr != 0) { 52767 return SQLITE_NOMEM 52768 } 52769 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(VfslogCsr{}))) 52770 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 52771 return SQLITE_OK 52772 } 52773 52774 func vlogClose(tls *libc.TLS, pCursor uintptr) int32 { 52775 var p uintptr = pCursor 52776 var i int32 52777 for i = 0; i < (*VfslogCsr)(unsafe.Pointer(p)).FnFile; i++ { 52778 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(p)).FazFile + uintptr(i)*8))) 52779 } 52780 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FazFile) 52781 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FzTransient) 52782 sqlite3.Xsqlite3_free(tls, p) 52783 return SQLITE_OK 52784 } 52785 52786 func vlogNext(tls *libc.TLS, pCursor uintptr) int32 { 52787 bp := tls.Alloc(4) 52788 defer tls.Free(4) 52789 52790 var pCsr uintptr = pCursor 52791 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 52792 var rc int32 = SQLITE_OK 52793 var nRead int32 52794 52795 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient) 52796 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = uintptr(0) 52797 52798 nRead = 24 52799 if (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead) <= (*VfslogVtab)(unsafe.Pointer(p)).FnByte { 52800 var eEvent int32 52801 rc = (*struct { 52802 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52803 })(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) 52804 52805 eEvent = int32(get32bits(tls, pCsr+48)) 52806 if rc == SQLITE_OK && 52807 (eEvent == OS_OPEN || eEvent == OS_DELETE || eEvent == OS_ACCESS) { 52808 rc = (*struct { 52809 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52810 })(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)) 52811 nRead = nRead + 4 52812 if rc == SQLITE_OK { 52813 var nStr int32 = int32(get32bits(tls, bp)) 52814 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, nStr+1) 52815 rc = (*struct { 52816 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52817 })(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)) 52818 *(*int8)(unsafe.Pointer(zStr + uintptr(nStr))) = int8(0) 52819 nRead = nRead + nStr 52820 52821 if eEvent == OS_OPEN { 52822 var iFileid int32 = int32(get32bits(tls, pCsr+48+4)) 52823 if iFileid >= (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile { 52824 var nNew int32 = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(iFileid+1)) 52825 (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile = sqlite3.Xsqlite3_realloc(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile, nNew) 52826 nNew = int32(uint64(nNew) - uint64(unsafe.Sizeof(uintptr(0)))*uint64((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)) 52827 libc.Xmemset(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile+uintptr((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)*8, 0, uint64(nNew)) 52828 (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile = iFileid + 1 52829 } 52830 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8))) 52831 *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8)) = zStr 52832 } else { 52833 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = zStr 52834 } 52835 } 52836 } 52837 } 52838 52839 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 8)) += int64(1) 52840 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 16)) += sqlite3_int64(nRead) 52841 return rc 52842 } 52843 52844 func vlogEof(tls *libc.TLS, pCursor uintptr) int32 { 52845 var pCsr uintptr = pCursor 52846 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 52847 return libc.Bool32((*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset >= (*VfslogVtab)(unsafe.Pointer(p)).FnByte) 52848 } 52849 52850 func vlogFilter(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 52851 var pCsr uintptr = pCursor 52852 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 52853 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset = int64(20) 52854 return vlogNext(tls, pCursor) 52855 } 52856 52857 func vlogColumn(tls *libc.TLS, pCursor uintptr, ctx uintptr, i int32) int32 { 52858 var val uint32 52859 var pCsr uintptr = pCursor 52860 52861 val = get32bits(tls, pCsr+48+uintptr(4*i)) 52862 52863 switch i { 52864 case 0: 52865 { 52866 sqlite3.Xsqlite3_result_text(tls, ctx, vfslog_eventname(tls, int32(val)), -1, uintptr(0)) 52867 break 52868 52869 } 52870 case 1: 52871 { 52872 var zStr uintptr = (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient 52873 if val != uint32(0) && val < uint32((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile) { 52874 zStr = *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(val)*8)) 52875 } 52876 sqlite3.Xsqlite3_result_text(tls, ctx, zStr, -1, libc.UintptrFromInt32(-1)) 52877 break 52878 52879 } 52880 default: 52881 sqlite3.Xsqlite3_result_int(tls, ctx, int32(val)) 52882 break 52883 } 52884 52885 return SQLITE_OK 52886 } 52887 52888 func vlogRowid(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 52889 var pCsr uintptr = pCursor 52890 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid 52891 return SQLITE_OK 52892 } 52893 52894 func sqlite3_vfslog_register(tls *libc.TLS, db uintptr) int32 { 52895 sqlite3.Xsqlite3_create_module(tls, db, ts+35828, uintptr(unsafe.Pointer(&vfslog_module)), uintptr(0)) 52896 return SQLITE_OK 52897 } 52898 52899 var vfslog_module = sqlite3_module{ 52900 FxCreate: 0, 52901 FxConnect: 0, 52902 FxBestIndex: 0, 52903 FxDisconnect: 0, 52904 FxDestroy: 0, 52905 FxOpen: 0, 52906 FxClose: 0, 52907 FxFilter: 0, 52908 FxNext: 0, 52909 FxEof: 0, 52910 FxColumn: 0, 52911 FxRowid: 0, 52912 } 52913 52914 func test_vfslog(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52915 bp := tls.Alloc(144) 52916 defer tls.Free(144) 52917 52918 var db uintptr 52919 52920 var rc int32 = SQLITE_ERROR 52921 52922 if objc < 2 { 52923 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 52924 return TCL_ERROR 52925 } 52926 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 { 52927 return TCL_ERROR 52928 } 52929 52930 switch uint32(*(*int32)(unsafe.Pointer(bp + 72))) { 52931 case uint32(0): 52932 { 52933 var zVfs uintptr 52934 var zMsg uintptr 52935 if objc != 4 { 52936 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+35835) 52937 return TCL_ERROR 52938 } 52939 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52940 zMsg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 52941 rc = sqlite3_vfslog_annotate(tls, zVfs, zMsg) 52942 if rc != SQLITE_OK { 52943 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35839, 0)) 52944 return TCL_ERROR 52945 } 52946 break 52947 52948 } 52949 case uint32(1): 52950 { 52951 var zVfs uintptr 52952 if objc != 3 { 52953 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35835) 52954 return TCL_ERROR 52955 } 52956 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52957 rc = sqlite3_vfslog_finalize(tls, zVfs) 52958 if rc != SQLITE_OK { 52959 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+35839, 0)) 52960 return TCL_ERROR 52961 } 52962 break 52963 52964 } 52965 52966 case uint32(2): 52967 { 52968 var zVfs uintptr 52969 var zParent uintptr 52970 var zLog uintptr 52971 if objc != 5 { 52972 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35846) 52973 return TCL_ERROR 52974 } 52975 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52976 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 52977 zLog = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 52978 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 52979 zParent = uintptr(0) 52980 } 52981 rc = sqlite3_vfslog_new(tls, zVfs, zParent, zLog) 52982 if rc != SQLITE_OK { 52983 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+35839, 0)) 52984 return TCL_ERROR 52985 } 52986 break 52987 52988 } 52989 52990 case uint32(3): 52991 { 52992 var zDb uintptr 52993 if objc != 3 { 52994 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 52995 return TCL_ERROR 52996 } 52997 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52998 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+80) != 0 { 52999 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 80)).FobjClientData)).Fdb 53000 rc = sqlite3_vfslog_register(tls, db) 53001 } 53002 if rc != SQLITE_OK { 53003 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+35865, zDb, uintptr(0))) 53004 return TCL_ERROR 53005 } 53006 break 53007 53008 } 53009 } 53010 53011 return TCL_OK 53012 } 53013 53014 var strs = [5]uintptr{ts + 35886, ts + 35895, ts + 14009, ts + 35904, uintptr(0)} 53015 53016 func SqlitetestOsinst_Init(tls *libc.TLS, interp uintptr) int32 { 53017 tcl.XTcl_CreateObjCommand(tls, interp, ts+35828, *(*uintptr)(unsafe.Pointer(&struct { 53018 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53019 }{test_vfslog})), uintptr(0), uintptr(0)) 53020 return TCL_OK 53021 } 53022 53023 type testpcacheGlobalType1 = struct { 53024 FpDummy uintptr 53025 FnInstance int32 53026 FdiscardChance uint32 53027 FprngSeed uint32 53028 FhighStress uint32 53029 } 53030 53031 type testpcacheGlobalType = testpcacheGlobalType1 53032 53033 var testpcacheGlobal testpcacheGlobalType 53034 53035 func testpcacheInit(tls *libc.TLS, pArg uintptr) int32 { 53036 testpcacheGlobal.FpDummy = sqlite3.Xsqlite3_malloc(tls, 10) 53037 if testpcacheGlobal.FpDummy == uintptr(0) { 53038 return SQLITE_NOMEM 53039 } 53040 return SQLITE_OK 53041 } 53042 53043 func testpcacheShutdown(tls *libc.TLS, pArg uintptr) { 53044 sqlite3.Xsqlite3_free(tls, testpcacheGlobal.FpDummy) 53045 testpcacheGlobal.FpDummy = uintptr(0) 53046 } 53047 53048 type testpcache1 = struct { 53049 FszPage int32 53050 FszExtra int32 53051 FbPurgeable int32 53052 FnFree int32 53053 FnPinned int32 53054 FiRand uint32 53055 FiMagic uint32 53056 F__ccgo_pad1 [4]byte 53057 Fa [217]struct { 53058 Fpage sqlite3_pcache_page 53059 Fkey uint32 53060 FisPinned int32 53061 } 53062 } 53063 53064 type testpcache = testpcache1 53065 type testpcachePage = struct { 53066 Fpage sqlite3_pcache_page 53067 Fkey uint32 53068 FisPinned int32 53069 } 53070 53071 func testpcacheRandom(tls *libc.TLS, p uintptr) uint32 { 53072 var x uint32 = uint32(0) 53073 var i int32 53074 for i = 0; i < 4; i++ { 53075 (*testpcache)(unsafe.Pointer(p)).FiRand = (*testpcache)(unsafe.Pointer(p)).FiRand*uint32(69069) + uint32(5) 53076 x = x<<8 | (*testpcache)(unsafe.Pointer(p)).FiRand>>16&uint32(0xff) 53077 } 53078 return x 53079 } 53080 53081 func testpcacheCreate(tls *libc.TLS, szPage int32, szExtra int32, bPurgeable int32) uintptr { 53082 var nMem int32 53083 var x uintptr 53084 var p uintptr 53085 var i int32 53086 53087 szPage = (szPage + 7) & libc.CplInt32(7) 53088 nMem = int32(uint64(unsafe.Sizeof(testpcache{})) + uint64(TESTPCACHE_NPAGE*(szPage+szExtra))) 53089 p = sqlite3.Xsqlite3_malloc(tls, nMem) 53090 if p == uintptr(0) { 53091 return uintptr(0) 53092 } 53093 x = p + 1*5240 53094 (*testpcache)(unsafe.Pointer(p)).FszPage = szPage 53095 (*testpcache)(unsafe.Pointer(p)).FszExtra = szExtra 53096 (*testpcache)(unsafe.Pointer(p)).FnFree = TESTPCACHE_NPAGE 53097 (*testpcache)(unsafe.Pointer(p)).FnPinned = 0 53098 (*testpcache)(unsafe.Pointer(p)).FiRand = testpcacheGlobal.FprngSeed 53099 (*testpcache)(unsafe.Pointer(p)).FbPurgeable = bPurgeable 53100 (*testpcache)(unsafe.Pointer(p)).FiMagic = uint32(TESTPCACHE_VALID) 53101 i = 0 53102 __1: 53103 if !(i < TESTPCACHE_NPAGE) { 53104 goto __3 53105 } 53106 { 53107 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53108 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 53109 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpBuf = x 53110 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpExtra = x + uintptr(szPage) 53111 53112 } 53113 goto __2 53114 __2: 53115 i++ 53116 x += uintptr(szPage + szExtra) 53117 goto __1 53118 goto __3 53119 __3: 53120 ; 53121 testpcacheGlobal.FnInstance++ 53122 return p 53123 } 53124 53125 func testpcacheCachesize(tls *libc.TLS, pCache uintptr, newSize int32) { 53126 var p uintptr = pCache 53127 _ = p 53128 53129 } 53130 53131 func testpcachePagecount(tls *libc.TLS, pCache uintptr) int32 { 53132 var p uintptr = pCache 53133 53134 return TESTPCACHE_NPAGE - (*testpcache)(unsafe.Pointer(p)).FnFree 53135 } 53136 53137 func testpcacheFetch(tls *libc.TLS, pCache uintptr, key uint32, createFlag int32) uintptr { 53138 var p uintptr = pCache 53139 var i int32 53140 var j int32 53141 53142 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53143 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == key { 53144 if !((*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0) { 53145 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53146 53147 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 1 53148 } 53149 return p + 32 + uintptr(i)*24 53150 } 53151 } 53152 53153 if createFlag == 0 { 53154 return uintptr(0) 53155 } 53156 53157 if (*testpcache)(unsafe.Pointer(p)).FnPinned == TESTPCACHE_NPAGE { 53158 return uintptr(0) 53159 } 53160 53161 if (*testpcache)(unsafe.Pointer(p)).FnPinned >= TESTPCACHE_NPAGE-TESTPCACHE_RESERVE && createFlag < 2 { 53162 return uintptr(0) 53163 } 53164 53165 if testpcacheGlobal.FhighStress != 0 && createFlag < 2 { 53166 return uintptr(0) 53167 } 53168 53169 if (*testpcache)(unsafe.Pointer(p)).FnFree > TESTPCACHE_RESERVE || createFlag == 2 && (*testpcache)(unsafe.Pointer(p)).FnFree > 0 { 53170 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 53171 i = 0 53172 __1: 53173 if !(i < TESTPCACHE_NPAGE) { 53174 goto __3 53175 } 53176 { 53177 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey == uint32(0) { 53178 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 53179 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 53180 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 53181 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 53182 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53183 (*testpcache)(unsafe.Pointer(p)).FnFree-- 53184 53185 return p + 32 + uintptr(j)*24 53186 } 53187 53188 } 53189 goto __2 53190 __2: 53191 i++ 53192 j = (j + 1) % TESTPCACHE_NPAGE 53193 goto __1 53194 goto __3 53195 __3: 53196 } 53197 53198 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable == 0 { 53199 return uintptr(0) 53200 } 53201 53202 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 53203 i = 0 53204 __4: 53205 if !(i < TESTPCACHE_NPAGE) { 53206 goto __6 53207 } 53208 { 53209 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey > uint32(0) && (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).FisPinned == 0 { 53210 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 53211 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 53212 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 53213 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 53214 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53215 53216 return p + 32 + uintptr(j)*24 53217 } 53218 53219 } 53220 goto __5 53221 __5: 53222 i++ 53223 j = (j + 1) % TESTPCACHE_NPAGE 53224 goto __4 53225 goto __6 53226 __6: 53227 ; 53228 return uintptr(0) 53229 } 53230 53231 func testpcacheUnpin(tls *libc.TLS, pCache uintptr, pOldPage uintptr, discard int32) { 53232 var p uintptr = pCache 53233 var i int32 53234 53235 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable != 0 && 53236 uint32(100)-testpcacheGlobal.FdiscardChance <= testpcacheRandom(tls, p)%uint32(100) { 53237 discard = 1 53238 } 53239 53240 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53241 if p+32+uintptr(i)*24 == pOldPage { 53242 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 53243 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 53244 53245 if discard != 0 { 53246 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53247 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53248 53249 } 53250 return 53251 } 53252 } 53253 53254 } 53255 53256 func testpcacheRekey(tls *libc.TLS, pCache uintptr, pOldPage uintptr, oldKey uint32, newKey uint32) { 53257 var p uintptr = pCache 53258 var i int32 53259 53260 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53261 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == newKey { 53262 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53263 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53264 53265 break 53266 } 53267 } 53268 53269 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53270 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == oldKey { 53271 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = newKey 53272 return 53273 } 53274 } 53275 53276 } 53277 53278 func testpcacheTruncate(tls *libc.TLS, pCache uintptr, iLimit uint32) { 53279 var p uintptr = pCache 53280 var i uint32 53281 53282 for i = uint32(0); i < uint32(TESTPCACHE_NPAGE); i++ { 53283 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey >= iLimit { 53284 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 53285 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0 { 53286 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 53287 53288 } 53289 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53290 53291 } 53292 } 53293 } 53294 53295 func testpcacheDestroy(tls *libc.TLS, pCache uintptr) { 53296 var p uintptr = pCache 53297 53298 (*testpcache)(unsafe.Pointer(p)).FiMagic = TESTPCACHE_CLEAR 53299 sqlite3.Xsqlite3_free(tls, p) 53300 testpcacheGlobal.FnInstance-- 53301 } 53302 53303 func installTestPCache(tls *libc.TLS, installFlag int32, discardChance uint32, prngSeed uint32, highStress uint32) { 53304 bp := tls.Alloc(24) 53305 defer tls.Free(24) 53306 53307 testpcacheGlobal.FdiscardChance = discardChance 53308 testpcacheGlobal.FprngSeed = prngSeed ^ prngSeed<<16 53309 testpcacheGlobal.FhighStress = highStress 53310 if installFlag != isInstalled { 53311 if installFlag != 0 { 53312 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp, uintptr(unsafe.Pointer(&defaultPcache)))) 53313 53314 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+8, uintptr(unsafe.Pointer(&testPcache)))) 53315 } else { 53316 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&defaultPcache)))) 53317 } 53318 isInstalled = installFlag 53319 } 53320 } 53321 53322 var testPcache = sqlite3_pcache_methods2{ 53323 FiVersion: 1, 53324 FpArg: 0, 53325 FxInit: 0, 53326 FxShutdown: 0, 53327 FxCreate: 0, 53328 FxCachesize: 0, 53329 FxPagecount: 0, 53330 FxFetch: 0, 53331 FxUnpin: 0, 53332 FxRekey: 0, 53333 FxTruncate: 0, 53334 FxDestroy: 0, 53335 } 53336 var defaultPcache sqlite3_pcache_methods2 53337 var isInstalled int32 = 0 53338 53339 type quota_FILE1 = struct { 53340 Ff uintptr 53341 FiOfst sqlite3_int64 53342 FpFile uintptr 53343 } 53344 53345 type quota_FILE = quota_FILE1 53346 53347 type quotaGroup1 = struct { 53348 FzPattern uintptr 53349 FiLimit sqlite3_int64 53350 FiSize sqlite3_int64 53351 FxCallback uintptr 53352 FpArg uintptr 53353 FxDestroy uintptr 53354 FpNext uintptr 53355 FppPrev uintptr 53356 FpFiles uintptr 53357 } 53358 53359 type quotaGroup = quotaGroup1 53360 type quotaConn1 = struct { 53361 Fbase sqlite3_file 53362 FpFile uintptr 53363 } 53364 53365 type quotaConn = quotaConn1 53366 type quotaFile1 = struct { 53367 FzFilename uintptr 53368 FpGroup uintptr 53369 FiSize sqlite3_int64 53370 FnRef int32 53371 FdeleteOnClose int32 53372 FpNext uintptr 53373 FppPrev uintptr 53374 } 53375 53376 type quotaFile = quotaFile1 53377 53378 var gQuota struct { 53379 FpOrigVfs uintptr 53380 FsThisVfs sqlite3_vfs 53381 FsIoMethodsV1 sqlite3_io_methods 53382 FsIoMethodsV2 sqlite3_io_methods 53383 FisInitialized int32 53384 F__ccgo_pad1 [4]byte 53385 FpMutex uintptr 53386 FpGroup uintptr 53387 } 53388 53389 func quotaEnter(tls *libc.TLS) { 53390 sqlite3.Xsqlite3_mutex_enter(tls, gQuota.FpMutex) 53391 } 53392 53393 func quotaLeave(tls *libc.TLS) { 53394 sqlite3.Xsqlite3_mutex_leave(tls, gQuota.FpMutex) 53395 } 53396 53397 func quotaGroupOpenFileCount(tls *libc.TLS, pGroup uintptr) int32 { 53398 var N int32 = 0 53399 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 53400 for pFile != 0 { 53401 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 53402 N++ 53403 } 53404 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 53405 } 53406 return N 53407 } 53408 53409 func quotaRemoveFile(tls *libc.TLS, pFile uintptr) { 53410 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53411 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 53412 *(*uintptr)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FppPrev)) = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 53413 if (*quotaFile)(unsafe.Pointer(pFile)).FpNext != 0 { 53414 (*quotaFile)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpNext)).FppPrev = (*quotaFile)(unsafe.Pointer(pFile)).FppPrev 53415 } 53416 sqlite3.Xsqlite3_free(tls, pFile) 53417 } 53418 53419 func quotaRemoveAllFiles(tls *libc.TLS, pGroup uintptr) { 53420 for (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 53421 quotaRemoveFile(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles) 53422 } 53423 } 53424 53425 func quotaGroupDeref(tls *libc.TLS, pGroup uintptr) { 53426 if (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit == int64(0) && quotaGroupOpenFileCount(tls, pGroup) == 0 { 53427 quotaRemoveAllFiles(tls, pGroup) 53428 *(*uintptr)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev)) = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 53429 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext != 0 { 53430 (*quotaGroup)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpNext)).FppPrev = (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev 53431 } 53432 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 { 53433 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 53434 } 53435 sqlite3.Xsqlite3_free(tls, pGroup) 53436 } 53437 } 53438 53439 func quotaStrglob(tls *libc.TLS, zGlob uintptr, z uintptr) int32 { 53440 var c int32 53441 var c2 int32 53442 var cx int32 53443 var invert int32 53444 var seen int32 53445 53446 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) != 0 { 53447 if c == '*' { 53448 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) == '*' || c == '?' { 53449 if c == '?' && int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 53450 return 0 53451 } 53452 } 53453 if c == 0 { 53454 return 1 53455 } else if c == '[' { 53456 for *(*int8)(unsafe.Pointer(z)) != 0 && quotaStrglob(tls, zGlob-uintptr(1), z) == 0 { 53457 z++ 53458 } 53459 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) != 0) 53460 } 53461 if c == '/' { 53462 cx = '\\' 53463 } else { 53464 cx = c 53465 } 53466 for libc.AssignInt32(&c2, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) != 0 { 53467 for c2 != c && c2 != cx { 53468 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 53469 if c2 == 0 { 53470 return 0 53471 } 53472 } 53473 if quotaStrglob(tls, zGlob, z) != 0 { 53474 return 1 53475 } 53476 } 53477 return 0 53478 } else if c == '?' { 53479 if int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 53480 return 0 53481 } 53482 } else if c == '[' { 53483 var prior_c int32 = 0 53484 seen = 0 53485 invert = 0 53486 c = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 53487 if c == 0 { 53488 return 0 53489 } 53490 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53491 if c2 == '^' { 53492 invert = 1 53493 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53494 } 53495 if c2 == ']' { 53496 if c == ']' { 53497 seen = 1 53498 } 53499 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53500 } 53501 for c2 != 0 && c2 != ']' { 53502 if c2 == '-' && int32(*(*int8)(unsafe.Pointer(zGlob))) != ']' && int32(*(*int8)(unsafe.Pointer(zGlob))) != 0 && prior_c > 0 { 53503 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53504 if c >= prior_c && c <= c2 { 53505 seen = 1 53506 } 53507 prior_c = 0 53508 } else { 53509 if c == c2 { 53510 seen = 1 53511 } 53512 prior_c = c2 53513 } 53514 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 53515 } 53516 if c2 == 0 || seen^invert == 0 { 53517 return 0 53518 } 53519 } else if c == '/' { 53520 if int32(*(*int8)(unsafe.Pointer(z))) != '/' && int32(*(*int8)(unsafe.Pointer(z))) != '\\' { 53521 return 0 53522 } 53523 z++ 53524 } else { 53525 if c != int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) { 53526 return 0 53527 } 53528 } 53529 } 53530 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) == 0) 53531 } 53532 53533 func quotaGroupFind(tls *libc.TLS, zFilename uintptr) uintptr { 53534 var p uintptr 53535 for p = gQuota.FpGroup; p != 0 && quotaStrglob(tls, (*quotaGroup)(unsafe.Pointer(p)).FzPattern, zFilename) == 0; p = (*quotaGroup)(unsafe.Pointer(p)).FpNext { 53536 } 53537 return p 53538 } 53539 53540 func quotaSubOpen(tls *libc.TLS, pConn uintptr) uintptr { 53541 var p uintptr = pConn 53542 return p + 1*16 53543 } 53544 53545 func quotaFindFile(tls *libc.TLS, pGroup uintptr, zName uintptr, createFlag int32) uintptr { 53546 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 53547 for pFile != 0 && libc.Xstrcmp(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName) != 0 { 53548 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 53549 } 53550 if pFile == uintptr(0) && createFlag != 0 { 53551 var nName int32 = int32(libc.Xstrlen(tls, zName) & uint64(0x3fffffff)) 53552 pFile = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaFile{}))+uint64(nName)+uint64(1))) 53553 if pFile != 0 { 53554 libc.Xmemset(tls, pFile, 0, uint64(unsafe.Sizeof(quotaFile{}))) 53555 (*quotaFile)(unsafe.Pointer(pFile)).FzFilename = pFile + 1*48 53556 libc.Xmemcpy(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName, uint64(nName+1)) 53557 (*quotaFile)(unsafe.Pointer(pFile)).FpNext = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 53558 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 53559 (*quotaFile)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles)).FppPrev = pFile + 32 53560 } 53561 (*quotaFile)(unsafe.Pointer(pFile)).FppPrev = pGroup + 64 53562 (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles = pFile 53563 (*quotaFile)(unsafe.Pointer(pFile)).FpGroup = pGroup 53564 } 53565 } 53566 return pFile 53567 } 53568 53569 func quota_utf8_to_mbcs(tls *libc.TLS, zUtf8 uintptr) uintptr { 53570 return zUtf8 53571 } 53572 53573 func quota_mbcs_free(tls *libc.TLS, zOld uintptr) { 53574 } 53575 53576 func quotaOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 53577 var rc int32 53578 var pQuotaOpen uintptr 53579 var pFile uintptr 53580 var pGroup uintptr 53581 var pSubOpen uintptr 53582 var pOrigVfs uintptr = gQuota.FpOrigVfs 53583 53584 if flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0 { 53585 return (*struct { 53586 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53587 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 53588 } 53589 53590 quotaEnter(tls) 53591 pGroup = quotaGroupFind(tls, zName) 53592 if pGroup == uintptr(0) { 53593 rc = (*struct { 53594 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53595 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 53596 } else { 53597 pQuotaOpen = pConn 53598 pSubOpen = quotaSubOpen(tls, pConn) 53599 rc = (*struct { 53600 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53601 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pSubOpen, flags, pOutFlags) 53602 if rc == SQLITE_OK { 53603 pFile = quotaFindFile(tls, pGroup, zName, 1) 53604 if pFile == uintptr(0) { 53605 quotaLeave(tls) 53606 (*struct { 53607 f func(*libc.TLS, uintptr) int32 53608 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 53609 return SQLITE_NOMEM 53610 } 53611 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = libc.Bool32(flags&SQLITE_OPEN_DELETEONCLOSE != 0) 53612 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 53613 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).FpFile = pFile 53614 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 53615 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 176 53616 } else { 53617 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 328 53618 } 53619 } 53620 } 53621 quotaLeave(tls) 53622 return rc 53623 } 53624 53625 func quotaDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 53626 var rc int32 53627 var pFile uintptr 53628 var pGroup uintptr 53629 var pOrigVfs uintptr = gQuota.FpOrigVfs 53630 53631 rc = (*struct { 53632 f func(*libc.TLS, uintptr, uintptr, int32) int32 53633 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 53634 53635 if rc == SQLITE_OK { 53636 quotaEnter(tls) 53637 pGroup = quotaGroupFind(tls, zName) 53638 if pGroup != 0 { 53639 pFile = quotaFindFile(tls, pGroup, zName, 0) 53640 if pFile != 0 { 53641 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 53642 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 53643 } else { 53644 quotaRemoveFile(tls, pFile) 53645 quotaGroupDeref(tls, pGroup) 53646 } 53647 } 53648 } 53649 quotaLeave(tls) 53650 } 53651 return rc 53652 } 53653 53654 func quotaClose(tls *libc.TLS, pConn uintptr) int32 { 53655 var p uintptr = pConn 53656 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 53657 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53658 var rc int32 53659 rc = (*struct { 53660 f func(*libc.TLS, uintptr) int32 53661 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 53662 quotaEnter(tls) 53663 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 53664 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 53665 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53666 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 53667 (*struct { 53668 f func(*libc.TLS, uintptr, uintptr, int32) int32 53669 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 53670 quotaRemoveFile(tls, pFile) 53671 } 53672 quotaGroupDeref(tls, pGroup) 53673 } 53674 quotaLeave(tls) 53675 return rc 53676 } 53677 53678 func quotaRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 53679 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53680 return (*struct { 53681 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53682 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 53683 } 53684 53685 func quotaWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 53686 var p uintptr = pConn 53687 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53688 var iEnd sqlite3_int64 = iOfst + sqlite3_int64(iAmt) 53689 var pGroup uintptr 53690 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 53691 var szNew sqlite3_int64 53692 53693 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 53694 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53695 quotaEnter(tls) 53696 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 53697 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 53698 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 53699 (*struct { 53700 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 53701 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 53702 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 53703 } 53704 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 53705 quotaLeave(tls) 53706 return SQLITE_FULL 53707 } 53708 } 53709 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 53710 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 53711 quotaLeave(tls) 53712 } 53713 return (*struct { 53714 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53715 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 53716 } 53717 53718 func quotaTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 53719 var p uintptr = pConn 53720 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53721 var rc int32 = (*struct { 53722 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53723 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 53724 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 53725 var pGroup uintptr 53726 if rc == SQLITE_OK { 53727 quotaEnter(tls) 53728 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53729 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 53730 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = size 53731 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += size 53732 quotaLeave(tls) 53733 } 53734 return rc 53735 } 53736 53737 func quotaSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 53738 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53739 return (*struct { 53740 f func(*libc.TLS, uintptr, int32) int32 53741 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 53742 } 53743 53744 func quotaFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 53745 bp := tls.Alloc(8) 53746 defer tls.Free(8) 53747 53748 var p uintptr = pConn 53749 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53750 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 53751 var pGroup uintptr 53752 53753 var rc int32 53754 53755 rc = (*struct { 53756 f func(*libc.TLS, uintptr, uintptr) int32 53757 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp) 53758 if rc == SQLITE_OK { 53759 quotaEnter(tls) 53760 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 53761 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 53762 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = *(*sqlite3_int64)(unsafe.Pointer(bp)) 53763 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += *(*sqlite3_int64)(unsafe.Pointer(bp)) 53764 quotaLeave(tls) 53765 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = *(*sqlite3_int64)(unsafe.Pointer(bp)) 53766 } 53767 return rc 53768 } 53769 53770 func quotaLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 53771 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53772 return (*struct { 53773 f func(*libc.TLS, uintptr, int32) int32 53774 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 53775 } 53776 53777 func quotaUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 53778 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53779 return (*struct { 53780 f func(*libc.TLS, uintptr, int32) int32 53781 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 53782 } 53783 53784 func quotaCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 53785 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53786 return (*struct { 53787 f func(*libc.TLS, uintptr, uintptr) int32 53788 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 53789 } 53790 53791 func quotaFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 53792 bp := tls.Alloc(8) 53793 defer tls.Free(8) 53794 53795 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53796 var rc int32 = (*struct { 53797 f func(*libc.TLS, uintptr, int32, uintptr) int32 53798 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 53799 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 53800 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35913, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 53801 } 53802 return rc 53803 } 53804 53805 func quotaSectorSize(tls *libc.TLS, pConn uintptr) int32 { 53806 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53807 return (*struct { 53808 f func(*libc.TLS, uintptr) int32 53809 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 53810 } 53811 53812 func quotaDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 53813 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53814 return (*struct { 53815 f func(*libc.TLS, uintptr) int32 53816 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 53817 } 53818 53819 func quotaShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 53820 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53821 return (*struct { 53822 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 53823 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 53824 } 53825 53826 func quotaShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 53827 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53828 return (*struct { 53829 f func(*libc.TLS, uintptr, int32, int32, int32) int32 53830 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 53831 } 53832 53833 func quotaShmBarrier(tls *libc.TLS, pConn uintptr) { 53834 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53835 (*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) 53836 } 53837 53838 func quotaShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 53839 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 53840 return (*struct { 53841 f func(*libc.TLS, uintptr, int32) int32 53842 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 53843 } 53844 53845 func sqlite3_quota_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 53846 var pOrigVfs uintptr 53847 if gQuota.FisInitialized != 0 { 53848 return SQLITE_MISUSE 53849 } 53850 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 53851 if pOrigVfs == uintptr(0) { 53852 return SQLITE_ERROR 53853 } 53854 53855 gQuota.FpMutex = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 53856 if !(int32(gQuota.FpMutex) != 0) { 53857 return SQLITE_NOMEM 53858 } 53859 gQuota.FisInitialized = 1 53860 gQuota.FpOrigVfs = pOrigVfs 53861 gQuota.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 53862 gQuota.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 53863 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53864 }{quotaOpen})) 53865 gQuota.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 53866 f func(*libc.TLS, uintptr, uintptr, int32) int32 53867 }{quotaDelete})) 53868 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gQuota)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(quotaConn{}))) 53869 gQuota.FsThisVfs.FzName = ts + 35922 53870 gQuota.FsIoMethodsV1.FiVersion = 1 53871 gQuota.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 53872 f func(*libc.TLS, uintptr) int32 53873 }{quotaClose})) 53874 gQuota.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 53875 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53876 }{quotaRead})) 53877 gQuota.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 53878 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53879 }{quotaWrite})) 53880 gQuota.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 53881 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53882 }{quotaTruncate})) 53883 gQuota.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 53884 f func(*libc.TLS, uintptr, int32) int32 53885 }{quotaSync})) 53886 gQuota.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 53887 f func(*libc.TLS, uintptr, uintptr) int32 53888 }{quotaFileSize})) 53889 gQuota.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 53890 f func(*libc.TLS, uintptr, int32) int32 53891 }{quotaLock})) 53892 gQuota.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 53893 f func(*libc.TLS, uintptr, int32) int32 53894 }{quotaUnlock})) 53895 gQuota.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 53896 f func(*libc.TLS, uintptr, uintptr) int32 53897 }{quotaCheckReservedLock})) 53898 gQuota.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 53899 f func(*libc.TLS, uintptr, int32, uintptr) int32 53900 }{quotaFileControl})) 53901 gQuota.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 53902 f func(*libc.TLS, uintptr) int32 53903 }{quotaSectorSize})) 53904 gQuota.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 53905 f func(*libc.TLS, uintptr) int32 53906 }{quotaDeviceCharacteristics})) 53907 gQuota.FsIoMethodsV2 = gQuota.FsIoMethodsV1 53908 gQuota.FsIoMethodsV2.FiVersion = 2 53909 gQuota.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 53910 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 53911 }{quotaShmMap})) 53912 gQuota.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 53913 f func(*libc.TLS, uintptr, int32, int32, int32) int32 53914 }{quotaShmLock})) 53915 gQuota.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{quotaShmBarrier})) 53916 gQuota.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 53917 f func(*libc.TLS, uintptr, int32) int32 53918 }{quotaShmUnmap})) 53919 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gQuota))+8, makeDefault) 53920 return SQLITE_OK 53921 } 53922 53923 func sqlite3_quota_shutdown(tls *libc.TLS) int32 { 53924 var pGroup uintptr 53925 if gQuota.FisInitialized == 0 { 53926 return SQLITE_MISUSE 53927 } 53928 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 53929 if quotaGroupOpenFileCount(tls, pGroup) > 0 { 53930 return SQLITE_MISUSE 53931 } 53932 } 53933 for gQuota.FpGroup != 0 { 53934 pGroup = gQuota.FpGroup 53935 gQuota.FpGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 53936 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = int64(0) 53937 53938 quotaGroupDeref(tls, pGroup) 53939 } 53940 gQuota.FisInitialized = 0 53941 sqlite3.Xsqlite3_mutex_free(tls, gQuota.FpMutex) 53942 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gQuota))+8) 53943 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gQuota)), 0, uint64(unsafe.Sizeof(gQuota))) 53944 return SQLITE_OK 53945 } 53946 53947 func sqlite3_quota_set(tls *libc.TLS, zPattern uintptr, iLimit sqlite3_int64, xCallback uintptr, pArg uintptr, xDestroy uintptr) int32 { 53948 var pGroup uintptr 53949 quotaEnter(tls) 53950 pGroup = gQuota.FpGroup 53951 for pGroup != 0 && libc.Xstrcmp(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern) != 0 { 53952 pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 53953 } 53954 if pGroup == uintptr(0) { 53955 var nPattern int32 = int32(libc.Xstrlen(tls, zPattern) & uint64(0x3fffffff)) 53956 if iLimit <= int64(0) { 53957 quotaLeave(tls) 53958 return SQLITE_OK 53959 } 53960 pGroup = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaGroup{}))+uint64(nPattern)+uint64(1))) 53961 if pGroup == uintptr(0) { 53962 quotaLeave(tls) 53963 return SQLITE_NOMEM 53964 } 53965 libc.Xmemset(tls, pGroup, 0, uint64(unsafe.Sizeof(quotaGroup{}))) 53966 (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern = pGroup + 1*72 53967 libc.Xmemcpy(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern, uint64(nPattern+1)) 53968 if gQuota.FpGroup != 0 { 53969 (*quotaGroup)(unsafe.Pointer(gQuota.FpGroup)).FppPrev = pGroup + 48 53970 } 53971 (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext = gQuota.FpGroup 53972 (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev = uintptr(unsafe.Pointer(&gQuota)) + 496 53973 gQuota.FpGroup = pGroup 53974 } 53975 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = iLimit 53976 (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback = xCallback 53977 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 && (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg != pArg { 53978 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 53979 } 53980 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg = pArg 53981 (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy = xDestroy 53982 quotaGroupDeref(tls, pGroup) 53983 quotaLeave(tls) 53984 return SQLITE_OK 53985 } 53986 53987 func sqlite3_quota_file(tls *libc.TLS, zFilename uintptr) int32 { 53988 bp := tls.Alloc(16) 53989 defer tls.Free(16) 53990 53991 var zFull uintptr = uintptr(0) 53992 var fd uintptr 53993 var rc int32 53994 *(*int32)(unsafe.Pointer(bp)) = 0 53995 53996 var nAlloc int32 = gQuota.FsThisVfs.FszOsFile + gQuota.FsThisVfs.FmxPathname + 2 53997 53998 fd = sqlite3.Xsqlite3_malloc(tls, nAlloc) 53999 if fd == uintptr(0) { 54000 rc = SQLITE_NOMEM 54001 } else { 54002 zFull = fd + uintptr(gQuota.FsThisVfs.FszOsFile) 54003 rc = (*struct { 54004 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54005 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54006 gQuota.FsThisVfs.FmxPathname+1, zFull) 54007 } 54008 54009 if rc == SQLITE_OK { 54010 *(*int8)(unsafe.Pointer(zFull + uintptr(libc.Xstrlen(tls, zFull)+uint64(1)))) = int8(0) 54011 rc = quotaOpen(tls, uintptr(unsafe.Pointer(&gQuota))+8, zFull, fd, 54012 SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_DB, bp) 54013 if rc == SQLITE_OK { 54014 (*struct { 54015 f func(*libc.TLS, uintptr, uintptr) int32 54016 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxFileSize})).f(tls, fd, bp+8) 54017 (*struct { 54018 f func(*libc.TLS, uintptr) int32 54019 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxClose})).f(tls, fd) 54020 } else if rc == SQLITE_CANTOPEN { 54021 var pGroup uintptr 54022 var pFile uintptr 54023 quotaEnter(tls) 54024 pGroup = quotaGroupFind(tls, zFull) 54025 if pGroup != 0 { 54026 pFile = quotaFindFile(tls, pGroup, zFull, 0) 54027 if pFile != 0 { 54028 quotaRemoveFile(tls, pFile) 54029 } 54030 } 54031 quotaLeave(tls) 54032 } 54033 } 54034 54035 sqlite3.Xsqlite3_free(tls, fd) 54036 return rc 54037 } 54038 54039 func sqlite3_quota_fopen(tls *libc.TLS, zFilename uintptr, zMode uintptr) uintptr { 54040 var p uintptr 54041 var zFull uintptr 54042 var zFullTranslated uintptr 54043 var rc int32 54044 var pGroup uintptr 54045 var pFile uintptr 54046 p = uintptr(0) 54047 zFull = uintptr(0) 54048 zFullTranslated = uintptr(0) 54049 54050 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 54051 if !(zFull == uintptr(0)) { 54052 goto __1 54053 } 54054 return uintptr(0) 54055 __1: 54056 ; 54057 rc = (*struct { 54058 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54059 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54060 gQuota.FsThisVfs.FmxPathname+1, zFull) 54061 if !(rc != 0) { 54062 goto __2 54063 } 54064 goto quota_fopen_error 54065 __2: 54066 ; 54067 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(quota_FILE{}))) 54068 if !(p == uintptr(0)) { 54069 goto __3 54070 } 54071 goto quota_fopen_error 54072 __3: 54073 ; 54074 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(quota_FILE{}))) 54075 zFullTranslated = quota_utf8_to_mbcs(tls, zFull) 54076 if !(zFullTranslated == uintptr(0)) { 54077 goto __4 54078 } 54079 goto quota_fopen_error 54080 __4: 54081 ; 54082 (*quota_FILE)(unsafe.Pointer(p)).Ff = libc.Xfopen(tls, zFullTranslated, zMode) 54083 if !((*quota_FILE)(unsafe.Pointer(p)).Ff == uintptr(0)) { 54084 goto __5 54085 } 54086 goto quota_fopen_error 54087 __5: 54088 ; 54089 quotaEnter(tls) 54090 pGroup = quotaGroupFind(tls, zFull) 54091 if !(pGroup != 0) { 54092 goto __6 54093 } 54094 pFile = quotaFindFile(tls, pGroup, zFull, 1) 54095 if !(pFile == uintptr(0)) { 54096 goto __7 54097 } 54098 quotaLeave(tls) 54099 goto quota_fopen_error 54100 __7: 54101 ; 54102 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 54103 (*quota_FILE)(unsafe.Pointer(p)).FpFile = pFile 54104 __6: 54105 ; 54106 quotaLeave(tls) 54107 sqlite3.Xsqlite3_free(tls, zFull) 54108 return p 54109 54110 quota_fopen_error: 54111 quota_mbcs_free(tls, zFullTranslated) 54112 sqlite3.Xsqlite3_free(tls, zFull) 54113 if !(p != 0 && (*quota_FILE)(unsafe.Pointer(p)).Ff != 0) { 54114 goto __8 54115 } 54116 libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54117 __8: 54118 ; 54119 sqlite3.Xsqlite3_free(tls, p) 54120 return uintptr(0) 54121 } 54122 54123 func sqlite3_quota_fread(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 54124 return libc.Xfread(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54125 } 54126 54127 func sqlite3_quota_fwrite(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 54128 var iOfst sqlite3_int64 54129 var iEnd sqlite3_int64 54130 var szNew sqlite3_int64 54131 var pFile uintptr 54132 var rc size_t 54133 54134 iOfst = libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54135 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 54136 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54137 if pFile != 0 && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 54138 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54139 quotaEnter(tls) 54140 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54141 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54142 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 54143 (*struct { 54144 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54145 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 54146 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54147 } 54148 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54149 iEnd = (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit - (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize + (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54150 nmemb = uint64(iEnd-iOfst) / size 54151 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 54152 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54153 } 54154 } 54155 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 54156 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 54157 quotaLeave(tls) 54158 } else { 54159 pFile = uintptr(0) 54160 } 54161 rc = libc.Xfwrite(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54162 54163 if rc < nmemb && pFile != 0 { 54164 var nWritten size_t = rc 54165 var iNewEnd sqlite3_int64 = sqlite3_int64(uint64(iOfst) + size*nWritten) 54166 if iNewEnd < iEnd { 54167 iNewEnd = iEnd 54168 } 54169 quotaEnter(tls) 54170 *(*sqlite3_int64)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpGroup + 16)) += iNewEnd - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54171 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iNewEnd 54172 quotaLeave(tls) 54173 } 54174 return rc 54175 } 54176 54177 func sqlite3_quota_fclose(tls *libc.TLS, p uintptr) int32 { 54178 var rc int32 54179 var pFile uintptr 54180 rc = libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54181 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54182 if pFile != 0 { 54183 quotaEnter(tls) 54184 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 54185 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 54186 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54187 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 54188 (*struct { 54189 f func(*libc.TLS, uintptr, uintptr, int32) int32 54190 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54191 quotaRemoveFile(tls, pFile) 54192 } 54193 quotaGroupDeref(tls, pGroup) 54194 } 54195 quotaLeave(tls) 54196 } 54197 sqlite3.Xsqlite3_free(tls, p) 54198 return rc 54199 } 54200 54201 func sqlite3_quota_fflush(tls *libc.TLS, p uintptr, doFsync int32) int32 { 54202 var rc int32 54203 rc = libc.Xfflush(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54204 if rc == 0 && doFsync != 0 { 54205 rc = libc.Xfsync(tls, func() int32 { 54206 if !(libc.X__isthreaded != 0) { 54207 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54208 } 54209 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54210 }()) 54211 } 54212 return libc.Bool32(rc != 0) 54213 } 54214 54215 func sqlite3_quota_fseek(tls *libc.TLS, p uintptr, offset int64, whence int32) int32 { 54216 return libc.Xfseek(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff, offset, whence) 54217 } 54218 54219 func sqlite3_quota_rewind(tls *libc.TLS, p uintptr) { 54220 libc.Xrewind(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54221 } 54222 54223 func sqlite3_quota_ftell(tls *libc.TLS, p uintptr) int64 { 54224 return libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54225 } 54226 54227 func sqlite3_quota_ferror(tls *libc.TLS, p uintptr) int32 { 54228 return func() int32 { 54229 if !(libc.X__isthreaded != 0) { 54230 return libc.Bool32(int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_flags)&0x0040 != 0) 54231 } 54232 return libc.Xferror(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54233 }() 54234 } 54235 54236 func sqlite3_quota_ftruncate(tls *libc.TLS, p uintptr, szNew sqlite3_int64) int32 { 54237 var pFile uintptr = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54238 var rc int32 54239 if libc.AssignUintptr(&pFile, (*quota_FILE)(unsafe.Pointer(p)).FpFile) != uintptr(0) && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 54240 var pGroup uintptr 54241 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 54242 return -1 54243 } 54244 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54245 quotaEnter(tls) 54246 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54247 quotaLeave(tls) 54248 } 54249 rc = libc.Xftruncate(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 }(), szNew) 54255 if pFile != 0 && rc == 0 { 54256 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54257 quotaEnter(tls) 54258 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54259 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = szNew 54260 quotaLeave(tls) 54261 } 54262 return rc 54263 } 54264 54265 func sqlite3_quota_file_mtime(tls *libc.TLS, p uintptr, pTime uintptr) int32 { 54266 bp := tls.Alloc(128) 54267 defer tls.Free(128) 54268 54269 var rc int32 54270 54271 rc = libc.Xfstat(tls, func() int32 { 54272 if !(libc.X__isthreaded != 0) { 54273 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54274 } 54275 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54276 }(), bp) 54277 if rc == 0 { 54278 *(*time_t)(unsafe.Pointer(pTime)) = (*stat)(unsafe.Pointer(bp)).Fst_mtim.Ftv_sec 54279 } 54280 return rc 54281 } 54282 54283 func sqlite3_quota_file_truesize(tls *libc.TLS, p uintptr) sqlite3_int64 { 54284 bp := tls.Alloc(128) 54285 defer tls.Free(128) 54286 54287 var rc int32 54288 54289 rc = libc.Xfstat(tls, func() int32 { 54290 if !(libc.X__isthreaded != 0) { 54291 return int32((*FILE)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).Ff)).F_file) 54292 } 54293 return libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54294 }(), bp) 54295 if rc == 0 { 54296 return (*stat)(unsafe.Pointer(bp)).Fst_size 54297 } 54298 return int64(-1) 54299 } 54300 54301 func sqlite3_quota_file_size(tls *libc.TLS, p uintptr) sqlite3_int64 { 54302 if (*quota_FILE)(unsafe.Pointer(p)).FpFile != 0 { 54303 return (*quotaFile)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).FpFile)).FiSize 54304 } 54305 return int64(-1) 54306 } 54307 54308 func sqlite3_quota_file_available(tls *libc.TLS, p uintptr) int64 { 54309 var f uintptr = (*quota_FILE)(unsafe.Pointer(p)).Ff 54310 var pos1 int64 54311 var pos2 int64 54312 var rc int32 54313 pos1 = libc.Xftell(tls, f) 54314 if pos1 < int64(0) { 54315 return int64(-1) 54316 } 54317 rc = libc.Xfseek(tls, f, int64(0), SEEK_END) 54318 if rc != 0 { 54319 return int64(-1) 54320 } 54321 pos2 = libc.Xftell(tls, f) 54322 if pos2 < int64(0) { 54323 return int64(-1) 54324 } 54325 rc = libc.Xfseek(tls, f, pos1, SEEK_SET) 54326 if rc != 0 { 54327 return int64(-1) 54328 } 54329 return pos2 - pos1 54330 } 54331 54332 func sqlite3_quota_remove(tls *libc.TLS, zFilename uintptr) int32 { 54333 var zFull uintptr 54334 var nFull size_t 54335 var rc int32 54336 var pGroup uintptr 54337 var pFile uintptr 54338 var pNextFile uintptr 54339 var diff int32 54340 var c int8 54341 54342 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 54343 if zFull == uintptr(0) { 54344 return SQLITE_NOMEM 54345 } 54346 rc = (*struct { 54347 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54348 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54349 gQuota.FsThisVfs.FmxPathname+1, zFull) 54350 if rc != 0 { 54351 sqlite3.Xsqlite3_free(tls, zFull) 54352 return rc 54353 } 54354 54355 nFull = libc.Xstrlen(tls, zFull) 54356 if nFull > uint64(0) && (int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '/' || int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '\\') { 54357 nFull-- 54358 *(*int8)(unsafe.Pointer(zFull + uintptr(nFull))) = int8(0) 54359 } 54360 54361 quotaEnter(tls) 54362 pGroup = quotaGroupFind(tls, zFull) 54363 if pGroup != 0 { 54364 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0 && rc == SQLITE_OK; pFile = pNextFile { 54365 pNextFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54366 diff = libc.Xstrncmp(tls, zFull, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, nFull) 54367 if diff == 0 && (int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FzFilename + uintptr(nFull))))) == 0 || int32(c) == '/' || int32(c) == '\\') { 54368 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54369 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 54370 } else { 54371 rc = (*struct { 54372 f func(*libc.TLS, uintptr, uintptr, int32) int32 54373 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54374 quotaRemoveFile(tls, pFile) 54375 quotaGroupDeref(tls, pGroup) 54376 } 54377 } 54378 } 54379 } 54380 quotaLeave(tls) 54381 sqlite3.Xsqlite3_free(tls, zFull) 54382 return rc 54383 } 54384 54385 type TclQuotaCallback1 = struct { 54386 Finterp uintptr 54387 FpScript uintptr 54388 } 54389 54390 type TclQuotaCallback = TclQuotaCallback1 54391 54392 func tclQuotaCallback(tls *libc.TLS, zFilename uintptr, piLimit uintptr, iSize sqlite3_int64, pArg uintptr) { 54393 bp := tls.Alloc(16) 54394 defer tls.Free(16) 54395 54396 var p uintptr 54397 var pEval uintptr 54398 var pVarname uintptr 54399 54400 var rc int32 54401 54402 p = pArg 54403 if p == uintptr(0) { 54404 return 54405 } 54406 54407 pVarname = tcl.XTcl_NewStringObj(tls, ts+35928, -1) 54408 (*Tcl_Obj)(unsafe.Pointer(pVarname)).FrefCount++ 54409 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(uint32(0))), bp) 54410 tcl.XTcl_AppendObjToObj(tls, pVarname, tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer(bp))&uint32(0x7FFFFFFF)))) 54411 tcl.XTcl_ObjSetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(piLimit))), 0) 54412 54413 pEval = tcl.XTcl_DuplicateObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript) 54414 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 54415 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zFilename, -1)) 54416 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pVarname) 54417 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewWideIntObj(tls, iSize)) 54418 rc = tcl.XTcl_EvalObjEx(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 54419 54420 if rc == TCL_OK { 54421 var pLimit uintptr = tcl.XTcl_ObjGetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), 0) 54422 rc = tcl.XTcl_GetWideIntFromObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pLimit, bp+8) 54423 *(*sqlite3_int64)(unsafe.Pointer(piLimit)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) 54424 tcl.XTcl_UnsetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetString(tls, pVarname), uintptr(0), 0) 54425 } 54426 54427 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 54428 var _objPtr uintptr = pEval 54429 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 54430 tcl.XTclFreeObj(tls, _objPtr) 54431 } 54432 } 54433 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 54434 var _objPtr uintptr = pVarname 54435 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 54436 tcl.XTclFreeObj(tls, _objPtr) 54437 } 54438 } 54439 if rc != TCL_OK { 54440 tcl.XTcl_BackgroundError(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp) 54441 } 54442 } 54443 54444 func tclCallbackDestructor(tls *libc.TLS, pObj uintptr) { 54445 var p uintptr = pObj 54446 if p != 0 { 54447 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 54448 var _objPtr uintptr = (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript 54449 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 54450 tcl.XTclFreeObj(tls, _objPtr) 54451 } 54452 } 54453 sqlite3.Xsqlite3_free(tls, p) 54454 } 54455 } 54456 54457 func test_quota_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54458 bp := tls.Alloc(4) 54459 defer tls.Free(4) 54460 54461 var zName uintptr 54462 54463 var rc int32 54464 54465 if objc != 3 { 54466 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 54467 return TCL_ERROR 54468 } 54469 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54470 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54471 return TCL_ERROR 54472 } 54473 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 54474 zName = uintptr(0) 54475 } 54476 54477 rc = sqlite3_quota_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 54478 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54479 54480 return TCL_OK 54481 } 54482 54483 func test_quota_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54484 var rc int32 54485 54486 if objc != 1 { 54487 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 54488 return TCL_ERROR 54489 } 54490 54491 rc = sqlite3_quota_shutdown(tls) 54492 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54493 54494 return TCL_OK 54495 } 54496 54497 func test_quota_set(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54498 bp := tls.Alloc(12) 54499 defer tls.Free(12) 54500 54501 var zPattern uintptr 54502 54503 var pScript uintptr 54504 var rc int32 54505 var p uintptr 54506 54507 var xDestroy uintptr 54508 var xCallback uintptr 54509 54510 if objc != 4 { 54511 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35939) 54512 return TCL_ERROR 54513 } 54514 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54515 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54516 return TCL_ERROR 54517 } 54518 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 54519 tcl.XTcl_GetStringFromObj(tls, pScript, bp+8) 54520 54521 if *(*int32)(unsafe.Pointer(bp + 8)) > 0 { 54522 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TclQuotaCallback{}))) 54523 if !(p != 0) { 54524 tcl.XTcl_SetResult(tls, interp, ts+32746, uintptr(0)) 54525 return TCL_OK 54526 } 54527 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TclQuotaCallback{}))) 54528 (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp = interp 54529 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 54530 (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript = pScript 54531 xDestroy = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tclCallbackDestructor})) 54532 xCallback = *(*uintptr)(unsafe.Pointer(&struct { 54533 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54534 }{tclQuotaCallback})) 54535 } else { 54536 p = uintptr(0) 54537 xDestroy = uintptr(0) 54538 xCallback = uintptr(0) 54539 } 54540 54541 rc = sqlite3_quota_set(tls, zPattern, *(*Tcl_WideInt)(unsafe.Pointer(bp)), xCallback, p, xDestroy) 54542 54543 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54544 return TCL_OK 54545 } 54546 54547 func test_quota_file(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54548 var zFilename uintptr 54549 var rc int32 54550 54551 if objc != 2 { 54552 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 54553 return TCL_ERROR 54554 } 54555 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54556 54557 rc = sqlite3_quota_file(tls, zFilename) 54558 54559 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54560 return TCL_OK 54561 } 54562 54563 func test_quota_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54564 bp := tls.Alloc(1008) 54565 defer tls.Free(1008) 54566 54567 var pResult uintptr 54568 var pGroupTerm uintptr 54569 var pFileTerm uintptr 54570 var pGroup uintptr 54571 var pFile uintptr 54572 54573 pResult = tcl.XTcl_NewObj(tls) 54574 quotaEnter(tls) 54575 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 54576 pGroupTerm = tcl.XTcl_NewObj(tls) 54577 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 54578 tcl.XTcl_NewStringObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, -1)) 54579 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 54580 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit)) 54581 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 54582 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize)) 54583 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0; pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext { 54584 var i int32 54585 54586 pFileTerm = tcl.XTcl_NewObj(tls) 54587 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+8, ts, libc.VaList(bp, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename)) 54588 for i = 0; *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) != 0; i++ { 54589 if int32(*(*int8)(unsafe.Pointer(bp + 8 + uintptr(i)))) == '\\' { 54590 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8('/') 54591 } 54592 } 54593 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 54594 tcl.XTcl_NewStringObj(tls, bp+8, -1)) 54595 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 54596 tcl.XTcl_NewWideIntObj(tls, (*quotaFile)(unsafe.Pointer(pFile)).FiSize)) 54597 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 54598 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FnRef))) 54599 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 54600 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose))) 54601 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, pFileTerm) 54602 } 54603 tcl.XTcl_ListObjAppendElement(tls, interp, pResult, pGroupTerm) 54604 } 54605 quotaLeave(tls) 54606 tcl.XTcl_SetObjResult(tls, interp, pResult) 54607 return TCL_OK 54608 } 54609 54610 func test_quota_fopen(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54611 bp := tls.Alloc(58) 54612 defer tls.Free(58) 54613 54614 var zFilename uintptr 54615 var zMode uintptr 54616 var p uintptr 54617 54618 if objc != 3 { 54619 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35960) 54620 return TCL_ERROR 54621 } 54622 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54623 zMode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 54624 p = sqlite3_quota_fopen(tls, zFilename, zMode) 54625 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+8, ts+9889, libc.VaList(bp, p)) 54626 tcl.XTcl_SetResult(tls, interp, bp+8, uintptr(1)) 54627 return TCL_OK 54628 } 54629 54630 func test_quota_fread(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54631 bp := tls.Alloc(8) 54632 defer tls.Free(8) 54633 54634 var p uintptr 54635 var zBuf uintptr 54636 54637 var got size_t 54638 54639 if objc != 4 { 54640 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35974) 54641 return TCL_ERROR 54642 } 54643 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54644 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54645 return TCL_ERROR 54646 } 54647 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 54648 return TCL_ERROR 54649 } 54650 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp))**(*int32)(unsafe.Pointer(bp + 4))+1) 54651 if zBuf == uintptr(0) { 54652 tcl.XTcl_SetResult(tls, interp, ts+2069, uintptr(0)) 54653 return TCL_ERROR 54654 } 54655 got = sqlite3_quota_fread(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 54656 *(*int8)(unsafe.Pointer(zBuf + uintptr(got*size_t(*(*int32)(unsafe.Pointer(bp)))))) = int8(0) 54657 tcl.XTcl_SetResult(tls, interp, zBuf, uintptr(1)) 54658 sqlite3.Xsqlite3_free(tls, zBuf) 54659 return TCL_OK 54660 } 54661 54662 func test_quota_fwrite(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54663 bp := tls.Alloc(8) 54664 defer tls.Free(8) 54665 54666 var p uintptr 54667 var zBuf uintptr 54668 54669 var got size_t 54670 54671 if objc != 5 { 54672 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35992) 54673 return TCL_ERROR 54674 } 54675 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54676 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54677 return TCL_ERROR 54678 } 54679 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 54680 return TCL_ERROR 54681 } 54682 zBuf = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 54683 got = sqlite3_quota_fwrite(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 54684 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(got))) 54685 return TCL_OK 54686 } 54687 54688 func test_quota_fclose(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54689 var p uintptr 54690 var rc int32 54691 54692 if objc != 2 { 54693 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54694 return TCL_ERROR 54695 } 54696 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54697 rc = sqlite3_quota_fclose(tls, p) 54698 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54699 return TCL_OK 54700 } 54701 54702 func test_quota_fflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54703 bp := tls.Alloc(4) 54704 defer tls.Free(4) 54705 54706 var p uintptr 54707 var rc int32 54708 *(*int32)(unsafe.Pointer(bp)) = 0 54709 54710 if objc != 2 && objc != 3 { 54711 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36018) 54712 return TCL_ERROR 54713 } 54714 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54715 if objc == 3 { 54716 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54717 return TCL_ERROR 54718 } 54719 } 54720 rc = sqlite3_quota_fflush(tls, p, *(*int32)(unsafe.Pointer(bp))) 54721 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54722 return TCL_OK 54723 } 54724 54725 func test_quota_fseek(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54726 bp := tls.Alloc(20) 54727 defer tls.Free(20) 54728 54729 var p uintptr 54730 54731 var zWhence uintptr 54732 var whence int32 54733 var rc int32 54734 54735 if objc != 4 { 54736 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36036) 54737 return TCL_ERROR 54738 } 54739 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54740 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 54741 return TCL_ERROR 54742 } 54743 zWhence = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 54744 if libc.Xstrcmp(tls, zWhence, ts+36057) == 0 { 54745 whence = SEEK_SET 54746 } else if libc.Xstrcmp(tls, zWhence, ts+36066) == 0 { 54747 whence = SEEK_CUR 54748 } else if libc.Xstrcmp(tls, zWhence, ts+36075) == 0 { 54749 whence = SEEK_END 54750 } else { 54751 tcl.XTcl_AppendResult(tls, interp, 54752 libc.VaList(bp, ts+36084, uintptr(0))) 54753 return TCL_ERROR 54754 } 54755 rc = sqlite3_quota_fseek(tls, p, int64(*(*int32)(unsafe.Pointer(bp + 16))), whence) 54756 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54757 return TCL_OK 54758 } 54759 54760 func test_quota_rewind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54761 var p uintptr 54762 if objc != 2 { 54763 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54764 return TCL_ERROR 54765 } 54766 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54767 sqlite3_quota_rewind(tls, p) 54768 return TCL_OK 54769 } 54770 54771 func test_quota_ftell(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54772 var p uintptr 54773 var x sqlite3_int64 54774 if objc != 2 { 54775 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54776 return TCL_ERROR 54777 } 54778 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54779 x = sqlite3_quota_ftell(tls, p) 54780 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 54781 return TCL_OK 54782 } 54783 54784 func test_quota_ftruncate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54785 bp := tls.Alloc(8) 54786 defer tls.Free(8) 54787 54788 var p uintptr 54789 var x sqlite3_int64 54790 54791 var rc int32 54792 if objc != 3 { 54793 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36133) 54794 return TCL_ERROR 54795 } 54796 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54797 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54798 return TCL_ERROR 54799 } 54800 x = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 54801 rc = sqlite3_quota_ftruncate(tls, p, x) 54802 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54803 return TCL_OK 54804 } 54805 54806 func test_quota_file_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54807 var p uintptr 54808 var x sqlite3_int64 54809 if objc != 2 { 54810 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54811 return TCL_ERROR 54812 } 54813 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54814 x = sqlite3_quota_file_size(tls, p) 54815 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 54816 return TCL_OK 54817 } 54818 54819 func test_quota_file_truesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54820 var p uintptr 54821 var x sqlite3_int64 54822 if objc != 2 { 54823 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54824 return TCL_ERROR 54825 } 54826 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54827 x = sqlite3_quota_file_truesize(tls, p) 54828 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 54829 return TCL_OK 54830 } 54831 54832 func test_quota_file_mtime(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54833 bp := tls.Alloc(8) 54834 defer tls.Free(8) 54835 54836 var p uintptr 54837 54838 if objc != 2 { 54839 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54840 return TCL_ERROR 54841 } 54842 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54843 *(*time_t)(unsafe.Pointer(bp)) = int64(0) 54844 sqlite3_quota_file_mtime(tls, p, bp) 54845 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*time_t)(unsafe.Pointer(bp)))) 54846 return TCL_OK 54847 } 54848 54849 func test_quota_remove(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54850 var zFilename uintptr 54851 var rc int32 54852 if objc != 2 { 54853 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 54854 return TCL_ERROR 54855 } 54856 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54857 rc = sqlite3_quota_remove(tls, zFilename) 54858 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54859 return TCL_OK 54860 } 54861 54862 func test_quota_glob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54863 var zPattern uintptr 54864 var zText uintptr 54865 var rc int32 54866 if objc != 3 { 54867 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36145) 54868 return TCL_ERROR 54869 } 54870 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54871 zText = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 54872 rc = quotaStrglob(tls, zPattern, zText) 54873 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 54874 return TCL_OK 54875 } 54876 54877 func test_quota_file_available(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54878 var p uintptr 54879 var x sqlite3_int64 54880 if objc != 2 { 54881 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54882 return TCL_ERROR 54883 } 54884 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54885 x = sqlite3_quota_file_available(tls, p) 54886 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 54887 return TCL_OK 54888 } 54889 54890 func test_quota_ferror(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54891 var p uintptr 54892 var x int32 54893 if objc != 2 { 54894 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 54895 return TCL_ERROR 54896 } 54897 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 54898 x = sqlite3_quota_ferror(tls, p) 54899 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, x)) 54900 return TCL_OK 54901 } 54902 54903 func Sqlitequota_Init(tls *libc.TLS, interp uintptr) int32 { 54904 var i int32 54905 54906 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd9))/uint64(unsafe.Sizeof(struct { 54907 FzName uintptr 54908 FxProc uintptr 54909 }{})); i++ { 54910 tcl.XTcl_CreateObjCommand(tls, interp, aCmd9[i].FzName, aCmd9[i].FxProc, uintptr(0), uintptr(0)) 54911 } 54912 54913 return TCL_OK 54914 } 54915 54916 var aCmd9 = [21]struct { 54917 FzName uintptr 54918 FxProc uintptr 54919 }{ 54920 {FzName: ts + 36158, FxProc: 0}, 54921 {FzName: ts + 36183, FxProc: 0}, 54922 {FzName: ts + 36206, FxProc: 0}, 54923 {FzName: ts + 36224, FxProc: 0}, 54924 {FzName: ts + 36243, FxProc: 0}, 54925 {FzName: ts + 36262, FxProc: 0}, 54926 {FzName: ts + 36282, FxProc: 0}, 54927 {FzName: ts + 36302, FxProc: 0}, 54928 {FzName: ts + 36323, FxProc: 0}, 54929 {FzName: ts + 36344, FxProc: 0}, 54930 {FzName: ts + 36365, FxProc: 0}, 54931 {FzName: ts + 36385, FxProc: 0}, 54932 {FzName: ts + 36406, FxProc: 0}, 54933 {FzName: ts + 36426, FxProc: 0}, 54934 {FzName: ts + 36450, FxProc: 0}, 54935 {FzName: ts + 36474, FxProc: 0}, 54936 {FzName: ts + 36502, FxProc: 0}, 54937 {FzName: ts + 36527, FxProc: 0}, 54938 {FzName: ts + 36548, FxProc: 0}, 54939 {FzName: ts + 36567, FxProc: 0}, 54940 {FzName: ts + 36596, FxProc: 0}, 54941 } 54942 54943 type Circle1 = struct { 54944 FaBox [2]struct { 54945 Fxmin float64 54946 Fxmax float64 54947 Fymin float64 54948 Fymax float64 54949 } 54950 Fcenterx float64 54951 Fcentery float64 54952 Fradius float64 54953 FmxArea float64 54954 FeScoreType int32 54955 F__ccgo_pad1 [4]byte 54956 } 54957 54958 type Circle = Circle1 54959 type Box = struct { 54960 Fxmin float64 54961 Fxmax float64 54962 Fymin float64 54963 Fymax float64 54964 } 54965 54966 func circle_del(tls *libc.TLS, p uintptr) { 54967 sqlite3.Xsqlite3_free(tls, p) 54968 } 54969 54970 func circle_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 54971 var i int32 54972 var pCircle uintptr 54973 var xmin float64 54974 var xmax float64 54975 var ymin float64 54976 var ymax float64 54977 54978 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) 54979 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) 54980 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) 54981 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) 54982 pCircle = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 54983 if pCircle == uintptr(0) { 54984 if nCoord != 4 { 54985 return SQLITE_ERROR 54986 } 54987 54988 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 { 54989 return SQLITE_ERROR 54990 } 54991 54992 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 54993 if !(pCircle != 0) { 54994 return SQLITE_NOMEM 54995 } 54996 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 54997 54998 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 54999 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 55000 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 55001 55002 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55003 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55004 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55005 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55006 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55007 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55008 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55009 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55010 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = (xmax-xmin)*(ymax-ymin) + 1.0 55011 } 55012 55013 for i = 0; i < 4; i++ { 55014 var x float64 55015 if i&0x01 != 0 { 55016 x = xmax 55017 } else { 55018 x = xmin 55019 } 55020 var y float64 55021 if i&0x02 != 0 { 55022 y = ymax 55023 } else { 55024 y = ymin 55025 } 55026 var d2 float64 55027 55028 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55029 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55030 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55031 *(*int32)(unsafe.Pointer(pRes)) = 1 55032 return SQLITE_OK 55033 } 55034 } 55035 55036 for i = 0; i < 2; i++ { 55037 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55038 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55039 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55040 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55041 *(*int32)(unsafe.Pointer(pRes)) = 1 55042 return SQLITE_OK 55043 } 55044 } 55045 55046 *(*int32)(unsafe.Pointer(pRes)) = 0 55047 return SQLITE_OK 55048 } 55049 55050 func circle_query_func(tls *libc.TLS, p uintptr) int32 { 55051 var i int32 55052 var pCircle uintptr 55053 var xmin float64 55054 var xmax float64 55055 var ymin float64 55056 var ymax float64 55057 var nWithin int32 = 0 55058 55059 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55060 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55061 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55062 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55063 pCircle = (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FpUser 55064 if pCircle == uintptr(0) { 55065 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnCoord != 4 { 55066 return SQLITE_ERROR 55067 } 55068 55069 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 && (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 1 { 55070 return SQLITE_ERROR 55071 } 55072 55073 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 55074 if !(pCircle != 0) { 55075 return SQLITE_NOMEM 55076 } 55077 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 55078 55079 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam == 4 { 55080 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55081 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55082 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55083 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(*(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8))) 55084 } else { 55085 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FapSqlParam))) 55086 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = 0.0 55087 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = 0.0 55088 (*Circle)(unsafe.Pointer(pCircle)).Fradius = 0.0 55089 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = 0 55090 for z != 0 && *(*int8)(unsafe.Pointer(z)) != 0 { 55091 if int32(*(*int8)(unsafe.Pointer(z))) == 'r' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55092 (*Circle)(unsafe.Pointer(pCircle)).Fradius = libc.Xatof(tls, z+2) 55093 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'x' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55094 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = libc.Xatof(tls, z+2) 55095 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'y' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55096 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = libc.Xatof(tls, z+2) 55097 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'e' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55098 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(libc.Xatof(tls, z+2)) 55099 } else if int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 55100 z++ 55101 continue 55102 } 55103 for int32(*(*int8)(unsafe.Pointer(z))) != 0 && int32(*(*int8)(unsafe.Pointer(z))) != ' ' { 55104 z++ 55105 } 55106 for int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 55107 z++ 55108 } 55109 } 55110 } 55111 if (*Circle)(unsafe.Pointer(pCircle)).Fradius < 0.0 { 55112 sqlite3.Xsqlite3_free(tls, pCircle) 55113 return SQLITE_NOMEM 55114 } 55115 55116 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55117 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55118 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55119 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55120 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55121 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55122 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55123 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55124 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = float64(200.0) * 200.0 55125 } 55126 55127 for i = 0; i < 4; i++ { 55128 var x float64 55129 if i&0x01 != 0 { 55130 x = xmax 55131 } else { 55132 x = xmin 55133 } 55134 var y float64 55135 if i&0x02 != 0 { 55136 y = ymax 55137 } else { 55138 y = ymin 55139 } 55140 var d2 float64 55141 55142 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55143 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55144 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55145 nWithin++ 55146 } 55147 } 55148 55149 if nWithin == 0 { 55150 for i = 0; i < 2; i++ { 55151 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55152 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55153 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55154 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55155 nWithin = 1 55156 break 55157 } 55158 } 55159 } 55160 55161 if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 1 { 55162 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55163 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 2 { 55164 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55165 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 3 { 55166 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel == 1 { 55167 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 1.0 - (xmax-xmin)*(ymax-ymin)/(*Circle)(unsafe.Pointer(pCircle)).FmxArea 55168 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore < 0.01 { 55169 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.01 55170 } 55171 } else { 55172 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.0 55173 } 55174 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 4 { 55175 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55176 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 55177 nWithin = 0 55178 } 55179 } else { 55180 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55181 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 55182 nWithin = 0 55183 } 55184 } 55185 if nWithin == 0 { 55186 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 55187 } else if nWithin >= 4 { 55188 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55189 } else { 55190 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 55191 } 55192 return SQLITE_OK 55193 } 55194 55195 func bfs_query_func(tls *libc.TLS, p uintptr) int32 { 55196 var x0 float64 55197 var x1 float64 55198 var y0 float64 55199 var y1 float64 55200 var bx0 float64 55201 var bx1 float64 55202 var by0 float64 55203 var by1 float64 55204 55205 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 { 55206 return SQLITE_ERROR 55207 } 55208 x0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55209 x1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55210 y0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55211 y1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55212 bx0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55213 bx1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55214 by0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55215 by1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8)) 55216 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55217 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeParentWithin == FULLY_WITHIN { 55218 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55219 } else if x0 >= bx0 && x1 <= bx1 && y0 >= by0 && y1 <= by1 { 55220 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55221 } else if x1 >= bx0 && x0 <= bx1 && y1 >= by0 && y0 <= by1 { 55222 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 55223 } else { 55224 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 55225 } 55226 return SQLITE_OK 55227 } 55228 55229 type Cube1 = struct { 55230 Fx float64 55231 Fy float64 55232 Fz float64 55233 Fwidth float64 55234 Fheight float64 55235 Fdepth float64 55236 } 55237 55238 type Cube = Cube1 55239 55240 func cube_context_free(tls *libc.TLS, p uintptr) { 55241 sqlite3.Xsqlite3_free(tls, p) 55242 } 55243 55244 var gHere int32 = 42 55245 55246 func cube_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, piRes uintptr) int32 { 55247 var pCube uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 55248 55249 if pCube == uintptr(0) { 55250 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != 6 || nCoord != 6 || 55251 *(*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 { 55252 return SQLITE_ERROR 55253 } 55254 pCube = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Cube{}))) 55255 if !(pCube != 0) { 55256 return SQLITE_NOMEM 55257 } 55258 (*Cube)(unsafe.Pointer(pCube)).Fx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 55259 (*Cube)(unsafe.Pointer(pCube)).Fy = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 55260 (*Cube)(unsafe.Pointer(pCube)).Fz = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 55261 (*Cube)(unsafe.Pointer(pCube)).Fwidth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 3*8)) 55262 (*Cube)(unsafe.Pointer(pCube)).Fheight = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 4*8)) 55263 (*Cube)(unsafe.Pointer(pCube)).Fdepth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 5*8)) 55264 55265 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pCube 55266 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cube_context_free})) 55267 } 55268 55269 *(*int32)(unsafe.Pointer(piRes)) = 0 55270 if *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) <= (*Cube)(unsafe.Pointer(pCube)).Fx+(*Cube)(unsafe.Pointer(pCube)).Fwidth && 55271 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fx && 55272 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fy+(*Cube)(unsafe.Pointer(pCube)).Fheight && 55273 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fy && 55274 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 4*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fz+(*Cube)(unsafe.Pointer(pCube)).Fdepth && 55275 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 5*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fz { 55276 *(*int32)(unsafe.Pointer(piRes)) = 1 55277 } 55278 55279 return SQLITE_OK 55280 } 55281 55282 func register_cube_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55283 bp := tls.Alloc(8) 55284 defer tls.Free(8) 55285 55286 var rc int32 55287 55288 if objc != 2 { 55289 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55290 return TCL_ERROR 55291 } 55292 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 55293 return TCL_ERROR 55294 } 55295 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36617, *(*uintptr)(unsafe.Pointer(&struct { 55296 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 55297 }{cube_geom})), uintptr(unsafe.Pointer(&gHere))) 55298 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55299 return TCL_OK 55300 } 55301 55302 func register_circle_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55303 bp := tls.Alloc(8) 55304 defer tls.Free(8) 55305 55306 var rc int32 55307 55308 if objc != 2 { 55309 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55310 return TCL_ERROR 55311 } 55312 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 55313 return TCL_ERROR 55314 } 55315 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36622, *(*uintptr)(unsafe.Pointer(&struct { 55316 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 55317 }{circle_geom})), uintptr(0)) 55318 if rc == SQLITE_OK { 55319 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36629, 55320 *(*uintptr)(unsafe.Pointer(&struct { 55321 f func(*libc.TLS, uintptr) int32 55322 }{circle_query_func})), uintptr(0), uintptr(0)) 55323 } 55324 if rc == SQLITE_OK { 55325 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36637, 55326 *(*uintptr)(unsafe.Pointer(&struct { 55327 f func(*libc.TLS, uintptr) int32 55328 }{bfs_query_func})), uintptr(0), uintptr(0)) 55329 } 55330 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55331 return TCL_OK 55332 } 55333 55334 func Sqlitetestrtree_Init(tls *libc.TLS, interp uintptr) int32 { 55335 tcl.XTcl_CreateObjCommand(tls, interp, ts+36656, *(*uintptr)(unsafe.Pointer(&struct { 55336 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55337 }{register_cube_geom})), uintptr(0), uintptr(0)) 55338 tcl.XTcl_CreateObjCommand(tls, interp, ts+36675, *(*uintptr)(unsafe.Pointer(&struct { 55339 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55340 }{register_circle_geom})), uintptr(0), uintptr(0)) 55341 return TCL_OK 55342 } 55343 55344 type schema_vtab1 = struct { 55345 Fbase sqlite3_vtab 55346 Fdb uintptr 55347 } 55348 55349 type schema_vtab = schema_vtab1 55350 type schema_cursor1 = struct { 55351 Fbase sqlite3_vtab_cursor 55352 FpDbList uintptr 55353 FpTableList uintptr 55354 FpColumnList uintptr 55355 Frowid int32 55356 F__ccgo_pad1 [4]byte 55357 } 55358 55359 type schema_cursor = schema_cursor1 55360 55361 func schemaDestroy(tls *libc.TLS, pVtab uintptr) int32 { 55362 sqlite3.Xsqlite3_free(tls, pVtab) 55363 return 0 55364 } 55365 55366 func schemaCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 55367 var rc int32 = SQLITE_NOMEM 55368 var pVtab uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_vtab{}))) 55369 if pVtab != 0 { 55370 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(schema_vtab{}))) 55371 (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb = db 55372 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+36696) 55373 } 55374 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 55375 return rc 55376 } 55377 55378 func schemaOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 55379 var rc int32 = SQLITE_NOMEM 55380 var pCur uintptr 55381 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_cursor{}))) 55382 if pCur != 0 { 55383 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(schema_cursor{}))) 55384 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 55385 rc = SQLITE_OK 55386 } 55387 return rc 55388 } 55389 55390 func schemaClose(tls *libc.TLS, cur uintptr) int32 { 55391 var pCur uintptr = cur 55392 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList) 55393 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) 55394 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) 55395 sqlite3.Xsqlite3_free(tls, pCur) 55396 return SQLITE_OK 55397 } 55398 55399 func schemaColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 55400 var pCur uintptr = cur 55401 switch i { 55402 case 0: 55403 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1)) 55404 break 55405 case 1: 55406 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0)) 55407 break 55408 default: 55409 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList, i-2)) 55410 break 55411 } 55412 return SQLITE_OK 55413 } 55414 55415 func schemaRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 55416 var pCur uintptr = cur 55417 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*schema_cursor)(unsafe.Pointer(pCur)).Frowid) 55418 return SQLITE_OK 55419 } 55420 55421 func finalize(tls *libc.TLS, ppStmt uintptr) int32 { 55422 var rc int32 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(ppStmt))) 55423 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 55424 return rc 55425 } 55426 55427 func schemaEof(tls *libc.TLS, cur uintptr) int32 { 55428 var pCur uintptr = cur 55429 return func() int32 { 55430 if (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList != 0 { 55431 return 0 55432 } 55433 return 1 55434 }() 55435 } 55436 55437 func schemaNext(tls *libc.TLS, cur uintptr) int32 { 55438 bp := tls.Alloc(24) 55439 defer tls.Free(24) 55440 55441 var rc int32 55442 var pCur uintptr 55443 var pVtab uintptr 55444 var zSql uintptr 55445 var pDbList uintptr 55446 rc = SQLITE_OK 55447 pCur = cur 55448 pVtab = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 55449 zSql = uintptr(0) 55450 55451 __1: 55452 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList)) { 55453 goto __2 55454 } 55455 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+24))) { 55456 goto __3 55457 } 55458 goto next_exit 55459 __3: 55460 ; 55461 __4: 55462 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList)) { 55463 goto __5 55464 } 55465 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+16))) { 55466 goto __6 55467 } 55468 goto next_exit 55469 __6: 55470 ; 55471 __7: 55472 if !(SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList)) { 55473 goto __8 55474 } 55475 rc = finalize(tls, pCur+8) 55476 goto next_exit 55477 goto __7 55478 __8: 55479 ; 55480 if !(sqlite3.Xsqlite3_column_int(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 0) == 1) { 55481 goto __9 55482 } 55483 zSql = sqlite3.Xsqlite3_mprintf(tls, 55484 ts+36768, 0) 55485 goto __10 55486 __9: 55487 pDbList = (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList 55488 zSql = sqlite3.Xsqlite3_mprintf(tls, 55489 ts+36823, 55490 libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pDbList, 1))) 55491 __10: 55492 ; 55493 if !!(zSql != 0) { 55494 goto __11 55495 } 55496 rc = SQLITE_NOMEM 55497 goto next_exit 55498 __11: 55499 ; 55500 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+16, uintptr(0)) 55501 sqlite3.Xsqlite3_free(tls, zSql) 55502 if !(rc != SQLITE_OK) { 55503 goto __12 55504 } 55505 goto next_exit 55506 __12: 55507 ; 55508 goto __4 55509 __5: 55510 ; 55511 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+36876, 55512 libc.VaList(bp+8, sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1), 55513 sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0))) 55514 55515 if !!(zSql != 0) { 55516 goto __13 55517 } 55518 rc = SQLITE_NOMEM 55519 goto next_exit 55520 __13: 55521 ; 55522 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+24, uintptr(0)) 55523 sqlite3.Xsqlite3_free(tls, zSql) 55524 if !(rc != SQLITE_OK) { 55525 goto __14 55526 } 55527 goto next_exit 55528 __14: 55529 ; 55530 goto __1 55531 __2: 55532 ; 55533 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid++ 55534 55535 next_exit: 55536 return rc 55537 } 55538 55539 func schemaFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 55540 var rc int32 55541 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 55542 var pCur uintptr = pVtabCursor 55543 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid = 0 55544 finalize(tls, pCur+16) 55545 finalize(tls, pCur+24) 55546 finalize(tls, pCur+8) 55547 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, ts+36901, -1, pCur+8, uintptr(0)) 55548 return func() int32 { 55549 if rc == SQLITE_OK { 55550 return schemaNext(tls, pVtabCursor) 55551 } 55552 return rc 55553 }() 55554 } 55555 55556 func schemaBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 55557 return SQLITE_OK 55558 } 55559 55560 var schemaModule = sqlite3_module{ 55561 FxCreate: 0, 55562 FxConnect: 0, 55563 FxBestIndex: 0, 55564 FxDisconnect: 0, 55565 FxDestroy: 0, 55566 FxOpen: 0, 55567 FxClose: 0, 55568 FxFilter: 0, 55569 FxNext: 0, 55570 FxEof: 0, 55571 FxColumn: 0, 55572 FxRowid: 0, 55573 } 55574 55575 func register_schema_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 55576 bp := tls.Alloc(8) 55577 defer tls.Free(8) 55578 55579 if objc != 2 { 55580 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55581 return TCL_ERROR 55582 } 55583 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 55584 return TCL_ERROR 55585 } 55586 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+4808, uintptr(unsafe.Pointer(&schemaModule)), uintptr(0)) 55587 return TCL_OK 55588 } 55589 55590 func Sqlitetestschema_Init(tls *libc.TLS, interp uintptr) int32 { 55591 var i int32 55592 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd12))/uint64(unsafe.Sizeof(struct { 55593 FzName uintptr 55594 FxProc uintptr 55595 FclientData uintptr 55596 }{})); i++ { 55597 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd12[i].FzName, 55598 aObjCmd12[i].FxProc, aObjCmd12[i].FclientData, uintptr(0)) 55599 } 55600 return TCL_OK 55601 } 55602 55603 var aObjCmd12 = [1]struct { 55604 FzName uintptr 55605 FxProc uintptr 55606 FclientData uintptr 55607 }{ 55608 {FzName: ts + 36922, FxProc: 0}, 55609 } 55610 55611 type SqlMessage1 = struct { 55612 Fop int32 55613 F__ccgo_pad1 [4]byte 55614 FpDb uintptr 55615 FpStmt uintptr 55616 FerrCode int32 55617 F__ccgo_pad2 [4]byte 55618 FzIn uintptr 55619 FnByte int32 55620 F__ccgo_pad3 [4]byte 55621 FzOut uintptr 55622 FpNext uintptr 55623 FpPrev uintptr 55624 FclientMutex pthread_mutex_t 55625 FclientWakeup pthread_cond_t 55626 } 55627 55628 type SqlMessage = SqlMessage1 55629 55630 type ServerState = struct { 55631 FqueueMutex pthread_mutex_t 55632 FserverMutex pthread_mutex_t 55633 FserverWakeup pthread_cond_t 55634 FserverHalt int32 55635 F__ccgo_pad1 [4]byte 55636 FpQueueHead uintptr 55637 FpQueueTail uintptr 55638 } 55639 55640 var g4 = ServerState{} 55641 55642 func sendToServer(tls *libc.TLS, pMsg uintptr) { 55643 libc.Xpthread_mutex_init(tls, pMsg+72, uintptr(0)) 55644 libc.Xpthread_cond_init(tls, pMsg+80, uintptr(0)) 55645 55646 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 55647 (*SqlMessage)(unsafe.Pointer(pMsg)).FpNext = g4.FpQueueHead 55648 if g4.FpQueueHead == uintptr(0) { 55649 g4.FpQueueTail = pMsg 55650 } else { 55651 (*SqlMessage)(unsafe.Pointer(g4.FpQueueHead)).FpPrev = pMsg 55652 } 55653 (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev = uintptr(0) 55654 g4.FpQueueHead = pMsg 55655 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 55656 55657 libc.Xpthread_mutex_lock(tls, pMsg+72) 55658 libc.Xpthread_cond_signal(tls, uintptr(unsafe.Pointer(&g4))+16) 55659 for (*SqlMessage)(unsafe.Pointer(pMsg)).Fop != MSG_Done { 55660 libc.Xpthread_cond_wait(tls, pMsg+80, pMsg+72) 55661 } 55662 libc.Xpthread_mutex_unlock(tls, pMsg+72) 55663 55664 libc.Xpthread_mutex_destroy(tls, pMsg+72) 55665 libc.Xpthread_cond_destroy(tls, pMsg+80) 55666 } 55667 55668 func sqlite3_client_open(tls *libc.TLS, zDatabaseName uintptr, ppDb uintptr) int32 { 55669 bp := tls.Alloc(88) 55670 defer tls.Free(88) 55671 55672 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Open 55673 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zDatabaseName 55674 sendToServer(tls, bp) 55675 *(*uintptr)(unsafe.Pointer(ppDb)) = (*SqlMessage)(unsafe.Pointer(bp)).FpDb 55676 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55677 } 55678 55679 func sqlite3_client_prepare(tls *libc.TLS, pDb uintptr, zSql uintptr, nByte int32, ppStmt uintptr, pzTail uintptr) int32 { 55680 bp := tls.Alloc(88) 55681 defer tls.Free(88) 55682 55683 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Prepare 55684 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 55685 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zSql 55686 (*SqlMessage)(unsafe.Pointer(bp)).FnByte = nByte 55687 sendToServer(tls, bp) 55688 *(*uintptr)(unsafe.Pointer(ppStmt)) = (*SqlMessage)(unsafe.Pointer(bp)).FpStmt 55689 if pzTail != 0 { 55690 *(*uintptr)(unsafe.Pointer(pzTail)) = (*SqlMessage)(unsafe.Pointer(bp)).FzOut 55691 } 55692 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55693 } 55694 55695 func sqlite3_client_step(tls *libc.TLS, pStmt uintptr) int32 { 55696 bp := tls.Alloc(88) 55697 defer tls.Free(88) 55698 55699 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Step 55700 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 55701 sendToServer(tls, bp) 55702 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55703 } 55704 55705 func sqlite3_client_reset(tls *libc.TLS, pStmt uintptr) int32 { 55706 bp := tls.Alloc(88) 55707 defer tls.Free(88) 55708 55709 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Reset 55710 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 55711 sendToServer(tls, bp) 55712 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55713 } 55714 55715 func sqlite3_client_finalize(tls *libc.TLS, pStmt uintptr) int32 { 55716 bp := tls.Alloc(88) 55717 defer tls.Free(88) 55718 55719 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Finalize 55720 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 55721 sendToServer(tls, bp) 55722 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55723 } 55724 55725 func sqlite3_client_close(tls *libc.TLS, pDb uintptr) int32 { 55726 bp := tls.Alloc(88) 55727 defer tls.Free(88) 55728 55729 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Close 55730 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 55731 sendToServer(tls, bp) 55732 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 55733 } 55734 55735 func sqlite3_server(tls *libc.TLS, NotUsed uintptr) uintptr { 55736 if libc.Xpthread_mutex_trylock(tls, uintptr(unsafe.Pointer(&g4))+8) != 0 { 55737 return uintptr(0) 55738 } 55739 sqlite3.Xsqlite3_enable_shared_cache(tls, 1) 55740 for !(g4.FserverHalt != 0) { 55741 var pMsg uintptr 55742 55743 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 55744 for g4.FpQueueTail == uintptr(0) && g4.FserverHalt == 0 { 55745 libc.Xpthread_cond_wait(tls, uintptr(unsafe.Pointer(&g4))+16, uintptr(unsafe.Pointer(&g4))) 55746 } 55747 pMsg = g4.FpQueueTail 55748 if pMsg != 0 { 55749 if (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev != 0 { 55750 (*SqlMessage)(unsafe.Pointer((*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev)).FpNext = uintptr(0) 55751 } else { 55752 g4.FpQueueHead = uintptr(0) 55753 } 55754 g4.FpQueueTail = (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev 55755 } 55756 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 55757 if pMsg == uintptr(0) { 55758 break 55759 } 55760 55761 libc.Xpthread_mutex_lock(tls, pMsg+72) 55762 switch (*SqlMessage)(unsafe.Pointer(pMsg)).Fop { 55763 case MSG_Open: 55764 { 55765 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_open(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, pMsg+8) 55766 break 55767 55768 } 55769 case MSG_Prepare: 55770 { 55771 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_prepare(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, (*SqlMessage)(unsafe.Pointer(pMsg)).FnByte, 55772 pMsg+16, pMsg+48) 55773 break 55774 55775 } 55776 case MSG_Step: 55777 { 55778 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_step(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 55779 break 55780 55781 } 55782 case MSG_Reset: 55783 { 55784 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_reset(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 55785 break 55786 55787 } 55788 case MSG_Finalize: 55789 { 55790 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_finalize(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 55791 break 55792 55793 } 55794 case MSG_Close: 55795 { 55796 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_close(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb) 55797 break 55798 55799 } 55800 } 55801 55802 (*SqlMessage)(unsafe.Pointer(pMsg)).Fop = MSG_Done 55803 libc.Xpthread_mutex_unlock(tls, pMsg+72) 55804 libc.Xpthread_cond_signal(tls, pMsg+80) 55805 } 55806 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+8) 55807 return uintptr(0) 55808 } 55809 55810 func sqlite3_server_start(tls *libc.TLS) { 55811 bp := tls.Alloc(8) 55812 defer tls.Free(8) 55813 55814 var rc int32 55815 g4.FserverHalt = 0 55816 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 55817 f func(*libc.TLS, uintptr) uintptr 55818 }{sqlite3_server})), uintptr(0)) 55819 if rc == 0 { 55820 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 55821 } 55822 } 55823 55824 func serverWrapper(tls *libc.TLS, pnDecr uintptr) uintptr { 55825 var p uintptr = sqlite3_server(tls, uintptr(0)) 55826 *(*int32)(unsafe.Pointer(pnDecr))-- 55827 return p 55828 } 55829 55830 func sqlite3_server_start2(tls *libc.TLS, pnDecr uintptr) { 55831 bp := tls.Alloc(8) 55832 defer tls.Free(8) 55833 55834 var rc int32 55835 g4.FserverHalt = 0 55836 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 55837 f func(*libc.TLS, uintptr) uintptr 55838 }{serverWrapper})), pnDecr) 55839 if rc == 0 { 55840 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 55841 } 55842 } 55843 55844 func sqlite3_server_stop(tls *libc.TLS) { 55845 g4.FserverHalt = 1 55846 libc.Xpthread_cond_broadcast(tls, uintptr(unsafe.Pointer(&g4))+16) 55847 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))+8) 55848 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+8) 55849 } 55850 55851 type SuperlockBusy1 = struct { 55852 FxBusy uintptr 55853 FpBusyArg uintptr 55854 FnBusy int32 55855 F__ccgo_pad1 [4]byte 55856 } 55857 55858 type SuperlockBusy = SuperlockBusy1 55859 55860 type Superlock1 = struct { 55861 Fdb uintptr 55862 FbWal int32 55863 F__ccgo_pad1 [4]byte 55864 } 55865 55866 type Superlock = Superlock1 55867 55868 func superlockBusyHandler(tls *libc.TLS, pCtx uintptr, UNUSED int32) int32 { 55869 var pBusy uintptr = pCtx 55870 if (*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy == uintptr(0) { 55871 return 0 55872 } 55873 return (*struct { 55874 f func(*libc.TLS, uintptr, int32) int32 55875 })(unsafe.Pointer(&struct{ uintptr }{(*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy})).f(tls, (*SuperlockBusy)(unsafe.Pointer(pBusy)).FpBusyArg, libc.PostIncInt32(&(*SuperlockBusy)(unsafe.Pointer(pBusy)).FnBusy, 1)) 55876 } 55877 55878 func superlockIsWal(tls *libc.TLS, pLock uintptr) int32 { 55879 bp := tls.Alloc(8) 55880 defer tls.Free(8) 55881 55882 var rc int32 55883 55884 rc = sqlite3.Xsqlite3_prepare(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+36945, -1, bp, uintptr(0)) 55885 if rc != SQLITE_OK { 55886 return rc 55887 } 55888 55889 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 0 55890 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 55891 var zMode uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 55892 if zMode != 0 && libc.Xstrlen(tls, zMode) == uint64(3) && sqlite3.Xsqlite3_strnicmp(tls, ts+29946, zMode, 3) == 0 { 55893 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 1 55894 } 55895 } 55896 55897 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 55898 } 55899 55900 func superlockShmLock(tls *libc.TLS, fd uintptr, idx int32, nByte int32, pBusy uintptr) int32 { 55901 var rc int32 55902 var xShmLock uintptr = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxShmLock 55903 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_BUSY && superlockBusyHandler(tls, pBusy, 0) != 0 { 55904 rc = (*struct { 55905 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55906 })(unsafe.Pointer(&struct{ uintptr }{xShmLock})).f(tls, fd, idx, nByte, SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) 55907 } 55908 return rc 55909 } 55910 55911 func superlockWalLock(tls *libc.TLS, db uintptr, pBusy uintptr) int32 { 55912 bp := tls.Alloc(16) 55913 defer tls.Free(16) 55914 55915 var rc int32 55916 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 55917 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 55918 55919 rc = sqlite3.Xsqlite3_file_control(tls, db, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 55920 if rc != SQLITE_OK { 55921 return rc 55922 } 55923 55924 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 2, 1, pBusy) 55925 if rc != SQLITE_OK { 55926 return rc 55927 } 55928 55929 rc = (*struct { 55930 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 55931 })(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) 55932 if rc != SQLITE_OK { 55933 return rc 55934 } 55935 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, uint64(32)) 55936 55937 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 3, SQLITE_SHM_NLOCK-3, pBusy) 55938 return rc 55939 } 55940 55941 func sqlite3demo_superunlock(tls *libc.TLS, pLock uintptr) { 55942 bp := tls.Alloc(8) 55943 defer tls.Free(8) 55944 55945 var p uintptr = pLock 55946 if (*Superlock)(unsafe.Pointer(p)).FbWal != 0 { 55947 var rc int32 55948 var flags int32 = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE 55949 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 55950 rc = sqlite3.Xsqlite3_file_control(tls, (*Superlock)(unsafe.Pointer(p)).Fdb, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 55951 if rc == SQLITE_OK { 55952 (*struct { 55953 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55954 })(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) 55955 (*struct { 55956 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55957 })(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) 55958 } 55959 } 55960 sqlite3.Xsqlite3_close(tls, (*Superlock)(unsafe.Pointer(p)).Fdb) 55961 sqlite3.Xsqlite3_free(tls, p) 55962 } 55963 55964 func sqlite3demo_superlock(tls *libc.TLS, zPath uintptr, zVfs uintptr, xBusy uintptr, pBusyArg uintptr, ppLock uintptr) int32 { 55965 bp := tls.Alloc(24) 55966 defer tls.Free(24) 55967 55968 *(*SuperlockBusy)(unsafe.Pointer(bp)) = SuperlockBusy{} 55969 var rc int32 55970 var pLock uintptr 55971 55972 pLock = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Superlock{}))) 55973 if !(pLock != 0) { 55974 return SQLITE_NOMEM 55975 } 55976 libc.Xmemset(tls, pLock, 0, uint64(unsafe.Sizeof(Superlock{}))) 55977 55978 rc = sqlite3.Xsqlite3_open_v2(tls, 55979 zPath, pLock, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs) 55980 55981 if rc == SQLITE_OK { 55982 (*SuperlockBusy)(unsafe.Pointer(bp)).FxBusy = xBusy 55983 (*SuperlockBusy)(unsafe.Pointer(bp)).FpBusyArg = pBusyArg 55984 sqlite3.Xsqlite3_busy_handler(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 55985 f func(*libc.TLS, uintptr, int32) int32 55986 }{superlockBusyHandler})), bp) 55987 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+13217, uintptr(0), uintptr(0), uintptr(0)) 55988 } 55989 55990 if rc == SQLITE_OK { 55991 if SQLITE_OK == libc.AssignInt32(&rc, superlockIsWal(tls, pLock)) && (*Superlock)(unsafe.Pointer(pLock)).FbWal != 0 { 55992 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+11628, uintptr(0), uintptr(0), uintptr(0)) 55993 if rc == SQLITE_OK { 55994 rc = superlockWalLock(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, bp) 55995 } 55996 } 55997 } 55998 55999 if rc != SQLITE_OK { 56000 sqlite3demo_superunlock(tls, pLock) 56001 *(*uintptr)(unsafe.Pointer(ppLock)) = uintptr(0) 56002 } else { 56003 *(*uintptr)(unsafe.Pointer(ppLock)) = pLock 56004 } 56005 56006 return rc 56007 } 56008 56009 type InterpAndScript1 = struct { 56010 Finterp uintptr 56011 FpScript uintptr 56012 } 56013 56014 type InterpAndScript = InterpAndScript1 56015 56016 func superunlock_del(tls *libc.TLS, cd ClientData) { 56017 sqlite3demo_superunlock(tls, cd) 56018 } 56019 56020 func superunlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56021 if objc != 1 { 56022 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 56023 return TCL_ERROR 56024 } 56025 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 56026 return TCL_OK 56027 } 56028 56029 func superlock_busy(tls *libc.TLS, pCtx uintptr, nBusy int32) int32 { 56030 bp := tls.Alloc(4) 56031 defer tls.Free(4) 56032 56033 var p uintptr = pCtx 56034 var pEval uintptr 56035 *(*int32)(unsafe.Pointer(bp)) = 0 56036 56037 pEval = tcl.XTcl_DuplicateObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).FpScript) 56038 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 56039 tcl.XTcl_ListObjAppendElement(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, nBusy)) 56040 tcl.XTcl_EvalObjEx(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 56041 tcl.XTcl_GetIntFromObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp), bp) 56042 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56043 var _objPtr uintptr = pEval 56044 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56045 tcl.XTclFreeObj(tls, _objPtr) 56046 } 56047 } 56048 56049 return *(*int32)(unsafe.Pointer(bp)) 56050 } 56051 56052 func superlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56053 bp := tls.Alloc(40) 56054 defer tls.Free(40) 56055 56056 var zPath uintptr 56057 var zVfs uintptr = uintptr(0) 56058 *(*InterpAndScript)(unsafe.Pointer(bp + 16)) = InterpAndScript{} 56059 var xBusy uintptr = uintptr(0) 56060 var rc int32 56061 56062 if objc < 3 || objc > 5 { 56063 tcl.XTcl_WrongNumArgs(tls, 56064 interp, 1, objv, ts+36970) 56065 return TCL_ERROR 56066 } 56067 56068 zPath = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56069 56070 if objc > 3 { 56071 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 56072 if libc.Xstrlen(tls, zVfs) == uint64(0) { 56073 zVfs = uintptr(0) 56074 } 56075 } 56076 if objc > 4 { 56077 (*InterpAndScript)(unsafe.Pointer(bp + 16)).Finterp = interp 56078 (*InterpAndScript)(unsafe.Pointer(bp + 16)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 56079 xBusy = *(*uintptr)(unsafe.Pointer(&struct { 56080 f func(*libc.TLS, uintptr, int32) int32 56081 }{superlock_busy})) 56082 } 56083 56084 rc = sqlite3demo_superlock(tls, zPath, zVfs, xBusy, bp+16, bp+32) 56085 56086 if rc != SQLITE_OK { 56087 tcl.XTcl_ResetResult(tls, interp) 56088 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 56089 return TCL_ERROR 56090 } 56091 56092 tcl.XTcl_CreateObjCommand(tls, 56093 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 56094 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56095 }{superunlock_cmd})), *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{superunlock_del}))) 56096 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 56097 return TCL_OK 56098 } 56099 56100 func SqliteSuperlock_Init(tls *libc.TLS, interp uintptr) int32 { 56101 tcl.XTcl_CreateObjCommand(tls, interp, ts+37011, *(*uintptr)(unsafe.Pointer(&struct { 56102 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56103 }{superlock_cmd})), uintptr(0), uintptr(0)) 56104 return TCL_OK 56105 } 56106 56107 type TestSyscallGlobal = struct { 56108 FbPersist int32 56109 FnCount int32 56110 FnFail int32 56111 Fpgsz int32 56112 Forig_getpagesize sqlite3_syscall_ptr 56113 } 56114 56115 var gSyscall = TestSyscallGlobal{} 56116 56117 type TestSyscallArray = struct { 56118 FzName uintptr 56119 FxTest sqlite3_syscall_ptr 56120 FxOrig sqlite3_syscall_ptr 56121 Fdefault_errno int32 56122 Fcustom_errno int32 56123 } 56124 56125 var aSyscall = [19]TestSyscallArray{ 56126 {FzName: ts + 37033, FxTest: 0, Fdefault_errno: EACCES}, 56127 {FzName: ts + 9490, FxTest: 0}, 56128 {FzName: ts + 37038, FxTest: 0}, 56129 {FzName: ts + 37045, FxTest: 0}, 56130 {FzName: ts + 37052, FxTest: 0}, 56131 {FzName: ts + 37057, FxTest: 0}, 56132 {FzName: ts + 37063, FxTest: 0, Fdefault_errno: EIO}, 56133 {FzName: ts + 37073, FxTest: 0, Fdefault_errno: EACCES}, 56134 {FzName: ts + 25126, FxTest: 0}, 56135 {FzName: ts + 37079, FxTest: 0}, 56136 {FzName: ts + 37085, FxTest: 0}, 56137 {FzName: ts + 25131, FxTest: 0}, 56138 {FzName: ts + 37093, FxTest: 0}, 56139 {FzName: ts + 37100, FxTest: 0}, 56140 {FzName: ts + 37109, FxTest: 0}, 56141 {FzName: ts + 37116, FxTest: 0}, 56142 {FzName: ts + 29040, FxTest: 0}, 56143 {FzName: ts + 37126, FxTest: 0}, 56144 {}, 56145 } 56146 56147 func tsIsFail(tls *libc.TLS) int32 { 56148 gSyscall.FnCount-- 56149 if gSyscall.FnCount == 0 || gSyscall.FnFail != 0 && gSyscall.FbPersist != 0 { 56150 gSyscall.FnFail++ 56151 return 1 56152 } 56153 return 0 56154 } 56155 56156 func tsErrno(tls *libc.TLS, zFunc uintptr) int32 { 56157 var i int32 56158 var nFunc int32 = int32(libc.Xstrlen(tls, zFunc)) 56159 for i = 0; aSyscall[i].FzName != 0; i++ { 56160 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(nFunc) { 56161 continue 56162 } 56163 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(nFunc)) != 0 { 56164 continue 56165 } 56166 return aSyscall[i].Fcustom_errno 56167 } 56168 56169 return 0 56170 } 56171 56172 func tsIsFailErrno(tls *libc.TLS, zFunc uintptr) int32 { 56173 if tsIsFail(tls) != 0 { 56174 *(*int32)(unsafe.Pointer(libc.X__errno(tls))) = tsErrno(tls, zFunc) 56175 return 1 56176 } 56177 return 0 56178 } 56179 56180 func ts_open(tls *libc.TLS, zFile uintptr, flags int32, mode int32) int32 { 56181 if tsIsFailErrno(tls, ts+37033) != 0 { 56182 return -1 56183 } 56184 return (*(*func(*libc.TLS, uintptr, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16)))(tls, zFile, flags, mode) 56185 } 56186 56187 func ts_close(tls *libc.TLS, fd int32) int32 { 56188 if tsIsFail(tls) != 0 { 56189 (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 56190 return -1 56191 } 56192 return (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 56193 } 56194 56195 func ts_access(tls *libc.TLS, zPath uintptr, mode int32) int32 { 56196 if tsIsFail(tls) != 0 { 56197 return -1 56198 } 56199 return (*(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 2*32 + 16)))(tls, zPath, mode) 56200 } 56201 56202 func ts_getcwd(tls *libc.TLS, zPath uintptr, nPath size_t) uintptr { 56203 if tsIsFail(tls) != 0 { 56204 return uintptr(0) 56205 } 56206 return (*(*func(*libc.TLS, uintptr, size_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 3*32 + 16)))(tls, zPath, nPath) 56207 } 56208 56209 func ts_stat(tls *libc.TLS, zPath uintptr, p uintptr) int32 { 56210 if tsIsFail(tls) != 0 { 56211 return -1 56212 } 56213 return (*(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 4*32 + 16)))(tls, zPath, p) 56214 } 56215 56216 func ts_fstat(tls *libc.TLS, fd int32, p uintptr) int32 { 56217 if tsIsFailErrno(tls, ts+37057) != 0 { 56218 return -1 56219 } 56220 return (*(*func(*libc.TLS, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 5*32 + 16)))(tls, fd, p) 56221 } 56222 56223 func ts_ftruncate(tls *libc.TLS, fd int32, n off_t) int32 { 56224 if tsIsFailErrno(tls, ts+37063) != 0 { 56225 return -1 56226 } 56227 return (*(*func(*libc.TLS, int32, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 6*32 + 16)))(tls, fd, n) 56228 } 56229 56230 func ts_fcntl(tls *libc.TLS, fd int32, cmd int32, va uintptr) int32 { 56231 bp := tls.Alloc(8) 56232 defer tls.Free(8) 56233 56234 var ap va_list 56235 _ = ap 56236 var pArg uintptr 56237 if tsIsFailErrno(tls, ts+37073) != 0 { 56238 return -1 56239 } 56240 ap = va 56241 pArg = libc.VaUintptr(&ap) 56242 return (*(*func(*libc.TLS, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 7*32 + 16)))(tls, fd, cmd, libc.VaList(bp, pArg)) 56243 } 56244 56245 func ts_read(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 56246 if tsIsFailErrno(tls, ts+25126) != 0 { 56247 return -1 56248 } 56249 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8*32 + 16)))(tls, fd, aBuf, nBuf)) 56250 } 56251 56252 func ts_pread(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 56253 if tsIsFailErrno(tls, ts+37079) != 0 { 56254 return -1 56255 } 56256 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)) 56257 } 56258 56259 func ts_pread64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 56260 if tsIsFailErrno(tls, ts+37085) != 0 { 56261 return -1 56262 } 56263 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)) 56264 } 56265 56266 func ts_write(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 56267 if tsIsFailErrno(tls, ts+25131) != 0 { 56268 if tsErrno(tls, ts+25131) == EINTR { 56269 (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf/uint64(2)) 56270 } 56271 return -1 56272 } 56273 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf)) 56274 } 56275 56276 func ts_pwrite(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 56277 if tsIsFailErrno(tls, ts+37093) != 0 { 56278 return -1 56279 } 56280 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)) 56281 } 56282 56283 func ts_pwrite64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 56284 if tsIsFailErrno(tls, ts+37100) != 0 { 56285 return -1 56286 } 56287 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)) 56288 } 56289 56290 func ts_fchmod(tls *libc.TLS, fd int32, mode mode_t) int32 { 56291 if tsIsFail(tls) != 0 { 56292 return -1 56293 } 56294 return (*(*func(*libc.TLS, int32, mode_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 14*32 + 16)))(tls, fd, mode) 56295 } 56296 56297 func ts_fallocate(tls *libc.TLS, fd int32, off off_t, len off_t) int32 { 56298 if tsIsFail(tls) != 0 { 56299 return tsErrno(tls, ts+37116) 56300 } 56301 return (*(*func(*libc.TLS, int32, off_t, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 15*32 + 16)))(tls, fd, off, len) 56302 } 56303 56304 func ts_mmap(tls *libc.TLS, pAddr uintptr, nByte size_t, prot int32, flags int32, fd int32, iOff off_t) uintptr { 56305 if tsIsFailErrno(tls, ts+29040) != 0 { 56306 return libc.UintptrFromInt32(-1) 56307 } 56308 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) 56309 } 56310 56311 func ts_mremap(tls *libc.TLS, a uintptr, b size_t, c size_t, d int32, va uintptr) uintptr { 56312 bp := tls.Alloc(8) 56313 defer tls.Free(8) 56314 56315 var ap va_list 56316 _ = ap 56317 var pArg uintptr 56318 if tsIsFailErrno(tls, ts+37126) != 0 { 56319 return libc.UintptrFromInt32(-1) 56320 } 56321 ap = va 56322 pArg = libc.VaUintptr(&ap) 56323 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)) 56324 } 56325 56326 func test_syscall_install(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56327 bp := tls.Alloc(20) 56328 defer tls.Free(20) 56329 56330 var pVfs uintptr 56331 56332 var i int32 56333 56334 if objc != 3 { 56335 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37133) 56336 return TCL_ERROR 56337 } 56338 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp, bp+8) != 0 { 56339 return TCL_ERROR 56340 } 56341 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56342 56343 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 56344 var rc int32 = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56345 *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp+16) 56346 if rc != 0 { 56347 return rc 56348 } 56349 if aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig == uintptr(0) { 56350 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig = (*struct { 56351 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 56352 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FzName) 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[*(*int32)(unsafe.Pointer(bp + 16))].FzName, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxTest) 56356 } 56357 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fcustom_errno = aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fdefault_errno 56358 } 56359 56360 return TCL_OK 56361 } 56362 56363 func test_syscall_uninstall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56364 var pVfs uintptr 56365 var i int32 56366 56367 if objc != 2 { 56368 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56369 return TCL_ERROR 56370 } 56371 56372 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56373 for i = 0; aSyscall[i].FzName != 0; i++ { 56374 if aSyscall[i].FxOrig != 0 { 56375 (*struct { 56376 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56377 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[i].FzName, uintptr(0)) 56378 aSyscall[i].FxOrig = uintptr(0) 56379 } 56380 } 56381 return TCL_OK 56382 } 56383 56384 func test_syscall_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56385 bp := tls.Alloc(4) 56386 defer tls.Free(4) 56387 56388 var pVfs uintptr 56389 var i int32 56390 var rc int32 56391 56392 if objc != 2 && objc != 3 { 56393 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56394 return TCL_ERROR 56395 } 56396 56397 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56398 if objc == 2 { 56399 rc = (*struct { 56400 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56401 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, uintptr(0), uintptr(0)) 56402 for i = 0; aSyscall[i].FzName != 0; i++ { 56403 aSyscall[i].FxOrig = uintptr(0) 56404 } 56405 } else { 56406 var zFunc uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) 56407 rc = (*struct { 56408 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56409 })(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)) 56410 for i = 0; rc == SQLITE_OK && aSyscall[i].FzName != 0; i++ { 56411 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(*(*int32)(unsafe.Pointer(bp))) { 56412 continue 56413 } 56414 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(*(*int32)(unsafe.Pointer(bp)))) != 0 { 56415 continue 56416 } 56417 aSyscall[i].FxOrig = uintptr(0) 56418 } 56419 } 56420 if rc != SQLITE_OK { 56421 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 56422 return TCL_ERROR 56423 } 56424 56425 tcl.XTcl_ResetResult(tls, interp) 56426 return TCL_OK 56427 } 56428 56429 func test_syscall_exists(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56430 var pVfs uintptr 56431 var x sqlite3_syscall_ptr 56432 56433 if objc != 3 { 56434 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56435 return TCL_ERROR 56436 } 56437 56438 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56439 x = (*struct { 56440 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 56441 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 56442 56443 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(x != uintptr(0)) != 0))) 56444 return TCL_OK 56445 } 56446 56447 func test_syscall_fault(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56448 bp := tls.Alloc(8) 56449 defer tls.Free(8) 56450 56451 *(*int32)(unsafe.Pointer(bp)) = 0 56452 *(*int32)(unsafe.Pointer(bp + 4)) = 0 56453 56454 if objc != 2 && objc != 4 { 56455 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37158) 56456 return TCL_ERROR 56457 } 56458 56459 if objc == 4 { 56460 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 || 56461 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 56462 return TCL_ERROR 56463 } 56464 } 56465 56466 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, gSyscall.FnFail)) 56467 gSyscall.FnCount = *(*int32)(unsafe.Pointer(bp)) 56468 gSyscall.FbPersist = *(*int32)(unsafe.Pointer(bp + 4)) 56469 gSyscall.FnFail = 0 56470 return TCL_OK 56471 } 56472 56473 func test_syscall_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56474 bp := tls.Alloc(204) 56475 defer tls.Free(204) 56476 56477 var rc int32 56478 56479 *(*[12]Errno)(unsafe.Pointer(bp + 8)) = [12]Errno{ 56480 {Fz: ts + 37174, Fi: EACCES}, 56481 {Fz: ts + 37181, Fi: EINTR}, 56482 {Fz: ts + 37187, Fi: EIO}, 56483 {Fz: ts + 37191, Fi: EOVERFLOW}, 56484 {Fz: ts + 37201, Fi: ENOMEM}, 56485 {Fz: ts + 37208, Fi: EAGAIN}, 56486 {Fz: ts + 37215, Fi: ETIMEDOUT}, 56487 {Fz: ts + 37225, Fi: EBUSY}, 56488 {Fz: ts + 37231, Fi: EPERM}, 56489 {Fz: ts + 37237, Fi: EDEADLK}, 56490 {Fz: ts + 37245, Fi: ENOLCK}, 56491 {}, 56492 } 56493 56494 if objc != 4 { 56495 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37252) 56496 return TCL_ERROR 56497 } 56498 56499 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56500 *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp) 56501 if rc != TCL_OK { 56502 return rc 56503 } 56504 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56505 *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(Errno{})), ts+37266, 0, bp+200) 56506 if rc != TCL_OK { 56507 return rc 56508 } 56509 56510 aSyscall[*(*int32)(unsafe.Pointer(bp))].Fcustom_errno = (*Errno)(unsafe.Pointer(bp + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 200)))*16)).Fi 56511 return TCL_OK 56512 } 56513 56514 type Errno = struct { 56515 Fz uintptr 56516 Fi int32 56517 F__ccgo_pad1 [4]byte 56518 } 56519 56520 func test_syscall_list(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56521 var zSys uintptr 56522 var pVfs uintptr 56523 var pList uintptr 56524 56525 if objc != 2 { 56526 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56527 return TCL_ERROR 56528 } 56529 56530 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56531 pList = tcl.XTcl_NewObj(tls) 56532 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 56533 for zSys = (*struct { 56534 f func(*libc.TLS, uintptr, uintptr) uintptr 56535 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, uintptr(0)); zSys != uintptr(0); zSys = (*struct { 56536 f func(*libc.TLS, uintptr, uintptr) uintptr 56537 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, zSys) { 56538 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, zSys, -1)) 56539 } 56540 56541 tcl.XTcl_SetObjResult(tls, interp, pList) 56542 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56543 var _objPtr uintptr = pList 56544 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56545 tcl.XTclFreeObj(tls, _objPtr) 56546 } 56547 } 56548 return TCL_OK 56549 } 56550 56551 func test_syscall_defaultvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56552 var pVfs uintptr 56553 56554 if objc != 2 { 56555 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 56556 return TCL_ERROR 56557 } 56558 56559 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56560 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 56561 return TCL_OK 56562 } 56563 56564 func ts_getpagesize(tls *libc.TLS) int32 { 56565 return gSyscall.Fpgsz 56566 } 56567 56568 func test_syscall_pagesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56569 bp := tls.Alloc(20) 56570 defer tls.Free(20) 56571 56572 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56573 56574 if objc != 3 { 56575 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37272) 56576 return TCL_ERROR 56577 } 56578 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 56579 return TCL_ERROR 56580 } 56581 56582 if *(*int32)(unsafe.Pointer(bp + 16)) < 0 { 56583 if gSyscall.Forig_getpagesize != 0 { 56584 (*struct { 56585 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56586 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, ts+37277, gSyscall.Forig_getpagesize) 56587 } 56588 } else { 56589 if *(*int32)(unsafe.Pointer(bp + 16)) < 512 || *(*int32)(unsafe.Pointer(bp + 16))&(*(*int32)(unsafe.Pointer(bp + 16))-1) != 0 { 56590 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37289, 0)) 56591 return TCL_ERROR 56592 } 56593 gSyscall.Forig_getpagesize = (*struct { 56594 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 56595 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, ts+37277) 56596 gSyscall.Fpgsz = *(*int32)(unsafe.Pointer(bp + 16)) 56597 (*struct { 56598 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 56599 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, 56600 pVfs, ts+37277, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{ts_getpagesize}))) 56601 } 56602 56603 return TCL_OK 56604 } 56605 56606 func test_syscall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56607 bp := tls.Alloc(180) 56608 defer tls.Free(180) 56609 56610 *(*[10]SyscallCmd)(unsafe.Pointer(bp + 16)) = [10]SyscallCmd{ 56611 {FzName: ts + 37307, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56612 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56613 }{test_syscall_fault}))}, 56614 {FzName: ts + 37313, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56615 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56616 }{test_syscall_install}))}, 56617 {FzName: ts + 37321, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56618 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56619 }{test_syscall_uninstall}))}, 56620 {FzName: ts + 7933, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56621 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56622 }{test_syscall_reset}))}, 56623 {FzName: ts + 37266, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56624 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56625 }{test_syscall_errno}))}, 56626 {FzName: ts + 13516, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56627 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56628 }{test_syscall_exists}))}, 56629 {FzName: ts + 37331, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56630 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56631 }{test_syscall_list}))}, 56632 {FzName: ts + 37336, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56633 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56634 }{test_syscall_defaultvfs}))}, 56635 {FzName: ts + 37347, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56636 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56637 }{test_syscall_pagesize}))}, 56638 {}, 56639 } 56640 56641 var rc int32 56642 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56643 56644 if objc < 2 { 56645 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 56646 return TCL_ERROR 56647 } 56648 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion < 3 || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall == uintptr(0) { 56649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37356, 0)) 56650 rc = TCL_ERROR 56651 } else { 56652 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 56653 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, int32(unsafe.Sizeof(SyscallCmd{})), ts+2014, 0, bp+176) 56654 } 56655 if rc != TCL_OK { 56656 return rc 56657 } 56658 return (*struct { 56659 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56660 })(unsafe.Pointer(&struct{ uintptr }{(*SyscallCmd)(unsafe.Pointer(bp + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*16)).FxCmd})).f(tls, clientData, interp, objc, objv) 56661 } 56662 56663 type SyscallCmd = struct { 56664 FzName uintptr 56665 FxCmd uintptr 56666 } 56667 56668 func SqlitetestSyscall_Init(tls *libc.TLS, interp uintptr) int32 { 56669 bp := tls.Alloc(16) 56670 defer tls.Free(16) 56671 56672 *(*[1]SyscallCmd)(unsafe.Pointer(bp)) = [1]SyscallCmd{ 56673 {FzName: ts + 37392, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 56674 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56675 }{test_syscall}))}, 56676 } 56677 var i int32 56678 56679 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]SyscallCmd{}))/uint64(unsafe.Sizeof(SyscallCmd{})); i++ { 56680 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)) 56681 } 56682 return TCL_OK 56683 } 56684 56685 func sqlite3TestInit(tls *libc.TLS, interp uintptr) uintptr { 56686 bp := tls.Alloc(80) 56687 defer tls.Free(80) 56688 56689 { 56690 libc.Xgetrlimit(tls, RLIMIT_CORE, bp) 56691 (*rlimit)(unsafe.Pointer(bp)).Frlim_cur = (*rlimit)(unsafe.Pointer(bp)).Frlim_max 56692 libc.Xsetrlimit(tls, RLIMIT_CORE, bp) 56693 56694 } 56695 56696 if tcl.XTcl_GetCommandInfo(tls, interp, ts+14267, bp+16) == 0 { 56697 Sqlite3_Init(tls, interp) 56698 } 56699 Md5_Init(tls, interp) 56700 Sqliteconfig_Init(tls, interp) 56701 Sqlitetest1_Init(tls, interp) 56702 Sqlitetest2_Init(tls, interp) 56703 Sqlitetest3_Init(tls, interp) 56704 Sqlitetest4_Init(tls, interp) 56705 Sqlitetest5_Init(tls, interp) 56706 Sqlitetest6_Init(tls, interp) 56707 Sqlitetest7_Init(tls, interp) 56708 Sqlitetest8_Init(tls, interp) 56709 Sqlitetest9_Init(tls, interp) 56710 Sqlitetestasync_Init(tls, interp) 56711 Sqlitetest_autoext_Init(tls, interp) 56712 Sqlitetest_blob_Init(tls, interp) 56713 Sqlitetest_demovfs_Init(tls, interp) 56714 Sqlitetest_func_Init(tls, interp) 56715 Sqlitetest_hexio_Init(tls, interp) 56716 Sqlitetest_init_Init(tls, interp) 56717 Sqlitetest_malloc_Init(tls, interp) 56718 Sqlitetest_mutex_Init(tls, interp) 56719 Sqlitetestschema_Init(tls, interp) 56720 Sqlitetesttclvar_Init(tls, interp) 56721 Sqlitetestfs_Init(tls, interp) 56722 SqlitetestThread_Init(tls, interp) 56723 SqlitetestOnefile_Init(tls) 56724 SqlitetestOsinst_Init(tls, interp) 56725 Sqlitetestbackup_Init(tls, interp) 56726 Sqlitetestintarray_Init(tls, interp) 56727 Sqlitetestvfs_Init(tls, interp) 56728 Sqlitetestrtree_Init(tls, interp) 56729 Sqlitetestrtreedoc_Init(tls, interp) 56730 Sqlitequota_Init(tls, interp) 56731 Sqlitemultiplex_Init(tls, interp) 56732 SqliteSuperlock_Init(tls, interp) 56733 SqlitetestSyscall_Init(tls, interp) 56734 TestSession_Init(tls, interp) 56735 Fts5tcl_Init(tls, interp) 56736 SqliteRbu_Init(tls, interp) 56737 Sqlitetesttcl_Init(tls, interp) 56738 56739 TestExpert_Init(tls, interp) 56740 Sqlitetest_window_Init(tls, interp) 56741 Sqlitetestvdbecov_Init(tls, interp) 56742 56743 tcl.XTcl_CreateObjCommand(tls, 56744 interp, ts+37405, *(*uintptr)(unsafe.Pointer(&struct { 56745 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56746 }{load_testfixture_extensions})), uintptr(0), uintptr(0)) 56747 return uintptr(0) 56748 } 56749 56750 func load_testfixture_extensions(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56751 var slave uintptr 56752 if objc != 2 { 56753 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+37433) 56754 return TCL_ERROR 56755 } 56756 56757 slave = tcl.XTcl_GetSlave(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56758 if !(slave != 0) { 56759 return TCL_ERROR 56760 } 56761 56762 sqlite3TestInit(tls, slave) 56763 return TCL_OK 56764 } 56765 56766 type tclvar_vtab1 = struct { 56767 Fbase sqlite3_vtab 56768 Finterp uintptr 56769 } 56770 56771 type tclvar_vtab = tclvar_vtab1 56772 type tclvar_cursor1 = struct { 56773 Fbase sqlite3_vtab_cursor 56774 FpList1 uintptr 56775 FpList2 uintptr 56776 Fi1 int32 56777 Fi2 int32 56778 } 56779 56780 type tclvar_cursor = tclvar_cursor1 56781 56782 func tclvarConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 56783 var pVtab uintptr 56784 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_vtab{}))) 56785 if pVtab == uintptr(0) { 56786 return SQLITE_NOMEM 56787 } 56788 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 56789 (*tclvar_vtab)(unsafe.Pointer(pVtab)).Finterp = pAux 56790 sqlite3.Xsqlite3_declare_vtab(tls, db, uintptr(unsafe.Pointer(&zSchema))) 56791 return SQLITE_OK 56792 } 56793 56794 var zSchema = *(*[100]int8)(unsafe.Pointer(ts + 37439)) 56795 56796 func tclvarDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 56797 sqlite3.Xsqlite3_free(tls, pVtab) 56798 return SQLITE_OK 56799 } 56800 56801 func tclvarOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 56802 var pCur uintptr 56803 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_cursor{}))) 56804 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 56805 return SQLITE_OK 56806 } 56807 56808 func tclvarClose(tls *libc.TLS, cur uintptr) int32 { 56809 var pCur uintptr = cur 56810 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 56811 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56812 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 56813 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56814 tcl.XTclFreeObj(tls, _objPtr) 56815 } 56816 } 56817 } 56818 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 56819 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 56820 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 56821 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56822 tcl.XTclFreeObj(tls, _objPtr) 56823 } 56824 } 56825 } 56826 sqlite3.Xsqlite3_free(tls, pCur) 56827 return SQLITE_OK 56828 } 56829 56830 func next2(tls *libc.TLS, interp uintptr, pCur uintptr, pObj uintptr) int32 { 56831 bp := tls.Alloc(4) 56832 defer tls.Free(4) 56833 56834 var p uintptr 56835 56836 if pObj != 0 { 56837 if !(int32((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) != 0) { 56838 p = tcl.XTcl_NewStringObj(tls, ts+37539, -1) 56839 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 56840 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, pObj) 56841 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 56842 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56843 var _objPtr uintptr = p 56844 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56845 tcl.XTclFreeObj(tls, _objPtr) 56846 } 56847 } 56848 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = tcl.XTcl_GetObjResult(tls, interp) 56849 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount++ 56850 56851 } else { 56852 *(*int32)(unsafe.Pointer(bp)) = 0 56853 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2++ 56854 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, bp) 56855 if (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 >= *(*int32)(unsafe.Pointer(bp)) { 56856 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 56857 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 56858 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56859 tcl.XTclFreeObj(tls, _objPtr) 56860 } 56861 } 56862 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 56863 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 56864 return 0 56865 } 56866 } 56867 } 56868 56869 return 1 56870 } 56871 56872 func tclvarNext(tls *libc.TLS, cur uintptr) int32 { 56873 bp := tls.Alloc(16) 56874 defer tls.Free(16) 56875 56876 *(*int32)(unsafe.Pointer(bp)) = 0 56877 var ok int32 = 0 56878 56879 var pCur uintptr = cur 56880 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 56881 56882 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, bp) 56883 for !(ok != 0) && (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 < *(*int32)(unsafe.Pointer(bp)) { 56884 tcl.XTcl_ListObjIndex(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+8) 56885 ok = next2(tls, interp, pCur, *(*uintptr)(unsafe.Pointer(bp + 8))) 56886 if !(ok != 0) { 56887 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1++ 56888 } 56889 } 56890 56891 return 0 56892 } 56893 56894 func tclvarFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 56895 var pCur uintptr = pVtabCursor 56896 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).Finterp 56897 var p uintptr = tcl.XTcl_NewStringObj(tls, ts+37551, -1) 56898 56899 var zEq uintptr = ts + 584 56900 var zMatch uintptr = ts + 584 56901 var zGlob uintptr = ts + 584 56902 var zRegexp uintptr = ts + 584 56903 var zLike uintptr = ts + 584 56904 var i int32 56905 56906 for i = 0; *(*int8)(unsafe.Pointer(idxStr + uintptr(i))) != 0; i++ { 56907 switch int32(*(*int8)(unsafe.Pointer(idxStr + uintptr(i)))) { 56908 case 'e': 56909 zEq = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56910 break 56911 case 'm': 56912 zMatch = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56913 break 56914 case 'g': 56915 zGlob = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56916 break 56917 case 'r': 56918 zRegexp = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56919 break 56920 case 'l': 56921 zLike = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 56922 break 56923 default: 56924 } 56925 } 56926 56927 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 56928 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zEq, -1)) 56929 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zMatch, -1)) 56930 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zGlob, -1)) 56931 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zRegexp, -1)) 56932 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zLike, -1)) 56933 56934 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 56935 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 56936 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56937 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 56938 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56939 tcl.XTclFreeObj(tls, _objPtr) 56940 } 56941 } 56942 } 56943 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 56944 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 56945 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 56946 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56947 tcl.XTclFreeObj(tls, _objPtr) 56948 } 56949 } 56950 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 56951 } 56952 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 = 0 56953 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 56954 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 = tcl.XTcl_GetObjResult(tls, interp) 56955 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount++ 56956 56957 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 56958 var _objPtr uintptr = p 56959 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56960 tcl.XTclFreeObj(tls, _objPtr) 56961 } 56962 } 56963 return tclvarNext(tls, pVtabCursor) 56964 } 56965 56966 func tclvarColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 56967 bp := tls.Alloc(32) 56968 defer tls.Free(32) 56969 56970 var z1 uintptr 56971 var z2 uintptr = ts + 584 56972 var pCur uintptr = cur 56973 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 56974 56975 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+16) 56976 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2, bp+24) 56977 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 56978 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 56979 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 56980 } 56981 switch i { 56982 case 0: 56983 { 56984 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 56985 break 56986 56987 } 56988 case 1: 56989 { 56990 sqlite3.Xsqlite3_result_text(tls, ctx, z2, -1, libc.UintptrFromInt32(-1)) 56991 break 56992 56993 } 56994 case 2: 56995 { 56996 var pVal uintptr = tcl.XTcl_GetVar2Ex(tls, interp, z1, func() uintptr { 56997 if *(*int8)(unsafe.Pointer(z2)) != 0 { 56998 return z2 56999 } 57000 return uintptr(0) 57001 }(), TCL_GLOBAL_ONLY) 57002 sqlite3.Xsqlite3_result_text(tls, ctx, tcl.XTcl_GetString(tls, pVal), -1, libc.UintptrFromInt32(-1)) 57003 break 57004 57005 } 57006 case 3: 57007 { 57008 var z3 uintptr 57009 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 57010 z3 = sqlite3.Xsqlite3_mprintf(tls, ts+37569, libc.VaList(bp, z1, z2)) 57011 sqlite3.Xsqlite3_result_text(tls, ctx, z3, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 57012 } else { 57013 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 57014 } 57015 break 57016 57017 } 57018 } 57019 return SQLITE_OK 57020 } 57021 57022 func tclvarRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 57023 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 57024 return SQLITE_OK 57025 } 57026 57027 func tclvarEof(tls *libc.TLS, cur uintptr) int32 { 57028 var pCur uintptr = cur 57029 return func() int32 { 57030 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57031 return 0 57032 } 57033 return 1 57034 }() 57035 } 57036 57037 func tclvarAddToIdxstr(tls *libc.TLS, zStr uintptr, x int8) int32 { 57038 var i int32 57039 for i = 0; *(*int8)(unsafe.Pointer(zStr + uintptr(i))) != 0; i++ { 57040 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) == int32(x) { 57041 return 1 57042 } 57043 } 57044 *(*int8)(unsafe.Pointer(zStr + uintptr(i))) = x 57045 *(*int8)(unsafe.Pointer(zStr + uintptr(i+1))) = int8(0) 57046 return 0 57047 } 57048 57049 func tclvarSetOmit(tls *libc.TLS, interp uintptr) int32 { 57050 bp := tls.Alloc(4) 57051 defer tls.Free(4) 57052 57053 var rc int32 57054 *(*int32)(unsafe.Pointer(bp)) = 0 57055 var pRes uintptr 57056 rc = tcl.XTcl_Eval(tls, interp, 57057 ts+37576) 57058 if rc == TCL_OK { 57059 pRes = tcl.XTcl_GetObjResult(tls, interp) 57060 rc = tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), pRes, bp) 57061 } 57062 return libc.Bool32(rc == TCL_OK && *(*int32)(unsafe.Pointer(bp)) != 0) 57063 } 57064 57065 func tclvarBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 57066 var pTab uintptr = tab 57067 var ii int32 57068 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, 32) 57069 var iStr int32 = 0 57070 57071 if zStr == uintptr(0) { 57072 return SQLITE_NOMEM 57073 } 57074 *(*int8)(unsafe.Pointer(zStr)) = int8(0) 57075 57076 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 57077 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 57078 var pUsage uintptr 57079 57080 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 57081 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 { 57082 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 57083 if 0 == tclvarAddToIdxstr(tls, zStr, int8('e')) { 57084 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57085 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 57086 } 57087 } 57088 57089 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 57090 if 0 == tclvarAddToIdxstr(tls, zStr, int8('m')) { 57091 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57092 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 57093 } 57094 } 57095 57096 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_GLOB && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57097 if 0 == tclvarAddToIdxstr(tls, zStr, int8('g')) { 57098 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57099 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57100 } 57101 } 57102 57103 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_REGEXP && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57104 if 0 == tclvarAddToIdxstr(tls, zStr, int8('r')) { 57105 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57106 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57107 } 57108 } 57109 57110 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57111 if 0 == tclvarAddToIdxstr(tls, zStr, int8('l')) { 57112 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57113 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57114 } 57115 } 57116 } 57117 } 57118 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = zStr 57119 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 57120 57121 return SQLITE_OK 57122 } 57123 57124 func tclvarUpdate(tls *libc.TLS, tab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 57125 var pTab uintptr = tab 57126 if argc == 1 { 57127 var zVar uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 57128 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zVar, uintptr(0), TCL_GLOBAL_ONLY) 57129 return SQLITE_OK 57130 } 57131 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 57132 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 57133 var zName uintptr 57134 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) != SQLITE_TEXT { 57135 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37637, 0) 57136 return SQLITE_ERROR 57137 } 57138 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 57139 if zValue != 0 { 57140 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 57141 } else { 57142 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), TCL_GLOBAL_ONLY) 57143 } 57144 return SQLITE_OK 57145 } 57146 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_TEXT && 57147 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_TEXT { 57148 var zOldName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 57149 var zNewName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 57150 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 57151 57152 if libc.Xstrcmp(tls, zOldName, zNewName) != 0 || zValue == uintptr(0) { 57153 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zOldName, uintptr(0), TCL_GLOBAL_ONLY) 57154 } 57155 if zValue != uintptr(0) { 57156 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zNewName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 57157 } 57158 return SQLITE_OK 57159 } 57160 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37672, 0) 57161 return SQLITE_ERROR 57162 } 57163 57164 var tclvarModule = sqlite3_module{ 57165 FxCreate: 0, 57166 FxConnect: 0, 57167 FxBestIndex: 0, 57168 FxDisconnect: 0, 57169 FxDestroy: 0, 57170 FxOpen: 0, 57171 FxClose: 0, 57172 FxFilter: 0, 57173 FxNext: 0, 57174 FxEof: 0, 57175 FxColumn: 0, 57176 FxRowid: 0, 57177 FxUpdate: 0, 57178 } 57179 57180 func register_tclvar_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57181 bp := tls.Alloc(8) 57182 defer tls.Free(8) 57183 57184 var rc int32 = TCL_OK 57185 57186 if objc != 2 { 57187 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 57188 return TCL_ERROR 57189 } 57190 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 57191 return TCL_ERROR 57192 } 57193 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+29859, uintptr(unsafe.Pointer(&tclvarModule)), interp) 57194 rc = tcl.XTcl_Eval(tls, interp, 57195 ts+37703) 57196 return rc 57197 } 57198 57199 func Sqlitetesttclvar_Init(tls *libc.TLS, interp uintptr) int32 { 57200 var i int32 57201 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd13))/uint64(unsafe.Sizeof(struct { 57202 FzName uintptr 57203 FxProc uintptr 57204 FclientData uintptr 57205 }{})); i++ { 57206 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd13[i].FzName, 57207 aObjCmd13[i].FxProc, aObjCmd13[i].FclientData, uintptr(0)) 57208 } 57209 return TCL_OK 57210 } 57211 57212 var aObjCmd13 = [1]struct { 57213 FzName uintptr 57214 FxProc uintptr 57215 FclientData uintptr 57216 }{ 57217 {FzName: ts + 38239, FxProc: 0}, 57218 } 57219 57220 type SqlThread1 = struct { 57221 Fparent Tcl_ThreadId 57222 Finterp uintptr 57223 FzScript uintptr 57224 FzVarname uintptr 57225 } 57226 57227 type SqlThread = SqlThread1 57228 57229 type EvalEvent1 = struct { 57230 Fbase Tcl_Event 57231 FzScript uintptr 57232 Finterp uintptr 57233 } 57234 57235 type EvalEvent = EvalEvent1 57236 57237 func tclScriptEvent(tls *libc.TLS, evPtr uintptr, flags int32) int32 { 57238 var rc int32 57239 var p uintptr = evPtr 57240 rc = tcl.XTcl_Eval(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp, (*EvalEvent)(unsafe.Pointer(p)).FzScript) 57241 if rc != TCL_OK { 57242 tcl.XTcl_BackgroundError(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp) 57243 } 57244 _ = flags 57245 return 1 57246 } 57247 57248 func postToParent(tls *libc.TLS, p uintptr, pScript uintptr) { 57249 bp := tls.Alloc(4) 57250 defer tls.Free(4) 57251 57252 var pEvent uintptr 57253 var zMsg uintptr 57254 57255 zMsg = tcl.XTcl_GetStringFromObj(tls, pScript, bp) 57256 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp)))+uint64(1))) 57257 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 57258 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 57259 f func(*libc.TLS, uintptr, int32) int32 57260 }{tclScriptEvent})) 57261 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 57262 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp))+1)) 57263 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 57264 57265 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 57266 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 57267 } 57268 57269 func tclScriptThread(tls *libc.TLS, pSqlThread ClientData) { 57270 var interp uintptr 57271 var pRes uintptr 57272 var pList uintptr 57273 var rc int32 57274 var p uintptr = pSqlThread 57275 57276 interp = tcl.XTcl_CreateInterp(tls) 57277 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 57278 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57279 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 57280 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 57281 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57282 }{sqlthread_proc})), pSqlThread, uintptr(0)) 57283 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 57284 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57285 }{blocking_step_proc})), uintptr(0), uintptr(0)) 57286 tcl.XTcl_CreateObjCommand(tls, interp, 57287 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 57288 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57289 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 57290 tcl.XTcl_CreateObjCommand(tls, interp, 57291 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 57292 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57293 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 57294 Sqlitetest1_Init(tls, interp) 57295 Sqlitetest_mutex_Init(tls, interp) 57296 Sqlite3_Init(tls, interp) 57297 57298 rc = tcl.XTcl_Eval(tls, interp, (*SqlThread)(unsafe.Pointer(p)).FzScript) 57299 pRes = tcl.XTcl_GetObjResult(tls, interp) 57300 pList = tcl.XTcl_NewObj(tls) 57301 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 57302 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 57303 57304 if rc != TCL_OK { 57305 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+9674, -1)) 57306 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 57307 postToParent(tls, p, pList) 57308 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57309 var _objPtr uintptr = pList 57310 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57311 tcl.XTclFreeObj(tls, _objPtr) 57312 } 57313 } 57314 pList = tcl.XTcl_NewObj(tls) 57315 } 57316 57317 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+38367, -1)) 57318 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, (*SqlThread)(unsafe.Pointer(p)).FzVarname, -1)) 57319 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 57320 postToParent(tls, p, pList) 57321 57322 tcl.XTcl_Free(tls, p) 57323 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57324 var _objPtr uintptr = pList 57325 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57326 tcl.XTclFreeObj(tls, _objPtr) 57327 } 57328 } 57329 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 57330 var _objPtr uintptr = pRes 57331 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57332 tcl.XTclFreeObj(tls, _objPtr) 57333 } 57334 } 57335 tcl.XTcl_DeleteInterp(tls, interp) 57336 for tcl.XTcl_DoOneEvent(tls, libc.CplInt32(int32(1)<<1)|int32(1)<<1) != 0 { 57337 } 57338 tcl.XTcl_ExitThread(tls, 0) 57339 57340 } 57341 57342 func sqlthread_spawn(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57343 bp := tls.Alloc(32) 57344 defer tls.Free(32) 57345 57346 var pNew uintptr 57347 var rc int32 57348 57349 var zVarname uintptr 57350 57351 var zScript uintptr 57352 57353 var nStack int32 = 0 57354 var flags int32 = 0000 57355 57356 _ = clientData 57357 _ = objc 57358 57359 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 57360 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+20) 57361 57362 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlThread{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(*(*int32)(unsafe.Pointer(bp + 20)))+uint64(2))) 57363 (*SqlThread)(unsafe.Pointer(pNew)).FzVarname = pNew + 1*32 57364 (*SqlThread)(unsafe.Pointer(pNew)).FzScript = (*SqlThread)(unsafe.Pointer(pNew)).FzVarname + uintptr(*(*int32)(unsafe.Pointer(bp + 16))+1) 57365 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzVarname, zVarname, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 57366 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 20))+1)) 57367 (*SqlThread)(unsafe.Pointer(pNew)).Fparent = tcl.XTcl_GetCurrentThread(tls) 57368 (*SqlThread)(unsafe.Pointer(pNew)).Finterp = interp 57369 57370 rc = tcl.XTcl_CreateThread(tls, bp+24, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{tclScriptThread})), pNew, nStack, flags) 57371 if rc != TCL_OK { 57372 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38371, 0)) 57373 tcl.XTcl_Free(tls, pNew) 57374 return TCL_ERROR 57375 } 57376 57377 return TCL_OK 57378 } 57379 57380 func sqlthread_parent(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57381 bp := tls.Alloc(20) 57382 defer tls.Free(20) 57383 57384 var pEvent uintptr 57385 var zMsg uintptr 57386 57387 var p uintptr = clientData 57388 57389 _ = objc 57390 57391 if p == uintptr(0) { 57392 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38399, 0)) 57393 return TCL_ERROR 57394 } 57395 57396 zMsg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 57397 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(1))) 57398 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 57399 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 57400 f func(*libc.TLS, uintptr, int32) int32 57401 }{tclScriptEvent})) 57402 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 57403 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 57404 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 57405 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 57406 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 57407 57408 return TCL_OK 57409 } 57410 57411 func xBusy(tls *libc.TLS, pArg uintptr, nBusy int32) int32 { 57412 _ = pArg 57413 _ = nBusy 57414 sqlite3.Xsqlite3_sleep(tls, 50) 57415 return 1 57416 } 57417 57418 func sqlthread_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57419 bp := tls.Alloc(124) 57420 defer tls.Free(124) 57421 57422 var zFilename uintptr 57423 57424 _ = clientData 57425 _ = objc 57426 57427 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 57428 sqlite3.Xsqlite3_open(tls, zFilename, bp+16) 57429 Md5_Register(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), uintptr(0), uintptr(0)) 57430 sqlite3.Xsqlite3_busy_handler(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(&struct { 57431 f func(*libc.TLS, uintptr, int32) int32 57432 }{xBusy})), uintptr(0)) 57433 57434 if sqlite3TestMakePointerStr(tls, interp, bp+24, *(*uintptr)(unsafe.Pointer(bp + 16))) != 0 { 57435 return TCL_ERROR 57436 } 57437 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+24, 0)) 57438 57439 return TCL_OK 57440 } 57441 57442 func sqlthread_id(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57443 var id Tcl_ThreadId = tcl.XTcl_GetCurrentThread(tls) 57444 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(id))) 57445 _ = clientData 57446 _ = objc 57447 _ = objv 57448 return TCL_OK 57449 } 57450 57451 func sqlthread_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57452 bp := tls.Alloc(164) 57453 defer tls.Free(164) 57454 57455 *(*[5]struct { 57456 FzName uintptr 57457 FxProc uintptr 57458 FnArg int32 57459 F__ccgo_pad1 [4]byte 57460 FzUsage uintptr 57461 })(unsafe.Pointer(bp)) = [5]struct { 57462 FzName uintptr 57463 FxProc uintptr 57464 FnArg int32 57465 F__ccgo_pad1 [4]byte 57466 FzUsage uintptr 57467 }{ 57468 {FzName: ts + 38416, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 57469 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57470 }{sqlthread_parent})), FnArg: 1, FzUsage: ts + 10187}, 57471 {FzName: ts + 38423, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 57472 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57473 }{sqlthread_spawn})), FnArg: 2, FzUsage: ts + 38429}, 57474 {FzName: ts + 37033, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 57475 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57476 }{sqlthread_open})), FnArg: 1, FzUsage: ts + 38444}, 57477 {FzName: ts + 38451, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 57478 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57479 }{sqlthread_id})), FzUsage: ts + 584}, 57480 {}, 57481 } 57482 var pSub uintptr 57483 var rc int32 57484 57485 if objc < 2 { 57486 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 57487 return TCL_ERROR 57488 } 57489 57490 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 57491 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(struct { 57492 FzName uintptr 57493 FxProc uintptr 57494 FnArg int32 57495 F__ccgo_pad1 [4]byte 57496 FzUsage uintptr 57497 }{})), ts+2014, 0, bp+160) 57498 if rc != TCL_OK { 57499 return rc 57500 } 57501 pSub = bp + uintptr(*(*int32)(unsafe.Pointer(bp + 160)))*32 57502 57503 if objc < (*struct { 57504 FzName uintptr 57505 FxProc uintptr 57506 FnArg int32 57507 F__ccgo_pad1 [4]byte 57508 FzUsage uintptr 57509 })(unsafe.Pointer(pSub)).FnArg+2 { 57510 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*struct { 57511 FzName uintptr 57512 FxProc uintptr 57513 FnArg int32 57514 F__ccgo_pad1 [4]byte 57515 FzUsage uintptr 57516 })(unsafe.Pointer(pSub)).FzUsage) 57517 return TCL_ERROR 57518 } 57519 57520 return (*struct { 57521 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57522 })(unsafe.Pointer(&struct{ uintptr }{(*struct { 57523 FzName uintptr 57524 FxProc uintptr 57525 FnArg int32 57526 F__ccgo_pad1 [4]byte 57527 FzUsage uintptr 57528 })(unsafe.Pointer(pSub)).FxProc})).f(tls, clientData, interp, objc, objv) 57529 } 57530 57531 func clock_seconds_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57532 bp := tls.Alloc(16) 57533 defer tls.Free(16) 57534 57535 tcl.XTcl_GetTime(tls, bp) 57536 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32((*Tcl_Time)(unsafe.Pointer(bp)).Fsec))) 57537 _ = clientData 57538 _ = objc 57539 _ = objv 57540 return TCL_OK 57541 } 57542 57543 type UnlockNotification1 = struct { 57544 Ffired int32 57545 F__ccgo_pad1 [4]byte 57546 Fcond pthread_cond_t 57547 Fmutex pthread_mutex_t 57548 } 57549 57550 type UnlockNotification = UnlockNotification1 57551 57552 func unlock_notify_cb(tls *libc.TLS, apArg uintptr, nArg int32) { 57553 var i int32 57554 for i = 0; i < nArg; i++ { 57555 var p uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 57556 libc.Xpthread_mutex_lock(tls, p+16) 57557 (*UnlockNotification)(unsafe.Pointer(p)).Ffired = 1 57558 libc.Xpthread_cond_signal(tls, p+8) 57559 libc.Xpthread_mutex_unlock(tls, p+16) 57560 } 57561 } 57562 57563 func wait_for_unlock_notify(tls *libc.TLS, db uintptr) int32 { 57564 bp := tls.Alloc(24) 57565 defer tls.Free(24) 57566 57567 var rc int32 57568 57569 (*UnlockNotification)(unsafe.Pointer(bp)).Ffired = 0 57570 libc.Xpthread_mutex_init(tls, bp+16, uintptr(0)) 57571 libc.Xpthread_cond_init(tls, bp+8, uintptr(0)) 57572 57573 rc = sqlite3.Xsqlite3_unlock_notify(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 57574 f func(*libc.TLS, uintptr, int32) 57575 }{unlock_notify_cb})), bp) 57576 57577 if rc == SQLITE_OK { 57578 libc.Xpthread_mutex_lock(tls, bp+16) 57579 if !((*UnlockNotification)(unsafe.Pointer(bp)).Ffired != 0) { 57580 libc.Xpthread_cond_wait(tls, bp+8, bp+16) 57581 } 57582 libc.Xpthread_mutex_unlock(tls, bp+16) 57583 } 57584 57585 libc.Xpthread_cond_destroy(tls, bp+8) 57586 libc.Xpthread_mutex_destroy(tls, bp+16) 57587 57588 return rc 57589 } 57590 57591 func sqlite3_blocking_step(tls *libc.TLS, pStmt uintptr) int32 { 57592 var rc int32 57593 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt)) { 57594 rc = wait_for_unlock_notify(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt)) 57595 if rc != SQLITE_OK { 57596 break 57597 } 57598 sqlite3.Xsqlite3_reset(tls, pStmt) 57599 } 57600 return rc 57601 } 57602 57603 func sqlite3_blocking_prepare_v2(tls *libc.TLS, db uintptr, zSql uintptr, nSql int32, ppStmt uintptr, pz uintptr) int32 { 57604 var rc int32 57605 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, nSql, ppStmt, pz)) { 57606 rc = wait_for_unlock_notify(tls, db) 57607 if rc != SQLITE_OK { 57608 break 57609 } 57610 } 57611 return rc 57612 } 57613 57614 func blocking_step_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57615 var pStmt uintptr 57616 var rc int32 57617 57618 if objc != 2 { 57619 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 57620 return TCL_ERROR 57621 } 57622 57623 pStmt = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 57624 rc = sqlite3_blocking_step(tls, pStmt) 57625 57626 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 57627 return TCL_OK 57628 } 57629 57630 func blocking_prepare_v2_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57631 bp := tls.Alloc(162) 57632 defer tls.Free(162) 57633 57634 var zSql uintptr 57635 57636 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 57637 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 57638 57639 var rc int32 57640 var isBlocking int32 = libc.BoolInt32(!(clientData == uintptr(0))) 57641 57642 if objc != 5 && objc != 4 { 57643 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 57644 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 57645 return TCL_ERROR 57646 } 57647 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 57648 return TCL_ERROR 57649 } 57650 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 57651 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 57652 return TCL_ERROR 57653 } 57654 57655 if isBlocking != 0 { 57656 rc = sqlite3_blocking_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 57657 } else { 57658 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 57659 } 57660 57661 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 57662 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 57663 *(*int32)(unsafe.Pointer(bp + 88)) = int32(int64(*(*int32)(unsafe.Pointer(bp + 88))) - (int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 57664 } 57665 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) 57666 } 57667 if rc != SQLITE_OK { 57668 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+38454, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc))) 57669 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 57670 return TCL_ERROR 57671 } 57672 57673 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 57674 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 57675 return TCL_ERROR 57676 } 57677 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 57678 } 57679 return TCL_OK 57680 } 57681 57682 func SqlitetestThread_Init(tls *libc.TLS, interp uintptr) int32 { 57683 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 57684 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57685 }{sqlthread_proc})), uintptr(0), uintptr(0)) 57686 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 57687 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57688 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 57689 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 57690 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57691 }{blocking_step_proc})), uintptr(0), uintptr(0)) 57692 tcl.XTcl_CreateObjCommand(tls, interp, 57693 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 57694 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57695 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 57696 tcl.XTcl_CreateObjCommand(tls, interp, 57697 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 57698 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57699 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 57700 return TCL_OK 57701 } 57702 57703 func Sqlitetestvdbecov_Init(tls *libc.TLS, interp uintptr) int32 { 57704 return TCL_OK 57705 } 57706 57707 type Testvfs1 = struct { 57708 FzName uintptr 57709 FpParent uintptr 57710 FpVfs uintptr 57711 Finterp uintptr 57712 FpScript uintptr 57713 FpBuffer uintptr 57714 FisNoshm int32 57715 FisFullshm int32 57716 Fmask int32 57717 Fioerr_err TestFaultInject 57718 Ffull_err TestFaultInject 57719 Fcantopen_err TestFaultInject 57720 FiDevchar int32 57721 FiSectorsize int32 57722 } 57723 57724 type Testvfs = Testvfs1 57725 type TestvfsBuffer1 = struct { 57726 FzFile uintptr 57727 Fpgsz int32 57728 F__ccgo_pad1 [4]byte 57729 FaPage [1024]uintptr 57730 FpFile uintptr 57731 FpNext uintptr 57732 } 57733 57734 type TestvfsBuffer = TestvfsBuffer1 57735 type TestvfsFile1 = struct { 57736 Fbase sqlite3_file 57737 FpFd uintptr 57738 } 57739 57740 type TestvfsFile = TestvfsFile1 57741 type TestvfsFd1 = struct { 57742 FpVfs uintptr 57743 FzFilename uintptr 57744 FpReal uintptr 57745 FpShmId uintptr 57746 FpShm uintptr 57747 Fexcllock u32 57748 Fsharedlock u32 57749 FpNext uintptr 57750 } 57751 57752 type TestvfsFd = TestvfsFd1 57753 57754 type TestFaultInject1 = struct { 57755 FiCnt int32 57756 FeFault int32 57757 FnFail int32 57758 } 57759 57760 type TestFaultInject = TestFaultInject1 57761 57762 var tvfs_io_methods = sqlite3_io_methods{ 57763 FiVersion: 3, 57764 FxClose: 0, 57765 FxRead: 0, 57766 FxWrite: 0, 57767 FxTruncate: 0, 57768 FxSync: 0, 57769 FxFileSize: 0, 57770 FxLock: 0, 57771 FxUnlock: 0, 57772 FxCheckReservedLock: 0, 57773 FxFileControl: 0, 57774 FxSectorSize: 0, 57775 FxDeviceCharacteristics: 0, 57776 FxShmMap: 0, 57777 FxShmLock: 0, 57778 FxShmBarrier: 0, 57779 FxShmUnmap: 0, 57780 FxFetch: 0, 57781 FxUnfetch: 0, 57782 } 57783 57784 func tvfsResultCode(tls *libc.TLS, p uintptr, pRc uintptr) int32 { 57785 bp := tls.Alloc(144) 57786 defer tls.Free(144) 57787 57788 *(*[9]errcode)(unsafe.Pointer(bp)) = [9]errcode{ 57789 {FzCode: ts + 2127}, 57790 {FeCode: SQLITE_ERROR, FzCode: ts + 2114}, 57791 {FeCode: SQLITE_IOERR, FzCode: ts + 38458}, 57792 {FeCode: SQLITE_LOCKED, FzCode: ts + 38471}, 57793 {FeCode: SQLITE_BUSY, FzCode: ts + 38485}, 57794 {FeCode: SQLITE_READONLY, FzCode: ts + 38497}, 57795 {FeCode: SQLITE_READONLY | int32(5)<<8, FzCode: ts + 38513}, 57796 {FeCode: SQLITE_NOTFOUND, FzCode: ts + 38538}, 57797 {FeCode: -1, FzCode: ts + 38554}, 57798 } 57799 var z uintptr 57800 var i int32 57801 57802 z = tcl.XTcl_GetStringResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 57803 for i = 0; i < int32(uint64(unsafe.Sizeof([9]errcode{}))/uint64(unsafe.Sizeof(errcode{}))); i++ { 57804 if 0 == libc.Xstrcmp(tls, z, (*errcode)(unsafe.Pointer(bp+uintptr(i)*16)).FzCode) { 57805 *(*int32)(unsafe.Pointer(pRc)) = (*errcode)(unsafe.Pointer(bp + uintptr(i)*16)).FeCode 57806 return 1 57807 } 57808 } 57809 57810 return 0 57811 } 57812 57813 type errcode = struct { 57814 FeCode int32 57815 F__ccgo_pad1 [4]byte 57816 FzCode uintptr 57817 } 57818 57819 func tvfsInjectFault(tls *libc.TLS, p uintptr) int32 { 57820 var ret int32 = 0 57821 if (*TestFaultInject)(unsafe.Pointer(p)).FeFault != 0 { 57822 (*TestFaultInject)(unsafe.Pointer(p)).FiCnt-- 57823 if (*TestFaultInject)(unsafe.Pointer(p)).FiCnt == 0 || (*TestFaultInject)(unsafe.Pointer(p)).FiCnt < 0 && (*TestFaultInject)(unsafe.Pointer(p)).FeFault == FAULT_INJECT_PERSISTENT { 57824 ret = 1 57825 (*TestFaultInject)(unsafe.Pointer(p)).FnFail++ 57826 } 57827 } 57828 return ret 57829 } 57830 57831 func tvfsInjectIoerr(tls *libc.TLS, p uintptr) int32 { 57832 return tvfsInjectFault(tls, p+60) 57833 } 57834 57835 func tvfsInjectFullerr(tls *libc.TLS, p uintptr) int32 { 57836 return tvfsInjectFault(tls, p+72) 57837 } 57838 57839 func tvfsInjectCantopenerr(tls *libc.TLS, p uintptr) int32 { 57840 return tvfsInjectFault(tls, p+84) 57841 } 57842 57843 func tvfsExecTcl(tls *libc.TLS, p uintptr, zMethod uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr, arg4 uintptr) { 57844 var rc int32 57845 var pEval uintptr 57846 57847 pEval = tcl.XTcl_DuplicateObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 57848 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 57849 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zMethod, -1)) 57850 if arg1 != 0 { 57851 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg1) 57852 } 57853 if arg2 != 0 { 57854 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg2) 57855 } 57856 if arg3 != 0 { 57857 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg3) 57858 } 57859 if arg4 != 0 { 57860 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg4) 57861 } 57862 57863 rc = tcl.XTcl_EvalObjEx(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 57864 if rc != TCL_OK { 57865 tcl.XTcl_BackgroundError(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 57866 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 57867 } 57868 } 57869 57870 func tvfsClose(tls *libc.TLS, pFile uintptr) int32 { 57871 var pTestfile uintptr = pFile 57872 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd 57873 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57874 57875 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CLOSE_MASK != 0 { 57876 tvfsExecTcl(tls, p, ts+35556, 57877 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 57878 } 57879 57880 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId != 0 { 57881 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57882 var _objPtr uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId 57883 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57884 tcl.XTclFreeObj(tls, _objPtr) 57885 } 57886 } 57887 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 57888 } 57889 if (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods != 0 { 57890 tcl.XTcl_Free(tls, (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods) 57891 } 57892 sqlite3.Xsqlite3OsClose(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 57893 tcl.XTcl_Free(tls, pFd) 57894 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = uintptr(0) 57895 return SQLITE_OK 57896 } 57897 57898 func tvfsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 57899 bp := tls.Alloc(4) 57900 defer tls.Free(4) 57901 57902 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 57903 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57904 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57905 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 { 57906 tvfsExecTcl(tls, p, ts+35563, 57907 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 57908 tvfsResultCode(tls, p, bp) 57909 } 57910 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 57911 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 57912 } 57913 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 57914 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsRead(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 57915 } 57916 return *(*int32)(unsafe.Pointer(bp)) 57917 } 57918 57919 func tvfsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 57920 bp := tls.Alloc(4) 57921 defer tls.Free(4) 57922 57923 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 57924 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57925 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57926 57927 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 { 57928 tvfsExecTcl(tls, p, ts+35569, 57929 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 57930 tcl.XTcl_NewWideIntObj(tls, iOfst), tcl.XTcl_NewIntObj(tls, iAmt)) 57931 tvfsResultCode(tls, p, bp) 57932 if *(*int32)(unsafe.Pointer(bp)) < 0 { 57933 return SQLITE_OK 57934 } 57935 } 57936 57937 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 57938 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 57939 } 57940 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 57941 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 57942 } 57943 57944 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 57945 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsWrite(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 57946 } 57947 return *(*int32)(unsafe.Pointer(bp)) 57948 } 57949 57950 func tvfsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 57951 bp := tls.Alloc(4) 57952 defer tls.Free(4) 57953 57954 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 57955 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57956 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57957 57958 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_TRUNCATE_MASK != 0 { 57959 tvfsExecTcl(tls, p, ts+35576, 57960 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 57961 tvfsResultCode(tls, p, bp) 57962 } 57963 57964 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 57965 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsTruncate(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, size) 57966 } 57967 return *(*int32)(unsafe.Pointer(bp)) 57968 } 57969 57970 func tvfsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 57971 bp := tls.Alloc(4) 57972 defer tls.Free(4) 57973 57974 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 57975 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 57976 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 57977 57978 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SYNC_MASK != 0 { 57979 var zFlags uintptr = uintptr(0) 57980 57981 switch flags { 57982 case SQLITE_SYNC_NORMAL: 57983 zFlags = ts + 16397 57984 break 57985 fallthrough 57986 case SQLITE_SYNC_FULL: 57987 zFlags = ts + 18291 57988 break 57989 fallthrough 57990 case SQLITE_SYNC_NORMAL | SQLITE_SYNC_DATAONLY: 57991 zFlags = ts + 38566 57992 break 57993 fallthrough 57994 case SQLITE_SYNC_FULL | SQLITE_SYNC_DATAONLY: 57995 zFlags = ts + 38582 57996 break 57997 fallthrough 57998 default: 57999 } 58000 58001 tvfsExecTcl(tls, p, ts+27843, 58002 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58003 tcl.XTcl_NewStringObj(tls, zFlags, -1), uintptr(0)) 58004 tvfsResultCode(tls, p, bp) 58005 } 58006 58007 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 58008 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 58009 } 58010 58011 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58012 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsSync(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, flags) 58013 } 58014 58015 return *(*int32)(unsafe.Pointer(bp)) 58016 } 58017 58018 func tvfsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 58019 var p uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58020 return sqlite3.Xsqlite3OsFileSize(tls, (*TestvfsFd)(unsafe.Pointer(p)).FpReal, pSize) 58021 } 58022 58023 func tvfsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58024 bp := tls.Alloc(38) 58025 defer tls.Free(38) 58026 58027 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58028 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58029 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_LOCK_MASK != 0 { 58030 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58031 tvfsExecTcl(tls, p, ts+35596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58032 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58033 } 58034 return sqlite3.Xsqlite3OsLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58035 } 58036 58037 func tvfsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58038 bp := tls.Alloc(38) 58039 defer tls.Free(38) 58040 58041 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58042 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58043 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_UNLOCK_MASK != 0 { 58044 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58045 tvfsExecTcl(tls, p, ts+35602, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58046 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58047 } 58048 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58049 return SQLITE_IOERR | int32(8)<<8 58050 } 58051 return sqlite3.Xsqlite3OsUnlock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58052 } 58053 58054 func tvfsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 58055 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58056 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58057 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CKLOCK_MASK != 0 { 58058 tvfsExecTcl(tls, p, ts+38596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58059 uintptr(0), uintptr(0), uintptr(0)) 58060 } 58061 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, pResOut) 58062 } 58063 58064 func tvfsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 58065 bp := tls.Alloc(68) 58066 defer tls.Free(68) 58067 58068 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58069 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58070 if op == SQLITE_FCNTL_PRAGMA { 58071 var argv uintptr = pArg 58072 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+9674) == 0 { 58073 var rc int32 = SQLITE_ERROR 58074 if *(*uintptr)(unsafe.Pointer(argv + 2*8)) != 0 { 58075 var z uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 58076 var x int32 = libc.Xatoi(tls, z) 58077 if x != 0 { 58078 rc = x 58079 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 58080 z++ 58081 } 58082 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x01 != 0 { 58083 z++ 58084 } 58085 } 58086 if *(*int8)(unsafe.Pointer(z)) != 0 { 58087 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, z)) 58088 } 58089 } 58090 return rc 58091 } 58092 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4794) == 0 { 58093 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 58094 return SQLITE_OK 58095 } 58096 } 58097 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FCNTL_MASK != 0 { 58098 *(*[3]Fcntl)(unsafe.Pointer(bp + 16)) = [3]Fcntl{ 58099 {FiFnctl: SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, FzFnctl: ts + 38615}, 58100 {FiFnctl: SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, FzFnctl: ts + 38634}, 58101 {FiFnctl: SQLITE_FCNTL_ZIPVFS, FzFnctl: ts + 38654}, 58102 } 58103 var i int32 58104 for i = 0; uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})); i++ { 58105 if op == (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FiFnctl { 58106 break 58107 } 58108 } 58109 if uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})) { 58110 *(*int32)(unsafe.Pointer(bp + 64)) = 0 58111 tvfsExecTcl(tls, p, ts+35624, 58112 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58113 tcl.XTcl_NewStringObj(tls, (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FzFnctl, -1), 58114 uintptr(0), uintptr(0)) 58115 tvfsResultCode(tls, p, bp+64) 58116 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 58117 return func() int32 { 58118 if *(*int32)(unsafe.Pointer(bp + 64)) < 0 { 58119 return SQLITE_OK 58120 } 58121 return *(*int32)(unsafe.Pointer(bp + 64)) 58122 }() 58123 } 58124 } 58125 } 58126 return sqlite3.Xsqlite3OsFileControl(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, op, pArg) 58127 } 58128 58129 type Fcntl = struct { 58130 FiFnctl int32 58131 F__ccgo_pad1 [4]byte 58132 FzFnctl uintptr 58133 } 58134 58135 func tvfsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 58136 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58137 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58138 if (*Testvfs)(unsafe.Pointer(p)).FiSectorsize >= 0 { 58139 return (*Testvfs)(unsafe.Pointer(p)).FiSectorsize 58140 } 58141 return sqlite3.Xsqlite3OsSectorSize(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58142 } 58143 58144 func tvfsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 58145 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58146 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58147 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar >= 0 { 58148 return (*Testvfs)(unsafe.Pointer(p)).FiDevchar 58149 } 58150 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58151 } 58152 58153 func tvfsOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 58154 bp := tls.Alloc(4) 58155 defer tls.Free(4) 58156 58157 var pTestfile uintptr = pFile 58158 var pFd uintptr 58159 var pId uintptr = uintptr(0) 58160 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58161 58162 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))) 58163 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)) 58164 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 58165 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 58166 (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename = zName 58167 (*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs = pVfs 58168 (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal = pFd + 1*56 58169 libc.Xmemset(tls, pTestfile, 0, uint64(unsafe.Sizeof(TestvfsFile{}))) 58170 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = pFd 58171 58172 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58173 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 { 58174 var pArg uintptr = tcl.XTcl_NewObj(tls) 58175 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 58176 if flags&SQLITE_OPEN_MAIN_DB != 0 { 58177 var z uintptr = zName + uintptr(libc.Xstrlen(tls, zName)+uint64(1)) 58178 for *(*int8)(unsafe.Pointer(z)) != 0 { 58179 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 58180 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 58181 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 58182 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 58183 } 58184 } 58185 tvfsExecTcl(tls, p, ts+27421, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), pArg, uintptr(0), uintptr(0)) 58186 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58187 var _objPtr uintptr = pArg 58188 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58189 tcl.XTclFreeObj(tls, _objPtr) 58190 } 58191 } 58192 if tvfsResultCode(tls, p, bp) != 0 { 58193 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58194 return *(*int32)(unsafe.Pointer(bp)) 58195 } 58196 } else { 58197 pId = tcl.XTcl_GetObjResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58198 } 58199 } 58200 58201 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58202 return SQLITE_IOERR 58203 } 58204 if tvfsInjectCantopenerr(tls, p) != 0 { 58205 return SQLITE_CANTOPEN 58206 } 58207 if tvfsInjectFullerr(tls, p) != 0 { 58208 return SQLITE_FULL 58209 } 58210 58211 if !(pId != 0) { 58212 pId = tcl.XTcl_NewStringObj(tls, ts+38661, -1) 58213 } 58214 (*Tcl_Obj)(unsafe.Pointer(pId)).FrefCount++ 58215 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = pId 58216 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58217 58218 *(*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) 58219 if (*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods != 0 { 58220 var pMethods uintptr 58221 var nByte int32 58222 58223 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 { 58224 nByte = int32(unsafe.Sizeof(sqlite3_io_methods{})) 58225 } else { 58226 nByte = int32(uintptr(0) + 104) 58227 } 58228 58229 pMethods = tcl.XTcl_Alloc(tls, uint32(nByte)) 58230 libc.Xmemcpy(tls, pMethods, uintptr(unsafe.Pointer(&tvfs_io_methods)), uint64(nByte)) 58231 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods)).FiVersion 58232 if (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion > (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion { 58233 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion 58234 } 58235 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 && (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FisNoshm != 0 { 58236 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmUnmap = uintptr(0) 58237 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmLock = uintptr(0) 58238 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmBarrier = uintptr(0) 58239 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmMap = uintptr(0) 58240 } 58241 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = pMethods 58242 } 58243 58244 return *(*int32)(unsafe.Pointer(bp)) 58245 } 58246 58247 func tvfsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 58248 bp := tls.Alloc(4) 58249 defer tls.Free(4) 58250 58251 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58252 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58253 58254 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_DELETE_MASK != 0 { 58255 tvfsExecTcl(tls, p, ts+35661, 58256 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewIntObj(tls, dirSync), uintptr(0), uintptr(0)) 58257 tvfsResultCode(tls, p, bp) 58258 } 58259 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58260 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsDelete(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, dirSync) 58261 } 58262 return *(*int32)(unsafe.Pointer(bp)) 58263 } 58264 58265 func tvfsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 58266 bp := tls.Alloc(4) 58267 defer tls.Free(4) 58268 58269 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58270 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_ACCESS_MASK != 0 { 58271 var zArg uintptr = uintptr(0) 58272 if flags == SQLITE_ACCESS_EXISTS { 58273 zArg = ts + 38666 58274 } 58275 if flags == SQLITE_ACCESS_READWRITE { 58276 zArg = ts + 38687 58277 } 58278 if flags == SQLITE_ACCESS_READ { 58279 zArg = ts + 38711 58280 } 58281 tvfsExecTcl(tls, p, ts+35669, 58282 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewStringObj(tls, zArg, -1), uintptr(0), uintptr(0)) 58283 if tvfsResultCode(tls, p, bp) != 0 { 58284 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58285 return *(*int32)(unsafe.Pointer(bp)) 58286 } 58287 } else { 58288 var interp uintptr = (*Testvfs)(unsafe.Pointer(p)).Finterp 58289 if TCL_OK == tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, interp), pResOut) { 58290 return SQLITE_OK 58291 } 58292 } 58293 } 58294 return sqlite3.Xsqlite3OsAccess(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, flags, pResOut) 58295 } 58296 58297 func tvfsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 58298 bp := tls.Alloc(4) 58299 defer tls.Free(4) 58300 58301 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58302 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FULLPATHNAME_MASK != 0 { 58303 tvfsExecTcl(tls, p, ts+35677, tcl.XTcl_NewStringObj(tls, zPath, -1), uintptr(0), uintptr(0), uintptr(0)) 58304 if tvfsResultCode(tls, p, bp) != 0 { 58305 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58306 return *(*int32)(unsafe.Pointer(bp)) 58307 } 58308 } 58309 } 58310 return sqlite3.Xsqlite3OsFullPathname(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, nOut, zOut) 58311 } 58312 58313 func tvfsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 58314 return sqlite3.Xsqlite3OsRandomness(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nByte, zBufOut) 58315 } 58316 58317 func tvfsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 58318 return sqlite3.Xsqlite3OsSleep(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nMicro) 58319 } 58320 58321 func tvfsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 58322 return (*struct { 58323 f func(*libc.TLS, uintptr, uintptr) int32 58324 })(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) 58325 } 58326 58327 func tvfsShmOpen(tls *libc.TLS, pFile uintptr) int32 { 58328 bp := tls.Alloc(4) 58329 defer tls.Free(4) 58330 58331 var p uintptr 58332 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58333 var pBuffer uintptr 58334 var pFd uintptr 58335 58336 pFd = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58337 p = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58338 58339 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58340 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 { 58341 tvfsExecTcl(tls, p, ts+38730, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), uintptr(0), uintptr(0), uintptr(0)) 58342 if tvfsResultCode(tls, p, bp) != 0 { 58343 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58344 return *(*int32)(unsafe.Pointer(bp)) 58345 } 58346 } 58347 } 58348 58349 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58350 return SQLITE_IOERR 58351 } 58352 58353 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 58354 if 0 == libc.Xstrcmp(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile) { 58355 break 58356 } 58357 } 58358 if !(pBuffer != 0) { 58359 var szName int32 = int32(libc.Xstrlen(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 58360 var nByte int32 = int32(uint64(unsafe.Sizeof(TestvfsBuffer{})) + uint64(szName) + uint64(1)) 58361 pBuffer = tcl.XTcl_Alloc(tls, uint32(nByte)) 58362 libc.Xmemset(tls, pBuffer, 0, uint64(nByte)) 58363 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile = pBuffer + 1*8224 58364 libc.Xmemcpy(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, uint64(szName+1)) 58365 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext = (*Testvfs)(unsafe.Pointer(p)).FpBuffer 58366 (*Testvfs)(unsafe.Pointer(p)).FpBuffer = pBuffer 58367 } 58368 58369 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile 58370 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile = pFd 58371 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = pBuffer 58372 return *(*int32)(unsafe.Pointer(bp)) 58373 } 58374 58375 func tvfsAllocPage(tls *libc.TLS, p uintptr, iPage int32, pgsz int32) { 58376 if *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) == uintptr(0) { 58377 *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) = tcl.XTcl_Alloc(tls, uint32(pgsz)) 58378 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)), 0, uint64(pgsz)) 58379 (*TestvfsBuffer)(unsafe.Pointer(p)).Fpgsz = pgsz 58380 } 58381 } 58382 58383 func tvfsShmMap(tls *libc.TLS, pFile uintptr, iPage int32, pgsz int32, isWrite int32, pp uintptr) int32 { 58384 bp := tls.Alloc(4) 58385 defer tls.Free(4) 58386 58387 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58388 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58389 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58390 58391 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58392 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58393 return (*struct { 58394 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 58395 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iPage, pgsz, isWrite, pp) 58396 } 58397 58398 if uintptr(0) == (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm { 58399 *(*int32)(unsafe.Pointer(bp)) = tvfsShmOpen(tls, pFile) 58400 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58401 return *(*int32)(unsafe.Pointer(bp)) 58402 } 58403 } 58404 58405 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 { 58406 var pArg uintptr = tcl.XTcl_NewObj(tls) 58407 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 58408 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, iPage)) 58409 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, pgsz)) 58410 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, isWrite)) 58411 tvfsExecTcl(tls, p, ts+35754, 58412 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, pArg, uintptr(0)) 58413 tvfsResultCode(tls, p, bp) 58414 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58415 var _objPtr uintptr = pArg 58416 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58417 tcl.XTclFreeObj(tls, _objPtr) 58418 } 58419 } 58420 } 58421 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58422 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58423 } 58424 58425 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && isWrite != 0 && !(int32(*(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8))) != 0) { 58426 tvfsAllocPage(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm, iPage, pgsz) 58427 } 58428 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK || *(*int32)(unsafe.Pointer(bp)) == SQLITE_READONLY { 58429 *(*uintptr)(unsafe.Pointer(pp)) = *(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8)) 58430 } 58431 58432 return *(*int32)(unsafe.Pointer(bp)) 58433 } 58434 58435 func tvfsShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 58436 bp := tls.Alloc(100) 58437 defer tls.Free(100) 58438 58439 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 58440 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58441 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58442 var nLock int32 58443 58444 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58445 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58446 return (*struct { 58447 f func(*libc.TLS, uintptr, int32, int32, int32) int32 58448 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 58449 } 58450 58451 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 { 58452 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+16, ts+17826, libc.VaList(bp, ofst, n)) 58453 nLock = int32(libc.Xstrlen(tls, bp+16)) 58454 if flags&SQLITE_SHM_LOCK != 0 { 58455 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38739) 58456 } else { 58457 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38745) 58458 } 58459 nLock = nLock + int32(libc.Xstrlen(tls, bp+16+uintptr(nLock))) 58460 if flags&SQLITE_SHM_SHARED != 0 { 58461 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38753) 58462 } else { 58463 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38761) 58464 } 58465 tvfsExecTcl(tls, p, ts+35733, 58466 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58467 tcl.XTcl_NewStringObj(tls, bp+16, -1), uintptr(0)) 58468 tvfsResultCode(tls, p, bp+96) 58469 } 58470 58471 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58472 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_IOERR 58473 } 58474 58475 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 58476 var isLock int32 = flags & SQLITE_SHM_LOCK 58477 var isExcl int32 = flags & SQLITE_SHM_EXCLUSIVE 58478 var mask u32 = u32((int32(1)<<n - 1) << ofst) 58479 if isLock != 0 { 58480 var p2 uintptr 58481 for p2 = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FpFile; p2 != 0; p2 = (*TestvfsFd)(unsafe.Pointer(p2)).FpNext { 58482 if p2 == pFd { 58483 continue 58484 } 58485 if (*TestvfsFd)(unsafe.Pointer(p2)).Fexcllock&mask != 0 || isExcl != 0 && (*TestvfsFd)(unsafe.Pointer(p2)).Fsharedlock&mask != 0 { 58486 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_BUSY 58487 break 58488 } 58489 } 58490 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 58491 if isExcl != 0 { 58492 *(*u32)(unsafe.Pointer(pFd + 40)) |= mask 58493 } 58494 if !(isExcl != 0) { 58495 *(*u32)(unsafe.Pointer(pFd + 44)) |= mask 58496 } 58497 } 58498 } else { 58499 if isExcl != 0 { 58500 *(*u32)(unsafe.Pointer(pFd + 40)) &= ^mask 58501 } 58502 if !(isExcl != 0) { 58503 *(*u32)(unsafe.Pointer(pFd + 44)) &= ^mask 58504 } 58505 } 58506 } 58507 58508 return *(*int32)(unsafe.Pointer(bp + 96)) 58509 } 58510 58511 func tvfsShmBarrier(tls *libc.TLS, pFile uintptr) { 58512 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58513 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58514 58515 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMBARRIER_MASK != 0 { 58516 var z uintptr 58517 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm != 0 { 58518 z = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile 58519 } else { 58520 z = ts + 584 58521 } 58522 tvfsExecTcl(tls, p, ts+35742, tcl.XTcl_NewStringObj(tls, z, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58523 } 58524 58525 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58526 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58527 (*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) 58528 return 58529 } 58530 } 58531 58532 func tvfsShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 58533 bp := tls.Alloc(4) 58534 defer tls.Free(4) 58535 58536 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58537 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58538 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58539 var pBuffer uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm 58540 var ppFd uintptr 58541 58542 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 58543 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 58544 return (*struct { 58545 f func(*libc.TLS, uintptr, int32) int32 58546 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, deleteFlag) 58547 } 58548 58549 if !(pBuffer != 0) { 58550 return SQLITE_OK 58551 } 58552 58553 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMCLOSE_MASK != 0 { 58554 tvfsExecTcl(tls, p, ts+35723, 58555 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58556 tvfsResultCode(tls, p, bp) 58557 } 58558 58559 for ppFd = pBuffer + 8208; *(*uintptr)(unsafe.Pointer(ppFd)) != pFd; ppFd = *(*uintptr)(unsafe.Pointer(ppFd)) + 48 { 58560 } 58561 58562 *(*uintptr)(unsafe.Pointer(ppFd)) = (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext 58563 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = uintptr(0) 58564 58565 if (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile == uintptr(0) { 58566 var i int32 58567 var pp uintptr 58568 for pp = p + 40; *(*uintptr)(unsafe.Pointer(pp)) != pBuffer; pp = *(*uintptr)(unsafe.Pointer(pp)) + 8216 { 58569 } 58570 *(*uintptr)(unsafe.Pointer(pp)) = (*TestvfsBuffer)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNext 58571 for i = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8)) != 0; i++ { 58572 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8))) 58573 } 58574 tcl.XTcl_Free(tls, pBuffer) 58575 } 58576 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 58577 58578 return *(*int32)(unsafe.Pointer(bp)) 58579 } 58580 58581 func tvfsFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 58582 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58583 return sqlite3.Xsqlite3OsFetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, iAmt, pp) 58584 } 58585 58586 func tvfsUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, p uintptr) int32 { 58587 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58588 return sqlite3.Xsqlite3OsUnfetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, p) 58589 } 58590 58591 func testvfs_obj_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58592 bp := tls.Alloc(568) 58593 defer tls.Free(568) 58594 58595 var p uintptr = cd 58596 *(*[10]TestvfsSubcmd)(unsafe.Pointer(bp + 96)) = [10]TestvfsSubcmd{ 58597 {FzName: ts + 38772}, 58598 {FzName: ts + 10138, FeCmd: uint32(1)}, 58599 {FzName: ts + 38776, FeCmd: uint32(2)}, 58600 {FzName: ts + 38783, FeCmd: uint32(3)}, 58601 {FzName: ts + 38789, FeCmd: uint32(7)}, 58602 {FzName: ts + 38797, FeCmd: uint32(8)}, 58603 {FzName: ts + 38809, FeCmd: uint32(4)}, 58604 {FzName: ts + 38816, FeCmd: uint32(5)}, 58605 {FzName: ts + 38824, FeCmd: uint32(6)}, 58606 {}, 58607 } 58608 58609 if objc < 2 { 58610 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 58611 return TCL_ERROR 58612 } 58613 if tcl.XTcl_GetIndexFromObjStruct(tls, 58614 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+96, int32(unsafe.Sizeof(TestvfsSubcmd{})), ts+38835, 0, bp+256) != 0 { 58615 return TCL_ERROR 58616 } 58617 tcl.XTcl_ResetResult(tls, interp) 58618 58619 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 58620 case uint32(0): 58621 { 58622 var pObj uintptr 58623 var rc int32 58624 var pBuffer uintptr 58625 var zName uintptr 58626 if objc != 3 && objc != 4 { 58627 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38846) 58628 return TCL_ERROR 58629 } 58630 zName = tcl.XTcl_Alloc(tls, uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname)) 58631 rc = (*struct { 58632 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58633 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FxFullPathname})).f(tls, 58634 (*Testvfs)(unsafe.Pointer(p)).FpParent, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 58635 (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname, zName) 58636 if rc != SQLITE_OK { 58637 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38859, 58638 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 58639 tcl.XTcl_Free(tls, zName) 58640 return TCL_ERROR 58641 } 58642 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 58643 if 0 == libc.Xstrcmp(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, zName) { 58644 break 58645 } 58646 } 58647 tcl.XTcl_Free(tls, zName) 58648 if !(pBuffer != 0) { 58649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+38885, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 58650 return TCL_ERROR 58651 } 58652 if objc == 4 { 58653 var a uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+260) 58654 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 58655 if pgsz == 0 { 58656 pgsz = 65536 58657 } 58658 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256))*pgsz < *(*int32)(unsafe.Pointer(bp + 260)); *(*int32)(unsafe.Pointer(bp + 256))++ { 58659 var nByte int32 = pgsz 58660 tvfsAllocPage(tls, pBuffer, *(*int32)(unsafe.Pointer(bp + 256)), pgsz) 58661 if *(*int32)(unsafe.Pointer(bp + 260))-*(*int32)(unsafe.Pointer(bp + 256))*pgsz < pgsz { 58662 nByte = *(*int32)(unsafe.Pointer(bp + 260)) 58663 } 58664 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)) 58665 } 58666 } 58667 58668 pObj = tcl.XTcl_NewObj(tls) 58669 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))++ { 58670 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 58671 if pgsz == 0 { 58672 pgsz = 65536 58673 } 58674 tcl.XTcl_AppendObjToObj(tls, pObj, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), pgsz)) 58675 } 58676 tcl.XTcl_SetObjResult(tls, interp, pObj) 58677 break 58678 58679 } 58680 58681 case uint32(2): 58682 { 58683 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 58684 *(*int32)(unsafe.Pointer(bp + 264)) = 0 58685 var mask int32 = 0 58686 if objc != 3 { 58687 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+32419) 58688 return TCL_ERROR 58689 } 58690 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+264, bp+272) != 0 { 58691 return TCL_ERROR 58692 } 58693 tcl.XTcl_ResetResult(tls, interp) 58694 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256)) < *(*int32)(unsafe.Pointer(bp + 264)); *(*int32)(unsafe.Pointer(bp + 256))++ { 58695 var iMethod int32 58696 var zElem uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 272)) + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8))) 58697 for iMethod = 0; iMethod < int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))); iMethod++ { 58698 if libc.Xstrcmp(tls, zElem, vfsmethod[iMethod].FzName) == 0 { 58699 mask = mask | vfsmethod[iMethod].Fmask 58700 break 58701 } 58702 } 58703 if iMethod == int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))) { 58704 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+38900, zElem, 0)) 58705 return TCL_ERROR 58706 } 58707 } 58708 (*Testvfs)(unsafe.Pointer(p)).Fmask = mask 58709 break 58710 58711 } 58712 58713 case uint32(4): 58714 { 58715 if objc == 3 { 58716 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 58717 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58718 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 58719 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58720 tcl.XTclFreeObj(tls, _objPtr) 58721 } 58722 } 58723 (*Testvfs)(unsafe.Pointer(p)).FpScript = uintptr(0) 58724 } 58725 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+280) 58726 if *(*int32)(unsafe.Pointer(bp + 280)) > 0 { 58727 (*Testvfs)(unsafe.Pointer(p)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58728 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 58729 } 58730 } else if objc != 2 { 58731 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 58732 return TCL_ERROR 58733 } 58734 58735 tcl.XTcl_ResetResult(tls, interp) 58736 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 58737 tcl.XTcl_SetObjResult(tls, interp, (*Testvfs)(unsafe.Pointer(p)).FpScript) 58738 } 58739 58740 break 58741 58742 } 58743 58744 case uint32(8): 58745 fallthrough 58746 case uint32(3): 58747 fallthrough 58748 case uint32(7): 58749 { 58750 var pTest uintptr = uintptr(0) 58751 var iRet int32 58752 58753 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 58754 case uint32(3): 58755 pTest = p + 60 58756 break 58757 case uint32(7): 58758 pTest = p + 72 58759 break 58760 case uint32(8): 58761 pTest = p + 84 58762 break 58763 default: 58764 } 58765 iRet = (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail 58766 (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail = 0 58767 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = 0 58768 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = 0 58769 58770 if objc == 4 { 58771 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+284) || 58772 TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+288) { 58773 return TCL_ERROR 58774 } 58775 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = func() int32 { 58776 if *(*int32)(unsafe.Pointer(bp + 288)) != 0 { 58777 return FAULT_INJECT_PERSISTENT 58778 } 58779 return FAULT_INJECT_TRANSIENT 58780 }() 58781 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = *(*int32)(unsafe.Pointer(bp + 284)) 58782 } else if objc != 2 { 58783 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38917) 58784 return TCL_ERROR 58785 } 58786 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iRet)) 58787 break 58788 58789 } 58790 58791 case uint32(1): 58792 { 58793 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 58794 break 58795 58796 } 58797 58798 case uint32(5): 58799 { 58800 *(*[16]DeviceFlag)(unsafe.Pointer(bp + 304)) = [16]DeviceFlag{ 58801 {FzName: ts + 38931, FiValue: -1}, 58802 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 58803 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 58804 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 58805 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 58806 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 58807 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 58808 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 58809 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 58810 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 58811 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 58812 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 58813 {FzName: ts + 38939, FiValue: SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN}, 58814 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 58815 {FzName: ts + 38961, FiValue: SQLITE_IOCAP_IMMUTABLE}, 58816 {}, 58817 } 58818 var pRet uintptr 58819 var iFlag int32 58820 58821 if objc > 3 { 58822 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38971) 58823 return TCL_ERROR 58824 } 58825 if objc == 3 { 58826 var j int32 58827 var iNew int32 = 0 58828 *(*uintptr)(unsafe.Pointer(bp + 296)) = uintptr(0) 58829 *(*int32)(unsafe.Pointer(bp + 292)) = 0 58830 58831 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+292, bp+296) != 0 { 58832 return TCL_ERROR 58833 } 58834 58835 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 292)); j++ { 58836 *(*int32)(unsafe.Pointer(bp + 560)) = 0 58837 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(j)*8)), bp+304, 58838 int32(unsafe.Sizeof(DeviceFlag{})), ts+17631, 0, bp+560) != 0 { 58839 return TCL_ERROR 58840 } 58841 if (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue < 0 && *(*int32)(unsafe.Pointer(bp + 292)) > 1 { 58842 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+38983, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 58843 return TCL_ERROR 58844 } 58845 iNew = iNew | (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue 58846 } 58847 58848 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = iNew | 0x10000000 58849 } 58850 58851 pRet = tcl.XTcl_NewObj(tls) 58852 for iFlag = 0; uint64(iFlag) < uint64(unsafe.Sizeof([16]DeviceFlag{}))/uint64(unsafe.Sizeof(DeviceFlag{})); iFlag++ { 58853 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar&(*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FiValue != 0 { 58854 tcl.XTcl_ListObjAppendElement(tls, 58855 interp, pRet, tcl.XTcl_NewStringObj(tls, (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FzName, -1)) 58856 } 58857 } 58858 tcl.XTcl_SetObjResult(tls, interp, pRet) 58859 58860 break 58861 58862 } 58863 58864 case uint32(6): 58865 { 58866 if objc > 3 { 58867 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38995) 58868 return TCL_ERROR 58869 } 58870 if objc == 3 { 58871 *(*int32)(unsafe.Pointer(bp + 564)) = 0 58872 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+564) != 0 { 58873 return TCL_ERROR 58874 } 58875 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = *(*int32)(unsafe.Pointer(bp + 564)) 58876 } 58877 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*Testvfs)(unsafe.Pointer(p)).FiSectorsize)) 58878 break 58879 58880 } 58881 } 58882 58883 return TCL_OK 58884 } 58885 58886 type TestvfsSubcmd = struct { 58887 FzName uintptr 58888 FeCmd uint32 58889 F__ccgo_pad1 [4]byte 58890 } 58891 58892 type VfsMethod = struct { 58893 FzName uintptr 58894 Fmask int32 58895 F__ccgo_pad1 [4]byte 58896 } 58897 58898 var vfsmethod = [18]VfsMethod{ 58899 {FzName: ts + 38730, Fmask: TESTVFS_SHMOPEN_MASK}, 58900 {FzName: ts + 35733, Fmask: TESTVFS_SHMLOCK_MASK}, 58901 {FzName: ts + 35742, Fmask: TESTVFS_SHMBARRIER_MASK}, 58902 {FzName: ts + 35723, Fmask: TESTVFS_SHMCLOSE_MASK}, 58903 {FzName: ts + 35754, Fmask: TESTVFS_SHMMAP_MASK}, 58904 {FzName: ts + 27843, Fmask: TESTVFS_SYNC_MASK}, 58905 {FzName: ts + 35661, Fmask: TESTVFS_DELETE_MASK}, 58906 {FzName: ts + 35569, Fmask: TESTVFS_WRITE_MASK}, 58907 {FzName: ts + 35563, Fmask: TESTVFS_READ_MASK}, 58908 {FzName: ts + 35576, Fmask: TESTVFS_TRUNCATE_MASK}, 58909 {FzName: ts + 27421, Fmask: TESTVFS_OPEN_MASK}, 58910 {FzName: ts + 35556, Fmask: TESTVFS_CLOSE_MASK}, 58911 {FzName: ts + 35669, Fmask: TESTVFS_ACCESS_MASK}, 58912 {FzName: ts + 35677, Fmask: TESTVFS_FULLPATHNAME_MASK}, 58913 {FzName: ts + 35602, Fmask: TESTVFS_UNLOCK_MASK}, 58914 {FzName: ts + 35596, Fmask: TESTVFS_LOCK_MASK}, 58915 {FzName: ts + 38596, Fmask: TESTVFS_CKLOCK_MASK}, 58916 {FzName: ts + 35624, Fmask: TESTVFS_FCNTL_MASK}, 58917 } 58918 58919 func testvfs_obj_del(tls *libc.TLS, cd ClientData) { 58920 var p uintptr = cd 58921 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 58922 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58923 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 58924 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58925 tcl.XTclFreeObj(tls, _objPtr) 58926 } 58927 } 58928 } 58929 sqlite3.Xsqlite3_vfs_unregister(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 58930 libc.Xmemset(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs, 0, uint64(unsafe.Sizeof(sqlite3_vfs{}))) 58931 tcl.XTcl_Free(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 58932 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Testvfs{}))) 58933 tcl.XTcl_Free(tls, p) 58934 } 58935 58936 func testvfs_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58937 bp := tls.Alloc(28) 58938 defer tls.Free(28) 58939 58940 var p uintptr 58941 var pVfs uintptr 58942 var zVfs uintptr 58943 var nByte int32 58944 58945 var i int32 58946 58947 var zSwitch uintptr 58948 *(*int32)(unsafe.Pointer(bp + 4)) = 0 58949 *(*int32)(unsafe.Pointer(bp + 24)) = 0 58950 *(*int32)(unsafe.Pointer(bp + 8)) = 0 58951 *(*int32)(unsafe.Pointer(bp + 12)) = 0 58952 *(*int32)(unsafe.Pointer(bp + 16)) = -1 58953 *(*int32)(unsafe.Pointer(bp + 20)) = 3 58954 58955 if !(objc < 2 || 0 != objc%2) { 58956 goto __1 58957 } 58958 goto bad_args 58959 __1: 58960 ; 58961 i = 2 58962 __2: 58963 if !(i < objc) { 58964 goto __4 58965 } 58966 zSwitch = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp) 58967 58968 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39003, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 58969 goto __5 58970 } 58971 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+4) != 0) { 58972 goto __7 58973 } 58974 return TCL_ERROR 58975 __7: 58976 ; 58977 if !(*(*int32)(unsafe.Pointer(bp + 4)) != 0) { 58978 goto __8 58979 } 58980 *(*int32)(unsafe.Pointer(bp + 24)) = 0 58981 __8: 58982 ; 58983 goto __6 58984 __5: 58985 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+26779, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 58986 goto __9 58987 } 58988 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+8) != 0) { 58989 goto __11 58990 } 58991 return TCL_ERROR 58992 __11: 58993 ; 58994 goto __10 58995 __9: 58996 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39010, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 58997 goto __12 58998 } 58999 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+12) != 0) { 59000 goto __14 59001 } 59002 return TCL_ERROR 59003 __14: 59004 ; 59005 goto __13 59006 __12: 59007 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39020, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59008 goto __15 59009 } 59010 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+16) != 0) { 59011 goto __17 59012 } 59013 return TCL_ERROR 59014 __17: 59015 ; 59016 goto __16 59017 __15: 59018 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39032, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59019 goto __18 59020 } 59021 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+20) != 0) { 59022 goto __20 59023 } 59024 return TCL_ERROR 59025 __20: 59026 ; 59027 goto __19 59028 __18: 59029 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39042, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59030 goto __21 59031 } 59032 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+24) != 0) { 59033 goto __23 59034 } 59035 return TCL_ERROR 59036 __23: 59037 ; 59038 if !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { 59039 goto __24 59040 } 59041 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59042 __24: 59043 ; 59044 goto __22 59045 __21: 59046 goto bad_args 59047 __22: 59048 ; 59049 __19: 59050 ; 59051 __16: 59052 ; 59053 __13: 59054 ; 59055 __10: 59056 ; 59057 __6: 59058 ; 59059 goto __3 59060 __3: 59061 i = i + 2 59062 goto __2 59063 goto __4 59064 __4: 59065 ; 59066 if !(uint64(*(*int32)(unsafe.Pointer(bp + 12))) < uint64(unsafe.Sizeof(TestvfsFile{}))) { 59067 goto __25 59068 } 59069 *(*int32)(unsafe.Pointer(bp + 12)) = int32(unsafe.Sizeof(TestvfsFile{})) 59070 __25: 59071 ; 59072 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 59073 nByte = int32(uint64(unsafe.Sizeof(Testvfs{})) + uint64(int32(libc.Xstrlen(tls, zVfs))) + uint64(1)) 59074 p = tcl.XTcl_Alloc(tls, uint32(nByte)) 59075 libc.Xmemset(tls, p, 0, uint64(nByte)) 59076 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = -1 59077 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = -1 59078 59079 tcl.XTcl_CreateObjCommand(tls, interp, zVfs, *(*uintptr)(unsafe.Pointer(&struct { 59080 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59081 }{testvfs_obj_cmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{testvfs_obj_del}))) 59082 (*Testvfs)(unsafe.Pointer(p)).FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59083 (*Testvfs)(unsafe.Pointer(p)).Finterp = interp 59084 59085 (*Testvfs)(unsafe.Pointer(p)).FzName = p + 1*104 59086 libc.Xmemcpy(tls, (*Testvfs)(unsafe.Pointer(p)).FzName, zVfs, libc.Xstrlen(tls, zVfs)+uint64(1)) 59087 59088 pVfs = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(sqlite3_vfs{}))) 59089 libc.Xmemcpy(tls, pVfs, uintptr(unsafe.Pointer(&tvfs_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 59090 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData = p 59091 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion = *(*int32)(unsafe.Pointer(bp + 20)) 59092 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName = (*Testvfs)(unsafe.Pointer(p)).FzName 59093 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname 59094 if !(*(*int32)(unsafe.Pointer(bp + 16)) >= 0 && *(*int32)(unsafe.Pointer(bp + 16)) < (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname) { 59095 goto __26 59096 } 59097 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = *(*int32)(unsafe.Pointer(bp + 16)) 59098 __26: 59099 ; 59100 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile = *(*int32)(unsafe.Pointer(bp + 12)) 59101 (*Testvfs)(unsafe.Pointer(p)).FpVfs = pVfs 59102 (*Testvfs)(unsafe.Pointer(p)).FisNoshm = *(*int32)(unsafe.Pointer(bp + 4)) 59103 (*Testvfs)(unsafe.Pointer(p)).FisFullshm = *(*int32)(unsafe.Pointer(bp + 24)) 59104 (*Testvfs)(unsafe.Pointer(p)).Fmask = TESTVFS_ALL_MASK 59105 59106 sqlite3.Xsqlite3_vfs_register(tls, pVfs, *(*int32)(unsafe.Pointer(bp + 8))) 59107 59108 return TCL_OK 59109 59110 bad_args: 59111 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39051) 59112 return TCL_ERROR 59113 } 59114 59115 var tvfs_vfs = sqlite3_vfs{ 59116 FiVersion: 3, 59117 FxOpen: 0, 59118 FxDelete: 0, 59119 FxAccess: 0, 59120 FxFullPathname: 0, 59121 FxRandomness: 0, 59122 FxSleep: 0, 59123 FxCurrentTime: 0, 59124 } 59125 59126 func test_vfs_shmlock(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59127 bp := tls.Alloc(88) 59128 defer tls.Free(88) 59129 59130 *(*[3]uintptr)(unsafe.Pointer(bp + 8)) = [3]uintptr{ts + 39155, ts + 13978, uintptr(0)} 59131 *(*[3]uintptr)(unsafe.Pointer(bp + 40)) = [3]uintptr{ts + 39162, ts + 39167, uintptr(0)} 59132 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 59133 var rc int32 = SQLITE_OK 59134 var zDbname uintptr = uintptr(0) 59135 *(*int32)(unsafe.Pointer(bp + 32)) = 0 59136 *(*int32)(unsafe.Pointer(bp + 64)) = 0 59137 *(*int32)(unsafe.Pointer(bp + 68)) = 0 59138 *(*int32)(unsafe.Pointer(bp + 72)) = 0 59139 59140 if objc != 7 { 59141 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 59142 ts+39174) 59143 return TCL_ERROR 59144 } 59145 59146 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59147 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 59148 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+32) != 0 || 59149 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+64) != 0 || 59150 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+68) != 0 || 59151 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp+72) != 0 { 59152 return TCL_ERROR 59153 } 59154 59155 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+80) 59156 if *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 59157 return TCL_ERROR 59158 } 59159 rc = (*struct { 59160 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59161 })(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)), 59162 func() int32 { 59163 if *(*int32)(unsafe.Pointer(bp + 32)) == 0 { 59164 return SQLITE_SHM_SHARED 59165 } 59166 return SQLITE_SHM_EXCLUSIVE 59167 }()| 59168 func() int32 { 59169 if *(*int32)(unsafe.Pointer(bp + 64)) == 0 { 59170 return SQLITE_SHM_LOCK 59171 } 59172 return SQLITE_SHM_UNLOCK 59173 }()) 59174 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59175 return TCL_OK 59176 } 59177 59178 func test_vfs_set_readmark(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59179 bp := tls.Alloc(48) 59180 defer tls.Free(48) 59181 59182 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 59183 var rc int32 = SQLITE_OK 59184 var zDbname uintptr = uintptr(0) 59185 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59186 *(*int32)(unsafe.Pointer(bp + 28)) = -1 59187 59188 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 59189 var aShm uintptr 59190 var iOff int32 59191 59192 if objc != 4 && objc != 5 { 59193 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39230) 59194 return TCL_ERROR 59195 } 59196 59197 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59198 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 || 59199 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 || 59200 objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 59201 return TCL_ERROR 59202 } 59203 59204 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+32) 59205 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 59206 return TCL_ERROR 59207 } 59208 rc = (*struct { 59209 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 59210 })(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) 59211 if rc != SQLITE_OK { 59212 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59213 return TCL_ERROR 59214 } 59215 if *(*uintptr)(unsafe.Pointer(bp + 40)) == uintptr(0) { 59216 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+39253, 0)) 59217 return TCL_ERROR 59218 } 59219 aShm = *(*uintptr)(unsafe.Pointer(bp + 40)) 59220 iOff = 12*2 + 1 + *(*int32)(unsafe.Pointer(bp + 24)) 59221 59222 if objc == 5 { 59223 *(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 28))) 59224 } 59225 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(*(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4))))) 59226 59227 return TCL_OK 59228 } 59229 59230 func Sqlitetestvfs_Init(tls *libc.TLS, interp uintptr) int32 { 59231 tcl.XTcl_CreateObjCommand(tls, interp, ts+39277, *(*uintptr)(unsafe.Pointer(&struct { 59232 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59233 }{testvfs_cmd})), uintptr(0), uintptr(0)) 59234 tcl.XTcl_CreateObjCommand(tls, interp, ts+39285, *(*uintptr)(unsafe.Pointer(&struct { 59235 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59236 }{test_vfs_shmlock})), uintptr(0), uintptr(0)) 59237 tcl.XTcl_CreateObjCommand(tls, interp, ts+39297, *(*uintptr)(unsafe.Pointer(&struct { 59238 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59239 }{test_vfs_set_readmark})), uintptr(0), uintptr(0)) 59240 return TCL_OK 59241 } 59242 59243 type TestWindow1 = struct { 59244 FxStep uintptr 59245 FxFinal uintptr 59246 FxValue uintptr 59247 FxInverse uintptr 59248 Finterp uintptr 59249 } 59250 59251 type TestWindow = TestWindow1 59252 59253 type TestWindowCtx1 = struct{ FpVal uintptr } 59254 59255 type TestWindowCtx = TestWindowCtx1 59256 59257 func doTestWindowStep(tls *libc.TLS, bInverse int32, ctx uintptr, nArg int32, apArg uintptr) { 59258 var i int32 59259 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 59260 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 59261 if bInverse != 0 { 59262 return (*TestWindow)(unsafe.Pointer(p)).FxInverse 59263 } 59264 return (*TestWindow)(unsafe.Pointer(p)).FxStep 59265 }()) 59266 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 59267 59268 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59269 if pCtx != 0 { 59270 var zResult uintptr 59271 var rc int32 59272 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59273 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 59274 } else { 59275 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 59276 } 59277 for i = 0; i < nArg; i++ { 59278 var pArg uintptr 59279 pArg = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8))), -1) 59280 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, pArg) 59281 } 59282 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59283 if rc != TCL_OK { 59284 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 59285 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 59286 } else { 59287 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59288 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59289 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 59290 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59291 tcl.XTclFreeObj(tls, _objPtr) 59292 } 59293 } 59294 } 59295 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp)) 59296 (*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount++ 59297 } 59298 } 59299 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 59300 var _objPtr uintptr = pEval 59301 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59302 tcl.XTclFreeObj(tls, _objPtr) 59303 } 59304 } 59305 } 59306 59307 func doTestWindowFinalize(tls *libc.TLS, bValue int32, ctx uintptr) { 59308 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 59309 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 59310 if bValue != 0 { 59311 return (*TestWindow)(unsafe.Pointer(p)).FxValue 59312 } 59313 return (*TestWindow)(unsafe.Pointer(p)).FxFinal 59314 }()) 59315 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 59316 59317 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59318 if pCtx != 0 { 59319 var zResult uintptr 59320 var rc int32 59321 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59322 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 59323 } else { 59324 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 59325 } 59326 59327 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59328 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 59329 if rc != TCL_OK { 59330 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 59331 } else { 59332 sqlite3.Xsqlite3_result_text(tls, ctx, zResult, -1, libc.UintptrFromInt32(-1)) 59333 } 59334 59335 if bValue == 0 { 59336 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59337 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59338 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 59339 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59340 tcl.XTclFreeObj(tls, _objPtr) 59341 } 59342 } 59343 } 59344 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = uintptr(0) 59345 } 59346 } 59347 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 59348 var _objPtr uintptr = pEval 59349 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59350 tcl.XTclFreeObj(tls, _objPtr) 59351 } 59352 } 59353 } 59354 59355 func testWindowStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59356 doTestWindowStep(tls, 0, ctx, nArg, apArg) 59357 } 59358 59359 func testWindowInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59360 doTestWindowStep(tls, 1, ctx, nArg, apArg) 59361 } 59362 59363 func testWindowFinal(tls *libc.TLS, ctx uintptr) { 59364 doTestWindowFinalize(tls, 0, ctx) 59365 } 59366 59367 func testWindowValue(tls *libc.TLS, ctx uintptr) { 59368 doTestWindowFinalize(tls, 1, ctx) 59369 } 59370 59371 func testWindowDestroy(tls *libc.TLS, pCtx uintptr) { 59372 tcl.XTcl_Free(tls, pCtx) 59373 } 59374 59375 func test_create_window(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59376 bp := tls.Alloc(8) 59377 defer tls.Free(8) 59378 59379 var pNew uintptr 59380 59381 var zName uintptr 59382 var rc int32 59383 59384 if objc != 7 { 59385 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39314) 59386 return TCL_ERROR 59387 } 59388 59389 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 59390 return TCL_ERROR 59391 } 59392 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59393 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestWindow{}))) 59394 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(TestWindow{}))) 59395 (*TestWindow)(unsafe.Pointer(pNew)).FxStep = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 59396 (*TestWindow)(unsafe.Pointer(pNew)).FxFinal = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 59397 (*TestWindow)(unsafe.Pointer(pNew)).FxValue = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 59398 (*TestWindow)(unsafe.Pointer(pNew)).FxInverse = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8))) 59399 (*TestWindow)(unsafe.Pointer(pNew)).Finterp = interp 59400 59401 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxStep)).FrefCount++ 59402 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxFinal)).FrefCount++ 59403 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxValue)).FrefCount++ 59404 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxInverse)).FrefCount++ 59405 59406 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, -1, SQLITE_UTF8, pNew, 59407 *(*uintptr)(unsafe.Pointer(&struct { 59408 f func(*libc.TLS, uintptr, int32, uintptr) 59409 }{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 { 59410 f func(*libc.TLS, uintptr, int32, uintptr) 59411 }{testWindowInverse})), 59412 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowDestroy}))) 59413 if rc != SQLITE_OK { 59414 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59415 return TCL_ERROR 59416 } 59417 59418 return TCL_OK 59419 } 59420 59421 func test_create_window_misuse(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59422 bp := tls.Alloc(8) 59423 defer tls.Free(8) 59424 59425 var rc int32 59426 59427 if !(objc != 2) { 59428 goto __1 59429 } 59430 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 59431 return TCL_ERROR 59432 __1: 59433 ; 59434 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 59435 goto __2 59436 } 59437 return TCL_ERROR 59438 __2: 59439 ; 59440 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59441 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 { 59442 f func(*libc.TLS, uintptr, int32, uintptr) 59443 }{testWindowInverse})), 59444 uintptr(0)) 59445 if !(rc != SQLITE_MISUSE) { 59446 goto __3 59447 } 59448 goto error 59449 __3: 59450 ; 59451 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59452 *(*uintptr)(unsafe.Pointer(&struct { 59453 f func(*libc.TLS, uintptr, int32, uintptr) 59454 }{testWindowStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 59455 f func(*libc.TLS, uintptr, int32, uintptr) 59456 }{testWindowInverse})), 59457 uintptr(0)) 59458 if !(rc != SQLITE_MISUSE) { 59459 goto __4 59460 } 59461 goto error 59462 __4: 59463 ; 59464 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59465 *(*uintptr)(unsafe.Pointer(&struct { 59466 f func(*libc.TLS, uintptr, int32, uintptr) 59467 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 59468 f func(*libc.TLS, uintptr, int32, uintptr) 59469 }{testWindowInverse})), 59470 uintptr(0)) 59471 if !(rc != SQLITE_MISUSE) { 59472 goto __5 59473 } 59474 goto error 59475 __5: 59476 ; 59477 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 59478 *(*uintptr)(unsafe.Pointer(&struct { 59479 f func(*libc.TLS, uintptr, int32, uintptr) 59480 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), uintptr(0), 59481 uintptr(0)) 59482 if !(rc != SQLITE_MISUSE) { 59483 goto __6 59484 } 59485 goto error 59486 __6: 59487 ; 59488 return TCL_OK 59489 59490 error: 59491 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, ts+39355, -1)) 59492 return TCL_ERROR 59493 } 59494 59495 func sumintStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59496 var pInt uintptr 59497 59498 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apArg))) != SQLITE_INTEGER { 59499 sqlite3.Xsqlite3_result_error(tls, ctx, ts+39373, -1) 59500 return 59501 } 59502 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 59503 if pInt != 0 { 59504 *(*sqlite3_int64)(unsafe.Pointer(pInt)) += sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 59505 } 59506 } 59507 59508 func sumintInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 59509 var pInt uintptr 59510 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 59511 *(*sqlite3_int64)(unsafe.Pointer(pInt)) -= sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 59512 } 59513 59514 func sumintFinal(tls *libc.TLS, ctx uintptr) { 59515 var res sqlite3_int64 = int64(0) 59516 var pInt uintptr 59517 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 59518 if pInt != 0 { 59519 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 59520 } 59521 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 59522 } 59523 59524 func sumintValue(tls *libc.TLS, ctx uintptr) { 59525 var res sqlite3_int64 = int64(0) 59526 var pInt uintptr 59527 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 59528 if pInt != 0 { 59529 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 59530 } 59531 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 59532 } 59533 59534 func test_create_sumint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59535 bp := tls.Alloc(8) 59536 defer tls.Free(8) 59537 59538 var rc int32 59539 59540 if objc != 2 { 59541 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 59542 return TCL_ERROR 59543 } 59544 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 59545 return TCL_ERROR 59546 } 59547 59548 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39390, 1, SQLITE_UTF8, uintptr(0), 59549 *(*uintptr)(unsafe.Pointer(&struct { 59550 f func(*libc.TLS, uintptr, int32, uintptr) 59551 }{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 { 59552 f func(*libc.TLS, uintptr, int32, uintptr) 59553 }{sumintInverse})), 59554 uintptr(0)) 59555 59556 if rc != SQLITE_OK { 59557 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59558 return TCL_ERROR 59559 } 59560 return TCL_OK 59561 } 59562 59563 func test_override_sum(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59564 bp := tls.Alloc(8) 59565 defer tls.Free(8) 59566 59567 var rc int32 59568 59569 if objc != 2 { 59570 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 59571 return TCL_ERROR 59572 } 59573 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 59574 return TCL_ERROR 59575 } 59576 59577 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39397, -1, SQLITE_UTF8, uintptr(0), 59578 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 59579 f func(*libc.TLS, uintptr, int32, uintptr) 59580 }{sumintStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintFinal}))) 59581 59582 if rc != SQLITE_OK { 59583 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59584 return TCL_ERROR 59585 } 59586 return TCL_OK 59587 } 59588 59589 func Sqlitetest_window_Init(tls *libc.TLS, interp uintptr) int32 { 59590 var i int32 59591 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd14))/uint64(unsafe.Sizeof(struct { 59592 FzName uintptr 59593 FxProc uintptr 59594 FclientData int32 59595 F__ccgo_pad1 [4]byte 59596 }{})); i++ { 59597 var c ClientData = uintptr(intptr_t(aObjCmd14[i].FclientData)) 59598 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd14[i].FzName, aObjCmd14[i].FxProc, c, uintptr(0)) 59599 } 59600 return TCL_OK 59601 } 59602 59603 var aObjCmd14 = [4]struct { 59604 FzName uintptr 59605 FxProc uintptr 59606 FclientData int32 59607 F__ccgo_pad1 [4]byte 59608 }{ 59609 {FzName: ts + 39401, FxProc: 0}, 59610 {FzName: ts + 39432, FxProc: 0}, 59611 {FzName: ts + 39467, FxProc: 0}, 59612 {FzName: ts + 39486, FxProc: 0}, 59613 } 59614 59615 func init() { 59616 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 8)) = cfClose 59617 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 16)) = cfRead 59618 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 24)) = cfWrite 59619 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 32)) = cfTruncate 59620 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 40)) = cfSync 59621 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 48)) = cfFileSize 59622 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 56)) = cfLock 59623 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 64)) = cfUnlock 59624 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 72)) = cfCheckReservedLock 59625 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 80)) = cfFileControl 59626 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 88)) = cfSectorSize 59627 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 96)) = cfDeviceCharacteristics 59628 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 104)) = cfShmMap 59629 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 112)) = cfShmLock 59630 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 120)) = cfShmBarrier 59631 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 128)) = cfShmUnmap 59632 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 8)) = csvtabCreate 59633 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 16)) = csvtabConnect 59634 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 24)) = csvtabBestIndex 59635 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 32)) = csvtabDisconnect 59636 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 40)) = csvtabDisconnect 59637 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 48)) = csvtabOpen 59638 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 56)) = csvtabClose 59639 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 64)) = csvtabFilter 59640 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 72)) = csvtabNext 59641 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 80)) = csvtabEof 59642 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 88)) = csvtabColumn 59643 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 96)) = csvtabRowid 59644 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 8)) = csvtabCreate 59645 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 16)) = csvtabConnect 59646 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 24)) = csvtabBestIndex 59647 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 32)) = csvtabDisconnect 59648 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 40)) = csvtabDisconnect 59649 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 48)) = csvtabOpen 59650 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 56)) = csvtabClose 59651 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 64)) = csvtabFilter 59652 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 72)) = csvtabNext 59653 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 80)) = csvtabEof 59654 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 88)) = csvtabColumn 59655 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 96)) = csvtabRowid 59656 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 104)) = csvtabUpdate 59657 *(*func(*libc.TLS, ClientData, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 16)) = incrblobClose 59658 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 24)) = incrblobInput 59659 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 32)) = incrblobOutput 59660 *(*func(*libc.TLS, ClientData, int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 40)) = incrblobSeek 59661 *(*func(*libc.TLS, ClientData, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 64)) = incrblobWatch 59662 *(*func(*libc.TLS, ClientData, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 72)) = incrblobHandle 59663 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 8)) = f5tCreateTokenizer 59664 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 32)) = f5tTokenizerReturn 59665 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 56)) = f5tTokenize 59666 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 80)) = f5tCreateFunction 59667 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 104)) = f5tMayBeCorrupt 59668 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 128)) = f5tTokenHash 59669 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 152)) = f5tRegisterMatchinfo 59670 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 176)) = f5tRegisterTok 59671 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59672 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59673 }{db_enter})) 59674 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59675 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59676 }{db_leave})) 59677 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59678 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59679 }{sqlite3_mprintf_int})) 59680 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59681 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59682 }{sqlite3_mprintf_int64})) 59683 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59684 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59685 }{sqlite3_mprintf_long})) 59686 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59687 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59688 }{sqlite3_mprintf_str})) 59689 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59690 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59691 }{sqlite3_snprintf_str})) 59692 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59693 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59694 }{sqlite3_mprintf_stronly})) 59695 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59696 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59697 }{sqlite3_mprintf_double})) 59698 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59699 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59700 }{sqlite3_mprintf_scaled})) 59701 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59702 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59703 }{sqlite3_mprintf_hexdouble})) 59704 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59705 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59706 }{test_mprintf_z})) 59707 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59708 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59709 }{test_mprintf_n})) 59710 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 59711 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59712 }{test_snprintf_int})) 59713 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 59714 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59715 }{test_last_rowid})) 59716 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 59717 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59718 }{test_exec_printf})) 59719 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 59720 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59721 }{test_exec_hex})) 59722 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 59723 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59724 }{test_exec})) 59725 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 59726 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59727 }{test_exec_nr})) 59728 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 59729 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59730 }{test_get_table_printf})) 59731 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 59732 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59733 }{sqlite_test_close})) 59734 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 344)) = *(*uintptr)(unsafe.Pointer(&struct { 59735 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59736 }{sqlite_test_close_v2})) 59737 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 59738 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59739 }{test_create_function})) 59740 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 376)) = *(*uintptr)(unsafe.Pointer(&struct { 59741 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59742 }{test_create_aggregate})) 59743 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 59744 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59745 }{test_drop_modules})) 59746 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 408)) = *(*uintptr)(unsafe.Pointer(&struct { 59747 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59748 }{test_register_func})) 59749 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 59750 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59751 }{sqlite_abort})) 59752 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 440)) = *(*uintptr)(unsafe.Pointer(&struct { 59753 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59754 }{test_bind})) 59755 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 59756 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59757 }{test_breakpoint})) 59758 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 472)) = *(*uintptr)(unsafe.Pointer(&struct { 59759 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59760 }{test_key})) 59761 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 59762 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59763 }{test_rekey})) 59764 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 504)) = *(*uintptr)(unsafe.Pointer(&struct { 59765 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59766 }{test_interrupt})) 59767 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 59768 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59769 }{delete_function})) 59770 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 536)) = *(*uintptr)(unsafe.Pointer(&struct { 59771 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59772 }{delete_collation})) 59773 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 59774 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59775 }{get_autocommit})) 59776 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 568)) = *(*uintptr)(unsafe.Pointer(&struct { 59777 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59778 }{test_busy_timeout})) 59779 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 584)) = *(*uintptr)(unsafe.Pointer(&struct { 59780 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59781 }{test_printf})) 59782 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 600)) = *(*uintptr)(unsafe.Pointer(&struct { 59783 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59784 }{test_io_trace})) 59785 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 616)) = *(*uintptr)(unsafe.Pointer(&struct { 59786 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59787 }{clang_sanitize_address})) 59788 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59789 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59790 }{pager_open})) 59791 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59792 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59793 }{pager_close})) 59794 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59795 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59796 }{pager_commit})) 59797 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59798 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59799 }{pager_rollback})) 59800 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59801 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59802 }{pager_stmt_begin})) 59803 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59804 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59805 }{pager_stmt_commit})) 59806 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59807 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59808 }{pager_stmt_rollback})) 59809 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59810 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59811 }{pager_stats})) 59812 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59813 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59814 }{pager_pagecount})) 59815 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59816 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59817 }{page_get})) 59818 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59819 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59820 }{page_lookup})) 59821 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59822 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59823 }{page_unref})) 59824 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59825 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59826 }{page_read})) 59827 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 59828 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59829 }{page_write})) 59830 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 59831 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59832 }{page_number})) 59833 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 59834 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59835 }{pager_truncate})) 59836 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 59837 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59838 }{fake_big_file})) 59839 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 59840 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59841 }{testBitvecBuiltinTest})) 59842 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 59843 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59844 }{testPendingByte})) 59845 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 59846 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59847 }{faultInstallCmd})) 59848 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59849 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59850 }{btree_open})) 59851 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59852 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59853 }{btree_close})) 59854 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59855 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59856 }{btree_begin_transaction})) 59857 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59858 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59859 }{btree_pager_stats})) 59860 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59861 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59862 }{btree_cursor})) 59863 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59864 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59865 }{btree_close_cursor})) 59866 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59867 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59868 }{btree_next})) 59869 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59870 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59871 }{btree_eof})) 59872 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59873 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59874 }{btree_payload_size})) 59875 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59876 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59877 }{btree_first})) 59878 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59879 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59880 }{btree_varint_test})) 59881 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59882 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59883 }{btree_from_db})) 59884 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59885 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59886 }{btree_ismemdb})) 59887 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 59888 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59889 }{btree_set_cache_size})) 59890 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59891 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59892 }{tcl_thread_create})) 59893 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59894 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59895 }{tcl_thread_wait})) 59896 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59897 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59898 }{tcl_thread_halt})) 59899 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59900 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59901 }{tcl_thread_argc})) 59902 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59903 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59904 }{tcl_thread_argv})) 59905 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59906 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59907 }{tcl_thread_colname})) 59908 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59909 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59910 }{tcl_thread_result})) 59911 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59912 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59913 }{tcl_thread_error})) 59914 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59915 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59916 }{tcl_thread_compile})) 59917 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59918 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59919 }{tcl_thread_step})) 59920 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59921 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59922 }{tcl_thread_finalize})) 59923 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59924 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59925 }{tcl_thread_swap})) 59926 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59927 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59928 }{tcl_thread_db_get})) 59929 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 59930 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59931 }{tcl_thread_db_put})) 59932 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 59933 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59934 }{tcl_thread_stmt_get})) 59935 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59936 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59937 }{binarize})) 59938 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59939 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59940 }{test_value_overhead})) 59941 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59942 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59943 }{test_translate})) 59944 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59945 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59946 }{test_translate_selftest})) 59947 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59948 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59949 }{tcl_client_create})) 59950 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59951 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59952 }{tcl_client_wait})) 59953 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59954 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59955 }{tcl_client_halt})) 59956 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59957 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59958 }{tcl_client_argc})) 59959 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 59960 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59961 }{tcl_client_argv})) 59962 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 59963 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59964 }{tcl_client_colname})) 59965 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 59966 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59967 }{tcl_client_result})) 59968 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 59969 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59970 }{tcl_client_error})) 59971 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 59972 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59973 }{tcl_client_compile})) 59974 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 59975 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59976 }{tcl_client_step})) 59977 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 59978 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59979 }{tcl_client_reset})) 59980 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 59981 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59982 }{tcl_client_finalize})) 59983 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 59984 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59985 }{tcl_client_swap})) 59986 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 8)) = test_multiplex_initialize 59987 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 24)) = test_multiplex_shutdown 59988 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 40)) = test_multiplex_control 59989 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 59990 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59991 }{test_shutdown})) 59992 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 59993 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59994 }{test_initialize})) 59995 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 59996 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59997 }{test_config})) 59998 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 59999 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60000 }{test_enter_static_mutex})) 60001 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60002 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60003 }{test_leave_static_mutex})) 60004 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60005 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60006 }{test_enter_db_mutex})) 60007 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60008 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60009 }{test_leave_db_mutex})) 60010 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60011 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60012 }{test_alloc_mutex})) 60013 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60014 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60015 }{test_install_mutex_counters})) 60016 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60017 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60018 }{test_read_mutex_counters})) 60019 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60020 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60021 }{test_clear_mutex_counters})) 60022 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 8)) = test_quota_initialize 60023 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 24)) = test_quota_shutdown 60024 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 40)) = test_quota_set 60025 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 56)) = test_quota_file 60026 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 72)) = test_quota_dump 60027 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 88)) = test_quota_fopen 60028 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 104)) = test_quota_fread 60029 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 120)) = test_quota_fwrite 60030 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 136)) = test_quota_fclose 60031 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 152)) = test_quota_fflush 60032 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 168)) = test_quota_fseek 60033 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 184)) = test_quota_rewind 60034 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 200)) = test_quota_ftell 60035 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 216)) = test_quota_ftruncate 60036 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 232)) = test_quota_file_size 60037 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 248)) = test_quota_file_truesize 60038 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 264)) = test_quota_file_mtime 60039 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 280)) = test_quota_remove 60040 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 296)) = test_quota_glob 60041 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 312)) = test_quota_file_available 60042 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 328)) = test_quota_ferror 60043 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 8)) = sqlite3_amatch_init 60044 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 24)) = sqlite3_appendvfs_init 60045 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 40)) = sqlite3_carray_init 60046 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 56)) = sqlite3_closure_init 60047 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 72)) = sqlite3_csv_init 60048 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 88)) = sqlite3_decimal_init 60049 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 104)) = sqlite3_eval_init 60050 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 120)) = sqlite3_explain_init 60051 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 136)) = sqlite3_fileio_init 60052 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 152)) = sqlite3_fuzzer_init 60053 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 168)) = sqlite3_ieee_init 60054 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 184)) = sqlite3_nextchar_init 60055 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 200)) = sqlite3_percentile_init 60056 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 216)) = sqlite3_prefixes_init 60057 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 232)) = sqlite3_qpvtab_init 60058 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 248)) = sqlite3_regexp_init 60059 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 264)) = sqlite3_remember_init 60060 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 280)) = sqlite3_series_init 60061 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 296)) = sqlite3_spellfix_init 60062 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 312)) = sqlite3_totype_init 60063 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 328)) = sqlite3_unionvtab_init 60064 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 344)) = sqlite3_wholenumber_init 60065 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 16)) = decimalFunc 60066 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 40)) = decimalCmpFunc 60067 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 64)) = decimalAddFunc 60068 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 88)) = decimalSubFunc 60069 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 112)) = decimalMulFunc 60070 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 16)) = ieee754func 60071 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 40)) = ieee754func 60072 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 64)) = ieee754func 60073 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 88)) = ieee754func 60074 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 112)) = ieee754func_to_blob 60075 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 136)) = ieee754func_from_blob 60076 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 16)) = randStr 60077 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 40)) = test_destructor 60078 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 64)) = test_destructor16 60079 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 88)) = testHexToUtf16be 60080 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 112)) = testHexToUtf16le 60081 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 136)) = testHexToUtf8 60082 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 160)) = test_destructor_count 60083 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 184)) = test_auxdata 60084 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 208)) = test_error 60085 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 232)) = test_error 60086 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 256)) = test_eval 60087 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 280)) = test_isolation 60088 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 304)) = counterFunc 60089 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 328)) = real2hex 60090 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 352)) = test_decode 60091 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 376)) = test_extract 60092 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 400)) = test_zeroblob 60093 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 424)) = test_getsubtype 60094 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 448)) = test_setsubtype 60095 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 472)) = test_frombind 60096 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 8)) = test_sqlite3rbu 60097 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 24)) = test_sqlite3rbu_vacuum 60098 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 40)) = test_sqlite3rbu_create_vfs 60099 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 56)) = test_sqlite3rbu_destroy_vfs 60100 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 72)) = test_sqlite3rbu_internal_test 60101 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 8)) = test_sqlite3_db_config 60102 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 32)) = test_sqlite3_txn_state 60103 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 56)) = test_bad_behavior 60104 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 64)) = uintptr(unsafe.Pointer(&iZero)) 60105 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 80)) = test_register_dbstat_vtab 60106 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 104)) = get_sqlite_pointer 60107 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 128)) = test_intarray_addr 60108 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 152)) = test_int64array_addr 60109 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 176)) = test_doublearray_addr 60110 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 200)) = test_textarray_addr 60111 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 224)) = test_bind_int 60112 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 248)) = test_bind_zeroblob 60113 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 272)) = test_bind_zeroblob64 60114 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 296)) = test_bind_int64 60115 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 320)) = test_bind_double 60116 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 344)) = test_bind_null 60117 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 368)) = test_bind_text 60118 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 392)) = test_bind_text16 60119 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 416)) = test_bind_blob 60120 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 440)) = test_bind_value_from_select 60121 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 464)) = test_bind_value_from_preupdate 60122 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 488)) = test_carray_bind 60123 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 512)) = test_bind_parameter_count 60124 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 536)) = test_bind_parameter_name 60125 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 560)) = test_bind_parameter_index 60126 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 584)) = test_clear_bindings 60127 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 608)) = test_sleep 60128 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 632)) = test_errcode 60129 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 656)) = test_ex_errcode 60130 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 680)) = test_errmsg 60131 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 704)) = test_error_offset 60132 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 728)) = test_errmsg16 60133 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 752)) = test_open 60134 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 776)) = test_open16 60135 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 800)) = test_open_v2 60136 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 824)) = test_complete16 60137 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 848)) = test_normalize 60138 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 872)) = test_prepare 60139 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 896)) = test_prepare16 60140 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 920)) = test_prepare_v2 60141 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 944)) = test_prepare_v3 60142 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 968)) = test_prepare_tkt3134 60143 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 992)) = test_prepare16_v2 60144 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1016)) = test_finalize 60145 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1040)) = test_stmt_status 60146 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1064)) = test_reset 60147 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1088)) = test_expired 60148 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1112)) = test_transfer_bind 60149 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1136)) = test_changes 60150 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1160)) = test_step 60151 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1184)) = test_sql 60152 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1208)) = test_ex_sql 60153 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1232)) = test_next_stmt 60154 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1256)) = test_stmt_readonly 60155 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1280)) = test_stmt_isexplain 60156 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1304)) = test_stmt_busy 60157 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1328)) = uses_stmt_journal 60158 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1352)) = test_release_memory 60159 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1376)) = test_db_release_memory 60160 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1400)) = test_db_cacheflush 60161 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1424)) = test_system_errno 60162 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1448)) = test_db_filename 60163 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1472)) = test_db_readonly 60164 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1496)) = test_soft_heap_limit 60165 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1520)) = test_soft_heap_limit 60166 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1544)) = test_hard_heap_limit 60167 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1568)) = test_thread_cleanup 60168 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1592)) = test_pager_refcounts 60169 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1616)) = test_load_extension 60170 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1640)) = test_enable_load 60171 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1664)) = test_extended_result_codes 60172 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1688)) = test_limit 60173 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1712)) = test_dbconfig_maindbname_icecube 60174 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1736)) = save_prng_state 60175 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1760)) = restore_prng_state 60176 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1784)) = reset_prng_state 60177 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1808)) = prng_seed 60178 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1832)) = extra_schema_checks 60179 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1856)) = database_never_corrupt 60180 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1880)) = database_may_be_corrupt 60181 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1904)) = optimization_control 60182 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1928)) = runAsObjProc 60183 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1952)) = test_column_count 60184 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1976)) = test_data_count 60185 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2000)) = test_column_type 60186 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2024)) = test_column_blob 60187 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2048)) = test_column_double 60188 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2072)) = test_column_int64 60189 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2096)) = test_stmt_utf8 60190 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2104)) = *(*uintptr)(unsafe.Pointer(&struct { 60191 f func(*libc.TLS, uintptr, int32) uintptr 60192 }{sqlite3.Xsqlite3_column_text})) 60193 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2120)) = test_stmt_utf8 60194 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2128)) = *(*uintptr)(unsafe.Pointer(&struct { 60195 f func(*libc.TLS, uintptr, int32) uintptr 60196 }{sqlite3.Xsqlite3_column_name})) 60197 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2144)) = test_stmt_int 60198 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2152)) = *(*uintptr)(unsafe.Pointer(&struct { 60199 f func(*libc.TLS, uintptr, int32) int32 60200 }{sqlite3.Xsqlite3_column_int})) 60201 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2168)) = test_stmt_int 60202 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2176)) = *(*uintptr)(unsafe.Pointer(&struct { 60203 f func(*libc.TLS, uintptr, int32) int32 60204 }{sqlite3.Xsqlite3_column_bytes})) 60205 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2192)) = test_stmt_utf8 60206 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2200)) = *(*uintptr)(unsafe.Pointer(&struct { 60207 f func(*libc.TLS, uintptr, int32) uintptr 60208 }{sqlite3.Xsqlite3_column_decltype})) 60209 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2216)) = test_stmt_utf8 60210 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2224)) = *(*uintptr)(unsafe.Pointer(&struct { 60211 f func(*libc.TLS, uintptr, int32) uintptr 60212 }{sqlite3.Xsqlite3_column_database_name})) 60213 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2240)) = test_stmt_utf8 60214 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2248)) = *(*uintptr)(unsafe.Pointer(&struct { 60215 f func(*libc.TLS, uintptr, int32) uintptr 60216 }{sqlite3.Xsqlite3_column_table_name})) 60217 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2264)) = test_stmt_utf8 60218 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2272)) = *(*uintptr)(unsafe.Pointer(&struct { 60219 f func(*libc.TLS, uintptr, int32) uintptr 60220 }{sqlite3.Xsqlite3_column_origin_name})) 60221 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2288)) = test_stmt_int 60222 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2296)) = *(*uintptr)(unsafe.Pointer(&struct { 60223 f func(*libc.TLS, uintptr, int32) int32 60224 }{sqlite3.Xsqlite3_column_bytes16})) 60225 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2312)) = test_stmt_utf16 60226 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2320)) = *(*uintptr)(unsafe.Pointer(&struct { 60227 f func(*libc.TLS, uintptr, int32) uintptr 60228 }{sqlite3.Xsqlite3_column_text16})) 60229 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2336)) = test_stmt_utf16 60230 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2344)) = *(*uintptr)(unsafe.Pointer(&struct { 60231 f func(*libc.TLS, uintptr, int32) uintptr 60232 }{sqlite3.Xsqlite3_column_name16})) 60233 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2360)) = add_alignment_test_collations 60234 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2384)) = test_stmt_utf16 60235 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2392)) = *(*uintptr)(unsafe.Pointer(&struct { 60236 f func(*libc.TLS, uintptr, int32) uintptr 60237 }{sqlite3.Xsqlite3_column_decltype16})) 60238 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2408)) = test_stmt_utf16 60239 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2416)) = *(*uintptr)(unsafe.Pointer(&struct { 60240 f func(*libc.TLS, uintptr, int32) uintptr 60241 }{sqlite3.Xsqlite3_column_database_name16})) 60242 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2432)) = test_stmt_utf16 60243 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2440)) = *(*uintptr)(unsafe.Pointer(&struct { 60244 f func(*libc.TLS, uintptr, int32) uintptr 60245 }{sqlite3.Xsqlite3_column_table_name16})) 60246 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2456)) = test_stmt_utf16 60247 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2464)) = *(*uintptr)(unsafe.Pointer(&struct { 60248 f func(*libc.TLS, uintptr, int32) uintptr 60249 }{sqlite3.Xsqlite3_column_origin_name16})) 60250 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2480)) = test_create_collation_v2 60251 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2504)) = test_global_recover 60252 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2528)) = working_64bit_int 60253 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2552)) = vfs_unlink_test 60254 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2576)) = vfs_initfail_test 60255 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2600)) = vfs_unregister_all 60256 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2624)) = vfs_reregister_all 60257 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2648)) = file_control_test 60258 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2672)) = file_control_lasterrno_test 60259 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2696)) = file_control_lockproxy_test 60260 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2720)) = file_control_chunksize_test 60261 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2744)) = file_control_sizehint_test 60262 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2768)) = file_control_data_version 60263 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2792)) = file_control_persist_wal 60264 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2816)) = file_control_powersafe_overwrite 60265 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2840)) = file_control_vfsname 60266 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2864)) = file_control_reservebytes 60267 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2888)) = file_control_tempfilename 60268 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2912)) = file_control_external_reader 60269 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2936)) = vfs_list 60270 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2960)) = test_create_function_v2 60271 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2984)) = test_collate 60272 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3008)) = test_collate_needed 60273 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3032)) = test_function 60274 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3056)) = test_utf16bin_collate 60275 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3080)) = test_errstr 60276 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3104)) = tcl_variable_type 60277 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3128)) = test_enable_shared 60278 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3152)) = sqlite3BtreeSharedCacheReport 60279 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3176)) = test_libversion_number 60280 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3200)) = test_table_column_metadata 60281 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3224)) = test_blob_reopen 60282 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3248)) = test_pcache_stats 60283 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3272)) = test_unlock_notify 60284 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3296)) = test_wal_checkpoint 60285 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3320)) = test_wal_checkpoint_v2 60286 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3344)) = test_wal_autocheckpoint 60287 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3368)) = test_sqlite3_log 60288 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3392)) = test_print_eqp 60289 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3416)) = test_test_control 60290 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3440)) = test_getrusage 60291 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3464)) = tclLoadStaticExtensionCmd 60292 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3488)) = sorter_test_fakeheap 60293 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3512)) = sorter_test_sort4_helper 60294 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3536)) = vfsCurrentTimeInt64 60295 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3560)) = test_snapshot_get 60296 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3584)) = test_snapshot_open 60297 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3608)) = test_snapshot_free 60298 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3632)) = test_snapshot_cmp 60299 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3656)) = test_snapshot_recover 60300 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3680)) = test_snapshot_get_blob 60301 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3704)) = test_snapshot_open_blob 60302 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3728)) = test_snapshot_cmp_blob 60303 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3752)) = test_delete_database 60304 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3776)) = test_atomic_batch_write 60305 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3800)) = test_mmap_warm 60306 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3824)) = test_config_sorterref 60307 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3848)) = test_autovacuum_pages 60308 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3872)) = test_decode_hexdb 60309 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3896)) = test_write_db 60310 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3920)) = test_register_cksumvfs 60311 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3944)) = test_unregister_cksumvfs 60312 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 8)) = test_intarray_create 60313 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 32)) = test_intarray_bind 60314 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 8)) = test_malloc 60315 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 32)) = test_realloc 60316 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 56)) = test_free 60317 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 80)) = test_memset 60318 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 104)) = test_memget 60319 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 128)) = test_memory_used 60320 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 152)) = test_memory_highwater 60321 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 176)) = test_memdebug_backtrace 60322 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 200)) = test_memdebug_dump 60323 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 224)) = test_memdebug_fail 60324 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 248)) = test_memdebug_pending 60325 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 272)) = test_memdebug_settitle 60326 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 296)) = test_memdebug_malloc_count 60327 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 320)) = test_memdebug_log 60328 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 344)) = test_config_pagecache 60329 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 368)) = test_alt_pcache 60330 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 392)) = test_status 60331 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 416)) = test_db_status 60332 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 440)) = test_install_malloc_faultsim 60333 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 464)) = test_config_heap 60334 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 488)) = test_config_heap_size 60335 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 512)) = test_config_memstatus 60336 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 536)) = test_config_lookaside 60337 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 560)) = test_config_error 60338 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 584)) = test_config_uri 60339 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 608)) = test_config_cis 60340 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 632)) = test_config_pmasz 60341 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 656)) = test_db_config_lookaside 60342 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 680)) = test_dump_memsys3 60343 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 704)) = test_dump_memsys3 60344 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 728)) = test_install_memsys3 60345 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 752)) = test_vfs_oom_test 60346 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd12)) + 8)) = register_schema_module 60347 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd13)) + 8)) = register_tclvar_module 60348 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 8)) = test_create_window 60349 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 32)) = test_create_window_misuse 60350 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 56)) = test_create_sumint 60351 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 80)) = test_override_sum 60352 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 8)) = register_echo_module 60353 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 32)) = declare_vtab 60354 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 8)) = c_misuse_test 60355 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 32)) = c_realloc_test 60356 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 56)) = c_collation_test 60357 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd4)) + 8)) = register_tcl_module 60358 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 8)) = test_blob_open 60359 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 24)) = test_blob_close 60360 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 40)) = test_blob_bytes 60361 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 56)) = test_blob_read 60362 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 72)) = test_blob_write 60363 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd6)) + 8)) = register_fs_module 60364 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 8)) = autoinstall_test_funcs 60365 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 24)) = abuse_create_function 60366 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 40)) = install_fts3_rank_function 60367 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 8)) = hexio_read 60368 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 24)) = hexio_write 60369 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 40)) = hexio_get_int 60370 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 56)) = hexio_render_int16 60371 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 72)) = hexio_render_int32 60372 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 88)) = utf8_to_utf8 60373 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 104)) = read_fts3varint 60374 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 120)) = make_fts3record 60375 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 8)) = init_wrapper_install 60376 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 24)) = init_wrapper_query 60377 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 40)) = init_wrapper_uninstall 60378 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 56)) = init_wrapper_clear 60379 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60380 f func(*libc.TLS, uintptr, int32, int32) int32 60381 }{ts_open})) 60382 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{ts_close})) 60383 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60384 f func(*libc.TLS, uintptr, int32) int32 60385 }{ts_access})) 60386 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60387 f func(*libc.TLS, uintptr, size_t) uintptr 60388 }{ts_getcwd})) 60389 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60390 f func(*libc.TLS, uintptr, uintptr) int32 60391 }{ts_stat})) 60392 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60393 f func(*libc.TLS, int32, uintptr) int32 60394 }{ts_fstat})) 60395 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60396 f func(*libc.TLS, int32, off_t) int32 60397 }{ts_ftruncate})) 60398 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60399 f func(*libc.TLS, int32, int32, uintptr) int32 60400 }{ts_fcntl})) 60401 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 60402 f func(*libc.TLS, int32, uintptr, size_t) int32 60403 }{ts_read})) 60404 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 60405 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 60406 }{ts_pread})) 60407 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 60408 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 60409 }{ts_pread64})) 60410 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 60411 f func(*libc.TLS, int32, uintptr, size_t) int32 60412 }{ts_write})) 60413 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 60414 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 60415 }{ts_pwrite})) 60416 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 60417 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 60418 }{ts_pwrite64})) 60419 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 60420 f func(*libc.TLS, int32, mode_t) int32 60421 }{ts_fchmod})) 60422 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 60423 f func(*libc.TLS, int32, off_t, off_t) int32 60424 }{ts_fallocate})) 60425 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 60426 f func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr 60427 }{ts_mmap})) 60428 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 60429 f func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr 60430 }{ts_mremap})) 60431 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 8)) = amatchConnect 60432 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 16)) = amatchConnect 60433 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 24)) = amatchBestIndex 60434 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 32)) = amatchDisconnect 60435 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 40)) = amatchDisconnect 60436 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 48)) = amatchOpen 60437 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 56)) = amatchClose 60438 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 64)) = amatchFilter 60439 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 72)) = amatchNext 60440 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 80)) = amatchEof 60441 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 88)) = amatchColumn 60442 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 96)) = amatchRowid 60443 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 104)) = amatchUpdate 60444 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 8)) = apndClose 60445 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 16)) = apndRead 60446 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 24)) = apndWrite 60447 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 32)) = apndTruncate 60448 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 40)) = apndSync 60449 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 48)) = apndFileSize 60450 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 56)) = apndLock 60451 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 64)) = apndUnlock 60452 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 72)) = apndCheckReservedLock 60453 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 80)) = apndFileControl 60454 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 88)) = apndSectorSize 60455 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 96)) = apndDeviceCharacteristics 60456 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 104)) = apndShmMap 60457 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 112)) = apndShmLock 60458 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 120)) = apndShmBarrier 60459 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 128)) = apndShmUnmap 60460 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 136)) = apndFetch 60461 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 144)) = apndUnfetch 60462 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 40)) = apndOpen 60463 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 48)) = apndDelete 60464 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 56)) = apndAccess 60465 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 64)) = apndFullPathname 60466 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 72)) = apndDlOpen 60467 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 80)) = apndDlError 60468 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 88)) = apndDlSym 60469 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 96)) = apndDlClose 60470 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 104)) = apndRandomness 60471 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 112)) = apndSleep 60472 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 120)) = apndCurrentTime 60473 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 128)) = apndGetLastError 60474 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 136)) = apndCurrentTimeInt64 60475 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 144)) = apndSetSystemCall 60476 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 152)) = apndGetSystemCall 60477 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 160)) = apndNextSystemCall 60478 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 16)) = carrayConnect 60479 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 24)) = carrayBestIndex 60480 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 32)) = carrayDisconnect 60481 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 48)) = carrayOpen 60482 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 56)) = carrayClose 60483 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 64)) = carrayFilter 60484 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 72)) = carrayNext 60485 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 80)) = carrayEof 60486 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 88)) = carrayColumn 60487 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 96)) = carrayRowid 60488 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 8)) = cksmClose 60489 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 16)) = cksmRead 60490 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 24)) = cksmWrite 60491 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 32)) = cksmTruncate 60492 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 40)) = cksmSync 60493 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 48)) = cksmFileSize 60494 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 56)) = cksmLock 60495 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 64)) = cksmUnlock 60496 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 72)) = cksmCheckReservedLock 60497 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 80)) = cksmFileControl 60498 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 88)) = cksmSectorSize 60499 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 96)) = cksmDeviceCharacteristics 60500 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 104)) = cksmShmMap 60501 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 112)) = cksmShmLock 60502 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 120)) = cksmShmBarrier 60503 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 128)) = cksmShmUnmap 60504 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 136)) = cksmFetch 60505 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 144)) = cksmUnfetch 60506 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 40)) = cksmOpen 60507 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 48)) = cksmDelete 60508 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 56)) = cksmAccess 60509 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 64)) = cksmFullPathname 60510 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 72)) = cksmDlOpen 60511 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 80)) = cksmDlError 60512 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 88)) = cksmDlSym 60513 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 96)) = cksmDlClose 60514 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 104)) = cksmRandomness 60515 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 112)) = cksmSleep 60516 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 120)) = cksmCurrentTime 60517 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 128)) = cksmGetLastError 60518 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 136)) = cksmCurrentTimeInt64 60519 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 144)) = cksmSetSystemCall 60520 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 152)) = cksmGetSystemCall 60521 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 160)) = cksmNextSystemCall 60522 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 8)) = closureConnect 60523 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 16)) = closureConnect 60524 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 24)) = closureBestIndex 60525 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 32)) = closureDisconnect 60526 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 40)) = closureDisconnect 60527 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 48)) = closureOpen 60528 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 56)) = closureClose 60529 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 64)) = closureFilter 60530 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 72)) = closureNext 60531 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 80)) = closureEof 60532 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 88)) = closureColumn 60533 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 96)) = closureRowid 60534 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 40)) = cfOpen 60535 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 48)) = cfDelete 60536 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 56)) = cfAccess 60537 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 64)) = cfFullPathname 60538 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 72)) = cfDlOpen 60539 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 80)) = cfDlError 60540 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 88)) = cfDlSym 60541 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 96)) = cfDlClose 60542 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 104)) = cfRandomness 60543 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 112)) = cfSleep 60544 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 120)) = cfCurrentTime 60545 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 128)) = cfGetLastError 60546 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 8)) = devsymClose 60547 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 16)) = devsymRead 60548 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 24)) = devsymWrite 60549 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 32)) = devsymTruncate 60550 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 40)) = devsymSync 60551 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 48)) = devsymFileSize 60552 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 56)) = devsymLock 60553 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 64)) = devsymUnlock 60554 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 72)) = devsymCheckReservedLock 60555 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 80)) = devsymFileControl 60556 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 88)) = devsymSectorSize 60557 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 96)) = devsymDeviceCharacteristics 60558 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 104)) = devsymShmMap 60559 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 112)) = devsymShmLock 60560 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 120)) = devsymShmBarrier 60561 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 128)) = devsymShmUnmap 60562 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 40)) = devsymOpen 60563 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 48)) = devsymDelete 60564 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 56)) = devsymAccess 60565 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 64)) = devsymFullPathname 60566 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 104)) = devsymRandomness 60567 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 112)) = devsymSleep 60568 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 120)) = devsymCurrentTime 60569 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 8)) = echoCreate 60570 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 16)) = echoConnect 60571 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 24)) = echoBestIndex 60572 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 32)) = echoDisconnect 60573 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 40)) = echoDestroy 60574 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 48)) = echoOpen 60575 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 56)) = echoClose 60576 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 64)) = echoFilter 60577 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 72)) = echoNext 60578 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 80)) = echoEof 60579 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 88)) = echoColumn 60580 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 96)) = echoRowid 60581 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 104)) = echoUpdate 60582 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 112)) = echoBegin 60583 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 120)) = echoSync 60584 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 128)) = echoCommit 60585 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 136)) = echoRollback 60586 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 144)) = echoFindFunction 60587 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 152)) = echoRename 60588 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 8)) = echoCreate 60589 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 16)) = echoConnect 60590 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 24)) = echoBestIndex 60591 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 32)) = echoDisconnect 60592 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 40)) = echoDestroy 60593 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 48)) = echoOpen 60594 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 56)) = echoClose 60595 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 64)) = echoFilter 60596 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 72)) = echoNext 60597 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 80)) = echoEof 60598 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 88)) = echoColumn 60599 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 96)) = echoRowid 60600 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 104)) = echoUpdate 60601 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 112)) = echoBegin 60602 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 120)) = echoSync 60603 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 128)) = echoCommit 60604 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 136)) = echoRollback 60605 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 144)) = echoFindFunction 60606 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 152)) = echoRename 60607 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 160)) = echoSavepoint 60608 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 168)) = echoRelease 60609 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 176)) = echoRollbackTo 60610 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 8)) = expertConnect 60611 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 16)) = expertConnect 60612 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 24)) = expertBestIndex 60613 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 32)) = expertDisconnect 60614 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 40)) = expertDisconnect 60615 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 48)) = expertOpen 60616 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 56)) = expertClose 60617 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 64)) = expertFilter 60618 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 72)) = expertNext 60619 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 80)) = expertEof 60620 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 88)) = expertColumn 60621 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 96)) = expertRowid 60622 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 104)) = expertUpdate 60623 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 16)) = explainConnect 60624 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 24)) = explainBestIndex 60625 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 32)) = explainDisconnect 60626 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 48)) = explainOpen 60627 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 56)) = explainClose 60628 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 64)) = explainFilter 60629 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 72)) = explainNext 60630 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 80)) = explainEof 60631 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 88)) = explainColumn 60632 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 96)) = explainRowid 60633 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 8)) = fsConnect 60634 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 16)) = fsConnect 60635 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 24)) = fsBestIndex 60636 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 32)) = fsDisconnect 60637 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 40)) = fsDisconnect 60638 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 48)) = fsOpen 60639 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 56)) = fsClose 60640 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 64)) = fsFilter 60641 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 72)) = fsNext 60642 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 80)) = fsEof 60643 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 88)) = fsColumn 60644 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 96)) = fsRowid 60645 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 8)) = fsClose1 60646 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 16)) = fsRead 60647 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 24)) = fsWrite 60648 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 32)) = fsTruncate 60649 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 40)) = fsSync 60650 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 48)) = fsFileSize 60651 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 56)) = fsLock 60652 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 64)) = fsUnlock 60653 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 72)) = fsCheckReservedLock 60654 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 80)) = fsFileControl 60655 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 88)) = fsSectorSize 60656 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 96)) = fsDeviceCharacteristics 60657 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 40)) = fsOpen1 60658 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 48)) = fsDelete 60659 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 56)) = fsAccess 60660 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 64)) = fsFullPathname 60661 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 72)) = fsDlOpen 60662 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 80)) = fsDlError 60663 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 88)) = fsDlSym 60664 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 96)) = fsDlClose 60665 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 104)) = fsRandomness 60666 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 112)) = fsSleep 60667 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 120)) = fsCurrentTime 60668 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 8)) = fsdirConnect1 60669 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 16)) = fsdirConnect1 60670 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 24)) = fsdirBestIndex1 60671 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 32)) = fsdirDisconnect1 60672 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 40)) = fsdirDisconnect1 60673 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 48)) = fsdirOpen1 60674 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 56)) = fsdirClose1 60675 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 64)) = fsdirFilter1 60676 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 72)) = fsdirNext1 60677 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 80)) = fsdirEof1 60678 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 88)) = fsdirColumn1 60679 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 96)) = fsdirRowid1 60680 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 16)) = fsdirConnect 60681 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 24)) = fsdirBestIndex 60682 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 32)) = fsdirDisconnect 60683 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 48)) = fsdirOpen 60684 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 56)) = fsdirClose 60685 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 64)) = fsdirFilter 60686 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 72)) = fsdirNext 60687 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 80)) = fsdirEof 60688 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 88)) = fsdirColumn 60689 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 96)) = fsdirRowid 60690 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 8)) = fstreeConnect 60691 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 16)) = fstreeConnect 60692 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 24)) = fstreeBestIndex 60693 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 32)) = fstreeDisconnect 60694 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 40)) = fstreeDisconnect 60695 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 48)) = fstreeOpen 60696 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 56)) = fstreeClose 60697 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 64)) = fstreeFilter 60698 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 72)) = fstreeNext 60699 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 80)) = fstreeEof 60700 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 88)) = fstreeColumn 60701 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 96)) = fstreeRowid 60702 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 8)) = fts5tokConnectMethod 60703 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 16)) = fts5tokConnectMethod 60704 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 24)) = fts5tokBestIndexMethod 60705 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 32)) = fts5tokDisconnectMethod 60706 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 40)) = fts5tokDisconnectMethod 60707 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 48)) = fts5tokOpenMethod 60708 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 56)) = fts5tokCloseMethod 60709 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 64)) = fts5tokFilterMethod 60710 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 72)) = fts5tokNextMethod 60711 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 80)) = fts5tokEofMethod 60712 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 88)) = fts5tokColumnMethod 60713 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 96)) = fts5tokRowidMethod 60714 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 8)) = fuzzerConnect 60715 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 16)) = fuzzerConnect 60716 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 24)) = fuzzerBestIndex 60717 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 32)) = fuzzerDisconnect 60718 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 40)) = fuzzerDisconnect 60719 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 48)) = fuzzerOpen 60720 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 56)) = fuzzerClose 60721 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 64)) = fuzzerFilter 60722 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 72)) = fuzzerNext 60723 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 80)) = fuzzerEof 60724 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 88)) = fuzzerColumn 60725 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 96)) = fuzzerRowid 60726 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 8)) = intarrayCreate 60727 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 16)) = intarrayCreate 60728 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 24)) = intarrayBestIndex 60729 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 32)) = intarrayDestroy 60730 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 40)) = intarrayDestroy 60731 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 48)) = intarrayOpen 60732 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 56)) = intarrayClose 60733 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 64)) = intarrayFilter 60734 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 72)) = intarrayNext 60735 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 80)) = intarrayEof 60736 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 88)) = intarrayColumn 60737 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 96)) = intarrayRowid 60738 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 8)) = jtClose 60739 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 16)) = jtRead 60740 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 24)) = jtWrite 60741 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 32)) = jtTruncate 60742 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 40)) = jtSync 60743 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 48)) = jtFileSize 60744 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 56)) = jtLock 60745 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 64)) = jtUnlock 60746 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 72)) = jtCheckReservedLock 60747 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 80)) = jtFileControl 60748 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 88)) = jtSectorSize 60749 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 96)) = jtDeviceCharacteristics 60750 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 40)) = jtOpen 60751 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 48)) = jtDelete 60752 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 56)) = jtAccess 60753 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 64)) = jtFullPathname 60754 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 72)) = jtDlOpen 60755 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 80)) = jtDlError 60756 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 88)) = jtDlSym 60757 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 96)) = jtDlClose 60758 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 104)) = jtRandomness 60759 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 112)) = jtSleep 60760 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 120)) = jtCurrentTime 60761 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 128)) = jtGetLastError 60762 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 136)) = jtCurrentTimeInt64 60763 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 16)) = prefixesConnect 60764 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 24)) = prefixesBestIndex 60765 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 32)) = prefixesDisconnect 60766 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 48)) = prefixesOpen 60767 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 56)) = prefixesClose 60768 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 64)) = prefixesFilter 60769 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 72)) = prefixesNext 60770 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 80)) = prefixesEof 60771 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 88)) = prefixesColumn 60772 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 96)) = prefixesRowid 60773 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&pzNeededCollation)) + 0)) = uintptr(unsafe.Pointer(&zNeededCollation)) 60774 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 16)) = qpvtabConnect 60775 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 24)) = qpvtabBestIndex 60776 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 32)) = qpvtabDisconnect 60777 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 48)) = qpvtabOpen 60778 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 56)) = qpvtabClose 60779 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 64)) = qpvtabFilter 60780 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 72)) = qpvtabNext 60781 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 80)) = qpvtabEof 60782 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 88)) = qpvtabColumn 60783 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 96)) = qpvtabRowid 60784 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 8)) = schemaCreate 60785 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 16)) = schemaCreate 60786 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 24)) = schemaBestIndex 60787 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 32)) = schemaDestroy 60788 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 40)) = schemaDestroy 60789 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 48)) = schemaOpen 60790 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 56)) = schemaClose 60791 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 64)) = schemaFilter 60792 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 72)) = schemaNext 60793 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 80)) = schemaEof 60794 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 88)) = schemaColumn 60795 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 96)) = schemaRowid 60796 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 16)) = seriesConnect 60797 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 24)) = seriesBestIndex 60798 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 32)) = seriesDisconnect 60799 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 48)) = seriesOpen 60800 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 56)) = seriesClose 60801 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 64)) = seriesFilter 60802 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 72)) = seriesNext 60803 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 80)) = seriesEof 60804 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 88)) = seriesColumn 60805 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 96)) = seriesRowid 60806 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 8)) = spellfix1Create 60807 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 16)) = spellfix1Connect 60808 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 24)) = spellfix1BestIndex 60809 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 32)) = spellfix1Disconnect 60810 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 40)) = spellfix1Destroy 60811 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 48)) = spellfix1Open 60812 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 56)) = spellfix1Close 60813 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 64)) = spellfix1Filter 60814 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 72)) = spellfix1Next 60815 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 80)) = spellfix1Eof 60816 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 88)) = spellfix1Column 60817 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 96)) = spellfix1Rowid 60818 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 104)) = spellfix1Update 60819 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 152)) = spellfix1Rename 60820 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 8)) = tclConnect 60821 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 16)) = tclConnect 60822 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 24)) = tclBestIndex 60823 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 32)) = tclDisconnect 60824 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 40)) = tclDisconnect 60825 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 48)) = tclOpen 60826 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 56)) = tclClose 60827 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 64)) = tclFilter 60828 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 72)) = tclNext 60829 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 80)) = tclEof 60830 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 88)) = tclColumn 60831 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 96)) = tclRowid 60832 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 8)) = tclvarConnect 60833 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 16)) = tclvarConnect 60834 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 24)) = tclvarBestIndex 60835 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 32)) = tclvarDisconnect 60836 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 40)) = tclvarDisconnect 60837 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 48)) = tclvarOpen 60838 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 56)) = tclvarClose 60839 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 64)) = tclvarFilter 60840 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 72)) = tclvarNext 60841 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 80)) = tclvarEof 60842 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 88)) = tclvarColumn 60843 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 96)) = tclvarRowid 60844 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 104)) = tclvarUpdate 60845 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 8)) = uintptr(unsafe.Pointer(&testpcacheGlobal)) 60846 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 16)) = testpcacheInit 60847 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 24)) = testpcacheShutdown 60848 *(*func(*libc.TLS, int32, int32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 32)) = testpcacheCreate 60849 *(*func(*libc.TLS, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 40)) = testpcacheCachesize 60850 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 48)) = testpcachePagecount 60851 *(*func(*libc.TLS, uintptr, uint32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 56)) = testpcacheFetch 60852 *(*func(*libc.TLS, uintptr, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 64)) = testpcacheUnpin 60853 *(*func(*libc.TLS, uintptr, uintptr, uint32, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 72)) = testpcacheRekey 60854 *(*func(*libc.TLS, uintptr, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 80)) = testpcacheTruncate 60855 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 88)) = testpcacheDestroy 60856 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 8)) = tmpClose 60857 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 16)) = tmpRead 60858 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 24)) = tmpWrite 60859 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 32)) = tmpTruncate 60860 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 40)) = tmpSync 60861 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 48)) = tmpFileSize 60862 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 56)) = tmpLock 60863 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 64)) = tmpUnlock 60864 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 72)) = tmpCheckReservedLock 60865 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 80)) = tmpFileControl 60866 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 88)) = tmpSectorSize 60867 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 96)) = tmpDeviceCharacteristics 60868 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 8)) = tvfsClose 60869 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 16)) = tvfsRead 60870 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 24)) = tvfsWrite 60871 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 32)) = tvfsTruncate 60872 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 40)) = tvfsSync 60873 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 48)) = tvfsFileSize 60874 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 56)) = tvfsLock 60875 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 64)) = tvfsUnlock 60876 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 72)) = tvfsCheckReservedLock 60877 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 80)) = tvfsFileControl 60878 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 88)) = tvfsSectorSize 60879 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 96)) = tvfsDeviceCharacteristics 60880 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 104)) = tvfsShmMap 60881 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 112)) = tvfsShmLock 60882 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 120)) = tvfsShmBarrier 60883 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 128)) = tvfsShmUnmap 60884 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 136)) = tvfsFetch 60885 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 144)) = tvfsUnfetch 60886 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 40)) = tvfsOpen 60887 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 48)) = tvfsDelete 60888 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 56)) = tvfsAccess 60889 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 64)) = tvfsFullPathname 60890 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 104)) = tvfsRandomness 60891 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 112)) = tvfsSleep 60892 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 120)) = tvfsCurrentTime 60893 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 8)) = unionConnect 60894 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 16)) = unionConnect 60895 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 24)) = unionBestIndex 60896 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 32)) = unionDisconnect 60897 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 40)) = unionDisconnect 60898 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 48)) = unionOpen 60899 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 56)) = unionClose 60900 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 64)) = unionFilter 60901 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 72)) = unionNext 60902 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 80)) = unionEof 60903 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 88)) = unionColumn 60904 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 96)) = unionRowid 60905 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 8)) = vfslogClose 60906 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 16)) = vfslogRead 60907 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 24)) = vfslogWrite 60908 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 32)) = vfslogTruncate 60909 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 40)) = vfslogSync 60910 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 48)) = vfslogFileSize 60911 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 56)) = vfslogLock 60912 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 64)) = vfslogUnlock 60913 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 72)) = vfslogCheckReservedLock 60914 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 80)) = vfslogFileControl 60915 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 88)) = vfslogSectorSize 60916 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 96)) = vfslogDeviceCharacteristics 60917 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 104)) = vfslogShmMap 60918 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 112)) = vfslogShmLock 60919 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 120)) = vfslogShmBarrier 60920 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 128)) = vfslogShmUnmap 60921 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 8)) = vlogConnect 60922 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 16)) = vlogConnect 60923 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 24)) = vlogBestIndex 60924 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 32)) = vlogDisconnect 60925 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 40)) = vlogDisconnect 60926 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 48)) = vlogOpen 60927 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 56)) = vlogClose 60928 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 64)) = vlogFilter 60929 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 72)) = vlogNext 60930 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 80)) = vlogEof 60931 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 88)) = vlogColumn 60932 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 96)) = vlogRowid 60933 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 40)) = vfslogOpen 60934 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 48)) = vfslogDelete 60935 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 56)) = vfslogAccess 60936 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 64)) = vfslogFullPathname 60937 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 72)) = vfslogDlOpen 60938 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 80)) = vfslogDlError 60939 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 88)) = vfslogDlSym 60940 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 96)) = vfslogDlClose 60941 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 104)) = vfslogRandomness 60942 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 112)) = vfslogSleep 60943 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 120)) = vfslogCurrentTime 60944 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 128)) = vfslogGetLastError 60945 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 136)) = vfslogCurrentTimeInt64 60946 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 8)) = wholenumberConnect 60947 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 16)) = wholenumberConnect 60948 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 24)) = wholenumberBestIndex 60949 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 32)) = wholenumberDisconnect 60950 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 40)) = wholenumberDisconnect 60951 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 48)) = wholenumberOpen 60952 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 56)) = wholenumberClose 60953 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 64)) = wholenumberFilter 60954 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 72)) = wholenumberNext 60955 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 80)) = wholenumberEof 60956 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 88)) = wholenumberColumn 60957 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 96)) = wholenumberRowid 60958 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 8)) = devsymClose 60959 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 16)) = devsymRead 60960 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 24)) = writecrashWrite 60961 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 32)) = devsymTruncate 60962 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 40)) = devsymSync 60963 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 48)) = devsymFileSize 60964 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 56)) = devsymLock 60965 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 64)) = devsymUnlock 60966 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 72)) = devsymCheckReservedLock 60967 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 80)) = devsymFileControl 60968 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 88)) = writecrashSectorSize 60969 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 96)) = writecrashDeviceCharacteristics 60970 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 104)) = devsymShmMap 60971 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 112)) = devsymShmLock 60972 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 120)) = devsymShmBarrier 60973 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 128)) = devsymShmUnmap 60974 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 40)) = writecrashOpen 60975 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 48)) = devsymDelete 60976 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 56)) = devsymAccess 60977 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 64)) = devsymFullPathname 60978 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 104)) = devsymRandomness 60979 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 112)) = devsymSleep 60980 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 120)) = devsymCurrentTime 60981 } 60982 60983 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" 60984 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data