gitlab.com/CoiaPrant/sqlite3@v1.19.1/internal/testfixture/testfixture_linux_386.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/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_linux_386.go -Itestdata/sqlite-src-3390300/ext/async -Itestdata/sqlite-src-3390300/ext/fts3 -Itestdata/sqlite-src-3390300/ext/icu -Itestdata/sqlite-src-3390300/ext/rtree -Itestdata/sqlite-src-3390300/ext/session -Itestdata/sqlite-src-3390300/ext/userauth -Itestdata/sqlite-src-3390300/src -Itestdata/sqlite-amalgamation-3390300 -Itestdata/sqlite-src-3390300 -full-path-comments testdata/sqlite-src-3390300/ext/expert/sqlite3expert.c testdata/sqlite-src-3390300/ext/expert/test_expert.c testdata/sqlite-src-3390300/ext/fts3/fts3_term.c testdata/sqlite-src-3390300/ext/fts3/fts3_test.c testdata/sqlite-src-3390300/ext/fts5/fts5_tcl.c testdata/sqlite-src-3390300/ext/fts5/fts5_test_mi.c testdata/sqlite-src-3390300/ext/fts5/fts5_test_tok.c testdata/sqlite-src-3390300/ext/misc/appendvfs.c testdata/sqlite-src-3390300/ext/misc/amatch.c testdata/sqlite-src-3390300/ext/misc/carray.c testdata/sqlite-src-3390300/ext/misc/cksumvfs.c testdata/sqlite-src-3390300/ext/misc/closure.c testdata/sqlite-src-3390300/ext/misc/csv.c testdata/sqlite-src-3390300/ext/misc/decimal.c testdata/sqlite-src-3390300/ext/misc/eval.c testdata/sqlite-src-3390300/ext/misc/explain.c testdata/sqlite-src-3390300/ext/misc/fileio.c testdata/sqlite-src-3390300/ext/misc/fuzzer.c testdata/sqlite-src-3390300/ext/misc/ieee754.c testdata/sqlite-src-3390300/ext/misc/mmapwarm.c testdata/sqlite-src-3390300/ext/misc/nextchar.c testdata/sqlite-src-3390300/ext/misc/normalize.c testdata/sqlite-src-3390300/ext/misc/percentile.c testdata/sqlite-src-3390300/ext/misc/prefixes.c testdata/sqlite-src-3390300/ext/misc/qpvtab.c testdata/sqlite-src-3390300/ext/misc/regexp.c testdata/sqlite-src-3390300/ext/misc/remember.c testdata/sqlite-src-3390300/ext/misc/series.c testdata/sqlite-src-3390300/ext/misc/spellfix.c testdata/sqlite-src-3390300/ext/misc/totype.c testdata/sqlite-src-3390300/ext/misc/unionvtab.c testdata/sqlite-src-3390300/ext/misc/wholenumber.c testdata/sqlite-src-3390300/ext/rbu/test_rbu.c testdata/sqlite-src-3390300/ext/rtree/test_rtreedoc.c testdata/sqlite-src-3390300/ext/session/test_session.c testdata/sqlite-src-3390300/ext/userauth/userauth.c testdata/sqlite-src-3390300/src/tclsqlite.c testdata/sqlite-src-3390300/src/test1.c testdata/sqlite-src-3390300/src/test2.c testdata/sqlite-src-3390300/src/test3.c testdata/sqlite-src-3390300/src/test4.c testdata/sqlite-src-3390300/src/test5.c testdata/sqlite-src-3390300/src/test6.c testdata/sqlite-src-3390300/src/test7.c testdata/sqlite-src-3390300/src/test8.c testdata/sqlite-src-3390300/src/test9.c testdata/sqlite-src-3390300/src/test_async.c testdata/sqlite-src-3390300/src/test_autoext.c testdata/sqlite-src-3390300/src/test_backup.c testdata/sqlite-src-3390300/src/test_bestindex.c testdata/sqlite-src-3390300/src/test_blob.c testdata/sqlite-src-3390300/src/test_btree.c testdata/sqlite-src-3390300/src/test_config.c testdata/sqlite-src-3390300/src/test_delete.c testdata/sqlite-src-3390300/src/test_demovfs.c testdata/sqlite-src-3390300/src/test_devsym.c testdata/sqlite-src-3390300/src/test_fs.c testdata/sqlite-src-3390300/src/test_func.c testdata/sqlite-src-3390300/src/test_hexio.c testdata/sqlite-src-3390300/src/test_init.c testdata/sqlite-src-3390300/src/test_intarray.c testdata/sqlite-src-3390300/src/test_journal.c testdata/sqlite-src-3390300/src/test_malloc.c testdata/sqlite-src-3390300/src/test_md5.c testdata/sqlite-src-3390300/src/test_multiplex.c testdata/sqlite-src-3390300/src/test_mutex.c testdata/sqlite-src-3390300/src/test_onefile.c testdata/sqlite-src-3390300/src/test_osinst.c testdata/sqlite-src-3390300/src/test_pcache.c testdata/sqlite-src-3390300/src/test_quota.c testdata/sqlite-src-3390300/src/test_rtree.c testdata/sqlite-src-3390300/src/test_schema.c testdata/sqlite-src-3390300/src/test_server.c testdata/sqlite-src-3390300/src/test_superlock.c testdata/sqlite-src-3390300/src/test_syscall.c testdata/sqlite-src-3390300/src/test_tclsh.c testdata/sqlite-src-3390300/src/test_tclvar.c testdata/sqlite-src-3390300/src/test_thread.c testdata/sqlite-src-3390300/src/test_vdbecov.c testdata/sqlite-src-3390300/src/test_vfs.c testdata/sqlite-src-3390300/src/test_windirent.c testdata/sqlite-src-3390300/src/test_window.c testdata/sqlite-src-3390300/src/test_wsd.c -DNDEBUG -DHAVE_USLEEP -DLONGDOUBLE_TYPE=double -DSQLITE_CKSUMVFS_STATIC -DSQLITE_CORE -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_PAGE_SIZE=1024 -DSQLITE_ENABLE_BYTECODE_VTAB -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_DESERIALIZE -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_ENABLE_MEMORY_MANAGEMENT -DSQLITE_ENABLE_OFFSET_SQL_FUNC -DSQLITE_ENABLE_PREUPDATE_HOOK -DSQLITE_ENABLE_RBU -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_SNAPSHOT -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_MUTEX_APPDEF=1 -DSQLITE_MUTEX_NOOP -DSQLITE_SOUNDEX -DSQLITE_TEMP_STORE=1 -DSQLITE_TEST -DSQLITE_THREADSAFE=1', DO NOT EDIT. 2 3 package main 4 5 import ( 6 "math" 7 "reflect" 8 "sync/atomic" 9 "unsafe" 10 11 "modernc.org/libc" 12 "modernc.org/libc/sys/types" 13 "gitlab.com/CoiaPrant/sqlite3/libtest" 14 "modernc.org/tcl/lib" 15 ) 16 17 var _ = math.Pi 18 var _ reflect.Kind 19 var _ atomic.Value 20 var _ unsafe.Pointer 21 var _ *libc.TLS 22 var _ types.Size_t 23 24 func main() { libc.Start(main1) } 25 26 const ( 27 BUFSIZ = 8192 28 EOF = -1 29 EXPERT_CONFIG_SAMPLE = 1 30 EXPERT_REPORT_CANDIDATES = 4 31 EXPERT_REPORT_INDEXES = 2 32 EXPERT_REPORT_PLAN = 3 33 EXPERT_REPORT_SQL = 1 34 FILENAME_MAX = 4096 35 FOPEN_MAX = 16 36 FTS5_TOKENIZE_AUX = 0x0008 37 FTS5_TOKENIZE_DOCUMENT = 0x0004 38 FTS5_TOKENIZE_PREFIX = 0x0002 39 FTS5_TOKENIZE_QUERY = 0x0001 40 FTS5_TOKEN_COLOCATED = 0x0001 41 FULLY_WITHIN = 2 42 HAVE_USLEEP = 1 43 IDX_HASH_SIZE = 1023 44 L_ctermid = 9 45 L_tmpnam = 20 46 NDEBUG = 1 47 NOT_WITHIN = 0 48 PARTLY_WITHIN = 1 49 P_tmpdir = "/tmp" 50 SEEK_CUR = 1 51 SEEK_END = 2 52 SEEK_SET = 0 53 SQLITE3_H = 0 54 SQLITE3_TEXT = 3 55 SQLITEEXPERT_H = 1 56 SQLITE_ABORT = 4 57 SQLITE_ABORT_ROLLBACK = 516 58 SQLITE_ACCESS_EXISTS = 0 59 SQLITE_ACCESS_READ = 2 60 SQLITE_ACCESS_READWRITE = 1 61 SQLITE_ALTER_TABLE = 26 62 SQLITE_ANALYZE = 28 63 SQLITE_ANY = 5 64 SQLITE_API = 0 65 SQLITE_APICALL = 0 66 SQLITE_ATTACH = 24 67 SQLITE_AUTH = 23 68 SQLITE_AUTH_USER = 279 69 SQLITE_BLOB = 4 70 SQLITE_BUSY = 5 71 SQLITE_BUSY_RECOVERY = 261 72 SQLITE_BUSY_SNAPSHOT = 517 73 SQLITE_BUSY_TIMEOUT = 773 74 SQLITE_CALLBACK = 0 75 SQLITE_CANTOPEN = 14 76 SQLITE_CANTOPEN_CONVPATH = 1038 77 SQLITE_CANTOPEN_DIRTYWAL = 1294 78 SQLITE_CANTOPEN_FULLPATH = 782 79 SQLITE_CANTOPEN_ISDIR = 526 80 SQLITE_CANTOPEN_NOTEMPDIR = 270 81 SQLITE_CANTOPEN_SYMLINK = 1550 82 SQLITE_CDECL = 0 83 SQLITE_CHANGESETAPPLY_INVERT = 0x0002 84 SQLITE_CHANGESETAPPLY_NOSAVEPOINT = 0x0001 85 SQLITE_CHANGESETSTART_INVERT = 0x0002 86 SQLITE_CHANGESET_ABORT = 2 87 SQLITE_CHANGESET_CONFLICT = 3 88 SQLITE_CHANGESET_CONSTRAINT = 4 89 SQLITE_CHANGESET_DATA = 1 90 SQLITE_CHANGESET_FOREIGN_KEY = 5 91 SQLITE_CHANGESET_NOTFOUND = 2 92 SQLITE_CHANGESET_OMIT = 0 93 SQLITE_CHANGESET_REPLACE = 1 94 SQLITE_CHECKPOINT_FULL = 1 95 SQLITE_CHECKPOINT_PASSIVE = 0 96 SQLITE_CHECKPOINT_RESTART = 2 97 SQLITE_CHECKPOINT_TRUNCATE = 3 98 SQLITE_CKSUMVFS_STATIC = 1 99 SQLITE_CONFIG_COVERING_INDEX_SCAN = 20 100 SQLITE_CONFIG_GETMALLOC = 5 101 SQLITE_CONFIG_GETMUTEX = 11 102 SQLITE_CONFIG_GETPCACHE = 15 103 SQLITE_CONFIG_GETPCACHE2 = 19 104 SQLITE_CONFIG_HEAP = 8 105 SQLITE_CONFIG_LOG = 16 106 SQLITE_CONFIG_LOOKASIDE = 13 107 SQLITE_CONFIG_MALLOC = 4 108 SQLITE_CONFIG_MEMDB_MAXSIZE = 29 109 SQLITE_CONFIG_MEMSTATUS = 9 110 SQLITE_CONFIG_MMAP_SIZE = 22 111 SQLITE_CONFIG_MULTITHREAD = 2 112 SQLITE_CONFIG_MUTEX = 10 113 SQLITE_CONFIG_PAGECACHE = 7 114 SQLITE_CONFIG_PCACHE = 14 115 SQLITE_CONFIG_PCACHE2 = 18 116 SQLITE_CONFIG_PCACHE_HDRSZ = 24 117 SQLITE_CONFIG_PMASZ = 25 118 SQLITE_CONFIG_SCRATCH = 6 119 SQLITE_CONFIG_SERIALIZED = 3 120 SQLITE_CONFIG_SINGLETHREAD = 1 121 SQLITE_CONFIG_SMALL_MALLOC = 27 122 SQLITE_CONFIG_SORTERREF_SIZE = 28 123 SQLITE_CONFIG_SQLLOG = 21 124 SQLITE_CONFIG_STMTJRNL_SPILL = 26 125 SQLITE_CONFIG_URI = 17 126 SQLITE_CONFIG_WIN32_HEAPSIZE = 23 127 SQLITE_CONSTRAINT = 19 128 SQLITE_CONSTRAINT_CHECK = 275 129 SQLITE_CONSTRAINT_COMMITHOOK = 531 130 SQLITE_CONSTRAINT_DATATYPE = 3091 131 SQLITE_CONSTRAINT_FOREIGNKEY = 787 132 SQLITE_CONSTRAINT_FUNCTION = 1043 133 SQLITE_CONSTRAINT_NOTNULL = 1299 134 SQLITE_CONSTRAINT_PINNED = 2835 135 SQLITE_CONSTRAINT_PRIMARYKEY = 1555 136 SQLITE_CONSTRAINT_ROWID = 2579 137 SQLITE_CONSTRAINT_TRIGGER = 1811 138 SQLITE_CONSTRAINT_UNIQUE = 2067 139 SQLITE_CONSTRAINT_VTAB = 2323 140 SQLITE_COPY = 0 141 SQLITE_CORE = 1 142 SQLITE_CORRUPT = 11 143 SQLITE_CORRUPT_INDEX = 779 144 SQLITE_CORRUPT_SEQUENCE = 523 145 SQLITE_CORRUPT_VTAB = 267 146 SQLITE_CREATE_INDEX = 1 147 SQLITE_CREATE_TABLE = 2 148 SQLITE_CREATE_TEMP_INDEX = 3 149 SQLITE_CREATE_TEMP_TABLE = 4 150 SQLITE_CREATE_TEMP_TRIGGER = 5 151 SQLITE_CREATE_TEMP_VIEW = 6 152 SQLITE_CREATE_TRIGGER = 7 153 SQLITE_CREATE_VIEW = 8 154 SQLITE_CREATE_VTABLE = 29 155 SQLITE_DBCONFIG_DEFENSIVE = 1010 156 SQLITE_DBCONFIG_DQS_DDL = 1014 157 SQLITE_DBCONFIG_DQS_DML = 1013 158 SQLITE_DBCONFIG_ENABLE_FKEY = 1002 159 SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER = 1004 160 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION = 1005 161 SQLITE_DBCONFIG_ENABLE_QPSG = 1007 162 SQLITE_DBCONFIG_ENABLE_TRIGGER = 1003 163 SQLITE_DBCONFIG_ENABLE_VIEW = 1015 164 SQLITE_DBCONFIG_LEGACY_ALTER_TABLE = 1012 165 SQLITE_DBCONFIG_LEGACY_FILE_FORMAT = 1016 166 SQLITE_DBCONFIG_LOOKASIDE = 1001 167 SQLITE_DBCONFIG_MAINDBNAME = 1000 168 SQLITE_DBCONFIG_MAX = 1017 169 SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE = 1006 170 SQLITE_DBCONFIG_RESET_DATABASE = 1009 171 SQLITE_DBCONFIG_TRIGGER_EQP = 1008 172 SQLITE_DBCONFIG_TRUSTED_SCHEMA = 1017 173 SQLITE_DBCONFIG_WRITABLE_SCHEMA = 1011 174 SQLITE_DBSTATUS_CACHE_HIT = 7 175 SQLITE_DBSTATUS_CACHE_MISS = 8 176 SQLITE_DBSTATUS_CACHE_SPILL = 12 177 SQLITE_DBSTATUS_CACHE_USED = 1 178 SQLITE_DBSTATUS_CACHE_USED_SHARED = 11 179 SQLITE_DBSTATUS_CACHE_WRITE = 9 180 SQLITE_DBSTATUS_DEFERRED_FKS = 10 181 SQLITE_DBSTATUS_LOOKASIDE_HIT = 4 182 SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL = 6 183 SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE = 5 184 SQLITE_DBSTATUS_LOOKASIDE_USED = 0 185 SQLITE_DBSTATUS_MAX = 12 186 SQLITE_DBSTATUS_SCHEMA_USED = 2 187 SQLITE_DBSTATUS_STMT_USED = 3 188 SQLITE_DEFAULT_MEMSTATUS = 0 189 SQLITE_DEFAULT_PAGE_SIZE = 1024 190 SQLITE_DELETE = 9 191 SQLITE_DENY = 1 192 SQLITE_DEPRECATED = 0 193 SQLITE_DESERIALIZE_FREEONCLOSE = 1 194 SQLITE_DESERIALIZE_READONLY = 4 195 SQLITE_DESERIALIZE_RESIZEABLE = 2 196 SQLITE_DETACH = 25 197 SQLITE_DETERMINISTIC = 0x000000800 198 SQLITE_DIRECTONLY = 0x000080000 199 SQLITE_DONE = 101 200 SQLITE_DROP_INDEX = 10 201 SQLITE_DROP_TABLE = 11 202 SQLITE_DROP_TEMP_INDEX = 12 203 SQLITE_DROP_TEMP_TABLE = 13 204 SQLITE_DROP_TEMP_TRIGGER = 14 205 SQLITE_DROP_TEMP_VIEW = 15 206 SQLITE_DROP_TRIGGER = 16 207 SQLITE_DROP_VIEW = 17 208 SQLITE_DROP_VTABLE = 30 209 SQLITE_EMPTY = 16 210 SQLITE_ENABLE_BYTECODE_VTAB = 1 211 SQLITE_ENABLE_COLUMN_METADATA = 1 212 SQLITE_ENABLE_DBPAGE_VTAB = 1 213 SQLITE_ENABLE_DBSTAT_VTAB = 1 214 SQLITE_ENABLE_DESERIALIZE = 1 215 SQLITE_ENABLE_EXPLAIN_COMMENTS = 1 216 SQLITE_ENABLE_FTS5 = 1 217 SQLITE_ENABLE_GEOPOLY = 1 218 SQLITE_ENABLE_MATH_FUNCTIONS = 1 219 SQLITE_ENABLE_MEMORY_MANAGEMENT = 1 220 SQLITE_ENABLE_OFFSET_SQL_FUNC = 1 221 SQLITE_ENABLE_PREUPDATE_HOOK = 1 222 SQLITE_ENABLE_RBU = 1 223 SQLITE_ENABLE_RTREE = 1 224 SQLITE_ENABLE_SESSION = 1 225 SQLITE_ENABLE_SNAPSHOT = 1 226 SQLITE_ENABLE_STAT4 = 1 227 SQLITE_ENABLE_STMTVTAB = 1 228 SQLITE_ENABLE_UNLOCK_NOTIFY = 1 229 SQLITE_ERROR = 1 230 SQLITE_ERROR_MISSING_COLLSEQ = 257 231 SQLITE_ERROR_RETRY = 513 232 SQLITE_ERROR_SNAPSHOT = 769 233 SQLITE_EXPERIMENTAL = 0 234 SQLITE_FAIL = 3 235 SQLITE_FCNTL_BEGIN_ATOMIC_WRITE = 31 236 SQLITE_FCNTL_BUSYHANDLER = 15 237 SQLITE_FCNTL_CHUNK_SIZE = 6 238 SQLITE_FCNTL_CKPT_DONE = 37 239 SQLITE_FCNTL_CKPT_START = 39 240 SQLITE_FCNTL_CKSM_FILE = 41 241 SQLITE_FCNTL_COMMIT_ATOMIC_WRITE = 32 242 SQLITE_FCNTL_COMMIT_PHASETWO = 22 243 SQLITE_FCNTL_DATA_VERSION = 35 244 SQLITE_FCNTL_EXTERNAL_READER = 40 245 SQLITE_FCNTL_FILE_POINTER = 7 246 SQLITE_FCNTL_GET_LOCKPROXYFILE = 2 247 SQLITE_FCNTL_HAS_MOVED = 20 248 SQLITE_FCNTL_JOURNAL_POINTER = 28 249 SQLITE_FCNTL_LAST_ERRNO = 4 250 SQLITE_FCNTL_LOCKSTATE = 1 251 SQLITE_FCNTL_LOCK_TIMEOUT = 34 252 SQLITE_FCNTL_MMAP_SIZE = 18 253 SQLITE_FCNTL_OVERWRITE = 11 254 SQLITE_FCNTL_PDB = 30 255 SQLITE_FCNTL_PERSIST_WAL = 10 256 SQLITE_FCNTL_POWERSAFE_OVERWRITE = 13 257 SQLITE_FCNTL_PRAGMA = 14 258 SQLITE_FCNTL_RBU = 26 259 SQLITE_FCNTL_RESERVE_BYTES = 38 260 SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE = 33 261 SQLITE_FCNTL_SET_LOCKPROXYFILE = 3 262 SQLITE_FCNTL_SIZE_HINT = 5 263 SQLITE_FCNTL_SIZE_LIMIT = 36 264 SQLITE_FCNTL_SYNC = 21 265 SQLITE_FCNTL_SYNC_OMITTED = 8 266 SQLITE_FCNTL_TEMPFILENAME = 16 267 SQLITE_FCNTL_TRACE = 19 268 SQLITE_FCNTL_VFSNAME = 12 269 SQLITE_FCNTL_VFS_POINTER = 27 270 SQLITE_FCNTL_WAL_BLOCK = 24 271 SQLITE_FCNTL_WIN32_AV_RETRY = 9 272 SQLITE_FCNTL_WIN32_GET_HANDLE = 29 273 SQLITE_FCNTL_WIN32_SET_HANDLE = 23 274 SQLITE_FCNTL_ZIPVFS = 25 275 SQLITE_FLOAT = 2 276 SQLITE_FORMAT = 24 277 SQLITE_FULL = 13 278 SQLITE_FUNCTION = 31 279 SQLITE_GET_LOCKPROXYFILE = 2 280 SQLITE_IGNORE = 2 281 SQLITE_INDEX_CONSTRAINT_EQ = 2 282 SQLITE_INDEX_CONSTRAINT_FUNCTION = 150 283 SQLITE_INDEX_CONSTRAINT_GE = 32 284 SQLITE_INDEX_CONSTRAINT_GLOB = 66 285 SQLITE_INDEX_CONSTRAINT_GT = 4 286 SQLITE_INDEX_CONSTRAINT_IS = 72 287 SQLITE_INDEX_CONSTRAINT_ISNOT = 69 288 SQLITE_INDEX_CONSTRAINT_ISNOTNULL = 70 289 SQLITE_INDEX_CONSTRAINT_ISNULL = 71 290 SQLITE_INDEX_CONSTRAINT_LE = 8 291 SQLITE_INDEX_CONSTRAINT_LIKE = 65 292 SQLITE_INDEX_CONSTRAINT_LIMIT = 73 293 SQLITE_INDEX_CONSTRAINT_LT = 16 294 SQLITE_INDEX_CONSTRAINT_MATCH = 64 295 SQLITE_INDEX_CONSTRAINT_NE = 68 296 SQLITE_INDEX_CONSTRAINT_OFFSET = 74 297 SQLITE_INDEX_CONSTRAINT_REGEXP = 67 298 SQLITE_INDEX_SCAN_UNIQUE = 1 299 SQLITE_INNOCUOUS = 0x000200000 300 SQLITE_INSERT = 18 301 SQLITE_INTEGER = 1 302 SQLITE_INTERNAL = 2 303 SQLITE_INTERRUPT = 9 304 SQLITE_IOCAP_ATOMIC = 0x00000001 305 SQLITE_IOCAP_ATOMIC16K = 0x00000040 306 SQLITE_IOCAP_ATOMIC1K = 0x00000004 307 SQLITE_IOCAP_ATOMIC2K = 0x00000008 308 SQLITE_IOCAP_ATOMIC32K = 0x00000080 309 SQLITE_IOCAP_ATOMIC4K = 0x00000010 310 SQLITE_IOCAP_ATOMIC512 = 0x00000002 311 SQLITE_IOCAP_ATOMIC64K = 0x00000100 312 SQLITE_IOCAP_ATOMIC8K = 0x00000020 313 SQLITE_IOCAP_BATCH_ATOMIC = 0x00004000 314 SQLITE_IOCAP_IMMUTABLE = 0x00002000 315 SQLITE_IOCAP_POWERSAFE_OVERWRITE = 0x00001000 316 SQLITE_IOCAP_SAFE_APPEND = 0x00000200 317 SQLITE_IOCAP_SEQUENTIAL = 0x00000400 318 SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN = 0x00000800 319 SQLITE_IOERR = 10 320 SQLITE_IOERR_ACCESS = 3338 321 SQLITE_IOERR_AUTH = 7178 322 SQLITE_IOERR_BEGIN_ATOMIC = 7434 323 SQLITE_IOERR_BLOCKED = 2826 324 SQLITE_IOERR_CHECKRESERVEDLOCK = 3594 325 SQLITE_IOERR_CLOSE = 4106 326 SQLITE_IOERR_COMMIT_ATOMIC = 7690 327 SQLITE_IOERR_CONVPATH = 6666 328 SQLITE_IOERR_CORRUPTFS = 8458 329 SQLITE_IOERR_DATA = 8202 330 SQLITE_IOERR_DELETE = 2570 331 SQLITE_IOERR_DELETE_NOENT = 5898 332 SQLITE_IOERR_DIR_CLOSE = 4362 333 SQLITE_IOERR_DIR_FSYNC = 1290 334 SQLITE_IOERR_FSTAT = 1802 335 SQLITE_IOERR_FSYNC = 1034 336 SQLITE_IOERR_GETTEMPPATH = 6410 337 SQLITE_IOERR_LOCK = 3850 338 SQLITE_IOERR_MMAP = 6154 339 SQLITE_IOERR_NOMEM = 3082 340 SQLITE_IOERR_RDLOCK = 2314 341 SQLITE_IOERR_READ = 266 342 SQLITE_IOERR_ROLLBACK_ATOMIC = 7946 343 SQLITE_IOERR_SEEK = 5642 344 SQLITE_IOERR_SHMLOCK = 5130 345 SQLITE_IOERR_SHMMAP = 5386 346 SQLITE_IOERR_SHMOPEN = 4618 347 SQLITE_IOERR_SHMSIZE = 4874 348 SQLITE_IOERR_SHORT_READ = 522 349 SQLITE_IOERR_TRUNCATE = 1546 350 SQLITE_IOERR_UNLOCK = 2058 351 SQLITE_IOERR_VNODE = 6922 352 SQLITE_IOERR_WRITE = 778 353 SQLITE_LAST_ERRNO = 4 354 SQLITE_LIKE_DOESNT_MATCH_BLOBS = 1 355 SQLITE_LIMIT_ATTACHED = 7 356 SQLITE_LIMIT_COLUMN = 2 357 SQLITE_LIMIT_COMPOUND_SELECT = 4 358 SQLITE_LIMIT_EXPR_DEPTH = 3 359 SQLITE_LIMIT_FUNCTION_ARG = 6 360 SQLITE_LIMIT_LENGTH = 0 361 SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8 362 SQLITE_LIMIT_SQL_LENGTH = 1 363 SQLITE_LIMIT_TRIGGER_DEPTH = 10 364 SQLITE_LIMIT_VARIABLE_NUMBER = 9 365 SQLITE_LIMIT_VDBE_OP = 5 366 SQLITE_LIMIT_WORKER_THREADS = 11 367 SQLITE_LOCKED = 6 368 SQLITE_LOCKED_SHAREDCACHE = 262 369 SQLITE_LOCKED_VTAB = 518 370 SQLITE_LOCK_EXCLUSIVE = 4 371 SQLITE_LOCK_NONE = 0 372 SQLITE_LOCK_PENDING = 3 373 SQLITE_LOCK_RESERVED = 2 374 SQLITE_LOCK_SHARED = 1 375 SQLITE_MISMATCH = 20 376 SQLITE_MISUSE = 21 377 SQLITE_MUTEX_APPDEF = 1 378 SQLITE_MUTEX_FAST = 0 379 SQLITE_MUTEX_NOOP = 1 380 SQLITE_MUTEX_RECURSIVE = 1 381 SQLITE_MUTEX_STATIC_APP1 = 8 382 SQLITE_MUTEX_STATIC_APP2 = 9 383 SQLITE_MUTEX_STATIC_APP3 = 10 384 SQLITE_MUTEX_STATIC_LRU = 6 385 SQLITE_MUTEX_STATIC_LRU2 = 7 386 SQLITE_MUTEX_STATIC_MAIN = 2 387 SQLITE_MUTEX_STATIC_MASTER = 2 388 SQLITE_MUTEX_STATIC_MEM = 3 389 SQLITE_MUTEX_STATIC_MEM2 = 4 390 SQLITE_MUTEX_STATIC_OPEN = 4 391 SQLITE_MUTEX_STATIC_PMEM = 7 392 SQLITE_MUTEX_STATIC_PRNG = 5 393 SQLITE_MUTEX_STATIC_VFS1 = 11 394 SQLITE_MUTEX_STATIC_VFS2 = 12 395 SQLITE_MUTEX_STATIC_VFS3 = 13 396 SQLITE_NOLFS = 22 397 SQLITE_NOMEM = 7 398 SQLITE_NOTADB = 26 399 SQLITE_NOTFOUND = 12 400 SQLITE_NOTICE = 27 401 SQLITE_NOTICE_RECOVER_ROLLBACK = 539 402 SQLITE_NOTICE_RECOVER_WAL = 283 403 SQLITE_NULL = 5 404 SQLITE_OK = 0 405 SQLITE_OK_LOAD_PERMANENTLY = 256 406 SQLITE_OK_SYMLINK = 512 407 SQLITE_OMIT_LOAD_EXTENSION = 1 408 SQLITE_OPEN_AUTOPROXY = 0x00000020 409 SQLITE_OPEN_CREATE = 0x00000004 410 SQLITE_OPEN_DELETEONCLOSE = 0x00000008 411 SQLITE_OPEN_EXCLUSIVE = 0x00000010 412 SQLITE_OPEN_EXRESCODE = 0x02000000 413 SQLITE_OPEN_FULLMUTEX = 0x00010000 414 SQLITE_OPEN_MAIN_DB = 0x00000100 415 SQLITE_OPEN_MAIN_JOURNAL = 0x00000800 416 SQLITE_OPEN_MASTER_JOURNAL = 0x00004000 417 SQLITE_OPEN_MEMORY = 0x00000080 418 SQLITE_OPEN_NOFOLLOW = 0x01000000 419 SQLITE_OPEN_NOMUTEX = 0x00008000 420 SQLITE_OPEN_PRIVATECACHE = 0x00040000 421 SQLITE_OPEN_READONLY = 0x00000001 422 SQLITE_OPEN_READWRITE = 0x00000002 423 SQLITE_OPEN_SHAREDCACHE = 0x00020000 424 SQLITE_OPEN_SUBJOURNAL = 0x00002000 425 SQLITE_OPEN_SUPER_JOURNAL = 0x00004000 426 SQLITE_OPEN_TEMP_DB = 0x00000200 427 SQLITE_OPEN_TEMP_JOURNAL = 0x00001000 428 SQLITE_OPEN_TRANSIENT_DB = 0x00000400 429 SQLITE_OPEN_URI = 0x00000040 430 SQLITE_OPEN_WAL = 0x00080000 431 SQLITE_PERM = 3 432 SQLITE_PRAGMA = 19 433 SQLITE_PREPARE_NORMALIZE = 0x02 434 SQLITE_PREPARE_NO_VTAB = 0x04 435 SQLITE_PREPARE_PERSISTENT = 0x01 436 SQLITE_PROTOCOL = 15 437 SQLITE_RANGE = 25 438 SQLITE_READ = 20 439 SQLITE_READONLY = 8 440 SQLITE_READONLY_CANTINIT = 1288 441 SQLITE_READONLY_CANTLOCK = 520 442 SQLITE_READONLY_DBMOVED = 1032 443 SQLITE_READONLY_DIRECTORY = 1544 444 SQLITE_READONLY_RECOVERY = 264 445 SQLITE_READONLY_ROLLBACK = 776 446 SQLITE_RECURSIVE = 33 447 SQLITE_REINDEX = 27 448 SQLITE_REPLACE = 5 449 SQLITE_ROLLBACK = 1 450 SQLITE_ROW = 100 451 SQLITE_SAVEPOINT = 32 452 SQLITE_SCANSTAT_EST = 2 453 SQLITE_SCANSTAT_EXPLAIN = 4 454 SQLITE_SCANSTAT_NAME = 3 455 SQLITE_SCANSTAT_NLOOP = 0 456 SQLITE_SCANSTAT_NVISIT = 1 457 SQLITE_SCANSTAT_SELECTID = 5 458 SQLITE_SCHEMA = 17 459 SQLITE_SELECT = 21 460 SQLITE_SERIALIZE_NOCOPY = 0x001 461 SQLITE_SERIES_CONSTRAINT_VERIFY = 1 462 SQLITE_SERVER = 1 463 SQLITE_SESSION_CONFIG_STRMSIZE = 1 464 SQLITE_SESSION_OBJCONFIG_SIZE = 1 465 SQLITE_SET_LOCKPROXYFILE = 3 466 SQLITE_SHM_EXCLUSIVE = 8 467 SQLITE_SHM_LOCK = 2 468 SQLITE_SHM_NLOCK = 8 469 SQLITE_SHM_SHARED = 4 470 SQLITE_SHM_UNLOCK = 1 471 SQLITE_SOUNDEX = 1 472 SQLITE_SOURCE_ID = "2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8" 473 SQLITE_STATUS_MALLOC_COUNT = 9 474 SQLITE_STATUS_MALLOC_SIZE = 5 475 SQLITE_STATUS_MEMORY_USED = 0 476 SQLITE_STATUS_PAGECACHE_OVERFLOW = 2 477 SQLITE_STATUS_PAGECACHE_SIZE = 7 478 SQLITE_STATUS_PAGECACHE_USED = 1 479 SQLITE_STATUS_PARSER_STACK = 6 480 SQLITE_STATUS_SCRATCH_OVERFLOW = 4 481 SQLITE_STATUS_SCRATCH_SIZE = 8 482 SQLITE_STATUS_SCRATCH_USED = 3 483 SQLITE_STDCALL = 0 484 SQLITE_STMTSTATUS_AUTOINDEX = 3 485 SQLITE_STMTSTATUS_FILTER_HIT = 8 486 SQLITE_STMTSTATUS_FILTER_MISS = 7 487 SQLITE_STMTSTATUS_FULLSCAN_STEP = 1 488 SQLITE_STMTSTATUS_MEMUSED = 99 489 SQLITE_STMTSTATUS_REPREPARE = 5 490 SQLITE_STMTSTATUS_RUN = 6 491 SQLITE_STMTSTATUS_SORT = 2 492 SQLITE_STMTSTATUS_VM_STEP = 4 493 SQLITE_SUBTYPE = 0x000100000 494 SQLITE_SYNC_DATAONLY = 0x00010 495 SQLITE_SYNC_FULL = 0x00003 496 SQLITE_SYNC_NORMAL = 0x00002 497 SQLITE_SYSAPI = 0 498 SQLITE_TEMP_STORE = 1 499 SQLITE_TEST = 1 500 SQLITE_TESTCTRL_ALWAYS = 13 501 SQLITE_TESTCTRL_ASSERT = 12 502 SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS = 10 503 SQLITE_TESTCTRL_BITVEC_TEST = 8 504 SQLITE_TESTCTRL_BYTEORDER = 22 505 SQLITE_TESTCTRL_EXPLAIN_STMT = 19 506 SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS = 29 507 SQLITE_TESTCTRL_FAULT_INSTALL = 9 508 SQLITE_TESTCTRL_FIRST = 5 509 SQLITE_TESTCTRL_IMPOSTER = 25 510 SQLITE_TESTCTRL_INTERNAL_FUNCTIONS = 17 511 SQLITE_TESTCTRL_ISINIT = 23 512 SQLITE_TESTCTRL_ISKEYWORD = 16 513 SQLITE_TESTCTRL_LAST = 33 514 SQLITE_TESTCTRL_LOCALTIME_FAULT = 18 515 SQLITE_TESTCTRL_LOGEST = 33 516 SQLITE_TESTCTRL_NEVER_CORRUPT = 20 517 SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD = 19 518 SQLITE_TESTCTRL_OPTIMIZATIONS = 15 519 SQLITE_TESTCTRL_PARSER_COVERAGE = 26 520 SQLITE_TESTCTRL_PENDING_BYTE = 11 521 SQLITE_TESTCTRL_PRNG_RESET = 7 522 SQLITE_TESTCTRL_PRNG_RESTORE = 6 523 SQLITE_TESTCTRL_PRNG_SAVE = 5 524 SQLITE_TESTCTRL_PRNG_SEED = 28 525 SQLITE_TESTCTRL_RESERVE = 14 526 SQLITE_TESTCTRL_RESULT_INTREAL = 27 527 SQLITE_TESTCTRL_SCRATCHMALLOC = 17 528 SQLITE_TESTCTRL_SEEK_COUNT = 30 529 SQLITE_TESTCTRL_SORTER_MMAP = 24 530 SQLITE_TESTCTRL_TRACEFLAGS = 31 531 SQLITE_TESTCTRL_TUNE = 32 532 SQLITE_TESTCTRL_VDBE_COVERAGE = 21 533 SQLITE_TEXT = 3 534 SQLITE_THREADSAFE = 1 535 SQLITE_TOOBIG = 18 536 SQLITE_TRACE_CLOSE = 0x08 537 SQLITE_TRACE_PROFILE = 0x02 538 SQLITE_TRACE_ROW = 0x04 539 SQLITE_TRACE_STMT = 0x01 540 SQLITE_TRANSACTION = 22 541 SQLITE_TXN_NONE = 0 542 SQLITE_TXN_READ = 1 543 SQLITE_TXN_WRITE = 2 544 SQLITE_UPDATE = 23 545 SQLITE_UTF16 = 4 546 SQLITE_UTF16BE = 3 547 SQLITE_UTF16LE = 2 548 SQLITE_UTF16_ALIGNED = 8 549 SQLITE_UTF8 = 1 550 SQLITE_VERSION = "3.39.3" 551 SQLITE_VERSION_NUMBER = 3039003 552 SQLITE_VTAB_CONSTRAINT_SUPPORT = 1 553 SQLITE_VTAB_DIRECTONLY = 3 554 SQLITE_VTAB_INNOCUOUS = 2 555 SQLITE_WARNING = 28 556 SQLITE_WARNING_AUTOINDEX = 284 557 SQLITE_WIN32_DATA_DIRECTORY_TYPE = 1 558 SQLITE_WIN32_TEMP_DIRECTORY_TYPE = 2 559 TMP_MAX = 238328 560 UNIQUE_TABLE_NAME = "t592690916721053953805701627921227776" 561 X_ANSI_STDARG_H_ = 0 562 X_ASSERT_H = 1 563 X_ATFILE_SOURCE = 1 564 X_BITS_STDIO_LIM_H = 1 565 X_BITS_TIME64_H = 1 566 X_BITS_TYPESIZES_H = 1 567 X_BITS_TYPES_H = 1 568 X_BITS_TYPES_LOCALE_T_H = 1 569 X_BITS_TYPES___LOCALE_T_H = 1 570 X_BSD_SIZE_T_ = 0 571 X_BSD_SIZE_T_DEFINED_ = 0 572 X_DEFAULT_SOURCE = 1 573 X_FEATURES_H = 1 574 X_FILE_OFFSET_BITS = 64 575 X_FTS5_H = 0 576 X_GCC_SIZE_T = 0 577 X_HAVE_SQLITE_CONFIG_H = 1 578 X_ILP32 = 1 579 X_IOFBF = 0 580 X_IOLBF = 1 581 X_IONBF = 2 582 X_IO_EOF_SEEN = 0x0010 583 X_IO_ERR_SEEN = 0x0020 584 X_IO_USER_LOCK = 0x8000 585 X_POSIX_C_SOURCE = 200809 586 X_POSIX_SOURCE = 1 587 X_SIZET_ = 0 588 X_SIZE_T = 0 589 X_SIZE_T_ = 0 590 X_SIZE_T_DECLARED = 0 591 X_SIZE_T_DEFINED = 0 592 X_SIZE_T_DEFINED_ = 0 593 X_SQLITE3RTREE_H_ = 0 594 X_STDARG_H = 0 595 X_STDC_PREDEF_H = 1 596 X_STDIO_H = 1 597 X_STRINGS_H = 1 598 X_STRING_H = 1 599 X_SYS_CDEFS_H = 1 600 X_SYS_SIZE_T_H = 0 601 X_T_SIZE = 0 602 X_T_SIZE_ = 0 603 X_VA_LIST = 0 604 X_VA_LIST_ = 0 605 X_VA_LIST_DEFINED = 0 606 X_VA_LIST_T_H = 0 607 I386 = 1 608 Linux = 1 609 Unix = 1 610 CRTIMPORT = 0 611 DLLIMPORT = 0 612 INLINE = 0 613 MP_DIGIT_DECLARED = 0 614 MP_INT_DECLARED = 0 615 NUM_STATIC_TOKENS = 20 616 SQLITE_TCLAPI = 0 617 TCL_ALLOW_INLINE_COMPILATION = 0x20000 618 TCL_ALL_EVENTS = -3 619 TCL_ALPHA_RELEASE = 0 620 TCL_APPEND_VALUE = 4 621 TCL_ARGV_CONSTANT = 15 622 TCL_ARGV_END = 23 623 TCL_ARGV_FLOAT = 19 624 TCL_ARGV_FUNC = 20 625 TCL_ARGV_GENFUNC = 21 626 TCL_ARGV_HELP = 22 627 TCL_ARGV_INT = 16 628 TCL_ARGV_REST = 18 629 TCL_ARGV_STRING = 17 630 TCL_BETA_RELEASE = 1 631 TCL_BREAK = 3 632 TCL_CANCEL_UNWIND = 0x100000 633 TCL_CHANNEL_THREAD_INSERT = 0 634 TCL_CHANNEL_THREAD_REMOVE = 1 635 TCL_CLOSE_READ = 2 636 TCL_CLOSE_WRITE = 4 637 TCL_CONTINUE = 4 638 TCL_CONVERT_MULTIBYTE = -1 639 TCL_CONVERT_NOSPACE = -4 640 TCL_CONVERT_SYNTAX = -2 641 TCL_CONVERT_UNKNOWN = -3 642 TCL_CREATE_HARD_LINK = 0x02 643 TCL_CREATE_SYMBOLIC_LINK = 0x01 644 TCL_CUSTOM_PTR_KEYS = -1 645 TCL_CUSTOM_TYPE_KEYS = -2 646 TCL_DONT_QUOTE_HASH = 8 647 TCL_DONT_USE_BRACES = 1 648 TCL_DONT_WAIT = 2 649 TCL_DOUBLE_SPACE = 27 650 TCL_DSTRING_STATIC_SIZE = 200 651 TCL_ENCODING_CHAR_LIMIT = 0x10 652 TCL_ENCODING_END = 0x02 653 TCL_ENCODING_NO_TERMINATE = 0x08 654 TCL_ENCODING_START = 0x01 655 TCL_ENCODING_STOPONERROR = 0x04 656 TCL_ENFORCE_MODE = 16 657 TCL_ENSEMBLE_PREFIX = 0x02 658 TCL_ERROR = 1 659 TCL_EVAL_DIRECT = 0x040000 660 TCL_EVAL_GLOBAL = 0x020000 661 TCL_EVAL_INVOKE = 0x080000 662 TCL_EVAL_NOERR = 0x200000 663 TCL_EXACT = 1 664 TCL_EXCEPTION = 8 665 TCL_FILE_EVENTS = 8 666 TCL_FINAL_RELEASE = 2 667 TCL_GLOBAL_ONLY = 1 668 TCL_GLOB_PERM_HIDDEN = 2 669 TCL_GLOB_PERM_R = 4 670 TCL_GLOB_PERM_RONLY = 1 671 TCL_GLOB_PERM_W = 8 672 TCL_GLOB_PERM_X = 16 673 TCL_GLOB_TYPE_BLOCK = 1 674 TCL_GLOB_TYPE_CHAR = 2 675 TCL_GLOB_TYPE_DIR = 4 676 TCL_GLOB_TYPE_FILE = 16 677 TCL_GLOB_TYPE_LINK = 32 678 TCL_GLOB_TYPE_MOUNT = 128 679 TCL_GLOB_TYPE_PIPE = 8 680 TCL_GLOB_TYPE_SOCK = 64 681 TCL_HASH_KEY_RANDOMIZE_HASH = 0x1 682 TCL_HASH_KEY_STORE_HASH = 1 683 TCL_HASH_KEY_SYSTEM_HASH = 0x2 684 TCL_HASH_KEY_TYPE_VERSION = 1 685 TCL_IDLE_EVENTS = 32 686 TCL_INTEGER_SPACE = 24 687 TCL_INTERP_DESTROYED = 0x100 688 TCL_LEAVE_ERR_MSG = 0x200 689 TCL_LIMIT_COMMANDS = 0x01 690 TCL_LIMIT_TIME = 0x02 691 TCL_LINK_BOOLEAN = 3 692 TCL_LINK_CHAR = 6 693 TCL_LINK_DOUBLE = 2 694 TCL_LINK_FLOAT = 13 695 TCL_LINK_INT = 1 696 TCL_LINK_LONG = 11 697 TCL_LINK_READ_ONLY = 0x80 698 TCL_LINK_SHORT = 8 699 TCL_LINK_STRING = 4 700 TCL_LINK_UCHAR = 7 701 TCL_LINK_UINT = 10 702 TCL_LINK_ULONG = 12 703 TCL_LINK_USHORT = 9 704 TCL_LINK_WIDE_INT = 5 705 TCL_LINK_WIDE_UINT = 14 706 TCL_LIST_ELEMENT = 8 707 TCL_LL_MODIFIER = "ll" 708 TCL_LOAD_GLOBAL = 1 709 TCL_LOAD_LAZY = 2 710 TCL_MAJOR_VERSION = 8 711 TCL_MATCH_NOCASE = 1 712 TCL_MAX_PREC = 17 713 TCL_MINOR_VERSION = 6 714 TCL_MODE_BLOCKING = 0 715 TCL_MODE_NONBLOCKING = 1 716 TCL_NAMESPACE_ONLY = 2 717 TCL_NORETURN1 = 0 718 TCL_NO_EVAL = 0x010000 719 TCL_OK = 0 720 TCL_ONE_WORD_KEYS = 1 721 TCL_PARSE_BAD_NUMBER = 9 722 TCL_PARSE_BRACE_EXTRA = 2 723 TCL_PARSE_MISSING_BRACE = 3 724 TCL_PARSE_MISSING_BRACKET = 4 725 TCL_PARSE_MISSING_PAREN = 5 726 TCL_PARSE_MISSING_QUOTE = 6 727 TCL_PARSE_MISSING_VAR_BRACE = 7 728 TCL_PARSE_PART1 = 0x400 729 TCL_PARSE_QUOTE_EXTRA = 1 730 TCL_PARSE_SUCCESS = 0 731 TCL_PARSE_SYNTAX = 8 732 TCL_PATCH_LEVEL = "8.6.11" 733 TCL_READABLE = 2 734 TCL_REG_ADVANCED = 000003 735 TCL_REG_ADVF = 000002 736 TCL_REG_BASIC = 000000 737 TCL_REG_CANMATCH = 001000 738 TCL_REG_EXPANDED = 000040 739 TCL_REG_EXTENDED = 000001 740 TCL_REG_NEWLINE = 000300 741 TCL_REG_NLANCH = 000200 742 TCL_REG_NLSTOP = 000100 743 TCL_REG_NOCASE = 000010 744 TCL_REG_NOSUB = 000020 745 TCL_REG_NOTBOL = 0001 746 TCL_REG_NOTEOL = 0002 747 TCL_REG_QUOTE = 000004 748 TCL_RELEASE_LEVEL = 2 749 TCL_RELEASE_SERIAL = 11 750 TCL_RESULT_SIZE = 200 751 TCL_RETURN = 2 752 TCL_SERVICE_ALL = 1 753 TCL_SERVICE_NONE = 0 754 TCL_SMALL_HASH_TABLE = 4 755 TCL_STDERR = 8 756 TCL_STDIN = 2 757 TCL_STDOUT = 4 758 TCL_STORAGE_CLASS = 0 759 TCL_STRING_KEYS = 0 760 TCL_SUBST_ALL = 007 761 TCL_SUBST_BACKSLASHES = 004 762 TCL_SUBST_COMMANDS = 001 763 TCL_SUBST_VARIABLES = 002 764 TCL_THREAD_CREATE_RETURN = 0 765 TCL_THREAD_JOINABLE = 1 766 TCL_THREAD_NOFLAGS = 0 767 TCL_THREAD_STACK_DEFAULT = 0 768 TCL_TIMER_EVENTS = 16 769 TCL_TOKEN_BS = 8 770 TCL_TOKEN_COMMAND = 16 771 TCL_TOKEN_EXPAND_WORD = 256 772 TCL_TOKEN_OPERATOR = 128 773 TCL_TOKEN_SIMPLE_WORD = 2 774 TCL_TOKEN_SUB_EXPR = 64 775 TCL_TOKEN_TEXT = 4 776 TCL_TOKEN_VARIABLE = 32 777 TCL_TOKEN_WORD = 1 778 TCL_TRACE_ARRAY = 0x800 779 TCL_TRACE_DELETE = 0x4000 780 TCL_TRACE_DESTROYED = 0x80 781 TCL_TRACE_OLD_STYLE = 0x1000 782 TCL_TRACE_READS = 0x10 783 TCL_TRACE_RENAME = 0x2000 784 TCL_TRACE_RESULT_DYNAMIC = 0x8000 785 TCL_TRACE_RESULT_OBJECT = 0x10000 786 TCL_TRACE_UNSETS = 0x40 787 TCL_TRACE_WRITES = 0x20 788 TCL_UNLOAD_DETACH_FROM_INTERPRETER = 1 789 TCL_UNLOAD_DETACH_FROM_PROCESS = 2 790 TCL_UTF_MAX = 3 791 TCL_VERSION = "8.6" 792 TCL_WINDOW_EVENTS = 4 793 TCL_WRITABLE = 4 794 TCL_ZLIB_COMPRESS_BEST = 9 795 TCL_ZLIB_COMPRESS_DEFAULT = -1 796 TCL_ZLIB_COMPRESS_FAST = 1 797 TCL_ZLIB_COMPRESS_NONE = 0 798 TCL_ZLIB_FINALIZE = 4 799 TCL_ZLIB_FLUSH = 2 800 TCL_ZLIB_FORMAT_AUTO = 8 801 TCL_ZLIB_FORMAT_GZIP = 4 802 TCL_ZLIB_FORMAT_RAW = 1 803 TCL_ZLIB_FORMAT_ZLIB = 2 804 TCL_ZLIB_FULLFLUSH = 3 805 TCL_ZLIB_NO_FLUSH = 0 806 TCL_ZLIB_STREAM_DEFLATE = 16 807 TCL_ZLIB_STREAM_INFLATE = 32 808 X_CLIENTDATA = 0 809 X_TCL = 0 810 X_TCLDECLS = 0 811 X_TCLPLATDECLS = 0 812 X_FTSINT_H = 0 813 FTS3_TOK_SCHEMA = "CREATE TABLE x(input HIDDEN, token, start, end, position)" 814 APND_MARK_FOS_SZ = 8 815 APND_MARK_PREFIX = "Start-Of-SQLite3-" 816 APND_MARK_PREFIX_SZ = 17 817 APND_MARK_SIZE = 25 818 APND_MAX_SIZE = 1073741824 819 APND_ROUNDUP = 4096 820 SQLITE3EXT_H = 0 821 SQLITE_EXTENSION_INIT1 = 0 822 SQLITE_EXTENSION_INIT3 = 0 823 AMATCH_COL_COMMAND = 3 824 AMATCH_COL_DISTANCE = 1 825 AMATCH_COL_LANGUAGE = 2 826 AMATCH_COL_NWORD = 4 827 AMATCH_COL_WORD = 0 828 AMATCH_MX_COST = 1000 829 AMATCH_MX_LANGID = 2147483647 830 AMATCH_MX_LENGTH = 50 831 BIG_ENDIAN = 4321 832 BYTE_ORDER = 1234 833 EXIT_FAILURE = 1 834 EXIT_SUCCESS = 0 835 FD_SETSIZE = 1024 836 LITTLE_ENDIAN = 1234 837 PDP_ENDIAN = 3412 838 RAND_MAX = 2147483647 839 WCONTINUED = 8 840 WEXITED = 4 841 WNOHANG = 1 842 WNOWAIT = 0x01000000 843 WSTOPPED = 2 844 WUNTRACED = 2 845 X_ALLOCA_H = 1 846 X_BITS_BYTESWAP_H = 1 847 X_BITS_ENDIANNESS_H = 1 848 X_BITS_ENDIAN_H = 1 849 X_BITS_FLOATN_COMMON_H = 0 850 X_BITS_FLOATN_H = 0 851 X_BITS_PTHREADTYPES_ARCH_H = 1 852 X_BITS_PTHREADTYPES_COMMON_H = 1 853 X_BITS_STDINT_INTN_H = 1 854 X_BITS_UINTN_IDENTITY_H = 1 855 X_CTYPE_H = 1 856 X_ENDIAN_H = 1 857 X_GCC_WCHAR_T = 0 858 X_RWLOCK_INTERNAL_H = 0 859 X_STDLIB_H = 1 860 X_STRUCT_TIMESPEC = 1 861 X_SYS_SELECT_H = 1 862 X_SYS_TYPES_H = 1 863 X_THREAD_MUTEX_INTERNAL_H = 1 864 X_THREAD_SHARED_TYPES_H = 1 865 X_T_WCHAR = 0 866 X_T_WCHAR_ = 0 867 X_WCHAR_T = 0 868 X_WCHAR_T_ = 0 869 X_WCHAR_T_DECLARED = 0 870 X_WCHAR_T_DEFINED = 0 871 X_WCHAR_T_DEFINED_ = 0 872 X_WCHAR_T_H = 0 873 CARRAY_COLUMN_COUNT = 2 874 CARRAY_COLUMN_CTYPE = 3 875 CARRAY_COLUMN_POINTER = 1 876 CARRAY_COLUMN_VALUE = 0 877 CARRAY_DOUBLE = 2 878 CARRAY_INT32 = 0 879 CARRAY_INT64 = 1 880 CARRAY_TEXT = 3 881 CLOSURE_COL_DEPTH = 1 882 CLOSURE_COL_ID = 0 883 CLOSURE_COL_IDCOLUMN = 4 884 CLOSURE_COL_PARENTCOLUMN = 5 885 CLOSURE_COL_ROOT = 2 886 CLOSURE_COL_TABLENAME = 3 887 CSVTEST_FIDX = 0x0001 888 CSV_INBUFSZ = 1024 889 CSV_MXERR = 200 890 EXPLN_COLUMN_ADDR = 0 891 EXPLN_COLUMN_COMMENT = 7 892 EXPLN_COLUMN_OPCODE = 1 893 EXPLN_COLUMN_P1 = 2 894 EXPLN_COLUMN_P2 = 3 895 EXPLN_COLUMN_P3 = 4 896 EXPLN_COLUMN_P4 = 5 897 EXPLN_COLUMN_P5 = 6 898 EXPLN_COLUMN_SQL = 8 899 ACCESSPERMS = 511 900 AIO_PRIO_DELTA_MAX = 20 901 ALLPERMS = 4095 902 AT_EACCESS = 0x200 903 AT_FDCWD = -100 904 AT_REMOVEDIR = 0x200 905 AT_SYMLINK_FOLLOW = 0x400 906 AT_SYMLINK_NOFOLLOW = 0x100 907 CLOCK_BOOTTIME = 7 908 CLOCK_BOOTTIME_ALARM = 9 909 CLOCK_MONOTONIC = 1 910 CLOCK_MONOTONIC_COARSE = 6 911 CLOCK_MONOTONIC_RAW = 4 912 CLOCK_PROCESS_CPUTIME_ID = 2 913 CLOCK_REALTIME = 0 914 CLOCK_REALTIME_ALARM = 8 915 CLOCK_REALTIME_COARSE = 5 916 CLOCK_TAI = 11 917 CLOCK_THREAD_CPUTIME_ID = 3 918 DEFFILEMODE = 438 919 DELAYTIMER_MAX = 2147483647 920 E2BIG = 7 921 EACCES = 13 922 EADDRINUSE = 98 923 EADDRNOTAVAIL = 99 924 EADV = 68 925 EAFNOSUPPORT = 97 926 EAGAIN = 11 927 EALREADY = 114 928 EBADE = 52 929 EBADF = 9 930 EBADFD = 77 931 EBADMSG = 74 932 EBADR = 53 933 EBADRQC = 56 934 EBADSLT = 57 935 EBFONT = 59 936 EBUSY = 16 937 ECANCELED = 125 938 ECHILD = 10 939 ECHRNG = 44 940 ECOMM = 70 941 ECONNABORTED = 103 942 ECONNREFUSED = 111 943 ECONNRESET = 104 944 EDEADLK = 35 945 EDEADLOCK = 35 946 EDESTADDRREQ = 89 947 EDOM = 33 948 EDOTDOT = 73 949 EDQUOT = 122 950 EEXIST = 17 951 EFAULT = 14 952 EFBIG = 27 953 EHOSTDOWN = 112 954 EHOSTUNREACH = 113 955 EHWPOISON = 133 956 EIDRM = 43 957 EILSEQ = 84 958 EINPROGRESS = 115 959 EINTR = 4 960 EINVAL = 22 961 EIO = 5 962 EISCONN = 106 963 EISDIR = 21 964 EISNAM = 120 965 EKEYEXPIRED = 127 966 EKEYREJECTED = 129 967 EKEYREVOKED = 128 968 EL2HLT = 51 969 EL2NSYNC = 45 970 EL3HLT = 46 971 EL3RST = 47 972 ELIBACC = 79 973 ELIBBAD = 80 974 ELIBEXEC = 83 975 ELIBMAX = 82 976 ELIBSCN = 81 977 ELNRNG = 48 978 ELOOP = 40 979 EMEDIUMTYPE = 124 980 EMFILE = 24 981 EMLINK = 31 982 EMSGSIZE = 90 983 EMULTIHOP = 72 984 ENAMETOOLONG = 36 985 ENAVAIL = 119 986 ENETDOWN = 100 987 ENETRESET = 102 988 ENETUNREACH = 101 989 ENFILE = 23 990 ENOANO = 55 991 ENOBUFS = 105 992 ENOCSI = 50 993 ENODATA = 61 994 ENODEV = 19 995 ENOENT = 2 996 ENOEXEC = 8 997 ENOKEY = 126 998 ENOLCK = 37 999 ENOLINK = 67 1000 ENOMEDIUM = 123 1001 ENOMEM = 12 1002 ENOMSG = 42 1003 ENONET = 64 1004 ENOPKG = 65 1005 ENOPROTOOPT = 92 1006 ENOSPC = 28 1007 ENOSR = 63 1008 ENOSTR = 60 1009 ENOSYS = 38 1010 ENOTBLK = 15 1011 ENOTCONN = 107 1012 ENOTDIR = 20 1013 ENOTEMPTY = 39 1014 ENOTNAM = 118 1015 ENOTRECOVERABLE = 131 1016 ENOTSOCK = 88 1017 ENOTSUP = 95 1018 ENOTTY = 25 1019 ENOTUNIQ = 76 1020 ENXIO = 6 1021 EOPNOTSUPP = 95 1022 EOVERFLOW = 75 1023 EOWNERDEAD = 130 1024 EPERM = 1 1025 EPFNOSUPPORT = 96 1026 EPIPE = 32 1027 EPROTO = 71 1028 EPROTONOSUPPORT = 93 1029 EPROTOTYPE = 91 1030 ERANGE = 34 1031 EREMCHG = 78 1032 EREMOTE = 66 1033 EREMOTEIO = 121 1034 ERESTART = 85 1035 ERFKILL = 132 1036 EROFS = 30 1037 ESHUTDOWN = 108 1038 ESOCKTNOSUPPORT = 94 1039 ESPIPE = 29 1040 ESRCH = 3 1041 ESRMNT = 69 1042 ESTALE = 116 1043 ESTRPIPE = 86 1044 ETIME = 62 1045 ETIMEDOUT = 110 1046 ETOOMANYREFS = 109 1047 ETXTBSY = 26 1048 EUCLEAN = 117 1049 EUNATCH = 49 1050 EUSERS = 87 1051 EWOULDBLOCK = 11 1052 EXDEV = 18 1053 EXFULL = 54 1054 FAPPEND = 1024 1055 FASYNC = 8192 1056 FD_CLOEXEC = 1 1057 FFSYNC = 1052672 1058 FNDELAY = 2048 1059 FNONBLOCK = 2048 1060 FSDIR_COLUMN_DATA = 3 1061 FSDIR_COLUMN_DIR = 5 1062 FSDIR_COLUMN_MODE = 1 1063 FSDIR_COLUMN_MTIME = 2 1064 FSDIR_COLUMN_NAME = 0 1065 FSDIR_COLUMN_PATH = 4 1066 FSDIR_SCHEMA = "(name,mode,mtime,data,path HIDDEN,dir HIDDEN)" 1067 F_DUPFD = 0 1068 F_DUPFD_CLOEXEC = 1030 1069 F_EXLCK = 4 1070 F_GETFD = 1 1071 F_GETFL = 3 1072 F_GETLK = 12 1073 F_GETLK64 = 12 1074 F_GETOWN = 9 1075 F_LOCK = 1 1076 F_OK = 0 1077 F_RDLCK = 0 1078 F_SETFD = 2 1079 F_SETFL = 4 1080 F_SETLK = 13 1081 F_SETLK64 = 13 1082 F_SETLKW = 14 1083 F_SETLKW64 = 14 1084 F_SETOWN = 8 1085 F_SHLCK = 8 1086 F_TEST = 3 1087 F_TLOCK = 2 1088 F_ULOCK = 0 1089 F_UNLCK = 2 1090 F_WRLCK = 1 1091 HOST_NAME_MAX = 64 1092 LOCK_EX = 2 1093 LOCK_NB = 4 1094 LOCK_SH = 1 1095 LOCK_UN = 8 1096 LOGIN_NAME_MAX = 256 1097 L_INCR = 1 1098 L_SET = 0 1099 L_XTND = 2 1100 MAXNAMLEN = 255 1101 MAX_CANON = 255 1102 MAX_INPUT = 255 1103 MQ_PRIO_MAX = 32768 1104 NAME_MAX = 255 1105 NGROUPS_MAX = 65536 1106 O_ACCMODE = 0003 1107 O_APPEND = 02000 1108 O_ASYNC = 020000 1109 O_CLOEXEC = 524288 1110 O_CREAT = 0100 1111 O_DIRECTORY = 65536 1112 O_DSYNC = 4096 1113 O_EXCL = 0200 1114 O_FSYNC = 1052672 1115 O_NDELAY = 2048 1116 O_NOCTTY = 0400 1117 O_NOFOLLOW = 131072 1118 O_NONBLOCK = 04000 1119 O_RDONLY = 00 1120 O_RDWR = 02 1121 O_RSYNC = 1052672 1122 O_SYNC = 04010000 1123 O_TRUNC = 01000 1124 O_WRONLY = 01 1125 PATH_MAX = 4096 1126 PIPE_BUF = 4096 1127 POSIX_FADV_DONTNEED = 4 1128 POSIX_FADV_NOREUSE = 5 1129 POSIX_FADV_NORMAL = 0 1130 POSIX_FADV_RANDOM = 1 1131 POSIX_FADV_SEQUENTIAL = 2 1132 POSIX_FADV_WILLNEED = 3 1133 PTHREAD_DESTRUCTOR_ITERATIONS = 4 1134 PTHREAD_KEYS_MAX = 1024 1135 PTHREAD_STACK_MIN = 16384 1136 RTSIG_MAX = 32 1137 R_OK = 4 1138 SEM_VALUE_MAX = 2147483647 1139 STDERR_FILENO = 2 1140 STDIN_FILENO = 0 1141 STDOUT_FILENO = 1 1142 S_BLKSIZE = 512 1143 S_IEXEC = 64 1144 S_IFBLK = 24576 1145 S_IFCHR = 8192 1146 S_IFDIR = 16384 1147 S_IFIFO = 4096 1148 S_IFLNK = 40960 1149 S_IFMT = 61440 1150 S_IFREG = 32768 1151 S_IFSOCK = 49152 1152 S_IREAD = 256 1153 S_IRGRP = 32 1154 S_IROTH = 4 1155 S_IRUSR = 256 1156 S_IRWXG = 56 1157 S_IRWXO = 7 1158 S_IRWXU = 448 1159 S_ISGID = 1024 1160 S_ISUID = 2048 1161 S_ISVTX = 512 1162 S_IWGRP = 16 1163 S_IWOTH = 2 1164 S_IWRITE = 128 1165 S_IWUSR = 128 1166 S_IXGRP = 8 1167 S_IXOTH = 1 1168 S_IXUSR = 64 1169 TIMER_ABSTIME = 1 1170 TIME_UTC = 1 1171 TTY_NAME_MAX = 32 1172 UTIME_NOW = 1073741823 1173 UTIME_OMIT = 1073741822 1174 W_OK = 2 1175 XATTR_LIST_MAX = 65536 1176 XATTR_NAME_MAX = 255 1177 XATTR_SIZE_MAX = 65536 1178 X_OK = 1 1179 X_ASM_GENERIC_ERRNO_BASE_H = 0 1180 X_ASM_GENERIC_ERRNO_H = 0 1181 X_BITS_ERRNO_H = 1 1182 X_BITS_POSIX1_LIM_H = 1 1183 X_BITS_POSIX_OPT_H = 1 1184 X_BITS_STAT_H = 1 1185 X_BITS_TIME_H = 1 1186 X_DIRENT_H = 1 1187 X_DIRENT_HAVE_D_OFF = 0 1188 X_DIRENT_HAVE_D_RECLEN = 0 1189 X_DIRENT_HAVE_D_TYPE = 0 1190 X_DIRENT_MATCHES_DIRENT64 = 0 1191 X_ERRNO_H = 1 1192 X_FCNTL_H = 1 1193 X_GETOPT_CORE_H = 1 1194 X_GETOPT_POSIX_H = 1 1195 X_LFS64_ASYNCHRONOUS_IO = 1 1196 X_LFS64_LARGEFILE = 1 1197 X_LFS64_STDIO = 1 1198 X_LFS_ASYNCHRONOUS_IO = 1 1199 X_LFS_LARGEFILE = 1 1200 X_LINUX_LIMITS_H = 0 1201 X_MKNOD_VER = 1 1202 X_MKNOD_VER_LINUX = 1 1203 X_MKNOD_VER_SVR4 = 2 1204 X_POSIX2_CHAR_TERM = 200809 1205 X_POSIX2_C_BIND = 200809 1206 X_POSIX2_C_DEV = 200809 1207 X_POSIX2_C_VERSION = 200809 1208 X_POSIX2_LOCALEDEF = 200809 1209 X_POSIX2_SW_DEV = 200809 1210 X_POSIX2_VERSION = 200809 1211 X_POSIX_ADVISORY_INFO = 200809 1212 X_POSIX_AIO_LISTIO_MAX = 2 1213 X_POSIX_AIO_MAX = 1 1214 X_POSIX_ARG_MAX = 4096 1215 X_POSIX_ASYNCHRONOUS_IO = 200809 1216 X_POSIX_ASYNC_IO = 1 1217 X_POSIX_BARRIERS = 200809 1218 X_POSIX_CHILD_MAX = 25 1219 X_POSIX_CHOWN_RESTRICTED = 0 1220 X_POSIX_CLOCKRES_MIN = 20000000 1221 X_POSIX_CLOCK_SELECTION = 200809 1222 X_POSIX_CPUTIME = 0 1223 X_POSIX_DELAYTIMER_MAX = 32 1224 X_POSIX_FSYNC = 200809 1225 X_POSIX_HOST_NAME_MAX = 255 1226 X_POSIX_IPV6 = 200809 1227 X_POSIX_JOB_CONTROL = 1 1228 X_POSIX_LINK_MAX = 8 1229 X_POSIX_LOGIN_NAME_MAX = 9 1230 X_POSIX_MAPPED_FILES = 200809 1231 X_POSIX_MAX_CANON = 255 1232 X_POSIX_MAX_INPUT = 255 1233 X_POSIX_MEMLOCK = 200809 1234 X_POSIX_MEMLOCK_RANGE = 200809 1235 X_POSIX_MEMORY_PROTECTION = 200809 1236 X_POSIX_MESSAGE_PASSING = 200809 1237 X_POSIX_MONOTONIC_CLOCK = 0 1238 X_POSIX_MQ_OPEN_MAX = 8 1239 X_POSIX_MQ_PRIO_MAX = 32 1240 X_POSIX_NAME_MAX = 14 1241 X_POSIX_NGROUPS_MAX = 8 1242 X_POSIX_NO_TRUNC = 1 1243 X_POSIX_OPEN_MAX = 20 1244 X_POSIX_PATH_MAX = 256 1245 X_POSIX_PIPE_BUF = 512 1246 X_POSIX_PRIORITIZED_IO = 200809 1247 X_POSIX_PRIORITY_SCHEDULING = 200809 1248 X_POSIX_RAW_SOCKETS = 200809 1249 X_POSIX_READER_WRITER_LOCKS = 200809 1250 X_POSIX_REALTIME_SIGNALS = 200809 1251 X_POSIX_REENTRANT_FUNCTIONS = 1 1252 X_POSIX_REGEXP = 1 1253 X_POSIX_RE_DUP_MAX = 255 1254 X_POSIX_RTSIG_MAX = 8 1255 X_POSIX_SAVED_IDS = 1 1256 X_POSIX_SEMAPHORES = 200809 1257 X_POSIX_SEM_NSEMS_MAX = 256 1258 X_POSIX_SEM_VALUE_MAX = 32767 1259 X_POSIX_SHARED_MEMORY_OBJECTS = 200809 1260 X_POSIX_SHELL = 1 1261 X_POSIX_SIGQUEUE_MAX = 32 1262 X_POSIX_SPAWN = 200809 1263 X_POSIX_SPIN_LOCKS = 200809 1264 X_POSIX_SPORADIC_SERVER = -1 1265 X_POSIX_SSIZE_MAX = 32767 1266 X_POSIX_STREAM_MAX = 8 1267 X_POSIX_SYMLINK_MAX = 255 1268 X_POSIX_SYMLOOP_MAX = 8 1269 X_POSIX_SYNCHRONIZED_IO = 200809 1270 X_POSIX_THREADS = 200809 1271 X_POSIX_THREAD_ATTR_STACKADDR = 200809 1272 X_POSIX_THREAD_ATTR_STACKSIZE = 200809 1273 X_POSIX_THREAD_CPUTIME = 0 1274 X_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 1275 X_POSIX_THREAD_KEYS_MAX = 128 1276 X_POSIX_THREAD_PRIORITY_SCHEDULING = 200809 1277 X_POSIX_THREAD_PRIO_INHERIT = 200809 1278 X_POSIX_THREAD_PRIO_PROTECT = 200809 1279 X_POSIX_THREAD_PROCESS_SHARED = 200809 1280 X_POSIX_THREAD_ROBUST_PRIO_INHERIT = 200809 1281 X_POSIX_THREAD_ROBUST_PRIO_PROTECT = -1 1282 X_POSIX_THREAD_SAFE_FUNCTIONS = 200809 1283 X_POSIX_THREAD_SPORADIC_SERVER = -1 1284 X_POSIX_THREAD_THREADS_MAX = 64 1285 X_POSIX_TIMEOUTS = 200809 1286 X_POSIX_TIMERS = 200809 1287 X_POSIX_TIMER_MAX = 32 1288 X_POSIX_TRACE = -1 1289 X_POSIX_TRACE_EVENT_FILTER = -1 1290 X_POSIX_TRACE_INHERIT = -1 1291 X_POSIX_TRACE_LOG = -1 1292 X_POSIX_TTY_NAME_MAX = 9 1293 X_POSIX_TYPED_MEMORY_OBJECTS = -1 1294 X_POSIX_TZNAME_MAX = 6 1295 X_POSIX_V6_ILP32_OFF32 = 1 1296 X_POSIX_V6_ILP32_OFFBIG = 1 1297 X_POSIX_V7_ILP32_OFF32 = 1 1298 X_POSIX_V7_ILP32_OFFBIG = 1 1299 X_POSIX_VDISABLE = 0 1300 X_POSIX_VERSION = 200809 1301 X_STATBUF_ST_BLKSIZE = 0 1302 X_STATBUF_ST_NSEC = 0 1303 X_STATBUF_ST_RDEV = 0 1304 X_STAT_VER = 3 1305 X_STAT_VER_KERNEL = 1 1306 X_STAT_VER_LINUX = 3 1307 X_STAT_VER_LINUX_OLD = 1 1308 X_STAT_VER_SVR4 = 2 1309 X_SYS_STAT_H = 1 1310 X_SYS_TIME_H = 1 1311 X_TIME_H = 1 1312 X_UNISTD_H = 1 1313 X_UTIME_H = 1 1314 X_XBS5_ILP32_OFF32 = 1 1315 X_XBS5_ILP32_OFFBIG = 1 1316 X_XOPEN_ENH_I18N = 1 1317 X_XOPEN_LEGACY = 1 1318 X_XOPEN_REALTIME = 1 1319 X_XOPEN_REALTIME_THREADS = 1 1320 X_XOPEN_SHM = 1 1321 X_XOPEN_UNIX = 1 1322 X_XOPEN_VERSION = 700 1323 X_XOPEN_XCU_VERSION = 4 1324 X_XOPEN_XPG2 = 1 1325 X_XOPEN_XPG3 = 1 1326 X_XOPEN_XPG4 = 1 1327 FUZZER_HASH = 4001 1328 FUZZER_MX_COST = 1000 1329 FUZZER_MX_LENGTH = 50 1330 FUZZER_MX_OUTPUT_LENGTH = 100 1331 FUZZER_MX_RULEID = 2147483647 1332 FUZZER_NQUEUE = 20 1333 CC_AND = 24 1334 CC_BANG = 15 1335 CC_COMMA = 23 1336 CC_DIGIT = 3 1337 CC_DOLLAR = 4 1338 CC_DOT = 26 1339 CC_EQ = 14 1340 CC_GT = 13 1341 CC_ID = 2 1342 CC_ILLEGAL = 27 1343 CC_KYWD = 1 1344 CC_LP = 17 1345 CC_LT = 12 1346 CC_MINUS = 11 1347 CC_PERCENT = 22 1348 CC_PIPE = 10 1349 CC_PLUS = 20 1350 CC_QUOTE = 8 1351 CC_QUOTE2 = 9 1352 CC_RP = 18 1353 CC_SEMI = 19 1354 CC_SLASH = 16 1355 CC_SPACE = 7 1356 CC_STAR = 21 1357 CC_TILDA = 25 1358 CC_VARALPHA = 5 1359 CC_VARNUM = 6 1360 CC_X = 0 1361 TK_BITAND = 3 1362 TK_BITNOT = 3 1363 TK_BITOR = 3 1364 TK_BLOB = 2 1365 TK_COMMA = 3 1366 TK_CONCAT = 3 1367 TK_DOT = 3 1368 TK_EQ = 3 1369 TK_ERROR = 4 1370 TK_FLOAT = 2 1371 TK_GE = 3 1372 TK_GT = 3 1373 TK_ID = 1 1374 TK_ILLEGAL = 4 1375 TK_INTEGER = 2 1376 TK_LE = 3 1377 TK_LITERAL = 2 1378 TK_LP = 3 1379 TK_LSHIFT = 3 1380 TK_LT = 3 1381 TK_MINUS = 3 1382 TK_NAME = 1 1383 TK_NE = 3 1384 TK_PLUS = 3 1385 TK_PUNCT = 3 1386 TK_REM = 3 1387 TK_RP = 3 1388 TK_RSHIFT = 3 1389 TK_SEMI = 3 1390 TK_SLASH = 3 1391 TK_SPACE = 0 1392 TK_STAR = 3 1393 TK_STRING = 2 1394 TK_VARIABLE = 2 1395 Deliberate_fall_through = 0 1396 QPVTAB_A = 6 1397 QPVTAB_B = 7 1398 QPVTAB_C = 8 1399 QPVTAB_CN = 2 1400 QPVTAB_D = 9 1401 QPVTAB_E = 10 1402 QPVTAB_FLAGS = 11 1403 QPVTAB_IX = 1 1404 QPVTAB_NONE = 12 1405 QPVTAB_OP = 3 1406 QPVTAB_RHS = 5 1407 QPVTAB_UX = 4 1408 QPVTAB_VN = 0 1409 RE_EOF = 0 1410 RE_OP_ACCEPT = 6 1411 RE_OP_ANY = 2 1412 RE_OP_ANYSTAR = 3 1413 RE_OP_BOUNDARY = 17 1414 RE_OP_CC_EXC = 8 1415 RE_OP_CC_INC = 7 1416 RE_OP_CC_RANGE = 10 1417 RE_OP_CC_VALUE = 9 1418 RE_OP_DIGIT = 13 1419 RE_OP_FORK = 4 1420 RE_OP_GOTO = 5 1421 RE_OP_MATCH = 1 1422 RE_OP_NOTDIGIT = 14 1423 RE_OP_NOTSPACE = 16 1424 RE_OP_NOTWORD = 12 1425 RE_OP_SPACE = 15 1426 RE_OP_WORD = 11 1427 SERIES_COLUMN_START = 1 1428 SERIES_COLUMN_STEP = 3 1429 SERIES_COLUMN_STOP = 2 1430 SERIES_COLUMN_VALUE = 0 1431 CCLASS_B = 2 1432 CCLASS_C = 3 1433 CCLASS_D = 4 1434 CCLASS_DIGIT = 10 1435 CCLASS_H = 5 1436 CCLASS_L = 6 1437 CCLASS_M = 8 1438 CCLASS_OTHER = 12 1439 CCLASS_R = 7 1440 CCLASS_SILENT = 0 1441 CCLASS_SPACE = 11 1442 CCLASS_VOWEL = 1 1443 CCLASS_Y = 9 1444 FINAL_INS_COST_DIV = 4 1445 SCRIPT_ARABIC = 0x0010 1446 SCRIPT_CYRILLIC = 0x0002 1447 SCRIPT_GREEK = 0x0004 1448 SCRIPT_HEBREW = 0x0008 1449 SCRIPT_LATIN = 0x0001 1450 SPELLFIX_COL_COMMAND = 11 1451 SPELLFIX_COL_DISTANCE = 2 1452 SPELLFIX_COL_LANGID = 3 1453 SPELLFIX_COL_MATCHLEN = 5 1454 SPELLFIX_COL_PHONEHASH = 6 1455 SPELLFIX_COL_RANK = 1 1456 SPELLFIX_COL_SCOPE = 8 1457 SPELLFIX_COL_SCORE = 4 1458 SPELLFIX_COL_SOUNDSLIKE = 10 1459 SPELLFIX_COL_SRCHCNT = 9 1460 SPELLFIX_COL_TOP = 7 1461 SPELLFIX_COL_WORD = 0 1462 SPELLFIX_IDXNUM_DIST = 48 1463 SPELLFIX_IDXNUM_DISTLE = 0x20 1464 SPELLFIX_IDXNUM_DISTLT = 0x10 1465 SPELLFIX_IDXNUM_LANGID = 0x02 1466 SPELLFIX_IDXNUM_MATCH = 0x01 1467 SPELLFIX_IDXNUM_ROWID = 0x40 1468 SPELLFIX_IDXNUM_SCOPE = 0x08 1469 SPELLFIX_IDXNUM_TOP = 0x04 1470 SPELLFIX_MX_HASH = 32 1471 SPELLFIX_MX_RUN = 1 1472 SQLITE_SPELLFIX_STACKALLOC_SZ = 1024 1473 TOTYPE_BIGENDIAN = 0 1474 TOTYPE_LITTLEENDIAN = 1 1475 SWARMVTAB_MAX_OPEN = 9 1476 SQLITE_RBU_STATE_CHECKPOINT = 3 1477 SQLITE_RBU_STATE_DONE = 4 1478 SQLITE_RBU_STATE_ERROR = 5 1479 SQLITE_RBU_STATE_MOVE = 2 1480 SQLITE_RBU_STATE_OAL = 1 1481 X_SQLITE3RBU_H = 0 1482 BTREE_APPEND = 0x08 1483 BTREE_APPLICATION_ID = 8 1484 BTREE_AUTOVACUUM_FULL = 1 1485 BTREE_AUTOVACUUM_INCR = 2 1486 BTREE_AUTOVACUUM_NONE = 0 1487 BTREE_AUXDELETE = 0x04 1488 BTREE_BLOBKEY = 2 1489 BTREE_BULKLOAD = 0x00000001 1490 BTREE_DATA_VERSION = 15 1491 BTREE_DEFAULT_CACHE_SIZE = 3 1492 BTREE_FILE_FORMAT = 2 1493 BTREE_FORDELETE = 0x00000008 1494 BTREE_FREE_PAGE_COUNT = 0 1495 BTREE_HINT_RANGE = 0 1496 BTREE_INCR_VACUUM = 7 1497 BTREE_INTKEY = 1 1498 BTREE_LARGEST_ROOT_PAGE = 4 1499 BTREE_MEMORY = 2 1500 BTREE_OMIT_JOURNAL = 1 1501 BTREE_PREFORMAT = 0x80 1502 BTREE_SAVEPOSITION = 0x02 1503 BTREE_SCHEMA_VERSION = 1 1504 BTREE_SEEK_EQ = 0x00000002 1505 BTREE_SINGLE = 4 1506 BTREE_TEXT_ENCODING = 5 1507 BTREE_UNORDERED = 8 1508 BTREE_USER_VERSION = 6 1509 BTREE_WRCSR = 0x00000004 1510 COLFLAG_BUSY = 0x0100 1511 COLFLAG_GENERATED = 0x0060 1512 COLFLAG_HASCOLL = 0x0200 1513 COLFLAG_HASTYPE = 0x0004 1514 COLFLAG_HIDDEN = 0x0002 1515 COLFLAG_NOEXPAND = 0x0400 1516 COLFLAG_NOINSERT = 0x0062 1517 COLFLAG_NOTAVAIL = 0x0080 1518 COLFLAG_PRIMKEY = 0x0001 1519 COLFLAG_SORTERREF = 0x0010 1520 COLFLAG_STORED = 0x0040 1521 COLFLAG_UNIQUE = 0x0008 1522 COLFLAG_VIRTUAL = 0x0020 1523 COLNAME_COLUMN = 4 1524 COLNAME_DATABASE = 2 1525 COLNAME_DECLTYPE = 1 1526 COLNAME_N = 5 1527 COLNAME_NAME = 0 1528 COLNAME_TABLE = 3 1529 COLTYPE_ANY = 1 1530 COLTYPE_BLOB = 2 1531 COLTYPE_CUSTOM = 0 1532 COLTYPE_INT = 3 1533 COLTYPE_INTEGER = 4 1534 COLTYPE_REAL = 5 1535 COLTYPE_TEXT = 6 1536 DBFLAG_EncodingFixed = 0x0040 1537 DBFLAG_InternalFunc = 0x0020 1538 DBFLAG_PreferBuiltin = 0x0002 1539 DBFLAG_SchemaChange = 0x0001 1540 DBFLAG_SchemaKnownOk = 0x0010 1541 DBFLAG_Vacuum = 0x0004 1542 DBFLAG_VacuumInto = 0x0008 1543 DB_ResetWanted = 0x0008 1544 DB_SchemaLoaded = 0x0001 1545 DB_UnresetViews = 0x0002 1546 ENAME_NAME = 0 1547 ENAME_SPAN = 1 1548 ENAME_TAB = 2 1549 EP_Agg = 0x000010 1550 EP_CanBeNull = 0x200000 1551 EP_Collate = 0x000200 1552 EP_Commuted = 0x000400 1553 EP_ConstFunc = 0x100000 1554 EP_DblQuoted = 0x000080 1555 EP_Distinct = 0x000004 1556 EP_FixedCol = 0x000020 1557 EP_FromDDL = 0x40000000 1558 EP_HasFunc = 0x000008 1559 EP_IfNullRow = 0x040000 1560 EP_Immutable = 0x02 1561 EP_InfixFunc = 0x000100 1562 EP_InnerON = 0x000002 1563 EP_IntValue = 0x000800 1564 EP_IsFalse = 0x20000000 1565 EP_IsTrue = 0x10000000 1566 EP_Leaf = 0x800000 1567 EP_MemToken = 0x020000 1568 EP_NoReduce = 0x01 1569 EP_OuterON = 0x000001 1570 EP_Propagate = 4194824 1571 EP_Quoted = 0x4000000 1572 EP_Reduced = 0x004000 1573 EP_Skip = 0x002000 1574 EP_Static = 0x8000000 1575 EP_Subquery = 0x400000 1576 EP_Subrtn = 0x2000000 1577 EP_TokenOnly = 0x010000 1578 EP_Unlikely = 0x080000 1579 EP_VarSelect = 0x000040 1580 EP_Win = 0x008000 1581 EP_WinFunc = 0x1000000 1582 EP_xIsSelect = 0x001000 1583 EU4_EXPR = 2 1584 EU4_IDX = 1 1585 EU4_NONE = 0 1586 EXCLUSIVE_LOCK = 4 1587 EXPRDUP_REDUCE = 0x0001 1588 GCC_VERSION = 10002001 1589 HAVE_DLFCN_H = 1 1590 HAVE_FCHOWN = 1 1591 HAVE_FDATASYNC = 1 1592 HAVE_GMTIME_R = 1 1593 HAVE_INT16_T = 1 1594 HAVE_INT32_T = 1 1595 HAVE_INT64_T = 1 1596 HAVE_INT8_T = 1 1597 HAVE_INTPTR_T = 1 1598 HAVE_INTTYPES_H = 1 1599 HAVE_ISNAN = 1 1600 HAVE_LOCALTIME_R = 1 1601 HAVE_LSTAT = 1 1602 HAVE_MALLOC_H = 1 1603 HAVE_MALLOC_USABLE_SIZE = 1 1604 HAVE_MEMORY_H = 1 1605 HAVE_PREAD = 1 1606 HAVE_PREAD64 = 1 1607 HAVE_PWRITE = 1 1608 HAVE_PWRITE64 = 1 1609 HAVE_READLINK = 1 1610 HAVE_STDINT_H = 1 1611 HAVE_STDLIB_H = 1 1612 HAVE_STRCHRNUL = 1 1613 HAVE_STRINGS_H = 1 1614 HAVE_STRING_H = 1 1615 HAVE_SYS_STAT_H = 1 1616 HAVE_SYS_TYPES_H = 1 1617 HAVE_UINT16_T = 1 1618 HAVE_UINT32_T = 1 1619 HAVE_UINT64_T = 1 1620 HAVE_UINT8_T = 1 1621 HAVE_UINTPTR_T = 1 1622 HAVE_UNISTD_H = 1 1623 HAVE_UTIME = 1 1624 INITFLAG_AlterAdd = 0x0003 1625 INITFLAG_AlterDrop = 0x0002 1626 INITFLAG_AlterMask = 0x0003 1627 INITFLAG_AlterRename = 0x0001 1628 INLINEFUNC_affinity = 4 1629 INLINEFUNC_coalesce = 0 1630 INLINEFUNC_expr_compare = 3 1631 INLINEFUNC_expr_implies_expr = 2 1632 INLINEFUNC_iif = 5 1633 INLINEFUNC_implies_nonnull_row = 1 1634 INLINEFUNC_sqlite_offset = 6 1635 INLINEFUNC_unlikely = 99 1636 INT16_MAX = 32767 1637 INT16_MIN = -32768 1638 INT32_MAX = 2147483647 1639 INT32_MIN = -2147483648 1640 INT64_MAX = 9223372036854775807 1641 INT64_MIN = -9223372036854775808 1642 INT8_MAX = 127 1643 INT8_MIN = -128 1644 INTMAX_MAX = 9223372036854775807 1645 INTMAX_MIN = -9223372036854775808 1646 INTPTR_MAX = 2147483647 1647 INTPTR_MIN = -2147483648 1648 INT_FAST16_MAX = 2147483647 1649 INT_FAST16_MIN = -2147483648 1650 INT_FAST32_MAX = 2147483647 1651 INT_FAST32_MIN = -2147483648 1652 INT_FAST64_MAX = 9223372036854775807 1653 INT_FAST64_MIN = -9223372036854775808 1654 INT_FAST8_MAX = 127 1655 INT_FAST8_MIN = -128 1656 INT_LEAST16_MAX = 32767 1657 INT_LEAST16_MIN = -32768 1658 INT_LEAST32_MAX = 2147483647 1659 INT_LEAST32_MIN = -2147483648 1660 INT_LEAST64_MAX = 9223372036854775807 1661 INT_LEAST64_MIN = -9223372036854775808 1662 INT_LEAST8_MAX = 127 1663 INT_LEAST8_MIN = -128 1664 IN_INDEX_EPH = 2 1665 IN_INDEX_INDEX_ASC = 3 1666 IN_INDEX_INDEX_DESC = 4 1667 IN_INDEX_LOOP = 0x0004 1668 IN_INDEX_MEMBERSHIP = 0x0002 1669 IN_INDEX_NOOP = 5 1670 IN_INDEX_NOOP_OK = 0x0001 1671 IN_INDEX_ROWID = 1 1672 JT_CROSS = 0x02 1673 JT_ERROR = 0x80 1674 JT_INNER = 0x01 1675 JT_LEFT = 0x08 1676 JT_LTORJ = 0x40 1677 JT_NATURAL = 0x04 1678 JT_OUTER = 0x20 1679 JT_RIGHT = 0x10 1680 KEYINFO_ORDER_BIGNULL = 0x02 1681 KEYINFO_ORDER_DESC = 0x01 1682 LEGACY_SCHEMA_TABLE = "sqlite_master" 1683 LEGACY_TEMP_SCHEMA_TABLE = "sqlite_temp_master" 1684 LOCATE_NOERR = 0x02 1685 LOCATE_VIEW = 0x01 1686 LOOKASIDE_SMALL = 128 1687 LT_OBJDIR = ".libs/" 1688 M10d_Any = 1 1689 M10d_No = 2 1690 M10d_Yes = 0 1691 MEMTYPE_HEAP = 0x01 1692 MEMTYPE_LOOKASIDE = 0x02 1693 MEMTYPE_PCACHE = 0x04 1694 MSVC_VERSION = 0 1695 NC_AllowAgg = 0x000001 1696 NC_AllowWin = 0x004000 1697 NC_Complex = 0x002000 1698 NC_FromDDL = 0x040000 1699 NC_GenCol = 0x000008 1700 NC_HasAgg = 0x000010 1701 NC_HasWin = 0x008000 1702 NC_IdxExpr = 0x000020 1703 NC_InAggFunc = 0x020000 1704 NC_IsCheck = 0x000004 1705 NC_IsDDL = 0x010000 1706 NC_MinMaxAgg = 0x001000 1707 NC_NoSelect = 0x080000 1708 NC_OrderAgg = 0x8000000 1709 NC_PartIdx = 0x000002 1710 NC_SelfRef = 0x00002e 1711 NC_UAggInfo = 0x000100 1712 NC_UBaseReg = 0x000400 1713 NC_UEList = 0x000080 1714 NC_UUpsert = 0x000200 1715 NC_VarSelect = 0x000040 1716 NO_LOCK = 0 1717 OE_Abort = 2 1718 OE_Cascade = 10 1719 OE_Default = 11 1720 OE_Fail = 3 1721 OE_Ignore = 4 1722 OE_None = 0 1723 OE_Replace = 5 1724 OE_Restrict = 7 1725 OE_Rollback = 1 1726 OE_SetDflt = 9 1727 OE_SetNull = 8 1728 OE_Update = 6 1729 OMIT_TEMPDB = 0 1730 ONEPASS_MULTI = 2 1731 ONEPASS_OFF = 0 1732 ONEPASS_SINGLE = 1 1733 OPFLAG_APPEND = 0x08 1734 OPFLAG_AUXDELETE = 0x04 1735 OPFLAG_BULKCSR = 0x01 1736 OPFLAG_EPHEM = 0x01 1737 OPFLAG_FORDELETE = 0x08 1738 OPFLAG_ISNOOP = 0x40 1739 OPFLAG_ISUPDATE = 0x04 1740 OPFLAG_LASTROWID = 0x20 1741 OPFLAG_LENGTHARG = 0x40 1742 OPFLAG_NCHANGE = 0x01 1743 OPFLAG_NOCHNG = 0x01 1744 OPFLAG_NOCHNG_MAGIC = 0x6d 1745 OPFLAG_P2ISREG = 0x10 1746 OPFLAG_PERMUTE = 0x01 1747 OPFLAG_PREFORMAT = 0x80 1748 OPFLAG_SAVEPOSITION = 0x02 1749 OPFLAG_SEEKEQ = 0x02 1750 OPFLAG_TYPEOFARG = 0x80 1751 OPFLAG_USESEEKRESULT = 0x10 1752 OPFLG_IN1 = 0x02 1753 OPFLG_IN2 = 0x04 1754 OPFLG_IN3 = 0x08 1755 OPFLG_JUMP = 0x01 1756 OPFLG_OUT2 = 0x10 1757 OPFLG_OUT3 = 0x20 1758 OP_Abortable = 186 1759 OP_Add = 106 1760 OP_AddImm = 86 1761 OP_Affinity = 96 1762 OP_AggFinal = 165 1763 OP_AggInverse = 161 1764 OP_AggStep = 162 1765 OP_AggStep1 = 163 1766 OP_AggValue = 164 1767 OP_And = 44 1768 OP_AutoCommit = 1 1769 OP_BeginSubrtn = 74 1770 OP_BitAnd = 102 1771 OP_BitNot = 114 1772 OP_BitOr = 103 1773 OP_Blob = 77 1774 OP_Cast = 88 1775 OP_Checkpoint = 3 1776 OP_Clear = 145 1777 OP_Close = 122 1778 OP_ClrSubtype = 179 1779 OP_CollSeq = 85 1780 OP_Column = 94 1781 OP_ColumnsUsed = 123 1782 OP_Compare = 90 1783 OP_Concat = 111 1784 OP_Copy = 80 1785 OP_Count = 98 1786 OP_CreateBtree = 147 1787 OP_CursorHint = 182 1788 OP_CursorLock = 167 1789 OP_CursorUnlock = 168 1790 OP_DecrJumpZero = 60 1791 OP_DeferredSeek = 141 1792 OP_Delete = 130 1793 OP_Destroy = 144 1794 OP_Divide = 109 1795 OP_DropIndex = 152 1796 OP_DropTable = 151 1797 OP_DropTrigger = 154 1798 OP_ElseEq = 58 1799 OP_EndCoroutine = 68 1800 OP_Eq = 53 1801 OP_Expire = 166 1802 OP_Explain = 185 1803 OP_Filter = 63 1804 OP_FilterAdd = 180 1805 OP_FinishSeek = 143 1806 OP_FkCheck = 83 1807 OP_FkCounter = 158 1808 OP_FkIfZero = 48 1809 OP_Found = 28 1810 OP_Function = 66 1811 OP_Ge = 57 1812 OP_Gosub = 9 1813 OP_Goto = 8 1814 OP_Gt = 54 1815 OP_Halt = 70 1816 OP_HaltIfNull = 69 1817 OP_IdxDelete = 140 1818 OP_IdxGE = 42 1819 OP_IdxGT = 40 1820 OP_IdxInsert = 138 1821 OP_IdxLE = 39 1822 OP_IdxLT = 41 1823 OP_IdxRowid = 142 1824 OP_If = 15 1825 OP_IfNoHope = 25 1826 OP_IfNot = 16 1827 OP_IfNotOpen = 24 1828 OP_IfNotZero = 59 1829 OP_IfNullRow = 18 1830 OP_IfPos = 49 1831 OP_IfSmaller = 32 1832 OP_IncrVacuum = 61 1833 OP_Init = 64 1834 OP_InitCoroutine = 10 1835 OP_Insert = 128 1836 OP_Int64 = 72 1837 OP_IntCopy = 82 1838 OP_Integer = 71 1839 OP_IntegrityCk = 155 1840 OP_IsNull = 50 1841 OP_IsNullOrType = 17 1842 OP_IsTrue = 91 1843 OP_JournalMode = 4 1844 OP_Jump = 13 1845 OP_Last = 31 1846 OP_Le = 55 1847 OP_LoadAnalysis = 150 1848 OP_Lt = 56 1849 OP_MakeRecord = 97 1850 OP_MaxPgcnt = 178 1851 OP_MemMax = 159 1852 OP_Move = 79 1853 OP_Multiply = 108 1854 OP_MustBeInt = 12 1855 OP_Ne = 52 1856 OP_NewRowid = 127 1857 OP_Next = 38 1858 OP_NoConflict = 26 1859 OP_Noop = 184 1860 OP_Not = 19 1861 OP_NotExists = 30 1862 OP_NotFound = 27 1863 OP_NotNull = 51 1864 OP_Null = 75 1865 OP_NullRow = 136 1866 OP_Offset = 93 1867 OP_OffsetLimit = 160 1868 OP_Once = 14 1869 OP_OpenAutoindex = 116 1870 OP_OpenDup = 115 1871 OP_OpenEphemeral = 118 1872 OP_OpenPseudo = 121 1873 OP_OpenRead = 112 1874 OP_OpenWrite = 113 1875 OP_Or = 43 1876 OP_Pagecount = 177 1877 OP_Param = 157 1878 OP_ParseSchema = 149 1879 OP_Permutation = 89 1880 OP_Prev = 37 1881 OP_Program = 47 1882 OP_PureFunc = 65 1883 OP_ReadCookie = 99 1884 OP_Real = 153 1885 OP_RealAffinity = 87 1886 OP_ReleaseReg = 183 1887 OP_Remainder = 110 1888 OP_ReopenIdx = 101 1889 OP_ResetCount = 131 1890 OP_ResetSorter = 146 1891 OP_ResultRow = 84 1892 OP_Return = 67 1893 OP_Rewind = 35 1894 OP_RowCell = 129 1895 OP_RowData = 134 1896 OP_RowSetAdd = 156 1897 OP_RowSetRead = 45 1898 OP_RowSetTest = 46 1899 OP_Rowid = 135 1900 OP_SCopy = 81 1901 OP_Savepoint = 0 1902 OP_SeekEnd = 137 1903 OP_SeekGE = 22 1904 OP_SeekGT = 23 1905 OP_SeekHit = 125 1906 OP_SeekLE = 21 1907 OP_SeekLT = 20 1908 OP_SeekRowid = 29 1909 OP_SeekScan = 124 1910 OP_Sequence = 126 1911 OP_SequenceTest = 120 1912 OP_SetCookie = 100 1913 OP_ShiftLeft = 104 1914 OP_ShiftRight = 105 1915 OP_SoftNull = 76 1916 OP_Sort = 34 1917 OP_SorterCompare = 132 1918 OP_SorterData = 133 1919 OP_SorterInsert = 139 1920 OP_SorterNext = 36 1921 OP_SorterOpen = 119 1922 OP_SorterSort = 33 1923 OP_SqlExec = 148 1924 OP_String = 73 1925 OP_String8 = 117 1926 OP_Subtract = 107 1927 OP_TableLock = 169 1928 OP_Trace = 181 1929 OP_Transaction = 2 1930 OP_TypeCheck = 95 1931 OP_VBegin = 170 1932 OP_VColumn = 175 1933 OP_VCreate = 171 1934 OP_VDestroy = 172 1935 OP_VFilter = 6 1936 OP_VInitIn = 174 1937 OP_VNext = 62 1938 OP_VOpen = 173 1939 OP_VRename = 176 1940 OP_VUpdate = 7 1941 OP_Vacuum = 5 1942 OP_Variable = 78 1943 OP_Yield = 11 1944 OP_ZeroOrNull = 92 1945 OS_VXWORKS = 0 1946 P4_COLLSEQ = -2 1947 P4_DYNAMIC = -6 1948 P4_EXPR = -9 1949 P4_FREE_IF_LE = -6 1950 P4_FUNCCTX = -15 1951 P4_FUNCDEF = -7 1952 P4_INT32 = -3 1953 P4_INT64 = -13 1954 P4_INTARRAY = -14 1955 P4_KEYINFO = -8 1956 P4_MEM = -10 1957 P4_NOTUSED = 0 1958 P4_REAL = -12 1959 P4_STATIC = -1 1960 P4_SUBPROGRAM = -4 1961 P4_TABLE = -5 1962 P4_TRANSIENT = 0 1963 P4_VTAB = -11 1964 P5_ConstraintCheck = 3 1965 P5_ConstraintFK = 4 1966 P5_ConstraintNotNull = 1 1967 P5_ConstraintUnique = 2 1968 PACKAGE_BUGREPORT = "" 1969 PACKAGE_NAME = "sqlite" 1970 PACKAGE_STRING = "sqlite 3.39.3" 1971 PACKAGE_TARNAME = "sqlite" 1972 PACKAGE_VERSION = "3.39.3" 1973 PAGER_CACHESPILL = 0x20 1974 PAGER_CKPT_FULLFSYNC = 0x10 1975 PAGER_FLAGS_MASK = 0x38 1976 PAGER_FULLFSYNC = 0x08 1977 PAGER_GET_NOCONTENT = 0x01 1978 PAGER_GET_READONLY = 0x02 1979 PAGER_JOURNALMODE_DELETE = 0 1980 PAGER_JOURNALMODE_MEMORY = 4 1981 PAGER_JOURNALMODE_OFF = 2 1982 PAGER_JOURNALMODE_PERSIST = 1 1983 PAGER_JOURNALMODE_QUERY = -1 1984 PAGER_JOURNALMODE_TRUNCATE = 3 1985 PAGER_JOURNALMODE_WAL = 5 1986 PAGER_LOCKINGMODE_EXCLUSIVE = 1 1987 PAGER_LOCKINGMODE_NORMAL = 0 1988 PAGER_LOCKINGMODE_QUERY = -1 1989 PAGER_MEMORY = 0x0002 1990 PAGER_OMIT_JOURNAL = 0x0001 1991 PAGER_SYNCHRONOUS_EXTRA = 0x04 1992 PAGER_SYNCHRONOUS_FULL = 0x03 1993 PAGER_SYNCHRONOUS_MASK = 0x07 1994 PAGER_SYNCHRONOUS_NORMAL = 0x02 1995 PAGER_SYNCHRONOUS_OFF = 0x01 1996 PARSE_MODE_DECLARE_VTAB = 1 1997 PARSE_MODE_NORMAL = 0 1998 PARSE_MODE_RENAME = 2 1999 PARSE_MODE_UNMAP = 3 2000 PENDING_LOCK = 3 2001 PGHDR_CLEAN = 0x001 2002 PGHDR_DIRTY = 0x002 2003 PGHDR_DONT_WRITE = 0x010 2004 PGHDR_MMAP = 0x020 2005 PGHDR_NEED_SYNC = 0x008 2006 PGHDR_WAL_APPEND = 0x040 2007 PGHDR_WRITEABLE = 0x004 2008 PREFERRED_SCHEMA_TABLE = "sqlite_schema" 2009 PREFERRED_TEMP_SCHEMA_TABLE = "sqlite_temp_schema" 2010 PRIX16 = "X" 2011 PRIX32 = "X" 2012 PRIX8 = "X" 2013 PRIXFAST8 = "X" 2014 PRIXLEAST16 = "X" 2015 PRIXLEAST32 = "X" 2016 PRIXLEAST8 = "X" 2017 PRId16 = "d" 2018 PRId32 = "d" 2019 PRId8 = "d" 2020 PRIdFAST8 = "d" 2021 PRIdLEAST16 = "d" 2022 PRIdLEAST32 = "d" 2023 PRIdLEAST8 = "d" 2024 PRIi16 = "i" 2025 PRIi32 = "i" 2026 PRIi8 = "i" 2027 PRIiFAST8 = "i" 2028 PRIiLEAST16 = "i" 2029 PRIiLEAST32 = "i" 2030 PRIiLEAST8 = "i" 2031 PRIo16 = "o" 2032 PRIo32 = "o" 2033 PRIo8 = "o" 2034 PRIoFAST8 = "o" 2035 PRIoLEAST16 = "o" 2036 PRIoLEAST32 = "o" 2037 PRIoLEAST8 = "o" 2038 PRIu16 = "u" 2039 PRIu32 = "u" 2040 PRIu8 = "u" 2041 PRIuFAST8 = "u" 2042 PRIuLEAST16 = "u" 2043 PRIuLEAST32 = "u" 2044 PRIuLEAST8 = "u" 2045 PRIx16 = "x" 2046 PRIx32 = "x" 2047 PRIx8 = "x" 2048 PRIxFAST8 = "x" 2049 PRIxLEAST16 = "x" 2050 PRIxLEAST32 = "x" 2051 PRIxLEAST8 = "x" 2052 PTRDIFF_MAX = 2147483647 2053 PTRDIFF_MIN = -2147483648 2054 RESERVED_LOCK = 2 2055 SAVEPOINT_BEGIN = 0 2056 SAVEPOINT_RELEASE = 1 2057 SAVEPOINT_ROLLBACK = 2 2058 SCHEMA_ROOT = 1 2059 SCNd16 = "hd" 2060 SCNd32 = "d" 2061 SCNd8 = "hhd" 2062 SCNdFAST8 = "hhd" 2063 SCNdLEAST16 = "hd" 2064 SCNdLEAST32 = "d" 2065 SCNdLEAST8 = "hhd" 2066 SCNi16 = "hi" 2067 SCNi32 = "i" 2068 SCNi8 = "hhi" 2069 SCNiFAST8 = "hhi" 2070 SCNiLEAST16 = "hi" 2071 SCNiLEAST32 = "i" 2072 SCNiLEAST8 = "hhi" 2073 SCNo16 = "ho" 2074 SCNo32 = "o" 2075 SCNo8 = "hho" 2076 SCNoFAST8 = "hho" 2077 SCNoLEAST16 = "ho" 2078 SCNoLEAST32 = "o" 2079 SCNoLEAST8 = "hho" 2080 SCNu16 = "hu" 2081 SCNu32 = "u" 2082 SCNu8 = "hhu" 2083 SCNuFAST8 = "hhu" 2084 SCNuLEAST16 = "hu" 2085 SCNuLEAST32 = "u" 2086 SCNuLEAST8 = "hhu" 2087 SCNx16 = "hx" 2088 SCNx32 = "x" 2089 SCNx8 = "hhx" 2090 SCNxFAST8 = "hhx" 2091 SCNxLEAST16 = "hx" 2092 SCNxLEAST32 = "x" 2093 SCNxLEAST8 = "hhx" 2094 SF_Aggregate = 0x0000008 2095 SF_All = 0x0000002 2096 SF_ComplexResult = 0x0040000 2097 SF_Compound = 0x0000100 2098 SF_Converted = 0x0010000 2099 SF_CopyCte = 0x4000000 2100 SF_Distinct = 0x0000001 2101 SF_Expanded = 0x0000040 2102 SF_FixedLimit = 0x0004000 2103 SF_HasAgg = 0x0000010 2104 SF_HasTypeInfo = 0x0000080 2105 SF_IncludeHidden = 0x0020000 2106 SF_MaybeConvert = 0x0008000 2107 SF_MinMaxAgg = 0x0001000 2108 SF_MultiPart = 0x2000000 2109 SF_MultiValue = 0x0000400 2110 SF_NestedFrom = 0x0000800 2111 SF_NoopOrderBy = 0x0400000 2112 SF_OrderByReqd = 0x8000000 2113 SF_PushDown = 0x1000000 2114 SF_Recursive = 0x0002000 2115 SF_Resolved = 0x0000004 2116 SF_UFSrcCheck = 0x0800000 2117 SF_UsesEphemeral = 0x0000020 2118 SF_Values = 0x0000200 2119 SF_View = 0x0200000 2120 SF_WhereBegin = 0x0080000 2121 SF_WinRewrite = 0x0100000 2122 SHARED_LOCK = 1 2123 SHARED_SIZE = 510 2124 SIG_ATOMIC_MAX = 2147483647 2125 SIG_ATOMIC_MIN = -2147483648 2126 SIZE_MAX = 4294967295 2127 SQLITECONFIG_H = 1 2128 SQLITEINT_H = 0 2129 SQLITE_AFF_BLOB = 0x41 2130 SQLITE_AFF_INTEGER = 0x44 2131 SQLITE_AFF_MASK = 0x47 2132 SQLITE_AFF_NONE = 0x40 2133 SQLITE_AFF_NUMERIC = 0x43 2134 SQLITE_AFF_REAL = 0x45 2135 SQLITE_AFF_TEXT = 0x42 2136 SQLITE_ASCII = 1 2137 SQLITE_ATOMIC_INTRINSICS = 1 2138 SQLITE_AllOpts = 0xffffffff 2139 SQLITE_AutoIndex = 0x00008000 2140 SQLITE_BIGENDIAN = 0 2141 SQLITE_BTREE_H = 0 2142 SQLITE_BYTEORDER = 1234 2143 SQLITE_BalancedMerge = 0x00200000 2144 SQLITE_BloomFilter = 0x00080000 2145 SQLITE_BloomPulldown = 0x00100000 2146 SQLITE_CacheSpill = 0x00000020 2147 SQLITE_CellSizeCk = 0x00200000 2148 SQLITE_CkptFullFSync = 0x00000010 2149 SQLITE_CountOfView = 0x00000200 2150 SQLITE_CoverIdxScan = 0x00000020 2151 SQLITE_CursorHints = 0x00000400 2152 SQLITE_DEFAULT_AUTOVACUUM = 0 2153 SQLITE_DEFAULT_CACHE_SIZE = -2000 2154 SQLITE_DEFAULT_FILE_FORMAT = 4 2155 SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT = -1 2156 SQLITE_DEFAULT_MMAP_SIZE = 0 2157 SQLITE_DEFAULT_PCACHE_INITSZ = 20 2158 SQLITE_DEFAULT_RECURSIVE_TRIGGERS = 0 2159 SQLITE_DEFAULT_SECTOR_SIZE = 4096 2160 SQLITE_DEFAULT_SORTERREF_SIZE = 0x7fffffff 2161 SQLITE_DEFAULT_SYNCHRONOUS = 2 2162 SQLITE_DEFAULT_WAL_AUTOCHECKPOINT = 1000 2163 SQLITE_DEFAULT_WAL_SYNCHRONOUS = 2 2164 SQLITE_DEFAULT_WORKER_THREADS = 0 2165 SQLITE_Defensive = 0x10000000 2166 SQLITE_DeferFKs = 0x00080000 2167 SQLITE_DistinctOpt = 0x00000010 2168 SQLITE_DqsDDL = 0x20000000 2169 SQLITE_DqsDML = 0x40000000 2170 SQLITE_ECEL_DUP = 0x01 2171 SQLITE_ECEL_FACTOR = 0x02 2172 SQLITE_ECEL_OMITREF = 0x08 2173 SQLITE_ECEL_REF = 0x04 2174 SQLITE_EnableQPSG = 0x00800000 2175 SQLITE_EnableTrigger = 0x00040000 2176 SQLITE_EnableView = 0x80000000 2177 SQLITE_FAULTINJECTOR_COUNT = 1 2178 SQLITE_FAULTINJECTOR_MALLOC = 0 2179 SQLITE_FCNTL_DB_UNCHANGED = 0xca093fa0 2180 SQLITE_FUNC_ANYORDER = 0x08000000 2181 SQLITE_FUNC_BUILTIN = 0x00800000 2182 SQLITE_FUNC_CASE = 0x0008 2183 SQLITE_FUNC_CONSTANT = 0x0800 2184 SQLITE_FUNC_COUNT = 0x0100 2185 SQLITE_FUNC_DIRECT = 0x00080000 2186 SQLITE_FUNC_ENCMASK = 0x0003 2187 SQLITE_FUNC_EPHEM = 0x0010 2188 SQLITE_FUNC_HASH_SZ = 23 2189 SQLITE_FUNC_INLINE = 0x00400000 2190 SQLITE_FUNC_INTERNAL = 0x00040000 2191 SQLITE_FUNC_LENGTH = 0x0040 2192 SQLITE_FUNC_LIKE = 0x0004 2193 SQLITE_FUNC_MINMAX = 0x1000 2194 SQLITE_FUNC_NEEDCOLL = 0x0020 2195 SQLITE_FUNC_SLOCHNG = 0x2000 2196 SQLITE_FUNC_SUBTYPE = 0x00100000 2197 SQLITE_FUNC_TEST = 0x4000 2198 SQLITE_FUNC_TYPEOF = 0x0080 2199 SQLITE_FUNC_UNLIKELY = 0x0400 2200 SQLITE_FUNC_UNSAFE = 0x00200000 2201 SQLITE_FUNC_WINDOW = 0x00010000 2202 SQLITE_FactorOutConst = 0x00000008 2203 SQLITE_FlttnUnionAll = 0x00800000 2204 SQLITE_ForeignKeys = 0x00004000 2205 SQLITE_Fts3Tokenizer = 0x00400000 2206 SQLITE_FullColNames = 0x00000004 2207 SQLITE_FullFSync = 0x00000008 2208 SQLITE_GroupByOrder = 0x00000004 2209 SQLITE_HASH_H = 0 2210 SQLITE_HAVE_C99_MATH_FUNCS = 1 2211 SQLITE_HAVE_OS_TRACE = 0 2212 SQLITE_IDXTYPE_APPDEF = 0 2213 SQLITE_IDXTYPE_IPK = 3 2214 SQLITE_IDXTYPE_PRIMARYKEY = 2 2215 SQLITE_IDXTYPE_UNIQUE = 1 2216 SQLITE_IOERR_NOMEM_BKPT = 3082 2217 SQLITE_IgnoreChecks = 0x00000200 2218 SQLITE_JUMPIFNULL = 0x10 2219 SQLITE_LITTLEENDIAN = 1 2220 SQLITE_LegacyAlter = 0x04000000 2221 SQLITE_LegacyFileFmt = 0x00000002 2222 SQLITE_LoadExtFunc = 0x00020000 2223 SQLITE_LoadExtension = 0x00010000 2224 SQLITE_MALLOC_SOFT_LIMIT = 1024 2225 SQLITE_MAX_ATTACHED = 10 2226 SQLITE_MAX_COLUMN = 2000 2227 SQLITE_MAX_COMPOUND_SELECT = 500 2228 SQLITE_MAX_DB = 12 2229 SQLITE_MAX_DEFAULT_PAGE_SIZE = 8192 2230 SQLITE_MAX_EXPR_DEPTH = 1000 2231 SQLITE_MAX_FILE_FORMAT = 4 2232 SQLITE_MAX_FUNCTION_ARG = 127 2233 SQLITE_MAX_LENGTH = 1000000000 2234 SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000 2235 SQLITE_MAX_MMAP_SIZE = 0x7fff0000 2236 SQLITE_MAX_PAGE_COUNT = 1073741823 2237 SQLITE_MAX_PAGE_SIZE = 65536 2238 SQLITE_MAX_PATHLEN = 4096 2239 SQLITE_MAX_SQL_LENGTH = 1000000000 2240 SQLITE_MAX_SYMLINK = 200 2241 SQLITE_MAX_TRIGGER_DEPTH = 1000 2242 SQLITE_MAX_VARIABLE_NUMBER = 32766 2243 SQLITE_MAX_VDBE_OP = 250000000 2244 SQLITE_MAX_WORKER_THREADS = 8 2245 SQLITE_MSVC_H = 0 2246 SQLITE_MUTEX_STATIC_TEMPDIR = 11 2247 SQLITE_MX_JUMP_OPCODE = 64 2248 SQLITE_MinMaxOpt = 0x00010000 2249 SQLITE_NEED_ERR_NAME = 0 2250 SQLITE_NOMEM_BKPT = 7 2251 SQLITE_NOTNULL = 0x90 2252 SQLITE_NTUNE = 6 2253 SQLITE_NULLEQ = 0x80 2254 SQLITE_N_BTREE_META = 16 2255 SQLITE_N_LIMIT = 12 2256 SQLITE_N_STDTYPE = 6 2257 SQLITE_NoCkptOnClose = 0x00000800 2258 SQLITE_NoSchemaError = 0x08000000 2259 SQLITE_NullCallback = 0x00000100 2260 SQLITE_OS_OTHER = 0 2261 SQLITE_OS_SETUP_H = 0 2262 SQLITE_OS_UNIX = 1 2263 SQLITE_OS_WIN = 0 2264 SQLITE_OmitNoopJoin = 0x00000100 2265 SQLITE_OmitOrderBy = 0x00040000 2266 SQLITE_OrderByIdxJoin = 0x00000040 2267 SQLITE_PAGER_H = 0 2268 SQLITE_POWERSAFE_OVERWRITE = 1 2269 SQLITE_PREPARE_MASK = 0x0f 2270 SQLITE_PREPARE_SAVESQL = 0x80 2271 SQLITE_PRINTF_INTERNAL = 0x01 2272 SQLITE_PRINTF_MALLOCED = 0x04 2273 SQLITE_PRINTF_SQLFUNC = 0x02 2274 SQLITE_PTRSIZE = 4 2275 SQLITE_PropagateConst = 0x00008000 2276 SQLITE_PushDown = 0x00001000 2277 SQLITE_QueryFlattener = 0x00000001 2278 SQLITE_QueryOnly = 0x00100000 2279 SQLITE_ReadUncommit = 0x00000400 2280 SQLITE_RecTriggers = 0x00002000 2281 SQLITE_ReleaseReg = 0x00400000 2282 SQLITE_ResetDatabase = 0x02000000 2283 SQLITE_ReverseOrder = 0x00001000 2284 SQLITE_SO_ASC = 0 2285 SQLITE_SO_DESC = 1 2286 SQLITE_SO_UNDEFINED = -1 2287 SQLITE_STATE_BUSY = 0x6d 2288 SQLITE_STATE_CLOSED = 0xce 2289 SQLITE_STATE_ERROR = 0xd5 2290 SQLITE_STATE_OPEN = 0x76 2291 SQLITE_STATE_SICK = 0xba 2292 SQLITE_STATE_ZOMBIE = 0xa7 2293 SQLITE_SYSTEM_MALLOC = 1 2294 SQLITE_SeekScan = 0x00020000 2295 SQLITE_ShortColNames = 0x00000040 2296 SQLITE_SimplifyJoin = 0x00002000 2297 SQLITE_SkipScan = 0x00004000 2298 SQLITE_Stat4 = 0x00000800 2299 SQLITE_TEMP_FILE_PREFIX = "etilqs_" 2300 SQLITE_TOKEN_KEYWORD = 0x2 2301 SQLITE_TOKEN_QUOTED = 0x1 2302 SQLITE_TRACE_LEGACY = 0x40 2303 SQLITE_TRACE_NONLEGACY_MASK = 0x0f 2304 SQLITE_TRACE_XPROFILE = 0x80 2305 SQLITE_Transitive = 0x00000080 2306 SQLITE_TriggerEQP = 0x01000000 2307 SQLITE_TrustedSchema = 0x00000080 2308 SQLITE_UTF16NATIVE = 2 2309 SQLITE_VDBE_H = 0 2310 SQLITE_VTABRISK_High = 2 2311 SQLITE_VTABRISK_Low = 0 2312 SQLITE_VTABRISK_Normal = 1 2313 SQLITE_WSD = 0 2314 SQLITE_WindowFunc = 0x00000002 2315 SQLITE_WriteSchema = 0x00000001 2316 SRT_Coroutine = 13 2317 SRT_Discard = 4 2318 SRT_DistFifo = 5 2319 SRT_DistQueue = 6 2320 SRT_EphemTab = 12 2321 SRT_Except = 2 2322 SRT_Exists = 3 2323 SRT_Fifo = 8 2324 SRT_Mem = 10 2325 SRT_Output = 9 2326 SRT_Queue = 7 2327 SRT_Set = 11 2328 SRT_Table = 14 2329 SRT_Union = 1 2330 SRT_Upfrom = 15 2331 STDC_HEADERS = 1 2332 TABTYP_NORM = 0 2333 TABTYP_VIEW = 2 2334 TABTYP_VTAB = 1 2335 TF_Autoincrement = 0x00000008 2336 TF_Ephemeral = 0x00004000 2337 TF_Eponymous = 0x00008000 2338 TF_HasGenerated = 0x00000060 2339 TF_HasHidden = 0x00000002 2340 TF_HasNotNull = 0x00000800 2341 TF_HasPrimaryKey = 0x00000004 2342 TF_HasStat1 = 0x00000010 2343 TF_HasStat4 = 0x00002000 2344 TF_HasStored = 0x00000040 2345 TF_HasVirtual = 0x00000020 2346 TF_NoVisibleRowid = 0x00000200 2347 TF_OOOHidden = 0x00000400 2348 TF_Readonly = 0x00000001 2349 TF_Shadow = 0x00001000 2350 TF_StatsUsed = 0x00000100 2351 TF_Strict = 0x00010000 2352 TF_WithoutRowid = 0x00000080 2353 TK_ABORT = 27 2354 TK_ACTION = 28 2355 TK_ADD = 163 2356 TK_AFTER = 29 2357 TK_AGG_COLUMN = 169 2358 TK_AGG_FUNCTION = 168 2359 TK_ALL = 135 2360 TK_ALTER = 162 2361 TK_ALWAYS = 96 2362 TK_ANALYZE = 30 2363 TK_AND = 44 2364 TK_ANY = 101 2365 TK_AS = 24 2366 TK_ASC = 31 2367 TK_ASTERISK = 180 2368 TK_ATTACH = 32 2369 TK_AUTOINCR = 126 2370 TK_BEFORE = 33 2371 TK_BEGIN = 5 2372 TK_BETWEEN = 48 2373 TK_BY = 34 2374 TK_CASCADE = 35 2375 TK_CASE = 157 2376 TK_CAST = 36 2377 TK_CHECK = 124 2378 TK_COLLATE = 113 2379 TK_COLUMN = 167 2380 TK_COLUMNKW = 60 2381 TK_COMMIT = 10 2382 TK_CONFLICT = 37 2383 TK_CONSTRAINT = 119 2384 TK_CREATE = 17 2385 TK_CTIME_KW = 100 2386 TK_CURRENT = 85 2387 TK_DATABASE = 38 2388 TK_DEFAULT = 120 2389 TK_DEFERRABLE = 131 2390 TK_DEFERRED = 7 2391 TK_DELETE = 128 2392 TK_DESC = 39 2393 TK_DETACH = 40 2394 TK_DISTINCT = 140 2395 TK_DO = 61 2396 TK_DROP = 133 2397 TK_EACH = 41 2398 TK_ELSE = 160 2399 TK_END = 11 2400 TK_ESCAPE = 58 2401 TK_EXCEPT = 136 2402 TK_EXCLUDE = 91 2403 TK_EXCLUSIVE = 9 2404 TK_EXISTS = 20 2405 TK_EXPLAIN = 2 2406 TK_FAIL = 42 2407 TK_FILTER = 166 2408 TK_FIRST = 83 2409 TK_FOLLOWING = 86 2410 TK_FOR = 62 2411 TK_FOREIGN = 132 2412 TK_FROM = 142 2413 TK_FUNCTION = 172 2414 TK_GENERATED = 95 2415 TK_GROUP = 146 2416 TK_GROUPS = 92 2417 TK_HAVING = 147 2418 TK_IF = 18 2419 TK_IF_NULL_ROW = 179 2420 TK_IGNORE = 63 2421 TK_IMMEDIATE = 8 2422 TK_IN = 49 2423 TK_INDEX = 161 2424 TK_INDEXED = 116 2425 TK_INITIALLY = 64 2426 TK_INSERT = 127 2427 TK_INSTEAD = 65 2428 TK_INTERSECT = 137 2429 TK_INTO = 151 2430 TK_IS = 45 2431 TK_ISNOT = 171 2432 TK_ISNULL = 50 2433 TK_JOIN = 143 2434 TK_JOIN_KW = 118 2435 TK_KEY = 67 2436 TK_LAST = 84 2437 TK_LIKE_KW = 47 2438 TK_LIMIT = 148 2439 TK_MATCH = 46 2440 TK_MATERIALIZED = 97 2441 TK_NO = 66 2442 TK_NOT = 19 2443 TK_NOTHING = 152 2444 TK_NOTNULL = 51 2445 TK_NULL = 121 2446 TK_NULLS = 82 2447 TK_OF = 68 2448 TK_OFFSET = 69 2449 TK_ON = 115 2450 TK_OR = 43 2451 TK_ORDER = 145 2452 TK_OTHERS = 93 2453 TK_OVER = 165 2454 TK_PARTITION = 87 2455 TK_PLAN = 4 2456 TK_PRAGMA = 70 2457 TK_PRECEDING = 88 2458 TK_PRIMARY = 122 2459 TK_PTR = 112 2460 TK_QUERY = 3 2461 TK_RAISE = 71 2462 TK_RANGE = 89 2463 TK_RECURSIVE = 72 2464 TK_REFERENCES = 125 2465 TK_REGISTER = 176 2466 TK_REINDEX = 98 2467 TK_RELEASE = 14 2468 TK_RENAME = 99 2469 TK_REPLACE = 73 2470 TK_RESTRICT = 74 2471 TK_RETURNING = 150 2472 TK_ROLLBACK = 12 2473 TK_ROW = 75 2474 TK_ROWS = 76 2475 TK_SAVEPOINT = 13 2476 TK_SELECT = 138 2477 TK_SELECT_COLUMN = 178 2478 TK_SET = 130 2479 TK_SPAN = 181 2480 TK_TABLE = 16 2481 TK_TEMP = 21 2482 TK_THEN = 159 2483 TK_TIES = 94 2484 TK_TO = 15 2485 TK_TRANSACTION = 6 2486 TK_TRIGGER = 77 2487 TK_TRUEFALSE = 170 2488 TK_TRUTH = 175 2489 TK_UMINUS = 173 2490 TK_UNBOUNDED = 90 2491 TK_UNION = 134 2492 TK_UNIQUE = 123 2493 TK_UPDATE = 129 2494 TK_UPLUS = 174 2495 TK_USING = 144 2496 TK_VACUUM = 78 2497 TK_VALUES = 139 2498 TK_VECTOR = 177 2499 TK_VIEW = 79 2500 TK_VIRTUAL = 80 2501 TK_WHEN = 158 2502 TK_WHERE = 149 2503 TK_WINDOW = 164 2504 TK_WITH = 81 2505 TK_WITHOUT = 26 2506 TREETRACE_ENABLED = 0 2507 TRIGGER_AFTER = 2 2508 TRIGGER_BEFORE = 1 2509 UINT16_MAX = 65535 2510 UINT32_MAX = 4294967295 2511 UINT64_MAX = 18446744073709551615 2512 UINT8_MAX = 255 2513 UINTMAX_MAX = 18446744073709551615 2514 UINTPTR_MAX = 4294967295 2515 UINT_FAST16_MAX = 4294967295 2516 UINT_FAST32_MAX = 4294967295 2517 UINT_FAST64_MAX = 18446744073709551615 2518 UINT_FAST8_MAX = 255 2519 UINT_LEAST16_MAX = 65535 2520 UINT_LEAST32_MAX = 4294967295 2521 UINT_LEAST64_MAX = 18446744073709551615 2522 UINT_LEAST8_MAX = 255 2523 WCHAR_MAX = 2147483647 2524 WCHAR_MIN = -2147483648 2525 WHERE_AGG_DISTINCT = 0x0400 2526 WHERE_DISTINCTBY = 0x0080 2527 WHERE_DISTINCT_NOOP = 0 2528 WHERE_DISTINCT_ORDERED = 2 2529 WHERE_DISTINCT_UNIQUE = 1 2530 WHERE_DISTINCT_UNORDERED = 3 2531 WHERE_DUPLICATES_OK = 0x0010 2532 WHERE_GROUPBY = 0x0040 2533 WHERE_ONEPASS_DESIRED = 0x0004 2534 WHERE_ONEPASS_MULTIROW = 0x0008 2535 WHERE_ORDERBY_LIMIT = 0x0800 2536 WHERE_ORDERBY_MAX = 0x0002 2537 WHERE_ORDERBY_MIN = 0x0001 2538 WHERE_ORDERBY_NORMAL = 0x0000 2539 WHERE_OR_SUBCLAUSE = 0x0020 2540 WHERE_RIGHT_JOIN = 0x1000 2541 WHERE_SORTBYGROUP = 0x0200 2542 WHERE_USE_LIMIT = 0x4000 2543 WHERE_WANT_DISTINCT = 0x0100 2544 WINT_MAX = 4294967295 2545 WINT_MIN = 0 2546 WRC_Abort = 2 2547 WRC_Continue = 0 2548 WRC_Prune = 1 2549 XN_EXPR = -2 2550 XN_ROWID = -1 2551 X_ANSI_STDDEF_H = 0 2552 X_BITS_STDINT_UINTN_H = 1 2553 X_BITS_WCHAR_H = 1 2554 X_BSD_PTRDIFF_T_ = 0 2555 X_GCC_MAX_ALIGN_T = 0 2556 X_GCC_PTRDIFF_T = 0 2557 X_GCC_WRAP_STDINT_H = 0 2558 X_GNU_SOURCE = 0 2559 X_INTTYPES_H = 1 2560 X_LARGEFILE_SOURCE = 1 2561 X_LARGE_FILE = 1 2562 X_PTRDIFF_T = 0 2563 X_PTRDIFF_T_ = 0 2564 X_PTRDIFF_T_DECLARED = 0 2565 X_SQLITE_OS_H_ = 0 2566 X_STDDEF_H = 0 2567 X_STDDEF_H_ = 0 2568 X_STDINT_H = 1 2569 X_T_PTRDIFF = 0 2570 X_T_PTRDIFF_ = 0 2571 X_XOPEN_SOURCE = 600 2572 SESSION_STREAM_TCL_VAR = "sqlite3session_streams" 2573 FP_XSTATE_MAGIC1 = 0x46505853 2574 FP_XSTATE_MAGIC2 = 0x46505845 2575 MAX_PREPARED_STMTS = 100 2576 MINSIGSTKSZ = 2048 2577 NGREG = 19 2578 NSIG = 65 2579 NUM_PREPARED_STMTS = 10 2580 SA_INTERRUPT = 0x20000000 2581 SA_NOCLDSTOP = 1 2582 SA_NOCLDWAIT = 2 2583 SA_NODEFER = 0x40000000 2584 SA_NOMASK = 1073741824 2585 SA_ONESHOT = 2147483648 2586 SA_ONSTACK = 0x08000000 2587 SA_RESETHAND = 0x80000000 2588 SA_RESTART = 0x10000000 2589 SA_SIGINFO = 4 2590 SA_STACK = 134217728 2591 SIGABRT = 6 2592 SIGALRM = 14 2593 SIGBUS = 7 2594 SIGCHLD = 17 2595 SIGCLD = 17 2596 SIGCONT = 18 2597 SIGFPE = 8 2598 SIGHUP = 1 2599 SIGILL = 4 2600 SIGINT = 2 2601 SIGIO = 29 2602 SIGIOT = 6 2603 SIGKILL = 9 2604 SIGPIPE = 13 2605 SIGPOLL = 29 2606 SIGPROF = 27 2607 SIGPWR = 30 2608 SIGQUIT = 3 2609 SIGSEGV = 11 2610 SIGSTKFLT = 16 2611 SIGSTKSZ = 8192 2612 SIGSTOP = 19 2613 SIGSYS = 31 2614 SIGTERM = 15 2615 SIGTRAP = 5 2616 SIGTSTP = 20 2617 SIGTTIN = 21 2618 SIGTTOU = 22 2619 SIGURG = 23 2620 SIGUSR1 = 10 2621 SIGUSR2 = 12 2622 SIGVTALRM = 26 2623 SIGWINCH = 28 2624 SIGXCPU = 24 2625 SIGXFSZ = 25 2626 SIG_BLOCK = 0 2627 SIG_SETMASK = 2 2628 SIG_UNBLOCK = 1 2629 SQLITE_EVAL_WITHOUTNULLS = 0x00001 2630 SQLITE_TCL_NRE = 1 2631 TCLSH = 1 2632 X86_FXSR_MAGIC = 0x0000 2633 X_BITS_SIGACTION_H = 1 2634 X_BITS_SIGCONTEXT_H = 1 2635 X_BITS_SIGEVENT_CONSTS_H = 1 2636 X_BITS_SIGINFO_ARCH_H = 1 2637 X_BITS_SIGINFO_CONSTS_H = 1 2638 X_BITS_SIGNUM_GENERIC_H = 1 2639 X_BITS_SIGNUM_H = 1 2640 X_BITS_SIGSTACK_H = 1 2641 X_BITS_SIGTHREAD_H = 1 2642 X_BITS_SS_FLAGS_H = 1 2643 X_NSIG = 65 2644 X_SIGNAL_H = 0 2645 X_SYS_UCONTEXT_H = 1 2646 ADJ_ESTERROR = 0x0008 2647 ADJ_FREQUENCY = 0x0002 2648 ADJ_MAXERROR = 0x0004 2649 ADJ_MICRO = 0x1000 2650 ADJ_NANO = 0x2000 2651 ADJ_OFFSET = 0x0001 2652 ADJ_OFFSET_SINGLESHOT = 0x8001 2653 ADJ_OFFSET_SS_READ = 0xa001 2654 ADJ_SETOFFSET = 0x0100 2655 ADJ_STATUS = 0x0010 2656 ADJ_TAI = 0x0080 2657 ADJ_TICK = 0x4000 2658 ADJ_TIMECONST = 0x0020 2659 CACHE_STALE = 0 2660 CURTYPE_BTREE = 0 2661 CURTYPE_PSEUDO = 3 2662 CURTYPE_SORTER = 1 2663 CURTYPE_VTAB = 2 2664 INT16_WIDTH = 16 2665 INT32_WIDTH = 32 2666 INT64_WIDTH = 64 2667 INT8_WIDTH = 8 2668 INTMAX_WIDTH = 64 2669 INTPTR_WIDTH = 32 2670 INT_FAST16_WIDTH = 32 2671 INT_FAST32_WIDTH = 32 2672 INT_FAST64_WIDTH = 64 2673 INT_FAST8_WIDTH = 8 2674 INT_LEAST16_WIDTH = 16 2675 INT_LEAST32_WIDTH = 32 2676 INT_LEAST64_WIDTH = 64 2677 INT_LEAST8_WIDTH = 8 2678 L_cuserid = 9 2679 MEM_AffMask = 0x003f 2680 MEM_Agg = 0x8000 2681 MEM_Blob = 0x0010 2682 MEM_Cleared = 0x0100 2683 MEM_Dyn = 0x1000 2684 MEM_Ephem = 0x4000 2685 MEM_FromBind = 0x0040 2686 MEM_Int = 0x0004 2687 MEM_IntReal = 0x0020 2688 MEM_Null = 0x0001 2689 MEM_Real = 0x0008 2690 MEM_Static = 0x2000 2691 MEM_Str = 0x0002 2692 MEM_Subtype = 0x0800 2693 MEM_Term = 0x0200 2694 MEM_TypeMask = 0x0dbf 2695 MEM_Undefined = 0x0000 2696 MEM_Zero = 0x0400 2697 MOD_CLKA = 32769 2698 MOD_CLKB = 16384 2699 MOD_ESTERROR = 8 2700 MOD_FREQUENCY = 2 2701 MOD_MAXERROR = 4 2702 MOD_MICRO = 4096 2703 MOD_NANO = 8192 2704 MOD_OFFSET = 1 2705 MOD_STATUS = 16 2706 MOD_TAI = 128 2707 MOD_TIMECONST = 32 2708 PRIO_MAX = 20 2709 PRIO_MIN = -20 2710 PTRDIFF_WIDTH = 32 2711 RENAME_EXCHANGE = 2 2712 RENAME_NOREPLACE = 1 2713 RENAME_WHITEOUT = 4 2714 RLIM64_INFINITY = 0xffffffffffffffff 2715 RLIM_INFINITY = 0xffffffffffffffff 2716 RLIM_SAVED_CUR = 18446744073709551615 2717 RLIM_SAVED_MAX = 18446744073709551615 2718 SEEK_DATA = 3 2719 SEEK_HOLE = 4 2720 SIG_ATOMIC_WIDTH = 32 2721 SIZE_WIDTH = 32 2722 SQLITE_ENABLE_LOCKING_STYLE = 0 2723 SQLITE_FRAME_MAGIC = 0x879fb71e 2724 SQLITE_MAX_SCHEMA_RETRY = 50 2725 SQLITE_VDBEINT_H = 0 2726 STA_CLK = 0x8000 2727 STA_CLOCKERR = 0x1000 2728 STA_DEL = 0x0020 2729 STA_FLL = 0x0008 2730 STA_FREQHOLD = 0x0080 2731 STA_INS = 0x0010 2732 STA_MODE = 0x4000 2733 STA_NANO = 0x2000 2734 STA_PLL = 0x0001 2735 STA_PPSERROR = 0x0800 2736 STA_PPSFREQ = 0x0002 2737 STA_PPSJITTER = 0x0200 2738 STA_PPSSIGNAL = 0x0100 2739 STA_PPSTIME = 0x0004 2740 STA_PPSWANDER = 0x0400 2741 STA_RONLY = 65280 2742 STA_UNSYNC = 0x0040 2743 UINT16_WIDTH = 16 2744 UINT32_WIDTH = 32 2745 UINT64_WIDTH = 64 2746 UINT8_WIDTH = 8 2747 UINTMAX_WIDTH = 64 2748 UINTPTR_WIDTH = 32 2749 UINT_FAST16_WIDTH = 32 2750 UINT_FAST32_WIDTH = 32 2751 UINT_FAST64_WIDTH = 64 2752 UINT_FAST8_WIDTH = 8 2753 UINT_LEAST16_WIDTH = 16 2754 UINT_LEAST32_WIDTH = 32 2755 UINT_LEAST64_WIDTH = 64 2756 UINT_LEAST8_WIDTH = 8 2757 VDBE_DISPLAY_P4 = 1 2758 VDBE_HALT_STATE = 3 2759 VDBE_INIT_STATE = 0 2760 VDBE_READY_STATE = 1 2761 VDBE_RUN_STATE = 2 2762 WCHAR_WIDTH = 32 2763 WINT_WIDTH = 32 2764 X_BITS_TIMEX_H = 1 2765 X_ISOC11_SOURCE = 1 2766 X_ISOC2X_SOURCE = 1 2767 X_ISOC95_SOURCE = 1 2768 X_ISOC99_SOURCE = 1 2769 X_LARGEFILE64_SOURCE = 1 2770 X_SYS_RESOURCE_H = 1 2771 X_XOPEN_SOURCE_EXTENDED = 1 2772 BTCF_AtLast = 0x08 2773 BTCF_Incrblob = 0x10 2774 BTCF_Multiple = 0x20 2775 BTCF_Pinned = 0x40 2776 BTCF_ValidNKey = 0x02 2777 BTCF_ValidOvfl = 0x04 2778 BTCF_WriteFlag = 0x01 2779 BTCURSOR_MAX_DEPTH = 20 2780 BTS_EXCLUSIVE = 0x0040 2781 BTS_FAST_SECURE = 0x000c 2782 BTS_INITIALLY_EMPTY = 0x0010 2783 BTS_NO_WAL = 0x0020 2784 BTS_OVERWRITE = 0x0008 2785 BTS_PAGESIZE_FIXED = 0x0002 2786 BTS_PENDING = 0x0080 2787 BTS_READ_ONLY = 0x0001 2788 BTS_SECURE_DELETE = 0x0004 2789 CURSOR_FAULT = 4 2790 CURSOR_INVALID = 1 2791 CURSOR_REQUIRESEEK = 3 2792 CURSOR_SKIPNEXT = 2 2793 CURSOR_VALID = 0 2794 PTF_INTKEY = 0x01 2795 PTF_LEAF = 0x08 2796 PTF_LEAFDATA = 0x04 2797 PTF_ZERODATA = 0x02 2798 PTRMAP_BTREE = 5 2799 PTRMAP_FREEPAGE = 2 2800 PTRMAP_OVERFLOW1 = 3 2801 PTRMAP_OVERFLOW2 = 4 2802 PTRMAP_ROOTPAGE = 1 2803 READ_LOCK = 1 2804 SQLITE_FILE_HEADER = "SQLite format 3" 2805 TRANS_NONE = 0 2806 TRANS_READ = 1 2807 TRANS_WRITE = 2 2808 WRITE_LOCK = 2 2809 CLONE_CHILD_CLEARTID = 0x00200000 2810 CLONE_CHILD_SETTID = 0x01000000 2811 CLONE_DETACHED = 0x00400000 2812 CLONE_FILES = 0x00000400 2813 CLONE_FS = 0x00000200 2814 CLONE_IO = 0x80000000 2815 CLONE_NEWCGROUP = 0x02000000 2816 CLONE_NEWIPC = 0x08000000 2817 CLONE_NEWNET = 0x40000000 2818 CLONE_NEWNS = 0x00020000 2819 CLONE_NEWPID = 0x20000000 2820 CLONE_NEWUSER = 0x10000000 2821 CLONE_NEWUTS = 0x04000000 2822 CLONE_PARENT = 0x00008000 2823 CLONE_PARENT_SETTID = 0x00100000 2824 CLONE_PIDFD = 0x00001000 2825 CLONE_PTRACE = 0x00002000 2826 CLONE_SETTLS = 0x00080000 2827 CLONE_SIGHAND = 0x00000800 2828 CLONE_SYSVSEM = 0x00040000 2829 CLONE_THREAD = 0x00010000 2830 CLONE_UNTRACED = 0x00800000 2831 CLONE_VFORK = 0x00004000 2832 CLONE_VM = 0x00000100 2833 CPU_SETSIZE = 1024 2834 CSIGNAL = 0x000000ff 2835 N_THREAD = 26 2836 PTHREAD_BARRIER_SERIAL_THREAD = -1 2837 PTHREAD_ONCE_INIT = 0 2838 SCHED_BATCH = 3 2839 SCHED_DEADLINE = 6 2840 SCHED_FIFO = 1 2841 SCHED_IDLE = 5 2842 SCHED_ISO = 4 2843 SCHED_OTHER = 0 2844 SCHED_RESET_ON_FORK = 0x40000000 2845 SCHED_RR = 2 2846 X_BITS_CPU_SET_H = 1 2847 X_BITS_SCHED_H = 1 2848 X_BITS_SETJMP_H = 1 2849 X_BITS_TYPES_STRUCT_SCHED_PARAM = 1 2850 X_PTHREAD_H = 1 2851 X_SCHED_H = 1 2852 TCL_THREADS = 0 2853 MX_CHUNK_NUMBER = 299 2854 SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET = 400 2855 SQLITE_MULTIPLEX_WAL_8_3_OFFSET = 700 2856 DEVSYM_MAX_PATHNAME = 512 2857 DEVSYM_VFS_NAME = "devsym" 2858 WRITECRASH_NAME = "writecrash" 2859 AT_EMPTY_PATH = 0x1000 2860 AT_NO_AUTOMOUNT = 0x800 2861 AT_RECURSIVE = 0x8000 2862 AT_STATX_DONT_SYNC = 0x4000 2863 AT_STATX_FORCE_SYNC = 0x2000 2864 AT_STATX_SYNC_AS_STAT = 0x0000 2865 AT_STATX_SYNC_TYPE = 0x6000 2866 DN_ACCESS = 0x00000001 2867 DN_ATTRIB = 0x00000020 2868 DN_CREATE = 0x00000004 2869 DN_DELETE = 0x00000008 2870 DN_MODIFY = 0x00000002 2871 DN_MULTISHOT = 0x80000000 2872 DN_RENAME = 0x00000010 2873 FALLOC_FL_COLLAPSE_RANGE = 0x08 2874 FALLOC_FL_INSERT_RANGE = 0x20 2875 FALLOC_FL_KEEP_SIZE = 0x01 2876 FALLOC_FL_NO_HIDE_STALE = 0x04 2877 FALLOC_FL_PUNCH_HOLE = 0x02 2878 FALLOC_FL_UNSHARE_RANGE = 0x40 2879 FALLOC_FL_ZERO_RANGE = 0x10 2880 F_ADD_SEALS = 1033 2881 F_GETLEASE = 1025 2882 F_GETOWN_EX = 16 2883 F_GETPIPE_SZ = 1032 2884 F_GETSIG = 11 2885 F_GET_FILE_RW_HINT = 1037 2886 F_GET_RW_HINT = 1035 2887 F_GET_SEALS = 1034 2888 F_NOTIFY = 1026 2889 F_OFD_GETLK = 36 2890 F_OFD_SETLK = 37 2891 F_OFD_SETLKW = 38 2892 F_SEAL_FUTURE_WRITE = 0x0010 2893 F_SEAL_GROW = 0x0004 2894 F_SEAL_SEAL = 0x0001 2895 F_SEAL_SHRINK = 0x0002 2896 F_SEAL_WRITE = 0x0008 2897 F_SETLEASE = 1024 2898 F_SETOWN_EX = 15 2899 F_SETPIPE_SZ = 1031 2900 F_SETSIG = 10 2901 F_SET_FILE_RW_HINT = 1038 2902 F_SET_RW_HINT = 1036 2903 LOCK_MAND = 32 2904 LOCK_READ = 64 2905 LOCK_RW = 192 2906 LOCK_WRITE = 128 2907 MAX_HANDLE_SZ = 128 2908 O_DIRECT = 16384 2909 O_LARGEFILE = 32768 2910 O_NOATIME = 262144 2911 O_PATH = 2097152 2912 O_TMPFILE = 4259840 2913 RWF_WRITE_LIFE_NOT_SET = 0 2914 RWH_WRITE_LIFE_EXTREME = 5 2915 RWH_WRITE_LIFE_LONG = 4 2916 RWH_WRITE_LIFE_MEDIUM = 3 2917 RWH_WRITE_LIFE_NONE = 1 2918 RWH_WRITE_LIFE_SHORT = 2 2919 SPLICE_F_GIFT = 8 2920 SPLICE_F_MORE = 4 2921 SPLICE_F_MOVE = 1 2922 SPLICE_F_NONBLOCK = 2 2923 STATX_ALL = 0x00000fff 2924 STATX_ATIME = 0x00000020 2925 STATX_ATTR_APPEND = 0x00000020 2926 STATX_ATTR_AUTOMOUNT = 0x00001000 2927 STATX_ATTR_COMPRESSED = 0x00000004 2928 STATX_ATTR_DAX = 0x00200000 2929 STATX_ATTR_ENCRYPTED = 0x00000800 2930 STATX_ATTR_IMMUTABLE = 0x00000010 2931 STATX_ATTR_MOUNT_ROOT = 0x00002000 2932 STATX_ATTR_NODUMP = 0x00000040 2933 STATX_ATTR_VERITY = 0x00100000 2934 STATX_BASIC_STATS = 0x000007ff 2935 STATX_BLOCKS = 0x00000400 2936 STATX_BTIME = 0x00000800 2937 STATX_CTIME = 0x00000080 2938 STATX_GID = 0x00000010 2939 STATX_INO = 0x00000100 2940 STATX_MNT_ID = 0x00001000 2941 STATX_MODE = 0x00000002 2942 STATX_MTIME = 0x00000040 2943 STATX_NLINK = 0x00000004 2944 STATX_SIZE = 0x00000200 2945 STATX_TYPE = 0x00000001 2946 STATX_UID = 0x00000008 2947 STATX__RESERVED = 0x80000000 2948 SYNC_FILE_RANGE_WAIT_AFTER = 4 2949 SYNC_FILE_RANGE_WAIT_BEFORE = 1 2950 SYNC_FILE_RANGE_WRITE = 2 2951 SYNC_FILE_RANGE_WRITE_AND_WAIT = 7 2952 X_ASM_GENERIC_INT_LL64_H = 0 2953 X_ASM_GENERIC_TYPES_H = 0 2954 X_ASM_X86_POSIX_TYPES_32_H = 0 2955 X_FALLOC_H_ = 0 2956 X_LINUX_POSIX_TYPES_H = 0 2957 X_LINUX_STAT_H = 0 2958 X_LINUX_TYPES_H = 0 2959 X_POSIX_FD_SETSIZE = 20 2960 X_POSIX_HIWAT = 512 2961 X_POSIX_QLIMIT = 1 2962 X_POSIX_UIO_MAXIOV = 16 2963 SQLITE_INTARRAY_H = 0 2964 JT_MAX_PATHNAME = 512 2965 JT_VFS_NAME = "jt" 2966 MALLOC_LOG_FRAMES = 10 2967 DEFAULT_SECTOR_SIZE = 0x1000 2968 MAX_PAGE_SIZE = 0x10000 2969 MULTIPLEX_CTRL_ENABLE = 214014 2970 MULTIPLEX_CTRL_SET_CHUNK_SIZE = 214015 2971 MULTIPLEX_CTRL_SET_MAX_CHUNKS = 214016 2972 SQLITE_MULTIPLEX_CHUNK_SIZE = 2147418112 2973 SQLITE_MULTIPLEX_MAX_CHUNKS = 12 2974 SQLITE_MULTIPLEX_VFS_NAME = "multiplex" 2975 SQLITE_TEST_MULTIPLEX_H = 0 2976 MAX_MUTEXES = 14 2977 STATIC_MUTEXES = 12 2978 BLOBSIZE = 10485760 2979 BLOCKSIZE = 512 2980 DATABASE_FILE = 1 2981 FS_VFS_NAME = "fs" 2982 JOURNAL_FILE = 2 2983 INST_MAX_PATHNAME = 512 2984 OS_ACCESS = 1 2985 OS_ANNOTATE = 28 2986 OS_CHECKRESERVEDLOCK = 2 2987 OS_CLOSE = 3 2988 OS_CURRENTTIME = 4 2989 OS_DELETE = 5 2990 OS_DEVCHAR = 6 2991 OS_FILECONTROL = 7 2992 OS_FILESIZE = 8 2993 OS_FULLPATHNAME = 9 2994 OS_LOCK = 11 2995 OS_NUMEVENTS = 29 2996 OS_OPEN = 12 2997 OS_RANDOMNESS = 13 2998 OS_READ = 14 2999 OS_SECTORSIZE = 15 3000 OS_SHMBARRIER = 26 3001 OS_SHMLOCK = 25 3002 OS_SHMMAP = 23 3003 OS_SHMUNMAP = 22 3004 OS_SLEEP = 16 3005 OS_SYNC = 17 3006 OS_TRUNCATE = 18 3007 OS_UNLOCK = 19 3008 OS_WRITE = 20 3009 VFSLOG_BUFFERSIZE = 8192 3010 TESTPCACHE_CLEAR = 0xd42670d4 3011 TESTPCACHE_NPAGE = 217 3012 TESTPCACHE_RESERVE = 17 3013 TESTPCACHE_VALID = 0x364585fd 3014 MSG_Close = 6 3015 MSG_Done = 7 3016 MSG_Finalize = 5 3017 MSG_Open = 1 3018 MSG_Prepare = 2 3019 MSG_Reset = 4 3020 MSG_Step = 3 3021 MADV_COLD = 20 3022 MADV_DODUMP = 17 3023 MADV_DOFORK = 11 3024 MADV_DONTDUMP = 16 3025 MADV_DONTFORK = 10 3026 MADV_DONTNEED = 4 3027 MADV_FREE = 8 3028 MADV_HUGEPAGE = 14 3029 MADV_HWPOISON = 100 3030 MADV_KEEPONFORK = 19 3031 MADV_MERGEABLE = 12 3032 MADV_NOHUGEPAGE = 15 3033 MADV_NORMAL = 0 3034 MADV_PAGEOUT = 21 3035 MADV_RANDOM = 1 3036 MADV_REMOVE = 9 3037 MADV_SEQUENTIAL = 2 3038 MADV_UNMERGEABLE = 13 3039 MADV_WILLNEED = 3 3040 MADV_WIPEONFORK = 18 3041 MAP_32BIT = 0x40 3042 MAP_ANON = 32 3043 MAP_ANONYMOUS = 0x20 3044 MAP_DENYWRITE = 0x00800 3045 MAP_EXECUTABLE = 0x01000 3046 MAP_FILE = 0 3047 MAP_FIXED = 0x10 3048 MAP_FIXED_NOREPLACE = 0x100000 3049 MAP_GROWSDOWN = 0x00100 3050 MAP_HUGETLB = 0x40000 3051 MAP_HUGE_MASK = 0x3f 3052 MAP_HUGE_SHIFT = 26 3053 MAP_LOCKED = 0x02000 3054 MAP_NONBLOCK = 0x10000 3055 MAP_NORESERVE = 0x04000 3056 MAP_POPULATE = 0x08000 3057 MAP_PRIVATE = 0x02 3058 MAP_SHARED = 0x01 3059 MAP_SHARED_VALIDATE = 0x03 3060 MAP_STACK = 0x20000 3061 MAP_SYNC = 0x80000 3062 MAP_TYPE = 0x0f 3063 MCL_CURRENT = 1 3064 MCL_FUTURE = 2 3065 MCL_ONFAULT = 4 3066 MFD_ALLOW_SEALING = 2 3067 MFD_CLOEXEC = 1 3068 MFD_HUGETLB = 4 3069 MLOCK_ONFAULT = 1 3070 MREMAP_FIXED = 2 3071 MREMAP_MAYMOVE = 1 3072 MS_ASYNC = 1 3073 MS_INVALIDATE = 2 3074 MS_SYNC = 4 3075 PKEY_DISABLE_ACCESS = 0x1 3076 PKEY_DISABLE_WRITE = 0x2 3077 POSIX_MADV_DONTNEED = 4 3078 POSIX_MADV_NORMAL = 0 3079 POSIX_MADV_RANDOM = 1 3080 POSIX_MADV_SEQUENTIAL = 2 3081 POSIX_MADV_WILLNEED = 3 3082 PROT_EXEC = 0x4 3083 PROT_GROWSDOWN = 0x01000000 3084 PROT_GROWSUP = 0x02000000 3085 PROT_NONE = 0x0 3086 PROT_READ = 0x1 3087 PROT_WRITE = 0x2 3088 X_SYS_MMAN_H = 1 3089 TCLVAR_NAME_EQ = 101 3090 TCLVAR_NAME_MATCH = 109 3091 TCLVAR_VALUE_GLOB = 103 3092 TCLVAR_VALUE_LIKE = 108 3093 TCLVAR_VALUE_REGEXP = 114 3094 FAULT_INJECT_NONE = 0 3095 FAULT_INJECT_PERSISTENT = 2 3096 FAULT_INJECT_TRANSIENT = 1 3097 TESTVFS_ACCESS_MASK = 0x00004000 3098 TESTVFS_ALL_MASK = 0x001FFFFF 3099 TESTVFS_CKLOCK_MASK = 0x00080000 3100 TESTVFS_CLOSE_MASK = 0x00000800 3101 TESTVFS_DELETE_MASK = 0x00000400 3102 TESTVFS_FCNTL_MASK = 0x00100000 3103 TESTVFS_FULLPATHNAME_MASK = 0x00008000 3104 TESTVFS_LOCK_MASK = 0x00040000 3105 TESTVFS_MAX_ARGS = 12 3106 TESTVFS_MAX_PAGES = 1024 3107 TESTVFS_OPEN_MASK = 0x00000100 3108 TESTVFS_READ_MASK = 0x00010000 3109 TESTVFS_SHMBARRIER_MASK = 0x00000040 3110 TESTVFS_SHMCLOSE_MASK = 0x00000080 3111 TESTVFS_SHMLOCK_MASK = 0x00000010 3112 TESTVFS_SHMMAP_MASK = 0x00000020 3113 TESTVFS_SHMOPEN_MASK = 0x00000001 3114 TESTVFS_SYNC_MASK = 0x00000200 3115 TESTVFS_TRUNCATE_MASK = 0x00002000 3116 TESTVFS_UNLOCK_MASK = 0x00020000 3117 TESTVFS_WRITE_MASK = 0x00001000 3118 ) 3119 3120 const ( 3121 _PC_LINK_MAX = 0 3122 _PC_MAX_CANON = 1 3123 _PC_MAX_INPUT = 2 3124 _PC_NAME_MAX = 3 3125 _PC_PATH_MAX = 4 3126 _PC_PIPE_BUF = 5 3127 _PC_CHOWN_RESTRICTED = 6 3128 _PC_NO_TRUNC = 7 3129 _PC_VDISABLE = 8 3130 _PC_SYNC_IO = 9 3131 _PC_ASYNC_IO = 10 3132 _PC_PRIO_IO = 11 3133 _PC_SOCK_MAXBUF = 12 3134 _PC_FILESIZEBITS = 13 3135 _PC_REC_INCR_XFER_SIZE = 14 3136 _PC_REC_MAX_XFER_SIZE = 15 3137 _PC_REC_MIN_XFER_SIZE = 16 3138 _PC_REC_XFER_ALIGN = 17 3139 _PC_ALLOC_SIZE_MIN = 18 3140 _PC_SYMLINK_MAX = 19 3141 _PC_2_SYMLINKS = 20 3142 ) 3143 3144 const ( 3145 _CS_PATH = 0 3146 3147 _CS_V6_WIDTH_RESTRICTED_ENVS = 1 3148 3149 _CS_GNU_LIBC_VERSION = 2 3150 _CS_GNU_LIBPTHREAD_VERSION = 3 3151 3152 _CS_V5_WIDTH_RESTRICTED_ENVS = 4 3153 3154 _CS_V7_WIDTH_RESTRICTED_ENVS = 5 3155 3156 _CS_LFS_CFLAGS = 1000 3157 _CS_LFS_LDFLAGS = 1001 3158 _CS_LFS_LIBS = 1002 3159 _CS_LFS_LINTFLAGS = 1003 3160 _CS_LFS64_CFLAGS = 1004 3161 _CS_LFS64_LDFLAGS = 1005 3162 _CS_LFS64_LIBS = 1006 3163 _CS_LFS64_LINTFLAGS = 1007 3164 3165 _CS_XBS5_ILP32_OFF32_CFLAGS = 1100 3166 _CS_XBS5_ILP32_OFF32_LDFLAGS = 1101 3167 _CS_XBS5_ILP32_OFF32_LIBS = 1102 3168 _CS_XBS5_ILP32_OFF32_LINTFLAGS = 1103 3169 _CS_XBS5_ILP32_OFFBIG_CFLAGS = 1104 3170 _CS_XBS5_ILP32_OFFBIG_LDFLAGS = 1105 3171 _CS_XBS5_ILP32_OFFBIG_LIBS = 1106 3172 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS = 1107 3173 _CS_XBS5_LP64_OFF64_CFLAGS = 1108 3174 _CS_XBS5_LP64_OFF64_LDFLAGS = 1109 3175 _CS_XBS5_LP64_OFF64_LIBS = 1110 3176 _CS_XBS5_LP64_OFF64_LINTFLAGS = 1111 3177 _CS_XBS5_LPBIG_OFFBIG_CFLAGS = 1112 3178 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS = 1113 3179 _CS_XBS5_LPBIG_OFFBIG_LIBS = 1114 3180 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS = 1115 3181 3182 _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116 3183 _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117 3184 _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118 3185 _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119 3186 _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120 3187 _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121 3188 _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122 3189 _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123 3190 _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124 3191 _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125 3192 _CS_POSIX_V6_LP64_OFF64_LIBS = 1126 3193 _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127 3194 _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128 3195 _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129 3196 _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130 3197 _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131 3198 3199 _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132 3200 _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133 3201 _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134 3202 _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135 3203 _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136 3204 _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137 3205 _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138 3206 _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139 3207 _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140 3208 _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141 3209 _CS_POSIX_V7_LP64_OFF64_LIBS = 1142 3210 _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143 3211 _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144 3212 _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145 3213 _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146 3214 _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147 3215 3216 _CS_V6_ENV = 1148 3217 _CS_V7_ENV = 1149 3218 ) 3219 3220 const ( 3221 _SC_ARG_MAX = 0 3222 _SC_CHILD_MAX = 1 3223 _SC_CLK_TCK = 2 3224 _SC_NGROUPS_MAX = 3 3225 _SC_OPEN_MAX = 4 3226 _SC_STREAM_MAX = 5 3227 _SC_TZNAME_MAX = 6 3228 _SC_JOB_CONTROL = 7 3229 _SC_SAVED_IDS = 8 3230 _SC_REALTIME_SIGNALS = 9 3231 _SC_PRIORITY_SCHEDULING = 10 3232 _SC_TIMERS = 11 3233 _SC_ASYNCHRONOUS_IO = 12 3234 _SC_PRIORITIZED_IO = 13 3235 _SC_SYNCHRONIZED_IO = 14 3236 _SC_FSYNC = 15 3237 _SC_MAPPED_FILES = 16 3238 _SC_MEMLOCK = 17 3239 _SC_MEMLOCK_RANGE = 18 3240 _SC_MEMORY_PROTECTION = 19 3241 _SC_MESSAGE_PASSING = 20 3242 _SC_SEMAPHORES = 21 3243 _SC_SHARED_MEMORY_OBJECTS = 22 3244 _SC_AIO_LISTIO_MAX = 23 3245 _SC_AIO_MAX = 24 3246 _SC_AIO_PRIO_DELTA_MAX = 25 3247 _SC_DELAYTIMER_MAX = 26 3248 _SC_MQ_OPEN_MAX = 27 3249 _SC_MQ_PRIO_MAX = 28 3250 _SC_VERSION = 29 3251 _SC_PAGESIZE = 30 3252 _SC_RTSIG_MAX = 31 3253 _SC_SEM_NSEMS_MAX = 32 3254 _SC_SEM_VALUE_MAX = 33 3255 _SC_SIGQUEUE_MAX = 34 3256 _SC_TIMER_MAX = 35 3257 3258 _SC_BC_BASE_MAX = 36 3259 _SC_BC_DIM_MAX = 37 3260 _SC_BC_SCALE_MAX = 38 3261 _SC_BC_STRING_MAX = 39 3262 _SC_COLL_WEIGHTS_MAX = 40 3263 _SC_EQUIV_CLASS_MAX = 41 3264 _SC_EXPR_NEST_MAX = 42 3265 _SC_LINE_MAX = 43 3266 _SC_RE_DUP_MAX = 44 3267 _SC_CHARCLASS_NAME_MAX = 45 3268 3269 _SC_2_VERSION = 46 3270 _SC_2_C_BIND = 47 3271 _SC_2_C_DEV = 48 3272 _SC_2_FORT_DEV = 49 3273 _SC_2_FORT_RUN = 50 3274 _SC_2_SW_DEV = 51 3275 _SC_2_LOCALEDEF = 52 3276 3277 _SC_PII = 53 3278 _SC_PII_XTI = 54 3279 _SC_PII_SOCKET = 55 3280 _SC_PII_INTERNET = 56 3281 _SC_PII_OSI = 57 3282 _SC_POLL = 58 3283 _SC_SELECT = 59 3284 _SC_UIO_MAXIOV = 60 3285 _SC_IOV_MAX = 60 3286 _SC_PII_INTERNET_STREAM = 61 3287 _SC_PII_INTERNET_DGRAM = 62 3288 _SC_PII_OSI_COTS = 63 3289 _SC_PII_OSI_CLTS = 64 3290 _SC_PII_OSI_M = 65 3291 _SC_T_IOV_MAX = 66 3292 3293 _SC_THREADS = 67 3294 _SC_THREAD_SAFE_FUNCTIONS = 68 3295 _SC_GETGR_R_SIZE_MAX = 69 3296 _SC_GETPW_R_SIZE_MAX = 70 3297 _SC_LOGIN_NAME_MAX = 71 3298 _SC_TTY_NAME_MAX = 72 3299 _SC_THREAD_DESTRUCTOR_ITERATIONS = 73 3300 _SC_THREAD_KEYS_MAX = 74 3301 _SC_THREAD_STACK_MIN = 75 3302 _SC_THREAD_THREADS_MAX = 76 3303 _SC_THREAD_ATTR_STACKADDR = 77 3304 _SC_THREAD_ATTR_STACKSIZE = 78 3305 _SC_THREAD_PRIORITY_SCHEDULING = 79 3306 _SC_THREAD_PRIO_INHERIT = 80 3307 _SC_THREAD_PRIO_PROTECT = 81 3308 _SC_THREAD_PROCESS_SHARED = 82 3309 3310 _SC_NPROCESSORS_CONF = 83 3311 _SC_NPROCESSORS_ONLN = 84 3312 _SC_PHYS_PAGES = 85 3313 _SC_AVPHYS_PAGES = 86 3314 _SC_ATEXIT_MAX = 87 3315 _SC_PASS_MAX = 88 3316 3317 _SC_XOPEN_VERSION = 89 3318 _SC_XOPEN_XCU_VERSION = 90 3319 _SC_XOPEN_UNIX = 91 3320 _SC_XOPEN_CRYPT = 92 3321 _SC_XOPEN_ENH_I18N = 93 3322 _SC_XOPEN_SHM = 94 3323 3324 _SC_2_CHAR_TERM = 95 3325 _SC_2_C_VERSION = 96 3326 _SC_2_UPE = 97 3327 3328 _SC_XOPEN_XPG2 = 98 3329 _SC_XOPEN_XPG3 = 99 3330 _SC_XOPEN_XPG4 = 100 3331 3332 _SC_CHAR_BIT = 101 3333 _SC_CHAR_MAX = 102 3334 _SC_CHAR_MIN = 103 3335 _SC_INT_MAX = 104 3336 _SC_INT_MIN = 105 3337 _SC_LONG_BIT = 106 3338 _SC_WORD_BIT = 107 3339 _SC_MB_LEN_MAX = 108 3340 _SC_NZERO = 109 3341 _SC_SSIZE_MAX = 110 3342 _SC_SCHAR_MAX = 111 3343 _SC_SCHAR_MIN = 112 3344 _SC_SHRT_MAX = 113 3345 _SC_SHRT_MIN = 114 3346 _SC_UCHAR_MAX = 115 3347 _SC_UINT_MAX = 116 3348 _SC_ULONG_MAX = 117 3349 _SC_USHRT_MAX = 118 3350 3351 _SC_NL_ARGMAX = 119 3352 _SC_NL_LANGMAX = 120 3353 _SC_NL_MSGMAX = 121 3354 _SC_NL_NMAX = 122 3355 _SC_NL_SETMAX = 123 3356 _SC_NL_TEXTMAX = 124 3357 3358 _SC_XBS5_ILP32_OFF32 = 125 3359 _SC_XBS5_ILP32_OFFBIG = 126 3360 _SC_XBS5_LP64_OFF64 = 127 3361 _SC_XBS5_LPBIG_OFFBIG = 128 3362 3363 _SC_XOPEN_LEGACY = 129 3364 _SC_XOPEN_REALTIME = 130 3365 _SC_XOPEN_REALTIME_THREADS = 131 3366 3367 _SC_ADVISORY_INFO = 132 3368 _SC_BARRIERS = 133 3369 _SC_BASE = 134 3370 _SC_C_LANG_SUPPORT = 135 3371 _SC_C_LANG_SUPPORT_R = 136 3372 _SC_CLOCK_SELECTION = 137 3373 _SC_CPUTIME = 138 3374 _SC_THREAD_CPUTIME = 139 3375 _SC_DEVICE_IO = 140 3376 _SC_DEVICE_SPECIFIC = 141 3377 _SC_DEVICE_SPECIFIC_R = 142 3378 _SC_FD_MGMT = 143 3379 _SC_FIFO = 144 3380 _SC_PIPE = 145 3381 _SC_FILE_ATTRIBUTES = 146 3382 _SC_FILE_LOCKING = 147 3383 _SC_FILE_SYSTEM = 148 3384 _SC_MONOTONIC_CLOCK = 149 3385 _SC_MULTI_PROCESS = 150 3386 _SC_SINGLE_PROCESS = 151 3387 _SC_NETWORKING = 152 3388 _SC_READER_WRITER_LOCKS = 153 3389 _SC_SPIN_LOCKS = 154 3390 _SC_REGEXP = 155 3391 _SC_REGEX_VERSION = 156 3392 _SC_SHELL = 157 3393 _SC_SIGNALS = 158 3394 _SC_SPAWN = 159 3395 _SC_SPORADIC_SERVER = 160 3396 _SC_THREAD_SPORADIC_SERVER = 161 3397 _SC_SYSTEM_DATABASE = 162 3398 _SC_SYSTEM_DATABASE_R = 163 3399 _SC_TIMEOUTS = 164 3400 _SC_TYPED_MEMORY_OBJECTS = 165 3401 _SC_USER_GROUPS = 166 3402 _SC_USER_GROUPS_R = 167 3403 _SC_2_PBS = 168 3404 _SC_2_PBS_ACCOUNTING = 169 3405 _SC_2_PBS_LOCATE = 170 3406 _SC_2_PBS_MESSAGE = 171 3407 _SC_2_PBS_TRACK = 172 3408 _SC_SYMLOOP_MAX = 173 3409 _SC_STREAMS = 174 3410 _SC_2_PBS_CHECKPOINT = 175 3411 3412 _SC_V6_ILP32_OFF32 = 176 3413 _SC_V6_ILP32_OFFBIG = 177 3414 _SC_V6_LP64_OFF64 = 178 3415 _SC_V6_LPBIG_OFFBIG = 179 3416 3417 _SC_HOST_NAME_MAX = 180 3418 _SC_TRACE = 181 3419 _SC_TRACE_EVENT_FILTER = 182 3420 _SC_TRACE_INHERIT = 183 3421 _SC_TRACE_LOG = 184 3422 3423 _SC_LEVEL1_ICACHE_SIZE = 185 3424 _SC_LEVEL1_ICACHE_ASSOC = 186 3425 _SC_LEVEL1_ICACHE_LINESIZE = 187 3426 _SC_LEVEL1_DCACHE_SIZE = 188 3427 _SC_LEVEL1_DCACHE_ASSOC = 189 3428 _SC_LEVEL1_DCACHE_LINESIZE = 190 3429 _SC_LEVEL2_CACHE_SIZE = 191 3430 _SC_LEVEL2_CACHE_ASSOC = 192 3431 _SC_LEVEL2_CACHE_LINESIZE = 193 3432 _SC_LEVEL3_CACHE_SIZE = 194 3433 _SC_LEVEL3_CACHE_ASSOC = 195 3434 _SC_LEVEL3_CACHE_LINESIZE = 196 3435 _SC_LEVEL4_CACHE_SIZE = 197 3436 _SC_LEVEL4_CACHE_ASSOC = 198 3437 _SC_LEVEL4_CACHE_LINESIZE = 199 3438 3439 _SC_IPV6 = 235 3440 _SC_RAW_SOCKETS = 236 3441 3442 _SC_V7_ILP32_OFF32 = 237 3443 _SC_V7_ILP32_OFFBIG = 238 3444 _SC_V7_LP64_OFF64 = 239 3445 _SC_V7_LPBIG_OFFBIG = 240 3446 3447 _SC_SS_REPL_MAX = 241 3448 3449 _SC_TRACE_EVENT_NAME_MAX = 242 3450 _SC_TRACE_NAME_MAX = 243 3451 _SC_TRACE_SYS_MAX = 244 3452 _SC_TRACE_USER_EVENT_MAX = 245 3453 3454 _SC_XOPEN_STREAMS = 246 3455 3456 _SC_THREAD_ROBUST_PRIO_INHERIT = 247 3457 _SC_THREAD_ROBUST_PRIO_PROTECT = 248 3458 ) 3459 3460 const ( 3461 F_OWNER_TID = 0 3462 F_OWNER_PID = 1 3463 F_OWNER_PGRP = 2 3464 F_OWNER_GID = 2 3465 ) 3466 3467 const ( 3468 RUSAGE_SELF = 0 3469 3470 RUSAGE_CHILDREN = -1 3471 ) 3472 3473 const ( 3474 RUSAGE_THREAD = 1 3475 ) 3476 3477 const ( 3478 PRIO_PROCESS = 0 3479 PRIO_PGRP = 1 3480 PRIO_USER = 2 3481 ) 3482 3483 const ( 3484 RLIMIT_CPU = 0 3485 3486 RLIMIT_FSIZE = 1 3487 3488 RLIMIT_DATA = 2 3489 3490 RLIMIT_STACK = 3 3491 3492 RLIMIT_CORE = 4 3493 3494 __RLIMIT_RSS = 5 3495 3496 RLIMIT_NOFILE = 7 3497 __RLIMIT_OFILE = 7 3498 3499 RLIMIT_AS = 9 3500 3501 __RLIMIT_NPROC = 6 3502 3503 __RLIMIT_MEMLOCK = 8 3504 3505 __RLIMIT_LOCKS = 10 3506 3507 __RLIMIT_SIGPENDING = 11 3508 3509 __RLIMIT_MSGQUEUE = 12 3510 3511 __RLIMIT_NICE = 13 3512 3513 __RLIMIT_RTPRIO = 14 3514 3515 __RLIMIT_RTTIME = 15 3516 3517 __RLIMIT_NLIMITS = 16 3518 __RLIM_NLIMITS = 16 3519 ) 3520 3521 const ( 3522 SIGEV_SIGNAL = 0 3523 SIGEV_NONE = 1 3524 SIGEV_THREAD = 2 3525 3526 SIGEV_THREAD_ID = 4 3527 ) 3528 3529 const ( 3530 SEGV_MAPERR = 1 3531 SEGV_ACCERR = 2 3532 SEGV_BNDERR = 3 3533 SEGV_PKUERR = 4 3534 SEGV_ACCADI = 5 3535 SEGV_ADIDERR = 6 3536 SEGV_ADIPERR = 7 3537 ) 3538 3539 const ( 3540 BUS_ADRALN = 1 3541 BUS_ADRERR = 2 3542 BUS_OBJERR = 3 3543 BUS_MCEERR_AR = 4 3544 BUS_MCEERR_AO = 5 3545 ) 3546 3547 const ( 3548 CLD_EXITED = 1 3549 CLD_KILLED = 2 3550 CLD_DUMPED = 3 3551 CLD_TRAPPED = 4 3552 CLD_STOPPED = 5 3553 CLD_CONTINUED = 6 3554 ) 3555 3556 const ( 3557 POLL_IN = 1 3558 POLL_OUT = 2 3559 POLL_MSG = 3 3560 POLL_ERR = 4 3561 POLL_PRI = 5 3562 POLL_HUP = 6 3563 ) 3564 3565 const ( 3566 SI_ASYNCNL = -60 3567 SI_DETHREAD = -7 3568 3569 SI_TKILL = -6 3570 SI_SIGIO = -5 3571 SI_ASYNCIO = -4 3572 SI_MESGQ = -3 3573 SI_TIMER = -2 3574 SI_QUEUE = -1 3575 SI_USER = 0 3576 SI_KERNEL = 128 3577 ) 3578 3579 const ( 3580 ILL_ILLOPC = 1 3581 ILL_ILLOPN = 2 3582 ILL_ILLADR = 3 3583 ILL_ILLTRP = 4 3584 ILL_PRVOPC = 5 3585 ILL_PRVREG = 6 3586 ILL_COPROC = 7 3587 ILL_BADSTK = 8 3588 ILL_BADIADDR = 9 3589 ) 3590 3591 const ( 3592 FPE_INTDIV = 1 3593 FPE_INTOVF = 2 3594 FPE_FLTDIV = 3 3595 FPE_FLTOVF = 4 3596 FPE_FLTUND = 5 3597 FPE_FLTRES = 6 3598 FPE_FLTINV = 7 3599 FPE_FLTSUB = 8 3600 FPE_FLTUNK = 14 3601 FPE_CONDTRAP = 15 3602 ) 3603 3604 const ( 3605 SS_ONSTACK = 1 3606 SS_DISABLE = 2 3607 ) 3608 3609 const ( 3610 P_ALL = 0 3611 P_PID = 1 3612 P_PGID = 2 3613 ) 3614 3615 const ( 3616 _ISupper = 256 3617 _ISlower = 512 3618 _ISalpha = 1024 3619 _ISdigit = 2048 3620 _ISxdigit = 4096 3621 _ISspace = 8192 3622 _ISprint = 16384 3623 _ISgraph = 32768 3624 _ISblank = 1 3625 _IScntrl = 2 3626 _ISpunct = 4 3627 _ISalnum = 8 3628 ) 3629 3630 const ( 3631 DT_UNKNOWN = 0 3632 DT_FIFO = 1 3633 DT_CHR = 2 3634 DT_DIR = 4 3635 DT_BLK = 6 3636 DT_REG = 8 3637 DT_LNK = 10 3638 DT_SOCK = 12 3639 DT_WHT = 14 3640 ) 3641 3642 const ( 3643 PTHREAD_RWLOCK_PREFER_READER_NP = 0 3644 PTHREAD_RWLOCK_PREFER_WRITER_NP = 1 3645 PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP = 2 3646 PTHREAD_RWLOCK_DEFAULT_NP = 0 3647 ) 3648 3649 const ( 3650 PTHREAD_INHERIT_SCHED = 0 3651 PTHREAD_EXPLICIT_SCHED = 1 3652 ) 3653 3654 const ( 3655 PTHREAD_SCOPE_SYSTEM = 0 3656 PTHREAD_SCOPE_PROCESS = 1 3657 ) 3658 3659 const ( 3660 PTHREAD_PROCESS_PRIVATE = 0 3661 PTHREAD_PROCESS_SHARED = 1 3662 ) 3663 3664 const ( 3665 PTHREAD_CANCEL_ENABLE = 0 3666 PTHREAD_CANCEL_DISABLE = 1 3667 ) 3668 const ( 3669 PTHREAD_CANCEL_DEFERRED = 0 3670 PTHREAD_CANCEL_ASYNCHRONOUS = 1 3671 ) 3672 3673 const ( 3674 PTHREAD_CREATE_JOINABLE = 0 3675 PTHREAD_CREATE_DETACHED = 1 3676 ) 3677 3678 const ( 3679 PTHREAD_MUTEX_TIMED_NP = 0 3680 PTHREAD_MUTEX_RECURSIVE_NP = 1 3681 PTHREAD_MUTEX_ERRORCHECK_NP = 2 3682 PTHREAD_MUTEX_ADAPTIVE_NP = 3 3683 PTHREAD_MUTEX_NORMAL = 0 3684 PTHREAD_MUTEX_RECURSIVE = 1 3685 PTHREAD_MUTEX_ERRORCHECK = 2 3686 PTHREAD_MUTEX_DEFAULT = 0 3687 PTHREAD_MUTEX_FAST_NP = 0 3688 ) 3689 3690 const ( 3691 PTHREAD_MUTEX_STALLED = 0 3692 PTHREAD_MUTEX_STALLED_NP = 0 3693 PTHREAD_MUTEX_ROBUST = 1 3694 PTHREAD_MUTEX_ROBUST_NP = 1 3695 ) 3696 3697 const ( 3698 PTHREAD_PRIO_NONE = 0 3699 PTHREAD_PRIO_INHERIT = 1 3700 PTHREAD_PRIO_PROTECT = 2 3701 ) 3702 3703 const ( 3704 ITIMER_REAL = 0 3705 3706 ITIMER_VIRTUAL = 1 3707 3708 ITIMER_PROF = 2 3709 ) 3710 3711 const ( 3712 TCL_QUEUE_TAIL = 0 3713 TCL_QUEUE_HEAD = 1 3714 TCL_QUEUE_MARK = 2 3715 ) 3716 3717 const ( 3718 TCL_PATH_ABSOLUTE = 0 3719 TCL_PATH_RELATIVE = 1 3720 TCL_PATH_VOLUME_RELATIVE = 2 3721 ) 3722 3723 const ( 3724 TCL_INT = 0 3725 TCL_DOUBLE = 1 3726 TCL_EITHER = 2 3727 TCL_WIDE_INT = 3 3728 ) 3729 3730 type ptrdiff_t = int32 3731 3732 type size_t = uint32 3733 3734 type wchar_t = int32 3735 3736 type va_list = uintptr 3737 3738 type sqlite32 = struct { 3739 FpVfs uintptr 3740 FpVdbe uintptr 3741 FpDfltColl uintptr 3742 Fmutex uintptr 3743 FaDb uintptr 3744 FnDb int32 3745 FmDbFlags u32 3746 Fflags u64 3747 FlastRowid i64 3748 FszMmap i64 3749 FnSchemaLock u32 3750 FopenFlags uint32 3751 FerrCode int32 3752 FerrByteOffset int32 3753 FerrMask int32 3754 FiSysErrno int32 3755 FdbOptFlags u32 3756 Fenc u8 3757 FautoCommit u8 3758 Ftemp_store u8 3759 FmallocFailed u8 3760 FbBenignMalloc u8 3761 FdfltLockMode u8 3762 FnextAutovac int8 3763 FsuppressErr u8 3764 FvtabOnConflict u8 3765 FisTransactionSavepoint u8 3766 FmTrace u8 3767 FnoSharedCache u8 3768 FnSqlExec u8 3769 FeOpenState u8 3770 F__ccgo_pad1 [2]byte 3771 FnextPagesize int32 3772 FnChange i64 3773 FnTotalChange i64 3774 FaLimit [12]int32 3775 FnMaxSorterMmap int32 3776 Finit struct { 3777 FnewTnum Pgno 3778 FiDb u8 3779 Fbusy u8 3780 F__ccgo_pad1 [2]byte 3781 ForphanTrigger uint8 3782 F__ccgo_pad2 [3]byte 3783 FazInit uintptr 3784 } 3785 FnVdbeActive int32 3786 FnVdbeRead int32 3787 FnVdbeWrite int32 3788 FnVdbeExec int32 3789 FnVDestroy int32 3790 FnExtension int32 3791 FaExtension uintptr 3792 Ftrace struct{ FxLegacy uintptr } 3793 FpTraceArg uintptr 3794 FxProfile uintptr 3795 FpProfileArg uintptr 3796 FpCommitArg uintptr 3797 FxCommitCallback uintptr 3798 FpRollbackArg uintptr 3799 FxRollbackCallback uintptr 3800 FpUpdateArg uintptr 3801 FxUpdateCallback uintptr 3802 FpAutovacPagesArg uintptr 3803 FxAutovacDestr uintptr 3804 FxAutovacPages uintptr 3805 FpParse uintptr 3806 FpPreUpdateArg uintptr 3807 FxPreUpdateCallback uintptr 3808 FpPreUpdate uintptr 3809 FxWalCallback uintptr 3810 FpWalArg uintptr 3811 FxCollNeeded uintptr 3812 FxCollNeeded16 uintptr 3813 FpCollNeededArg uintptr 3814 FpErr uintptr 3815 Fu1 struct { 3816 FisInterrupted int32 3817 F__ccgo_pad1 [4]byte 3818 } 3819 Flookaside Lookaside 3820 FxAuth sqlite3_xauth 3821 FpAuthArg uintptr 3822 FxProgress uintptr 3823 FpProgressArg uintptr 3824 FnProgressOps uint32 3825 FnVTrans int32 3826 FaModule Hash 3827 FpVtabCtx uintptr 3828 FaVTrans uintptr 3829 FpDisconnect uintptr 3830 FaFunc Hash 3831 FaCollSeq Hash 3832 FbusyHandler BusyHandler 3833 FaDbStatic [2]Db 3834 FpSavepoint uintptr 3835 FnAnalysisLimit int32 3836 FbusyTimeout int32 3837 FnSavepoint int32 3838 FnStatement int32 3839 FnDeferredCons i64 3840 FnDeferredImmCons i64 3841 FpnBytesFreed uintptr 3842 FpBlockingConnection uintptr 3843 FpUnlockConnection uintptr 3844 FpUnlockArg uintptr 3845 FxUnlockNotify uintptr 3846 FpNextBlocked uintptr 3847 } 3848 3849 type sqlite_int64 = int64 3850 type sqlite_uint64 = uint64 3851 type sqlite3_int64 = sqlite_int64 3852 type sqlite3_uint64 = sqlite_uint64 3853 3854 type sqlite3_callback = uintptr 3855 3856 type sqlite3_file1 = struct{ FpMethods uintptr } 3857 3858 type sqlite3_file = sqlite3_file1 3859 type sqlite3_io_methods1 = struct { 3860 FiVersion int32 3861 FxClose uintptr 3862 FxRead uintptr 3863 FxWrite uintptr 3864 FxTruncate uintptr 3865 FxSync uintptr 3866 FxFileSize uintptr 3867 FxLock uintptr 3868 FxUnlock uintptr 3869 FxCheckReservedLock uintptr 3870 FxFileControl uintptr 3871 FxSectorSize uintptr 3872 FxDeviceCharacteristics uintptr 3873 FxShmMap uintptr 3874 FxShmLock uintptr 3875 FxShmBarrier uintptr 3876 FxShmUnmap uintptr 3877 FxFetch uintptr 3878 FxUnfetch uintptr 3879 } 3880 3881 type sqlite3_io_methods = sqlite3_io_methods1 3882 3883 type sqlite3_mutex1 = struct { 3884 FpReal uintptr 3885 FeType int32 3886 } 3887 3888 type sqlite3_api_routines1 = struct { 3889 Faggregate_context uintptr 3890 Faggregate_count uintptr 3891 Fbind_blob uintptr 3892 Fbind_double uintptr 3893 Fbind_int uintptr 3894 Fbind_int64 uintptr 3895 Fbind_null uintptr 3896 Fbind_parameter_count uintptr 3897 Fbind_parameter_index uintptr 3898 Fbind_parameter_name uintptr 3899 Fbind_text uintptr 3900 Fbind_text16 uintptr 3901 Fbind_value uintptr 3902 Fbusy_handler uintptr 3903 Fbusy_timeout uintptr 3904 Fchanges uintptr 3905 Fclose uintptr 3906 Fcollation_needed uintptr 3907 Fcollation_needed16 uintptr 3908 Fcolumn_blob uintptr 3909 Fcolumn_bytes uintptr 3910 Fcolumn_bytes16 uintptr 3911 Fcolumn_count uintptr 3912 Fcolumn_database_name uintptr 3913 Fcolumn_database_name16 uintptr 3914 Fcolumn_decltype uintptr 3915 Fcolumn_decltype16 uintptr 3916 Fcolumn_double uintptr 3917 Fcolumn_int uintptr 3918 Fcolumn_int64 uintptr 3919 Fcolumn_name uintptr 3920 Fcolumn_name16 uintptr 3921 Fcolumn_origin_name uintptr 3922 Fcolumn_origin_name16 uintptr 3923 Fcolumn_table_name uintptr 3924 Fcolumn_table_name16 uintptr 3925 Fcolumn_text uintptr 3926 Fcolumn_text16 uintptr 3927 Fcolumn_type uintptr 3928 Fcolumn_value uintptr 3929 Fcommit_hook uintptr 3930 Fcomplete uintptr 3931 Fcomplete16 uintptr 3932 Fcreate_collation uintptr 3933 Fcreate_collation16 uintptr 3934 Fcreate_function uintptr 3935 Fcreate_function16 uintptr 3936 Fcreate_module uintptr 3937 Fdata_count uintptr 3938 Fdb_handle uintptr 3939 Fdeclare_vtab uintptr 3940 Fenable_shared_cache uintptr 3941 Ferrcode uintptr 3942 Ferrmsg uintptr 3943 Ferrmsg16 uintptr 3944 Fexec uintptr 3945 Fexpired uintptr 3946 Ffinalize uintptr 3947 Ffree uintptr 3948 Ffree_table uintptr 3949 Fget_autocommit uintptr 3950 Fget_auxdata uintptr 3951 Fget_table uintptr 3952 Fglobal_recover uintptr 3953 Finterruptx uintptr 3954 Flast_insert_rowid uintptr 3955 Flibversion uintptr 3956 Flibversion_number uintptr 3957 Fmalloc uintptr 3958 Fmprintf uintptr 3959 Fopen uintptr 3960 Fopen16 uintptr 3961 Fprepare uintptr 3962 Fprepare16 uintptr 3963 Fprofile uintptr 3964 Fprogress_handler uintptr 3965 Frealloc uintptr 3966 Freset uintptr 3967 Fresult_blob uintptr 3968 Fresult_double uintptr 3969 Fresult_error uintptr 3970 Fresult_error16 uintptr 3971 Fresult_int uintptr 3972 Fresult_int64 uintptr 3973 Fresult_null uintptr 3974 Fresult_text uintptr 3975 Fresult_text16 uintptr 3976 Fresult_text16be uintptr 3977 Fresult_text16le uintptr 3978 Fresult_value uintptr 3979 Frollback_hook uintptr 3980 Fset_authorizer uintptr 3981 Fset_auxdata uintptr 3982 Fxsnprintf uintptr 3983 Fstep uintptr 3984 Ftable_column_metadata uintptr 3985 Fthread_cleanup uintptr 3986 Ftotal_changes uintptr 3987 Ftrace uintptr 3988 Ftransfer_bindings uintptr 3989 Fupdate_hook uintptr 3990 Fuser_data uintptr 3991 Fvalue_blob uintptr 3992 Fvalue_bytes uintptr 3993 Fvalue_bytes16 uintptr 3994 Fvalue_double uintptr 3995 Fvalue_int uintptr 3996 Fvalue_int64 uintptr 3997 Fvalue_numeric_type uintptr 3998 Fvalue_text uintptr 3999 Fvalue_text16 uintptr 4000 Fvalue_text16be uintptr 4001 Fvalue_text16le uintptr 4002 Fvalue_type uintptr 4003 Fvmprintf uintptr 4004 Foverload_function uintptr 4005 Fprepare_v2 uintptr 4006 Fprepare16_v2 uintptr 4007 Fclear_bindings uintptr 4008 Fcreate_module_v2 uintptr 4009 Fbind_zeroblob uintptr 4010 Fblob_bytes uintptr 4011 Fblob_close uintptr 4012 Fblob_open uintptr 4013 Fblob_read uintptr 4014 Fblob_write uintptr 4015 Fcreate_collation_v2 uintptr 4016 Ffile_control uintptr 4017 Fmemory_highwater uintptr 4018 Fmemory_used uintptr 4019 Fmutex_alloc uintptr 4020 Fmutex_enter uintptr 4021 Fmutex_free uintptr 4022 Fmutex_leave uintptr 4023 Fmutex_try uintptr 4024 Fopen_v2 uintptr 4025 Frelease_memory uintptr 4026 Fresult_error_nomem uintptr 4027 Fresult_error_toobig uintptr 4028 Fsleep uintptr 4029 Fsoft_heap_limit uintptr 4030 Fvfs_find uintptr 4031 Fvfs_register uintptr 4032 Fvfs_unregister uintptr 4033 Fxthreadsafe uintptr 4034 Fresult_zeroblob uintptr 4035 Fresult_error_code uintptr 4036 Ftest_control uintptr 4037 Frandomness uintptr 4038 Fcontext_db_handle uintptr 4039 Fextended_result_codes uintptr 4040 Flimit uintptr 4041 Fnext_stmt uintptr 4042 Fsql uintptr 4043 Fstatus uintptr 4044 Fbackup_finish uintptr 4045 Fbackup_init uintptr 4046 Fbackup_pagecount uintptr 4047 Fbackup_remaining uintptr 4048 Fbackup_step uintptr 4049 Fcompileoption_get uintptr 4050 Fcompileoption_used uintptr 4051 Fcreate_function_v2 uintptr 4052 Fdb_config uintptr 4053 Fdb_mutex uintptr 4054 Fdb_status uintptr 4055 Fextended_errcode uintptr 4056 Flog uintptr 4057 Fsoft_heap_limit64 uintptr 4058 Fsourceid uintptr 4059 Fstmt_status uintptr 4060 Fstrnicmp uintptr 4061 Funlock_notify uintptr 4062 Fwal_autocheckpoint uintptr 4063 Fwal_checkpoint uintptr 4064 Fwal_hook uintptr 4065 Fblob_reopen uintptr 4066 Fvtab_config uintptr 4067 Fvtab_on_conflict uintptr 4068 Fclose_v2 uintptr 4069 Fdb_filename uintptr 4070 Fdb_readonly uintptr 4071 Fdb_release_memory uintptr 4072 Ferrstr uintptr 4073 Fstmt_busy uintptr 4074 Fstmt_readonly uintptr 4075 Fstricmp uintptr 4076 Furi_boolean uintptr 4077 Furi_int64 uintptr 4078 Furi_parameter uintptr 4079 Fxvsnprintf uintptr 4080 Fwal_checkpoint_v2 uintptr 4081 Fauto_extension uintptr 4082 Fbind_blob64 uintptr 4083 Fbind_text64 uintptr 4084 Fcancel_auto_extension uintptr 4085 Fload_extension uintptr 4086 Fmalloc64 uintptr 4087 Fmsize uintptr 4088 Frealloc64 uintptr 4089 Freset_auto_extension uintptr 4090 Fresult_blob64 uintptr 4091 Fresult_text64 uintptr 4092 Fstrglob uintptr 4093 Fvalue_dup uintptr 4094 Fvalue_free uintptr 4095 Fresult_zeroblob64 uintptr 4096 Fbind_zeroblob64 uintptr 4097 Fvalue_subtype uintptr 4098 Fresult_subtype uintptr 4099 Fstatus64 uintptr 4100 Fstrlike uintptr 4101 Fdb_cacheflush uintptr 4102 Fsystem_errno uintptr 4103 Ftrace_v2 uintptr 4104 Fexpanded_sql uintptr 4105 Fset_last_insert_rowid uintptr 4106 Fprepare_v3 uintptr 4107 Fprepare16_v3 uintptr 4108 Fbind_pointer uintptr 4109 Fresult_pointer uintptr 4110 Fvalue_pointer uintptr 4111 Fvtab_nochange uintptr 4112 Fvalue_nochange uintptr 4113 Fvtab_collation uintptr 4114 Fkeyword_count uintptr 4115 Fkeyword_name uintptr 4116 Fkeyword_check uintptr 4117 Fstr_new uintptr 4118 Fstr_finish uintptr 4119 Fstr_appendf uintptr 4120 Fstr_vappendf uintptr 4121 Fstr_append uintptr 4122 Fstr_appendall uintptr 4123 Fstr_appendchar uintptr 4124 Fstr_reset uintptr 4125 Fstr_errcode uintptr 4126 Fstr_length uintptr 4127 Fstr_value uintptr 4128 Fcreate_window_function uintptr 4129 Fnormalized_sql uintptr 4130 Fstmt_isexplain uintptr 4131 Fvalue_frombind uintptr 4132 Fdrop_modules uintptr 4133 Fhard_heap_limit64 uintptr 4134 Furi_key uintptr 4135 Ffilename_database uintptr 4136 Ffilename_journal uintptr 4137 Ffilename_wal uintptr 4138 Fcreate_filename uintptr 4139 Ffree_filename uintptr 4140 Fdatabase_file_object uintptr 4141 Ftxn_state uintptr 4142 Fchanges64 uintptr 4143 Ftotal_changes64 uintptr 4144 Fautovacuum_pages uintptr 4145 Ferror_offset uintptr 4146 Fvtab_rhs_value uintptr 4147 Fvtab_distinct uintptr 4148 Fvtab_in uintptr 4149 Fvtab_in_first uintptr 4150 Fvtab_in_next uintptr 4151 Fdeserialize uintptr 4152 Fserialize uintptr 4153 Fdb_name uintptr 4154 } 4155 4156 type sqlite3_vfs1 = struct { 4157 FiVersion int32 4158 FszOsFile int32 4159 FmxPathname int32 4160 FpNext uintptr 4161 FzName uintptr 4162 FpAppData uintptr 4163 FxOpen uintptr 4164 FxDelete uintptr 4165 FxAccess uintptr 4166 FxFullPathname uintptr 4167 FxDlOpen uintptr 4168 FxDlError uintptr 4169 FxDlSym uintptr 4170 FxDlClose uintptr 4171 FxRandomness uintptr 4172 FxSleep uintptr 4173 FxCurrentTime uintptr 4174 FxGetLastError uintptr 4175 FxCurrentTimeInt64 uintptr 4176 FxSetSystemCall uintptr 4177 FxGetSystemCall uintptr 4178 FxNextSystemCall uintptr 4179 } 4180 4181 type sqlite3_vfs = sqlite3_vfs1 4182 type sqlite3_syscall_ptr = uintptr 4183 4184 type sqlite3_mem_methods1 = struct { 4185 FxMalloc uintptr 4186 FxFree uintptr 4187 FxRealloc uintptr 4188 FxSize uintptr 4189 FxRoundup uintptr 4190 FxInit uintptr 4191 FxShutdown uintptr 4192 FpAppData uintptr 4193 } 4194 4195 type sqlite3_mem_methods = sqlite3_mem_methods1 4196 4197 type sqlite3_value1 = struct { 4198 Fu struct{ Fr float64 } 4199 Fz uintptr 4200 Fn int32 4201 Fflags u16 4202 Fenc u8 4203 FeSubtype u8 4204 Fdb uintptr 4205 FszMalloc int32 4206 FuTemp u32 4207 FzMalloc uintptr 4208 FxDel uintptr 4209 } 4210 4211 type sqlite3_context1 = struct { 4212 FpOut uintptr 4213 FpFunc uintptr 4214 FpMem uintptr 4215 FpVdbe uintptr 4216 FiOp int32 4217 FisError int32 4218 Fenc u8 4219 FskipFlag u8 4220 Fargc u8 4221 F__ccgo_pad1 [1]byte 4222 Fargv [1]uintptr 4223 } 4224 4225 type sqlite3_destructor_type = uintptr 4226 4227 type sqlite3_vtab1 = struct { 4228 FpModule uintptr 4229 FnRef int32 4230 FzErrMsg uintptr 4231 } 4232 4233 type sqlite3_vtab = sqlite3_vtab1 4234 type sqlite3_index_info1 = struct { 4235 FnConstraint int32 4236 FaConstraint uintptr 4237 FnOrderBy int32 4238 FaOrderBy uintptr 4239 FaConstraintUsage uintptr 4240 FidxNum int32 4241 FidxStr uintptr 4242 FneedToFreeIdxStr int32 4243 ForderByConsumed int32 4244 FestimatedCost float64 4245 FestimatedRows sqlite3_int64 4246 FidxFlags int32 4247 FcolUsed sqlite3_uint64 4248 } 4249 4250 type sqlite3_index_info = sqlite3_index_info1 4251 type sqlite3_vtab_cursor1 = struct{ FpVtab uintptr } 4252 4253 type sqlite3_vtab_cursor = sqlite3_vtab_cursor1 4254 type sqlite3_module1 = struct { 4255 FiVersion int32 4256 FxCreate uintptr 4257 FxConnect uintptr 4258 FxBestIndex uintptr 4259 FxDisconnect uintptr 4260 FxDestroy uintptr 4261 FxOpen uintptr 4262 FxClose uintptr 4263 FxFilter uintptr 4264 FxNext uintptr 4265 FxEof uintptr 4266 FxColumn uintptr 4267 FxRowid uintptr 4268 FxUpdate uintptr 4269 FxBegin uintptr 4270 FxSync uintptr 4271 FxCommit uintptr 4272 FxRollback uintptr 4273 FxFindFunction uintptr 4274 FxRename uintptr 4275 FxSavepoint uintptr 4276 FxRelease uintptr 4277 FxRollbackTo uintptr 4278 FxShadowName uintptr 4279 } 4280 4281 type sqlite3_module = sqlite3_module1 4282 4283 type sqlite3_index_constraint = struct { 4284 FiColumn int32 4285 Fop uint8 4286 Fusable uint8 4287 F__ccgo_pad1 [2]byte 4288 FiTermOffset int32 4289 } 4290 4291 type sqlite3_index_orderby = struct { 4292 FiColumn int32 4293 Fdesc uint8 4294 F__ccgo_pad1 [3]byte 4295 } 4296 4297 type sqlite3_index_constraint_usage = struct { 4298 FargvIndex int32 4299 Fomit uint8 4300 F__ccgo_pad1 [3]byte 4301 } 4302 4303 type sqlite3_mutex_methods1 = struct { 4304 FxMutexInit uintptr 4305 FxMutexEnd uintptr 4306 FxMutexAlloc uintptr 4307 FxMutexFree uintptr 4308 FxMutexEnter uintptr 4309 FxMutexTry uintptr 4310 FxMutexLeave uintptr 4311 FxMutexHeld uintptr 4312 FxMutexNotheld uintptr 4313 } 4314 4315 type sqlite3_mutex_methods = sqlite3_mutex_methods1 4316 4317 type sqlite3_str1 = struct { 4318 Fdb uintptr 4319 FzText uintptr 4320 FnAlloc u32 4321 FmxAlloc u32 4322 FnChar u32 4323 FaccError u8 4324 FprintfFlags u8 4325 F__ccgo_pad1 [2]byte 4326 } 4327 4328 type sqlite3_pcache_page1 = struct { 4329 FpBuf uintptr 4330 FpExtra uintptr 4331 } 4332 4333 type sqlite3_pcache_page = sqlite3_pcache_page1 4334 4335 type sqlite3_pcache_methods21 = struct { 4336 FiVersion int32 4337 FpArg uintptr 4338 FxInit uintptr 4339 FxShutdown uintptr 4340 FxCreate uintptr 4341 FxCachesize uintptr 4342 FxPagecount uintptr 4343 FxFetch uintptr 4344 FxUnpin uintptr 4345 FxRekey uintptr 4346 FxTruncate uintptr 4347 FxDestroy uintptr 4348 FxShrink uintptr 4349 } 4350 4351 type sqlite3_pcache_methods2 = sqlite3_pcache_methods21 4352 4353 type sqlite3_pcache_methods1 = struct { 4354 FpArg uintptr 4355 FxInit uintptr 4356 FxShutdown uintptr 4357 FxCreate uintptr 4358 FxCachesize uintptr 4359 FxPagecount uintptr 4360 FxFetch uintptr 4361 FxUnpin uintptr 4362 FxRekey uintptr 4363 FxTruncate uintptr 4364 FxDestroy uintptr 4365 } 4366 4367 type sqlite3_pcache_methods = sqlite3_pcache_methods1 4368 4369 type sqlite3_snapshot1 = struct{ Fhidden [48]uint8 } 4370 4371 type sqlite3_snapshot = sqlite3_snapshot1 4372 4373 type sqlite3_rtree_geometry1 = struct { 4374 FpContext uintptr 4375 FnParam int32 4376 FaParam uintptr 4377 FpUser uintptr 4378 FxDelUser uintptr 4379 } 4380 4381 type sqlite3_rtree_geometry = sqlite3_rtree_geometry1 4382 type sqlite3_rtree_query_info1 = struct { 4383 FpContext uintptr 4384 FnParam int32 4385 FaParam uintptr 4386 FpUser uintptr 4387 FxDelUser uintptr 4388 FaCoord uintptr 4389 FanQueue uintptr 4390 FnCoord int32 4391 FiLevel int32 4392 FmxLevel int32 4393 FiRowid sqlite3_int64 4394 FrParentScore sqlite3_rtree_dbl 4395 FeParentWithin int32 4396 FeWithin int32 4397 FrScore sqlite3_rtree_dbl 4398 FapSqlParam uintptr 4399 } 4400 4401 type sqlite3_rtree_query_info = sqlite3_rtree_query_info1 4402 4403 type sqlite3_rtree_dbl = float64 4404 4405 type Fts5ExtensionApi1 = struct { 4406 FiVersion int32 4407 FxUserData uintptr 4408 FxColumnCount uintptr 4409 FxRowCount uintptr 4410 FxColumnTotalSize uintptr 4411 FxTokenize uintptr 4412 FxPhraseCount uintptr 4413 FxPhraseSize uintptr 4414 FxInstCount uintptr 4415 FxInst uintptr 4416 FxRowid uintptr 4417 FxColumnText uintptr 4418 FxColumnSize uintptr 4419 FxQueryPhrase uintptr 4420 FxSetAuxdata uintptr 4421 FxGetAuxdata uintptr 4422 FxPhraseFirst uintptr 4423 FxPhraseNext uintptr 4424 FxPhraseFirstColumn uintptr 4425 FxPhraseNextColumn uintptr 4426 } 4427 4428 type Fts5ExtensionApi = Fts5ExtensionApi1 4429 type Fts5PhraseIter1 = struct { 4430 Fa uintptr 4431 Fb uintptr 4432 } 4433 4434 type Fts5PhraseIter = Fts5PhraseIter1 4435 4436 type fts5_extension_function = uintptr 4437 type fts5_tokenizer1 = struct { 4438 FxCreate uintptr 4439 FxDelete uintptr 4440 FxTokenize uintptr 4441 } 4442 4443 type fts5_tokenizer = fts5_tokenizer1 4444 4445 type fts5_api1 = struct { 4446 FiVersion int32 4447 FxCreateTokenizer uintptr 4448 FxFindTokenizer uintptr 4449 FxCreateFunction uintptr 4450 } 4451 4452 type fts5_api = fts5_api1 4453 4454 type sqlite3expert1 = struct { 4455 FiSample int32 4456 Fdb uintptr 4457 Fdbm uintptr 4458 Fdbv uintptr 4459 FpTable uintptr 4460 FpScan uintptr 4461 FpWrite uintptr 4462 FpStatement uintptr 4463 FbRun int32 4464 FpzErrmsg uintptr 4465 Frc int32 4466 FhIdx IdxHash 4467 FzCandidates uintptr 4468 } 4469 4470 type sqlite3expert = sqlite3expert1 4471 4472 type __locale_struct = struct { 4473 F__locales [13]uintptr 4474 F__ctype_b uintptr 4475 F__ctype_tolower uintptr 4476 F__ctype_toupper uintptr 4477 F__names [13]uintptr 4478 } 4479 4480 type locale_t = uintptr 4481 4482 type _G_fpos_t = struct { 4483 F__pos int32 4484 F__state struct { 4485 F__count int32 4486 F__value struct{ F__wch uint32 } 4487 } 4488 } 4489 4490 type _G_fpos64_t = struct { 4491 F__pos int64 4492 F__state struct { 4493 F__count int32 4494 F__value struct{ F__wch uint32 } 4495 } 4496 } 4497 4498 type _IO_FILE = struct { 4499 F_flags int32 4500 F_IO_read_ptr uintptr 4501 F_IO_read_end uintptr 4502 F_IO_read_base uintptr 4503 F_IO_write_base uintptr 4504 F_IO_write_ptr uintptr 4505 F_IO_write_end uintptr 4506 F_IO_buf_base uintptr 4507 F_IO_buf_end uintptr 4508 F_IO_save_base uintptr 4509 F_IO_backup_base uintptr 4510 F_IO_save_end uintptr 4511 F_markers uintptr 4512 F_chain uintptr 4513 F_fileno int32 4514 F_flags2 int32 4515 F_old_offset int32 4516 F_cur_column uint16 4517 F_vtable_offset int8 4518 F_shortbuf [1]int8 4519 F_lock uintptr 4520 F_offset int64 4521 F_codecvt uintptr 4522 F_wide_data uintptr 4523 F_freeres_list uintptr 4524 F_freeres_buf uintptr 4525 F__pad5 size_t 4526 F_mode int32 4527 F_unused2 [40]int8 4528 } 4529 4530 type FILE = _IO_FILE 4531 4532 type off_t = int64 4533 4534 type ssize_t = int32 4535 4536 type fpos_t = _G_fpos64_t 4537 4538 type i64 = sqlite3_int64 4539 type u64 = sqlite3_uint64 4540 4541 type IdxColumn1 = struct { 4542 FzName uintptr 4543 FzColl uintptr 4544 FiPk int32 4545 } 4546 4547 type IdxColumn = IdxColumn1 4548 type IdxConstraint1 = struct { 4549 FzColl uintptr 4550 FbRange int32 4551 FiCol int32 4552 FbFlag int32 4553 FbDesc int32 4554 FpNext uintptr 4555 FpLink uintptr 4556 } 4557 4558 type IdxConstraint = IdxConstraint1 4559 type IdxScan1 = struct { 4560 FpTab uintptr 4561 FiDb int32 4562 Fcovering i64 4563 FpOrder uintptr 4564 FpEq uintptr 4565 FpRange uintptr 4566 FpNextScan uintptr 4567 } 4568 4569 type IdxScan = IdxScan1 4570 type IdxStatement1 = struct { 4571 FiId int32 4572 FzSql uintptr 4573 FzIdx uintptr 4574 FzEQP uintptr 4575 FpNext uintptr 4576 } 4577 4578 type IdxStatement = IdxStatement1 4579 type IdxTable1 = struct { 4580 FnCol int32 4581 FzName uintptr 4582 FaCol uintptr 4583 FpNext uintptr 4584 } 4585 4586 type IdxTable = IdxTable1 4587 type IdxWrite1 = struct { 4588 FpTab uintptr 4589 FeOp int32 4590 FpNext uintptr 4591 } 4592 4593 type IdxWrite = IdxWrite1 4594 4595 type IdxHashEntry1 = struct { 4596 FzKey uintptr 4597 FzVal uintptr 4598 FzVal2 uintptr 4599 FpHashNext uintptr 4600 FpNext uintptr 4601 } 4602 4603 type IdxHashEntry = IdxHashEntry1 4604 type IdxHash1 = struct { 4605 FpFirst uintptr 4606 FaHash [1023]uintptr 4607 } 4608 4609 type IdxHash = IdxHash1 4610 4611 func idxMalloc(tls *libc.TLS, pRc uintptr, nByte int32) uintptr { 4612 var pRet uintptr 4613 4614 pRet = sqlite3.Xsqlite3_malloc(tls, nByte) 4615 if pRet != 0 { 4616 libc.Xmemset(tls, pRet, 0, uint32(nByte)) 4617 } else { 4618 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4619 } 4620 return pRet 4621 } 4622 4623 func idxHashInit(tls *libc.TLS, pHash uintptr) { 4624 libc.Xmemset(tls, pHash, 0, uint32(unsafe.Sizeof(IdxHash{}))) 4625 } 4626 4627 func idxHashClear(tls *libc.TLS, pHash uintptr) { 4628 var i int32 4629 for i = 0; i < IDX_HASH_SIZE; i++ { 4630 var pEntry uintptr 4631 var pNext uintptr 4632 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 4 + uintptr(i)*4)); pEntry != 0; pEntry = pNext { 4633 pNext = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext 4634 sqlite3.Xsqlite3_free(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2) 4635 sqlite3.Xsqlite3_free(tls, pEntry) 4636 } 4637 } 4638 libc.Xmemset(tls, pHash, 0, uint32(unsafe.Sizeof(IdxHash{}))) 4639 } 4640 4641 func idxHashString(tls *libc.TLS, z uintptr, n int32) int32 { 4642 var ret uint32 = uint32(0) 4643 var i int32 4644 for i = 0; i < n; i++ { 4645 ret = ret + (ret<<3 + uint32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))))) 4646 } 4647 return int32(ret % uint32(IDX_HASH_SIZE)) 4648 } 4649 4650 func idxHashAdd(tls *libc.TLS, pRc uintptr, pHash uintptr, zKey uintptr, zVal uintptr) int32 { 4651 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 4652 var iHash int32 = idxHashString(tls, zKey, nKey) 4653 var nVal int32 = func() int32 { 4654 if zVal != 0 { 4655 return int32(libc.Xstrlen(tls, zVal)) 4656 } 4657 return 0 4658 }() 4659 var pEntry uintptr 4660 4661 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 4 + uintptr(iHash)*4)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4662 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint32(nKey)) { 4663 return 1 4664 } 4665 } 4666 pEntry = idxMalloc(tls, pRc, int32(uint32(unsafe.Sizeof(IdxHashEntry{}))+uint32(nKey)+uint32(1)+uint32(nVal)+uint32(1))) 4667 if pEntry != 0 { 4668 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey = pEntry + 1*20 4669 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint32(nKey)) 4670 if zVal != 0 { 4671 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey + uintptr(nKey+1) 4672 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, zVal, uint32(nVal)) 4673 } 4674 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext = *(*uintptr)(unsafe.Pointer(pHash + 4 + uintptr(iHash)*4)) 4675 *(*uintptr)(unsafe.Pointer(pHash + 4 + uintptr(iHash)*4)) = pEntry 4676 4677 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext = (*IdxHash)(unsafe.Pointer(pHash)).FpFirst 4678 (*IdxHash)(unsafe.Pointer(pHash)).FpFirst = pEntry 4679 } 4680 return 0 4681 } 4682 4683 func idxHashFind(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4684 var iHash int32 4685 var pEntry uintptr 4686 if nKey < 0 { 4687 nKey = int32(libc.Xstrlen(tls, zKey)) 4688 } 4689 iHash = idxHashString(tls, zKey, nKey) 4690 4691 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 4 + uintptr(iHash)*4)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4692 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint32(nKey)) { 4693 return pEntry 4694 } 4695 } 4696 return uintptr(0) 4697 } 4698 4699 func idxHashSearch(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4700 var pEntry uintptr = idxHashFind(tls, pHash, zKey, nKey) 4701 if pEntry != 0 { 4702 return (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal 4703 } 4704 return uintptr(0) 4705 } 4706 4707 func idxNewConstraint(tls *libc.TLS, pRc uintptr, zColl uintptr) uintptr { 4708 var pNew uintptr 4709 var nColl int32 = int32(libc.Xstrlen(tls, zColl)) 4710 4711 pNew = idxMalloc(tls, pRc, int32(uint32(unsafe.Sizeof(IdxConstraint{}))*uint32(nColl)+uint32(1))) 4712 if pNew != 0 { 4713 (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl = pNew + 1*28 4714 libc.Xmemcpy(tls, (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl, zColl, uint32(nColl+1)) 4715 } 4716 return pNew 4717 } 4718 4719 func idxDatabaseError(tls *libc.TLS, db uintptr, pzErrmsg uintptr) { 4720 bp := tls.Alloc(8) 4721 defer tls.Free(8) 4722 4723 *(*uintptr)(unsafe.Pointer(pzErrmsg)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 4724 } 4725 4726 func idxPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zSql uintptr) int32 { 4727 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, ppStmt, uintptr(0)) 4728 if rc != SQLITE_OK { 4729 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 4730 idxDatabaseError(tls, db, pzErrmsg) 4731 } 4732 return rc 4733 } 4734 4735 func idxPrintfPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zFmt uintptr, va uintptr) int32 { 4736 var ap va_list 4737 _ = ap 4738 var rc int32 4739 var zSql uintptr 4740 ap = va 4741 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 4742 if zSql == uintptr(0) { 4743 rc = SQLITE_NOMEM 4744 } else { 4745 rc = idxPrepareStmt(tls, db, ppStmt, pzErrmsg, zSql) 4746 sqlite3.Xsqlite3_free(tls, zSql) 4747 } 4748 _ = ap 4749 return rc 4750 } 4751 4752 type ExpertVtab1 = struct { 4753 Fbase sqlite3_vtab 4754 FpTab uintptr 4755 FpExpert uintptr 4756 } 4757 4758 type ExpertVtab = ExpertVtab1 4759 4760 type ExpertCsr1 = struct { 4761 Fbase sqlite3_vtab_cursor 4762 FpData uintptr 4763 } 4764 4765 type ExpertCsr = ExpertCsr1 4766 4767 func expertDequote(tls *libc.TLS, zIn uintptr) uintptr { 4768 var n int32 = int32(libc.Xstrlen(tls, zIn)) 4769 var zRet uintptr = sqlite3.Xsqlite3_malloc(tls, n) 4770 4771 if zRet != 0 { 4772 var iOut int32 = 0 4773 var iIn int32 = 0 4774 for iIn = 1; iIn < n-1; iIn++ { 4775 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == '\'' { 4776 iIn++ 4777 } 4778 *(*int8)(unsafe.Pointer(zRet + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 4779 } 4780 *(*int8)(unsafe.Pointer(zRet + uintptr(iOut))) = int8(0) 4781 } 4782 4783 return zRet 4784 } 4785 4786 func expertConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 4787 bp := tls.Alloc(4) 4788 defer tls.Free(4) 4789 4790 var pExpert uintptr = pAux 4791 var p uintptr = uintptr(0) 4792 4793 if argc != 4 { 4794 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3, 0) 4795 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 4796 } else { 4797 var zCreateTable uintptr = expertDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4))) 4798 if zCreateTable != 0 { 4799 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 4800 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4801 p = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertVtab{}))) 4802 } 4803 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4804 (*ExpertVtab)(unsafe.Pointer(p)).FpExpert = pExpert 4805 (*ExpertVtab)(unsafe.Pointer(p)).FpTab = (*sqlite3expert)(unsafe.Pointer(pExpert)).FpTable 4806 4807 } 4808 sqlite3.Xsqlite3_free(tls, zCreateTable) 4809 } else { 4810 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 4811 } 4812 } 4813 4814 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 4815 return *(*int32)(unsafe.Pointer(bp)) 4816 } 4817 4818 func expertDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 4819 var p uintptr = pVtab 4820 sqlite3.Xsqlite3_free(tls, p) 4821 return SQLITE_OK 4822 } 4823 4824 func expertBestIndex(tls *libc.TLS, pVtab uintptr, pIdxInfo uintptr) int32 { 4825 bp := tls.Alloc(4) 4826 defer tls.Free(4) 4827 4828 var p uintptr = pVtab 4829 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4830 var n int32 = 0 4831 var pScan uintptr 4832 var opmask int32 = SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | SQLITE_INDEX_CONSTRAINT_LE 4833 4834 pScan = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxScan{}))) 4835 if pScan != 0 { 4836 var i int32 4837 4838 (*IdxScan)(unsafe.Pointer(pScan)).FpTab = (*ExpertVtab)(unsafe.Pointer(p)).FpTab 4839 (*IdxScan)(unsafe.Pointer(pScan)).FpNextScan = (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan 4840 (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan = pScan 4841 4842 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 4843 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 4844 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 4845 (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn >= 0 && 4846 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)*12)).FiPk == 0 && 4847 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop)&opmask != 0 { 4848 var pNew uintptr 4849 var zColl uintptr = sqlite3.Xsqlite3_vtab_collation(tls, pIdxInfo, i) 4850 pNew = idxNewConstraint(tls, bp, zColl) 4851 if pNew != 0 { 4852 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn 4853 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 4854 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpEq 4855 (*IdxScan)(unsafe.Pointer(pScan)).FpEq = pNew 4856 } else { 4857 (*IdxConstraint)(unsafe.Pointer(pNew)).FbRange = 1 4858 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpRange 4859 (*IdxScan)(unsafe.Pointer(pScan)).FpRange = pNew 4860 } 4861 } 4862 n++ 4863 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = n 4864 } 4865 } 4866 4867 for i = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy - 1; i >= 0; i-- { 4868 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 4869 if iCol >= 0 { 4870 var pNew uintptr = idxNewConstraint(tls, bp, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr(iCol)*12)).FzColl) 4871 if pNew != 0 { 4872 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = iCol 4873 (*IdxConstraint)(unsafe.Pointer(pNew)).FbDesc = int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).Fdesc) 4874 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4875 (*IdxConstraint)(unsafe.Pointer(pNew)).FpLink = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4876 (*IdxScan)(unsafe.Pointer(pScan)).FpOrder = pNew 4877 n++ 4878 } 4879 } 4880 } 4881 } 4882 4883 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000.0 / float64(n+1) 4884 return *(*int32)(unsafe.Pointer(bp)) 4885 } 4886 4887 func expertUpdate(tls *libc.TLS, pVtab uintptr, nData int32, azData uintptr, pRowid uintptr) int32 { 4888 _ = pVtab 4889 _ = nData 4890 _ = azData 4891 _ = pRowid 4892 return SQLITE_OK 4893 } 4894 4895 func expertOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 4896 bp := tls.Alloc(4) 4897 defer tls.Free(4) 4898 4899 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4900 var pCsr uintptr 4901 _ = pVTab 4902 pCsr = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertCsr{}))) 4903 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 4904 return *(*int32)(unsafe.Pointer(bp)) 4905 } 4906 4907 func expertClose(tls *libc.TLS, cur uintptr) int32 { 4908 var pCsr uintptr = cur 4909 sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4910 sqlite3.Xsqlite3_free(tls, pCsr) 4911 return SQLITE_OK 4912 } 4913 4914 func expertEof(tls *libc.TLS, cur uintptr) int32 { 4915 var pCsr uintptr = cur 4916 return libc.Bool32((*ExpertCsr)(unsafe.Pointer(pCsr)).FpData == uintptr(0)) 4917 } 4918 4919 func expertNext(tls *libc.TLS, cur uintptr) int32 { 4920 var pCsr uintptr = cur 4921 var rc int32 = SQLITE_OK 4922 4923 rc = sqlite3.Xsqlite3_step(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4924 if rc != SQLITE_ROW { 4925 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4926 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4927 } else { 4928 rc = SQLITE_OK 4929 } 4930 4931 return rc 4932 } 4933 4934 func expertRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 4935 _ = cur 4936 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 4937 return SQLITE_OK 4938 } 4939 4940 func expertColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 4941 var pCsr uintptr = cur 4942 var pVal uintptr 4943 pVal = sqlite3.Xsqlite3_column_value(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData, i) 4944 if pVal != 0 { 4945 sqlite3.Xsqlite3_result_value(tls, ctx, pVal) 4946 } 4947 return SQLITE_OK 4948 } 4949 4950 func expertFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 4951 bp := tls.Alloc(8) 4952 defer tls.Free(8) 4953 4954 var pCsr uintptr = cur 4955 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 4956 var pExpert uintptr = (*ExpertVtab)(unsafe.Pointer(pVtab)).FpExpert 4957 var rc int32 4958 4959 _ = idxNum 4960 _ = idxStr 4961 _ = argc 4962 _ = argv 4963 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4964 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4965 if rc == SQLITE_OK { 4966 rc = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pExpert)).Fdb, pCsr+4, pVtab+8, 4967 ts+19, libc.VaList(bp, (*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(pVtab)).FpTab)).FzName)) 4968 } 4969 4970 if rc == SQLITE_OK { 4971 rc = expertNext(tls, cur) 4972 } 4973 return rc 4974 } 4975 4976 func idxRegisterVtab(tls *libc.TLS, p uintptr) int32 { 4977 return sqlite3.Xsqlite3_create_module(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+56, uintptr(unsafe.Pointer(&expertModule)), p) 4978 } 4979 4980 var expertModule = sqlite3_module{ 4981 FiVersion: 2, 4982 FxCreate: 0, 4983 FxConnect: 0, 4984 FxBestIndex: 0, 4985 FxDisconnect: 0, 4986 FxDestroy: 0, 4987 FxOpen: 0, 4988 FxClose: 0, 4989 FxFilter: 0, 4990 FxNext: 0, 4991 FxEof: 0, 4992 FxColumn: 0, 4993 FxRowid: 0, 4994 FxUpdate: 0, 4995 } 4996 4997 func idxFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr) { 4998 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 4999 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 5000 *(*int32)(unsafe.Pointer(pRc)) = rc 5001 } 5002 } 5003 5004 func idxGetTableInfo(tls *libc.TLS, db uintptr, zTab uintptr, ppOut uintptr, pzErrmsg uintptr) int32 { 5005 bp := tls.Alloc(24) 5006 defer tls.Free(24) 5007 5008 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 5009 var nCol int32 = 0 5010 var nTab int32 5011 var nByte int32 5012 var pNew uintptr = uintptr(0) 5013 5014 var rc2 int32 5015 var pCsr uintptr = uintptr(0) 5016 var nPk int32 = 0 5017 5018 *(*uintptr)(unsafe.Pointer(ppOut)) = uintptr(0) 5019 if zTab == uintptr(0) { 5020 return SQLITE_ERROR 5021 } 5022 nTab = int32(libc.Xstrlen(tls, zTab)) 5023 nByte = int32(uint32(unsafe.Sizeof(IdxTable{})) + uint32(nTab) + uint32(1)) 5024 *(*int32)(unsafe.Pointer(bp + 16)) = idxPrintfPrepareStmt(tls, db, bp+8, pzErrmsg, ts+63, libc.VaList(bp, zTab)) 5025 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 5026 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 5027 *(*uintptr)(unsafe.Pointer(bp + 12)) = uintptr(0) 5028 if zCol == uintptr(0) { 5029 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_ERROR 5030 break 5031 } 5032 nByte = nByte + (1 + int32(libc.Xstrlen(tls, zCol))) 5033 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_table_column_metadata(tls, 5034 db, ts+85, zTab, zCol, uintptr(0), bp+12, uintptr(0), uintptr(0), uintptr(0)) 5035 if *(*uintptr)(unsafe.Pointer(bp + 12)) == uintptr(0) { 5036 *(*uintptr)(unsafe.Pointer(bp + 12)) = ts + 90 5037 } 5038 nByte = nByte + (1 + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 12))))) 5039 nCol++ 5040 nPk = nPk + libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) > 0) 5041 } 5042 rc2 = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 5043 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5044 *(*int32)(unsafe.Pointer(bp + 16)) = rc2 5045 } 5046 5047 nByte = int32(uint32(nByte) + uint32(unsafe.Sizeof(IdxColumn{}))*uint32(nCol)) 5048 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5049 pNew = idxMalloc(tls, bp+16, nByte) 5050 } 5051 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5052 (*IdxTable)(unsafe.Pointer(pNew)).FaCol = pNew + 1*16 5053 (*IdxTable)(unsafe.Pointer(pNew)).FnCol = nCol 5054 pCsr = (*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*12 5055 } 5056 5057 nCol = 0 5058 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 5059 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 5060 *(*uintptr)(unsafe.Pointer(bp + 20)) = uintptr(0) 5061 var nCopy int32 5062 if zCol == uintptr(0) { 5063 continue 5064 } 5065 nCopy = int32(libc.Xstrlen(tls, zCol)) + 1 5066 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*12)).FzName = pCsr 5067 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*12)).FiPk = libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) == 1 && nPk == 1) 5068 libc.Xmemcpy(tls, pCsr, zCol, uint32(nCopy)) 5069 pCsr += uintptr(nCopy) 5070 5071 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_table_column_metadata(tls, 5072 db, ts+85, zTab, zCol, uintptr(0), bp+20, uintptr(0), uintptr(0), uintptr(0)) 5073 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 5074 if *(*uintptr)(unsafe.Pointer(bp + 20)) == uintptr(0) { 5075 *(*uintptr)(unsafe.Pointer(bp + 20)) = ts + 90 5076 } 5077 nCopy = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 20)))) + 1 5078 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*12)).FzColl = pCsr 5079 libc.Xmemcpy(tls, pCsr, *(*uintptr)(unsafe.Pointer(bp + 20)), uint32(nCopy)) 5080 pCsr += uintptr(nCopy) 5081 } 5082 5083 nCol++ 5084 } 5085 idxFinalize(tls, bp+16, *(*uintptr)(unsafe.Pointer(bp + 8))) 5086 5087 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 5088 sqlite3.Xsqlite3_free(tls, pNew) 5089 pNew = uintptr(0) 5090 } else if pNew != uintptr(0) { 5091 (*IdxTable)(unsafe.Pointer(pNew)).FzName = pCsr 5092 if (*IdxTable)(unsafe.Pointer(pNew)).FzName != uintptr(0) { 5093 libc.Xmemcpy(tls, (*IdxTable)(unsafe.Pointer(pNew)).FzName, zTab, uint32(nTab+1)) 5094 } 5095 } 5096 5097 *(*uintptr)(unsafe.Pointer(ppOut)) = pNew 5098 return *(*int32)(unsafe.Pointer(bp + 16)) 5099 } 5100 5101 func idxAppendText(tls *libc.TLS, pRc uintptr, zIn uintptr, zFmt uintptr, va uintptr) uintptr { 5102 var ap va_list 5103 _ = ap 5104 var zAppend uintptr = uintptr(0) 5105 var zRet uintptr = uintptr(0) 5106 var nIn int32 5107 if zIn != 0 { 5108 nIn = int32(libc.Xstrlen(tls, zIn)) 5109 } else { 5110 nIn = 0 5111 } 5112 var nAppend int32 = 0 5113 ap = va 5114 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 5115 zAppend = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 5116 if zAppend != 0 { 5117 nAppend = int32(libc.Xstrlen(tls, zAppend)) 5118 zRet = sqlite3.Xsqlite3_malloc(tls, nIn+nAppend+1) 5119 } 5120 if zAppend != 0 && zRet != 0 { 5121 if nIn != 0 { 5122 libc.Xmemcpy(tls, zRet, zIn, uint32(nIn)) 5123 } 5124 libc.Xmemcpy(tls, zRet+uintptr(nIn), zAppend, uint32(nAppend+1)) 5125 } else { 5126 sqlite3.Xsqlite3_free(tls, zRet) 5127 zRet = uintptr(0) 5128 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 5129 } 5130 sqlite3.Xsqlite3_free(tls, zAppend) 5131 sqlite3.Xsqlite3_free(tls, zIn) 5132 } 5133 _ = ap 5134 return zRet 5135 } 5136 5137 func idxIdentifierRequiresQuotes(tls *libc.TLS, zId uintptr) int32 { 5138 var i int32 5139 for i = 0; *(*int8)(unsafe.Pointer(zId + uintptr(i))) != 0; i++ { 5140 if !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) == '_') && 5141 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= '0' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= '9') && 5142 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'a' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'z') && 5143 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'A' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'Z') { 5144 return 1 5145 } 5146 } 5147 return 0 5148 } 5149 5150 func idxAppendColDefn(tls *libc.TLS, pRc uintptr, zIn uintptr, pTab uintptr, pCons uintptr) uintptr { 5151 bp := tls.Alloc(32) 5152 defer tls.Free(32) 5153 5154 var zRet uintptr = zIn 5155 var p uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FaCol + uintptr((*IdxConstraint)(unsafe.Pointer(pCons)).FiCol)*12 5156 if zRet != 0 { 5157 zRet = idxAppendText(tls, pRc, zRet, ts+97, 0) 5158 } 5159 5160 if idxIdentifierRequiresQuotes(tls, (*IdxColumn)(unsafe.Pointer(p)).FzName) != 0 { 5161 zRet = idxAppendText(tls, pRc, zRet, ts+100, libc.VaList(bp, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 5162 } else { 5163 zRet = idxAppendText(tls, pRc, zRet, ts, libc.VaList(bp+8, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 5164 } 5165 5166 if sqlite3.Xsqlite3_stricmp(tls, (*IdxColumn)(unsafe.Pointer(p)).FzColl, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 5167 if idxIdentifierRequiresQuotes(tls, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 5168 zRet = idxAppendText(tls, pRc, zRet, ts+103, libc.VaList(bp+16, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 5169 } else { 5170 zRet = idxAppendText(tls, pRc, zRet, ts+115, libc.VaList(bp+24, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 5171 } 5172 } 5173 5174 if (*IdxConstraint)(unsafe.Pointer(pCons)).FbDesc != 0 { 5175 zRet = idxAppendText(tls, pRc, zRet, ts+127, 0) 5176 } 5177 return zRet 5178 } 5179 5180 func idxFindCompatible(tls *libc.TLS, pRc uintptr, dbm uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 5181 bp := tls.Alloc(28) 5182 defer tls.Free(28) 5183 5184 var zTbl uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 5185 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 5186 var pIter uintptr 5187 var nEq int32 = 0 5188 5189 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5190 nEq++ 5191 } 5192 5193 *(*int32)(unsafe.Pointer(bp + 24)) = idxPrintfPrepareStmt(tls, dbm, bp+16, uintptr(0), ts+133, libc.VaList(bp, zTbl)) 5194 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW { 5195 var bMatch int32 = 1 5196 var pT uintptr = pTail 5197 *(*uintptr)(unsafe.Pointer(bp + 20)) = uintptr(0) 5198 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 5199 if zIdx == uintptr(0) { 5200 continue 5201 } 5202 5203 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5204 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 0 5205 } 5206 5207 *(*int32)(unsafe.Pointer(bp + 24)) = idxPrintfPrepareStmt(tls, dbm, bp+20, uintptr(0), ts+154, libc.VaList(bp+8, zIdx)) 5208 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) == SQLITE_ROW { 5209 var iIdx int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), 0) 5210 var iCol int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), 1) 5211 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), 4) 5212 5213 if iIdx < nEq { 5214 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5215 if (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag != 0 { 5216 continue 5217 } 5218 if (*IdxConstraint)(unsafe.Pointer(pIter)).FiCol != iCol { 5219 continue 5220 } 5221 if sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pIter)).FzColl, zColl) != 0 { 5222 continue 5223 } 5224 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 1 5225 break 5226 } 5227 if pIter == uintptr(0) { 5228 bMatch = 0 5229 break 5230 } 5231 } else { 5232 if pT != 0 { 5233 if (*IdxConstraint)(unsafe.Pointer(pT)).FiCol != iCol || sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pT)).FzColl, zColl) != 0 { 5234 bMatch = 0 5235 break 5236 } 5237 pT = (*IdxConstraint)(unsafe.Pointer(pT)).FpLink 5238 } 5239 } 5240 } 5241 idxFinalize(tls, bp+24, *(*uintptr)(unsafe.Pointer(bp + 20))) 5242 5243 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && bMatch != 0 { 5244 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 5245 return 1 5246 } 5247 } 5248 idxFinalize(tls, bp+24, *(*uintptr)(unsafe.Pointer(bp + 16))) 5249 5250 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 24)) 5251 return 0 5252 } 5253 5254 func countNonzeros(tls *libc.TLS, pCount uintptr, nc int32, azResults uintptr, azColumns uintptr) int32 { 5255 _ = azColumns 5256 if nc > 0 && (int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults))))) != '0' || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults)) + 1))) != 0) { 5257 *(*int32)(unsafe.Pointer(pCount)) += 1 5258 } 5259 return 0 5260 } 5261 5262 func idxCreateFromCons(tls *libc.TLS, p uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 5263 bp := tls.Alloc(56) 5264 defer tls.Free(56) 5265 5266 var dbm uintptr = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5267 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_OK 5268 if (pEq != 0 || pTail != 0) && 0 == idxFindCompatible(tls, bp+48, dbm, pScan, pEq, pTail) { 5269 var pTab uintptr = (*IdxScan)(unsafe.Pointer(pScan)).FpTab 5270 var zCols uintptr = uintptr(0) 5271 var zIdx uintptr = uintptr(0) 5272 var pCons uintptr 5273 var h uint32 = uint32(0) 5274 var zFmt uintptr 5275 5276 for pCons = pEq; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 5277 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 5278 } 5279 for pCons = pTail; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 5280 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 5281 } 5282 5283 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 5284 var zTable uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 5285 var quoteTable int32 = idxIdentifierRequiresQuotes(tls, zTable) 5286 var zName uintptr = uintptr(0) 5287 var collisions int32 = 0 5288 for __ccgo := true; __ccgo; __ccgo = collisions < 50 && zName != uintptr(0) { 5289 var zFind uintptr 5290 for *(*int32)(unsafe.Pointer(bp + 52)) = 0; *(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))) != 0; *(*int32)(unsafe.Pointer(bp + 52))++ { 5291 h = h + (h<<3 + uint32(*(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))))) 5292 } 5293 sqlite3.Xsqlite3_free(tls, zName) 5294 zName = sqlite3.Xsqlite3_mprintf(tls, ts+176, libc.VaList(bp, zTable, h)) 5295 if zName == uintptr(0) { 5296 break 5297 } 5298 5299 zFmt = ts + 188 5300 zFind = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+16, zName)) 5301 *(*int32)(unsafe.Pointer(bp + 52)) = 0 5302 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zFind, *(*uintptr)(unsafe.Pointer(&struct { 5303 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 5304 }{countNonzeros})), bp+52, uintptr(0)) 5305 5306 sqlite3.Xsqlite3_free(tls, zFind) 5307 if *(*int32)(unsafe.Pointer(bp + 52)) == 0 { 5308 collisions = 0 5309 break 5310 } 5311 collisions++ 5312 } 5313 if collisions != 0 { 5314 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 5315 } else if zName == uintptr(0) { 5316 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 5317 } else { 5318 if quoteTable != 0 { 5319 zFmt = ts + 274 5320 } else { 5321 zFmt = ts + 304 5322 } 5323 zIdx = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+24, zName, zTable, zCols)) 5324 if !(zIdx != 0) { 5325 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 5326 } else { 5327 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zIdx, uintptr(0), uintptr(0), (*sqlite3expert)(unsafe.Pointer(p)).FpzErrmsg) 5328 if *(*int32)(unsafe.Pointer(bp + 48)) != SQLITE_OK { 5329 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 5330 } else { 5331 idxHashAdd(tls, bp+48, p+44, zName, zIdx) 5332 } 5333 } 5334 sqlite3.Xsqlite3_free(tls, zName) 5335 sqlite3.Xsqlite3_free(tls, zIdx) 5336 } 5337 } 5338 5339 sqlite3.Xsqlite3_free(tls, zCols) 5340 } 5341 return *(*int32)(unsafe.Pointer(bp + 48)) 5342 } 5343 5344 func idxFindConstraint(tls *libc.TLS, pList uintptr, p uintptr) int32 { 5345 var pCmp uintptr 5346 for pCmp = pList; pCmp != 0; pCmp = (*IdxConstraint)(unsafe.Pointer(pCmp)).FpLink { 5347 if (*IdxConstraint)(unsafe.Pointer(p)).FiCol == (*IdxConstraint)(unsafe.Pointer(pCmp)).FiCol { 5348 return 1 5349 } 5350 } 5351 return 0 5352 } 5353 5354 func idxCreateFromWhere(tls *libc.TLS, p uintptr, pScan uintptr, pTail uintptr) int32 { 5355 var p1 uintptr = uintptr(0) 5356 var pCon uintptr 5357 var rc int32 5358 5359 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpEq; pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 5360 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 5361 (*IdxConstraint)(unsafe.Pointer(pCon)).FpLink = p1 5362 p1 = pCon 5363 } 5364 } 5365 5366 rc = idxCreateFromCons(tls, p, pScan, p1, pTail) 5367 5368 if pTail == uintptr(0) { 5369 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpRange; rc == SQLITE_OK && pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 5370 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 5371 rc = idxCreateFromCons(tls, p, pScan, p1, pCon) 5372 } 5373 } 5374 } 5375 5376 return rc 5377 } 5378 5379 func idxCreateCandidates(tls *libc.TLS, p uintptr) int32 { 5380 var rc int32 = SQLITE_OK 5381 var pIter uintptr 5382 5383 for pIter = (*sqlite3expert)(unsafe.Pointer(p)).FpScan; pIter != 0 && rc == SQLITE_OK; pIter = (*IdxScan)(unsafe.Pointer(pIter)).FpNextScan { 5384 rc = idxCreateFromWhere(tls, p, pIter, uintptr(0)) 5385 if rc == SQLITE_OK && (*IdxScan)(unsafe.Pointer(pIter)).FpOrder != 0 { 5386 rc = idxCreateFromWhere(tls, p, pIter, (*IdxScan)(unsafe.Pointer(pIter)).FpOrder) 5387 } 5388 } 5389 5390 return rc 5391 } 5392 5393 func idxConstraintFree(tls *libc.TLS, pConstraint uintptr) { 5394 var pNext uintptr 5395 var p uintptr 5396 5397 for p = pConstraint; p != 0; p = pNext { 5398 pNext = (*IdxConstraint)(unsafe.Pointer(p)).FpNext 5399 sqlite3.Xsqlite3_free(tls, p) 5400 } 5401 } 5402 5403 func idxScanFree(tls *libc.TLS, pScan uintptr, pLast uintptr) { 5404 var p uintptr 5405 var pNext uintptr 5406 for p = pScan; p != pLast; p = pNext { 5407 pNext = (*IdxScan)(unsafe.Pointer(p)).FpNextScan 5408 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpOrder) 5409 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpEq) 5410 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpRange) 5411 sqlite3.Xsqlite3_free(tls, p) 5412 } 5413 } 5414 5415 func idxStatementFree(tls *libc.TLS, pStatement uintptr, pLast uintptr) { 5416 var p uintptr 5417 var pNext uintptr 5418 for p = pStatement; p != pLast; p = pNext { 5419 pNext = (*IdxStatement)(unsafe.Pointer(p)).FpNext 5420 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzEQP) 5421 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzIdx) 5422 sqlite3.Xsqlite3_free(tls, p) 5423 } 5424 } 5425 5426 func idxTableFree(tls *libc.TLS, pTab uintptr) { 5427 var pIter uintptr 5428 var pNext uintptr 5429 for pIter = pTab; pIter != 0; pIter = pNext { 5430 pNext = (*IdxTable)(unsafe.Pointer(pIter)).FpNext 5431 sqlite3.Xsqlite3_free(tls, pIter) 5432 } 5433 } 5434 5435 func idxWriteFree(tls *libc.TLS, pTab uintptr) { 5436 var pIter uintptr 5437 var pNext uintptr 5438 for pIter = pTab; pIter != 0; pIter = pNext { 5439 pNext = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext 5440 sqlite3.Xsqlite3_free(tls, pIter) 5441 } 5442 } 5443 5444 func idxFindIndexes(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5445 bp := tls.Alloc(4128) 5446 defer tls.Free(4128) 5447 5448 var pStmt uintptr 5449 var dbm uintptr 5450 5451 var zSql uintptr 5452 var nIdx int32 5453 var zIdx uintptr 5454 5455 var zDetail uintptr 5456 var nDetail int32 5457 var i int32 5458 var pEntry uintptr 5459 5460 dbm = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5461 *(*int32)(unsafe.Pointer(bp + 4124)) = SQLITE_OK 5462 idxHashInit(tls, bp+24) 5463 5464 pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5465 __1: 5466 if !(*(*int32)(unsafe.Pointer(bp + 4124)) == SQLITE_OK && pStmt != 0) { 5467 goto __3 5468 } 5469 *(*uintptr)(unsafe.Pointer(bp + 4120)) = uintptr(0) 5470 idxHashClear(tls, bp+24) 5471 *(*int32)(unsafe.Pointer(bp + 4124)) = idxPrintfPrepareStmt(tls, dbm, bp+4120, pzErr, 5472 ts+330, libc.VaList(bp, (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql)) 5473 __4: 5474 if !(*(*int32)(unsafe.Pointer(bp + 4124)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 4120))) == SQLITE_ROW) { 5475 goto __5 5476 } 5477 5478 zDetail = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 4120)), 3) 5479 5480 if !!(zDetail != 0) { 5481 goto __6 5482 } 5483 goto __4 5484 __6: 5485 ; 5486 nDetail = int32(libc.Xstrlen(tls, zDetail)) 5487 5488 i = 0 5489 __7: 5490 if !(i < nDetail) { 5491 goto __9 5492 } 5493 zIdx = uintptr(0) 5494 if !(i+13 < nDetail && libc.Xmemcmp(tls, zDetail+uintptr(i), ts+352, uint32(13)) == 0) { 5495 goto __10 5496 } 5497 zIdx = zDetail + uintptr(i+13) 5498 goto __11 5499 __10: 5500 if !(i+22 < nDetail && 5501 libc.Xmemcmp(tls, zDetail+uintptr(i), ts+366, uint32(22)) == 0) { 5502 goto __12 5503 } 5504 zIdx = zDetail + uintptr(i+22) 5505 __12: 5506 ; 5507 __11: 5508 ; 5509 if !(zIdx != 0) { 5510 goto __13 5511 } 5512 nIdx = 0 5513 __14: 5514 if !(int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != 0 && (int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != ' ' || int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx+1)))) != '(')) { 5515 goto __15 5516 } 5517 nIdx++ 5518 goto __14 5519 __15: 5520 ; 5521 zSql = idxHashSearch(tls, p+44, zIdx, nIdx) 5522 if !(zSql != 0) { 5523 goto __16 5524 } 5525 idxHashAdd(tls, bp+4124, bp+24, zSql, uintptr(0)) 5526 if !(*(*int32)(unsafe.Pointer(bp + 4124)) != 0) { 5527 goto __17 5528 } 5529 goto find_indexes_out 5530 __17: 5531 ; 5532 __16: 5533 ; 5534 goto __9 5535 __13: 5536 ; 5537 goto __8 5538 __8: 5539 i++ 5540 goto __7 5541 goto __9 5542 __9: 5543 ; 5544 if !(int32(*(*int8)(unsafe.Pointer(zDetail))) != '-') { 5545 goto __18 5546 } 5547 (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP = idxAppendText(tls, bp+4124, (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP, ts+389, libc.VaList(bp+8, zDetail)) 5548 __18: 5549 ; 5550 goto __4 5551 __5: 5552 ; 5553 pEntry = (*IdxHash)(unsafe.Pointer(bp + 24)).FpFirst 5554 __19: 5555 if !(pEntry != 0) { 5556 goto __21 5557 } 5558 (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx = idxAppendText(tls, bp+4124, (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx, ts+393, libc.VaList(bp+16, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) 5559 goto __20 5560 __20: 5561 pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext 5562 goto __19 5563 goto __21 5564 __21: 5565 ; 5566 idxFinalize(tls, bp+4124, *(*uintptr)(unsafe.Pointer(bp + 4120))) 5567 goto __2 5568 __2: 5569 pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext 5570 goto __1 5571 goto __3 5572 __3: 5573 ; 5574 find_indexes_out: 5575 idxHashClear(tls, bp+24) 5576 return *(*int32)(unsafe.Pointer(bp + 4124)) 5577 } 5578 5579 func idxAuthCallback(tls *libc.TLS, pCtx uintptr, eOp int32, z3 uintptr, z4 uintptr, zDb uintptr, zTrigger uintptr) int32 { 5580 bp := tls.Alloc(4) 5581 defer tls.Free(4) 5582 5583 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5584 _ = z4 5585 _ = zTrigger 5586 if eOp == SQLITE_INSERT || eOp == SQLITE_UPDATE || eOp == SQLITE_DELETE { 5587 if sqlite3.Xsqlite3_stricmp(tls, zDb, ts+85) == 0 { 5588 var p uintptr = pCtx 5589 var pTab uintptr 5590 for pTab = (*sqlite3expert)(unsafe.Pointer(p)).FpTable; pTab != 0; pTab = (*IdxTable)(unsafe.Pointer(pTab)).FpNext { 5591 if 0 == sqlite3.Xsqlite3_stricmp(tls, z3, (*IdxTable)(unsafe.Pointer(pTab)).FzName) { 5592 break 5593 } 5594 } 5595 if pTab != 0 { 5596 var pWrite uintptr 5597 for pWrite = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite; pWrite != 0; pWrite = (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext { 5598 if (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab == pTab && (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp == eOp { 5599 break 5600 } 5601 } 5602 if pWrite == uintptr(0) { 5603 pWrite = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxWrite{}))) 5604 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5605 (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab = pTab 5606 (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp = eOp 5607 (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5608 (*sqlite3expert)(unsafe.Pointer(p)).FpWrite = pWrite 5609 } 5610 } 5611 } 5612 } 5613 } 5614 return *(*int32)(unsafe.Pointer(bp)) 5615 } 5616 5617 func idxProcessOneTrigger(tls *libc.TLS, p uintptr, pWrite uintptr, pzErr uintptr) int32 { 5618 bp := tls.Alloc(92) 5619 defer tls.Free(92) 5620 5621 var pTab uintptr = (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab 5622 var zTab uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FzName 5623 var zSql uintptr = ts + 398 5624 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 5625 *(*int32)(unsafe.Pointer(bp + 84)) = SQLITE_OK 5626 var zWrite uintptr = uintptr(0) 5627 5628 *(*int32)(unsafe.Pointer(bp + 84)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+80, pzErr, zSql, libc.VaList(bp, zTab, zTab)) 5629 for *(*int32)(unsafe.Pointer(bp + 84)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) { 5630 var zCreate uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 5631 if zCreate == uintptr(0) { 5632 continue 5633 } 5634 *(*int32)(unsafe.Pointer(bp + 84)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zCreate, uintptr(0), uintptr(0), pzErr) 5635 } 5636 idxFinalize(tls, bp+84, *(*uintptr)(unsafe.Pointer(bp + 80))) 5637 5638 if *(*int32)(unsafe.Pointer(bp + 84)) == SQLITE_OK { 5639 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+524, libc.VaList(bp+16, zTab, zInt)) 5640 if z == uintptr(0) { 5641 *(*int32)(unsafe.Pointer(bp + 84)) = SQLITE_NOMEM 5642 } else { 5643 *(*int32)(unsafe.Pointer(bp + 84)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, z, uintptr(0), uintptr(0), pzErr) 5644 sqlite3.Xsqlite3_free(tls, z) 5645 } 5646 } 5647 5648 switch (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp { 5649 case SQLITE_INSERT: 5650 { 5651 var i int32 5652 zWrite = idxAppendText(tls, bp+84, zWrite, ts+557, libc.VaList(bp+32, zInt)) 5653 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5654 zWrite = idxAppendText(tls, bp+84, zWrite, ts+580, libc.VaList(bp+40, func() uintptr { 5655 if i == 0 { 5656 return ts + 584 5657 } 5658 return ts + 97 5659 }())) 5660 } 5661 zWrite = idxAppendText(tls, bp+84, zWrite, ts+585, 0) 5662 break 5663 5664 } 5665 case SQLITE_UPDATE: 5666 { 5667 var i int32 5668 zWrite = idxAppendText(tls, bp+84, zWrite, ts+587, libc.VaList(bp+48, zInt)) 5669 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5670 zWrite = idxAppendText(tls, bp+84, zWrite, ts+602, libc.VaList(bp+56, func() uintptr { 5671 if i == 0 { 5672 return ts + 584 5673 } 5674 return ts + 97 5675 }(), 5676 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pTab)).FaCol+uintptr(i)*12)).FzName)) 5677 } 5678 break 5679 5680 } 5681 default: 5682 { 5683 if *(*int32)(unsafe.Pointer(bp + 84)) == SQLITE_OK { 5684 zWrite = sqlite3.Xsqlite3_mprintf(tls, ts+609, libc.VaList(bp+72, zInt)) 5685 if zWrite == uintptr(0) { 5686 *(*int32)(unsafe.Pointer(bp + 84)) = SQLITE_NOMEM 5687 } 5688 } 5689 5690 } 5691 } 5692 5693 if *(*int32)(unsafe.Pointer(bp + 84)) == SQLITE_OK { 5694 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 5695 *(*int32)(unsafe.Pointer(bp + 84)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zWrite, -1, bp+88, uintptr(0)) 5696 idxFinalize(tls, bp+84, *(*uintptr)(unsafe.Pointer(bp + 88))) 5697 if *(*int32)(unsafe.Pointer(bp + 84)) != SQLITE_OK { 5698 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 5699 } 5700 } 5701 sqlite3.Xsqlite3_free(tls, zWrite) 5702 5703 if *(*int32)(unsafe.Pointer(bp + 84)) == SQLITE_OK { 5704 *(*int32)(unsafe.Pointer(bp + 84)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zDrop, uintptr(0), uintptr(0), pzErr) 5705 } 5706 5707 return *(*int32)(unsafe.Pointer(bp + 84)) 5708 } 5709 5710 var zInt uintptr = ts + 624 5711 var zDrop uintptr = ts + 662 5712 5713 func idxProcessTriggers(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5714 var rc int32 = SQLITE_OK 5715 var pEnd uintptr = uintptr(0) 5716 var pFirst uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5717 5718 for rc == SQLITE_OK && pFirst != pEnd { 5719 var pIter uintptr 5720 for pIter = pFirst; rc == SQLITE_OK && pIter != pEnd; pIter = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext { 5721 rc = idxProcessOneTrigger(tls, p, pIter, pzErr) 5722 } 5723 pEnd = pFirst 5724 pFirst = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5725 } 5726 5727 return rc 5728 } 5729 5730 func idxCreateVtabSchema(tls *libc.TLS, p uintptr, pzErrmsg uintptr) int32 { 5731 bp := tls.Alloc(52) 5732 defer tls.Free(52) 5733 5734 *(*int32)(unsafe.Pointer(bp + 48)) = idxRegisterVtab(tls, p) 5735 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 5736 5737 *(*int32)(unsafe.Pointer(bp + 48)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+40, pzErrmsg, 5738 ts+711) 5739 for *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 5740 var zType uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 5741 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 5742 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 5743 5744 if zType == uintptr(0) || zName == uintptr(0) { 5745 continue 5746 } 5747 if int32(*(*int8)(unsafe.Pointer(zType))) == 'v' || int32(*(*int8)(unsafe.Pointer(zType + 1))) == 'r' { 5748 if zSql != 0 { 5749 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), pzErrmsg) 5750 } 5751 } else { 5752 *(*int32)(unsafe.Pointer(bp + 48)) = idxGetTableInfo(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, zName, bp+44, pzErrmsg) 5753 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 5754 var i int32 5755 var zInner uintptr = uintptr(0) 5756 var zOuter uintptr = uintptr(0) 5757 (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 44)))).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpTable 5758 (*sqlite3expert)(unsafe.Pointer(p)).FpTable = *(*uintptr)(unsafe.Pointer(bp + 44)) 5759 5760 zInner = idxAppendText(tls, bp+48, uintptr(0), ts+979, 0) 5761 for i = 0; i < (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 44)))).FnCol; i++ { 5762 zInner = idxAppendText(tls, bp+48, zInner, ts+995, 5763 libc.VaList(bp, func() uintptr { 5764 if i == 0 { 5765 return ts + 584 5766 } 5767 return ts + 97 5768 }(), (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 44)))).FaCol+uintptr(i)*12)).FzName, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 44)))).FaCol+uintptr(i)*12)).FzColl)) 5769 } 5770 zInner = idxAppendText(tls, bp+48, zInner, ts+585, 0) 5771 5772 zOuter = idxAppendText(tls, bp+48, uintptr(0), 5773 ts+1011, libc.VaList(bp+24, zName, zInner)) 5774 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 5775 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zOuter, uintptr(0), uintptr(0), pzErrmsg) 5776 } 5777 sqlite3.Xsqlite3_free(tls, zInner) 5778 sqlite3.Xsqlite3_free(tls, zOuter) 5779 } 5780 } 5781 } 5782 idxFinalize(tls, bp+48, *(*uintptr)(unsafe.Pointer(bp + 40))) 5783 return *(*int32)(unsafe.Pointer(bp + 48)) 5784 } 5785 5786 type IdxSampleCtx = struct { 5787 FiTarget int32 5788 Ftarget float64 5789 FnRow float64 5790 FnRet float64 5791 } 5792 5793 func idxSampleFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5794 bp := tls.Alloc(2) 5795 defer tls.Free(2) 5796 5797 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5798 var bRet int32 5799 5800 _ = argv 5801 5802 if (*IdxSampleCtx)(unsafe.Pointer(p)).FnRow == 0.0 { 5803 bRet = 1 5804 } else { 5805 bRet = libc.Bool32((*IdxSampleCtx)(unsafe.Pointer(p)).FnRet/(*IdxSampleCtx)(unsafe.Pointer(p)).FnRow <= (*IdxSampleCtx)(unsafe.Pointer(p)).Ftarget) 5806 if bRet == 0 { 5807 sqlite3.Xsqlite3_randomness(tls, 2, bp) 5808 bRet = libc.Bool32(int32(*(*uint16)(unsafe.Pointer(bp)))%100 <= (*IdxSampleCtx)(unsafe.Pointer(p)).FiTarget) 5809 } 5810 } 5811 5812 sqlite3.Xsqlite3_result_int(tls, pCtx, bRet) 5813 *(*float64)(unsafe.Pointer(p + 12)) += 1.0 5814 *(*float64)(unsafe.Pointer(p + 20)) += float64(bRet) 5815 } 5816 5817 type IdxRemCtx = struct { 5818 FnSlot int32 5819 FaSlot [1]struct { 5820 FeType int32 5821 FiVal i64 5822 FrVal float64 5823 FnByte int32 5824 Fn int32 5825 Fz uintptr 5826 } 5827 } 5828 5829 type IdxRemSlot = struct { 5830 FeType int32 5831 FiVal i64 5832 FrVal float64 5833 FnByte int32 5834 Fn int32 5835 Fz uintptr 5836 } 5837 5838 func idxRemFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5839 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5840 var pSlot uintptr 5841 var iSlot int32 5842 5843 iSlot = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 5844 5845 pSlot = p + 4 + uintptr(iSlot)*32 5846 5847 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5848 case SQLITE_NULL: 5849 break 5850 5851 case SQLITE_INTEGER: 5852 sqlite3.Xsqlite3_result_int64(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal) 5853 break 5854 5855 case SQLITE_FLOAT: 5856 sqlite3.Xsqlite3_result_double(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal) 5857 break 5858 5859 case SQLITE_BLOB: 5860 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5861 break 5862 5863 case SQLITE_TEXT: 5864 sqlite3.Xsqlite3_result_text(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5865 break 5866 } 5867 5868 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 5869 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5870 case SQLITE_NULL: 5871 break 5872 5873 case SQLITE_INTEGER: 5874 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 5875 break 5876 5877 case SQLITE_FLOAT: 5878 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 5879 break 5880 5881 case SQLITE_BLOB: 5882 fallthrough 5883 case SQLITE_TEXT: 5884 { 5885 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 5886 var pData uintptr = uintptr(0) 5887 if nByte > (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte { 5888 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, nByte*2) 5889 if zNew == uintptr(0) { 5890 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 5891 return 5892 } 5893 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte = nByte * 2 5894 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz = zNew 5895 } 5896 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn = nByte 5897 if (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType == SQLITE_BLOB { 5898 pData = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 5899 if pData != 0 { 5900 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint32(nByte)) 5901 } 5902 } else { 5903 pData = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 5904 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint32(nByte)) 5905 } 5906 break 5907 5908 } 5909 } 5910 } 5911 5912 func idxLargestIndex(tls *libc.TLS, db uintptr, pnMax uintptr, pzErr uintptr) int32 { 5913 bp := tls.Alloc(8) 5914 defer tls.Free(8) 5915 5916 *(*int32)(unsafe.Pointer(bp + 4)) = SQLITE_OK 5917 var zMax uintptr = ts + 1052 5918 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 5919 5920 *(*int32)(unsafe.Pointer(pnMax)) = 0 5921 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, db, bp, pzErr, zMax) 5922 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 5923 *(*int32)(unsafe.Pointer(pnMax)) = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) + 1 5924 } 5925 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp))) 5926 5927 return *(*int32)(unsafe.Pointer(bp + 4)) 5928 } 5929 5930 func idxPopulateOneStat1(tls *libc.TLS, p uintptr, pIndexXInfo uintptr, pWriteStat uintptr, zTab uintptr, zIdx uintptr, pzErr uintptr) int32 { 5931 bp := tls.Alloc(120) 5932 defer tls.Free(120) 5933 5934 var zCols uintptr = uintptr(0) 5935 var zOrder uintptr = uintptr(0) 5936 var zQuery uintptr = uintptr(0) 5937 var nCol int32 = 0 5938 var i int32 5939 *(*uintptr)(unsafe.Pointer(bp + 116)) = uintptr(0) 5940 var aStat uintptr = uintptr(0) 5941 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_OK 5942 5943 sqlite3.Xsqlite3_bind_text(tls, pIndexXInfo, 1, zIdx, -1, uintptr(0)) 5944 for SQLITE_OK == *(*int32)(unsafe.Pointer(bp + 112)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pIndexXInfo) { 5945 var zComma uintptr 5946 if zCols == uintptr(0) { 5947 zComma = ts + 584 5948 } else { 5949 zComma = ts + 97 5950 } 5951 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 0) 5952 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 1) 5953 zCols = idxAppendText(tls, bp+112, zCols, 5954 ts+1189, libc.VaList(bp, zComma, zName, nCol, zName, zColl)) 5955 zOrder = idxAppendText(tls, bp+112, zOrder, ts+1224, libc.VaList(bp+40, zComma, libc.PreIncInt32(&nCol, 1))) 5956 } 5957 sqlite3.Xsqlite3_reset(tls, pIndexXInfo) 5958 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5959 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5960 zQuery = sqlite3.Xsqlite3_mprintf(tls, 5961 ts+1229, libc.VaList(bp+56, zCols, zTab, zOrder)) 5962 } else { 5963 zQuery = sqlite3.Xsqlite3_mprintf(tls, 5964 ts+1261, libc.VaList(bp+80, zCols, zOrder)) 5965 } 5966 } 5967 sqlite3.Xsqlite3_free(tls, zCols) 5968 sqlite3.Xsqlite3_free(tls, zOrder) 5969 5970 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5971 var dbrem uintptr = func() uintptr { 5972 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5973 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 5974 } 5975 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 5976 }() 5977 *(*int32)(unsafe.Pointer(bp + 112)) = idxPrepareStmt(tls, dbrem, bp+116, pzErr, zQuery) 5978 } 5979 sqlite3.Xsqlite3_free(tls, zQuery) 5980 5981 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5982 aStat = idxMalloc(tls, bp+112, int32(uint32(unsafe.Sizeof(int32(0)))*uint32(nCol+1))) 5983 } 5984 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 116))) { 5985 var pEntry uintptr 5986 var zStat uintptr = uintptr(0) 5987 for i = 0; i <= nCol; i++ { 5988 *(*int32)(unsafe.Pointer(aStat + uintptr(i)*4)) = 1 5989 } 5990 for *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 116))) { 5991 *(*int32)(unsafe.Pointer(aStat))++ 5992 for i = 0; i < nCol; i++ { 5993 if sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 116)), i) == 0 { 5994 break 5995 } 5996 } 5997 for ; i < nCol; i++ { 5998 *(*int32)(unsafe.Pointer(aStat + uintptr(i+1)*4))++ 5999 } 6000 } 6001 6002 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6003 var s0 int32 = *(*int32)(unsafe.Pointer(aStat)) 6004 zStat = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+96, s0)) 6005 if zStat == uintptr(0) { 6006 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_NOMEM 6007 } 6008 for i = 1; *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && i <= nCol; i++ { 6009 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)))) 6010 } 6011 } 6012 6013 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6014 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 1, zTab, -1, uintptr(0)) 6015 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 2, zIdx, -1, uintptr(0)) 6016 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 3, zStat, -1, uintptr(0)) 6017 sqlite3.Xsqlite3_step(tls, pWriteStat) 6018 *(*int32)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_reset(tls, pWriteStat) 6019 } 6020 6021 pEntry = idxHashFind(tls, p+44, zIdx, int32(libc.Xstrlen(tls, zIdx))) 6022 if pEntry != 0 { 6023 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 = zStat 6024 } else { 6025 sqlite3.Xsqlite3_free(tls, zStat) 6026 } 6027 } 6028 sqlite3.Xsqlite3_free(tls, aStat) 6029 idxFinalize(tls, bp+112, *(*uintptr)(unsafe.Pointer(bp + 116))) 6030 6031 return *(*int32)(unsafe.Pointer(bp + 112)) 6032 } 6033 6034 func idxBuildSampleTable(tls *libc.TLS, p uintptr, zTab uintptr) int32 { 6035 bp := tls.Alloc(8) 6036 defer tls.Free(8) 6037 6038 var rc int32 6039 var zSql uintptr 6040 6041 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6042 if rc != SQLITE_OK { 6043 return rc 6044 } 6045 6046 zSql = sqlite3.Xsqlite3_mprintf(tls, 6047 ts+1404, libc.VaList(bp, zTab)) 6048 if zSql == uintptr(0) { 6049 return SQLITE_NOMEM 6050 } 6051 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), uintptr(0)) 6052 sqlite3.Xsqlite3_free(tls, zSql) 6053 6054 return rc 6055 } 6056 6057 func idxPopulateStat1(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6058 bp := tls.Alloc(48) 6059 defer tls.Free(48) 6060 6061 *(*int32)(unsafe.Pointer(bp + 4)) = SQLITE_OK 6062 *(*int32)(unsafe.Pointer(bp)) = 0 6063 var pCtx uintptr = uintptr(0) 6064 6065 var i int32 6066 var iPrev i64 = int64(-100000) 6067 *(*uintptr)(unsafe.Pointer(bp + 36)) = uintptr(0) 6068 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 6069 *(*uintptr)(unsafe.Pointer(bp + 44)) = uintptr(0) 6070 6071 var zAllIndex uintptr = ts + 1480 6072 var zIndexXInfo uintptr = ts + 1594 6073 var zWrite uintptr = ts + 1649 6074 6075 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 0 { 6076 return SQLITE_OK 6077 } 6078 6079 *(*int32)(unsafe.Pointer(bp + 4)) = idxLargestIndex(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp, pzErr) 6080 if *(*int32)(unsafe.Pointer(bp)) <= 0 || *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 6081 return *(*int32)(unsafe.Pointer(bp + 4)) 6082 } 6083 6084 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1690, uintptr(0), uintptr(0), uintptr(0)) 6085 6086 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6087 var nByte int32 = int32(uint32(unsafe.Sizeof(IdxRemCtx{})) + uint32(unsafe.Sizeof(IdxRemSlot{}))*uint32(*(*int32)(unsafe.Pointer(bp)))) 6088 pCtx = idxMalloc(tls, bp+4, nByte) 6089 } 6090 6091 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6092 var dbrem uintptr = func() uintptr { 6093 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6094 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 6095 } 6096 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 6097 }() 6098 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 6099 dbrem, ts+1724, 2, SQLITE_UTF8, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 6100 f func(*libc.TLS, uintptr, int32, uintptr) 6101 }{idxRemFunc})), uintptr(0), uintptr(0)) 6102 } 6103 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6104 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 6105 (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1728, 0, SQLITE_UTF8, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 6106 f func(*libc.TLS, uintptr, int32, uintptr) 6107 }{idxSampleFunc})), uintptr(0), uintptr(0)) 6108 } 6109 6110 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6111 (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot = *(*int32)(unsafe.Pointer(bp)) + 1 6112 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+36, pzErr, zAllIndex) 6113 } 6114 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6115 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+40, pzErr, zIndexXInfo) 6116 } 6117 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6118 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+44, pzErr, zWrite) 6119 } 6120 6121 for *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 36))) { 6122 var iRowid i64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 36)), 0) 6123 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 36)), 1) 6124 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 36)), 2) 6125 if zTab == uintptr(0) || zIdx == uintptr(0) { 6126 continue 6127 } 6128 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 && iPrev != iRowid { 6129 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).Ftarget = float64((*sqlite3expert)(unsafe.Pointer(p)).FiSample) / 100.0 6130 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FiTarget = (*sqlite3expert)(unsafe.Pointer(p)).FiSample 6131 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRow = 0.0 6132 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRet = 0.0 6133 *(*int32)(unsafe.Pointer(bp + 4)) = idxBuildSampleTable(tls, p, zTab) 6134 if *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 6135 break 6136 } 6137 } 6138 *(*int32)(unsafe.Pointer(bp + 4)) = idxPopulateOneStat1(tls, p, *(*uintptr)(unsafe.Pointer(bp + 40)), *(*uintptr)(unsafe.Pointer(bp + 44)), zTab, zIdx, pzErr) 6139 iPrev = iRowid 6140 } 6141 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 { 6142 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, 6143 ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6144 } 6145 6146 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 36))) 6147 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 40))) 6148 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 44))) 6149 6150 if pCtx != 0 { 6151 for i = 0; i < (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot; i++ { 6152 sqlite3.Xsqlite3_free(tls, (*IdxRemSlot)(unsafe.Pointer(pCtx+4+uintptr(i)*32)).Fz) 6153 } 6154 sqlite3.Xsqlite3_free(tls, pCtx) 6155 } 6156 6157 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6158 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1735, uintptr(0), uintptr(0), uintptr(0)) 6159 } 6160 6161 sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6162 return *(*int32)(unsafe.Pointer(bp + 4)) 6163 } 6164 6165 func sqlite3_expert_new(tls *libc.TLS, db uintptr, pzErrmsg uintptr) uintptr { 6166 bp := tls.Alloc(24) 6167 defer tls.Free(24) 6168 6169 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 6170 var pNew uintptr 6171 6172 pNew = idxMalloc(tls, bp+16, int32(unsafe.Sizeof(sqlite3expert{}))) 6173 6174 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6175 (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb = db 6176 (*sqlite3expert)(unsafe.Pointer(pNew)).FiSample = 100 6177 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+12) 6178 } 6179 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6180 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+8) 6181 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6182 sqlite3.Xsqlite3_db_config(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, SQLITE_DBCONFIG_TRIGGER_EQP, libc.VaList(bp, 1, uintptr(0))) 6183 } 6184 } 6185 6186 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6187 *(*uintptr)(unsafe.Pointer(bp + 20)) = uintptr(0) 6188 *(*int32)(unsafe.Pointer(bp + 16)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb, bp+20, pzErrmsg, 6189 ts+1766, 0) 6190 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) { 6191 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), 0) 6192 if zSql != 0 { 6193 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, zSql, uintptr(0), uintptr(0), pzErrmsg) 6194 } 6195 } 6196 idxFinalize(tls, bp+16, *(*uintptr)(unsafe.Pointer(bp + 20))) 6197 } 6198 6199 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6200 *(*int32)(unsafe.Pointer(bp + 16)) = idxCreateVtabSchema(tls, pNew, pzErrmsg) 6201 } 6202 6203 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6204 sqlite3.Xsqlite3_set_authorizer(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbv, *(*uintptr)(unsafe.Pointer(&struct { 6205 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 6206 }{idxAuthCallback})), pNew) 6207 } 6208 6209 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 6210 sqlite3_expert_destroy(tls, pNew) 6211 pNew = uintptr(0) 6212 } 6213 return pNew 6214 } 6215 6216 func sqlite3_expert_config(tls *libc.TLS, p uintptr, op int32, va uintptr) int32 { 6217 var rc int32 = SQLITE_OK 6218 var ap va_list 6219 _ = ap 6220 ap = va 6221 switch op { 6222 case EXPERT_CONFIG_SAMPLE: 6223 { 6224 var iVal int32 = libc.VaInt32(&ap) 6225 if iVal < 0 { 6226 iVal = 0 6227 } 6228 if iVal > 100 { 6229 iVal = 100 6230 } 6231 (*sqlite3expert)(unsafe.Pointer(p)).FiSample = iVal 6232 break 6233 6234 } 6235 default: 6236 rc = SQLITE_NOTFOUND 6237 break 6238 } 6239 6240 _ = ap 6241 return rc 6242 } 6243 6244 func sqlite3_expert_sql(tls *libc.TLS, p uintptr, zSql uintptr, pzErr uintptr) int32 { 6245 bp := tls.Alloc(12) 6246 defer tls.Free(12) 6247 6248 var pScanOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpScan 6249 var pStmtOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 6250 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OK 6251 *(*uintptr)(unsafe.Pointer(bp + 4)) = zSql 6252 6253 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun != 0 { 6254 return SQLITE_MISUSE 6255 } 6256 6257 for *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 4)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) != 0 { 6258 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 6259 *(*int32)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, *(*uintptr)(unsafe.Pointer(bp + 4)), -1, bp, bp+4) 6260 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK { 6261 if *(*uintptr)(unsafe.Pointer(bp)) != 0 { 6262 var pNew uintptr 6263 var z uintptr = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 6264 var n int32 = int32(libc.Xstrlen(tls, z)) 6265 pNew = idxMalloc(tls, bp+8, int32(uint32(unsafe.Sizeof(IdxStatement{}))+uint32(n)+uint32(1))) 6266 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK { 6267 (*IdxStatement)(unsafe.Pointer(pNew)).FzSql = pNew + 1*20 6268 libc.Xmemcpy(tls, (*IdxStatement)(unsafe.Pointer(pNew)).FzSql, z, uint32(n+1)) 6269 (*IdxStatement)(unsafe.Pointer(pNew)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 6270 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 6271 (*IdxStatement)(unsafe.Pointer(pNew)).FiId = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 6272 } 6273 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pNew 6274 } 6275 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 6276 } 6277 } else { 6278 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 6279 } 6280 } 6281 6282 if *(*int32)(unsafe.Pointer(bp + 8)) != SQLITE_OK { 6283 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, pScanOrig) 6284 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, pStmtOrig) 6285 (*sqlite3expert)(unsafe.Pointer(p)).FpScan = pScanOrig 6286 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pStmtOrig 6287 } 6288 6289 return *(*int32)(unsafe.Pointer(bp + 8)) 6290 } 6291 6292 func sqlite3_expert_analyze(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6293 bp := tls.Alloc(28) 6294 defer tls.Free(28) 6295 6296 var pEntry uintptr 6297 6298 *(*int32)(unsafe.Pointer(bp + 24)) = idxProcessTriggers(tls, p, pzErr) 6299 6300 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6301 *(*int32)(unsafe.Pointer(bp + 24)) = idxCreateCandidates(tls, p) 6302 } else if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_BUSY|int32(3)<<8 { 6303 if pzErr != 0 { 6304 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+1865, 0) 6305 } 6306 return *(*int32)(unsafe.Pointer(bp + 24)) 6307 } 6308 6309 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6310 *(*int32)(unsafe.Pointer(bp + 24)) = idxPopulateStat1(tls, p, pzErr) 6311 } 6312 6313 for pEntry = (*sqlite3expert)(unsafe.Pointer(p)).FhIdx.FpFirst; pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext { 6314 (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates = idxAppendText(tls, bp+24, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates, 6315 ts+1909, libc.VaList(bp, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, 6316 func() uintptr { 6317 if (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 != 0 { 6318 return ts + 1918 6319 } 6320 return ts + 584 6321 }(), (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2)) 6322 } 6323 6324 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6325 *(*int32)(unsafe.Pointer(bp + 24)) = idxFindIndexes(tls, p, pzErr) 6326 } 6327 6328 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6329 (*sqlite3expert)(unsafe.Pointer(p)).FbRun = 1 6330 } 6331 return *(*int32)(unsafe.Pointer(bp + 24)) 6332 } 6333 6334 func sqlite3_expert_count(tls *libc.TLS, p uintptr) int32 { 6335 var nRet int32 = 0 6336 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 6337 nRet = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 6338 } 6339 return nRet 6340 } 6341 6342 func sqlite3_expert_report(tls *libc.TLS, p uintptr, iStmt int32, eReport int32) uintptr { 6343 var zRet uintptr = uintptr(0) 6344 var pStmt uintptr 6345 6346 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun == 0 { 6347 return uintptr(0) 6348 } 6349 for pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement; pStmt != 0 && (*IdxStatement)(unsafe.Pointer(pStmt)).FiId != iStmt; pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext { 6350 } 6351 switch eReport { 6352 case EXPERT_REPORT_SQL: 6353 if pStmt != 0 { 6354 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql 6355 } 6356 break 6357 case EXPERT_REPORT_INDEXES: 6358 if pStmt != 0 { 6359 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx 6360 } 6361 break 6362 case EXPERT_REPORT_PLAN: 6363 if pStmt != 0 { 6364 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP 6365 } 6366 break 6367 case EXPERT_REPORT_CANDIDATES: 6368 zRet = (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates 6369 break 6370 } 6371 return zRet 6372 } 6373 6374 func sqlite3_expert_destroy(tls *libc.TLS, p uintptr) { 6375 if p != 0 { 6376 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm) 6377 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv) 6378 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, uintptr(0)) 6379 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, uintptr(0)) 6380 idxTableFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpTable) 6381 idxWriteFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpWrite) 6382 idxHashClear(tls, p+44) 6383 sqlite3.Xsqlite3_free(tls, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates) 6384 sqlite3.Xsqlite3_free(tls, p) 6385 } 6386 } 6387 6388 type ClientData = uintptr 6389 6390 type Tcl_WideInt = int64 6391 type Tcl_WideUInt = uint64 6392 6393 type stat = struct { 6394 Fst_dev uint64 6395 F__pad1 uint16 6396 F__ccgo_pad1 [2]byte 6397 F__st_ino uint32 6398 Fst_mode uint32 6399 Fst_nlink uint32 6400 Fst_uid uint32 6401 Fst_gid uint32 6402 Fst_rdev uint64 6403 F__pad2 uint16 6404 F__ccgo_pad2 [2]byte 6405 Fst_size int64 6406 Fst_blksize int32 6407 Fst_blocks int64 6408 Fst_atim struct { 6409 Ftv_sec int32 6410 Ftv_nsec int32 6411 } 6412 Fst_mtim struct { 6413 Ftv_sec int32 6414 Ftv_nsec int32 6415 } 6416 Fst_ctim struct { 6417 Ftv_sec int32 6418 Ftv_nsec int32 6419 } 6420 Fst_ino uint64 6421 } 6422 6423 type Tcl_Interp1 = struct { 6424 FresultDontUse uintptr 6425 FfreeProcDontUse uintptr 6426 FerrorLineDontUse int32 6427 } 6428 6429 type Tcl_Interp = Tcl_Interp1 6430 6431 type Tcl_AsyncHandler = uintptr 6432 type Tcl_Channel = uintptr 6433 type Tcl_ChannelTypeVersion = uintptr 6434 type Tcl_Command = uintptr 6435 type Tcl_Condition = uintptr 6436 type Tcl_Dict = uintptr 6437 type Tcl_EncodingState = uintptr 6438 type Tcl_Encoding = uintptr 6439 type Tcl_Event1 = struct { 6440 Fproc uintptr 6441 FnextPtr uintptr 6442 } 6443 6444 type Tcl_Event = Tcl_Event1 6445 type Tcl_InterpState = uintptr 6446 type Tcl_LoadHandle = uintptr 6447 type Tcl_Mutex = uintptr 6448 type Tcl_Pid = uintptr 6449 type Tcl_RegExp = uintptr 6450 type Tcl_ThreadDataKey = uintptr 6451 type Tcl_ThreadId = uintptr 6452 type Tcl_TimerToken = uintptr 6453 type Tcl_Trace = uintptr 6454 type Tcl_Var = uintptr 6455 type Tcl_ZlibStream = uintptr 6456 6457 type Tcl_RegExpIndices1 = struct { 6458 Fstart int32 6459 Fend int32 6460 } 6461 6462 type Tcl_RegExpIndices = Tcl_RegExpIndices1 6463 6464 type Tcl_RegExpInfo1 = struct { 6465 Fnsubs int32 6466 Fmatches uintptr 6467 FextendStart int32 6468 Freserved int32 6469 } 6470 6471 type Tcl_RegExpInfo = Tcl_RegExpInfo1 6472 6473 type Tcl_Stat_ = uintptr 6474 type Tcl_OldStat_ = uintptr 6475 6476 type Tcl_ValueType = uint32 6477 6478 type Tcl_Value1 = struct { 6479 Ftype Tcl_ValueType 6480 FintValue int32 6481 FdoubleValue float64 6482 FwideValue Tcl_WideInt 6483 } 6484 6485 type Tcl_Value = Tcl_Value1 6486 6487 type Tcl_Obj1 = struct { 6488 FrefCount int32 6489 Fbytes uintptr 6490 Flength int32 6491 FtypePtr uintptr 6492 FinternalRep struct { 6493 FlongValue int32 6494 F__ccgo_pad1 [4]byte 6495 } 6496 } 6497 6498 type Tcl_ObjType1 = struct { 6499 Fname uintptr 6500 FfreeIntRepProc uintptr 6501 FdupIntRepProc uintptr 6502 FupdateStringProc uintptr 6503 FsetFromAnyProc uintptr 6504 } 6505 6506 type Tcl_ObjType = Tcl_ObjType1 6507 6508 type Tcl_Obj = Tcl_Obj1 6509 6510 type Tcl_SavedResult1 = struct { 6511 Fresult uintptr 6512 FfreeProc uintptr 6513 FobjResultPtr uintptr 6514 FappendResult uintptr 6515 FappendAvl int32 6516 FappendUsed int32 6517 FresultSpace [201]int8 6518 F__ccgo_pad1 [3]byte 6519 } 6520 6521 type Tcl_SavedResult = Tcl_SavedResult1 6522 6523 type Tcl_Namespace1 = struct { 6524 Fname uintptr 6525 FfullName uintptr 6526 FclientData ClientData 6527 FdeleteProc uintptr 6528 FparentPtr uintptr 6529 } 6530 6531 type Tcl_Namespace = Tcl_Namespace1 6532 6533 type Tcl_CallFrame1 = struct { 6534 FnsPtr uintptr 6535 Fdummy1 int32 6536 Fdummy2 int32 6537 Fdummy3 uintptr 6538 Fdummy4 uintptr 6539 Fdummy5 uintptr 6540 Fdummy6 int32 6541 Fdummy7 uintptr 6542 Fdummy8 uintptr 6543 Fdummy9 int32 6544 Fdummy10 uintptr 6545 Fdummy11 uintptr 6546 Fdummy12 uintptr 6547 Fdummy13 uintptr 6548 } 6549 6550 type Tcl_CallFrame = Tcl_CallFrame1 6551 6552 type Tcl_CmdInfo1 = struct { 6553 FisNativeObjectProc int32 6554 FobjProc uintptr 6555 FobjClientData ClientData 6556 Fproc uintptr 6557 FclientData ClientData 6558 FdeleteProc uintptr 6559 FdeleteData ClientData 6560 FnamespacePtr uintptr 6561 } 6562 6563 type Tcl_CmdInfo = Tcl_CmdInfo1 6564 6565 type Tcl_DString1 = struct { 6566 Fstring uintptr 6567 Flength int32 6568 FspaceAvl int32 6569 FstaticSpace [200]int8 6570 } 6571 6572 type Tcl_DString = Tcl_DString1 6573 6574 type Tcl_HashKeyType1 = struct { 6575 Fversion int32 6576 Fflags int32 6577 FhashKeyProc uintptr 6578 FcompareKeysProc uintptr 6579 FallocEntryProc uintptr 6580 FfreeEntryProc uintptr 6581 } 6582 6583 type Tcl_HashKeyType = Tcl_HashKeyType1 6584 type Tcl_HashTable1 = struct { 6585 Fbuckets uintptr 6586 FstaticBuckets [4]uintptr 6587 FnumBuckets int32 6588 FnumEntries int32 6589 FrebuildSize int32 6590 FdownShift int32 6591 Fmask int32 6592 FkeyType int32 6593 FfindProc uintptr 6594 FcreateProc uintptr 6595 FtypePtr uintptr 6596 } 6597 6598 type Tcl_HashTable = Tcl_HashTable1 6599 type Tcl_HashEntry1 = struct { 6600 FnextPtr uintptr 6601 FtablePtr uintptr 6602 Fhash uintptr 6603 FclientData ClientData 6604 Fkey struct{ FoneWordValue uintptr } 6605 } 6606 6607 type Tcl_HashEntry = Tcl_HashEntry1 6608 6609 type Tcl_HashSearch1 = struct { 6610 FtablePtr uintptr 6611 FnextIndex int32 6612 FnextEntryPtr uintptr 6613 } 6614 6615 type Tcl_HashSearch = Tcl_HashSearch1 6616 6617 type Tcl_DictSearch = struct { 6618 Fnext uintptr 6619 Fepoch int32 6620 FdictionaryPtr Tcl_Dict 6621 } 6622 6623 type Tcl_QueuePosition = uint32 6624 6625 type Tcl_Time1 = struct { 6626 Fsec int32 6627 Fusec int32 6628 } 6629 6630 type Tcl_Time = Tcl_Time1 6631 6632 type Tcl_ChannelType1 = struct { 6633 FtypeName uintptr 6634 Fversion Tcl_ChannelTypeVersion 6635 FcloseProc uintptr 6636 FinputProc uintptr 6637 FoutputProc uintptr 6638 FseekProc uintptr 6639 FsetOptionProc uintptr 6640 FgetOptionProc uintptr 6641 FwatchProc uintptr 6642 FgetHandleProc uintptr 6643 Fclose2Proc uintptr 6644 FblockModeProc uintptr 6645 FflushProc uintptr 6646 FhandlerProc uintptr 6647 FwideSeekProc uintptr 6648 FthreadActionProc uintptr 6649 FtruncateProc uintptr 6650 } 6651 6652 type Tcl_ChannelType = Tcl_ChannelType1 6653 6654 type Tcl_PathType = uint32 6655 6656 type Tcl_GlobTypeData1 = struct { 6657 Ftype int32 6658 Fperm int32 6659 FmacType uintptr 6660 FmacCreator uintptr 6661 } 6662 6663 type Tcl_GlobTypeData = Tcl_GlobTypeData1 6664 6665 type utimbuf = struct { 6666 Factime int32 6667 Fmodtime int32 6668 } 6669 6670 type Tcl_FSVersion = uintptr 6671 6672 type Tcl_Filesystem1 = struct { 6673 FtypeName uintptr 6674 FstructureLength int32 6675 Fversion Tcl_FSVersion 6676 FpathInFilesystemProc uintptr 6677 FdupInternalRepProc uintptr 6678 FfreeInternalRepProc uintptr 6679 FinternalToNormalizedProc uintptr 6680 FcreateInternalRepProc uintptr 6681 FnormalizePathProc uintptr 6682 FfilesystemPathTypeProc uintptr 6683 FfilesystemSeparatorProc uintptr 6684 FstatProc uintptr 6685 FaccessProc uintptr 6686 FopenFileChannelProc uintptr 6687 FmatchInDirectoryProc uintptr 6688 FutimeProc uintptr 6689 FlinkProc uintptr 6690 FlistVolumesProc uintptr 6691 FfileAttrStringsProc uintptr 6692 FfileAttrsGetProc uintptr 6693 FfileAttrsSetProc uintptr 6694 FcreateDirectoryProc uintptr 6695 FremoveDirectoryProc uintptr 6696 FdeleteFileProc uintptr 6697 FcopyFileProc uintptr 6698 FrenameFileProc uintptr 6699 FcopyDirectoryProc uintptr 6700 FlstatProc uintptr 6701 FloadFileProc uintptr 6702 FgetCwdProc uintptr 6703 FchdirProc uintptr 6704 } 6705 6706 type Tcl_Filesystem = Tcl_Filesystem1 6707 6708 type Tcl_NotifierProcs1 = struct { 6709 FsetTimerProc uintptr 6710 FwaitForEventProc uintptr 6711 FcreateFileHandlerProc uintptr 6712 FdeleteFileHandlerProc uintptr 6713 FinitNotifierProc uintptr 6714 FfinalizeNotifierProc uintptr 6715 FalertNotifierProc uintptr 6716 FserviceModeHookProc uintptr 6717 } 6718 6719 type Tcl_NotifierProcs = Tcl_NotifierProcs1 6720 6721 type Tcl_Token1 = struct { 6722 Ftype int32 6723 Fstart uintptr 6724 Fsize int32 6725 FnumComponents int32 6726 } 6727 6728 type Tcl_Token = Tcl_Token1 6729 6730 type Tcl_Parse1 = struct { 6731 FcommentStart uintptr 6732 FcommentSize int32 6733 FcommandStart uintptr 6734 FcommandSize int32 6735 FnumWords int32 6736 FtokenPtr uintptr 6737 FnumTokens int32 6738 FtokensAvailable int32 6739 FerrorType int32 6740 Fstring uintptr 6741 Fend uintptr 6742 Finterp uintptr 6743 Fterm uintptr 6744 Fincomplete int32 6745 FstaticTokens [20]Tcl_Token 6746 } 6747 6748 type Tcl_Parse = Tcl_Parse1 6749 6750 type Tcl_EncodingType1 = struct { 6751 FencodingName uintptr 6752 FtoUtfProc uintptr 6753 FfromUtfProc uintptr 6754 FfreeProc uintptr 6755 FclientData ClientData 6756 FnullSize int32 6757 } 6758 6759 type Tcl_EncodingType = Tcl_EncodingType1 6760 6761 type Tcl_UniChar = uint16 6762 6763 type Tcl_Config1 = struct { 6764 Fkey uintptr 6765 Fvalue uintptr 6766 } 6767 6768 type Tcl_Config = Tcl_Config1 6769 type mp_digit = uint32 6770 6771 type Tcl_ArgvInfo = struct { 6772 Ftype int32 6773 FkeyStr uintptr 6774 FsrcPtr uintptr 6775 FdstPtr uintptr 6776 FhelpStr uintptr 6777 FclientData ClientData 6778 } 6779 6780 type TclPlatStubs1 = struct { 6781 Fmagic int32 6782 Fhooks uintptr 6783 } 6784 6785 type TclStubHooks = struct { 6786 FtclPlatStubs uintptr 6787 FtclIntStubs uintptr 6788 FtclIntPlatStubs uintptr 6789 } 6790 6791 type TclStubs1 = struct { 6792 Fmagic int32 6793 Fhooks uintptr 6794 Ftcl_PkgProvideEx uintptr 6795 Ftcl_PkgRequireEx uintptr 6796 Ftcl_Panic uintptr 6797 Ftcl_Alloc uintptr 6798 Ftcl_Free uintptr 6799 Ftcl_Realloc uintptr 6800 Ftcl_DbCkalloc uintptr 6801 Ftcl_DbCkfree uintptr 6802 Ftcl_DbCkrealloc uintptr 6803 Ftcl_CreateFileHandler uintptr 6804 Ftcl_DeleteFileHandler uintptr 6805 Ftcl_SetTimer uintptr 6806 Ftcl_Sleep uintptr 6807 Ftcl_WaitForEvent uintptr 6808 Ftcl_AppendAllObjTypes uintptr 6809 Ftcl_AppendStringsToObj uintptr 6810 Ftcl_AppendToObj uintptr 6811 Ftcl_ConcatObj uintptr 6812 Ftcl_ConvertToType uintptr 6813 Ftcl_DbDecrRefCount uintptr 6814 Ftcl_DbIncrRefCount uintptr 6815 Ftcl_DbIsShared uintptr 6816 Ftcl_DbNewBooleanObj uintptr 6817 Ftcl_DbNewByteArrayObj uintptr 6818 Ftcl_DbNewDoubleObj uintptr 6819 Ftcl_DbNewListObj uintptr 6820 Ftcl_DbNewLongObj uintptr 6821 Ftcl_DbNewObj uintptr 6822 Ftcl_DbNewStringObj uintptr 6823 Ftcl_DuplicateObj uintptr 6824 FtclFreeObj uintptr 6825 Ftcl_GetBoolean uintptr 6826 Ftcl_GetBooleanFromObj uintptr 6827 Ftcl_GetByteArrayFromObj uintptr 6828 Ftcl_GetDouble uintptr 6829 Ftcl_GetDoubleFromObj uintptr 6830 Ftcl_GetIndexFromObj uintptr 6831 Ftcl_GetInt uintptr 6832 Ftcl_GetIntFromObj uintptr 6833 Ftcl_GetLongFromObj uintptr 6834 Ftcl_GetObjType uintptr 6835 Ftcl_GetStringFromObj uintptr 6836 Ftcl_InvalidateStringRep uintptr 6837 Ftcl_ListObjAppendList uintptr 6838 Ftcl_ListObjAppendElement uintptr 6839 Ftcl_ListObjGetElements uintptr 6840 Ftcl_ListObjIndex uintptr 6841 Ftcl_ListObjLength uintptr 6842 Ftcl_ListObjReplace uintptr 6843 Ftcl_NewBooleanObj uintptr 6844 Ftcl_NewByteArrayObj uintptr 6845 Ftcl_NewDoubleObj uintptr 6846 Ftcl_NewIntObj uintptr 6847 Ftcl_NewListObj uintptr 6848 Ftcl_NewLongObj uintptr 6849 Ftcl_NewObj uintptr 6850 Ftcl_NewStringObj uintptr 6851 Ftcl_SetBooleanObj uintptr 6852 Ftcl_SetByteArrayLength uintptr 6853 Ftcl_SetByteArrayObj uintptr 6854 Ftcl_SetDoubleObj uintptr 6855 Ftcl_SetIntObj uintptr 6856 Ftcl_SetListObj uintptr 6857 Ftcl_SetLongObj uintptr 6858 Ftcl_SetObjLength uintptr 6859 Ftcl_SetStringObj uintptr 6860 Ftcl_AddErrorInfo uintptr 6861 Ftcl_AddObjErrorInfo uintptr 6862 Ftcl_AllowExceptions uintptr 6863 Ftcl_AppendElement uintptr 6864 Ftcl_AppendResult uintptr 6865 Ftcl_AsyncCreate uintptr 6866 Ftcl_AsyncDelete uintptr 6867 Ftcl_AsyncInvoke uintptr 6868 Ftcl_AsyncMark uintptr 6869 Ftcl_AsyncReady uintptr 6870 Ftcl_BackgroundError uintptr 6871 Ftcl_Backslash uintptr 6872 Ftcl_BadChannelOption uintptr 6873 Ftcl_CallWhenDeleted uintptr 6874 Ftcl_CancelIdleCall uintptr 6875 Ftcl_Close uintptr 6876 Ftcl_CommandComplete uintptr 6877 Ftcl_Concat uintptr 6878 Ftcl_ConvertElement uintptr 6879 Ftcl_ConvertCountedElement uintptr 6880 Ftcl_CreateAlias uintptr 6881 Ftcl_CreateAliasObj uintptr 6882 Ftcl_CreateChannel uintptr 6883 Ftcl_CreateChannelHandler uintptr 6884 Ftcl_CreateCloseHandler uintptr 6885 Ftcl_CreateCommand uintptr 6886 Ftcl_CreateEventSource uintptr 6887 Ftcl_CreateExitHandler uintptr 6888 Ftcl_CreateInterp uintptr 6889 Ftcl_CreateMathFunc uintptr 6890 Ftcl_CreateObjCommand uintptr 6891 Ftcl_CreateSlave uintptr 6892 Ftcl_CreateTimerHandler uintptr 6893 Ftcl_CreateTrace uintptr 6894 Ftcl_DeleteAssocData uintptr 6895 Ftcl_DeleteChannelHandler uintptr 6896 Ftcl_DeleteCloseHandler uintptr 6897 Ftcl_DeleteCommand uintptr 6898 Ftcl_DeleteCommandFromToken uintptr 6899 Ftcl_DeleteEvents uintptr 6900 Ftcl_DeleteEventSource uintptr 6901 Ftcl_DeleteExitHandler uintptr 6902 Ftcl_DeleteHashEntry uintptr 6903 Ftcl_DeleteHashTable uintptr 6904 Ftcl_DeleteInterp uintptr 6905 Ftcl_DetachPids uintptr 6906 Ftcl_DeleteTimerHandler uintptr 6907 Ftcl_DeleteTrace uintptr 6908 Ftcl_DontCallWhenDeleted uintptr 6909 Ftcl_DoOneEvent uintptr 6910 Ftcl_DoWhenIdle uintptr 6911 Ftcl_DStringAppend uintptr 6912 Ftcl_DStringAppendElement uintptr 6913 Ftcl_DStringEndSublist uintptr 6914 Ftcl_DStringFree uintptr 6915 Ftcl_DStringGetResult uintptr 6916 Ftcl_DStringInit uintptr 6917 Ftcl_DStringResult uintptr 6918 Ftcl_DStringSetLength uintptr 6919 Ftcl_DStringStartSublist uintptr 6920 Ftcl_Eof uintptr 6921 Ftcl_ErrnoId uintptr 6922 Ftcl_ErrnoMsg uintptr 6923 Ftcl_Eval uintptr 6924 Ftcl_EvalFile uintptr 6925 Ftcl_EvalObj uintptr 6926 Ftcl_EventuallyFree uintptr 6927 Ftcl_Exit uintptr 6928 Ftcl_ExposeCommand uintptr 6929 Ftcl_ExprBoolean uintptr 6930 Ftcl_ExprBooleanObj uintptr 6931 Ftcl_ExprDouble uintptr 6932 Ftcl_ExprDoubleObj uintptr 6933 Ftcl_ExprLong uintptr 6934 Ftcl_ExprLongObj uintptr 6935 Ftcl_ExprObj uintptr 6936 Ftcl_ExprString uintptr 6937 Ftcl_Finalize uintptr 6938 Ftcl_FindExecutable uintptr 6939 Ftcl_FirstHashEntry uintptr 6940 Ftcl_Flush uintptr 6941 Ftcl_FreeResult uintptr 6942 Ftcl_GetAlias uintptr 6943 Ftcl_GetAliasObj uintptr 6944 Ftcl_GetAssocData uintptr 6945 Ftcl_GetChannel uintptr 6946 Ftcl_GetChannelBufferSize uintptr 6947 Ftcl_GetChannelHandle uintptr 6948 Ftcl_GetChannelInstanceData uintptr 6949 Ftcl_GetChannelMode uintptr 6950 Ftcl_GetChannelName uintptr 6951 Ftcl_GetChannelOption uintptr 6952 Ftcl_GetChannelType uintptr 6953 Ftcl_GetCommandInfo uintptr 6954 Ftcl_GetCommandName uintptr 6955 Ftcl_GetErrno uintptr 6956 Ftcl_GetHostName uintptr 6957 Ftcl_GetInterpPath uintptr 6958 Ftcl_GetMaster uintptr 6959 Ftcl_GetNameOfExecutable uintptr 6960 Ftcl_GetObjResult uintptr 6961 Ftcl_GetOpenFile uintptr 6962 Ftcl_GetPathType uintptr 6963 Ftcl_Gets uintptr 6964 Ftcl_GetsObj uintptr 6965 Ftcl_GetServiceMode uintptr 6966 Ftcl_GetSlave uintptr 6967 Ftcl_GetStdChannel uintptr 6968 Ftcl_GetStringResult uintptr 6969 Ftcl_GetVar uintptr 6970 Ftcl_GetVar2 uintptr 6971 Ftcl_GlobalEval uintptr 6972 Ftcl_GlobalEvalObj uintptr 6973 Ftcl_HideCommand uintptr 6974 Ftcl_Init uintptr 6975 Ftcl_InitHashTable uintptr 6976 Ftcl_InputBlocked uintptr 6977 Ftcl_InputBuffered uintptr 6978 Ftcl_InterpDeleted uintptr 6979 Ftcl_IsSafe uintptr 6980 Ftcl_JoinPath uintptr 6981 Ftcl_LinkVar uintptr 6982 Freserved188 uintptr 6983 Ftcl_MakeFileChannel uintptr 6984 Ftcl_MakeSafe uintptr 6985 Ftcl_MakeTcpClientChannel uintptr 6986 Ftcl_Merge uintptr 6987 Ftcl_NextHashEntry uintptr 6988 Ftcl_NotifyChannel uintptr 6989 Ftcl_ObjGetVar2 uintptr 6990 Ftcl_ObjSetVar2 uintptr 6991 Ftcl_OpenCommandChannel uintptr 6992 Ftcl_OpenFileChannel uintptr 6993 Ftcl_OpenTcpClient uintptr 6994 Ftcl_OpenTcpServer uintptr 6995 Ftcl_Preserve uintptr 6996 Ftcl_PrintDouble uintptr 6997 Ftcl_PutEnv uintptr 6998 Ftcl_PosixError uintptr 6999 Ftcl_QueueEvent uintptr 7000 Ftcl_Read uintptr 7001 Ftcl_ReapDetachedProcs uintptr 7002 Ftcl_RecordAndEval uintptr 7003 Ftcl_RecordAndEvalObj uintptr 7004 Ftcl_RegisterChannel uintptr 7005 Ftcl_RegisterObjType uintptr 7006 Ftcl_RegExpCompile uintptr 7007 Ftcl_RegExpExec uintptr 7008 Ftcl_RegExpMatch uintptr 7009 Ftcl_RegExpRange uintptr 7010 Ftcl_Release uintptr 7011 Ftcl_ResetResult uintptr 7012 Ftcl_ScanElement uintptr 7013 Ftcl_ScanCountedElement uintptr 7014 Ftcl_SeekOld uintptr 7015 Ftcl_ServiceAll uintptr 7016 Ftcl_ServiceEvent uintptr 7017 Ftcl_SetAssocData uintptr 7018 Ftcl_SetChannelBufferSize uintptr 7019 Ftcl_SetChannelOption uintptr 7020 Ftcl_SetCommandInfo uintptr 7021 Ftcl_SetErrno uintptr 7022 Ftcl_SetErrorCode uintptr 7023 Ftcl_SetMaxBlockTime uintptr 7024 Ftcl_SetPanicProc uintptr 7025 Ftcl_SetRecursionLimit uintptr 7026 Ftcl_SetResult uintptr 7027 Ftcl_SetServiceMode uintptr 7028 Ftcl_SetObjErrorCode uintptr 7029 Ftcl_SetObjResult uintptr 7030 Ftcl_SetStdChannel uintptr 7031 Ftcl_SetVar uintptr 7032 Ftcl_SetVar2 uintptr 7033 Ftcl_SignalId uintptr 7034 Ftcl_SignalMsg uintptr 7035 Ftcl_SourceRCFile uintptr 7036 Ftcl_SplitList uintptr 7037 Ftcl_SplitPath uintptr 7038 Ftcl_StaticPackage uintptr 7039 Ftcl_StringMatch uintptr 7040 Ftcl_TellOld uintptr 7041 Ftcl_TraceVar uintptr 7042 Ftcl_TraceVar2 uintptr 7043 Ftcl_TranslateFileName uintptr 7044 Ftcl_Ungets uintptr 7045 Ftcl_UnlinkVar uintptr 7046 Ftcl_UnregisterChannel uintptr 7047 Ftcl_UnsetVar uintptr 7048 Ftcl_UnsetVar2 uintptr 7049 Ftcl_UntraceVar uintptr 7050 Ftcl_UntraceVar2 uintptr 7051 Ftcl_UpdateLinkedVar uintptr 7052 Ftcl_UpVar uintptr 7053 Ftcl_UpVar2 uintptr 7054 Ftcl_VarEval uintptr 7055 Ftcl_VarTraceInfo uintptr 7056 Ftcl_VarTraceInfo2 uintptr 7057 Ftcl_Write uintptr 7058 Ftcl_WrongNumArgs uintptr 7059 Ftcl_DumpActiveMemory uintptr 7060 Ftcl_ValidateAllMemory uintptr 7061 Ftcl_AppendResultVA uintptr 7062 Ftcl_AppendStringsToObjVA uintptr 7063 Ftcl_HashStats uintptr 7064 Ftcl_ParseVar uintptr 7065 Ftcl_PkgPresent uintptr 7066 Ftcl_PkgPresentEx uintptr 7067 Ftcl_PkgProvide uintptr 7068 Ftcl_PkgRequire uintptr 7069 Ftcl_SetErrorCodeVA uintptr 7070 Ftcl_VarEvalVA uintptr 7071 Ftcl_WaitPid uintptr 7072 Ftcl_PanicVA uintptr 7073 Ftcl_GetVersion uintptr 7074 Ftcl_InitMemory uintptr 7075 Ftcl_StackChannel uintptr 7076 Ftcl_UnstackChannel uintptr 7077 Ftcl_GetStackedChannel uintptr 7078 Ftcl_SetMainLoop uintptr 7079 Freserved285 uintptr 7080 Ftcl_AppendObjToObj uintptr 7081 Ftcl_CreateEncoding uintptr 7082 Ftcl_CreateThreadExitHandler uintptr 7083 Ftcl_DeleteThreadExitHandler uintptr 7084 Ftcl_DiscardResult uintptr 7085 Ftcl_EvalEx uintptr 7086 Ftcl_EvalObjv uintptr 7087 Ftcl_EvalObjEx uintptr 7088 Ftcl_ExitThread uintptr 7089 Ftcl_ExternalToUtf uintptr 7090 Ftcl_ExternalToUtfDString uintptr 7091 Ftcl_FinalizeThread uintptr 7092 Ftcl_FinalizeNotifier uintptr 7093 Ftcl_FreeEncoding uintptr 7094 Ftcl_GetCurrentThread uintptr 7095 Ftcl_GetEncoding uintptr 7096 Ftcl_GetEncodingName uintptr 7097 Ftcl_GetEncodingNames uintptr 7098 Ftcl_GetIndexFromObjStruct uintptr 7099 Ftcl_GetThreadData uintptr 7100 Ftcl_GetVar2Ex uintptr 7101 Ftcl_InitNotifier uintptr 7102 Ftcl_MutexLock uintptr 7103 Ftcl_MutexUnlock uintptr 7104 Ftcl_ConditionNotify uintptr 7105 Ftcl_ConditionWait uintptr 7106 Ftcl_NumUtfChars uintptr 7107 Ftcl_ReadChars uintptr 7108 Ftcl_RestoreResult uintptr 7109 Ftcl_SaveResult uintptr 7110 Ftcl_SetSystemEncoding uintptr 7111 Ftcl_SetVar2Ex uintptr 7112 Ftcl_ThreadAlert uintptr 7113 Ftcl_ThreadQueueEvent uintptr 7114 Ftcl_UniCharAtIndex uintptr 7115 Ftcl_UniCharToLower uintptr 7116 Ftcl_UniCharToTitle uintptr 7117 Ftcl_UniCharToUpper uintptr 7118 Ftcl_UniCharToUtf uintptr 7119 Ftcl_UtfAtIndex uintptr 7120 Ftcl_UtfCharComplete uintptr 7121 Ftcl_UtfBackslash uintptr 7122 Ftcl_UtfFindFirst uintptr 7123 Ftcl_UtfFindLast uintptr 7124 Ftcl_UtfNext uintptr 7125 Ftcl_UtfPrev uintptr 7126 Ftcl_UtfToExternal uintptr 7127 Ftcl_UtfToExternalDString uintptr 7128 Ftcl_UtfToLower uintptr 7129 Ftcl_UtfToTitle uintptr 7130 Ftcl_UtfToUniChar uintptr 7131 Ftcl_UtfToUpper uintptr 7132 Ftcl_WriteChars uintptr 7133 Ftcl_WriteObj uintptr 7134 Ftcl_GetString uintptr 7135 Ftcl_GetDefaultEncodingDir uintptr 7136 Ftcl_SetDefaultEncodingDir uintptr 7137 Ftcl_AlertNotifier uintptr 7138 Ftcl_ServiceModeHook uintptr 7139 Ftcl_UniCharIsAlnum uintptr 7140 Ftcl_UniCharIsAlpha uintptr 7141 Ftcl_UniCharIsDigit uintptr 7142 Ftcl_UniCharIsLower uintptr 7143 Ftcl_UniCharIsSpace uintptr 7144 Ftcl_UniCharIsUpper uintptr 7145 Ftcl_UniCharIsWordChar uintptr 7146 Ftcl_UniCharLen uintptr 7147 Ftcl_UniCharNcmp uintptr 7148 Ftcl_UniCharToUtfDString uintptr 7149 Ftcl_UtfToUniCharDString uintptr 7150 Ftcl_GetRegExpFromObj uintptr 7151 Ftcl_EvalTokens uintptr 7152 Ftcl_FreeParse uintptr 7153 Ftcl_LogCommandInfo uintptr 7154 Ftcl_ParseBraces uintptr 7155 Ftcl_ParseCommand uintptr 7156 Ftcl_ParseExpr uintptr 7157 Ftcl_ParseQuotedString uintptr 7158 Ftcl_ParseVarName uintptr 7159 Ftcl_GetCwd uintptr 7160 Ftcl_Chdir uintptr 7161 Ftcl_Access uintptr 7162 Ftcl_Stat uintptr 7163 Ftcl_UtfNcmp uintptr 7164 Ftcl_UtfNcasecmp uintptr 7165 Ftcl_StringCaseMatch uintptr 7166 Ftcl_UniCharIsControl uintptr 7167 Ftcl_UniCharIsGraph uintptr 7168 Ftcl_UniCharIsPrint uintptr 7169 Ftcl_UniCharIsPunct uintptr 7170 Ftcl_RegExpExecObj uintptr 7171 Ftcl_RegExpGetInfo uintptr 7172 Ftcl_NewUnicodeObj uintptr 7173 Ftcl_SetUnicodeObj uintptr 7174 Ftcl_GetCharLength uintptr 7175 Ftcl_GetUniChar uintptr 7176 Ftcl_GetUnicode uintptr 7177 Ftcl_GetRange uintptr 7178 Ftcl_AppendUnicodeToObj uintptr 7179 Ftcl_RegExpMatchObj uintptr 7180 Ftcl_SetNotifier uintptr 7181 Ftcl_GetAllocMutex uintptr 7182 Ftcl_GetChannelNames uintptr 7183 Ftcl_GetChannelNamesEx uintptr 7184 Ftcl_ProcObjCmd uintptr 7185 Ftcl_ConditionFinalize uintptr 7186 Ftcl_MutexFinalize uintptr 7187 Ftcl_CreateThread uintptr 7188 Ftcl_ReadRaw uintptr 7189 Ftcl_WriteRaw uintptr 7190 Ftcl_GetTopChannel uintptr 7191 Ftcl_ChannelBuffered uintptr 7192 Ftcl_ChannelName uintptr 7193 Ftcl_ChannelVersion uintptr 7194 Ftcl_ChannelBlockModeProc uintptr 7195 Ftcl_ChannelCloseProc uintptr 7196 Ftcl_ChannelClose2Proc uintptr 7197 Ftcl_ChannelInputProc uintptr 7198 Ftcl_ChannelOutputProc uintptr 7199 Ftcl_ChannelSeekProc uintptr 7200 Ftcl_ChannelSetOptionProc uintptr 7201 Ftcl_ChannelGetOptionProc uintptr 7202 Ftcl_ChannelWatchProc uintptr 7203 Ftcl_ChannelGetHandleProc uintptr 7204 Ftcl_ChannelFlushProc uintptr 7205 Ftcl_ChannelHandlerProc uintptr 7206 Ftcl_JoinThread uintptr 7207 Ftcl_IsChannelShared uintptr 7208 Ftcl_IsChannelRegistered uintptr 7209 Ftcl_CutChannel uintptr 7210 Ftcl_SpliceChannel uintptr 7211 Ftcl_ClearChannelHandlers uintptr 7212 Ftcl_IsChannelExisting uintptr 7213 Ftcl_UniCharNcasecmp uintptr 7214 Ftcl_UniCharCaseMatch uintptr 7215 Ftcl_FindHashEntry uintptr 7216 Ftcl_CreateHashEntry uintptr 7217 Ftcl_InitCustomHashTable uintptr 7218 Ftcl_InitObjHashTable uintptr 7219 Ftcl_CommandTraceInfo uintptr 7220 Ftcl_TraceCommand uintptr 7221 Ftcl_UntraceCommand uintptr 7222 Ftcl_AttemptAlloc uintptr 7223 Ftcl_AttemptDbCkalloc uintptr 7224 Ftcl_AttemptRealloc uintptr 7225 Ftcl_AttemptDbCkrealloc uintptr 7226 Ftcl_AttemptSetObjLength uintptr 7227 Ftcl_GetChannelThread uintptr 7228 Ftcl_GetUnicodeFromObj uintptr 7229 Ftcl_GetMathFuncInfo uintptr 7230 Ftcl_ListMathFuncs uintptr 7231 Ftcl_SubstObj uintptr 7232 Ftcl_DetachChannel uintptr 7233 Ftcl_IsStandardChannel uintptr 7234 Ftcl_FSCopyFile uintptr 7235 Ftcl_FSCopyDirectory uintptr 7236 Ftcl_FSCreateDirectory uintptr 7237 Ftcl_FSDeleteFile uintptr 7238 Ftcl_FSLoadFile uintptr 7239 Ftcl_FSMatchInDirectory uintptr 7240 Ftcl_FSLink uintptr 7241 Ftcl_FSRemoveDirectory uintptr 7242 Ftcl_FSRenameFile uintptr 7243 Ftcl_FSLstat uintptr 7244 Ftcl_FSUtime uintptr 7245 Ftcl_FSFileAttrsGet uintptr 7246 Ftcl_FSFileAttrsSet uintptr 7247 Ftcl_FSFileAttrStrings uintptr 7248 Ftcl_FSStat uintptr 7249 Ftcl_FSAccess uintptr 7250 Ftcl_FSOpenFileChannel uintptr 7251 Ftcl_FSGetCwd uintptr 7252 Ftcl_FSChdir uintptr 7253 Ftcl_FSConvertToPathType uintptr 7254 Ftcl_FSJoinPath uintptr 7255 Ftcl_FSSplitPath uintptr 7256 Ftcl_FSEqualPaths uintptr 7257 Ftcl_FSGetNormalizedPath uintptr 7258 Ftcl_FSJoinToPath uintptr 7259 Ftcl_FSGetInternalRep uintptr 7260 Ftcl_FSGetTranslatedPath uintptr 7261 Ftcl_FSEvalFile uintptr 7262 Ftcl_FSNewNativePath uintptr 7263 Ftcl_FSGetNativePath uintptr 7264 Ftcl_FSFileSystemInfo uintptr 7265 Ftcl_FSPathSeparator uintptr 7266 Ftcl_FSListVolumes uintptr 7267 Ftcl_FSRegister uintptr 7268 Ftcl_FSUnregister uintptr 7269 Ftcl_FSData uintptr 7270 Ftcl_FSGetTranslatedStringPath uintptr 7271 Ftcl_FSGetFileSystemForPath uintptr 7272 Ftcl_FSGetPathType uintptr 7273 Ftcl_OutputBuffered uintptr 7274 Ftcl_FSMountsChanged uintptr 7275 Ftcl_EvalTokensStandard uintptr 7276 Ftcl_GetTime uintptr 7277 Ftcl_CreateObjTrace uintptr 7278 Ftcl_GetCommandInfoFromToken uintptr 7279 Ftcl_SetCommandInfoFromToken uintptr 7280 Ftcl_DbNewWideIntObj uintptr 7281 Ftcl_GetWideIntFromObj uintptr 7282 Ftcl_NewWideIntObj uintptr 7283 Ftcl_SetWideIntObj uintptr 7284 Ftcl_AllocStatBuf uintptr 7285 Ftcl_Seek uintptr 7286 Ftcl_Tell uintptr 7287 Ftcl_ChannelWideSeekProc uintptr 7288 Ftcl_DictObjPut uintptr 7289 Ftcl_DictObjGet uintptr 7290 Ftcl_DictObjRemove uintptr 7291 Ftcl_DictObjSize uintptr 7292 Ftcl_DictObjFirst uintptr 7293 Ftcl_DictObjNext uintptr 7294 Ftcl_DictObjDone uintptr 7295 Ftcl_DictObjPutKeyList uintptr 7296 Ftcl_DictObjRemoveKeyList uintptr 7297 Ftcl_NewDictObj uintptr 7298 Ftcl_DbNewDictObj uintptr 7299 Ftcl_RegisterConfig uintptr 7300 Ftcl_CreateNamespace uintptr 7301 Ftcl_DeleteNamespace uintptr 7302 Ftcl_AppendExportList uintptr 7303 Ftcl_Export uintptr 7304 Ftcl_Import uintptr 7305 Ftcl_ForgetImport uintptr 7306 Ftcl_GetCurrentNamespace uintptr 7307 Ftcl_GetGlobalNamespace uintptr 7308 Ftcl_FindNamespace uintptr 7309 Ftcl_FindCommand uintptr 7310 Ftcl_GetCommandFromObj uintptr 7311 Ftcl_GetCommandFullName uintptr 7312 Ftcl_FSEvalFileEx uintptr 7313 Ftcl_SetExitProc uintptr 7314 Ftcl_LimitAddHandler uintptr 7315 Ftcl_LimitRemoveHandler uintptr 7316 Ftcl_LimitReady uintptr 7317 Ftcl_LimitCheck uintptr 7318 Ftcl_LimitExceeded uintptr 7319 Ftcl_LimitSetCommands uintptr 7320 Ftcl_LimitSetTime uintptr 7321 Ftcl_LimitSetGranularity uintptr 7322 Ftcl_LimitTypeEnabled uintptr 7323 Ftcl_LimitTypeExceeded uintptr 7324 Ftcl_LimitTypeSet uintptr 7325 Ftcl_LimitTypeReset uintptr 7326 Ftcl_LimitGetCommands uintptr 7327 Ftcl_LimitGetTime uintptr 7328 Ftcl_LimitGetGranularity uintptr 7329 Ftcl_SaveInterpState uintptr 7330 Ftcl_RestoreInterpState uintptr 7331 Ftcl_DiscardInterpState uintptr 7332 Ftcl_SetReturnOptions uintptr 7333 Ftcl_GetReturnOptions uintptr 7334 Ftcl_IsEnsemble uintptr 7335 Ftcl_CreateEnsemble uintptr 7336 Ftcl_FindEnsemble uintptr 7337 Ftcl_SetEnsembleSubcommandList uintptr 7338 Ftcl_SetEnsembleMappingDict uintptr 7339 Ftcl_SetEnsembleUnknownHandler uintptr 7340 Ftcl_SetEnsembleFlags uintptr 7341 Ftcl_GetEnsembleSubcommandList uintptr 7342 Ftcl_GetEnsembleMappingDict uintptr 7343 Ftcl_GetEnsembleUnknownHandler uintptr 7344 Ftcl_GetEnsembleFlags uintptr 7345 Ftcl_GetEnsembleNamespace uintptr 7346 Ftcl_SetTimeProc uintptr 7347 Ftcl_QueryTimeProc uintptr 7348 Ftcl_ChannelThreadActionProc uintptr 7349 Ftcl_NewBignumObj uintptr 7350 Ftcl_DbNewBignumObj uintptr 7351 Ftcl_SetBignumObj uintptr 7352 Ftcl_GetBignumFromObj uintptr 7353 Ftcl_TakeBignumFromObj uintptr 7354 Ftcl_TruncateChannel uintptr 7355 Ftcl_ChannelTruncateProc uintptr 7356 Ftcl_SetChannelErrorInterp uintptr 7357 Ftcl_GetChannelErrorInterp uintptr 7358 Ftcl_SetChannelError uintptr 7359 Ftcl_GetChannelError uintptr 7360 Ftcl_InitBignumFromDouble uintptr 7361 Ftcl_GetNamespaceUnknownHandler uintptr 7362 Ftcl_SetNamespaceUnknownHandler uintptr 7363 Ftcl_GetEncodingFromObj uintptr 7364 Ftcl_GetEncodingSearchPath uintptr 7365 Ftcl_SetEncodingSearchPath uintptr 7366 Ftcl_GetEncodingNameFromEnvironment uintptr 7367 Ftcl_PkgRequireProc uintptr 7368 Ftcl_AppendObjToErrorInfo uintptr 7369 Ftcl_AppendLimitedToObj uintptr 7370 Ftcl_Format uintptr 7371 Ftcl_AppendFormatToObj uintptr 7372 Ftcl_ObjPrintf uintptr 7373 Ftcl_AppendPrintfToObj uintptr 7374 Ftcl_CancelEval uintptr 7375 Ftcl_Canceled uintptr 7376 Ftcl_CreatePipe uintptr 7377 Ftcl_NRCreateCommand uintptr 7378 Ftcl_NREvalObj uintptr 7379 Ftcl_NREvalObjv uintptr 7380 Ftcl_NRCmdSwap uintptr 7381 Ftcl_NRAddCallback uintptr 7382 Ftcl_NRCallObjProc uintptr 7383 Ftcl_GetFSDeviceFromStat uintptr 7384 Ftcl_GetFSInodeFromStat uintptr 7385 Ftcl_GetModeFromStat uintptr 7386 Ftcl_GetLinkCountFromStat uintptr 7387 Ftcl_GetUserIdFromStat uintptr 7388 Ftcl_GetGroupIdFromStat uintptr 7389 Ftcl_GetDeviceTypeFromStat uintptr 7390 Ftcl_GetAccessTimeFromStat uintptr 7391 Ftcl_GetModificationTimeFromStat uintptr 7392 Ftcl_GetChangeTimeFromStat uintptr 7393 Ftcl_GetSizeFromStat uintptr 7394 Ftcl_GetBlocksFromStat uintptr 7395 Ftcl_GetBlockSizeFromStat uintptr 7396 Ftcl_SetEnsembleParameterList uintptr 7397 Ftcl_GetEnsembleParameterList uintptr 7398 Ftcl_ParseArgsObjv uintptr 7399 Ftcl_GetErrorLine uintptr 7400 Ftcl_SetErrorLine uintptr 7401 Ftcl_TransferResult uintptr 7402 Ftcl_InterpActive uintptr 7403 Ftcl_BackgroundException uintptr 7404 Ftcl_ZlibDeflate uintptr 7405 Ftcl_ZlibInflate uintptr 7406 Ftcl_ZlibCRC32 uintptr 7407 Ftcl_ZlibAdler32 uintptr 7408 Ftcl_ZlibStreamInit uintptr 7409 Ftcl_ZlibStreamGetCommandName uintptr 7410 Ftcl_ZlibStreamEof uintptr 7411 Ftcl_ZlibStreamChecksum uintptr 7412 Ftcl_ZlibStreamPut uintptr 7413 Ftcl_ZlibStreamGet uintptr 7414 Ftcl_ZlibStreamClose uintptr 7415 Ftcl_ZlibStreamReset uintptr 7416 Ftcl_SetStartupScript uintptr 7417 Ftcl_GetStartupScript uintptr 7418 Ftcl_CloseEx uintptr 7419 Ftcl_NRExprObj uintptr 7420 Ftcl_NRSubstObj uintptr 7421 Ftcl_LoadFile uintptr 7422 Ftcl_FindSymbol uintptr 7423 Ftcl_FSUnloadFile uintptr 7424 Ftcl_ZlibStreamSetCompressionDictionary uintptr 7425 Freserved631 uintptr 7426 Freserved632 uintptr 7427 Freserved633 uintptr 7428 Freserved634 uintptr 7429 Freserved635 uintptr 7430 Freserved636 uintptr 7431 Freserved637 uintptr 7432 Freserved638 uintptr 7433 Freserved639 uintptr 7434 Freserved640 uintptr 7435 Freserved641 uintptr 7436 Freserved642 uintptr 7437 Freserved643 uintptr 7438 Freserved644 uintptr 7439 Freserved645 uintptr 7440 Freserved646 uintptr 7441 Freserved647 uintptr 7442 Freserved648 uintptr 7443 FtclUnusedStubEntry uintptr 7444 } 7445 7446 type TclStubs = TclStubs1 7447 7448 type TclPlatStubs = TclPlatStubs1 7449 7450 func dbHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 7451 bp := tls.Alloc(56) 7452 defer tls.Free(56) 7453 7454 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 7455 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 7456 return TCL_ERROR 7457 } 7458 7459 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 7460 return TCL_OK 7461 } 7462 7463 func testExpertCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7464 bp := tls.Alloc(108) 7465 defer tls.Free(108) 7466 7467 var pExpert uintptr = clientData 7468 *(*[6]Subcmd)(unsafe.Pointer(bp)) = [6]Subcmd{ 7469 {FzSub: ts + 1947, FnArg: 1, FzMsg: ts + 1951}, 7470 {FzSub: ts + 1957, FzMsg: ts + 584}, 7471 {FzSub: ts + 1965, FzMsg: ts + 584}, 7472 {FzSub: ts + 1971, FnArg: 2, FzMsg: ts + 1978}, 7473 {FzSub: ts + 1991, FzMsg: ts + 584}, 7474 {}, 7475 } 7476 7477 var rc int32 = TCL_OK 7478 *(*uintptr)(unsafe.Pointer(bp + 76)) = uintptr(0) 7479 7480 if objc < 2 { 7481 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 7482 return TCL_ERROR 7483 } 7484 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 7485 *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp, int32(unsafe.Sizeof(Subcmd{})), ts+2014, 0, bp+72) 7486 if rc != TCL_OK { 7487 return rc 7488 } 7489 if objc != 2+(*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 72)))*12)).FnArg { 7490 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 72)))*12)).FzMsg) 7491 return TCL_ERROR 7492 } 7493 7494 switch *(*int32)(unsafe.Pointer(bp + 72)) { 7495 case 0: 7496 { 7497 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 7498 rc = sqlite3_expert_sql(tls, pExpert, zArg, bp+76) 7499 break 7500 7501 } 7502 7503 case 1: 7504 { 7505 rc = sqlite3_expert_analyze(tls, pExpert, bp+76) 7506 break 7507 7508 } 7509 7510 case 2: 7511 { 7512 var n int32 = sqlite3_expert_count(tls, pExpert) 7513 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, n)) 7514 break 7515 7516 } 7517 7518 case 3: 7519 { 7520 *(*[5]uintptr)(unsafe.Pointer(bp + 84)) = [5]uintptr{ 7521 ts + 1947, ts + 2026, ts + 2034, ts + 2039, uintptr(0), 7522 } 7523 7524 var zReport uintptr 7525 7526 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+80) != 0 || 7527 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+84, int32(unsafe.Sizeof(uintptr(0))), ts+1971, 0, bp+104) != 0 { 7528 return TCL_ERROR 7529 } 7530 7531 zReport = sqlite3_expert_report(tls, pExpert, *(*int32)(unsafe.Pointer(bp + 80)), 1+*(*int32)(unsafe.Pointer(bp + 104))) 7532 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zReport, -1)) 7533 break 7534 7535 } 7536 7537 default: 7538 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 7539 break 7540 } 7541 7542 if rc != TCL_OK { 7543 if *(*uintptr)(unsafe.Pointer(bp + 76)) != 0 { 7544 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 76)), -1)) 7545 } else { 7546 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 7547 } 7548 } 7549 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 76))) 7550 return rc 7551 } 7552 7553 type Subcmd = struct { 7554 FzSub uintptr 7555 FnArg int32 7556 FzMsg uintptr 7557 } 7558 7559 func testExpertDel(tls *libc.TLS, clientData uintptr) { 7560 var pExpert uintptr = clientData 7561 sqlite3_expert_destroy(tls, pExpert) 7562 } 7563 7564 func test_sqlite3_expert_new(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7565 bp := tls.Alloc(48) 7566 defer tls.Free(48) 7567 7568 var zCmd uintptr = uintptr(0) 7569 *(*uintptr)(unsafe.Pointer(bp + 44)) = uintptr(0) 7570 var pExpert uintptr 7571 var rc int32 = TCL_OK 7572 7573 if objc != 2 { 7574 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 7575 return TCL_ERROR 7576 } 7577 if dbHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+40) != 0 { 7578 return TCL_ERROR 7579 } 7580 7581 zCmd = sqlite3.Xsqlite3_mprintf(tls, ts+2053, libc.VaList(bp, libc.PreIncInt32(&iCmd, 1))) 7582 if zCmd == uintptr(0) { 7583 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, ts+2069, uintptr(0))) 7584 return TCL_ERROR 7585 } 7586 7587 pExpert = sqlite3_expert_new(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+44) 7588 if pExpert == uintptr(0) { 7589 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 44)), uintptr(0))) 7590 rc = TCL_ERROR 7591 } else { 7592 var p uintptr = pExpert 7593 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 7594 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7595 }{testExpertCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testExpertDel}))) 7596 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zCmd, -1)) 7597 } 7598 7599 sqlite3.Xsqlite3_free(tls, zCmd) 7600 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 44))) 7601 return rc 7602 } 7603 7604 var iCmd int32 = 0 7605 7606 func TestExpert_Init(tls *libc.TLS, interp uintptr) int32 { 7607 bp := tls.Alloc(8) 7608 defer tls.Free(8) 7609 7610 *(*[1]struct { 7611 FzCmd uintptr 7612 FxProc uintptr 7613 })(unsafe.Pointer(bp)) = [1]struct { 7614 FzCmd uintptr 7615 FxProc uintptr 7616 }{ 7617 {FzCmd: ts + 2083, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 7618 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7619 }{test_sqlite3_expert_new}))}, 7620 } 7621 var i int32 7622 7623 for i = 0; uint32(i) < uint32(unsafe.Sizeof([1]struct { 7624 FzCmd uintptr 7625 FxProc uintptr 7626 }{}))/uint32(unsafe.Sizeof(struct { 7627 FzCmd uintptr 7628 FxProc uintptr 7629 }{})); i++ { 7630 var p uintptr = bp + uintptr(i)*8 7631 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 7632 FzCmd uintptr 7633 FxProc uintptr 7634 })(unsafe.Pointer(p)).FzCmd, (*struct { 7635 FzCmd uintptr 7636 FxProc uintptr 7637 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 7638 } 7639 return TCL_OK 7640 } 7641 7642 func f5tDbPointer(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr) int32 { 7643 bp := tls.Alloc(32) 7644 defer tls.Free(32) 7645 7646 var p uintptr 7647 7648 var z uintptr = tcl.XTcl_GetString(tls, pObj) 7649 if tcl.XTcl_GetCommandInfo(tls, interp, z, bp) != 0 { 7650 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 7651 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 7652 return TCL_OK 7653 } 7654 return TCL_ERROR 7655 } 7656 7657 func f5tResultToErrorCode(tls *libc.TLS, zRes uintptr) int32 { 7658 bp := tls.Alloc(32) 7659 defer tls.Free(32) 7660 7661 *(*[4]ErrorCode)(unsafe.Pointer(bp)) = [4]ErrorCode{ 7662 {Frc: SQLITE_DONE, FzError: ts + 2102}, 7663 {Frc: SQLITE_ERROR, FzError: ts + 2114}, 7664 {FzError: ts + 2127}, 7665 {FzError: ts + 584}, 7666 } 7667 var i int32 7668 7669 for i = 0; uint32(i) < uint32(unsafe.Sizeof([4]ErrorCode{}))/uint32(unsafe.Sizeof(ErrorCode{})); i++ { 7670 if 0 == sqlite3.Xsqlite3_stricmp(tls, zRes, (*ErrorCode)(unsafe.Pointer(bp+uintptr(i)*8)).FzError) { 7671 return (*ErrorCode)(unsafe.Pointer(bp + uintptr(i)*8)).Frc 7672 } 7673 } 7674 7675 return SQLITE_ERROR 7676 } 7677 7678 type ErrorCode = struct { 7679 Frc int32 7680 FzError uintptr 7681 } 7682 7683 func f5tDbAndApi(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr, ppApi uintptr) int32 { 7684 bp := tls.Alloc(60) 7685 defer tls.Free(60) 7686 7687 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7688 var rc int32 = f5tDbPointer(tls, interp, pObj, bp+48) 7689 if rc != TCL_OK { 7690 return TCL_ERROR 7691 } else { 7692 *(*uintptr)(unsafe.Pointer(bp + 52)) = uintptr(0) 7693 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 7694 7695 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+2137, -1, bp+52, uintptr(0)) 7696 if rc != SQLITE_OK { 7697 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7698 return TCL_ERROR 7699 } 7700 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp + 52)), 1, bp+56, ts+2161, uintptr(0)) 7701 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 52))) 7702 7703 if sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 52))) != SQLITE_OK { 7704 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7705 return TCL_ERROR 7706 } 7707 7708 *(*uintptr)(unsafe.Pointer(ppDb)) = *(*uintptr)(unsafe.Pointer(bp + 48)) 7709 *(*uintptr)(unsafe.Pointer(ppApi)) = *(*uintptr)(unsafe.Pointer(bp + 56)) 7710 } 7711 7712 return TCL_OK 7713 } 7714 7715 type F5tFunction1 = struct { 7716 Finterp uintptr 7717 FpScript uintptr 7718 } 7719 7720 type F5tFunction = F5tFunction1 7721 7722 type F5tApi1 = struct { 7723 FpApi uintptr 7724 FpFts uintptr 7725 } 7726 7727 type F5tApi = F5tApi1 7728 7729 type F5tAuxData1 = struct{ FpObj uintptr } 7730 7731 type F5tAuxData = F5tAuxData1 7732 7733 func xTokenizeCb(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 7734 var p uintptr = pCtx 7735 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7736 var rc int32 7737 7738 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7739 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7740 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iStart)) 7741 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iEnd)) 7742 7743 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7744 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7745 var _objPtr uintptr = pEval 7746 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7747 tcl.XTclFreeObj(tls, _objPtr) 7748 } 7749 } 7750 if rc == TCL_OK { 7751 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7752 } 7753 7754 return rc 7755 } 7756 7757 func xQueryPhraseCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr) int32 { 7758 bp := tls.Alloc(80) 7759 defer tls.Free(80) 7760 7761 var p uintptr = pCtx 7762 var pEval uintptr 7763 var rc int32 7764 7765 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 7766 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 7767 libc.Xsprintf(tls, bp+8, ts+2174, libc.VaList(bp, libc.PostIncInt64(&iCmd1, 1))) 7768 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 7769 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7770 }{xF5tApi})), bp+72, uintptr(0)) 7771 7772 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7773 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7774 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 7775 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7776 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7777 var _objPtr uintptr = pEval 7778 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7779 tcl.XTclFreeObj(tls, _objPtr) 7780 } 7781 } 7782 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 7783 7784 if rc == TCL_OK { 7785 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7786 } 7787 7788 return rc 7789 } 7790 7791 var iCmd1 sqlite3_int64 = int64(0) 7792 7793 func xSetAuxdataDestructor(tls *libc.TLS, p uintptr) { 7794 var pData uintptr = p 7795 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7796 var _objPtr uintptr = (*F5tAuxData)(unsafe.Pointer(pData)).FpObj 7797 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7798 tcl.XTclFreeObj(tls, _objPtr) 7799 } 7800 } 7801 sqlite3.Xsqlite3_free(tls, pData) 7802 } 7803 7804 func xF5tApi(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7805 bp := tls.Alloc(400) 7806 defer tls.Free(400) 7807 7808 *(*[19]Sub)(unsafe.Pointer(bp + 32)) = [19]Sub{ 7809 {FzName: ts + 2185, FzMsg: ts + 584}, 7810 {FzName: ts + 2198, FzMsg: ts + 584}, 7811 {FzName: ts + 2208, FnArg: 1, FzMsg: ts + 2225}, 7812 {FzName: ts + 2229, FnArg: 2, FzMsg: ts + 2239}, 7813 {FzName: ts + 2251, FzMsg: ts + 584}, 7814 {FzName: ts + 2264, FnArg: 1, FzMsg: ts + 2276}, 7815 {FzName: ts + 2283, FzMsg: ts + 584}, 7816 {FzName: ts + 2294, FnArg: 1, FzMsg: ts + 2300}, 7817 {FzName: ts + 2304, FzMsg: ts + 584}, 7818 {FzName: ts + 2311, FnArg: 1, FzMsg: ts + 2225}, 7819 {FzName: ts + 2323, FnArg: 1, FzMsg: ts + 2225}, 7820 {FzName: ts + 2335, FnArg: 2, FzMsg: ts + 2348}, 7821 {FzName: ts + 2362, FnArg: 1, FzMsg: ts + 2374}, 7822 {FzName: ts + 2380, FnArg: 1, FzMsg: ts + 2392}, 7823 {FzName: ts + 2398, FnArg: 1, FzMsg: ts + 2413}, 7824 {FzName: ts + 2421, FnArg: 1, FzMsg: ts + 2392}, 7825 {FzName: ts + 2436, FnArg: 4, FzMsg: ts + 2451}, 7826 {FzName: ts + 2480, FnArg: 3, FzMsg: ts + 2501}, 7827 {}, 7828 } 7829 var rc int32 7830 *(*int32)(unsafe.Pointer(bp + 260)) = 0 7831 var p uintptr = clientData 7832 7833 if objc < 2 { 7834 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 7835 return TCL_ERROR 7836 } 7837 7838 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 7839 interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+32, int32(unsafe.Sizeof(Sub{})), ts+2523, 0, bp+260) 7840 if rc != TCL_OK { 7841 return rc 7842 } 7843 if (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 260)))*12)).FnArg != objc-2 { 7844 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 260)))*12)).FzMsg) 7845 return TCL_ERROR 7846 } 7847 7848 switch *(*int32)(unsafe.Pointer(bp + 260)) { 7849 case 0: 7850 { 7851 var nCol int32 7852 nCol = (*struct { 7853 f func(*libc.TLS, uintptr) int32 7854 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7855 if rc == SQLITE_OK { 7856 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol)) 7857 } 7858 break 7859 7860 } 7861 case 1: 7862 { 7863 rc = (*struct { 7864 f func(*libc.TLS, uintptr, uintptr) int32 7865 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+264) 7866 if rc == SQLITE_OK { 7867 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 264)))) 7868 } 7869 break 7870 7871 } 7872 case 2: 7873 { 7874 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+272) != 0 { 7875 return TCL_ERROR 7876 } 7877 rc = (*struct { 7878 f func(*libc.TLS, uintptr, int32, uintptr) int32 7879 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnTotalSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 272)), bp+276) 7880 if rc == SQLITE_OK { 7881 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 276)))) 7882 } 7883 break 7884 7885 } 7886 case 3: 7887 { 7888 var zText uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+284) 7889 7890 (*F5tFunction)(unsafe.Pointer(bp + 288)).Finterp = interp 7891 (*F5tFunction)(unsafe.Pointer(bp + 288)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 7892 rc = (*struct { 7893 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr) int32 7894 })(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 + 284)), bp+288, *(*uintptr)(unsafe.Pointer(&struct { 7895 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 7896 }{xTokenizeCb}))) 7897 if rc == SQLITE_OK { 7898 tcl.XTcl_ResetResult(tls, interp) 7899 } 7900 return rc 7901 7902 } 7903 case 4: 7904 { 7905 var nPhrase int32 7906 nPhrase = (*struct { 7907 f func(*libc.TLS, uintptr) int32 7908 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7909 if rc == SQLITE_OK { 7910 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPhrase)) 7911 } 7912 break 7913 7914 } 7915 case 5: 7916 { 7917 var sz int32 7918 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+296) != 0 { 7919 return TCL_ERROR 7920 } 7921 sz = (*struct { 7922 f func(*libc.TLS, uintptr, int32) int32 7923 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 296))) 7924 if rc == SQLITE_OK { 7925 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sz)) 7926 } 7927 break 7928 7929 } 7930 case 6: 7931 { 7932 rc = (*struct { 7933 f func(*libc.TLS, uintptr, uintptr) int32 7934 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInstCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+300) 7935 if rc == SQLITE_OK { 7936 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 300)))) 7937 } 7938 break 7939 7940 } 7941 case 7: 7942 { 7943 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+304) != 0 { 7944 return TCL_ERROR 7945 } 7946 rc = (*struct { 7947 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 7948 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInst})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 304)), bp+308, bp+312, bp+316) 7949 if rc == SQLITE_OK { 7950 var pList uintptr = tcl.XTcl_NewObj(tls) 7951 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 308)))) 7952 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 312)))) 7953 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 316)))) 7954 tcl.XTcl_SetObjResult(tls, interp, pList) 7955 } 7956 break 7957 7958 } 7959 case 8: 7960 { 7961 var iRowid sqlite3_int64 = (*struct { 7962 f func(*libc.TLS, uintptr) sqlite3_int64 7963 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowid})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7964 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iRowid)) 7965 break 7966 7967 } 7968 case 9: 7969 { 7970 *(*uintptr)(unsafe.Pointer(bp + 324)) = uintptr(0) 7971 *(*int32)(unsafe.Pointer(bp + 328)) = 0 7972 7973 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+320) != 0 { 7974 return TCL_ERROR 7975 } 7976 rc = (*struct { 7977 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 7978 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnText})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 320)), bp+324, bp+328) 7979 if rc == SQLITE_OK { 7980 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 324)), *(*int32)(unsafe.Pointer(bp + 328)))) 7981 } 7982 break 7983 7984 } 7985 case 10: 7986 { 7987 *(*int32)(unsafe.Pointer(bp + 336)) = 0 7988 7989 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+332) != 0 { 7990 return TCL_ERROR 7991 } 7992 rc = (*struct { 7993 f func(*libc.TLS, uintptr, int32, uintptr) int32 7994 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 332)), bp+336) 7995 if rc == SQLITE_OK { 7996 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 336)))) 7997 } 7998 break 7999 8000 } 8001 case 11: 8002 { 8003 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+340) != 0 { 8004 return TCL_ERROR 8005 } 8006 (*F5tFunction)(unsafe.Pointer(bp + 344)).Finterp = interp 8007 (*F5tFunction)(unsafe.Pointer(bp + 344)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 8008 rc = (*struct { 8009 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8010 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxQueryPhrase})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 340)), bp+344, *(*uintptr)(unsafe.Pointer(&struct { 8011 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8012 }{xQueryPhraseCb}))) 8013 if rc == SQLITE_OK { 8014 tcl.XTcl_ResetResult(tls, interp) 8015 } 8016 break 8017 8018 } 8019 case 12: 8020 { 8021 var pData uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(F5tAuxData{}))) 8022 if pData == uintptr(0) { 8023 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, 0)) 8024 return TCL_ERROR 8025 } 8026 (*F5tAuxData)(unsafe.Pointer(pData)).FpObj = *(*uintptr)(unsafe.Pointer(objv + 2*4)) 8027 (*Tcl_Obj)(unsafe.Pointer((*F5tAuxData)(unsafe.Pointer(pData)).FpObj)).FrefCount++ 8028 rc = (*struct { 8029 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8030 })(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}))) 8031 break 8032 8033 } 8034 case 13: 8035 { 8036 var pData uintptr 8037 8038 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+352) != 0 { 8039 return TCL_ERROR 8040 } 8041 pData = (*struct { 8042 f func(*libc.TLS, uintptr, int32) uintptr 8043 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxGetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 352))) 8044 if pData == uintptr(0) { 8045 tcl.XTcl_ResetResult(tls, interp) 8046 } else { 8047 tcl.XTcl_SetObjResult(tls, interp, (*F5tAuxData)(unsafe.Pointer(pData)).FpObj) 8048 if *(*int32)(unsafe.Pointer(bp + 352)) != 0 { 8049 xSetAuxdataDestructor(tls, pData) 8050 } 8051 } 8052 break 8053 8054 } 8055 8056 case 14: 8057 { 8058 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+356) != 0 { 8059 return TCL_ERROR 8060 } 8061 rc = (*struct { 8062 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8063 })(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 + 356))), uintptr(0)) 8064 break 8065 8066 } 8067 case 15: 8068 { 8069 var iVal int32 8070 8071 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+360) != 0 { 8072 return TCL_ERROR 8073 } 8074 iVal = (int32((*struct { 8075 f func(*libc.TLS, uintptr, int32) uintptr 8076 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxGetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 360)))) - int32(uintptr(0))) / 1 8077 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iVal)) 8078 break 8079 8080 } 8081 8082 case 16: 8083 { 8084 var zColvar uintptr 8085 var zOffvar uintptr 8086 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 5*4)) 8087 8088 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+364) != 0 { 8089 return TCL_ERROR 8090 } 8091 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 8092 zOffvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))) 8093 8094 rc = (*struct { 8095 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8096 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseFirst})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 364)), bp+368, bp+376, bp+380) 8097 if rc != SQLITE_OK { 8098 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 8099 return TCL_ERROR 8100 } 8101 for ; *(*int32)(unsafe.Pointer(bp + 376)) >= 0; (*struct { 8102 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8103 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNext})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+368, bp+376, bp+380) { 8104 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 376))), 0) 8105 tcl.XTcl_SetVar2Ex(tls, interp, zOffvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 380))), 0) 8106 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 8107 if rc == TCL_CONTINUE { 8108 rc = TCL_OK 8109 } 8110 if rc != TCL_OK { 8111 if rc == TCL_BREAK { 8112 rc = TCL_OK 8113 } 8114 break 8115 } 8116 } 8117 8118 break 8119 8120 } 8121 8122 case 17: 8123 { 8124 var zColvar uintptr 8125 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 4*4)) 8126 8127 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+384) != 0 { 8128 return TCL_ERROR 8129 } 8130 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 8131 8132 rc = (*struct { 8133 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8134 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseFirstColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 384)), bp+388, bp+396) 8135 if rc != SQLITE_OK { 8136 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8137 return TCL_ERROR 8138 } 8139 for ; *(*int32)(unsafe.Pointer(bp + 396)) >= 0; (*struct { 8140 f func(*libc.TLS, uintptr, uintptr, uintptr) 8141 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNextColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+388, bp+396) { 8142 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 396))), 0) 8143 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 8144 if rc == TCL_CONTINUE { 8145 rc = TCL_OK 8146 } 8147 if rc != TCL_OK { 8148 if rc == TCL_BREAK { 8149 rc = TCL_OK 8150 } 8151 break 8152 } 8153 } 8154 8155 break 8156 8157 } 8158 8159 default: 8160 break 8161 } 8162 8163 if rc != SQLITE_OK { 8164 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8165 return TCL_ERROR 8166 } 8167 8168 return TCL_OK 8169 } 8170 8171 type Sub = struct { 8172 FzName uintptr 8173 FnArg int32 8174 FzMsg uintptr 8175 } 8176 8177 func xF5tFunction(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 8178 bp := tls.Alloc(100) 8179 defer tls.Free(100) 8180 8181 var p uintptr = (*struct { 8182 f func(*libc.TLS, uintptr) uintptr 8183 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxUserData})).f(tls, pFts) 8184 var pEval uintptr 8185 var i int32 8186 var rc int32 8187 8188 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 8189 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 8190 8191 libc.Xsprintf(tls, bp+8, ts+2535, libc.VaList(bp, libc.PostIncInt64(&iCmd2, 1))) 8192 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 8193 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8194 }{xF5tApi})), bp+72, uintptr(0)) 8195 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8196 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8197 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 8198 8199 for i = 0; i < nVal; i++ { 8200 var pObj uintptr = uintptr(0) 8201 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*4))) { 8202 case SQLITE_TEXT: 8203 pObj = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*4))), -1) 8204 break 8205 case SQLITE_BLOB: 8206 pObj = tcl.XTcl_NewByteArrayObj(tls, 8207 sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*4))), sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*4)))) 8208 break 8209 case SQLITE_INTEGER: 8210 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*4)))) 8211 break 8212 case SQLITE_FLOAT: 8213 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*4)))) 8214 break 8215 default: 8216 pObj = tcl.XTcl_NewObj(tls) 8217 break 8218 } 8219 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, pObj) 8220 } 8221 8222 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, TCL_GLOBAL_ONLY) 8223 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8224 var _objPtr uintptr = pEval 8225 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8226 tcl.XTclFreeObj(tls, _objPtr) 8227 } 8228 } 8229 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 8230 8231 if rc != TCL_OK { 8232 sqlite3.Xsqlite3_result_error(tls, pCtx, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp), -1) 8233 } else { 8234 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp) 8235 8236 var zType uintptr = func() uintptr { 8237 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 8238 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 8239 } 8240 return ts + 584 8241 }() 8242 var c int8 = *(*int8)(unsafe.Pointer(zType)) 8243 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 8244 var data uintptr = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+80) 8245 sqlite3.Xsqlite3_result_blob(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 80)), libc.UintptrFromInt32(-1)) 8246 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 8247 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pVar, bp+80) 8248 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(bp + 80))) 8249 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 8250 tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+84) 8251 sqlite3.Xsqlite3_result_double(tls, pCtx, *(*float64)(unsafe.Pointer(bp + 84))) 8252 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 8253 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+92) 8254 sqlite3.Xsqlite3_result_int64(tls, pCtx, *(*Tcl_WideInt)(unsafe.Pointer(bp + 92))) 8255 } else { 8256 var data uintptr = tcl.XTcl_GetStringFromObj(tls, pVar, bp+80) 8257 sqlite3.Xsqlite3_result_text(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 80)), libc.UintptrFromInt32(-1)) 8258 } 8259 } 8260 } 8261 8262 var iCmd2 sqlite3_int64 = int64(0) 8263 8264 func xF5tDestroy(tls *libc.TLS, pCtx uintptr) { 8265 var p uintptr = pCtx 8266 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8267 var _objPtr uintptr = (*F5tFunction)(unsafe.Pointer(p)).FpScript 8268 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8269 tcl.XTclFreeObj(tls, _objPtr) 8270 } 8271 } 8272 tcl.XTcl_Free(tls, p) 8273 } 8274 8275 func f5tCreateFunction(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8276 bp := tls.Alloc(32) 8277 defer tls.Free(32) 8278 8279 var zName uintptr 8280 var pScript uintptr 8281 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 8282 *(*uintptr)(unsafe.Pointer(bp + 28)) = uintptr(0) 8283 var pCtx uintptr = uintptr(0) 8284 var rc int32 8285 8286 if objc != 4 { 8287 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8288 return TCL_ERROR 8289 } 8290 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+24, bp+28) != 0 { 8291 return TCL_ERROR 8292 } 8293 8294 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 8295 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 8296 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tFunction{}))) 8297 (*F5tFunction)(unsafe.Pointer(pCtx)).Finterp = interp 8298 (*F5tFunction)(unsafe.Pointer(pCtx)).FpScript = pScript 8299 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8300 8301 rc = (*struct { 8302 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 8303 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 28)))).FxCreateFunction})).f(tls, 8304 *(*uintptr)(unsafe.Pointer(bp + 28)), zName, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 8305 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 8306 }{xF5tFunction})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{xF5tDestroy}))) 8307 if rc != SQLITE_OK { 8308 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 24))), 0)) 8309 return TCL_ERROR 8310 } 8311 8312 return TCL_OK 8313 } 8314 8315 type F5tTokenizeCtx1 = struct { 8316 FpRet uintptr 8317 FbSubst int32 8318 FzInput uintptr 8319 } 8320 8321 type F5tTokenizeCtx = F5tTokenizeCtx1 8322 8323 func xTokenizeCb2(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 8324 var p uintptr = pCtx 8325 if (*F5tTokenizeCtx)(unsafe.Pointer(p)).FbSubst != 0 { 8326 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8327 tcl.XTcl_ListObjAppendElement(tls, 8328 uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, (*F5tTokenizeCtx)(unsafe.Pointer(p)).FzInput+uintptr(iStart), iEnd-iStart)) 8329 } else { 8330 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8331 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iStart)) 8332 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iEnd)) 8333 } 8334 return SQLITE_OK 8335 } 8336 8337 func f5tTokenize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8338 bp := tls.Alloc(148) 8339 defer tls.Free(148) 8340 8341 var zText uintptr 8342 8343 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 8344 *(*uintptr)(unsafe.Pointer(bp + 100)) = uintptr(0) 8345 *(*uintptr)(unsafe.Pointer(bp + 132)) = uintptr(0) 8346 8347 var pRet uintptr = uintptr(0) 8348 8349 var rc int32 8350 8351 if objc != 4 && objc != 5 { 8352 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2596) 8353 return TCL_ERROR 8354 } 8355 if objc == 5 { 8356 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 8357 if libc.Xstrcmp(tls, ts+2618, zOpt) != 0 { 8358 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2625, zOpt, 0)) 8359 return TCL_ERROR 8360 } 8361 } 8362 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*4)), bp+96, bp+100) != 0 { 8363 return TCL_ERROR 8364 } 8365 if tcl.XTcl_SplitList(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*4))), bp+104, bp+108) != 0 { 8366 return TCL_ERROR 8367 } 8368 if *(*int32)(unsafe.Pointer(bp + 104)) == 0 { 8369 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2647, 0)) 8370 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 108))) 8371 return TCL_ERROR 8372 } 8373 zText = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)), bp+112) 8374 8375 rc = (*struct { 8376 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 8377 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 100)))).FxFindTokenizer})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 100)), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 108)))), bp+116, bp+120) 8378 if rc != SQLITE_OK { 8379 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2647, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 108)))), 0)) 8380 return TCL_ERROR 8381 } 8382 8383 rc = (*struct { 8384 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8385 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 120)).FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 116)), *(*uintptr)(unsafe.Pointer(bp + 108))+1*4, *(*int32)(unsafe.Pointer(bp + 104))-1, bp+132) 8386 if rc != SQLITE_OK { 8387 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+2667, 0)) 8388 return TCL_ERROR 8389 } 8390 8391 pRet = tcl.XTcl_NewObj(tls) 8392 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 8393 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 136)).FbSubst = libc.Bool32(objc == 5) 8394 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 136)).FpRet = pRet 8395 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 136)).FzInput = zText 8396 rc = (*struct { 8397 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8398 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 120)).FxTokenize})).f(tls, 8399 *(*uintptr)(unsafe.Pointer(bp + 132)), bp+136, FTS5_TOKENIZE_DOCUMENT, zText, *(*int32)(unsafe.Pointer(bp + 112)), *(*uintptr)(unsafe.Pointer(&struct { 8400 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8401 }{xTokenizeCb2}))) 8402 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 120)).FxDelete})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 132))) 8403 if rc != SQLITE_OK { 8404 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+80, ts+2696, 0)) 8405 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8406 var _objPtr uintptr = pRet 8407 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8408 tcl.XTclFreeObj(tls, _objPtr) 8409 } 8410 } 8411 return TCL_ERROR 8412 } 8413 8414 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 108))) 8415 tcl.XTcl_SetObjResult(tls, interp, pRet) 8416 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 8417 var _objPtr uintptr = pRet 8418 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8419 tcl.XTclFreeObj(tls, _objPtr) 8420 } 8421 } 8422 return TCL_OK 8423 } 8424 8425 type F5tTokenizerContext1 = struct { 8426 FpCtx uintptr 8427 FxToken uintptr 8428 } 8429 8430 type F5tTokenizerContext = F5tTokenizerContext1 8431 type F5tTokenizerModule1 = struct { 8432 Finterp uintptr 8433 FpScript uintptr 8434 FpContext uintptr 8435 } 8436 8437 type F5tTokenizerModule = F5tTokenizerModule1 8438 type F5tTokenizerInstance1 = struct { 8439 Finterp uintptr 8440 FpScript uintptr 8441 FpContext uintptr 8442 } 8443 8444 type F5tTokenizerInstance = F5tTokenizerInstance1 8445 8446 func f5tTokenizerCreate(tls *libc.TLS, pCtx uintptr, azArg uintptr, nArg int32, ppOut uintptr) int32 { 8447 var pMod uintptr = pCtx 8448 var pEval uintptr 8449 var rc int32 = TCL_OK 8450 var i int32 8451 8452 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript) 8453 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8454 for i = 0; rc == TCL_OK && i < nArg; i++ { 8455 var pObj uintptr = tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*4)), -1) 8456 rc = tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, pObj) 8457 } 8458 8459 if rc == TCL_OK { 8460 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, TCL_GLOBAL_ONLY) 8461 } 8462 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8463 var _objPtr uintptr = pEval 8464 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8465 tcl.XTclFreeObj(tls, _objPtr) 8466 } 8467 } 8468 8469 if rc == TCL_OK { 8470 var pInst uintptr 8471 pInst = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerInstance{}))) 8472 libc.Xmemset(tls, pInst, 0, uint32(unsafe.Sizeof(F5tTokenizerInstance{}))) 8473 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp 8474 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript = tcl.XTcl_GetObjResult(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp) 8475 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext 8476 (*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript)).FrefCount++ 8477 *(*uintptr)(unsafe.Pointer(ppOut)) = pInst 8478 } 8479 8480 return rc 8481 } 8482 8483 func f5tTokenizerDelete(tls *libc.TLS, p uintptr) { 8484 var pInst uintptr = p 8485 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8486 var _objPtr uintptr = (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript 8487 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8488 tcl.XTclFreeObj(tls, _objPtr) 8489 } 8490 } 8491 tcl.XTcl_Free(tls, pInst) 8492 } 8493 8494 func f5tTokenizerTokenize(tls *libc.TLS, p uintptr, pCtx uintptr, flags int32, pText uintptr, nText int32, xToken uintptr) int32 { 8495 var pInst uintptr = p 8496 var pOldCtx uintptr 8497 var xOldToken uintptr 8498 var pEval uintptr 8499 var rc int32 8500 var zFlags uintptr 8501 8502 pOldCtx = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx 8503 xOldToken = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken 8504 8505 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pCtx 8506 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xToken 8507 8508 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript) 8509 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8510 switch flags { 8511 case FTS5_TOKENIZE_DOCUMENT: 8512 zFlags = ts + 2727 8513 break 8514 case FTS5_TOKENIZE_AUX: 8515 zFlags = ts + 2736 8516 break 8517 case FTS5_TOKENIZE_QUERY: 8518 zFlags = ts + 2740 8519 break 8520 case FTS5_TOKENIZE_PREFIX | FTS5_TOKENIZE_QUERY: 8521 zFlags = ts + 2746 8522 break 8523 default: 8524 zFlags = ts + 2758 8525 break 8526 } 8527 8528 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zFlags, -1)) 8529 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, pText, nText)) 8530 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, TCL_GLOBAL_ONLY) 8531 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8532 var _objPtr uintptr = pEval 8533 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8534 tcl.XTclFreeObj(tls, _objPtr) 8535 } 8536 } 8537 8538 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pOldCtx 8539 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xOldToken 8540 return rc 8541 } 8542 8543 func f5tTokenizerReturn(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8544 bp := tls.Alloc(32) 8545 defer tls.Free(32) 8546 8547 var p uintptr 8548 8549 var tflags int32 8550 var zToken uintptr 8551 var rc int32 8552 8553 var zArg uintptr 8554 p = clientData 8555 tflags = 0 8556 8557 if !(objc == 5) { 8558 goto __1 8559 } 8560 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16) 8561 if !(*(*int32)(unsafe.Pointer(bp + 16)) <= 10 && *(*int32)(unsafe.Pointer(bp + 16)) >= 2 && libc.Xmemcmp(tls, ts+2766, zArg, uint32(*(*int32)(unsafe.Pointer(bp + 16)))) == 0) { 8562 goto __3 8563 } 8564 tflags = tflags | FTS5_TOKEN_COLOCATED 8565 goto __4 8566 __3: 8567 goto usage 8568 __4: 8569 ; 8570 goto __2 8571 __1: 8572 if !(objc != 4) { 8573 goto __5 8574 } 8575 goto usage 8576 __5: 8577 ; 8578 __2: 8579 ; 8580 zToken = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*4)), bp+20) 8581 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*4)), bp+24) != 0 || 8582 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)), bp+28) != 0) { 8583 goto __6 8584 } 8585 return TCL_ERROR 8586 __6: 8587 ; 8588 if !((*F5tTokenizerContext)(unsafe.Pointer(p)).FxToken == uintptr(0)) { 8589 goto __7 8590 } 8591 tcl.XTcl_AppendResult(tls, interp, 8592 libc.VaList(bp, ts+2777, 0)) 8593 return TCL_ERROR 8594 __7: 8595 ; 8596 rc = (*struct { 8597 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8598 })(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))) 8599 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8600 if rc == SQLITE_OK { 8601 return TCL_OK 8602 } 8603 return TCL_ERROR 8604 8605 usage: 8606 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2835) 8607 return TCL_ERROR 8608 } 8609 8610 func f5tDelTokenizer(tls *libc.TLS, pCtx uintptr) { 8611 var pMod uintptr = pCtx 8612 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8613 var _objPtr uintptr = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript 8614 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8615 tcl.XTclFreeObj(tls, _objPtr) 8616 } 8617 } 8618 tcl.XTcl_Free(tls, pMod) 8619 } 8620 8621 func f5tCreateTokenizer(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 8622 bp := tls.Alloc(36) 8623 defer tls.Free(36) 8624 8625 var pContext uintptr = clientData 8626 8627 var zName uintptr 8628 var pScript uintptr 8629 8630 var pMod uintptr 8631 var rc int32 8632 8633 if objc != 4 { 8634 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8635 return TCL_ERROR 8636 } 8637 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16, bp+20) != 0 { 8638 return TCL_ERROR 8639 } 8640 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 8641 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 8642 8643 (*fts5_tokenizer)(unsafe.Pointer(bp + 24)).FxCreate = *(*uintptr)(unsafe.Pointer(&struct { 8644 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8645 }{f5tTokenizerCreate})) 8646 (*fts5_tokenizer)(unsafe.Pointer(bp + 24)).FxTokenize = *(*uintptr)(unsafe.Pointer(&struct { 8647 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8648 }{f5tTokenizerTokenize})) 8649 (*fts5_tokenizer)(unsafe.Pointer(bp + 24)).FxDelete = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tTokenizerDelete})) 8650 8651 pMod = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerModule{}))) 8652 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp = interp 8653 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript = pScript 8654 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext = pContext 8655 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8656 rc = (*struct { 8657 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr, uintptr) int32 8658 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 20)))).FxCreateTokenizer})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), zName, pMod, bp+24, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tDelTokenizer}))) 8659 if rc != SQLITE_OK { 8660 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2863, 0)) 8661 return TCL_ERROR 8662 } 8663 8664 return TCL_OK 8665 } 8666 8667 func xF5tFree(tls *libc.TLS, clientData ClientData) { 8668 tcl.XTcl_Free(tls, clientData) 8669 } 8670 8671 func f5tMayBeCorrupt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8672 return TCL_OK 8673 } 8674 8675 func f5t_fts5HashKey(tls *libc.TLS, nSlot int32, p uintptr, n int32) uint32 { 8676 var i int32 8677 var h uint32 = uint32(13) 8678 for i = n - 1; i >= 0; i-- { 8679 h = h<<3 ^ h ^ uint32(*(*int8)(unsafe.Pointer(p + uintptr(i)))) 8680 } 8681 return h % uint32(nSlot) 8682 } 8683 8684 func f5tTokenHash(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8685 bp := tls.Alloc(8) 8686 defer tls.Free(8) 8687 8688 var z uintptr 8689 8690 var iVal uint32 8691 8692 if objc != 3 { 8693 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2900) 8694 return TCL_ERROR 8695 } 8696 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 8697 return TCL_ERROR 8698 } 8699 z = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) 8700 8701 iVal = f5t_fts5HashKey(tls, *(*int32)(unsafe.Pointer(bp)), z, *(*int32)(unsafe.Pointer(bp + 4))) 8702 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(iVal))) 8703 return TCL_OK 8704 } 8705 8706 func f5tRegisterMatchinfo(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8707 bp := tls.Alloc(4) 8708 defer tls.Free(4) 8709 8710 var rc int32 8711 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8712 8713 if objc != 2 { 8714 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8715 return TCL_ERROR 8716 } 8717 if f5tDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 8718 return TCL_ERROR 8719 } 8720 8721 rc = sqlite3Fts5TestRegisterMatchinfo(tls, *(*uintptr)(unsafe.Pointer(bp))) 8722 if rc != SQLITE_OK { 8723 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8724 return TCL_ERROR 8725 } 8726 return TCL_OK 8727 } 8728 8729 func f5tRegisterTok(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8730 bp := tls.Alloc(8) 8731 defer tls.Free(8) 8732 8733 var rc int32 8734 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8735 *(*uintptr)(unsafe.Pointer(bp + 4)) = uintptr(0) 8736 8737 if objc != 2 { 8738 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8739 return TCL_ERROR 8740 } 8741 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp, bp+4) != 0 { 8742 return TCL_ERROR 8743 } 8744 8745 rc = sqlite3Fts5TestRegisterTok(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 4))) 8746 if rc != SQLITE_OK { 8747 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8748 return TCL_ERROR 8749 } 8750 return TCL_OK 8751 } 8752 8753 func Fts5tcl_Init(tls *libc.TLS, interp uintptr) int32 { 8754 var i int32 8755 var pContext uintptr 8756 8757 pContext = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerContext{}))) 8758 libc.Xmemset(tls, pContext, 0, uint32(unsafe.Sizeof(F5tTokenizerContext{}))) 8759 8760 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd))/uint32(unsafe.Sizeof(struct { 8761 FzName uintptr 8762 FxProc uintptr 8763 FbTokenizeCtx int32 8764 }{})); i++ { 8765 var p uintptr = uintptr(unsafe.Pointer(&aCmd)) + uintptr(i)*12 8766 var pCtx uintptr = uintptr(0) 8767 if (*struct { 8768 FzName uintptr 8769 FxProc uintptr 8770 FbTokenizeCtx int32 8771 })(unsafe.Pointer(p)).FbTokenizeCtx != 0 { 8772 pCtx = pContext 8773 } 8774 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 8775 FzName uintptr 8776 FxProc uintptr 8777 FbTokenizeCtx int32 8778 })(unsafe.Pointer(p)).FzName, (*struct { 8779 FzName uintptr 8780 FxProc uintptr 8781 FbTokenizeCtx int32 8782 })(unsafe.Pointer(p)).FxProc, pCtx, func() uintptr { 8783 if i != 0 { 8784 return uintptr(0) 8785 } 8786 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{xF5tFree})) 8787 }()) 8788 } 8789 8790 return TCL_OK 8791 } 8792 8793 var aCmd = [8]struct { 8794 FzName uintptr 8795 FxProc uintptr 8796 FbTokenizeCtx int32 8797 }{ 8798 {FzName: ts + 2912, FxProc: 0, FbTokenizeCtx: 1}, 8799 {FzName: ts + 2942, FxProc: 0, FbTokenizeCtx: 1}, 8800 {FzName: ts + 2961, FxProc: 0}, 8801 {FzName: ts + 2983, FxProc: 0}, 8802 {FzName: ts + 3012, FxProc: 0}, 8803 {FzName: ts + 3040, FxProc: 0}, 8804 {FzName: ts + 3064, FxProc: 0}, 8805 {FzName: ts + 3096, FxProc: 0}, 8806 } 8807 8808 type Fts5MatchinfoCtx1 = struct { 8809 FnCol int32 8810 FnPhrase int32 8811 FzArg uintptr 8812 FnRet int32 8813 FaRet uintptr 8814 } 8815 8816 type Fts5MatchinfoCtx = Fts5MatchinfoCtx1 8817 8818 type u32 = uint32 8819 8820 func fts5_api_from_db(tls *libc.TLS, db uintptr, ppApi uintptr) int32 { 8821 bp := tls.Alloc(4) 8822 defer tls.Free(4) 8823 8824 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8825 var rc int32 8826 8827 *(*uintptr)(unsafe.Pointer(ppApi)) = uintptr(0) 8828 rc = sqlite3.Xsqlite3_prepare(tls, db, ts+2137, -1, bp, uintptr(0)) 8829 if rc == SQLITE_OK { 8830 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, ppApi, ts+2161, uintptr(0)) 8831 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) 8832 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 8833 } 8834 8835 return rc 8836 } 8837 8838 func fts5MatchinfoFlagsize(tls *libc.TLS, nCol int32, nPhrase int32, f int8) int32 { 8839 var ret int32 = -1 8840 switch int32(f) { 8841 case 'p': 8842 ret = 1 8843 break 8844 case 'c': 8845 ret = 1 8846 break 8847 case 'x': 8848 ret = 3 * nCol * nPhrase 8849 break 8850 case 'y': 8851 ret = nCol * nPhrase 8852 break 8853 case 'b': 8854 ret = (nCol + 31) / 32 * nPhrase 8855 break 8856 case 'n': 8857 ret = 1 8858 break 8859 case 'a': 8860 ret = nCol 8861 break 8862 case 'l': 8863 ret = nCol 8864 break 8865 case 's': 8866 ret = nCol 8867 break 8868 } 8869 return ret 8870 } 8871 8872 func fts5MatchinfoIter(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, x uintptr) int32 { 8873 var i int32 8874 var n int32 = 0 8875 var rc int32 = SQLITE_OK 8876 var f int8 8877 for i = 0; libc.AssignInt8(&f, *(*int8)(unsafe.Pointer((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg + uintptr(i)))) != 0; i++ { 8878 rc = (*struct { 8879 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 8880 })(unsafe.Pointer(&struct{ uintptr }{x})).f(tls, pApi, pFts, p, f, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet+uintptr(n)*4) 8881 if rc != SQLITE_OK { 8882 break 8883 } 8884 n = n + fts5MatchinfoFlagsize(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase, f) 8885 } 8886 return rc 8887 } 8888 8889 func fts5MatchinfoXCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pUserData uintptr) int32 { 8890 bp := tls.Alloc(16) 8891 defer tls.Free(16) 8892 8893 var aOut uintptr = pUserData 8894 var iPrev int32 = -1 8895 8896 for (*struct { 8897 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8898 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirst})).f(tls, pFts, 0, bp, bp+8, bp+12); *(*int32)(unsafe.Pointer(bp + 8)) >= 0; (*struct { 8899 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8900 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp, bp+8, bp+12) { 8901 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 8))*3+1)*4))++ 8902 if *(*int32)(unsafe.Pointer(bp + 8)) != iPrev { 8903 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 8))*3+2)*4))++ 8904 } 8905 iPrev = *(*int32)(unsafe.Pointer(bp + 8)) 8906 } 8907 8908 return SQLITE_OK 8909 } 8910 8911 func fts5MatchinfoGlobalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 8912 bp := tls.Alloc(24) 8913 defer tls.Free(24) 8914 8915 var rc int32 = SQLITE_OK 8916 switch int32(f) { 8917 case 'p': 8918 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase) 8919 break 8920 8921 case 'c': 8922 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol) 8923 break 8924 8925 case 'x': 8926 { 8927 var i int32 8928 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase && rc == SQLITE_OK; i++ { 8929 var pPtr uintptr = aOut + uintptr(i*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*3)*4 8930 rc = (*struct { 8931 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8932 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxQueryPhrase})).f(tls, pFts, i, pPtr, *(*uintptr)(unsafe.Pointer(&struct { 8933 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8934 }{fts5MatchinfoXCb}))) 8935 } 8936 break 8937 8938 } 8939 8940 case 'n': 8941 { 8942 rc = (*struct { 8943 f func(*libc.TLS, uintptr, uintptr) int32 8944 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp) 8945 *(*u32)(unsafe.Pointer(aOut)) = u32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 8946 break 8947 8948 } 8949 8950 case 'a': 8951 { 8952 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = int64(0) 8953 rc = (*struct { 8954 f func(*libc.TLS, uintptr, uintptr) int32 8955 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp+8) 8956 if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 8957 libc.Xmemset(tls, aOut, 0, uint32(unsafe.Sizeof(u32(0)))*uint32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 8958 } else { 8959 var i int32 8960 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 8961 rc = (*struct { 8962 f func(*libc.TLS, uintptr, int32, uintptr) int32 8963 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnTotalSize})).f(tls, pFts, i, bp+16) 8964 if rc == SQLITE_OK { 8965 *(*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)))) 8966 } 8967 } 8968 } 8969 break 8970 8971 } 8972 8973 } 8974 return rc 8975 } 8976 8977 func fts5MatchinfoLocalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 8978 bp := tls.Alloc(60) 8979 defer tls.Free(60) 8980 8981 var i int32 8982 var rc int32 = SQLITE_OK 8983 8984 switch int32(f) { 8985 case 'b': 8986 { 8987 var iPhrase int32 8988 var nInt int32 = ((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol + 31) / 32 * (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase 8989 for i = 0; i < nInt; i++ { 8990 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(0) 8991 } 8992 8993 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 8994 for (*struct { 8995 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8996 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirstColumn})).f(tls, pFts, iPhrase, bp, bp+8); *(*int32)(unsafe.Pointer(bp + 8)) >= 0; (*struct { 8997 f func(*libc.TLS, uintptr, uintptr, uintptr) 8998 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNextColumn})).f(tls, pFts, bp, bp+8) { 8999 *(*u32)(unsafe.Pointer(aOut + uintptr(iPhrase*(((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol+31)/32)+*(*int32)(unsafe.Pointer(bp + 8))/32)*4)) |= u32(1) << (*(*int32)(unsafe.Pointer(bp + 8)) % 32) 9000 } 9001 } 9002 9003 break 9004 9005 } 9006 9007 case 'x': 9008 fallthrough 9009 case 'y': 9010 { 9011 var nMul int32 = func() int32 { 9012 if int32(f) == 'x' { 9013 return 3 9014 } 9015 return 1 9016 }() 9017 var iPhrase int32 9018 9019 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; i++ { 9020 *(*u32)(unsafe.Pointer(aOut + uintptr(i*nMul)*4)) = u32(0) 9021 } 9022 9023 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 9024 for (*struct { 9025 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9026 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirst})).f(tls, pFts, iPhrase, bp+12, bp+20, bp+24); *(*int32)(unsafe.Pointer(bp + 24)) >= 0; (*struct { 9027 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 9028 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp+12, bp+20, bp+24) { 9029 *(*u32)(unsafe.Pointer(aOut + uintptr(nMul*(*(*int32)(unsafe.Pointer(bp + 20))+iPhrase*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol))*4))++ 9030 } 9031 } 9032 9033 break 9034 9035 } 9036 9037 case 'l': 9038 { 9039 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 9040 rc = (*struct { 9041 f func(*libc.TLS, uintptr, int32, uintptr) int32 9042 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnSize})).f(tls, pFts, i, bp+28) 9043 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 28))) 9044 } 9045 break 9046 9047 } 9048 9049 case 's': 9050 { 9051 libc.Xmemset(tls, aOut, 0, uint32(unsafe.Sizeof(u32(0)))*uint32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 9052 9053 rc = (*struct { 9054 f func(*libc.TLS, uintptr, uintptr) int32 9055 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInstCount})).f(tls, pFts, bp+32) 9056 for i = 0; rc == SQLITE_OK && i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 9057 *(*int32)(unsafe.Pointer(bp + 40)) = 0 9058 var iNextPhrase int32 9059 var iNextOff int32 9060 var nSeq u32 = u32(1) 9061 var j int32 9062 9063 rc = (*struct { 9064 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9065 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, i, bp+36, bp+40, bp+44) 9066 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 36)) + 1 9067 iNextOff = *(*int32)(unsafe.Pointer(bp + 44)) + (*struct { 9068 f func(*libc.TLS, uintptr, int32) int32 9069 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, 0) 9070 for j = i + 1; rc == SQLITE_OK && j < *(*int32)(unsafe.Pointer(bp + 32)); j++ { 9071 rc = (*struct { 9072 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9073 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, j, bp+48, bp+52, bp+56) 9074 if *(*int32)(unsafe.Pointer(bp + 52)) != *(*int32)(unsafe.Pointer(bp + 40)) || *(*int32)(unsafe.Pointer(bp + 56)) > iNextOff { 9075 break 9076 } 9077 if *(*int32)(unsafe.Pointer(bp + 48)) == iNextPhrase && *(*int32)(unsafe.Pointer(bp + 56)) == iNextOff { 9078 nSeq++ 9079 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 48)) + 1 9080 iNextOff = *(*int32)(unsafe.Pointer(bp + 56)) + (*struct { 9081 f func(*libc.TLS, uintptr, int32) int32 9082 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, *(*int32)(unsafe.Pointer(bp + 48))) 9083 } 9084 } 9085 9086 if nSeq > *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 40)))*4)) { 9087 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 40)))*4)) = nSeq 9088 } 9089 } 9090 9091 break 9092 9093 } 9094 } 9095 return rc 9096 } 9097 9098 func fts5MatchinfoNew(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, zArg uintptr) uintptr { 9099 bp := tls.Alloc(8) 9100 defer tls.Free(8) 9101 9102 var p uintptr 9103 var nCol int32 9104 var nPhrase int32 9105 var i int32 9106 var nInt int32 9107 var nByte sqlite3_int64 9108 var rc int32 9109 9110 nCol = (*struct { 9111 f func(*libc.TLS, uintptr) int32 9112 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnCount})).f(tls, pFts) 9113 nPhrase = (*struct { 9114 f func(*libc.TLS, uintptr) int32 9115 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseCount})).f(tls, pFts) 9116 9117 nInt = 0 9118 for i = 0; *(*int8)(unsafe.Pointer(zArg + uintptr(i))) != 0; i++ { 9119 var n int32 = fts5MatchinfoFlagsize(tls, nCol, nPhrase, *(*int8)(unsafe.Pointer(zArg + uintptr(i)))) 9120 if n < 0 { 9121 var zErr uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+3131, libc.VaList(bp, int32(*(*int8)(unsafe.Pointer(zArg + uintptr(i)))))) 9122 sqlite3.Xsqlite3_result_error(tls, pCtx, zErr, -1) 9123 sqlite3.Xsqlite3_free(tls, zErr) 9124 return uintptr(0) 9125 } 9126 nInt = nInt + n 9127 } 9128 9129 nByte = sqlite3_int64(uint32(unsafe.Sizeof(Fts5MatchinfoCtx{})) + 9130 uint32(unsafe.Sizeof(u32(0)))*uint32(nInt) + 9131 uint32(i+1)) 9132 p = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 9133 if p == uintptr(0) { 9134 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 9135 return uintptr(0) 9136 } 9137 libc.Xmemset(tls, p, 0, uint32(nByte)) 9138 9139 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol = nCol 9140 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase = nPhrase 9141 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet = p + 1*20 9142 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet = nInt 9143 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg = (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet + uintptr(nInt)*4 9144 libc.Xmemcpy(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg, zArg, uint32(i)) 9145 9146 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 9147 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 9148 }{fts5MatchinfoGlobalCb}))) 9149 if rc != SQLITE_OK { 9150 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 9151 sqlite3.Xsqlite3_free(tls, p) 9152 p = uintptr(0) 9153 } 9154 9155 return p 9156 } 9157 9158 func fts5MatchinfoFunc(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 9159 var zArg uintptr 9160 var p uintptr 9161 var rc int32 = SQLITE_OK 9162 9163 if nVal > 0 { 9164 zArg = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9165 } else { 9166 zArg = ts + 3163 9167 } 9168 9169 p = (*struct { 9170 f func(*libc.TLS, uintptr, int32) uintptr 9171 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxGetAuxdata})).f(tls, pFts, 0) 9172 if p == uintptr(0) || sqlite3.Xsqlite3_stricmp(tls, zArg, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg) != 0 { 9173 p = fts5MatchinfoNew(tls, pApi, pFts, pCtx, zArg) 9174 if p == uintptr(0) { 9175 rc = SQLITE_NOMEM 9176 } else { 9177 rc = (*struct { 9178 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 9179 })(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}))) 9180 } 9181 } 9182 9183 if rc == SQLITE_OK { 9184 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 9185 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 9186 }{fts5MatchinfoLocalCb}))) 9187 } 9188 if rc != SQLITE_OK { 9189 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 9190 } else { 9191 var nByte int32 = int32(uint32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet) * uint32(unsafe.Sizeof(u32(0)))) 9192 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet, nByte, libc.UintptrFromInt32(-1)) 9193 } 9194 } 9195 9196 func sqlite3Fts5TestRegisterMatchinfo(tls *libc.TLS, db uintptr) int32 { 9197 bp := tls.Alloc(4) 9198 defer tls.Free(4) 9199 9200 var rc int32 9201 9202 rc = fts5_api_from_db(tls, db, bp) 9203 if rc != SQLITE_OK { 9204 return rc 9205 } 9206 9207 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) || (*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FiVersion < 2 { 9208 return SQLITE_ERROR 9209 } 9210 9211 rc = (*struct { 9212 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 9213 })(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 { 9214 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 9215 }{fts5MatchinfoFunc})), uintptr(0)) 9216 9217 return rc 9218 } 9219 9220 type Fts5tokTable1 = struct { 9221 Fbase sqlite3_vtab 9222 Ftok fts5_tokenizer 9223 FpTok uintptr 9224 } 9225 9226 type Fts5tokTable = Fts5tokTable1 9227 type Fts5tokCursor1 = struct { 9228 Fbase sqlite3_vtab_cursor 9229 FiRowid int32 9230 FzInput uintptr 9231 FnRow int32 9232 FaRow uintptr 9233 } 9234 9235 type Fts5tokCursor = Fts5tokCursor1 9236 type Fts5tokRow1 = struct { 9237 FzToken uintptr 9238 FiStart int32 9239 FiEnd int32 9240 FiPos int32 9241 } 9242 9243 type Fts5tokRow = Fts5tokRow1 9244 9245 func fts5tokDequote(tls *libc.TLS, z uintptr) { 9246 var q int8 = *(*int8)(unsafe.Pointer(z)) 9247 9248 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 9249 var iIn int32 = 1 9250 var iOut int32 = 0 9251 if int32(q) == '[' { 9252 q = int8(']') 9253 } 9254 9255 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 9256 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 9257 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 9258 iIn++ 9259 break 9260 } else { 9261 iIn = iIn + 2 9262 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 9263 } 9264 } else { 9265 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 9266 } 9267 } 9268 9269 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 9270 } 9271 } 9272 9273 func fts5tokDequoteArray(tls *libc.TLS, argc int32, argv uintptr, pazDequote uintptr) int32 { 9274 var rc int32 = SQLITE_OK 9275 if argc == 0 { 9276 *(*uintptr)(unsafe.Pointer(pazDequote)) = uintptr(0) 9277 } else { 9278 var i int32 9279 var nByte int32 = 0 9280 var azDequote uintptr 9281 9282 for i = 0; i < argc; i++ { 9283 nByte = nByte + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)))+size_t(1)) 9284 } 9285 9286 *(*uintptr)(unsafe.Pointer(pazDequote)) = libc.AssignUintptr(&azDequote, sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(uintptr(0)))*uint32(argc)+uint32(nByte)))) 9287 if azDequote == uintptr(0) { 9288 rc = SQLITE_NOMEM 9289 } else { 9290 var pSpace uintptr = azDequote + uintptr(argc)*4 9291 for i = 0; i < argc; i++ { 9292 var n int32 = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)))) 9293 *(*uintptr)(unsafe.Pointer(azDequote + uintptr(i)*4)) = pSpace 9294 libc.Xmemcpy(tls, pSpace, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), uint32(n+1)) 9295 fts5tokDequote(tls, pSpace) 9296 pSpace += uintptr(n + 1) 9297 } 9298 } 9299 } 9300 9301 return rc 9302 } 9303 9304 func fts5tokConnectMethod(tls *libc.TLS, db uintptr, pCtx uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 9305 bp := tls.Alloc(8) 9306 defer tls.Free(8) 9307 9308 var pApi uintptr = pCtx 9309 var pTab uintptr = uintptr(0) 9310 var rc int32 9311 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9312 var nDequote int32 = 0 9313 9314 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 9315 ts+3177) 9316 9317 if rc == SQLITE_OK { 9318 nDequote = argc - 3 9319 rc = fts5tokDequoteArray(tls, nDequote, argv+3*4, bp) 9320 } 9321 9322 if rc == SQLITE_OK { 9323 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokTable{}))) 9324 if pTab == uintptr(0) { 9325 rc = SQLITE_NOMEM 9326 } else { 9327 libc.Xmemset(tls, pTab, 0, uint32(unsafe.Sizeof(Fts5tokTable{}))) 9328 } 9329 } 9330 9331 if rc == SQLITE_OK { 9332 *(*uintptr)(unsafe.Pointer(bp + 4)) = uintptr(0) 9333 var zModule uintptr = uintptr(0) 9334 if nDequote > 0 { 9335 zModule = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) 9336 } 9337 9338 rc = (*struct { 9339 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 9340 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(pApi)).FxFindTokenizer})).f(tls, pApi, zModule, bp+4, pTab+12) 9341 if rc == SQLITE_OK { 9342 var azArg uintptr = func() uintptr { 9343 if nDequote > 1 { 9344 return *(*uintptr)(unsafe.Pointer(bp)) + 1*4 9345 } 9346 return uintptr(0) 9347 }() 9348 var nArg int32 9349 if nDequote > 0 { 9350 nArg = nDequote - 1 9351 } else { 9352 nArg = 0 9353 } 9354 rc = (*struct { 9355 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9356 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 4)), azArg, nArg, pTab+24) 9357 } 9358 } 9359 9360 if rc != SQLITE_OK { 9361 sqlite3.Xsqlite3_free(tls, pTab) 9362 pTab = uintptr(0) 9363 } 9364 9365 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 9366 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 9367 return rc 9368 } 9369 9370 func fts5tokDisconnectMethod(tls *libc.TLS, pVtab uintptr) int32 { 9371 var pTab uintptr = pVtab 9372 if (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok != 0 { 9373 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxDelete})).f(tls, (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok) 9374 } 9375 sqlite3.Xsqlite3_free(tls, pTab) 9376 return SQLITE_OK 9377 } 9378 9379 func fts5tokBestIndexMethod(tls *libc.TLS, pVTab uintptr, pInfo uintptr) int32 { 9380 var i int32 9381 9382 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FnConstraint; i++ { 9383 if (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 && 9384 (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).FiColumn == 0 && 9385 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 9386 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 1 9387 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 9388 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 9389 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FestimatedCost = float64(1) 9390 return SQLITE_OK 9391 } 9392 } 9393 9394 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 0 9395 9396 return SQLITE_OK 9397 } 9398 9399 func fts5tokOpenMethod(tls *libc.TLS, pVTab uintptr, ppCsr uintptr) int32 { 9400 var pCsr uintptr 9401 9402 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokCursor{}))) 9403 if pCsr == uintptr(0) { 9404 return SQLITE_NOMEM 9405 } 9406 libc.Xmemset(tls, pCsr, 0, uint32(unsafe.Sizeof(Fts5tokCursor{}))) 9407 9408 *(*uintptr)(unsafe.Pointer(ppCsr)) = pCsr 9409 return SQLITE_OK 9410 } 9411 9412 func fts5tokResetCursor(tls *libc.TLS, pCsr uintptr) { 9413 var i int32 9414 for i = 0; i < (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow; i++ { 9415 sqlite3.Xsqlite3_free(tls, (*Fts5tokRow)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow+uintptr(i)*16)).FzToken) 9416 } 9417 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput) 9418 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow) 9419 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = uintptr(0) 9420 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = uintptr(0) 9421 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow = 0 9422 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid = 0 9423 } 9424 9425 func fts5tokCloseMethod(tls *libc.TLS, pCursor uintptr) int32 { 9426 var pCsr uintptr = pCursor 9427 fts5tokResetCursor(tls, pCsr) 9428 sqlite3.Xsqlite3_free(tls, pCsr) 9429 return SQLITE_OK 9430 } 9431 9432 func fts5tokNextMethod(tls *libc.TLS, pCursor uintptr) int32 { 9433 var pCsr uintptr = pCursor 9434 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid++ 9435 return SQLITE_OK 9436 } 9437 9438 func fts5tokCb(tls *libc.TLS, pCtx uintptr, tflags int32, pToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 9439 var pCsr uintptr = pCtx 9440 var pRow uintptr 9441 9442 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow&((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow-1) == 0 { 9443 var nNew int32 9444 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9445 nNew = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow * 2 9446 } else { 9447 nNew = 32 9448 } 9449 var aNew uintptr 9450 aNew = sqlite3.Xsqlite3_realloc64(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow, uint64(uint32(nNew)*uint32(unsafe.Sizeof(Fts5tokRow{})))) 9451 if aNew == uintptr(0) { 9452 return SQLITE_NOMEM 9453 } 9454 libc.Xmemset(tls, aNew+uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*16, 0, uint32(unsafe.Sizeof(Fts5tokRow{}))*uint32(nNew-(*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)) 9455 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = aNew 9456 } 9457 9458 pRow = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*16 9459 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart = iStart 9460 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd = iEnd 9461 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9462 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos = (*Fts5tokRow)(unsafe.Pointer(pRow+libc.UintptrFromInt32(-1)*16)).FiPos + func() int32 { 9463 if tflags&FTS5_TOKEN_COLOCATED != 0 { 9464 return 0 9465 } 9466 return 1 9467 }() 9468 } 9469 (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken = sqlite3.Xsqlite3_malloc(tls, nToken+1) 9470 if (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken == uintptr(0) { 9471 return SQLITE_NOMEM 9472 } 9473 libc.Xmemcpy(tls, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, pToken, uint32(nToken)) 9474 *(*int8)(unsafe.Pointer((*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken + uintptr(nToken))) = int8(0) 9475 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow++ 9476 9477 return SQLITE_OK 9478 } 9479 9480 func fts5tokFilterMethod(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, nVal int32, apVal uintptr) int32 { 9481 var rc int32 = SQLITE_ERROR 9482 var pCsr uintptr = pCursor 9483 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 9484 9485 fts5tokResetCursor(tls, pCsr) 9486 if idxNum == 1 { 9487 var zByte uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9488 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9489 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = sqlite3.Xsqlite3_malloc(tls, nByte+1) 9490 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput == uintptr(0) { 9491 rc = SQLITE_NOMEM 9492 } else { 9493 if nByte > 0 { 9494 libc.Xmemcpy(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, zByte, uint32(nByte)) 9495 } 9496 *(*int8)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput + uintptr(nByte))) = int8(0) 9497 rc = (*struct { 9498 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 9499 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxTokenize})).f(tls, 9500 (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok, pCsr, 0, zByte, nByte, *(*uintptr)(unsafe.Pointer(&struct { 9501 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 9502 }{fts5tokCb}))) 9503 } 9504 } 9505 9506 if rc != SQLITE_OK { 9507 return rc 9508 } 9509 return fts5tokNextMethod(tls, pCursor) 9510 } 9511 9512 func fts5tokEofMethod(tls *libc.TLS, pCursor uintptr) int32 { 9513 var pCsr uintptr = pCursor 9514 return libc.Bool32((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid > (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow) 9515 } 9516 9517 func fts5tokColumnMethod(tls *libc.TLS, pCursor uintptr, pCtx uintptr, iCol int32) int32 { 9518 var pCsr uintptr = pCursor 9519 var pRow uintptr = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid-1)*16 9520 9521 switch iCol { 9522 case 0: 9523 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, -1, libc.UintptrFromInt32(-1)) 9524 break 9525 case 1: 9526 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, -1, libc.UintptrFromInt32(-1)) 9527 break 9528 case 2: 9529 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart) 9530 break 9531 case 3: 9532 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd) 9533 break 9534 default: 9535 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos) 9536 break 9537 } 9538 return SQLITE_OK 9539 } 9540 9541 func fts5tokRowidMethod(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 9542 var pCsr uintptr = pCursor 9543 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3_int64((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid) 9544 return SQLITE_OK 9545 } 9546 9547 func sqlite3Fts5TestRegisterTok(tls *libc.TLS, db uintptr, pApi uintptr) int32 { 9548 var rc int32 9549 9550 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3235, uintptr(unsafe.Pointer(&fts5tok_module)), pApi) 9551 return rc 9552 } 9553 9554 var fts5tok_module = sqlite3_module{ 9555 FxCreate: 0, 9556 FxConnect: 0, 9557 FxBestIndex: 0, 9558 FxDisconnect: 0, 9559 FxDestroy: 0, 9560 FxOpen: 0, 9561 FxClose: 0, 9562 FxFilter: 0, 9563 FxNext: 0, 9564 FxEof: 0, 9565 FxColumn: 0, 9566 FxRowid: 0, 9567 } 9568 9569 type sqlite3_api_routines = sqlite3_api_routines1 9570 9571 type sqlite3_loadext_entry = uintptr 9572 9573 type ApndVfs = sqlite3_vfs1 9574 type ApndFile1 = struct { 9575 Fbase sqlite3_file 9576 FiPgOne sqlite3_int64 9577 FiMark sqlite3_int64 9578 } 9579 9580 type ApndFile = ApndFile1 9581 9582 var apnd_vfs = sqlite3_vfs{ 9583 FiVersion: 3, 9584 FmxPathname: 1024, 9585 FzName: ts + 3248, 9586 FxOpen: 0, 9587 FxDelete: 0, 9588 FxAccess: 0, 9589 FxFullPathname: 0, 9590 FxDlOpen: 0, 9591 FxDlError: 0, 9592 FxDlSym: 0, 9593 FxDlClose: 0, 9594 FxRandomness: 0, 9595 FxSleep: 0, 9596 FxCurrentTime: 0, 9597 FxGetLastError: 0, 9598 FxCurrentTimeInt64: 0, 9599 FxSetSystemCall: 0, 9600 FxGetSystemCall: 0, 9601 FxNextSystemCall: 0, 9602 } 9603 9604 var apnd_io_methods = sqlite3_io_methods{ 9605 FiVersion: 3, 9606 FxClose: 0, 9607 FxRead: 0, 9608 FxWrite: 0, 9609 FxTruncate: 0, 9610 FxSync: 0, 9611 FxFileSize: 0, 9612 FxLock: 0, 9613 FxUnlock: 0, 9614 FxCheckReservedLock: 0, 9615 FxFileControl: 0, 9616 FxSectorSize: 0, 9617 FxDeviceCharacteristics: 0, 9618 FxShmMap: 0, 9619 FxShmLock: 0, 9620 FxShmBarrier: 0, 9621 FxShmUnmap: 0, 9622 FxFetch: 0, 9623 FxUnfetch: 0, 9624 } 9625 9626 func apndClose(tls *libc.TLS, pFile uintptr) int32 { 9627 pFile = pFile + uintptr(1)*20 9628 return (*struct { 9629 f func(*libc.TLS, uintptr) int32 9630 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 9631 } 9632 9633 func apndRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9634 var paf uintptr = pFile 9635 pFile = pFile + uintptr(1)*20 9636 return (*struct { 9637 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9638 })(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) 9639 } 9640 9641 func apndWriteMark(tls *libc.TLS, paf uintptr, pFile uintptr, iWriteEnd sqlite_int64) int32 { 9642 bp := tls.Alloc(25) 9643 defer tls.Free(25) 9644 9645 var iPgOne sqlite_int64 = (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9646 9647 var i int32 = APND_MARK_FOS_SZ 9648 var rc int32 9649 9650 libc.Xmemcpy(tls, bp, ts+3256, uint32(APND_MARK_PREFIX_SZ)) 9651 for libc.PreDecInt32(&i, 1) >= 0 { 9652 *(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))) = uint8(iPgOne & int64(0xff)) 9653 iPgOne >>= 8 9654 } 9655 iWriteEnd = iWriteEnd + (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9656 if SQLITE_OK == libc.AssignInt32(&rc, (*struct { 9657 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9658 })(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)) { 9659 (*ApndFile)(unsafe.Pointer(paf)).FiMark = iWriteEnd 9660 } 9661 return rc 9662 } 9663 9664 func apndWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9665 var paf uintptr = pFile 9666 var iWriteEnd sqlite_int64 = iOfst + sqlite_int64(iAmt) 9667 if iWriteEnd >= int64(0x40000000) { 9668 return SQLITE_FULL 9669 } 9670 pFile = pFile + uintptr(1)*20 9671 9672 if (*ApndFile)(unsafe.Pointer(paf)).FiMark < int64(0) || (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iWriteEnd > (*ApndFile)(unsafe.Pointer(paf)).FiMark { 9673 var rc int32 = apndWriteMark(tls, paf, pFile, iWriteEnd) 9674 if SQLITE_OK != rc { 9675 return rc 9676 } 9677 } 9678 return (*struct { 9679 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9680 })(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) 9681 } 9682 9683 func apndTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 9684 var paf uintptr = pFile 9685 pFile = pFile + uintptr(1)*20 9686 9687 if SQLITE_OK != apndWriteMark(tls, paf, pFile, size) { 9688 return SQLITE_IOERR 9689 } 9690 9691 return (*struct { 9692 f func(*libc.TLS, uintptr, sqlite3_int64) int32 9693 })(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)) 9694 } 9695 9696 func apndSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 9697 pFile = pFile + uintptr(1)*20 9698 return (*struct { 9699 f func(*libc.TLS, uintptr, int32) int32 9700 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 9701 } 9702 9703 func apndFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 9704 var paf uintptr = pFile 9705 *(*sqlite_int64)(unsafe.Pointer(pSize)) = func() int64 { 9706 if (*ApndFile)(unsafe.Pointer(paf)).FiMark >= int64(0) { 9707 return (*ApndFile)(unsafe.Pointer(paf)).FiMark - (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9708 } 9709 return int64(0) 9710 }() 9711 return SQLITE_OK 9712 } 9713 9714 func apndLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9715 pFile = pFile + uintptr(1)*20 9716 return (*struct { 9717 f func(*libc.TLS, uintptr, int32) int32 9718 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 9719 } 9720 9721 func apndUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9722 pFile = pFile + uintptr(1)*20 9723 return (*struct { 9724 f func(*libc.TLS, uintptr, int32) int32 9725 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 9726 } 9727 9728 func apndCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 9729 pFile = pFile + uintptr(1)*20 9730 return (*struct { 9731 f func(*libc.TLS, uintptr, uintptr) int32 9732 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 9733 } 9734 9735 func apndFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 9736 bp := tls.Alloc(16) 9737 defer tls.Free(16) 9738 9739 var paf uintptr = pFile 9740 var rc int32 9741 pFile = pFile + uintptr(1)*20 9742 if op == SQLITE_FCNTL_SIZE_HINT { 9743 *(*sqlite3_int64)(unsafe.Pointer(pArg)) += (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9744 } 9745 rc = (*struct { 9746 f func(*libc.TLS, uintptr, int32, uintptr) int32 9747 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 9748 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 9749 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+3274, libc.VaList(bp, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne, *(*uintptr)(unsafe.Pointer(pArg)))) 9750 } 9751 return rc 9752 } 9753 9754 func apndSectorSize(tls *libc.TLS, pFile uintptr) int32 { 9755 pFile = pFile + uintptr(1)*20 9756 return (*struct { 9757 f func(*libc.TLS, uintptr) int32 9758 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 9759 } 9760 9761 func apndDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 9762 pFile = pFile + uintptr(1)*20 9763 return (*struct { 9764 f func(*libc.TLS, uintptr) int32 9765 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 9766 } 9767 9768 func apndShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 9769 pFile = pFile + uintptr(1)*20 9770 return (*struct { 9771 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 9772 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 9773 } 9774 9775 func apndShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 9776 pFile = pFile + uintptr(1)*20 9777 return (*struct { 9778 f func(*libc.TLS, uintptr, int32, int32, int32) int32 9779 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 9780 } 9781 9782 func apndShmBarrier(tls *libc.TLS, pFile uintptr) { 9783 pFile = pFile + uintptr(1)*20 9784 (*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) 9785 } 9786 9787 func apndShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 9788 pFile = pFile + uintptr(1)*20 9789 return (*struct { 9790 f func(*libc.TLS, uintptr, int32) int32 9791 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 9792 } 9793 9794 func apndFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 9795 var p uintptr = pFile 9796 if (*ApndFile)(unsafe.Pointer(p)).FiMark < int64(0) || iOfst+sqlite3_int64(iAmt) > (*ApndFile)(unsafe.Pointer(p)).FiMark { 9797 return SQLITE_IOERR 9798 } 9799 pFile = pFile + uintptr(1)*20 9800 return (*struct { 9801 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 9802 })(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) 9803 } 9804 9805 func apndUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 9806 var p uintptr = pFile 9807 pFile = pFile + uintptr(1)*20 9808 return (*struct { 9809 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 9810 })(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) 9811 } 9812 9813 func apndReadMark(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) sqlite3_int64 { 9814 bp := tls.Alloc(25) 9815 defer tls.Free(25) 9816 9817 var rc int32 9818 var i int32 9819 var iMark sqlite3_int64 9820 var msbs int32 = 8 * (APND_MARK_FOS_SZ - 1) 9821 9822 if int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) != sz&int64(0x1ff) { 9823 return int64(-1) 9824 } 9825 rc = (*struct { 9826 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9827 })(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)) 9828 if rc != 0 { 9829 return int64(-1) 9830 } 9831 if libc.Xmemcmp(tls, bp, ts+3256, uint32(APND_MARK_PREFIX_SZ)) != 0 { 9832 return int64(-1) 9833 } 9834 iMark = sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(bp + 17)))&0x7f) << msbs 9835 for i = 1; i < 8; i++ { 9836 msbs = msbs - 8 9837 iMark = iMark | sqlite3_int64(*(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))))<<msbs 9838 } 9839 if iMark > sz-int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)-int64(512) { 9840 return int64(-1) 9841 } 9842 if iMark&int64(0x1ff) != 0 { 9843 return int64(-1) 9844 } 9845 return iMark 9846 } 9847 9848 var apvfsSqliteHdr = *(*[16]int8)(unsafe.Pointer(ts + 3288)) 9849 9850 func apndIsAppendvfsDatabase(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9851 bp := tls.Alloc(16) 9852 defer tls.Free(16) 9853 9854 var rc int32 9855 9856 var iMark sqlite3_int64 = apndReadMark(tls, sz, pFile) 9857 if iMark >= int64(0) { 9858 rc = (*struct { 9859 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9860 })(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) 9861 if SQLITE_OK == rc && 9862 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint32(unsafe.Sizeof([16]int8{}))) == 0 && 9863 sz&int64(0x1ff) == int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) && 9864 sz >= int64(512+(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) { 9865 return 1 9866 } 9867 } 9868 return 0 9869 } 9870 9871 func apndIsOrdinaryDatabaseFile(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9872 bp := tls.Alloc(16) 9873 defer tls.Free(16) 9874 9875 if apndIsAppendvfsDatabase(tls, sz, pFile) != 0 || 9876 sz&int64(0x1ff) != int64(0) || 9877 SQLITE_OK != (*struct { 9878 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9879 })(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)) || 9880 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint32(unsafe.Sizeof([16]int8{}))) != 0 { 9881 return 0 9882 } else { 9883 return 1 9884 } 9885 return int32(0) 9886 } 9887 9888 func apndOpen(tls *libc.TLS, pApndVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 9889 bp := tls.Alloc(8) 9890 defer tls.Free(8) 9891 9892 var pApndFile uintptr = pFile 9893 var pBaseFile uintptr = pFile + uintptr(1)*20 9894 var pBaseVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pApndVfs)).FpAppData 9895 var rc int32 9896 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 9897 if flags&SQLITE_OPEN_MAIN_DB == 0 { 9898 return (*struct { 9899 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9900 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pFile, flags, pOutFlags) 9901 } 9902 libc.Xmemset(tls, pApndFile, 0, uint32(unsafe.Sizeof(ApndFile{}))) 9903 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&apnd_io_methods)) 9904 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = int64(-1) 9905 9906 rc = (*struct { 9907 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9908 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pBaseFile, flags, pOutFlags) 9909 if rc == SQLITE_OK { 9910 rc = (*struct { 9911 f func(*libc.TLS, uintptr, uintptr) int32 9912 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxFileSize})).f(tls, pBaseFile, bp) 9913 if rc != 0 { 9914 (*struct { 9915 f func(*libc.TLS, uintptr) int32 9916 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9917 } 9918 } 9919 if rc != 0 { 9920 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9921 return rc 9922 } 9923 if apndIsOrdinaryDatabaseFile(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pBaseFile) != 0 { 9924 libc.Xmemmove(tls, pApndFile, pBaseFile, uint32((*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FszOsFile)) 9925 return SQLITE_OK 9926 } 9927 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = apndReadMark(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pFile) 9928 if (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne >= int64(0) { 9929 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = *(*sqlite3_int64)(unsafe.Pointer(bp)) - int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) 9930 return SQLITE_OK 9931 } 9932 if flags&SQLITE_OPEN_CREATE == 0 { 9933 (*struct { 9934 f func(*libc.TLS, uintptr) int32 9935 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9936 rc = SQLITE_CANTOPEN 9937 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9938 } else { 9939 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = (*(*sqlite3_int64)(unsafe.Pointer(bp)) + int64(APND_ROUNDUP-1)) & libc.CplInt64(int64(APND_ROUNDUP-1)) 9940 } 9941 return rc 9942 } 9943 9944 func apndDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 9945 return (*struct { 9946 f func(*libc.TLS, uintptr, uintptr, int32) int32 9947 })(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) 9948 } 9949 9950 func apndAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 9951 return (*struct { 9952 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9953 })(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) 9954 } 9955 9956 func apndFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 9957 return (*struct { 9958 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9959 })(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) 9960 } 9961 9962 func apndDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 9963 return (*struct { 9964 f func(*libc.TLS, uintptr, uintptr) uintptr 9965 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 9966 } 9967 9968 func apndDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 9969 (*struct { 9970 f func(*libc.TLS, uintptr, int32, uintptr) 9971 })(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) 9972 } 9973 9974 func apndDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 9975 return (*struct { 9976 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 9977 })(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) 9978 } 9979 9980 func apndDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 9981 (*struct { 9982 f func(*libc.TLS, uintptr, uintptr) 9983 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 9984 } 9985 9986 func apndRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 9987 return (*struct { 9988 f func(*libc.TLS, uintptr, int32, uintptr) int32 9989 })(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) 9990 } 9991 9992 func apndSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 9993 return (*struct { 9994 f func(*libc.TLS, uintptr, int32) int32 9995 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 9996 } 9997 9998 func apndCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 9999 return (*struct { 10000 f func(*libc.TLS, uintptr, uintptr) int32 10001 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 10002 } 10003 10004 func apndGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 10005 return (*struct { 10006 f func(*libc.TLS, uintptr, int32, uintptr) int32 10007 })(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) 10008 } 10009 10010 func apndCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 10011 return (*struct { 10012 f func(*libc.TLS, uintptr, uintptr) int32 10013 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTimeInt64})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p) 10014 } 10015 10016 func apndSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 10017 return (*struct { 10018 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 10019 })(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) 10020 } 10021 10022 func apndGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 10023 return (*struct { 10024 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 10025 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 10026 } 10027 10028 func apndNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 10029 return (*struct { 10030 f func(*libc.TLS, uintptr, uintptr) uintptr 10031 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 10032 } 10033 10034 func sqlite3_appendvfs_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 10035 var rc int32 = SQLITE_OK 10036 var pOrig uintptr 10037 _ = pApi 10038 10039 _ = pzErrMsg 10040 _ = db 10041 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 10042 if pOrig == uintptr(0) { 10043 return SQLITE_ERROR 10044 } 10045 apnd_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 10046 apnd_vfs.FpAppData = pOrig 10047 apnd_vfs.FszOsFile = int32(uint32((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint32(unsafe.Sizeof(ApndFile{}))) 10048 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&apnd_vfs)), 0) 10049 if rc == SQLITE_OK { 10050 rc = SQLITE_OK | int32(1)<<8 10051 } 10052 return rc 10053 } 10054 10055 type idtype_t = uint32 10056 10057 type div_t = struct { 10058 Fquot int32 10059 Frem int32 10060 } 10061 10062 type ldiv_t = struct { 10063 Fquot int32 10064 Frem int32 10065 } 10066 10067 type lldiv_t = struct { 10068 Fquot int64 10069 Frem int64 10070 } 10071 10072 type u_char = uint8 10073 type u_short = uint16 10074 type u_int = uint32 10075 type u_long = uint32 10076 type quad_t = int64 10077 type u_quad_t = uint64 10078 type fsid_t = struct{ F__val [2]int32 } 10079 type loff_t = int64 10080 10081 type ino_t = uint64 10082 10083 type dev_t = uint64 10084 10085 type gid_t = uint32 10086 10087 type mode_t = uint32 10088 10089 type nlink_t = uint32 10090 10091 type uid_t = uint32 10092 10093 type pid_t = int32 10094 10095 type id_t = uint32 10096 10097 type daddr_t = int32 10098 type caddr_t = uintptr 10099 10100 type key_t = int32 10101 10102 type clock_t = int32 10103 10104 type clockid_t = int32 10105 10106 type time_t = int32 10107 10108 type timer_t = uintptr 10109 10110 type ulong = uint32 10111 type ushort = uint16 10112 type uint = uint32 10113 10114 type int8_t = int8 10115 type int16_t = int16 10116 type int32_t = int32 10117 type int64_t = int64 10118 10119 type u_int8_t = uint8 10120 type u_int16_t = uint16 10121 type u_int32_t = uint32 10122 type u_int64_t = uint64 10123 10124 type register_t = int32 10125 10126 type sigset_t = struct{ F__val [32]uint32 } 10127 10128 type timeval = struct { 10129 Ftv_sec int32 10130 Ftv_usec int32 10131 } 10132 10133 type timespec = struct { 10134 Ftv_sec int32 10135 Ftv_nsec int32 10136 } 10137 10138 type suseconds_t = int32 10139 10140 type fd_set = struct{ F__fds_bits [32]int32 } 10141 10142 type fd_mask = int32 10143 10144 type blksize_t = int32 10145 10146 type blkcnt_t = int64 10147 type fsblkcnt_t = uint64 10148 type fsfilcnt_t = uint64 10149 10150 type __pthread_internal_list = struct { 10151 F__prev uintptr 10152 F__next uintptr 10153 } 10154 10155 type __pthread_internal_slist = struct{ F__next uintptr } 10156 10157 type __pthread_mutex_s = struct { 10158 F__lock int32 10159 F__count uint32 10160 F__owner int32 10161 F__kind int32 10162 F__nusers uint32 10163 F__20 struct { 10164 F__ccgo_pad1 [0]uint32 10165 F__elision_data struct { 10166 F__espins int16 10167 F__eelision int16 10168 } 10169 } 10170 } 10171 10172 type __pthread_rwlock_arch_t = struct { 10173 F__readers uint32 10174 F__writers uint32 10175 F__wrphase_futex uint32 10176 F__writers_futex uint32 10177 F__pad3 uint32 10178 F__pad4 uint32 10179 F__flags uint8 10180 F__shared uint8 10181 F__rwelision int8 10182 F__pad2 uint8 10183 F__cur_writer int32 10184 } 10185 10186 type __pthread_cond_s = struct { 10187 F__0 struct{ F__wseq uint64 } 10188 F__8 struct{ F__g1_start uint64 } 10189 F__g_refs [2]uint32 10190 F__g_size [2]uint32 10191 F__g1_orig_size uint32 10192 F__wrefs uint32 10193 F__g_signals [2]uint32 10194 } 10195 10196 type pthread_t = uint32 10197 10198 type pthread_mutexattr_t = struct { 10199 F__ccgo_pad1 [0]uint32 10200 F__size [4]int8 10201 } 10202 10203 type pthread_condattr_t = struct { 10204 F__ccgo_pad1 [0]uint32 10205 F__size [4]int8 10206 } 10207 10208 type pthread_key_t = uint32 10209 10210 type pthread_once_t = int32 10211 10212 type pthread_attr_t1 = struct { 10213 F__ccgo_pad1 [0]uint32 10214 F__size [36]int8 10215 } 10216 10217 type pthread_attr_t = pthread_attr_t1 10218 10219 type pthread_mutex_t = struct{ F__data __pthread_mutex_s } 10220 10221 type pthread_cond_t = struct{ F__data __pthread_cond_s } 10222 10223 type pthread_rwlock_t = struct{ F__data __pthread_rwlock_arch_t } 10224 10225 type pthread_rwlockattr_t = struct { 10226 F__ccgo_pad1 [0]uint32 10227 F__size [8]int8 10228 } 10229 10230 type pthread_spinlock_t = int32 10231 10232 type pthread_barrier_t = struct { 10233 F__ccgo_pad1 [0]uint32 10234 F__size [20]int8 10235 } 10236 10237 type pthread_barrierattr_t = struct { 10238 F__ccgo_pad1 [0]uint32 10239 F__size [4]int8 10240 } 10241 10242 type random_data = struct { 10243 Ffptr uintptr 10244 Frptr uintptr 10245 Fstate uintptr 10246 Frand_type int32 10247 Frand_deg int32 10248 Frand_sep int32 10249 Fend_ptr uintptr 10250 } 10251 10252 type drand48_data = struct { 10253 F__x [3]uint16 10254 F__old_x [3]uint16 10255 F__c uint16 10256 F__init uint16 10257 F__a uint64 10258 } 10259 10260 type amatch_vtab1 = struct { 10261 Fbase sqlite3_vtab 10262 FzClassName uintptr 10263 FzDb uintptr 10264 FzSelf uintptr 10265 FzCostTab uintptr 10266 FzVocabTab uintptr 10267 FzVocabWord uintptr 10268 FzVocabLang uintptr 10269 FpRule uintptr 10270 FrIns amatch_cost 10271 FrDel amatch_cost 10272 FrSub amatch_cost 10273 Fdb uintptr 10274 FpVCheck uintptr 10275 FnCursor int32 10276 } 10277 10278 type amatch_vtab = amatch_vtab1 10279 type amatch_cursor1 = struct { 10280 Fbase sqlite3_vtab_cursor 10281 FiRowid sqlite3_int64 10282 FiLang amatch_langid 10283 FrLimit amatch_cost 10284 FnBuf int32 10285 FoomErr int32 10286 FnWord int32 10287 FzBuf uintptr 10288 FzInput uintptr 10289 FpVtab uintptr 10290 FpAllWords uintptr 10291 FpCurrent uintptr 10292 FpCost uintptr 10293 FpWord uintptr 10294 } 10295 10296 type amatch_cursor = amatch_cursor1 10297 type amatch_rule1 = struct { 10298 FpNext uintptr 10299 FzFrom uintptr 10300 FrCost amatch_cost 10301 FiLang amatch_langid 10302 FnFrom amatch_len 10303 FnTo amatch_len 10304 FzTo [4]int8 10305 F__ccgo_pad1 [2]byte 10306 } 10307 10308 type amatch_rule = amatch_rule1 10309 type amatch_word1 = struct { 10310 FpNext uintptr 10311 FsCost amatch_avl 10312 FsWord amatch_avl 10313 FrCost amatch_cost 10314 FiSeq int32 10315 FzCost [10]int8 10316 FnMatch int16 10317 FzWord [4]int8 10318 } 10319 10320 type amatch_word = amatch_word1 10321 type amatch_avl1 = struct { 10322 FpWord uintptr 10323 FzKey uintptr 10324 FpBefore uintptr 10325 FpAfter uintptr 10326 FpUp uintptr 10327 Fheight int16 10328 Fimbalance int16 10329 } 10330 10331 type amatch_avl = amatch_avl1 10332 10333 func amatchAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 10334 var hBefore int16 10335 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10336 hBefore = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 10337 } else { 10338 hBefore = int16(0) 10339 } 10340 var hAfter int16 10341 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 10342 hAfter = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 10343 } else { 10344 hAfter = int16(0) 10345 } 10346 (*amatch_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 10347 (*amatch_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 10348 if int32(hBefore) > int32(hAfter) { 10349 return int32(hBefore) 10350 } 10351 return int32(hAfter) 10352 }() + 1) 10353 } 10354 10355 func amatchAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 10356 var pB uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpBefore 10357 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pB)).FpAfter 10358 (*amatch_avl)(unsafe.Pointer(pB)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 10359 (*amatch_avl)(unsafe.Pointer(pB)).FpAfter = pP 10360 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pB 10361 (*amatch_avl)(unsafe.Pointer(pP)).FpBefore = pY 10362 if pY != 0 { 10363 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 10364 } 10365 amatchAvlRecomputeHeight(tls, pP) 10366 amatchAvlRecomputeHeight(tls, pB) 10367 return pB 10368 } 10369 10370 func amatchAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 10371 var pA uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpAfter 10372 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pA)).FpBefore 10373 (*amatch_avl)(unsafe.Pointer(pA)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 10374 (*amatch_avl)(unsafe.Pointer(pA)).FpBefore = pP 10375 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pA 10376 (*amatch_avl)(unsafe.Pointer(pP)).FpAfter = pY 10377 if pY != 0 { 10378 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 10379 } 10380 amatchAvlRecomputeHeight(tls, pP) 10381 amatchAvlRecomputeHeight(tls, pA) 10382 return pA 10383 } 10384 10385 func amatchAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 10386 var pUp uintptr = (*amatch_avl)(unsafe.Pointer(p)).FpUp 10387 if pUp == uintptr(0) { 10388 return pp 10389 } 10390 if (*amatch_avl)(unsafe.Pointer(pUp)).FpAfter == p { 10391 return pUp + 12 10392 } 10393 return pUp + 8 10394 } 10395 10396 func amatchAvlBalance(tls *libc.TLS, p uintptr) uintptr { 10397 bp := tls.Alloc(4) 10398 defer tls.Free(4) 10399 *(*uintptr)(unsafe.Pointer(bp)) = p 10400 10401 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 10402 var pp uintptr 10403 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 10404 amatchAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 10405 if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 10406 var pB uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 10407 if int32((*amatch_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 10408 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = amatchAvlRotateAfter(tls, pB) 10409 } 10410 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 10411 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 10412 } else if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 10413 var pA uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 10414 if int32((*amatch_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 10415 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = amatchAvlRotateBefore(tls, pA) 10416 } 10417 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 10418 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 10419 } 10420 pTop = *(*uintptr)(unsafe.Pointer(bp)) 10421 *(*uintptr)(unsafe.Pointer(bp)) = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 10422 } 10423 return pTop 10424 } 10425 10426 func amatchAvlSearch(tls *libc.TLS, p uintptr, zKey uintptr) uintptr { 10427 var c int32 10428 for p != 0 && libc.AssignInt32(&c, libc.Xstrcmp(tls, zKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey)) != 0 { 10429 if c < 0 { 10430 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10431 } else { 10432 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 10433 } 10434 } 10435 return p 10436 } 10437 10438 func amatchAvlFirst(tls *libc.TLS, p uintptr) uintptr { 10439 if p != 0 { 10440 for (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10441 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10442 } 10443 } 10444 return p 10445 } 10446 10447 func amatchAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 10448 var c int32 10449 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 10450 if p == uintptr(0) { 10451 p = pNew 10452 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 10453 } else { 10454 for p != 0 { 10455 c = libc.Xstrcmp(tls, (*amatch_avl)(unsafe.Pointer(pNew)).FzKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey) 10456 if c < 0 { 10457 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10458 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10459 } else { 10460 (*amatch_avl)(unsafe.Pointer(p)).FpBefore = pNew 10461 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 10462 break 10463 } 10464 } else if c > 0 { 10465 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 10466 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 10467 } else { 10468 (*amatch_avl)(unsafe.Pointer(p)).FpAfter = pNew 10469 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 10470 break 10471 } 10472 } else { 10473 return p 10474 } 10475 } 10476 } 10477 (*amatch_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 10478 (*amatch_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 10479 (*amatch_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 10480 (*amatch_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 10481 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, p) 10482 10483 return uintptr(0) 10484 } 10485 10486 func amatchAvlRemove(tls *libc.TLS, ppHead uintptr, pOld uintptr) { 10487 var ppParent uintptr 10488 var pBalance uintptr = uintptr(0) 10489 10490 ppParent = amatchAvlFromPtr(tls, pOld, ppHead) 10491 if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 10492 *(*uintptr)(unsafe.Pointer(ppParent)) = uintptr(0) 10493 pBalance = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10494 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore != 0 && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter != 0 { 10495 var pX uintptr 10496 var pY uintptr 10497 pX = amatchAvlFirst(tls, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 10498 *(*uintptr)(unsafe.Pointer(amatchAvlFromPtr(tls, pX, uintptr(0)))) = (*amatch_avl)(unsafe.Pointer(pX)).FpAfter 10499 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 10500 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 10501 } 10502 pBalance = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 10503 (*amatch_avl)(unsafe.Pointer(pX)).FpAfter = (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter 10504 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 10505 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = pX 10506 } else { 10507 pBalance = pX 10508 } 10509 (*amatch_avl)(unsafe.Pointer(pX)).FpBefore = libc.AssignUintptr(&pY, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 10510 if pY != 0 { 10511 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pX 10512 } 10513 (*amatch_avl)(unsafe.Pointer(pX)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10514 *(*uintptr)(unsafe.Pointer(ppParent)) = pX 10515 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) { 10516 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 10517 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10518 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 10519 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 10520 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10521 } 10522 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, pBalance) 10523 (*amatch_avl)(unsafe.Pointer(pOld)).FpUp = uintptr(0) 10524 (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore = uintptr(0) 10525 (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter = uintptr(0) 10526 10527 } 10528 10529 type amatch_cost = int32 10530 type amatch_len = int8 10531 type amatch_langid = int32 10532 10533 func amatchMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 10534 bp := tls.Alloc(24) 10535 defer tls.Free(24) 10536 10537 var pTail uintptr 10538 10539 pTail = bp 10540 for pA != 0 && pB != 0 { 10541 if (*amatch_rule)(unsafe.Pointer(pA)).FrCost <= (*amatch_rule)(unsafe.Pointer(pB)).FrCost { 10542 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 10543 pTail = pA 10544 pA = (*amatch_rule)(unsafe.Pointer(pA)).FpNext 10545 } else { 10546 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 10547 pTail = pB 10548 pB = (*amatch_rule)(unsafe.Pointer(pB)).FpNext 10549 } 10550 } 10551 if pA == uintptr(0) { 10552 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 10553 } else { 10554 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 10555 } 10556 return (*amatch_rule)(unsafe.Pointer(bp)).FpNext 10557 } 10558 10559 func amatchLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 10560 bp := tls.Alloc(48) 10561 defer tls.Free(48) 10562 10563 var iLang sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 10564 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 10565 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 10566 var rCost amatch_cost = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 10567 10568 var rc int32 = SQLITE_OK 10569 var nFrom int32 10570 var nTo int32 10571 var pRule uintptr = uintptr(0) 10572 10573 if zFrom == uintptr(0) { 10574 zFrom = ts + 584 10575 } 10576 if zTo == uintptr(0) { 10577 zTo = ts + 584 10578 } 10579 nFrom = int32(libc.Xstrlen(tls, zFrom)) 10580 nTo = int32(libc.Xstrlen(tls, zTo)) 10581 10582 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 10583 if int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zFrom + 1))) == 0 { 10584 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrSub > rCost { 10585 (*amatch_vtab)(unsafe.Pointer(p)).FrSub = rCost 10586 } 10587 } 10588 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 10589 return SQLITE_OK 10590 } 10591 10592 if rCost <= 0 || rCost > AMATCH_MX_COST { 10593 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 10594 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_COST)) 10595 rc = SQLITE_ERROR 10596 } else if nFrom > AMATCH_MX_LENGTH || nTo > AMATCH_MX_LENGTH { 10597 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 10598 libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LENGTH)) 10599 rc = SQLITE_ERROR 10600 } else if iLang < int64(0) || iLang > int64(AMATCH_MX_LANGID) { 10601 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3370, 10602 libc.VaList(bp+32, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LANGID)) 10603 rc = SQLITE_ERROR 10604 } else if libc.Xstrcmp(tls, zFrom, ts+584) == 0 && libc.Xstrcmp(tls, zTo, ts+3405) == 0 { 10605 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrIns > rCost { 10606 (*amatch_vtab)(unsafe.Pointer(p)).FrIns = rCost 10607 } 10608 } else if libc.Xstrcmp(tls, zFrom, ts+3405) == 0 && libc.Xstrcmp(tls, zTo, ts+584) == 0 { 10609 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrDel > rCost { 10610 (*amatch_vtab)(unsafe.Pointer(p)).FrDel = rCost 10611 } 10612 } else { 10613 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(amatch_rule{}))+uint32(nFrom)+uint32(nTo))) 10614 if pRule == uintptr(0) { 10615 rc = SQLITE_NOMEM 10616 } else { 10617 libc.Xmemset(tls, pRule, 0, uint32(unsafe.Sizeof(amatch_rule{}))) 10618 (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 18 + uintptr(nTo+1) 10619 (*amatch_rule)(unsafe.Pointer(pRule)).FnFrom = amatch_len(nFrom) 10620 libc.Xmemcpy(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint32(nFrom+1)) 10621 libc.Xmemcpy(tls, pRule+18, zTo, uint32(nTo+1)) 10622 (*amatch_rule)(unsafe.Pointer(pRule)).FnTo = amatch_len(nTo) 10623 (*amatch_rule)(unsafe.Pointer(pRule)).FrCost = rCost 10624 (*amatch_rule)(unsafe.Pointer(pRule)).FiLang = int32(iLang) 10625 } 10626 } 10627 10628 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 10629 return rc 10630 } 10631 10632 func amatchFreeRules(tls *libc.TLS, p uintptr) { 10633 for (*amatch_vtab)(unsafe.Pointer(p)).FpRule != 0 { 10634 var pRule uintptr = (*amatch_vtab)(unsafe.Pointer(p)).FpRule 10635 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext 10636 sqlite3.Xsqlite3_free(tls, pRule) 10637 } 10638 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = uintptr(0) 10639 } 10640 10641 func amatchLoadRules(tls *libc.TLS, db uintptr, p uintptr, pzErr uintptr) int32 { 10642 bp := tls.Alloc(124) 10643 defer tls.Free(124) 10644 10645 var rc int32 = SQLITE_OK 10646 var zSql uintptr 10647 var pHead uintptr = uintptr(0) 10648 10649 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzDb, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab)) 10650 if zSql == uintptr(0) { 10651 rc = SQLITE_NOMEM 10652 } else { 10653 var rc2 int32 10654 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 10655 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 10656 if rc != SQLITE_OK { 10657 *(*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))) 10658 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 10659 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 10660 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))))) 10661 rc = SQLITE_ERROR 10662 } else { 10663 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 10664 *(*uintptr)(unsafe.Pointer(bp + 60)) = uintptr(0) 10665 rc = amatchLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+60, pzErr) 10666 if *(*uintptr)(unsafe.Pointer(bp + 60)) != 0 { 10667 (*amatch_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 60)))).FpNext = pHead 10668 pHead = *(*uintptr)(unsafe.Pointer(bp + 60)) 10669 } 10670 } 10671 } 10672 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 10673 if rc == SQLITE_OK { 10674 rc = rc2 10675 } 10676 } 10677 sqlite3.Xsqlite3_free(tls, zSql) 10678 10679 if rc == SQLITE_OK { 10680 var i uint32 10681 var pX uintptr 10682 10683 for i = uint32(0); i < uint32(unsafe.Sizeof([15]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0))); i++ { 10684 *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = uintptr(0) 10685 } 10686 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 10687 pHead = (*amatch_rule)(unsafe.Pointer(pX)).FpNext 10688 (*amatch_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 10689 for i = uint32(0); *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) != 0 && i < uint32(unsafe.Sizeof([15]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0)))-uint32(1); i++ { 10690 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)), pX) 10691 *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = uintptr(0) 10692 } 10693 *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)), pX) 10694 } 10695 pX = *(*uintptr)(unsafe.Pointer(bp + 64)) 10696 i = uint32(1) 10697 for ; i < uint32(unsafe.Sizeof([15]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0))); i++ { 10698 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)), pX) 10699 } 10700 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = amatchMergeRules(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpRule, pX) 10701 } else { 10702 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = pHead 10703 } 10704 10705 return rc 10706 } 10707 10708 func amatchDequote(tls *libc.TLS, zIn uintptr) uintptr { 10709 var nIn sqlite3_int64 10710 var zOut uintptr 10711 10712 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 10713 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 10714 if zOut != 0 { 10715 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 10716 10717 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 10718 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 10719 } else { 10720 var iOut int32 = 0 10721 var iIn int32 10722 10723 if int32(q) == '[' { 10724 q = int8(']') 10725 } 10726 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 10727 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 10728 iIn++ 10729 } 10730 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 10731 } 10732 } 10733 10734 } 10735 return zOut 10736 } 10737 10738 func amatchVCheckClear(tls *libc.TLS, p uintptr) { 10739 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck != 0 { 10740 sqlite3.Xsqlite3_finalize(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10741 (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck = uintptr(0) 10742 } 10743 } 10744 10745 func amatchFree(tls *libc.TLS, p uintptr) { 10746 if p != 0 { 10747 amatchFreeRules(tls, p) 10748 amatchVCheckClear(tls, p) 10749 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName) 10750 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzDb) 10751 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab) 10752 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab) 10753 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord) 10754 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang) 10755 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf) 10756 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(amatch_vtab{}))) 10757 sqlite3.Xsqlite3_free(tls, p) 10758 } 10759 } 10760 10761 func amatchDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 10762 var p uintptr = pVtab 10763 10764 amatchFree(tls, p) 10765 return SQLITE_OK 10766 } 10767 10768 func amatchValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 10769 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 10770 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 10771 var i int32 10772 if nStr < nKey+1 { 10773 return uintptr(0) 10774 } 10775 if libc.Xmemcmp(tls, zStr, zKey, uint32(nKey)) != 0 { 10776 return uintptr(0) 10777 } 10778 for i = nKey; int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i))))))*2)))&int32(_ISspace) != 0; i++ { 10779 } 10780 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 10781 return uintptr(0) 10782 } 10783 i++ 10784 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i))))))*2)))&int32(_ISspace) != 0 { 10785 i++ 10786 } 10787 return zStr + uintptr(i) 10788 } 10789 10790 func amatchConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 10791 bp := tls.Alloc(32) 10792 defer tls.Free(32) 10793 10794 var rc int32 10795 var pNew uintptr 10796 var zModule uintptr 10797 var zDb uintptr 10798 var zVal uintptr 10799 var i int32 10800 rc = SQLITE_OK 10801 pNew = uintptr(0) 10802 zModule = *(*uintptr)(unsafe.Pointer(argv)) 10803 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*4)) 10804 10805 _ = pAux 10806 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10807 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_vtab{}))) 10808 if !(pNew == uintptr(0)) { 10809 goto __1 10810 } 10811 return SQLITE_NOMEM 10812 __1: 10813 ; 10814 rc = SQLITE_NOMEM 10815 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(amatch_vtab{}))) 10816 (*amatch_vtab)(unsafe.Pointer(pNew)).Fdb = db 10817 (*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zModule)) 10818 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName == uintptr(0)) { 10819 goto __2 10820 } 10821 goto amatchConnectError 10822 __2: 10823 ; 10824 (*amatch_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zDb)) 10825 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 10826 goto __3 10827 } 10828 goto amatchConnectError 10829 __3: 10830 ; 10831 (*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 10832 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 10833 goto __4 10834 } 10835 goto amatchConnectError 10836 __4: 10837 ; 10838 i = 3 10839 __5: 10840 if !(i < argc) { 10841 goto __7 10842 } 10843 zVal = amatchValueOfKey(tls, ts+3468, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 10844 if !(zVal != 0) { 10845 goto __8 10846 } 10847 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab) 10848 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab = amatchDequote(tls, zVal) 10849 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab == uintptr(0)) { 10850 goto __9 10851 } 10852 goto amatchConnectError 10853 __9: 10854 ; 10855 goto __6 10856 __8: 10857 ; 10858 zVal = amatchValueOfKey(tls, ts+3485, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 10859 if !(zVal != 0) { 10860 goto __10 10861 } 10862 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord) 10863 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord = amatchDequote(tls, zVal) 10864 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord == uintptr(0)) { 10865 goto __11 10866 } 10867 goto amatchConnectError 10868 __11: 10869 ; 10870 goto __6 10871 __10: 10872 ; 10873 zVal = amatchValueOfKey(tls, ts+3501, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 10874 if !(zVal != 0) { 10875 goto __12 10876 } 10877 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang) 10878 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang = amatchDequote(tls, zVal) 10879 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang == uintptr(0)) { 10880 goto __13 10881 } 10882 goto amatchConnectError 10883 __13: 10884 ; 10885 goto __6 10886 __12: 10887 ; 10888 zVal = amatchValueOfKey(tls, ts+3521, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 10889 if !(zVal != 0) { 10890 goto __14 10891 } 10892 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab) 10893 (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab = amatchDequote(tls, zVal) 10894 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10895 goto __15 10896 } 10897 goto amatchConnectError 10898 __15: 10899 ; 10900 goto __6 10901 __14: 10902 ; 10903 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)))) 10904 amatchFree(tls, pNew) 10905 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10906 return SQLITE_ERROR 10907 goto __6 10908 __6: 10909 i++ 10910 goto __5 10911 goto __7 10912 __7: 10913 ; 10914 rc = SQLITE_OK 10915 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10916 goto __16 10917 } 10918 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3565, 0) 10919 rc = SQLITE_ERROR 10920 goto __17 10921 __16: 10922 rc = amatchLoadRules(tls, db, pNew, pzErr) 10923 __17: 10924 ; 10925 if !(rc == SQLITE_OK) { 10926 goto __18 10927 } 10928 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 10929 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 10930 ts+3599) 10931 __18: 10932 ; 10933 if !(rc != SQLITE_OK) { 10934 goto __19 10935 } 10936 amatchFree(tls, pNew) 10937 __19: 10938 ; 10939 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 10940 return rc 10941 10942 amatchConnectError: 10943 amatchFree(tls, pNew) 10944 return rc 10945 } 10946 10947 func amatchOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 10948 var p uintptr = pVTab 10949 var pCur uintptr 10950 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_cursor{}))) 10951 if pCur == uintptr(0) { 10952 return SQLITE_NOMEM 10953 } 10954 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(amatch_cursor{}))) 10955 (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab = p 10956 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 10957 (*amatch_vtab)(unsafe.Pointer(p)).FnCursor++ 10958 return SQLITE_OK 10959 } 10960 10961 func amatchClearCursor(tls *libc.TLS, pCur uintptr) { 10962 var pWord uintptr 10963 var pNextWord uintptr 10964 for pWord = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords; pWord != 0; pWord = pNextWord { 10965 pNextWord = (*amatch_word)(unsafe.Pointer(pWord)).FpNext 10966 sqlite3.Xsqlite3_free(tls, pWord) 10967 } 10968 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = uintptr(0) 10969 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput) 10970 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = uintptr(0) 10971 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 10972 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = uintptr(0) 10973 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 10974 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost = uintptr(0) 10975 (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord = uintptr(0) 10976 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 10977 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = 1000000 10978 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = 0 10979 (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord = 0 10980 } 10981 10982 func amatchClose(tls *libc.TLS, cur uintptr) int32 { 10983 var pCur uintptr = cur 10984 amatchClearCursor(tls, pCur) 10985 (*amatch_vtab)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 10986 sqlite3.Xsqlite3_free(tls, pCur) 10987 return SQLITE_OK 10988 } 10989 10990 func amatchEncodeInt(tls *libc.TLS, x int32, z uintptr) { 10991 *(*int8)(unsafe.Pointer(z)) = a[x>>18&0x3f] 10992 *(*int8)(unsafe.Pointer(z + 1)) = a[x>>12&0x3f] 10993 *(*int8)(unsafe.Pointer(z + 2)) = a[x>>6&0x3f] 10994 *(*int8)(unsafe.Pointer(z + 3)) = a[x&0x3f] 10995 } 10996 10997 var a = *(*[65]int8)(unsafe.Pointer(ts + 3666)) 10998 10999 func amatchWriteCost(tls *libc.TLS, pWord uintptr) { 11000 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, pWord+60) 11001 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FiSeq, pWord+60+uintptr(4)) 11002 *(*int8)(unsafe.Pointer(pWord + 60 + 8)) = int8(0) 11003 } 11004 11005 func amatchStrcpy(tls *libc.TLS, dest uintptr, src uintptr) { 11006 for int32(libc.AssignPtrInt8(libc.PostIncUintptr(&dest, 1), *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&src, 1))))) != 0 { 11007 } 11008 } 11009 11010 func amatchStrcat(tls *libc.TLS, dest uintptr, src uintptr) { 11011 for *(*int8)(unsafe.Pointer(dest)) != 0 { 11012 dest++ 11013 } 11014 amatchStrcpy(tls, dest, src) 11015 } 11016 11017 func amatchAddWord(tls *libc.TLS, pCur uintptr, rCost amatch_cost, nMatch int32, zWordBase uintptr, zWordTail uintptr) { 11018 bp := tls.Alloc(4) 11019 defer tls.Free(4) 11020 11021 var pWord uintptr 11022 var pNode uintptr 11023 var pOther uintptr 11024 _ = pOther 11025 var nBase int32 11026 var nTail int32 11027 11028 if rCost > (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit { 11029 return 11030 } 11031 nBase = int32(libc.Xstrlen(tls, zWordBase)) 11032 nTail = int32(libc.Xstrlen(tls, zWordTail)) 11033 if nBase+nTail+3 > (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf { 11034 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = nBase + nTail + 100 11035 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = sqlite3.Xsqlite3_realloc(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf) 11036 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf == uintptr(0) { 11037 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 11038 return 11039 } 11040 } 11041 amatchEncodeInt(tls, nMatch, bp) 11042 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, bp+uintptr(2), uint32(2)) 11043 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2), zWordBase, uint32(nBase)) 11044 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2)+uintptr(nBase), zWordTail, uint32(nTail+1)) 11045 pNode = amatchAvlSearch(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 11046 if pNode != 0 { 11047 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 11048 if (*amatch_word)(unsafe.Pointer(pWord)).FrCost > rCost { 11049 amatchAvlRemove(tls, pCur+52, pWord+4) 11050 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 11051 amatchWriteCost(tls, pWord) 11052 pOther = amatchAvlInsert(tls, pCur+52, pWord+4) 11053 _ = pOther 11054 } 11055 return 11056 } 11057 pWord = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(amatch_word{}))+uint32(nBase)+uint32(nTail)-uint32(1))) 11058 if pWord == uintptr(0) { 11059 return 11060 } 11061 libc.Xmemset(tls, pWord, 0, uint32(unsafe.Sizeof(amatch_word{}))) 11062 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 11063 (*amatch_word)(unsafe.Pointer(pWord)).FiSeq = libc.PostIncInt32(&(*amatch_cursor)(unsafe.Pointer(pCur)).FnWord, 1) 11064 amatchWriteCost(tls, pWord) 11065 (*amatch_word)(unsafe.Pointer(pWord)).FnMatch = int16(nMatch) 11066 (*amatch_word)(unsafe.Pointer(pWord)).FpNext = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords 11067 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = pWord 11068 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FzKey = pWord + 60 11069 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FpWord = pWord 11070 pOther = amatchAvlInsert(tls, pCur+52, pWord+4) 11071 _ = pOther 11072 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FzKey = pWord + 72 11073 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FpWord = pWord 11074 amatchStrcpy(tls, pWord+72, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 11075 pOther = amatchAvlInsert(tls, pCur+56, pWord+28) 11076 _ = pOther 11077 } 11078 11079 func amatchNext(tls *libc.TLS, cur uintptr) int32 { 11080 bp := tls.Alloc(80) 11081 defer tls.Free(80) 11082 11083 var pCur uintptr = cur 11084 var pWord uintptr = uintptr(0) 11085 var pNode uintptr 11086 var isMatch int32 = 0 11087 var p uintptr = (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab 11088 var nWord int32 11089 var rc int32 11090 var i int32 11091 var zW uintptr 11092 var pRule uintptr 11093 var zBuf uintptr = uintptr(0) 11094 var nBuf int8 = int8(0) 11095 11096 var nNextIn int32 11097 11098 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck == uintptr(0) { 11099 var zSql uintptr 11100 if (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang != 0 && *(*int8)(unsafe.Pointer((*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) != 0 { 11101 zSql = sqlite3.Xsqlite3_mprintf(tls, 11102 ts+3731, 11103 libc.VaList(bp, ts+3753, 11104 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 11105 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) 11106 } else { 11107 zSql = sqlite3.Xsqlite3_mprintf(tls, 11108 ts+3792, 11109 libc.VaList(bp+40, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 11110 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord)) 11111 } 11112 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*amatch_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, p+60, uintptr(0)) 11113 sqlite3.Xsqlite3_free(tls, zSql) 11114 if rc != 0 { 11115 return rc 11116 } 11117 } 11118 sqlite3.Xsqlite3_bind_int(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 2, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 11119 11120 for __ccgo := true; __ccgo; __ccgo = !(isMatch != 0) { 11121 pNode = amatchAvlFirst(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost) 11122 if pNode == uintptr(0) { 11123 pWord = uintptr(0) 11124 break 11125 } 11126 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 11127 amatchAvlRemove(tls, pCur+52, pWord+4) 11128 11129 nWord = int32(libc.Xstrlen(tls, pWord+72+uintptr(2))) 11130 if nWord+20 > int32(nBuf) { 11131 nBuf = int8(nWord + 100) 11132 zBuf = sqlite3.Xsqlite3_realloc(tls, zBuf, int32(nBuf)) 11133 if zBuf == uintptr(0) { 11134 return SQLITE_NOMEM 11135 } 11136 } 11137 amatchStrcpy(tls, zBuf, pWord+72+uintptr(2)) 11138 *(*int8)(unsafe.Pointer(bp + 64)) = int8(0) 11139 *(*int8)(unsafe.Pointer(bp + 72)) = *(*int8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch))) 11140 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 { 11141 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++ { 11142 *(*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))) 11143 } 11144 *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i))) = int8(0) 11145 nNextIn = i 11146 } else { 11147 nNextIn = 0 11148 } 11149 11150 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 && int32(*(*int8)(unsafe.Pointer(bp + 72))) != '*' { 11151 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11152 amatchStrcat(tls, zBuf, bp+72) 11153 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, nWord+nNextIn, uintptr(0)) 11154 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11155 if rc == SQLITE_ROW { 11156 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 11157 if libc.Xstrncmp(tls, zBuf, zW, uint32(nWord+nNextIn)) == 0 { 11158 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, zBuf, ts+584) 11159 } 11160 } 11161 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 11162 } 11163 11164 for 1 != 0 { 11165 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 11166 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11167 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, -1, libc.UintptrFromInt32(-1)) 11168 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11169 if rc != SQLITE_ROW { 11170 break 11171 } 11172 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 11173 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 11174 if libc.Xstrncmp(tls, zW, zBuf, uint32(nWord)) != 0 { 11175 break 11176 } 11177 if int32(*(*int8)(unsafe.Pointer(bp + 72))) == '*' && int32(*(*int8)(unsafe.Pointer(bp + 72 + 1))) == 0 || 11178 int32(*(*int8)(unsafe.Pointer(bp + 72))) == 0 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord)))) == 0 { 11179 isMatch = 1 11180 *(*int8)(unsafe.Pointer(bp + 72)) = int8(0) 11181 nNextIn = 0 11182 break 11183 } 11184 *(*int8)(unsafe.Pointer(bp + 64)) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord))) 11185 for i = 1; i <= 4 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))))&0xc0 == 0x80; i++ { 11186 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))) 11187 } 11188 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = int8(0) 11189 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 11190 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns > 0 { 11191 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrIns, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), 11192 zBuf, bp+64) 11193 } 11194 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub > 0 { 11195 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrSub, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 11196 zBuf, bp+64) 11197 } 11198 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns < 0 && (*amatch_vtab)(unsafe.Pointer(p)).FrSub < 0 { 11199 break 11200 } 11201 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i-1)))++ 11202 } 11203 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11204 11205 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel > 0 { 11206 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 11207 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrDel, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 11208 zBuf, ts+584) 11209 } 11210 11211 for pRule = (*amatch_vtab)(unsafe.Pointer(p)).FpRule; pRule != 0; pRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext { 11212 if (*amatch_rule)(unsafe.Pointer(pRule)).FiLang != (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang { 11213 continue 11214 } 11215 if libc.Xstrncmp(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput+uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), uint32((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom)) == 0 { 11216 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_rule)(unsafe.Pointer(pRule)).FrCost, 11217 int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+int32((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom), pWord+72+uintptr(2), pRule+18) 11218 } 11219 } 11220 } 11221 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = pWord 11222 sqlite3.Xsqlite3_free(tls, zBuf) 11223 return SQLITE_OK 11224 } 11225 11226 func amatchFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 11227 bp := tls.Alloc(8) 11228 defer tls.Free(8) 11229 11230 var pCur uintptr = pVtabCursor 11231 var zWord uintptr = ts + 3840 11232 var idx int32 11233 11234 amatchClearCursor(tls, pCur) 11235 idx = 0 11236 if idxNum&1 != 0 { 11237 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 11238 idx++ 11239 } 11240 if idxNum&2 != 0 { 11241 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*4))) 11242 idx++ 11243 } 11244 if idxNum&4 != 0 { 11245 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*4))) 11246 idx++ 11247 } 11248 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zWord)) 11249 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput == uintptr(0) { 11250 return SQLITE_NOMEM 11251 } 11252 amatchAddWord(tls, pCur, 0, 0, ts+584, ts+584) 11253 amatchNext(tls, pVtabCursor) 11254 11255 return SQLITE_OK 11256 } 11257 11258 func amatchColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 11259 var pCur uintptr = cur 11260 switch i { 11261 case AMATCH_COL_WORD: 11262 { 11263 sqlite3.Xsqlite3_result_text(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent+72+uintptr(2), -1, uintptr(0)) 11264 break 11265 11266 } 11267 case AMATCH_COL_DISTANCE: 11268 { 11269 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_word)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FrCost) 11270 break 11271 11272 } 11273 case AMATCH_COL_LANGUAGE: 11274 { 11275 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 11276 break 11277 11278 } 11279 case AMATCH_COL_NWORD: 11280 { 11281 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord) 11282 break 11283 11284 } 11285 default: 11286 { 11287 sqlite3.Xsqlite3_result_null(tls, ctx) 11288 break 11289 11290 } 11291 } 11292 return SQLITE_OK 11293 } 11294 11295 func amatchRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 11296 var pCur uintptr = cur 11297 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*amatch_cursor)(unsafe.Pointer(pCur)).FiRowid 11298 return SQLITE_OK 11299 } 11300 11301 func amatchEof(tls *libc.TLS, cur uintptr) int32 { 11302 var pCur uintptr = cur 11303 return libc.Bool32((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 11304 } 11305 11306 func amatchBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 11307 var iPlan int32 = 0 11308 var iDistTerm int32 = -1 11309 var iLangTerm int32 = -1 11310 var i int32 11311 var pConstraint uintptr 11312 11313 _ = tab 11314 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 11315 i = 0 11316 __1: 11317 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 11318 goto __3 11319 } 11320 { 11321 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 11322 goto __2 11323 } 11324 if iPlan&1 == 0 && 11325 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 11326 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 11327 iPlan = iPlan | 1 11328 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 11329 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 11330 } 11331 if iPlan&2 == 0 && 11332 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 11333 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 11334 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 11335 iPlan = iPlan | 2 11336 iDistTerm = i 11337 } 11338 if iPlan&4 == 0 && 11339 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 11340 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 11341 iPlan = iPlan | 4 11342 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 11343 iLangTerm = i 11344 } 11345 11346 } 11347 goto __2 11348 __2: 11349 i++ 11350 pConstraint += 12 11351 goto __1 11352 goto __3 11353 __3: 11354 ; 11355 if iPlan&2 != 0 { 11356 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 11357 } 11358 if iPlan&4 != 0 { 11359 var idx int32 = 1 11360 if iPlan&1 != 0 { 11361 idx++ 11362 } 11363 if iPlan&2 != 0 { 11364 idx++ 11365 } 11366 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = idx 11367 } 11368 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 11369 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 11370 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 11371 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 11372 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 11373 } 11374 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10000) 11375 11376 return SQLITE_OK 11377 } 11378 11379 func amatchUpdate(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 11380 bp := tls.Alloc(24) 11381 defer tls.Free(24) 11382 11383 var p uintptr = pVTab 11384 var zCmd uintptr 11385 _ = pRowid 11386 if argc == 1 { 11387 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3842, 11388 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11389 return SQLITE_ERROR 11390 } 11391 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_NULL { 11392 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3872, 11393 libc.VaList(bp+8, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11394 return SQLITE_ERROR 11395 } 11396 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) != SQLITE_NULL || 11397 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4))) != SQLITE_NULL || 11398 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4))) != SQLITE_NULL { 11399 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11400 ts+3900, libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11401 return SQLITE_ERROR 11402 } 11403 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*4))) 11404 if zCmd == uintptr(0) { 11405 return SQLITE_OK 11406 } 11407 11408 return SQLITE_OK 11409 } 11410 11411 var amatchModule = sqlite3_module{ 11412 FxCreate: 0, 11413 FxConnect: 0, 11414 FxBestIndex: 0, 11415 FxDisconnect: 0, 11416 FxDestroy: 0, 11417 FxOpen: 0, 11418 FxClose: 0, 11419 FxFilter: 0, 11420 FxNext: 0, 11421 FxEof: 0, 11422 FxColumn: 0, 11423 FxRowid: 0, 11424 FxUpdate: 0, 11425 } 11426 11427 func sqlite3_amatch_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11428 var rc int32 = SQLITE_OK 11429 _ = pApi 11430 11431 _ = pzErrMsg 11432 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3949, uintptr(unsafe.Pointer(&amatchModule)), uintptr(0)) 11433 return rc 11434 } 11435 11436 var azType = [4]uintptr{ts + 3967, ts + 3973, ts + 2562, ts + 3979} 11437 11438 type carray_bind1 = struct { 11439 FaData uintptr 11440 FnData int32 11441 FmFlags int32 11442 FxDel uintptr 11443 } 11444 11445 type carray_bind = carray_bind1 11446 11447 type carray_cursor1 = struct { 11448 Fbase sqlite3_vtab_cursor 11449 FiRowid sqlite3_int64 11450 FpPtr uintptr 11451 FiCnt sqlite3_int64 11452 FeType uint8 11453 F__ccgo_pad1 [3]byte 11454 } 11455 11456 type carray_cursor = carray_cursor1 11457 11458 func carrayConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 11459 var pNew uintptr 11460 var rc int32 11461 11462 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 11463 ts+3985) 11464 if rc == SQLITE_OK { 11465 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 11466 if pNew == uintptr(0) { 11467 return SQLITE_NOMEM 11468 } 11469 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(sqlite3_vtab{}))) 11470 } 11471 return rc 11472 } 11473 11474 func carrayDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 11475 sqlite3.Xsqlite3_free(tls, pVtab) 11476 return SQLITE_OK 11477 } 11478 11479 func carrayOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 11480 var pCur uintptr 11481 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(carray_cursor{}))) 11482 if pCur == uintptr(0) { 11483 return SQLITE_NOMEM 11484 } 11485 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(carray_cursor{}))) 11486 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 11487 return SQLITE_OK 11488 } 11489 11490 func carrayClose(tls *libc.TLS, cur uintptr) int32 { 11491 sqlite3.Xsqlite3_free(tls, cur) 11492 return SQLITE_OK 11493 } 11494 11495 func carrayNext(tls *libc.TLS, cur uintptr) int32 { 11496 var pCur uintptr = cur 11497 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid++ 11498 return SQLITE_OK 11499 } 11500 11501 func carrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 11502 var pCur uintptr = cur 11503 var x sqlite3_int64 = int64(0) 11504 switch i { 11505 case CARRAY_COLUMN_POINTER: 11506 return SQLITE_OK 11507 case CARRAY_COLUMN_COUNT: 11508 x = (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt 11509 break 11510 case CARRAY_COLUMN_CTYPE: 11511 { 11512 sqlite3.Xsqlite3_result_text(tls, ctx, azType[(*carray_cursor)(unsafe.Pointer(pCur)).FeType], -1, uintptr(0)) 11513 return SQLITE_OK 11514 11515 } 11516 default: 11517 { 11518 switch int32((*carray_cursor)(unsafe.Pointer(pCur)).FeType) { 11519 case CARRAY_INT32: 11520 { 11521 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11522 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*4))) 11523 return SQLITE_OK 11524 11525 } 11526 case CARRAY_INT64: 11527 { 11528 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11529 sqlite3.Xsqlite3_result_int64(tls, ctx, *(*sqlite3_int64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 11530 return SQLITE_OK 11531 11532 } 11533 case CARRAY_DOUBLE: 11534 { 11535 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11536 sqlite3.Xsqlite3_result_double(tls, ctx, *(*float64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 11537 return SQLITE_OK 11538 11539 } 11540 case CARRAY_TEXT: 11541 { 11542 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11543 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*4)), -1, libc.UintptrFromInt32(-1)) 11544 return SQLITE_OK 11545 11546 } 11547 } 11548 11549 } 11550 } 11551 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 11552 return SQLITE_OK 11553 } 11554 11555 func carrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 11556 var pCur uintptr = cur 11557 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid 11558 return SQLITE_OK 11559 } 11560 11561 func carrayEof(tls *libc.TLS, cur uintptr) int32 { 11562 var pCur uintptr = cur 11563 return libc.Bool32((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid > (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt) 11564 } 11565 11566 func carrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 11567 bp := tls.Alloc(8) 11568 defer tls.Free(8) 11569 11570 var pCur uintptr = pVtabCursor 11571 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = uintptr(0) 11572 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = int64(0) 11573 switch idxNum { 11574 case 1: 11575 { 11576 var pBind uintptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4048) 11577 if pBind == uintptr(0) { 11578 break 11579 } 11580 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = (*carray_bind)(unsafe.Pointer(pBind)).FaData 11581 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = sqlite3_int64((*carray_bind)(unsafe.Pointer(pBind)).FnData) 11582 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8((*carray_bind)(unsafe.Pointer(pBind)).FmFlags & 0x03) 11583 break 11584 11585 } 11586 case 2: 11587 fallthrough 11588 case 3: 11589 { 11590 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4060) 11591 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = func() int64 { 11592 if (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr != 0 { 11593 return sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 11594 } 11595 return int64(0) 11596 }() 11597 if idxNum < 3 { 11598 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8(CARRAY_INT32) 11599 } else { 11600 var i uint8 11601 var zType uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 11602 for i = uint8(0); uint32(i) < uint32(unsafe.Sizeof(azType))/uint32(unsafe.Sizeof(uintptr(0))); i++ { 11603 if sqlite3.Xsqlite3_stricmp(tls, zType, azType[i]) == 0 { 11604 break 11605 } 11606 } 11607 if uint32(i) >= uint32(unsafe.Sizeof(azType))/uint32(unsafe.Sizeof(uintptr(0))) { 11608 (*sqlite3_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11609 ts+4067, libc.VaList(bp, zType)) 11610 return SQLITE_ERROR 11611 } else { 11612 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = i 11613 } 11614 } 11615 break 11616 11617 } 11618 } 11619 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 11620 return SQLITE_OK 11621 } 11622 11623 func carrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 11624 var i int32 11625 var ptrIdx int32 = -1 11626 var cntIdx int32 = -1 11627 var ctypeIdx int32 = -1 11628 11629 var pConstraint uintptr 11630 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 11631 i = 0 11632 __1: 11633 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 11634 goto __3 11635 } 11636 { 11637 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 11638 goto __2 11639 } 11640 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 11641 goto __2 11642 } 11643 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 11644 case CARRAY_COLUMN_POINTER: 11645 ptrIdx = i 11646 break 11647 case CARRAY_COLUMN_COUNT: 11648 cntIdx = i 11649 break 11650 case CARRAY_COLUMN_CTYPE: 11651 ctypeIdx = i 11652 break 11653 } 11654 11655 } 11656 goto __2 11657 __2: 11658 i++ 11659 pConstraint += 12 11660 goto __1 11661 goto __3 11662 __3: 11663 ; 11664 if ptrIdx >= 0 { 11665 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).FargvIndex = 1 11666 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).Fomit = uint8(1) 11667 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 11668 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(100) 11669 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 11670 if cntIdx >= 0 { 11671 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).FargvIndex = 2 11672 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).Fomit = uint8(1) 11673 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 11674 if ctypeIdx >= 0 { 11675 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).FargvIndex = 3 11676 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).Fomit = uint8(1) 11677 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 3 11678 } 11679 } 11680 } else { 11681 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2147483647) 11682 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 11683 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 11684 } 11685 return SQLITE_OK 11686 } 11687 11688 var carrayModule = sqlite3_module{ 11689 FxConnect: 0, 11690 FxBestIndex: 0, 11691 FxDisconnect: 0, 11692 FxOpen: 0, 11693 FxClose: 0, 11694 FxFilter: 0, 11695 FxNext: 0, 11696 FxEof: 0, 11697 FxColumn: 0, 11698 FxRowid: 0, 11699 } 11700 11701 func carrayBindDel(tls *libc.TLS, pPtr uintptr) { 11702 var p uintptr = pPtr 11703 if (*carray_bind)(unsafe.Pointer(p)).FxDel != uintptr(0) { 11704 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*carray_bind)(unsafe.Pointer(p)).FxDel})).f(tls, (*carray_bind)(unsafe.Pointer(p)).FaData) 11705 } 11706 sqlite3.Xsqlite3_free(tls, p) 11707 } 11708 11709 func sqlite3_carray_bind(tls *libc.TLS, pStmt uintptr, idx int32, aData uintptr, nData int32, mFlags int32, xDestroy uintptr) int32 { 11710 var pNew uintptr 11711 var i int32 11712 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(carray_bind{}))) 11713 if pNew == uintptr(0) { 11714 if xDestroy != uintptr(0) && xDestroy != libc.UintptrFromInt32(-1) { 11715 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, aData) 11716 } 11717 return SQLITE_NOMEM 11718 } 11719 (*carray_bind)(unsafe.Pointer(pNew)).FnData = nData 11720 (*carray_bind)(unsafe.Pointer(pNew)).FmFlags = mFlags 11721 if xDestroy == libc.UintptrFromInt32(-1) { 11722 var sz sqlite3_int64 = sqlite3_int64(nData) 11723 switch mFlags & 0x03 { 11724 case CARRAY_INT32: 11725 sz = sz * int64(4) 11726 break 11727 fallthrough 11728 case CARRAY_INT64: 11729 sz = sz * int64(8) 11730 break 11731 fallthrough 11732 case CARRAY_DOUBLE: 11733 sz = sz * int64(8) 11734 break 11735 fallthrough 11736 case CARRAY_TEXT: 11737 sz = sz * sqlite3_int64(unsafe.Sizeof(uintptr(0))) 11738 break 11739 } 11740 if mFlags&0x03 == CARRAY_TEXT { 11741 for i = 0; i < nData; i++ { 11742 var z uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*4)) 11743 if z != 0 { 11744 sz = sz + sqlite3_int64(libc.Xstrlen(tls, z)+size_t(1)) 11745 } 11746 } 11747 } 11748 (*carray_bind)(unsafe.Pointer(pNew)).FaData = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 11749 if (*carray_bind)(unsafe.Pointer(pNew)).FaData == uintptr(0) { 11750 sqlite3.Xsqlite3_free(tls, pNew) 11751 return SQLITE_NOMEM 11752 } 11753 if mFlags&0x03 == CARRAY_TEXT { 11754 var az uintptr = (*carray_bind)(unsafe.Pointer(pNew)).FaData 11755 var z uintptr = az + uintptr(nData)*4 11756 for i = 0; i < nData; i++ { 11757 var zData uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*4)) 11758 var n sqlite3_int64 11759 if zData == uintptr(0) { 11760 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*4)) = uintptr(0) 11761 continue 11762 } 11763 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*4)) = z 11764 n = sqlite3_int64(libc.Xstrlen(tls, zData)) 11765 libc.Xmemcpy(tls, z, zData, uint32(n+int64(1))) 11766 z += uintptr(n + int64(1)) 11767 } 11768 } else { 11769 libc.Xmemcpy(tls, (*carray_bind)(unsafe.Pointer(pNew)).FaData, aData, uint32(sz)) 11770 } 11771 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 11772 } else { 11773 (*carray_bind)(unsafe.Pointer(pNew)).FaData = aData 11774 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = xDestroy 11775 } 11776 return sqlite3.Xsqlite3_bind_pointer(tls, pStmt, idx, pNew, ts+4048, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{carrayBindDel}))) 11777 } 11778 11779 func inttoptrFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11780 bp := tls.Alloc(16) 11781 defer tls.Free(16) 11782 11783 *(*sqlite3_int64)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 11784 if uint32(unsafe.Sizeof(sqlite3_int64(0))) == uint32(unsafe.Sizeof(uintptr(0))) { 11785 libc.Xmemcpy(tls, bp, bp+4, uint32(unsafe.Sizeof(uintptr(0)))) 11786 } else { 11787 *(*int32)(unsafe.Pointer(bp + 12)) = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 4)) & int64(0xffffffff)) 11788 libc.Xmemcpy(tls, bp, bp+12, uint32(unsafe.Sizeof(uintptr(0)))) 11789 } 11790 sqlite3.Xsqlite3_result_pointer(tls, context, *(*uintptr)(unsafe.Pointer(bp)), ts+4060, uintptr(0)) 11791 } 11792 11793 func sqlite3_carray_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11794 var rc int32 = SQLITE_OK 11795 _ = pApi 11796 11797 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4060, uintptr(unsafe.Pointer(&carrayModule)), uintptr(0)) 11798 if rc == SQLITE_OK { 11799 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4088, 1, SQLITE_UTF8, uintptr(0), 11800 *(*uintptr)(unsafe.Pointer(&struct { 11801 f func(*libc.TLS, uintptr, int32, uintptr) 11802 }{inttoptrFunc})), uintptr(0), uintptr(0)) 11803 } 11804 return rc 11805 } 11806 11807 type CksmVfs = sqlite3_vfs1 11808 type CksmFile1 = struct { 11809 Fbase sqlite3_file 11810 FzFName uintptr 11811 FcomputeCksm int8 11812 FverifyCksm int8 11813 FisWal int8 11814 FinCkpt int8 11815 FpPartner uintptr 11816 } 11817 11818 type CksmFile = CksmFile1 11819 11820 type u8 = uint8 11821 11822 var cksm_vfs = sqlite3_vfs{ 11823 FiVersion: 3, 11824 FmxPathname: 1024, 11825 FzName: ts + 4097, 11826 FxOpen: 0, 11827 FxDelete: 0, 11828 FxAccess: 0, 11829 FxFullPathname: 0, 11830 FxDlOpen: 0, 11831 FxDlError: 0, 11832 FxDlSym: 0, 11833 FxDlClose: 0, 11834 FxRandomness: 0, 11835 FxSleep: 0, 11836 FxCurrentTime: 0, 11837 FxGetLastError: 0, 11838 FxCurrentTimeInt64: 0, 11839 FxSetSystemCall: 0, 11840 FxGetSystemCall: 0, 11841 FxNextSystemCall: 0, 11842 } 11843 11844 var cksm_io_methods = sqlite3_io_methods{ 11845 FiVersion: 3, 11846 FxClose: 0, 11847 FxRead: 0, 11848 FxWrite: 0, 11849 FxTruncate: 0, 11850 FxSync: 0, 11851 FxFileSize: 0, 11852 FxLock: 0, 11853 FxUnlock: 0, 11854 FxCheckReservedLock: 0, 11855 FxFileControl: 0, 11856 FxSectorSize: 0, 11857 FxDeviceCharacteristics: 0, 11858 FxShmMap: 0, 11859 FxShmLock: 0, 11860 FxShmBarrier: 0, 11861 FxShmUnmap: 0, 11862 FxFetch: 0, 11863 FxUnfetch: 0, 11864 } 11865 11866 func cksmCompute(tls *libc.TLS, a uintptr, nByte int32, aOut uintptr) { 11867 bp := tls.Alloc(12) 11868 defer tls.Free(12) 11869 11870 *(*u32)(unsafe.Pointer(bp + 4)) = u32(0) 11871 *(*u32)(unsafe.Pointer(bp + 8)) = u32(0) 11872 var aData uintptr = a 11873 var aEnd uintptr = a + uintptr(nByte) 11874 *(*u32)(unsafe.Pointer(bp)) = u32(1) 11875 11876 if 1 == int32(*(*u8)(unsafe.Pointer(bp))) { 11877 for __ccgo := true; __ccgo; __ccgo = aData < aEnd { 11878 *(*u32)(unsafe.Pointer(bp + 4)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 8)) 11879 *(*u32)(unsafe.Pointer(bp + 8)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 4)) 11880 } 11881 } else { 11882 for __ccgo1 := true; __ccgo1; __ccgo1 = aData < aEnd { 11883 *(*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)) 11884 *(*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)) 11885 aData += 4 * uintptr(2) 11886 } 11887 *(*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 11888 *(*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 11889 } 11890 libc.Xmemcpy(tls, aOut, bp+4, uint32(4)) 11891 libc.Xmemcpy(tls, aOut+uintptr(4), bp+8, uint32(4)) 11892 } 11893 11894 func cksmVerifyFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11895 bp := tls.Alloc(8) 11896 defer tls.Free(8) 11897 11898 var nByte int32 11899 var data uintptr 11900 11901 data = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 11902 if data == uintptr(0) { 11903 return 11904 } 11905 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_BLOB { 11906 return 11907 } 11908 nByte = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 11909 if nByte < 512 || nByte > 65536 || nByte&(nByte-1) != 0 { 11910 return 11911 } 11912 cksmCompute(tls, data, nByte-8, bp) 11913 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(libc.Xmemcmp(tls, data+uintptr(nByte)-uintptr(8), bp, uint32(8)) == 0)) 11914 } 11915 11916 func cksmClose(tls *libc.TLS, pFile uintptr) int32 { 11917 var p uintptr = pFile 11918 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11919 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = uintptr(0) 11920 (*CksmFile)(unsafe.Pointer(p)).FpPartner = uintptr(0) 11921 } 11922 pFile = pFile + uintptr(1)*16 11923 return (*struct { 11924 f func(*libc.TLS, uintptr) int32 11925 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 11926 } 11927 11928 func cksmSetFlags(tls *libc.TLS, p uintptr, hasCorrectReserveSize int32) { 11929 if hasCorrectReserveSize != int32((*CksmFile)(unsafe.Pointer(p)).FcomputeCksm) { 11930 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = libc.AssignPtrInt8(p+9, int8(hasCorrectReserveSize)) 11931 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11932 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = int8(hasCorrectReserveSize) 11933 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm = int8(hasCorrectReserveSize) 11934 } 11935 } 11936 } 11937 11938 func cksmRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 11939 bp := tls.Alloc(24) 11940 defer tls.Free(24) 11941 11942 var rc int32 11943 var p uintptr = pFile 11944 pFile = pFile + uintptr(1)*16 11945 rc = (*struct { 11946 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 11947 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, zBuf, iAmt, iOfst) 11948 if rc == SQLITE_OK { 11949 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint32(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint32(3)) == 0) { 11950 var d uintptr = zBuf 11951 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 11952 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 11953 } 11954 11955 if iAmt >= 512 && 11956 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm != 0 && 11957 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 11958 cksmCompute(tls, zBuf, iAmt-8, bp+16) 11959 if libc.Xmemcmp(tls, zBuf+uintptr(iAmt)-uintptr(8), bp+16, uint32(8)) != 0 { 11960 sqlite3.Xsqlite3_log(tls, SQLITE_IOERR|int32(32)<<8, 11961 ts+4109, 11962 libc.VaList(bp, iOfst, (*CksmFile)(unsafe.Pointer(p)).FzFName)) 11963 rc = SQLITE_IOERR | int32(32)<<8 11964 } 11965 } 11966 } 11967 return rc 11968 } 11969 11970 func cksmWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 11971 var p uintptr = pFile 11972 pFile = pFile + uintptr(1)*16 11973 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint32(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint32(3)) == 0) { 11974 var d uintptr = zBuf 11975 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 11976 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 11977 } 11978 11979 if iAmt >= 512 && 11980 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && 11981 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 11982 cksmCompute(tls, zBuf, iAmt-8, zBuf+uintptr(iAmt)-uintptr(8)) 11983 } 11984 return (*struct { 11985 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 11986 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, zBuf, iAmt, iOfst) 11987 } 11988 11989 func cksmTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 11990 pFile = pFile + uintptr(1)*16 11991 return (*struct { 11992 f func(*libc.TLS, uintptr, sqlite3_int64) int32 11993 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxTruncate})).f(tls, pFile, size) 11994 } 11995 11996 func cksmSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 11997 pFile = pFile + uintptr(1)*16 11998 return (*struct { 11999 f func(*libc.TLS, uintptr, int32) int32 12000 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 12001 } 12002 12003 func cksmFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 12004 var p uintptr = pFile 12005 pFile = p + uintptr(1)*16 12006 return (*struct { 12007 f func(*libc.TLS, uintptr, uintptr) int32 12008 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileSize})).f(tls, pFile, pSize) 12009 } 12010 12011 func cksmLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 12012 pFile = pFile + uintptr(1)*16 12013 return (*struct { 12014 f func(*libc.TLS, uintptr, int32) int32 12015 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 12016 } 12017 12018 func cksmUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 12019 pFile = pFile + uintptr(1)*16 12020 return (*struct { 12021 f func(*libc.TLS, uintptr, int32) int32 12022 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 12023 } 12024 12025 func cksmCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 12026 pFile = pFile + uintptr(1)*16 12027 return (*struct { 12028 f func(*libc.TLS, uintptr, uintptr) int32 12029 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 12030 } 12031 12032 func cksmFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 12033 bp := tls.Alloc(16) 12034 defer tls.Free(16) 12035 12036 var rc int32 12037 var p uintptr = pFile 12038 pFile = pFile + uintptr(1)*16 12039 if op == SQLITE_FCNTL_PRAGMA { 12040 var azArg uintptr = pArg 12041 12042 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*4)), ts+4144) == 0 { 12043 var zArg uintptr = *(*uintptr)(unsafe.Pointer(azArg + 2*4)) 12044 if zArg != uintptr(0) { 12045 if int32(*(*int8)(unsafe.Pointer(zArg))) >= '1' && int32(*(*int8)(unsafe.Pointer(zArg))) <= '9' || 12046 sqlite3.Xsqlite3_strlike(tls, ts+4166, zArg, uint32(0)) == 0 || 12047 sqlite3.Xsqlite3_stricmp(tls, ts+4174, zArg) == 0 || 12048 sqlite3.Xsqlite3_stricmp(tls, ts+4178, zArg) == 0 { 12049 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm 12050 } else { 12051 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = int8(0) 12052 } 12053 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12054 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FverifyCksm 12055 } 12056 } 12057 *(*uintptr)(unsafe.Pointer(azArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, int32((*CksmFile)(unsafe.Pointer(p)).FverifyCksm))) 12058 return SQLITE_OK 12059 } else if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && *(*uintptr)(unsafe.Pointer(azArg + 2*4)) != uintptr(0) && 12060 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*4)), ts+4181) == 0 { 12061 return SQLITE_OK 12062 } 12063 } else if op == SQLITE_FCNTL_CKPT_START || op == SQLITE_FCNTL_CKPT_DONE { 12064 (*CksmFile)(unsafe.Pointer(p)).FinCkpt = int8(libc.Bool32(op == SQLITE_FCNTL_CKPT_START)) 12065 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12066 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FinCkpt = (*CksmFile)(unsafe.Pointer(p)).FinCkpt 12067 } 12068 } else if op == SQLITE_FCNTL_CKSM_FILE { 12069 var ppFile uintptr = pArg 12070 *(*uintptr)(unsafe.Pointer(ppFile)) = p 12071 return SQLITE_OK 12072 } 12073 rc = (*struct { 12074 f func(*libc.TLS, uintptr, int32, uintptr) int32 12075 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 12076 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 12077 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+4191, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(pArg)))) 12078 } 12079 return rc 12080 } 12081 12082 func cksmSectorSize(tls *libc.TLS, pFile uintptr) int32 { 12083 pFile = pFile + uintptr(1)*16 12084 return (*struct { 12085 f func(*libc.TLS, uintptr) int32 12086 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 12087 } 12088 12089 func cksmDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 12090 pFile = pFile + uintptr(1)*16 12091 return (*struct { 12092 f func(*libc.TLS, uintptr) int32 12093 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 12094 } 12095 12096 func cksmShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 12097 pFile = pFile + uintptr(1)*16 12098 return (*struct { 12099 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 12100 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 12101 } 12102 12103 func cksmShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 12104 pFile = pFile + uintptr(1)*16 12105 return (*struct { 12106 f func(*libc.TLS, uintptr, int32, int32, int32) int32 12107 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 12108 } 12109 12110 func cksmShmBarrier(tls *libc.TLS, pFile uintptr) { 12111 pFile = pFile + uintptr(1)*16 12112 (*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) 12113 } 12114 12115 func cksmShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 12116 pFile = pFile + uintptr(1)*16 12117 return (*struct { 12118 f func(*libc.TLS, uintptr, int32) int32 12119 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 12120 } 12121 12122 func cksmFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 12123 var p uintptr = pFile 12124 if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 { 12125 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 12126 return SQLITE_OK 12127 } 12128 pFile = pFile + uintptr(1)*16 12129 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 { 12130 return (*struct { 12131 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 12132 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch})).f(tls, pFile, iOfst, iAmt, pp) 12133 } 12134 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 12135 return SQLITE_OK 12136 } 12137 12138 func cksmUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 12139 pFile = pFile + uintptr(1)*16 12140 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 { 12141 return (*struct { 12142 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 12143 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch})).f(tls, pFile, iOfst, pPage) 12144 } 12145 return SQLITE_OK 12146 } 12147 12148 func cksmOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 12149 bp := tls.Alloc(4) 12150 defer tls.Free(4) 12151 12152 var p uintptr 12153 var pSubFile uintptr 12154 var pSubVfs uintptr 12155 var rc int32 12156 12157 pSubVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 12158 if !(flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0) { 12159 goto __1 12160 } 12161 return (*struct { 12162 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 12163 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pFile, flags, pOutFlags) 12164 __1: 12165 ; 12166 p = pFile 12167 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(CksmFile{}))) 12168 pSubFile = pFile + uintptr(1)*16 12169 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&cksm_io_methods)) 12170 rc = (*struct { 12171 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 12172 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pSubFile, flags, pOutFlags) 12173 if !(rc != 0) { 12174 goto __2 12175 } 12176 goto cksm_open_done 12177 __2: 12178 ; 12179 if !(flags&SQLITE_OPEN_WAL != 0) { 12180 goto __3 12181 } 12182 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_database_file_object(tls, zName) 12183 rc = (*struct { 12184 f func(*libc.TLS, uintptr, int32, uintptr) int32 12185 })(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) 12186 12187 (*CksmFile)(unsafe.Pointer(p)).FpPartner = *(*uintptr)(unsafe.Pointer(bp)) 12188 12189 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = p 12190 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(1) 12191 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm 12192 goto __4 12193 __3: 12194 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(0) 12195 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = int8(0) 12196 __4: 12197 ; 12198 (*CksmFile)(unsafe.Pointer(p)).FzFName = zName 12199 cksm_open_done: 12200 if !(rc != 0) { 12201 goto __5 12202 } 12203 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 12204 __5: 12205 ; 12206 return rc 12207 } 12208 12209 func cksmDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 12210 return (*struct { 12211 f func(*libc.TLS, uintptr, uintptr, int32) int32 12212 })(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) 12213 } 12214 12215 func cksmAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 12216 return (*struct { 12217 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 12218 })(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) 12219 } 12220 12221 func cksmFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 12222 return (*struct { 12223 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 12224 })(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) 12225 } 12226 12227 func cksmDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 12228 return (*struct { 12229 f func(*libc.TLS, uintptr, uintptr) uintptr 12230 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 12231 } 12232 12233 func cksmDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 12234 (*struct { 12235 f func(*libc.TLS, uintptr, int32, uintptr) 12236 })(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) 12237 } 12238 12239 func cksmDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 12240 return (*struct { 12241 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 12242 })(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) 12243 } 12244 12245 func cksmDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 12246 (*struct { 12247 f func(*libc.TLS, uintptr, uintptr) 12248 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 12249 } 12250 12251 func cksmRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 12252 return (*struct { 12253 f func(*libc.TLS, uintptr, int32, uintptr) int32 12254 })(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) 12255 } 12256 12257 func cksmSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 12258 return (*struct { 12259 f func(*libc.TLS, uintptr, int32) int32 12260 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 12261 } 12262 12263 func cksmCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 12264 return (*struct { 12265 f func(*libc.TLS, uintptr, uintptr) int32 12266 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 12267 } 12268 12269 func cksmGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 12270 return (*struct { 12271 f func(*libc.TLS, uintptr, int32, uintptr) int32 12272 })(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) 12273 } 12274 12275 func cksmCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 12276 bp := tls.Alloc(8) 12277 defer tls.Free(8) 12278 12279 var pOrig uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 12280 var rc int32 12281 12282 if (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64 != 0 { 12283 rc = (*struct { 12284 f func(*libc.TLS, uintptr, uintptr) int32 12285 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64})).f(tls, pOrig, p) 12286 } else { 12287 rc = (*struct { 12288 f func(*libc.TLS, uintptr, uintptr) int32 12289 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTime})).f(tls, pOrig, bp) 12290 *(*sqlite3_int64)(unsafe.Pointer(p)) = libc.Int64FromFloat64(*(*float64)(unsafe.Pointer(bp)) * 86400000.0) 12291 } 12292 return rc 12293 } 12294 12295 func cksmSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 12296 return (*struct { 12297 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 12298 })(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) 12299 } 12300 12301 func cksmGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 12302 return (*struct { 12303 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 12304 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 12305 } 12306 12307 func cksmNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 12308 return (*struct { 12309 f func(*libc.TLS, uintptr, uintptr) uintptr 12310 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 12311 } 12312 12313 func cksmRegisterFunc(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 12314 var rc int32 12315 if db == uintptr(0) { 12316 return SQLITE_OK 12317 } 12318 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4199, 1, 12319 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 12320 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 12321 f func(*libc.TLS, uintptr, int32, uintptr) 12322 }{cksmVerifyFunc})), uintptr(0), uintptr(0)) 12323 return rc 12324 } 12325 12326 func cksmRegisterVfs(tls *libc.TLS) int32 { 12327 var rc int32 = SQLITE_OK 12328 var pOrig uintptr 12329 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != uintptr(0) { 12330 return SQLITE_OK 12331 } 12332 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 12333 if pOrig == uintptr(0) { 12334 return SQLITE_ERROR 12335 } 12336 cksm_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 12337 cksm_vfs.FpAppData = pOrig 12338 cksm_vfs.FszOsFile = int32(uint32((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint32(unsafe.Sizeof(CksmFile{}))) 12339 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&cksm_vfs)), 1) 12340 if rc == SQLITE_OK { 12341 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 12342 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 12343 }{cksmRegisterFunc}))) 12344 } 12345 return rc 12346 } 12347 12348 func sqlite3_register_cksumvfs(tls *libc.TLS, NotUsed uintptr) int32 { 12349 _ = NotUsed 12350 return cksmRegisterVfs(tls) 12351 } 12352 12353 func sqlite3_unregister_cksumvfs(tls *libc.TLS) int32 { 12354 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != 0 { 12355 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&cksm_vfs))) 12356 sqlite3.Xsqlite3_cancel_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 12357 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 12358 }{cksmRegisterFunc}))) 12359 } 12360 return SQLITE_OK 12361 } 12362 12363 type closure_vtab1 = struct { 12364 Fbase sqlite3_vtab 12365 FzDb uintptr 12366 FzSelf uintptr 12367 FzTableName uintptr 12368 FzIdColumn uintptr 12369 FzParentColumn uintptr 12370 Fdb uintptr 12371 FnCursor int32 12372 } 12373 12374 type closure_vtab = closure_vtab1 12375 type closure_cursor1 = struct { 12376 Fbase sqlite3_vtab_cursor 12377 FpVtab uintptr 12378 FzTableName uintptr 12379 FzIdColumn uintptr 12380 FzParentColumn uintptr 12381 FpCurrent uintptr 12382 FpClosure uintptr 12383 } 12384 12385 type closure_cursor = closure_cursor1 12386 type closure_queue1 = struct { 12387 FpFirst uintptr 12388 FpLast uintptr 12389 } 12390 12391 type closure_queue = closure_queue1 12392 type closure_avl1 = struct { 12393 Fid sqlite3_int64 12394 FiGeneration int32 12395 FpList uintptr 12396 FpBefore uintptr 12397 FpAfter uintptr 12398 FpUp uintptr 12399 Fheight int16 12400 Fimbalance int16 12401 } 12402 12403 type closure_avl = closure_avl1 12404 12405 func closureAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 12406 var hBefore int16 12407 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12408 hBefore = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 12409 } else { 12410 hBefore = int16(0) 12411 } 12412 var hAfter int16 12413 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12414 hAfter = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 12415 } else { 12416 hAfter = int16(0) 12417 } 12418 (*closure_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 12419 (*closure_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 12420 if int32(hBefore) > int32(hAfter) { 12421 return int32(hBefore) 12422 } 12423 return int32(hAfter) 12424 }() + 1) 12425 } 12426 12427 func closureAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 12428 var pB uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpBefore 12429 var pY uintptr = (*closure_avl)(unsafe.Pointer(pB)).FpAfter 12430 (*closure_avl)(unsafe.Pointer(pB)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 12431 (*closure_avl)(unsafe.Pointer(pB)).FpAfter = pP 12432 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pB 12433 (*closure_avl)(unsafe.Pointer(pP)).FpBefore = pY 12434 if pY != 0 { 12435 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 12436 } 12437 closureAvlRecomputeHeight(tls, pP) 12438 closureAvlRecomputeHeight(tls, pB) 12439 return pB 12440 } 12441 12442 func closureAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 12443 var pA uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpAfter 12444 var pY uintptr = (*closure_avl)(unsafe.Pointer(pA)).FpBefore 12445 (*closure_avl)(unsafe.Pointer(pA)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 12446 (*closure_avl)(unsafe.Pointer(pA)).FpBefore = pP 12447 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pA 12448 (*closure_avl)(unsafe.Pointer(pP)).FpAfter = pY 12449 if pY != 0 { 12450 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 12451 } 12452 closureAvlRecomputeHeight(tls, pP) 12453 closureAvlRecomputeHeight(tls, pA) 12454 return pA 12455 } 12456 12457 func closureAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 12458 var pUp uintptr = (*closure_avl)(unsafe.Pointer(p)).FpUp 12459 if pUp == uintptr(0) { 12460 return pp 12461 } 12462 if (*closure_avl)(unsafe.Pointer(pUp)).FpAfter == p { 12463 return pUp + 20 12464 } 12465 return pUp + 16 12466 } 12467 12468 func closureAvlBalance(tls *libc.TLS, p uintptr) uintptr { 12469 bp := tls.Alloc(4) 12470 defer tls.Free(4) 12471 *(*uintptr)(unsafe.Pointer(bp)) = p 12472 12473 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 12474 var pp uintptr 12475 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 12476 closureAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 12477 if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 12478 var pB uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 12479 if int32((*closure_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 12480 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = closureAvlRotateAfter(tls, pB) 12481 } 12482 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12483 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12484 } else if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 12485 var pA uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 12486 if int32((*closure_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 12487 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = closureAvlRotateBefore(tls, pA) 12488 } 12489 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12490 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12491 } 12492 pTop = *(*uintptr)(unsafe.Pointer(bp)) 12493 *(*uintptr)(unsafe.Pointer(bp)) = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 12494 } 12495 return pTop 12496 } 12497 12498 func closureAvlSearch(tls *libc.TLS, p uintptr, id sqlite3_int64) uintptr { 12499 for p != 0 && id != (*closure_avl)(unsafe.Pointer(p)).Fid { 12500 if id < (*closure_avl)(unsafe.Pointer(p)).Fid { 12501 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12502 } else { 12503 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 12504 } 12505 } 12506 return p 12507 } 12508 12509 func closureAvlFirst(tls *libc.TLS, p uintptr) uintptr { 12510 if p != 0 { 12511 for (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12512 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12513 } 12514 } 12515 return p 12516 } 12517 12518 func closureAvlNext(tls *libc.TLS, p uintptr) uintptr { 12519 var pPrev uintptr = uintptr(0) 12520 for p != 0 && (*closure_avl)(unsafe.Pointer(p)).FpAfter == pPrev { 12521 pPrev = p 12522 p = (*closure_avl)(unsafe.Pointer(p)).FpUp 12523 } 12524 if p != 0 && pPrev == uintptr(0) { 12525 p = closureAvlFirst(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter) 12526 } 12527 return p 12528 } 12529 12530 func closureAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 12531 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 12532 if p == uintptr(0) { 12533 p = pNew 12534 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 12535 } else { 12536 for p != 0 { 12537 if (*closure_avl)(unsafe.Pointer(pNew)).Fid < (*closure_avl)(unsafe.Pointer(p)).Fid { 12538 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12539 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12540 } else { 12541 (*closure_avl)(unsafe.Pointer(p)).FpBefore = pNew 12542 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 12543 break 12544 } 12545 } else if (*closure_avl)(unsafe.Pointer(pNew)).Fid > (*closure_avl)(unsafe.Pointer(p)).Fid { 12546 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12547 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 12548 } else { 12549 (*closure_avl)(unsafe.Pointer(p)).FpAfter = pNew 12550 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 12551 break 12552 } 12553 } else { 12554 return p 12555 } 12556 } 12557 } 12558 (*closure_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 12559 (*closure_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 12560 (*closure_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 12561 (*closure_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 12562 *(*uintptr)(unsafe.Pointer(ppHead)) = closureAvlBalance(tls, p) 12563 return uintptr(0) 12564 } 12565 12566 func closureAvlDestroy(tls *libc.TLS, p uintptr, xDestroy uintptr) { 12567 if p != 0 { 12568 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpBefore, xDestroy) 12569 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter, xDestroy) 12570 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, p) 12571 } 12572 } 12573 12574 func queuePush(tls *libc.TLS, pQueue uintptr, pNode uintptr) { 12575 (*closure_avl)(unsafe.Pointer(pNode)).FpList = uintptr(0) 12576 if (*closure_queue)(unsafe.Pointer(pQueue)).FpLast != 0 { 12577 (*closure_avl)(unsafe.Pointer((*closure_queue)(unsafe.Pointer(pQueue)).FpLast)).FpList = pNode 12578 } else { 12579 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = pNode 12580 } 12581 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = pNode 12582 } 12583 12584 func queuePull(tls *libc.TLS, pQueue uintptr) uintptr { 12585 var p uintptr = (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst 12586 if p != 0 { 12587 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = (*closure_avl)(unsafe.Pointer(p)).FpList 12588 if (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst == uintptr(0) { 12589 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = uintptr(0) 12590 } 12591 } 12592 return p 12593 } 12594 12595 func closureDequote(tls *libc.TLS, zIn uintptr) uintptr { 12596 var nIn sqlite3_int64 12597 var zOut uintptr 12598 12599 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 12600 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 12601 if zOut != 0 { 12602 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 12603 12604 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 12605 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 12606 } else { 12607 var iOut int32 = 0 12608 var iIn int32 12609 12610 if int32(q) == '[' { 12611 q = int8(']') 12612 } 12613 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 12614 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 12615 iIn++ 12616 } 12617 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 12618 } 12619 } 12620 12621 } 12622 return zOut 12623 } 12624 12625 func closureFree(tls *libc.TLS, p uintptr) { 12626 if p != 0 { 12627 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzDb) 12628 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzSelf) 12629 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzTableName) 12630 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzIdColumn) 12631 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzParentColumn) 12632 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(closure_vtab{}))) 12633 sqlite3.Xsqlite3_free(tls, p) 12634 } 12635 } 12636 12637 func closureDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 12638 var p uintptr = pVtab 12639 12640 closureFree(tls, p) 12641 return SQLITE_OK 12642 } 12643 12644 func closureValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 12645 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 12646 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 12647 var i int32 12648 if nStr < nKey+1 { 12649 return uintptr(0) 12650 } 12651 if libc.Xmemcmp(tls, zStr, zKey, uint32(nKey)) != 0 { 12652 return uintptr(0) 12653 } 12654 for i = nKey; int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i))))))*2)))&int32(_ISspace) != 0; i++ { 12655 } 12656 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 12657 return uintptr(0) 12658 } 12659 i++ 12660 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i))))))*2)))&int32(_ISspace) != 0 { 12661 i++ 12662 } 12663 return zStr + uintptr(i) 12664 } 12665 12666 func closureConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 12667 bp := tls.Alloc(24) 12668 defer tls.Free(24) 12669 12670 var rc int32 12671 var pNew uintptr 12672 var zDb uintptr 12673 var zVal uintptr 12674 var i int32 12675 rc = SQLITE_OK 12676 pNew = uintptr(0) 12677 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*4)) 12678 12679 _ = pAux 12680 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12681 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_vtab{}))) 12682 if !(pNew == uintptr(0)) { 12683 goto __1 12684 } 12685 return SQLITE_NOMEM 12686 __1: 12687 ; 12688 rc = SQLITE_NOMEM 12689 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(closure_vtab{}))) 12690 (*closure_vtab)(unsafe.Pointer(pNew)).Fdb = db 12691 (*closure_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zDb)) 12692 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 12693 goto __2 12694 } 12695 goto closureConnectError 12696 __2: 12697 ; 12698 (*closure_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 12699 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 12700 goto __3 12701 } 12702 goto closureConnectError 12703 __3: 12704 ; 12705 i = 3 12706 __4: 12707 if !(i < argc) { 12708 goto __6 12709 } 12710 zVal = closureValueOfKey(tls, ts+4215, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 12711 if !(zVal != 0) { 12712 goto __7 12713 } 12714 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName) 12715 (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName = closureDequote(tls, zVal) 12716 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0)) { 12717 goto __8 12718 } 12719 goto closureConnectError 12720 __8: 12721 ; 12722 goto __5 12723 __7: 12724 ; 12725 zVal = closureValueOfKey(tls, ts+4225, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 12726 if !(zVal != 0) { 12727 goto __9 12728 } 12729 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn) 12730 (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn = closureDequote(tls, zVal) 12731 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn == uintptr(0)) { 12732 goto __10 12733 } 12734 goto closureConnectError 12735 __10: 12736 ; 12737 goto __5 12738 __9: 12739 ; 12740 zVal = closureValueOfKey(tls, ts+4234, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 12741 if !(zVal != 0) { 12742 goto __11 12743 } 12744 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn) 12745 (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn = closureDequote(tls, zVal) 12746 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn == uintptr(0)) { 12747 goto __12 12748 } 12749 goto closureConnectError 12750 __12: 12751 ; 12752 goto __5 12753 __11: 12754 ; 12755 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)))) 12756 closureFree(tls, pNew) 12757 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12758 return SQLITE_ERROR 12759 goto __5 12760 __5: 12761 i++ 12762 goto __4 12763 goto __6 12764 __6: 12765 ; 12766 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 12767 ts+4247) 12768 if !(rc != SQLITE_OK) { 12769 goto __13 12770 } 12771 closureFree(tls, pNew) 12772 __13: 12773 ; 12774 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 12775 return rc 12776 12777 closureConnectError: 12778 closureFree(tls, pNew) 12779 return rc 12780 } 12781 12782 func closureOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 12783 var p uintptr = pVTab 12784 var pCur uintptr 12785 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_cursor{}))) 12786 if pCur == uintptr(0) { 12787 return SQLITE_NOMEM 12788 } 12789 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(closure_cursor{}))) 12790 (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab = p 12791 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 12792 (*closure_vtab)(unsafe.Pointer(p)).FnCursor++ 12793 return SQLITE_OK 12794 } 12795 12796 func closureClearCursor(tls *libc.TLS, pCur uintptr) { 12797 closureAvlDestroy(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 12798 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName) 12799 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn) 12800 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn) 12801 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = uintptr(0) 12802 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = uintptr(0) 12803 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = uintptr(0) 12804 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 12805 (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure = uintptr(0) 12806 } 12807 12808 func closureClose(tls *libc.TLS, cur uintptr) int32 { 12809 var pCur uintptr = cur 12810 closureClearCursor(tls, pCur) 12811 (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 12812 sqlite3.Xsqlite3_free(tls, pCur) 12813 return SQLITE_OK 12814 } 12815 12816 func closureNext(tls *libc.TLS, cur uintptr) int32 { 12817 var pCur uintptr = cur 12818 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlNext(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent) 12819 return SQLITE_OK 12820 } 12821 12822 func closureInsertNode(tls *libc.TLS, pQueue uintptr, pCur uintptr, id sqlite3_int64, iGeneration int32) int32 { 12823 var pNew uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_avl{}))) 12824 if pNew == uintptr(0) { 12825 return SQLITE_NOMEM 12826 } 12827 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(closure_avl{}))) 12828 (*closure_avl)(unsafe.Pointer(pNew)).Fid = id 12829 (*closure_avl)(unsafe.Pointer(pNew)).FiGeneration = iGeneration 12830 closureAvlInsert(tls, pCur+24, pNew) 12831 queuePush(tls, pQueue, pNew) 12832 return SQLITE_OK 12833 } 12834 12835 func closureFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 12836 bp := tls.Alloc(84) 12837 defer tls.Free(84) 12838 12839 var pCur uintptr = pVtabCursor 12840 var pVtab uintptr = (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab 12841 var iRoot sqlite3_int64 12842 var mxGen int32 = 999999999 12843 var zSql uintptr 12844 12845 var pAvl uintptr 12846 var rc int32 = SQLITE_OK 12847 var zTableName uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName 12848 var zIdColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn 12849 var zParentColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn 12850 12851 _ = idxStr 12852 _ = argc 12853 closureClearCursor(tls, pCur) 12854 libc.Xmemset(tls, bp+72, 0, uint32(unsafe.Sizeof(closure_queue{}))) 12855 if idxNum&1 == 0 { 12856 return SQLITE_OK 12857 } 12858 iRoot = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 12859 if idxNum&0x000f0 != 0 { 12860 mxGen = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>4&0x0f)*4))) 12861 if idxNum&0x00002 != 0 { 12862 mxGen-- 12863 } 12864 } 12865 if idxNum&0x00f00 != 0 { 12866 zTableName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>8&0x0f)*4))) 12867 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 12868 } 12869 if idxNum&0x0f000 != 0 { 12870 zIdColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>12&0x0f)*4))) 12871 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zIdColumn)) 12872 } 12873 if idxNum&0x0f0000 != 0 { 12874 zParentColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>16&0x0f)*4))) 12875 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zParentColumn)) 12876 } 12877 12878 zSql = sqlite3.Xsqlite3_mprintf(tls, 12879 ts+4337, 12880 libc.VaList(bp+24, zTableName, zIdColumn, zTableName, zTableName, zParentColumn)) 12881 if zSql == uintptr(0) { 12882 return SQLITE_NOMEM 12883 } else { 12884 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, bp+80, uintptr(0)) 12885 sqlite3.Xsqlite3_free(tls, zSql) 12886 if rc != 0 { 12887 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fbase.FzErrMsg) 12888 (*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))) 12889 return rc 12890 } 12891 } 12892 if rc == SQLITE_OK { 12893 rc = closureInsertNode(tls, bp+72, pCur, iRoot, 0) 12894 } 12895 for libc.AssignUintptr(&pAvl, queuePull(tls, bp+72)) != uintptr(0) { 12896 if (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration >= mxGen { 12897 continue 12898 } 12899 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 1, (*closure_avl)(unsafe.Pointer(pAvl)).Fid) 12900 for rc == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) == SQLITE_ROW { 12901 if sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) == SQLITE_INTEGER { 12902 var iNew sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 12903 if closureAvlSearch(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, iNew) == uintptr(0) { 12904 rc = closureInsertNode(tls, bp+72, pCur, iNew, (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration+1) 12905 } 12906 } 12907 } 12908 sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 12909 } 12910 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 12911 if rc == SQLITE_OK { 12912 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlFirst(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure) 12913 } 12914 12915 return rc 12916 } 12917 12918 func closureColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 12919 var pCur uintptr = cur 12920 switch i { 12921 case CLOSURE_COL_ID: 12922 { 12923 sqlite3.Xsqlite3_result_int64(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid) 12924 break 12925 12926 } 12927 case CLOSURE_COL_DEPTH: 12928 { 12929 sqlite3.Xsqlite3_result_int(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FiGeneration) 12930 break 12931 12932 } 12933 case CLOSURE_COL_ROOT: 12934 { 12935 sqlite3.Xsqlite3_result_null(tls, ctx) 12936 break 12937 12938 } 12939 case CLOSURE_COL_TABLENAME: 12940 { 12941 sqlite3.Xsqlite3_result_text(tls, ctx, 12942 func() uintptr { 12943 if (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName != 0 { 12944 return (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName 12945 } 12946 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzTableName 12947 }(), 12948 -1, libc.UintptrFromInt32(-1)) 12949 break 12950 12951 } 12952 case CLOSURE_COL_IDCOLUMN: 12953 { 12954 sqlite3.Xsqlite3_result_text(tls, ctx, 12955 func() uintptr { 12956 if (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn != 0 { 12957 return (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn 12958 } 12959 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzIdColumn 12960 }(), 12961 -1, libc.UintptrFromInt32(-1)) 12962 break 12963 12964 } 12965 case CLOSURE_COL_PARENTCOLUMN: 12966 { 12967 sqlite3.Xsqlite3_result_text(tls, ctx, 12968 func() uintptr { 12969 if (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn != 0 { 12970 return (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn 12971 } 12972 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzParentColumn 12973 }(), 12974 -1, libc.UintptrFromInt32(-1)) 12975 break 12976 12977 } 12978 } 12979 return SQLITE_OK 12980 } 12981 12982 func closureRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 12983 var pCur uintptr = cur 12984 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid 12985 return SQLITE_OK 12986 } 12987 12988 func closureEof(tls *libc.TLS, cur uintptr) int32 { 12989 var pCur uintptr = cur 12990 return libc.Bool32((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 12991 } 12992 12993 func closureBestIndex(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) int32 { 12994 var iPlan int32 = 0 12995 var i int32 12996 var idx int32 = 1 12997 var pConstraint uintptr 12998 var pVtab uintptr = pTab 12999 var rCost float64 = 10000000.0 13000 13001 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 13002 i = 0 13003 __1: 13004 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 13005 goto __3 13006 } 13007 { 13008 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 13009 goto __2 13010 } 13011 if iPlan&1 == 0 && 13012 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_ROOT && 13013 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13014 iPlan = iPlan | 1 13015 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 13016 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13017 rCost = rCost / 100.0 13018 } 13019 if iPlan&0x0000f0 == 0 && 13020 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_DEPTH && 13021 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 13022 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE || 13023 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 13024 iPlan = iPlan | idx<<4 13025 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13026 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 13027 iPlan = iPlan | 0x000002 13028 } 13029 rCost = rCost / 5.0 13030 } 13031 if iPlan&0x000f00 == 0 && 13032 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_TABLENAME && 13033 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13034 iPlan = iPlan | idx<<8 13035 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13036 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13037 rCost = rCost / 5.0 13038 } 13039 if iPlan&0x00f000 == 0 && 13040 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_IDCOLUMN && 13041 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13042 iPlan = iPlan | idx<<12 13043 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13044 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13045 } 13046 if iPlan&0x0f0000 == 0 && 13047 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_PARENTCOLUMN && 13048 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13049 iPlan = iPlan | idx<<16 13050 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13051 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13052 } 13053 13054 } 13055 goto __2 13056 __2: 13057 i++ 13058 pConstraint += 12 13059 goto __1 13060 goto __3 13061 __3: 13062 ; 13063 if (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName == uintptr(0) && iPlan&0x000f00 == 0 || 13064 (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn == uintptr(0) && iPlan&0x00f000 == 0 || 13065 (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn == uintptr(0) && iPlan&0x0f0000 == 0 { 13066 iPlan = 0 13067 } 13068 if iPlan&1 == 0 { 13069 rCost = rCost * 1e30 13070 i = 0 13071 __4: 13072 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 13073 goto __6 13074 } 13075 { 13076 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 0 13077 13078 } 13079 goto __5 13080 __5: 13081 i++ 13082 pConstraint += 12 13083 goto __4 13084 goto __6 13085 __6: 13086 ; 13087 iPlan = 0 13088 } 13089 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 13090 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 13091 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == CLOSURE_COL_ID && 13092 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 13093 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 13094 } 13095 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 13096 13097 return SQLITE_OK 13098 } 13099 13100 var closureModule = sqlite3_module{ 13101 FxCreate: 0, 13102 FxConnect: 0, 13103 FxBestIndex: 0, 13104 FxDisconnect: 0, 13105 FxDestroy: 0, 13106 FxOpen: 0, 13107 FxClose: 0, 13108 FxFilter: 0, 13109 FxNext: 0, 13110 FxEof: 0, 13111 FxColumn: 0, 13112 FxRowid: 0, 13113 } 13114 13115 func sqlite3_closure_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 13116 var rc int32 = SQLITE_OK 13117 _ = pApi 13118 13119 _ = pzErrMsg 13120 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4383, uintptr(unsafe.Pointer(&closureModule)), uintptr(0)) 13121 return rc 13122 } 13123 13124 type CsvReader1 = struct { 13125 Fin uintptr 13126 Fz uintptr 13127 Fn int32 13128 FnAlloc int32 13129 FnLine int32 13130 FbNotFirst int32 13131 FcTerm int32 13132 FiIn size_t 13133 FnIn size_t 13134 FzIn uintptr 13135 FzErr [200]int8 13136 } 13137 13138 type CsvReader = CsvReader1 13139 13140 func csv_reader_init(tls *libc.TLS, p uintptr) { 13141 (*CsvReader)(unsafe.Pointer(p)).Fin = uintptr(0) 13142 (*CsvReader)(unsafe.Pointer(p)).Fz = uintptr(0) 13143 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13144 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = 0 13145 (*CsvReader)(unsafe.Pointer(p)).FnLine = 0 13146 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 0 13147 (*CsvReader)(unsafe.Pointer(p)).FnIn = size_t(0) 13148 (*CsvReader)(unsafe.Pointer(p)).FzIn = uintptr(0) 13149 *(*int8)(unsafe.Pointer(p + 40)) = int8(0) 13150 } 13151 13152 func csv_reader_reset(tls *libc.TLS, p uintptr) { 13153 if (*CsvReader)(unsafe.Pointer(p)).Fin != 0 { 13154 libc.Xfclose(tls, (*CsvReader)(unsafe.Pointer(p)).Fin) 13155 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 13156 } 13157 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).Fz) 13158 csv_reader_init(tls, p) 13159 } 13160 13161 func csv_errmsg(tls *libc.TLS, p uintptr, zFormat uintptr, va uintptr) { 13162 var ap va_list 13163 _ = ap 13164 ap = va 13165 sqlite3.Xsqlite3_vsnprintf(tls, CSV_MXERR, p+40, zFormat, ap) 13166 _ = ap 13167 } 13168 13169 func csv_reader_open(tls *libc.TLS, p uintptr, zFilename uintptr, zData uintptr) int32 { 13170 bp := tls.Alloc(8) 13171 defer tls.Free(8) 13172 13173 if zFilename != 0 { 13174 (*CsvReader)(unsafe.Pointer(p)).FzIn = sqlite3.Xsqlite3_malloc(tls, CSV_INBUFSZ) 13175 if (*CsvReader)(unsafe.Pointer(p)).FzIn == uintptr(0) { 13176 csv_errmsg(tls, p, ts+2069, 0) 13177 return 1 13178 } 13179 (*CsvReader)(unsafe.Pointer(p)).Fin = libc.Xfopen(tls, zFilename, ts+4402) 13180 if (*CsvReader)(unsafe.Pointer(p)).Fin == uintptr(0) { 13181 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 13182 csv_reader_reset(tls, p) 13183 csv_errmsg(tls, p, ts+4405, libc.VaList(bp, zFilename)) 13184 return 1 13185 } 13186 } else { 13187 (*CsvReader)(unsafe.Pointer(p)).FzIn = zData 13188 (*CsvReader)(unsafe.Pointer(p)).FnIn = libc.Xstrlen(tls, zData) 13189 } 13190 return 0 13191 } 13192 13193 func csv_getc_refill(tls *libc.TLS, p uintptr) int32 { 13194 var got size_t 13195 13196 got = libc.Xfread(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn, uint32(1), uint32(CSV_INBUFSZ), (*CsvReader)(unsafe.Pointer(p)).Fin) 13197 if got == size_t(0) { 13198 return -1 13199 } 13200 (*CsvReader)(unsafe.Pointer(p)).FnIn = got 13201 (*CsvReader)(unsafe.Pointer(p)).FiIn = size_t(1) 13202 return int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn))) 13203 } 13204 13205 func csv_getc(tls *libc.TLS, p uintptr) int32 { 13206 if (*CsvReader)(unsafe.Pointer(p)).FiIn >= (*CsvReader)(unsafe.Pointer(p)).FnIn { 13207 if (*CsvReader)(unsafe.Pointer(p)).Fin != uintptr(0) { 13208 return csv_getc_refill(tls, p) 13209 } 13210 return -1 13211 } 13212 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn + uintptr(libc.PostIncUint32(&(*CsvReader)(unsafe.Pointer(p)).FiIn, 1))))) 13213 } 13214 13215 func csv_resize_and_append(tls *libc.TLS, p uintptr, c int8) int32 { 13216 var zNew uintptr 13217 var nNew int32 = (*CsvReader)(unsafe.Pointer(p)).FnAlloc*2 + 100 13218 zNew = sqlite3.Xsqlite3_realloc64(tls, (*CsvReader)(unsafe.Pointer(p)).Fz, uint64(nNew)) 13219 if zNew != 0 { 13220 (*CsvReader)(unsafe.Pointer(p)).Fz = zNew 13221 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = nNew 13222 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 13223 return 0 13224 } else { 13225 csv_errmsg(tls, p, ts+2069, 0) 13226 return 1 13227 } 13228 return int32(0) 13229 } 13230 13231 func csv_append(tls *libc.TLS, p uintptr, c int8) int32 { 13232 if (*CsvReader)(unsafe.Pointer(p)).Fn >= (*CsvReader)(unsafe.Pointer(p)).FnAlloc-1 { 13233 return csv_resize_and_append(tls, p, c) 13234 } 13235 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 13236 return 0 13237 } 13238 13239 func csv_read_one_field(tls *libc.TLS, p uintptr) uintptr { 13240 bp := tls.Alloc(32) 13241 defer tls.Free(32) 13242 13243 var c int32 13244 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13245 c = csv_getc(tls, p) 13246 if c == -1 { 13247 (*CsvReader)(unsafe.Pointer(p)).FcTerm = -1 13248 return uintptr(0) 13249 } 13250 if c == '"' { 13251 var pc int32 13252 var ppc int32 13253 var startLine int32 = (*CsvReader)(unsafe.Pointer(p)).FnLine 13254 pc = libc.AssignInt32(&ppc, 0) 13255 for 1 != 0 { 13256 c = csv_getc(tls, p) 13257 if c <= '"' || pc == '"' { 13258 if c == '\n' { 13259 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 13260 } 13261 if c == '"' { 13262 if pc == '"' { 13263 pc = 0 13264 continue 13265 } 13266 } 13267 if c == ',' && pc == '"' || 13268 c == '\n' && pc == '"' || 13269 c == '\n' && pc == '\r' && ppc == '"' || 13270 c == -1 && pc == '"' { 13271 for __ccgo := true; __ccgo; __ccgo = int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn)))) != '"' { 13272 (*CsvReader)(unsafe.Pointer(p)).Fn-- 13273 } 13274 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 13275 break 13276 } 13277 if pc == '"' && c != '\r' { 13278 csv_errmsg(tls, p, ts+4434, libc.VaList(bp, (*CsvReader)(unsafe.Pointer(p)).FnLine, '"')) 13279 break 13280 } 13281 if c == -1 { 13282 csv_errmsg(tls, p, ts+4466, 13283 libc.VaList(bp+16, startLine, '"')) 13284 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 13285 break 13286 } 13287 } 13288 if csv_append(tls, p, int8(c)) != 0 { 13289 return uintptr(0) 13290 } 13291 ppc = pc 13292 pc = c 13293 } 13294 } else { 13295 if c&0xff == 0xef && (*CsvReader)(unsafe.Pointer(p)).FbNotFirst == 0 { 13296 csv_append(tls, p, int8(c)) 13297 c = csv_getc(tls, p) 13298 if c&0xff == 0xbb { 13299 csv_append(tls, p, int8(c)) 13300 c = csv_getc(tls, p) 13301 if c&0xff == 0xbf { 13302 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 13303 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13304 return csv_read_one_field(tls, p) 13305 } 13306 } 13307 } 13308 for c > ',' || c != -1 && c != ',' && c != '\n' { 13309 if csv_append(tls, p, int8(c)) != 0 { 13310 return uintptr(0) 13311 } 13312 c = csv_getc(tls, p) 13313 } 13314 if c == '\n' { 13315 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 13316 if (*CsvReader)(unsafe.Pointer(p)).Fn > 0 && int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn-1)))) == '\r' { 13317 (*CsvReader)(unsafe.Pointer(p)).Fn-- 13318 } 13319 } 13320 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 13321 } 13322 if (*CsvReader)(unsafe.Pointer(p)).Fz != 0 { 13323 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn))) = int8(0) 13324 } 13325 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 13326 return (*CsvReader)(unsafe.Pointer(p)).Fz 13327 } 13328 13329 type CsvTable1 = struct { 13330 Fbase sqlite3_vtab 13331 FzFilename uintptr 13332 FzData uintptr 13333 FiStart int32 13334 FnCol int32 13335 FtstFlags uint32 13336 } 13337 13338 type CsvTable = CsvTable1 13339 13340 type CsvCursor1 = struct { 13341 Fbase sqlite3_vtab_cursor 13342 Frdr CsvReader 13343 FazVal uintptr 13344 FaLen uintptr 13345 FiRowid sqlite3_int64 13346 } 13347 13348 type CsvCursor = CsvCursor1 13349 13350 func csv_xfer_error(tls *libc.TLS, pTab uintptr, pRdr uintptr) { 13351 bp := tls.Alloc(8) 13352 defer tls.Free(8) 13353 13354 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg) 13355 (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, pRdr+40)) 13356 } 13357 13358 func csvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 13359 var p uintptr = pVtab 13360 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzFilename) 13361 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzData) 13362 sqlite3.Xsqlite3_free(tls, p) 13363 return SQLITE_OK 13364 } 13365 13366 func csv_skip_whitespace(tls *libc.TLS, z uintptr) uintptr { 13367 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z)))))*2)))&int32(_ISspace) != 0 { 13368 z++ 13369 } 13370 return z 13371 } 13372 13373 func csv_trim_whitespace(tls *libc.TLS, z uintptr) { 13374 var n size_t = libc.Xstrlen(tls, z) 13375 for n > size_t(0) && int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(n))))))*2)))&int32(_ISspace) != 0 { 13376 n-- 13377 } 13378 *(*int8)(unsafe.Pointer(z + uintptr(n))) = int8(0) 13379 } 13380 13381 func csv_dequote(tls *libc.TLS, z uintptr) { 13382 var j int32 13383 var cQuote int8 = *(*int8)(unsafe.Pointer(z)) 13384 var i size_t 13385 var n size_t 13386 13387 if int32(cQuote) != '\'' && int32(cQuote) != '"' { 13388 return 13389 } 13390 n = libc.Xstrlen(tls, z) 13391 if n < size_t(2) || int32(*(*int8)(unsafe.Pointer(z + uintptr(n-size_t(1))))) != int32(*(*int8)(unsafe.Pointer(z))) { 13392 return 13393 } 13394 i = size_t(1) 13395 j = 0 13396 for ; i < n-size_t(1); i++ { 13397 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == int32(cQuote) && int32(*(*int8)(unsafe.Pointer(z + uintptr(i+size_t(1))))) == int32(cQuote) { 13398 i++ 13399 } 13400 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 13401 } 13402 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 13403 } 13404 13405 func csv_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr) uintptr { 13406 z = csv_skip_whitespace(tls, z) 13407 if libc.Xstrncmp(tls, zTag, z, uint32(nTag)) != 0 { 13408 return uintptr(0) 13409 } 13410 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 13411 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 13412 return uintptr(0) 13413 } 13414 return csv_skip_whitespace(tls, z+uintptr(1)) 13415 } 13416 13417 func csv_string_parameter(tls *libc.TLS, p uintptr, zParam uintptr, zArg uintptr, pzVal uintptr) int32 { 13418 bp := tls.Alloc(16) 13419 defer tls.Free(16) 13420 13421 var zValue uintptr 13422 zValue = csv_parameter(tls, zParam, int32(libc.Xstrlen(tls, zParam)), zArg) 13423 if zValue == uintptr(0) { 13424 return 0 13425 } 13426 *(*int8)(unsafe.Pointer(p + 40)) = int8(0) 13427 if *(*uintptr)(unsafe.Pointer(pzVal)) != 0 { 13428 csv_errmsg(tls, p, ts+4505, libc.VaList(bp, zParam)) 13429 return 1 13430 } 13431 *(*uintptr)(unsafe.Pointer(pzVal)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zValue)) 13432 if *(*uintptr)(unsafe.Pointer(pzVal)) == uintptr(0) { 13433 csv_errmsg(tls, p, ts+2069, 0) 13434 return 1 13435 } 13436 csv_trim_whitespace(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 13437 csv_dequote(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 13438 return 1 13439 } 13440 13441 func csv_boolean(tls *libc.TLS, z uintptr) int32 { 13442 if sqlite3.Xsqlite3_stricmp(tls, ts+4174, z) == 0 || 13443 sqlite3.Xsqlite3_stricmp(tls, ts+4178, z) == 0 || 13444 sqlite3.Xsqlite3_stricmp(tls, ts+4534, z) == 0 || 13445 int32(*(*int8)(unsafe.Pointer(z))) == '1' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 13446 return 1 13447 } 13448 if sqlite3.Xsqlite3_stricmp(tls, ts+4539, z) == 0 || 13449 sqlite3.Xsqlite3_stricmp(tls, ts+4542, z) == 0 || 13450 sqlite3.Xsqlite3_stricmp(tls, ts+4546, z) == 0 || 13451 int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 13452 return 0 13453 } 13454 return -1 13455 } 13456 13457 func csv_boolean_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr, pValue uintptr) int32 { 13458 var b int32 13459 z = csv_skip_whitespace(tls, z) 13460 if libc.Xstrncmp(tls, zTag, z, uint32(nTag)) != 0 { 13461 return 0 13462 } 13463 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 13464 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 13465 *(*int32)(unsafe.Pointer(pValue)) = 1 13466 return 1 13467 } 13468 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 13469 return 0 13470 } 13471 z = csv_skip_whitespace(tls, z+uintptr(1)) 13472 b = csv_boolean(tls, z) 13473 if b >= 0 { 13474 *(*int32)(unsafe.Pointer(pValue)) = b 13475 return 1 13476 } 13477 return 0 13478 } 13479 13480 func csvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13481 bp := tls.Alloc(336) 13482 defer tls.Free(336) 13483 13484 var pNew uintptr 13485 var bHeader int32 13486 var rc int32 13487 var i int32 13488 var j int32 13489 var tstFlags int32 13490 13491 var nCol int32 13492 13493 var z uintptr 13494 var zValue uintptr 13495 var z1 uintptr 13496 var pStr uintptr 13497 var zSep uintptr 13498 var iCol int32 13499 pNew = uintptr(0) 13500 bHeader = -1 13501 rc = SQLITE_OK 13502 tstFlags = 0 13503 nCol = -99 13504 13505 libc.Xmemset(tls, bp+80, 0, uint32(unsafe.Sizeof(CsvReader{}))) 13506 libc.Xmemset(tls, bp+320, 0, uint32(unsafe.Sizeof([3]uintptr{}))) 13507 i = 3 13508 __1: 13509 if !(i < argc) { 13510 goto __3 13511 } 13512 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) 13513 j = 0 13514 __4: 13515 if !(uint32(j) < uint32(unsafe.Sizeof(azParam))/uint32(unsafe.Sizeof(uintptr(0)))) { 13516 goto __6 13517 } 13518 if !(csv_string_parameter(tls, bp+80, azParam[j], z, bp+320+uintptr(j)*4) != 0) { 13519 goto __7 13520 } 13521 goto __6 13522 __7: 13523 ; 13524 goto __5 13525 __5: 13526 j++ 13527 goto __4 13528 goto __6 13529 __6: 13530 ; 13531 if !(uint32(j) < uint32(unsafe.Sizeof(azParam))/uint32(unsafe.Sizeof(uintptr(0)))) { 13532 goto __8 13533 } 13534 if !(*(*int8)(unsafe.Pointer(bp + 80 + 40)) != 0) { 13535 goto __10 13536 } 13537 goto csvtab_connect_error 13538 __10: 13539 ; 13540 goto __9 13541 __8: 13542 if !(csv_boolean_parameter(tls, ts+4552, 6, z, bp+332) != 0) { 13543 goto __11 13544 } 13545 if !(bHeader >= 0) { 13546 goto __13 13547 } 13548 csv_errmsg(tls, bp+80, ts+4559, 0) 13549 goto csvtab_connect_error 13550 __13: 13551 ; 13552 bHeader = *(*int32)(unsafe.Pointer(bp + 332)) 13553 goto __12 13554 __11: 13555 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4592, 9, z)) != uintptr(0)) { 13556 goto __14 13557 } 13558 tstFlags = int32(uint32(libc.Xatoi(tls, zValue))) 13559 goto __15 13560 __14: 13561 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4602, 7, z)) != uintptr(0)) { 13562 goto __16 13563 } 13564 if !(nCol > 0) { 13565 goto __18 13566 } 13567 csv_errmsg(tls, bp+80, ts+4610, 0) 13568 goto csvtab_connect_error 13569 __18: 13570 ; 13571 nCol = libc.Xatoi(tls, zValue) 13572 if !(nCol <= 0) { 13573 goto __19 13574 } 13575 csv_errmsg(tls, bp+80, ts+4644, 0) 13576 goto csvtab_connect_error 13577 __19: 13578 ; 13579 goto __17 13580 __16: 13581 csv_errmsg(tls, bp+80, ts+4675, libc.VaList(bp, z)) 13582 goto csvtab_connect_error 13583 __17: 13584 ; 13585 __15: 13586 ; 13587 __12: 13588 ; 13589 __9: 13590 ; 13591 goto __2 13592 __2: 13593 i++ 13594 goto __1 13595 goto __3 13596 __3: 13597 ; 13598 if !(libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 320)) == uintptr(0)) == libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 320 + 1*4)) == uintptr(0))) { 13599 goto __20 13600 } 13601 csv_errmsg(tls, bp+80, ts+4695, 0) 13602 goto csvtab_connect_error 13603 __20: 13604 ; 13605 if !((nCol <= 0 || bHeader == 1) && 13606 csv_reader_open(tls, bp+80, *(*uintptr)(unsafe.Pointer(bp + 320)), *(*uintptr)(unsafe.Pointer(bp + 320 + 1*4))) != 0) { 13607 goto __21 13608 } 13609 goto csvtab_connect_error 13610 __21: 13611 ; 13612 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CsvTable{}))) 13613 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 13614 if !(pNew == uintptr(0)) { 13615 goto __22 13616 } 13617 goto csvtab_connect_oom 13618 __22: 13619 ; 13620 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(CsvTable{}))) 13621 if !(*(*uintptr)(unsafe.Pointer(bp + 320 + 2*4)) == uintptr(0)) { 13622 goto __23 13623 } 13624 pStr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 13625 zSep = ts + 584 13626 iCol = 0 13627 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+979, 0) 13628 if !(nCol < 0 && bHeader < 1) { 13629 goto __25 13630 } 13631 nCol = 0 13632 __26: 13633 csv_read_one_field(tls, bp+80) 13634 nCol++ 13635 goto __27 13636 __27: 13637 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13638 goto __26 13639 } 13640 goto __28 13641 __28: 13642 ; 13643 __25: 13644 ; 13645 if !(nCol > 0 && bHeader < 1) { 13646 goto __29 13647 } 13648 iCol = 0 13649 __31: 13650 if !(iCol < nCol) { 13651 goto __33 13652 } 13653 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+8, zSep, iCol)) 13654 zSep = ts + 4758 13655 goto __32 13656 __32: 13657 iCol++ 13658 goto __31 13659 goto __33 13660 __33: 13661 ; 13662 goto __30 13663 __29: 13664 __34: 13665 z1 = csv_read_one_field(tls, bp+80) 13666 if !(nCol > 0 && iCol < nCol || nCol < 0 && bHeader != 0) { 13667 goto __37 13668 } 13669 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4760, libc.VaList(bp+24, zSep, z1)) 13670 zSep = ts + 4758 13671 iCol++ 13672 __37: 13673 ; 13674 goto __35 13675 __35: 13676 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13677 goto __34 13678 } 13679 goto __36 13680 __36: 13681 ; 13682 if !(nCol < 0) { 13683 goto __38 13684 } 13685 nCol = iCol 13686 goto __39 13687 __38: 13688 __40: 13689 if !(iCol < nCol) { 13690 goto __41 13691 } 13692 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+40, zSep, libc.PreIncInt32(&iCol, 1))) 13693 zSep = ts + 4758 13694 goto __40 13695 __41: 13696 ; 13697 __39: 13698 ; 13699 __30: 13700 ; 13701 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13702 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+585, 0) 13703 *(*uintptr)(unsafe.Pointer(bp + 320 + 2*4)) = sqlite3.Xsqlite3_str_finish(tls, pStr) 13704 if !(*(*uintptr)(unsafe.Pointer(bp + 320 + 2*4)) == uintptr(0)) { 13705 goto __42 13706 } 13707 goto csvtab_connect_oom 13708 __42: 13709 ; 13710 goto __24 13711 __23: 13712 if !(nCol < 0) { 13713 goto __43 13714 } 13715 __45: 13716 csv_read_one_field(tls, bp+80) 13717 (*CsvTable)(unsafe.Pointer(pNew)).FnCol++ 13718 goto __46 13719 __46: 13720 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13721 goto __45 13722 } 13723 goto __47 13724 __47: 13725 ; 13726 goto __44 13727 __43: 13728 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13729 __44: 13730 ; 13731 __24: 13732 ; 13733 (*CsvTable)(unsafe.Pointer(pNew)).FzFilename = *(*uintptr)(unsafe.Pointer(bp + 320)) 13734 *(*uintptr)(unsafe.Pointer(bp + 320)) = uintptr(0) 13735 (*CsvTable)(unsafe.Pointer(pNew)).FzData = *(*uintptr)(unsafe.Pointer(bp + 320 + 1*4)) 13736 *(*uintptr)(unsafe.Pointer(bp + 320 + 1*4)) = uintptr(0) 13737 (*CsvTable)(unsafe.Pointer(pNew)).FtstFlags = uint32(tstFlags) 13738 if !(bHeader != 1) { 13739 goto __48 13740 } 13741 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = 0 13742 goto __49 13743 __48: 13744 if !((*CsvTable)(unsafe.Pointer(pNew)).FzData != 0) { 13745 goto __50 13746 } 13747 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int32((*CsvReader)(unsafe.Pointer(bp + 80)).FiIn) 13748 goto __51 13749 __50: 13750 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int32(uint32(libc.Xftell(tls, (*CsvReader)(unsafe.Pointer(bp+80)).Fin)) - (*CsvReader)(unsafe.Pointer(bp+80)).FnIn + (*CsvReader)(unsafe.Pointer(bp+80)).FiIn) 13751 __51: 13752 ; 13753 __49: 13754 ; 13755 csv_reader_reset(tls, bp+80) 13756 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, *(*uintptr)(unsafe.Pointer(bp + 320 + 2*4))) 13757 if !(rc != 0) { 13758 goto __52 13759 } 13760 csv_errmsg(tls, bp+80, ts+4772, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(bp + 320 + 2*4)), sqlite3.Xsqlite3_errmsg(tls, db))) 13761 goto csvtab_connect_error 13762 __52: 13763 ; 13764 i = 0 13765 __53: 13766 if !(uint32(i) < uint32(unsafe.Sizeof([3]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0)))) { 13767 goto __55 13768 } 13769 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 320 + uintptr(i)*4))) 13770 goto __54 13771 __54: 13772 i++ 13773 goto __53 13774 goto __55 13775 __55: 13776 ; 13777 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 13778 return SQLITE_OK 13779 13780 csvtab_connect_oom: 13781 rc = SQLITE_NOMEM 13782 csv_errmsg(tls, bp+80, ts+2069, 0) 13783 13784 csvtab_connect_error: 13785 if !(pNew != 0) { 13786 goto __56 13787 } 13788 csvtabDisconnect(tls, pNew) 13789 __56: 13790 ; 13791 i = 0 13792 __57: 13793 if !(uint32(i) < uint32(unsafe.Sizeof([3]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0)))) { 13794 goto __59 13795 } 13796 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 320 + uintptr(i)*4))) 13797 goto __58 13798 __58: 13799 i++ 13800 goto __57 13801 goto __59 13802 __59: 13803 ; 13804 if !(*(*int8)(unsafe.Pointer(bp + 80 + 40)) != 0) { 13805 goto __60 13806 } 13807 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(pzErr))) 13808 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, bp+80+40)) 13809 __60: 13810 ; 13811 csv_reader_reset(tls, bp+80) 13812 if !(rc == SQLITE_OK) { 13813 goto __61 13814 } 13815 rc = SQLITE_ERROR 13816 __61: 13817 ; 13818 return rc 13819 } 13820 13821 var azParam = [3]uintptr{ 13822 ts + 4794, ts + 4803, ts + 4808, 13823 } 13824 13825 func csvtabCursorRowReset(tls *libc.TLS, pCur uintptr) { 13826 var pTab uintptr = (*CsvCursor)(unsafe.Pointer(pCur)).Fbase.FpVtab 13827 var i int32 13828 for i = 0; i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol; i++ { 13829 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4))) 13830 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4)) = uintptr(0) 13831 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13832 } 13833 } 13834 13835 func csvtabCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13836 return csvtabConnect(tls, db, pAux, argc, argv, ppVtab, pzErr) 13837 } 13838 13839 func csvtabClose(tls *libc.TLS, cur uintptr) int32 { 13840 var pCur uintptr = cur 13841 csvtabCursorRowReset(tls, pCur) 13842 csv_reader_reset(tls, pCur+4) 13843 sqlite3.Xsqlite3_free(tls, cur) 13844 return SQLITE_OK 13845 } 13846 13847 func csvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 13848 var pTab uintptr = p 13849 var pCur uintptr 13850 var nByte size_t 13851 nByte = uint32(unsafe.Sizeof(CsvCursor{})) + (uint32(unsafe.Sizeof(uintptr(0)))+uint32(unsafe.Sizeof(int32(0))))*uint32((*CsvTable)(unsafe.Pointer(pTab)).FnCol) 13852 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 13853 if pCur == uintptr(0) { 13854 return SQLITE_NOMEM 13855 } 13856 libc.Xmemset(tls, pCur, 0, nByte) 13857 (*CsvCursor)(unsafe.Pointer(pCur)).FazVal = pCur + 1*260 13858 (*CsvCursor)(unsafe.Pointer(pCur)).FaLen = (*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr((*CsvTable)(unsafe.Pointer(pTab)).FnCol)*4 13859 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 13860 if csv_reader_open(tls, pCur+4, (*CsvTable)(unsafe.Pointer(pTab)).FzFilename, (*CsvTable)(unsafe.Pointer(pTab)).FzData) != 0 { 13861 csv_xfer_error(tls, pTab, pCur+4) 13862 return SQLITE_ERROR 13863 } 13864 return SQLITE_OK 13865 } 13866 13867 func csvtabNext(tls *libc.TLS, cur uintptr) int32 { 13868 var pCur uintptr = cur 13869 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13870 var i int32 = 0 13871 var z uintptr 13872 for __ccgo := true; __ccgo; __ccgo = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == ',' { 13873 z = csv_read_one_field(tls, pCur+4) 13874 if z == uintptr(0) { 13875 break 13876 } 13877 if i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13878 if *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) < (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1 { 13879 var zNew uintptr = sqlite3.Xsqlite3_realloc64(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4)), uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 13880 if zNew == uintptr(0) { 13881 csv_errmsg(tls, pCur+4, ts+2069, 0) 13882 csv_xfer_error(tls, pTab, pCur+4) 13883 break 13884 } 13885 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4)) = zNew 13886 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn + 1 13887 } 13888 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4)), z, uint32((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 13889 i++ 13890 } 13891 } 13892 if z == uintptr(0) || (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == -1 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13893 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(-1) 13894 } else { 13895 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid++ 13896 for i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13897 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4))) 13898 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4)) = uintptr(0) 13899 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13900 i++ 13901 } 13902 } 13903 return SQLITE_OK 13904 } 13905 13906 func csvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 13907 var pCur uintptr = cur 13908 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13909 if i >= 0 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol && *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4)) != uintptr(0) { 13910 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*4)), -1, libc.UintptrFromInt32(-1)) 13911 } 13912 return SQLITE_OK 13913 } 13914 13915 func csvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13916 var pCur uintptr = cur 13917 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid 13918 return SQLITE_OK 13919 } 13920 13921 func csvtabEof(tls *libc.TLS, cur uintptr) int32 { 13922 var pCur uintptr = cur 13923 return libc.Bool32((*CsvCursor)(unsafe.Pointer(pCur)).FiRowid < int64(0)) 13924 } 13925 13926 func csvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 13927 var pCur uintptr = pVtabCursor 13928 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 13929 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 13930 if (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin == uintptr(0) { 13931 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = size_t((*CsvTable)(unsafe.Pointer(pTab)).FiStart) 13932 } else { 13933 libc.Xfseek(tls, (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin, (*CsvTable)(unsafe.Pointer(pTab)).FiStart, SEEK_SET) 13934 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = size_t(0) 13935 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FnIn = size_t(0) 13936 } 13937 return csvtabNext(tls, pVtabCursor) 13938 } 13939 13940 func csvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 13941 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000) 13942 if (*CsvTable)(unsafe.Pointer(tab)).FtstFlags&uint32(CSVTEST_FIDX) != uint32(0) { 13943 var i int32 13944 var nConst int32 = 0 13945 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 13946 var op uint8 13947 if int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable) == 0 { 13948 continue 13949 } 13950 op = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop 13951 if int32(op) == SQLITE_INDEX_CONSTRAINT_EQ || 13952 int32(op) == SQLITE_INDEX_CONSTRAINT_LIKE || 13953 int32(op) == SQLITE_INDEX_CONSTRAINT_GLOB { 13954 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 13955 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(nConst)*8)).FargvIndex = nConst + 1 13956 nConst++ 13957 } 13958 } 13959 } 13960 return SQLITE_OK 13961 } 13962 13963 var CsvModule = sqlite3_module{ 13964 FxCreate: 0, 13965 FxConnect: 0, 13966 FxBestIndex: 0, 13967 FxDisconnect: 0, 13968 FxDestroy: 0, 13969 FxOpen: 0, 13970 FxClose: 0, 13971 FxFilter: 0, 13972 FxNext: 0, 13973 FxEof: 0, 13974 FxColumn: 0, 13975 FxRowid: 0, 13976 } 13977 13978 func csvtabUpdate(tls *libc.TLS, p uintptr, n int32, v uintptr, x uintptr) int32 { 13979 return SQLITE_READONLY 13980 } 13981 13982 var CsvModuleFauxWrite = sqlite3_module{ 13983 FxCreate: 0, 13984 FxConnect: 0, 13985 FxBestIndex: 0, 13986 FxDisconnect: 0, 13987 FxDestroy: 0, 13988 FxOpen: 0, 13989 FxClose: 0, 13990 FxFilter: 0, 13991 FxNext: 0, 13992 FxEof: 0, 13993 FxColumn: 0, 13994 FxRowid: 0, 13995 FxUpdate: 0, 13996 } 13997 13998 func sqlite3_csv_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 13999 var rc int32 14000 _ = pApi 14001 14002 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4815, uintptr(unsafe.Pointer(&CsvModule)), uintptr(0)) 14003 if rc == SQLITE_OK { 14004 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4819, uintptr(unsafe.Pointer(&CsvModuleFauxWrite)), uintptr(0)) 14005 } 14006 return rc 14007 } 14008 14009 type Decimal1 = struct { 14010 Fsign int8 14011 Foom int8 14012 FisNull int8 14013 FisInit int8 14014 FnDigit int32 14015 FnFrac int32 14016 Fa uintptr 14017 } 14018 14019 type Decimal = Decimal1 14020 14021 func decimal_clear(tls *libc.TLS, p uintptr) { 14022 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(p)).Fa) 14023 } 14024 14025 func decimal_free(tls *libc.TLS, p uintptr) { 14026 if p != 0 { 14027 decimal_clear(tls, p) 14028 sqlite3.Xsqlite3_free(tls, p) 14029 } 14030 } 14031 14032 func decimal_new(tls *libc.TLS, pCtx uintptr, pIn uintptr, nAlt int32, zAlt uintptr) uintptr { 14033 var p uintptr 14034 var n int32 14035 var i int32 14036 var zIn uintptr 14037 var iExp int32 14038 var j int32 14039 var neg int32 14040 var c int8 14041 var nExtra int32 14042 iExp = 0 14043 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Decimal{}))) 14044 if !(p == uintptr(0)) { 14045 goto __1 14046 } 14047 goto new_no_mem 14048 __1: 14049 ; 14050 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 14051 (*Decimal)(unsafe.Pointer(p)).Foom = int8(0) 14052 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 14053 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(0) 14054 (*Decimal)(unsafe.Pointer(p)).FnDigit = 0 14055 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14056 if !(zAlt != 0) { 14057 goto __2 14058 } 14059 n = nAlt 14060 zIn = zAlt 14061 goto __3 14062 __2: 14063 if !(sqlite3.Xsqlite3_value_type(tls, pIn) == SQLITE_NULL) { 14064 goto __4 14065 } 14066 (*Decimal)(unsafe.Pointer(p)).Fa = uintptr(0) 14067 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(1) 14068 return p 14069 __4: 14070 ; 14071 n = sqlite3.Xsqlite3_value_bytes(tls, pIn) 14072 zIn = sqlite3.Xsqlite3_value_text(tls, pIn) 14073 __3: 14074 ; 14075 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc64(tls, uint64(n+1)) 14076 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14077 goto __5 14078 } 14079 goto new_no_mem 14080 __5: 14081 ; 14082 i = 0 14083 __6: 14084 if !(int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))))*2)))&int32(_ISspace) != 0) { 14085 goto __8 14086 } 14087 goto __7 14088 __7: 14089 i++ 14090 goto __6 14091 goto __8 14092 __8: 14093 ; 14094 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '-') { 14095 goto __9 14096 } 14097 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(1) 14098 i++ 14099 goto __10 14100 __9: 14101 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '+') { 14102 goto __11 14103 } 14104 i++ 14105 __11: 14106 ; 14107 __10: 14108 ; 14109 __12: 14110 if !(i < n && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '0') { 14111 goto __13 14112 } 14113 i++ 14114 goto __12 14115 __13: 14116 ; 14117 __14: 14118 if !(i < n) { 14119 goto __15 14120 } 14121 c = int8(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) 14122 if !(int32(c) >= '0' && int32(c) <= '9') { 14123 goto __16 14124 } 14125 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncInt32(&(*Decimal)(unsafe.Pointer(p)).FnDigit, 1)))) = int8(int32(c) - '0') 14126 goto __17 14127 __16: 14128 if !(int32(c) == '.') { 14129 goto __18 14130 } 14131 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit + 1 14132 goto __19 14133 __18: 14134 if !(int32(c) == 'e' || int32(c) == 'E') { 14135 goto __20 14136 } 14137 j = i + 1 14138 neg = 0 14139 if !(j >= n) { 14140 goto __21 14141 } 14142 goto __15 14143 __21: 14144 ; 14145 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '-') { 14146 goto __22 14147 } 14148 neg = 1 14149 j++ 14150 goto __23 14151 __22: 14152 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '+') { 14153 goto __24 14154 } 14155 j++ 14156 __24: 14157 ; 14158 __23: 14159 ; 14160 __25: 14161 if !(j < n && iExp < 1000000) { 14162 goto __26 14163 } 14164 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) <= '9') { 14165 goto __27 14166 } 14167 iExp = iExp*10 + int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) - '0' 14168 __27: 14169 ; 14170 j++ 14171 goto __25 14172 __26: 14173 ; 14174 if !(neg != 0) { 14175 goto __28 14176 } 14177 iExp = -iExp 14178 __28: 14179 ; 14180 goto __15 14181 __20: 14182 ; 14183 __19: 14184 ; 14185 __17: 14186 ; 14187 i++ 14188 goto __14 14189 __15: 14190 ; 14191 if !((*Decimal)(unsafe.Pointer(p)).FnFrac != 0) { 14192 goto __29 14193 } 14194 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - ((*Decimal)(unsafe.Pointer(p)).FnFrac - 1) 14195 __29: 14196 ; 14197 if !(iExp > 0) { 14198 goto __30 14199 } 14200 if !((*Decimal)(unsafe.Pointer(p)).FnFrac > 0) { 14201 goto __32 14202 } 14203 if !(iExp <= (*Decimal)(unsafe.Pointer(p)).FnFrac) { 14204 goto __33 14205 } 14206 *(*int32)(unsafe.Pointer(p + 8)) -= iExp 14207 iExp = 0 14208 goto __34 14209 __33: 14210 iExp = iExp - (*Decimal)(unsafe.Pointer(p)).FnFrac 14211 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14212 __34: 14213 ; 14214 __32: 14215 ; 14216 if !(iExp > 0) { 14217 goto __35 14218 } 14219 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 14220 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14221 goto __36 14222 } 14223 goto new_no_mem 14224 __36: 14225 ; 14226 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint32(iExp)) 14227 *(*int32)(unsafe.Pointer(p + 4)) += iExp 14228 __35: 14229 ; 14230 goto __31 14231 __30: 14232 if !(iExp < 0) { 14233 goto __37 14234 } 14235 iExp = -iExp 14236 nExtra = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac - 1 14237 if !(nExtra != 0) { 14238 goto __38 14239 } 14240 if !(nExtra >= iExp) { 14241 goto __39 14242 } 14243 *(*int32)(unsafe.Pointer(p + 8)) += iExp 14244 iExp = 0 14245 goto __40 14246 __39: 14247 iExp = iExp - nExtra 14248 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - 1 14249 __40: 14250 ; 14251 __38: 14252 ; 14253 if !(iExp > 0) { 14254 goto __41 14255 } 14256 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 14257 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14258 goto __42 14259 } 14260 goto new_no_mem 14261 __42: 14262 ; 14263 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(iExp), (*Decimal)(unsafe.Pointer(p)).Fa, uint32((*Decimal)(unsafe.Pointer(p)).FnDigit)) 14264 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint32(iExp)) 14265 *(*int32)(unsafe.Pointer(p + 4)) += iExp 14266 *(*int32)(unsafe.Pointer(p + 8)) += iExp 14267 __41: 14268 ; 14269 __37: 14270 ; 14271 __31: 14272 ; 14273 return p 14274 14275 new_no_mem: 14276 if !(pCtx != 0) { 14277 goto __43 14278 } 14279 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14280 __43: 14281 ; 14282 sqlite3.Xsqlite3_free(tls, p) 14283 return uintptr(0) 14284 } 14285 14286 func decimal_result(tls *libc.TLS, pCtx uintptr, p uintptr) { 14287 var z uintptr 14288 var i int32 14289 var j int32 14290 var n int32 14291 if p == uintptr(0) || (*Decimal)(unsafe.Pointer(p)).Foom != 0 { 14292 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14293 return 14294 } 14295 if (*Decimal)(unsafe.Pointer(p)).FisNull != 0 { 14296 sqlite3.Xsqlite3_result_null(tls, pCtx) 14297 return 14298 } 14299 z = sqlite3.Xsqlite3_malloc(tls, (*Decimal)(unsafe.Pointer(p)).FnDigit+4) 14300 if z == uintptr(0) { 14301 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14302 return 14303 } 14304 i = 0 14305 if (*Decimal)(unsafe.Pointer(p)).FnDigit == 0 || (*Decimal)(unsafe.Pointer(p)).FnDigit == 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa))) == 0 { 14306 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 14307 } 14308 if (*Decimal)(unsafe.Pointer(p)).Fsign != 0 { 14309 *(*int8)(unsafe.Pointer(z)) = int8('-') 14310 i = 1 14311 } 14312 n = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac 14313 if n <= 0 { 14314 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('0') 14315 } 14316 j = 0 14317 for n > 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) == 0 { 14318 j++ 14319 n-- 14320 } 14321 for n > 0 { 14322 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 14323 j++ 14324 n-- 14325 } 14326 if (*Decimal)(unsafe.Pointer(p)).FnFrac != 0 { 14327 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('.') 14328 for __ccgo := true; __ccgo; __ccgo = j < (*Decimal)(unsafe.Pointer(p)).FnDigit { 14329 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 14330 j++ 14331 } 14332 } 14333 *(*int8)(unsafe.Pointer(z + uintptr(i))) = int8(0) 14334 sqlite3.Xsqlite3_result_text(tls, pCtx, z, i, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 14335 } 14336 14337 func decimalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14338 var p uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14339 _ = argc 14340 decimal_result(tls, context, p) 14341 decimal_free(tls, p) 14342 } 14343 14344 func decimal_cmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 14345 var nASig int32 14346 var nBSig int32 14347 var rc int32 14348 var n int32 14349 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) != int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 14350 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 14351 return -1 14352 } 14353 return +1 14354 } 14355 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 14356 var pTemp uintptr = pA 14357 pA = pB 14358 pB = pTemp 14359 } 14360 nASig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 14361 nBSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 14362 if nASig != nBSig { 14363 return nASig - nBSig 14364 } 14365 n = (*Decimal)(unsafe.Pointer(pA)).FnDigit 14366 if n > (*Decimal)(unsafe.Pointer(pB)).FnDigit { 14367 n = (*Decimal)(unsafe.Pointer(pB)).FnDigit 14368 } 14369 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint32(n)) 14370 if rc == 0 { 14371 rc = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnDigit 14372 } 14373 return rc 14374 } 14375 14376 func decimalCmpFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14377 var pA uintptr 14378 var pB uintptr 14379 var rc int32 14380 pA = uintptr(0) 14381 pB = uintptr(0) 14382 14383 _ = argc 14384 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14385 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0) { 14386 goto __1 14387 } 14388 goto cmp_done 14389 __1: 14390 ; 14391 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*4)), 0, uintptr(0)) 14392 if !(pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14393 goto __2 14394 } 14395 goto cmp_done 14396 __2: 14397 ; 14398 rc = decimal_cmp(tls, pA, pB) 14399 if !(rc < 0) { 14400 goto __3 14401 } 14402 rc = -1 14403 goto __4 14404 __3: 14405 if !(rc > 0) { 14406 goto __5 14407 } 14408 rc = +1 14409 __5: 14410 ; 14411 __4: 14412 ; 14413 sqlite3.Xsqlite3_result_int(tls, context, rc) 14414 cmp_done: 14415 decimal_free(tls, pA) 14416 decimal_free(tls, pB) 14417 } 14418 14419 func decimal_expand(tls *libc.TLS, p uintptr, nDigit int32, nFrac int32) { 14420 var nAddSig int32 14421 var nAddFrac int32 14422 if p == uintptr(0) { 14423 return 14424 } 14425 nAddFrac = nFrac - (*Decimal)(unsafe.Pointer(p)).FnFrac 14426 nAddSig = nDigit - (*Decimal)(unsafe.Pointer(p)).FnDigit - nAddFrac 14427 if nAddFrac == 0 && nAddSig == 0 { 14428 return 14429 } 14430 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64(nDigit+1)) 14431 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14432 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 14433 return 14434 } 14435 if nAddSig != 0 { 14436 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(nAddSig), (*Decimal)(unsafe.Pointer(p)).Fa, uint32((*Decimal)(unsafe.Pointer(p)).FnDigit)) 14437 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint32(nAddSig)) 14438 *(*int32)(unsafe.Pointer(p + 4)) += nAddSig 14439 } 14440 if nAddFrac != 0 { 14441 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint32(nAddFrac)) 14442 *(*int32)(unsafe.Pointer(p + 4)) += nAddFrac 14443 *(*int32)(unsafe.Pointer(p + 8)) += nAddFrac 14444 } 14445 } 14446 14447 func decimal_add(tls *libc.TLS, pA uintptr, pB uintptr) { 14448 var nSig int32 14449 var nFrac int32 14450 var nDigit int32 14451 var i int32 14452 var rc int32 14453 if pA == uintptr(0) { 14454 return 14455 } 14456 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 14457 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 14458 return 14459 } 14460 if (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0 { 14461 (*Decimal)(unsafe.Pointer(pA)).FisNull = int8(1) 14462 return 14463 } 14464 nSig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 14465 if nSig != 0 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa))) == 0 { 14466 nSig-- 14467 } 14468 if nSig < (*Decimal)(unsafe.Pointer(pB)).FnDigit-(*Decimal)(unsafe.Pointer(pB)).FnFrac { 14469 nSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 14470 } 14471 nFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14472 if nFrac < (*Decimal)(unsafe.Pointer(pB)).FnFrac { 14473 nFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14474 } 14475 nDigit = nSig + nFrac + 1 14476 decimal_expand(tls, pA, nDigit, nFrac) 14477 decimal_expand(tls, pB, nDigit, nFrac) 14478 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 14479 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 14480 } else { 14481 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) == int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 14482 var carry int32 = 0 14483 for i = nDigit - 1; i >= 0; i-- { 14484 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 14485 if x >= 10 { 14486 carry = 1 14487 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x - 10) 14488 } else { 14489 carry = 0 14490 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 14491 } 14492 } 14493 } else { 14494 var aA uintptr 14495 var aB uintptr 14496 var borrow int32 = 0 14497 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint32(nDigit)) 14498 if rc < 0 { 14499 aA = (*Decimal)(unsafe.Pointer(pB)).Fa 14500 aB = (*Decimal)(unsafe.Pointer(pA)).Fa 14501 (*Decimal)(unsafe.Pointer(pA)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pA)).Fsign != 0)) 14502 } else { 14503 aA = (*Decimal)(unsafe.Pointer(pA)).Fa 14504 aB = (*Decimal)(unsafe.Pointer(pB)).Fa 14505 } 14506 for i = nDigit - 1; i >= 0; i-- { 14507 var x int32 = int32(*(*int8)(unsafe.Pointer(aA + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(aB + uintptr(i)))) - borrow 14508 if x < 0 { 14509 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x + 10) 14510 borrow = 1 14511 } else { 14512 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 14513 borrow = 0 14514 } 14515 } 14516 } 14517 } 14518 } 14519 14520 func decimalCollFunc(tls *libc.TLS, notUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 14521 var zA uintptr = pKey1 14522 var zB uintptr = pKey2 14523 var pA uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey1, zA) 14524 var pB uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey2, zB) 14525 var rc int32 14526 _ = notUsed 14527 if pA == uintptr(0) || pB == uintptr(0) { 14528 rc = 0 14529 } else { 14530 rc = decimal_cmp(tls, pA, pB) 14531 } 14532 decimal_free(tls, pA) 14533 decimal_free(tls, pB) 14534 return rc 14535 } 14536 14537 func decimalAddFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14538 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14539 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*4)), 0, uintptr(0)) 14540 _ = argc 14541 decimal_add(tls, pA, pB) 14542 decimal_result(tls, context, pA) 14543 decimal_free(tls, pA) 14544 decimal_free(tls, pB) 14545 } 14546 14547 func decimalSubFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14548 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14549 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*4)), 0, uintptr(0)) 14550 _ = argc 14551 if pB != 0 { 14552 (*Decimal)(unsafe.Pointer(pB)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pB)).Fsign != 0)) 14553 decimal_add(tls, pA, pB) 14554 decimal_result(tls, context, pA) 14555 } 14556 decimal_free(tls, pA) 14557 decimal_free(tls, pB) 14558 } 14559 14560 func decimalSumStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14561 var p uintptr 14562 var pArg uintptr 14563 _ = argc 14564 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14565 if p == uintptr(0) { 14566 return 14567 } 14568 if !(int32((*Decimal)(unsafe.Pointer(p)).FisInit) != 0) { 14569 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 14570 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc(tls, 2) 14571 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14572 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 14573 } else { 14574 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa)) = int8(0) 14575 } 14576 (*Decimal)(unsafe.Pointer(p)).FnDigit = 1 14577 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14578 } 14579 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14580 return 14581 } 14582 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14583 decimal_add(tls, p, pArg) 14584 decimal_free(tls, pArg) 14585 } 14586 14587 func decimalSumInverse(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14588 var p uintptr 14589 var pArg uintptr 14590 _ = argc 14591 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14592 if p == uintptr(0) { 14593 return 14594 } 14595 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14596 return 14597 } 14598 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14599 if pArg != 0 { 14600 (*Decimal)(unsafe.Pointer(pArg)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pArg)).Fsign != 0)) 14601 } 14602 decimal_add(tls, p, pArg) 14603 decimal_free(tls, pArg) 14604 } 14605 14606 func decimalSumValue(tls *libc.TLS, context uintptr) { 14607 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14608 if p == uintptr(0) { 14609 return 14610 } 14611 decimal_result(tls, context, p) 14612 } 14613 14614 func decimalSumFinalize(tls *libc.TLS, context uintptr) { 14615 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14616 if p == uintptr(0) { 14617 return 14618 } 14619 decimal_result(tls, context, p) 14620 decimal_clear(tls, p) 14621 } 14622 14623 func decimalMulFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14624 var pA uintptr 14625 var pB uintptr 14626 var acc uintptr 14627 var i int32 14628 var j int32 14629 var k int32 14630 var minFrac int32 14631 var f int8 14632 var carry int32 14633 var x int32 14634 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14635 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*4)), 0, uintptr(0)) 14636 acc = uintptr(0) 14637 _ = argc 14638 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || 14639 pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14640 goto __1 14641 } 14642 goto mul_end 14643 __1: 14644 ; 14645 acc = sqlite3.Xsqlite3_malloc64(tls, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14646 if !(acc == uintptr(0)) { 14647 goto __2 14648 } 14649 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14650 goto mul_end 14651 __2: 14652 ; 14653 libc.Xmemset(tls, acc, 0, uint32((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14654 minFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14655 if !((*Decimal)(unsafe.Pointer(pB)).FnFrac < minFrac) { 14656 goto __3 14657 } 14658 minFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14659 __3: 14660 ; 14661 i = (*Decimal)(unsafe.Pointer(pA)).FnDigit - 1 14662 __4: 14663 if !(i >= 0) { 14664 goto __6 14665 } 14666 f = *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) 14667 carry = 0 14668 j = (*Decimal)(unsafe.Pointer(pB)).FnDigit - 1 14669 k = i + j + 3 14670 __7: 14671 if !(j >= 0) { 14672 goto __9 14673 } 14674 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + int32(f)*int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pB)).Fa + uintptr(j)))) + carry 14675 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14676 carry = x / 10 14677 goto __8 14678 __8: 14679 j-- 14680 k-- 14681 goto __7 14682 goto __9 14683 __9: 14684 ; 14685 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + carry 14686 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14687 *(*int8)(unsafe.Pointer(acc + uintptr(k-1))) += int8(x / 10) 14688 goto __5 14689 __5: 14690 i-- 14691 goto __4 14692 goto __6 14693 __6: 14694 ; 14695 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(pA)).Fa) 14696 (*Decimal)(unsafe.Pointer(pA)).Fa = acc 14697 acc = uintptr(0) 14698 *(*int32)(unsafe.Pointer(pA + 4)) += (*Decimal)(unsafe.Pointer(pB)).FnDigit + 2 14699 *(*int32)(unsafe.Pointer(pA + 8)) += (*Decimal)(unsafe.Pointer(pB)).FnFrac 14700 *(*int8)(unsafe.Pointer(pA)) ^= int8(int32((*Decimal)(unsafe.Pointer(pB)).Fsign)) 14701 __10: 14702 if !((*Decimal)(unsafe.Pointer(pA)).FnFrac > minFrac && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr((*Decimal)(unsafe.Pointer(pA)).FnDigit-1)))) == 0) { 14703 goto __11 14704 } 14705 (*Decimal)(unsafe.Pointer(pA)).FnFrac-- 14706 (*Decimal)(unsafe.Pointer(pA)).FnDigit-- 14707 goto __10 14708 __11: 14709 ; 14710 decimal_result(tls, context, pA) 14711 14712 mul_end: 14713 sqlite3.Xsqlite3_free(tls, acc) 14714 decimal_free(tls, pA) 14715 decimal_free(tls, pB) 14716 } 14717 14718 func sqlite3_decimal_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14719 var rc int32 = SQLITE_OK 14720 var i uint32 14721 _ = pzErrMsg 14722 14723 _ = pApi 14724 14725 for i = uint32(0); i < uint32(unsafe.Sizeof(aFunc))/uint32(unsafe.Sizeof(struct { 14726 FzFuncName uintptr 14727 FnArg int32 14728 FxFunc uintptr 14729 }{})) && rc == SQLITE_OK; i++ { 14730 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc[i].FzFuncName, aFunc[i].FnArg, 14731 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 14732 uintptr(0), aFunc[i].FxFunc, uintptr(0), uintptr(0)) 14733 } 14734 if rc == SQLITE_OK { 14735 rc = sqlite3.Xsqlite3_create_window_function(tls, db, ts+4826, 1, 14736 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, uintptr(0), 14737 *(*uintptr)(unsafe.Pointer(&struct { 14738 f func(*libc.TLS, uintptr, int32, uintptr) 14739 }{decimalSumStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumFinalize})), 14740 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumValue})), *(*uintptr)(unsafe.Pointer(&struct { 14741 f func(*libc.TLS, uintptr, int32, uintptr) 14742 }{decimalSumInverse})), uintptr(0)) 14743 } 14744 if rc == SQLITE_OK { 14745 rc = sqlite3.Xsqlite3_create_collation(tls, db, ts+4838, SQLITE_UTF8, 14746 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 14747 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 14748 }{decimalCollFunc}))) 14749 } 14750 return rc 14751 } 14752 14753 var aFunc = [5]struct { 14754 FzFuncName uintptr 14755 FnArg int32 14756 FxFunc uintptr 14757 }{ 14758 {FzFuncName: ts + 4838, FnArg: 1, FxFunc: 0}, 14759 {FzFuncName: ts + 4846, FnArg: 2, FxFunc: 0}, 14760 {FzFuncName: ts + 4858, FnArg: 2, FxFunc: 0}, 14761 {FzFuncName: ts + 4870, FnArg: 2, FxFunc: 0}, 14762 {FzFuncName: ts + 4882, FnArg: 2, FxFunc: 0}, 14763 } 14764 14765 type EvalResult = struct { 14766 Fz uintptr 14767 FzSep uintptr 14768 FszSep int32 14769 FnAlloc sqlite3_int64 14770 FnUsed sqlite3_int64 14771 } 14772 14773 func callback(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr, colnames uintptr) int32 { 14774 var p uintptr = pCtx 14775 var i int32 14776 if argv == uintptr(0) { 14777 return 0 14778 } 14779 for i = 0; i < argc; i++ { 14780 var z uintptr 14781 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) != 0 { 14782 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) 14783 } else { 14784 z = ts + 584 14785 } 14786 var sz size_t = libc.Xstrlen(tls, z) 14787 if sqlite3_int64(sz)+(*EvalResult)(unsafe.Pointer(p)).FnUsed+sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep)+int64(1) > (*EvalResult)(unsafe.Pointer(p)).FnAlloc { 14788 var zNew uintptr 14789 (*EvalResult)(unsafe.Pointer(p)).FnAlloc = (*EvalResult)(unsafe.Pointer(p)).FnAlloc*int64(2) + sqlite3_int64(sz) + sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep) + int64(1) 14790 14791 if (*EvalResult)(unsafe.Pointer(p)).FnAlloc <= int64(0x7fffffff) { 14792 zNew = sqlite3.Xsqlite3_realloc64(tls, (*EvalResult)(unsafe.Pointer(p)).Fz, uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc)) 14793 } else { 14794 zNew = uintptr(0) 14795 } 14796 if zNew == uintptr(0) { 14797 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(p)).Fz) 14798 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(EvalResult{}))) 14799 return 1 14800 } 14801 (*EvalResult)(unsafe.Pointer(p)).Fz = zNew 14802 } 14803 if (*EvalResult)(unsafe.Pointer(p)).FnUsed > int64(0) { 14804 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), (*EvalResult)(unsafe.Pointer(p)).FzSep, uint32((*EvalResult)(unsafe.Pointer(p)).FszSep)) 14805 *(*sqlite3_int64)(unsafe.Pointer(p + 20)) += sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep) 14806 } 14807 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), z, sz) 14808 *(*sqlite3_int64)(unsafe.Pointer(p + 20)) += sqlite3_int64(sz) 14809 } 14810 return 0 14811 } 14812 14813 func sqlEvalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14814 bp := tls.Alloc(32) 14815 defer tls.Free(32) 14816 14817 var zSql uintptr 14818 var db uintptr 14819 *(*uintptr)(unsafe.Pointer(bp + 28)) = uintptr(0) 14820 var rc int32 14821 14822 libc.Xmemset(tls, bp, 0, uint32(unsafe.Sizeof(EvalResult{}))) 14823 (*EvalResult)(unsafe.Pointer(bp)).FzSep = ts + 4894 14824 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14825 if zSql == uintptr(0) { 14826 return 14827 } 14828 if argc > 1 { 14829 (*EvalResult)(unsafe.Pointer(bp)).FzSep = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 14830 if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14831 return 14832 } 14833 } 14834 (*EvalResult)(unsafe.Pointer(bp)).FszSep = int32(libc.Xstrlen(tls, (*EvalResult)(unsafe.Pointer(bp)).FzSep)) 14835 db = sqlite3.Xsqlite3_context_db_handle(tls, context) 14836 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, *(*uintptr)(unsafe.Pointer(&struct { 14837 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 14838 }{callback})), bp, bp+28) 14839 if rc != SQLITE_OK { 14840 sqlite3.Xsqlite3_result_error(tls, context, *(*uintptr)(unsafe.Pointer(bp + 28)), -1) 14841 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 28))) 14842 } else if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14843 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14844 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(bp)).Fz) 14845 } else { 14846 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}))) 14847 } 14848 } 14849 14850 func sqlite3_eval_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14851 var rc int32 = SQLITE_OK 14852 _ = pApi 14853 14854 _ = pzErrMsg 14855 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 1, 14856 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14857 *(*uintptr)(unsafe.Pointer(&struct { 14858 f func(*libc.TLS, uintptr, int32, uintptr) 14859 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14860 if rc == SQLITE_OK { 14861 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 2, 14862 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14863 *(*uintptr)(unsafe.Pointer(&struct { 14864 f func(*libc.TLS, uintptr, int32, uintptr) 14865 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14866 } 14867 return rc 14868 } 14869 14870 type explain_vtab1 = struct { 14871 Fbase sqlite3_vtab 14872 Fdb uintptr 14873 } 14874 14875 type explain_vtab = explain_vtab1 14876 14877 type explain_cursor1 = struct { 14878 Fbase sqlite3_vtab_cursor 14879 Fdb uintptr 14880 FzSql uintptr 14881 FpExplain uintptr 14882 Frc int32 14883 } 14884 14885 type explain_cursor = explain_cursor1 14886 14887 func explainConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 14888 var pNew uintptr 14889 var rc int32 14890 14891 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 14892 ts+4901) 14893 if rc == SQLITE_OK { 14894 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_vtab{}))) 14895 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 14896 if pNew == uintptr(0) { 14897 return SQLITE_NOMEM 14898 } 14899 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(explain_vtab{}))) 14900 (*explain_vtab)(unsafe.Pointer(pNew)).Fdb = db 14901 } 14902 return rc 14903 } 14904 14905 func explainDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 14906 sqlite3.Xsqlite3_free(tls, pVtab) 14907 return SQLITE_OK 14908 } 14909 14910 func explainOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 14911 var pCur uintptr 14912 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_cursor{}))) 14913 if pCur == uintptr(0) { 14914 return SQLITE_NOMEM 14915 } 14916 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(explain_cursor{}))) 14917 (*explain_cursor)(unsafe.Pointer(pCur)).Fdb = (*explain_vtab)(unsafe.Pointer(p)).Fdb 14918 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 14919 return SQLITE_OK 14920 } 14921 14922 func explainClose(tls *libc.TLS, cur uintptr) int32 { 14923 var pCur uintptr = cur 14924 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14925 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14926 sqlite3.Xsqlite3_free(tls, pCur) 14927 return SQLITE_OK 14928 } 14929 14930 func explainNext(tls *libc.TLS, cur uintptr) int32 { 14931 var pCur uintptr = cur 14932 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14933 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_DONE && (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW { 14934 return (*explain_cursor)(unsafe.Pointer(pCur)).Frc 14935 } 14936 return SQLITE_OK 14937 } 14938 14939 func explainColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 14940 var pCur uintptr = cur 14941 if i == EXPLN_COLUMN_SQL { 14942 sqlite3.Xsqlite3_result_text(tls, ctx, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql, -1, libc.UintptrFromInt32(-1)) 14943 } else { 14944 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, i)) 14945 } 14946 return SQLITE_OK 14947 } 14948 14949 func explainRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 14950 var pCur uintptr = cur 14951 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, 0) 14952 return SQLITE_OK 14953 } 14954 14955 func explainEof(tls *libc.TLS, cur uintptr) int32 { 14956 var pCur uintptr = cur 14957 return libc.Bool32((*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW) 14958 } 14959 14960 func explainFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 14961 bp := tls.Alloc(16) 14962 defer tls.Free(16) 14963 14964 var pCur uintptr = pVtabCursor 14965 var zSql uintptr = uintptr(0) 14966 var rc int32 14967 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14968 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 14969 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_TEXT { 14970 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = SQLITE_DONE 14971 return SQLITE_OK 14972 } 14973 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14974 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 14975 if (*explain_cursor)(unsafe.Pointer(pCur)).FzSql != 0 { 14976 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+4963, libc.VaList(bp+8, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql)) 14977 } 14978 if zSql == uintptr(0) { 14979 rc = SQLITE_NOMEM 14980 } else { 14981 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*explain_cursor)(unsafe.Pointer(pCur)).Fdb, zSql, -1, pCur+12, uintptr(0)) 14982 sqlite3.Xsqlite3_free(tls, zSql) 14983 } 14984 if rc != 0 { 14985 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14986 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 14987 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 14988 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = uintptr(0) 14989 } else { 14990 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 14991 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_DONE || (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_ROW { 14992 rc = SQLITE_OK 14993 } else { 14994 rc = (*explain_cursor)(unsafe.Pointer(pCur)).Frc 14995 } 14996 } 14997 return rc 14998 } 14999 15000 func explainBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15001 var i int32 15002 var idx int32 = -1 15003 var unusable int32 = 0 15004 15005 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(500) 15006 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 15007 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 15008 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != EXPLN_COLUMN_SQL { 15009 continue 15010 } 15011 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 15012 unusable = 1 15013 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 15014 idx = i 15015 } 15016 } 15017 if idx >= 0 { 15018 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 15019 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 15020 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).FargvIndex = 1 15021 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).Fomit = uint8(1) 15022 } else if unusable != 0 { 15023 return SQLITE_CONSTRAINT 15024 } 15025 return SQLITE_OK 15026 } 15027 15028 var explainModule = sqlite3_module{ 15029 FxConnect: 0, 15030 FxBestIndex: 0, 15031 FxDisconnect: 0, 15032 FxOpen: 0, 15033 FxClose: 0, 15034 FxFilter: 0, 15035 FxNext: 0, 15036 FxEof: 0, 15037 FxColumn: 0, 15038 FxRowid: 0, 15039 } 15040 15041 func sqlite3ExplainVtabInit(tls *libc.TLS, db uintptr) int32 { 15042 var rc int32 = SQLITE_OK 15043 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4974, uintptr(unsafe.Pointer(&explainModule)), uintptr(0)) 15044 return rc 15045 } 15046 15047 func sqlite3_explain_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15048 var rc int32 = SQLITE_OK 15049 _ = pApi 15050 15051 rc = sqlite3ExplainVtabInit(tls, db) 15052 return rc 15053 } 15054 15055 type flock = struct { 15056 Fl_type int16 15057 Fl_whence int16 15058 Fl_start int64 15059 Fl_len int64 15060 Fl_pid int32 15061 } 15062 15063 type useconds_t = uint32 15064 15065 type intptr_t = int32 15066 15067 type socklen_t = uint32 15068 15069 type dirent = struct { 15070 Fd_ino uint64 15071 Fd_off int64 15072 Fd_reclen uint16 15073 Fd_type uint8 15074 Fd_name [256]int8 15075 F__ccgo_pad1 [1]byte 15076 } 15077 15078 type timezone = struct { 15079 Ftz_minuteswest int32 15080 Ftz_dsttime int32 15081 } 15082 15083 type itimerval = struct { 15084 Fit_interval struct { 15085 Ftv_sec int32 15086 Ftv_usec int32 15087 } 15088 Fit_value struct { 15089 Ftv_sec int32 15090 Ftv_usec int32 15091 } 15092 } 15093 15094 type tm = struct { 15095 Ftm_sec int32 15096 Ftm_min int32 15097 Ftm_hour int32 15098 Ftm_mday int32 15099 Ftm_mon int32 15100 Ftm_year int32 15101 Ftm_wday int32 15102 Ftm_yday int32 15103 Ftm_isdst int32 15104 Ftm_gmtoff int32 15105 Ftm_zone uintptr 15106 } 15107 15108 type itimerspec = struct { 15109 Fit_interval struct { 15110 Ftv_sec int32 15111 Ftv_nsec int32 15112 } 15113 Fit_value struct { 15114 Ftv_sec int32 15115 Ftv_nsec int32 15116 } 15117 } 15118 15119 type sigevent = struct { 15120 Fsigev_value struct{ Fsival_int int32 } 15121 Fsigev_signo int32 15122 Fsigev_notify int32 15123 F_sigev_un struct{ F_pad [13]int32 } 15124 } 15125 15126 func readFileContents(tls *libc.TLS, ctx uintptr, zName uintptr) { 15127 var in uintptr 15128 var nIn sqlite3_int64 15129 var pBuf uintptr 15130 var db uintptr 15131 var mxBlob int32 15132 15133 in = libc.Xfopen(tls, zName, ts+4402) 15134 if in == uintptr(0) { 15135 return 15136 } 15137 libc.Xfseek(tls, in, 0, SEEK_END) 15138 nIn = sqlite3_int64(libc.Xftell(tls, in)) 15139 libc.Xrewind(tls, in) 15140 db = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 15141 mxBlob = sqlite3.Xsqlite3_limit(tls, db, SQLITE_LIMIT_LENGTH, -1) 15142 if nIn > sqlite3_int64(mxBlob) { 15143 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_TOOBIG) 15144 libc.Xfclose(tls, in) 15145 return 15146 } 15147 pBuf = sqlite3.Xsqlite3_malloc64(tls, func() uint64 { 15148 if nIn != 0 { 15149 return uint64(nIn) 15150 } 15151 return uint64(1) 15152 }()) 15153 if pBuf == uintptr(0) { 15154 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15155 libc.Xfclose(tls, in) 15156 return 15157 } 15158 if nIn == sqlite3_int64(libc.Xfread(tls, pBuf, uint32(1), size_t(nIn), in)) { 15159 sqlite3.Xsqlite3_result_blob64(tls, ctx, pBuf, uint64(nIn), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 15160 } else { 15161 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_IOERR) 15162 sqlite3.Xsqlite3_free(tls, pBuf) 15163 } 15164 libc.Xfclose(tls, in) 15165 } 15166 15167 func readfileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15168 var zName uintptr 15169 _ = argc 15170 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15171 if zName == uintptr(0) { 15172 return 15173 } 15174 readFileContents(tls, context, zName) 15175 } 15176 15177 func ctxErrorMsg(tls *libc.TLS, ctx uintptr, zFmt uintptr, va uintptr) { 15178 var zMsg uintptr = uintptr(0) 15179 var ap va_list 15180 _ = ap 15181 ap = va 15182 zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 15183 sqlite3.Xsqlite3_result_error(tls, ctx, zMsg, -1) 15184 sqlite3.Xsqlite3_free(tls, zMsg) 15185 _ = ap 15186 } 15187 15188 func fileStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 15189 return libc.Xstat(tls, zPath, pStatBuf) 15190 } 15191 15192 func fileLinkStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 15193 return libc.Xlstat(tls, zPath, pStatBuf) 15194 } 15195 15196 func makeDirectory(tls *libc.TLS, zFile uintptr) int32 { 15197 bp := tls.Alloc(104) 15198 defer tls.Free(104) 15199 15200 var zCopy uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zFile)) 15201 var rc int32 = SQLITE_OK 15202 15203 if zCopy == uintptr(0) { 15204 rc = SQLITE_NOMEM 15205 } else { 15206 var nCopy int32 = int32(libc.Xstrlen(tls, zCopy)) 15207 var i int32 = 1 15208 15209 for rc == SQLITE_OK { 15210 var rc2 int32 15211 15212 for ; int32(*(*int8)(unsafe.Pointer(zCopy + uintptr(i)))) != '/' && i < nCopy; i++ { 15213 } 15214 if i == nCopy { 15215 break 15216 } 15217 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8(0) 15218 15219 rc2 = fileStat(tls, zCopy, bp+8) 15220 if rc2 != 0 { 15221 if libc.Xmkdir(tls, zCopy, uint32(0777)) != 0 { 15222 rc = SQLITE_ERROR 15223 } 15224 } else { 15225 if !((*stat)(unsafe.Pointer(bp+8)).Fst_mode&uint32(0170000) == uint32(0040000)) { 15226 rc = SQLITE_ERROR 15227 } 15228 } 15229 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8('/') 15230 i++ 15231 } 15232 15233 sqlite3.Xsqlite3_free(tls, zCopy) 15234 } 15235 15236 return rc 15237 } 15238 15239 func writeFile(tls *libc.TLS, pCtx uintptr, zFile uintptr, pData uintptr, mode mode_t, mtime sqlite3_int64) int32 { 15240 bp := tls.Alloc(112) 15241 defer tls.Free(112) 15242 15243 if zFile == uintptr(0) { 15244 return 1 15245 } 15246 if mode&mode_t(0170000) == mode_t(0120000) { 15247 var zTo uintptr = sqlite3.Xsqlite3_value_text(tls, pData) 15248 if zTo == uintptr(0) || libc.Xsymlink(tls, zTo, zFile) < 0 { 15249 return 1 15250 } 15251 } else { 15252 if mode&mode_t(0170000) == mode_t(0040000) { 15253 if libc.Xmkdir(tls, zFile, mode) != 0 { 15254 if *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) != EEXIST || 15255 0 != fileStat(tls, zFile, bp) || 15256 !((*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0170000) == uint32(0040000)) || 15257 (*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0777) != mode&mode_t(0777) && 0 != libc.Xchmod(tls, zFile, mode&mode_t(0777)) { 15258 return 1 15259 } 15260 } 15261 } else { 15262 var nWrite sqlite3_int64 = int64(0) 15263 var z uintptr 15264 var rc int32 = 0 15265 var out uintptr = libc.Xfopen(tls, zFile, ts+4982) 15266 if out == uintptr(0) { 15267 return 1 15268 } 15269 z = sqlite3.Xsqlite3_value_blob(tls, pData) 15270 if z != 0 { 15271 var n sqlite3_int64 = sqlite3_int64(libc.Xfwrite(tls, z, uint32(1), uint32(sqlite3.Xsqlite3_value_bytes(tls, pData)), out)) 15272 nWrite = sqlite3_int64(sqlite3.Xsqlite3_value_bytes(tls, pData)) 15273 if nWrite != n { 15274 rc = 1 15275 } 15276 } 15277 libc.Xfclose(tls, out) 15278 if rc == 0 && mode != 0 && libc.Xchmod(tls, zFile, mode&mode_t(0777)) != 0 { 15279 rc = 1 15280 } 15281 if rc != 0 { 15282 return 2 15283 } 15284 sqlite3.Xsqlite3_result_int64(tls, pCtx, nWrite) 15285 } 15286 } 15287 15288 if mtime >= int64(0) { 15289 (*timeval)(unsafe.Pointer(bp + 96)).Ftv_usec = libc.AssignPtrInt32(bp+96+1*8+4, 0) 15290 (*timeval)(unsafe.Pointer(bp + 96)).Ftv_sec = libc.Xtime(tls, uintptr(0)) 15291 (*timeval)(unsafe.Pointer(bp + 96 + 1*8)).Ftv_sec = int32(mtime) 15292 if libc.Xutimes(tls, zFile, bp+96) != 0 { 15293 return 1 15294 } 15295 } 15296 15297 return 0 15298 } 15299 15300 func writefileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15301 bp := tls.Alloc(24) 15302 defer tls.Free(24) 15303 15304 var zFile uintptr 15305 var mode mode_t = mode_t(0) 15306 var res int32 15307 var mtime sqlite3_int64 = int64(-1) 15308 15309 if argc < 2 || argc > 4 { 15310 sqlite3.Xsqlite3_result_error(tls, context, 15311 ts+4985, -1) 15312 return 15313 } 15314 15315 zFile = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15316 if zFile == uintptr(0) { 15317 return 15318 } 15319 if argc >= 3 { 15320 mode = mode_t(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 15321 } 15322 if argc == 4 { 15323 mtime = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4))) 15324 } 15325 15326 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*4)), mode, mtime) 15327 if res == 1 && *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) == ENOENT { 15328 if makeDirectory(tls, zFile) == SQLITE_OK { 15329 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*4)), mode, mtime) 15330 } 15331 } 15332 15333 if argc > 2 && res != 0 { 15334 if mode&mode_t(0170000) == mode_t(0120000) { 15335 ctxErrorMsg(tls, context, ts+5035, libc.VaList(bp, zFile)) 15336 } else if mode&mode_t(0170000) == mode_t(0040000) { 15337 ctxErrorMsg(tls, context, ts+5064, libc.VaList(bp+8, zFile)) 15338 } else { 15339 ctxErrorMsg(tls, context, ts+5095, libc.VaList(bp+16, zFile)) 15340 } 15341 } 15342 } 15343 15344 func lsModeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15345 bp := tls.Alloc(16) 15346 defer tls.Free(16) 15347 15348 var i int32 15349 var iMode int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 15350 15351 _ = argc 15352 if iMode&0170000 == 0120000 { 15353 *(*int8)(unsafe.Pointer(bp)) = int8('l') 15354 } else if iMode&0170000 == 0100000 { 15355 *(*int8)(unsafe.Pointer(bp)) = int8('-') 15356 } else if iMode&0170000 == 0040000 { 15357 *(*int8)(unsafe.Pointer(bp)) = int8('d') 15358 } else { 15359 *(*int8)(unsafe.Pointer(bp)) = int8('?') 15360 } 15361 for i = 0; i < 3; i++ { 15362 var m int32 = iMode >> ((2 - i) * 3) 15363 var a uintptr = bp + uintptr(1+i*3) 15364 *(*int8)(unsafe.Pointer(a)) = func() int8 { 15365 if m&0x4 != 0 { 15366 return int8('r') 15367 } 15368 return int8('-') 15369 }() 15370 *(*int8)(unsafe.Pointer(a + 1)) = func() int8 { 15371 if m&0x2 != 0 { 15372 return int8('w') 15373 } 15374 return int8('-') 15375 }() 15376 *(*int8)(unsafe.Pointer(a + 2)) = func() int8 { 15377 if m&0x1 != 0 { 15378 return int8('x') 15379 } 15380 return int8('-') 15381 }() 15382 } 15383 *(*int8)(unsafe.Pointer(bp + 10)) = int8(0) 15384 sqlite3.Xsqlite3_result_text(tls, context, bp, -1, libc.UintptrFromInt32(-1)) 15385 } 15386 15387 type fsdir_cursor1 = struct { 15388 Fbase sqlite3_vtab_cursor 15389 FnLvl int32 15390 FiLvl int32 15391 FaLvl uintptr 15392 FzBase uintptr 15393 FnBase int32 15394 FsStat struct { 15395 Fst_dev uint64 15396 F__pad1 uint16 15397 F__ccgo_pad1 [2]byte 15398 F__st_ino uint32 15399 Fst_mode uint32 15400 Fst_nlink uint32 15401 Fst_uid uint32 15402 Fst_gid uint32 15403 Fst_rdev uint64 15404 F__pad2 uint16 15405 F__ccgo_pad2 [2]byte 15406 Fst_size int64 15407 Fst_blksize int32 15408 Fst_blocks int64 15409 Fst_atim struct { 15410 Ftv_sec int32 15411 Ftv_nsec int32 15412 } 15413 Fst_mtim struct { 15414 Ftv_sec int32 15415 Ftv_nsec int32 15416 } 15417 Fst_ctim struct { 15418 Ftv_sec int32 15419 Ftv_nsec int32 15420 } 15421 Fst_ino uint64 15422 } 15423 FzPath uintptr 15424 FiRowid sqlite3_int64 15425 } 15426 15427 type fsdir_cursor = fsdir_cursor1 15428 type FsdirLevel1 = struct { 15429 FpDir uintptr 15430 FzDir uintptr 15431 } 15432 15433 type FsdirLevel = FsdirLevel1 15434 15435 type fsdir_tab1 = struct{ Fbase sqlite3_vtab } 15436 15437 type fsdir_tab = fsdir_tab1 15438 15439 func fsdirConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15440 var pNew uintptr = uintptr(0) 15441 var rc int32 15442 _ = pAux 15443 _ = argc 15444 _ = argv 15445 _ = pzErr 15446 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5120) 15447 if rc == SQLITE_OK { 15448 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_tab{}))) 15449 if pNew == uintptr(0) { 15450 return SQLITE_NOMEM 15451 } 15452 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(fsdir_tab{}))) 15453 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 15454 } 15455 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 15456 return rc 15457 } 15458 15459 func fsdirDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15460 sqlite3.Xsqlite3_free(tls, pVtab) 15461 return SQLITE_OK 15462 } 15463 15464 func fsdirOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 15465 var pCur uintptr 15466 _ = p 15467 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_cursor{}))) 15468 if pCur == uintptr(0) { 15469 return SQLITE_NOMEM 15470 } 15471 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(fsdir_cursor{}))) 15472 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 15473 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15474 return SQLITE_OK 15475 } 15476 15477 func fsdirResetCursor(tls *libc.TLS, pCur uintptr) { 15478 var i int32 15479 for i = 0; i <= (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl; i++ { 15480 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(i)*8 15481 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir != 0 { 15482 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15483 } 15484 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15485 } 15486 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15487 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl) 15488 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = uintptr(0) 15489 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15490 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = uintptr(0) 15491 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = 0 15492 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = 0 15493 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 15494 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 15495 } 15496 15497 func fsdirClose(tls *libc.TLS, cur uintptr) int32 { 15498 var pCur uintptr = cur 15499 15500 fsdirResetCursor(tls, pCur) 15501 sqlite3.Xsqlite3_free(tls, pCur) 15502 return SQLITE_OK 15503 } 15504 15505 func fsdirSetErrmsg(tls *libc.TLS, pCur uintptr, zFmt uintptr, va uintptr) { 15506 var ap va_list 15507 _ = ap 15508 ap = va 15509 (*sqlite3_vtab)(unsafe.Pointer((*fsdir_cursor)(unsafe.Pointer(pCur)).Fbase.FpVtab)).FzErrMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 15510 _ = ap 15511 } 15512 15513 func fsdirNext(tls *libc.TLS, cur uintptr) int32 { 15514 bp := tls.Alloc(32) 15515 defer tls.Free(32) 15516 15517 var pCur uintptr = cur 15518 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15519 15520 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid++ 15521 if m&mode_t(0170000) == mode_t(0040000) { 15522 var iNew int32 = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl + 1 15523 var pLvl uintptr 15524 if iNew >= (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl { 15525 var nNew int32 = iNew + 1 15526 var nByte sqlite3_int64 = sqlite3_int64(uint32(nNew) * uint32(unsafe.Sizeof(FsdirLevel{}))) 15527 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl, uint64(nByte)) 15528 if aNew == uintptr(0) { 15529 return SQLITE_NOMEM 15530 } 15531 libc.Xmemset(tls, aNew+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl)*8, 0, uint32(unsafe.Sizeof(FsdirLevel{}))*uint32(nNew-(*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl)) 15532 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = aNew 15533 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = nNew 15534 } 15535 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = iNew 15536 pLvl = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(iNew)*8 15537 15538 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath 15539 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15540 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = libc.Xopendir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15541 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir == uintptr(0) { 15542 fsdirSetErrmsg(tls, pCur, ts+5180, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15543 return SQLITE_ERROR 15544 } 15545 } 15546 15547 for (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl >= 0 { 15548 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl)*8 15549 var pEntry uintptr = libc.Xreaddir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15550 if pEntry != 0 { 15551 if int32(*(*int8)(unsafe.Pointer(pEntry + 19))) == '.' { 15552 if int32(*(*int8)(unsafe.Pointer(pEntry + 19 + 1))) == '.' && int32(*(*int8)(unsafe.Pointer(pEntry + 19 + 2))) == 0 { 15553 continue 15554 } 15555 if int32(*(*int8)(unsafe.Pointer(pEntry + 19 + 1))) == 0 { 15556 continue 15557 } 15558 } 15559 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15560 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp+8, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir, pEntry+19)) 15561 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15562 return SQLITE_NOMEM 15563 } 15564 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+24) != 0 { 15565 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15566 return SQLITE_ERROR 15567 } 15568 return SQLITE_OK 15569 } 15570 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15571 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15572 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = uintptr(0) 15573 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = uintptr(0) 15574 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl-- 15575 } 15576 15577 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15578 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15579 return SQLITE_OK 15580 } 15581 15582 func fsdirColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15583 bp := tls.Alloc(64) 15584 defer tls.Free(64) 15585 15586 var pCur uintptr = cur 15587 switch i { 15588 case FSDIR_COLUMN_NAME: 15589 { 15590 sqlite3.Xsqlite3_result_text(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase), -1, libc.UintptrFromInt32(-1)) 15591 break 15592 15593 } 15594 15595 case FSDIR_COLUMN_MODE: 15596 sqlite3.Xsqlite3_result_int64(tls, ctx, int64((*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode)) 15597 break 15598 15599 case FSDIR_COLUMN_MTIME: 15600 sqlite3.Xsqlite3_result_int64(tls, ctx, int64((*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mtim.Ftv_sec)) 15601 break 15602 15603 case FSDIR_COLUMN_DATA: 15604 { 15605 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15606 if m&mode_t(0170000) == mode_t(0040000) { 15607 sqlite3.Xsqlite3_result_null(tls, ctx) 15608 } else if m&mode_t(0170000) == mode_t(0120000) { 15609 var aBuf uintptr = bp 15610 var nBuf sqlite3_int64 = int64(64) 15611 var n int32 15612 15613 for 1 != 0 { 15614 n = libc.Xreadlink(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, aBuf, uint32(nBuf)) 15615 if sqlite3_int64(n) < nBuf { 15616 break 15617 } 15618 if aBuf != bp { 15619 sqlite3.Xsqlite3_free(tls, aBuf) 15620 } 15621 nBuf = nBuf * int64(2) 15622 aBuf = sqlite3.Xsqlite3_malloc64(tls, uint64(nBuf)) 15623 if aBuf == uintptr(0) { 15624 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15625 return SQLITE_NOMEM 15626 } 15627 } 15628 15629 sqlite3.Xsqlite3_result_text(tls, ctx, aBuf, n, libc.UintptrFromInt32(-1)) 15630 if aBuf != bp { 15631 sqlite3.Xsqlite3_free(tls, aBuf) 15632 } 15633 } else { 15634 readFileContents(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15635 } 15636 15637 } 15638 fallthrough 15639 case FSDIR_COLUMN_PATH: 15640 fallthrough 15641 default: 15642 { 15643 break 15644 15645 } 15646 } 15647 return SQLITE_OK 15648 } 15649 15650 func fsdirRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15651 var pCur uintptr = cur 15652 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid 15653 return SQLITE_OK 15654 } 15655 15656 func fsdirEof(tls *libc.TLS, cur uintptr) int32 { 15657 var pCur uintptr = cur 15658 return libc.Bool32((*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0)) 15659 } 15660 15661 func fsdirFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15662 bp := tls.Alloc(32) 15663 defer tls.Free(32) 15664 15665 var zDir uintptr = uintptr(0) 15666 var pCur uintptr = cur 15667 _ = idxStr 15668 fsdirResetCursor(tls, pCur) 15669 15670 if idxNum == 0 { 15671 fsdirSetErrmsg(tls, pCur, ts+5233, 0) 15672 return SQLITE_ERROR 15673 } 15674 15675 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15676 if zDir == uintptr(0) { 15677 fsdirSetErrmsg(tls, pCur, ts+5275, 0) 15678 return SQLITE_ERROR 15679 } 15680 if argc == 2 { 15681 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 15682 } 15683 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase != 0 { 15684 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = int32(libc.Xstrlen(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase)) + 1 15685 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase, zDir)) 15686 } else { 15687 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zDir)) 15688 } 15689 15690 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15691 return SQLITE_NOMEM 15692 } 15693 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+24) != 0 { 15694 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15695 return SQLITE_ERROR 15696 } 15697 15698 return SQLITE_OK 15699 } 15700 15701 func fsdirBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15702 var i int32 15703 var idxPath int32 = -1 15704 var idxDir int32 = -1 15705 var seenPath int32 = 0 15706 var seenDir int32 = 0 15707 var pConstraint uintptr 15708 15709 _ = tab 15710 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 15711 i = 0 15712 __1: 15713 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15714 goto __3 15715 } 15716 { 15717 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 15718 goto __2 15719 } 15720 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 15721 case FSDIR_COLUMN_PATH: 15722 { 15723 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15724 idxPath = i 15725 seenPath = 0 15726 } else if idxPath < 0 { 15727 seenPath = 1 15728 } 15729 break 15730 15731 } 15732 case FSDIR_COLUMN_DIR: 15733 { 15734 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15735 idxDir = i 15736 seenDir = 0 15737 } else if idxDir < 0 { 15738 seenDir = 1 15739 } 15740 break 15741 15742 } 15743 } 15744 15745 } 15746 goto __2 15747 __2: 15748 i++ 15749 pConstraint += 12 15750 goto __1 15751 goto __3 15752 __3: 15753 ; 15754 if seenPath != 0 || seenDir != 0 { 15755 return SQLITE_CONSTRAINT 15756 } 15757 15758 if idxPath < 0 { 15759 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 15760 15761 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(0x7fffffff) 15762 } else { 15763 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).Fomit = uint8(1) 15764 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).FargvIndex = 1 15765 if idxDir >= 0 { 15766 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).Fomit = uint8(1) 15767 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).FargvIndex = 2 15768 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 15769 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 15770 } else { 15771 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 15772 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100.0 15773 } 15774 } 15775 15776 return SQLITE_OK 15777 } 15778 15779 func fsdirRegister(tls *libc.TLS, db uintptr) int32 { 15780 var rc int32 = sqlite3.Xsqlite3_create_module(tls, db, ts+5325, uintptr(unsafe.Pointer(&fsdirModule1)), uintptr(0)) 15781 return rc 15782 } 15783 15784 var fsdirModule1 = sqlite3_module{ 15785 FxConnect: 0, 15786 FxBestIndex: 0, 15787 FxDisconnect: 0, 15788 FxOpen: 0, 15789 FxClose: 0, 15790 FxFilter: 0, 15791 FxNext: 0, 15792 FxEof: 0, 15793 FxColumn: 0, 15794 FxRowid: 0, 15795 } 15796 15797 func sqlite3_fileio_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15798 var rc int32 = SQLITE_OK 15799 _ = pApi 15800 15801 _ = pzErrMsg 15802 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5331, 1, 15803 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15804 *(*uintptr)(unsafe.Pointer(&struct { 15805 f func(*libc.TLS, uintptr, int32, uintptr) 15806 }{readfileFunc})), uintptr(0), uintptr(0)) 15807 if rc == SQLITE_OK { 15808 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5340, -1, 15809 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15810 *(*uintptr)(unsafe.Pointer(&struct { 15811 f func(*libc.TLS, uintptr, int32, uintptr) 15812 }{writefileFunc})), uintptr(0), uintptr(0)) 15813 } 15814 if rc == SQLITE_OK { 15815 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5350, 1, SQLITE_UTF8, uintptr(0), 15816 *(*uintptr)(unsafe.Pointer(&struct { 15817 f func(*libc.TLS, uintptr, int32, uintptr) 15818 }{lsModeFunc})), uintptr(0), uintptr(0)) 15819 } 15820 if rc == SQLITE_OK { 15821 rc = fsdirRegister(tls, db) 15822 } 15823 return rc 15824 } 15825 15826 type fuzzer_vtab1 = struct { 15827 Fbase sqlite3_vtab 15828 FzClassName uintptr 15829 FpRule uintptr 15830 FnCursor int32 15831 } 15832 15833 type fuzzer_vtab = fuzzer_vtab1 15834 type fuzzer_cursor1 = struct { 15835 Fbase sqlite3_vtab_cursor 15836 FiRowid sqlite3_int64 15837 FpVtab uintptr 15838 FrLimit fuzzer_cost 15839 FpStem uintptr 15840 FpDone uintptr 15841 FaQueue [20]uintptr 15842 FmxQueue int32 15843 FzBuf uintptr 15844 FnBuf int32 15845 FnStem int32 15846 FiRuleset int32 15847 FnullRule fuzzer_rule 15848 FapHash [4001]uintptr 15849 } 15850 15851 type fuzzer_cursor = fuzzer_cursor1 15852 type fuzzer_rule1 = struct { 15853 FpNext uintptr 15854 FzFrom uintptr 15855 FrCost fuzzer_cost 15856 FnFrom fuzzer_len 15857 FnTo fuzzer_len 15858 F__ccgo_pad1 [2]byte 15859 FiRuleset fuzzer_ruleid 15860 FzTo [4]int8 15861 } 15862 15863 type fuzzer_rule = fuzzer_rule1 15864 type fuzzer_stem1 = struct { 15865 FzBasis uintptr 15866 FpRule uintptr 15867 FpNext uintptr 15868 FpHash uintptr 15869 FrBaseCost fuzzer_cost 15870 FrCostX fuzzer_cost 15871 FnBasis fuzzer_len 15872 Fn fuzzer_len 15873 F__ccgo_pad1 [2]byte 15874 } 15875 15876 type fuzzer_stem = fuzzer_stem1 15877 15878 type fuzzer_cost = int32 15879 type fuzzer_len = int8 15880 type fuzzer_ruleid = int32 15881 15882 func fuzzerMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 15883 bp := tls.Alloc(24) 15884 defer tls.Free(24) 15885 15886 var pTail uintptr 15887 15888 pTail = bp 15889 for pA != 0 && pB != 0 { 15890 if (*fuzzer_rule)(unsafe.Pointer(pA)).FrCost <= (*fuzzer_rule)(unsafe.Pointer(pB)).FrCost { 15891 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15892 pTail = pA 15893 pA = (*fuzzer_rule)(unsafe.Pointer(pA)).FpNext 15894 } else { 15895 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15896 pTail = pB 15897 pB = (*fuzzer_rule)(unsafe.Pointer(pB)).FpNext 15898 } 15899 } 15900 if pA == uintptr(0) { 15901 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15902 } else { 15903 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15904 } 15905 return (*fuzzer_rule)(unsafe.Pointer(bp)).FpNext 15906 } 15907 15908 func fuzzerLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 15909 bp := tls.Alloc(48) 15910 defer tls.Free(48) 15911 15912 var iRuleset sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 15913 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 15914 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 15915 var nCost int32 = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 15916 15917 var rc int32 = SQLITE_OK 15918 var nFrom int32 15919 var nTo int32 15920 var pRule uintptr = uintptr(0) 15921 15922 if zFrom == uintptr(0) { 15923 zFrom = ts + 584 15924 } 15925 if zTo == uintptr(0) { 15926 zTo = ts + 584 15927 } 15928 nFrom = int32(libc.Xstrlen(tls, zFrom)) 15929 nTo = int32(libc.Xstrlen(tls, zTo)) 15930 15931 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 15932 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 15933 return SQLITE_OK 15934 } 15935 15936 if nCost <= 0 || nCost > FUZZER_MX_COST { 15937 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 15938 libc.VaList(bp, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_COST)) 15939 rc = SQLITE_ERROR 15940 } else if nFrom > FUZZER_MX_LENGTH || nTo > FUZZER_MX_LENGTH { 15941 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 15942 libc.VaList(bp+16, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_LENGTH)) 15943 rc = SQLITE_ERROR 15944 } else if iRuleset < int64(0) || iRuleset > int64(FUZZER_MX_RULEID) { 15945 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+5357, 15946 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_RULEID)) 15947 rc = SQLITE_ERROR 15948 } else { 15949 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(fuzzer_rule{}))+uint32(nFrom)+uint32(nTo))) 15950 if pRule == uintptr(0) { 15951 rc = SQLITE_NOMEM 15952 } else { 15953 libc.Xmemset(tls, pRule, 0, uint32(unsafe.Sizeof(fuzzer_rule{}))) 15954 (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 20 15955 *(*uintptr)(unsafe.Pointer(pRule + 4)) += uintptr(nTo + 1) 15956 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom = fuzzer_len(nFrom) 15957 libc.Xmemcpy(tls, (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint32(nFrom+1)) 15958 libc.Xmemcpy(tls, pRule+20, zTo, uint32(nTo+1)) 15959 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo = fuzzer_len(nTo) 15960 (*fuzzer_rule)(unsafe.Pointer(pRule)).FrCost = nCost 15961 (*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset = int32(iRuleset) 15962 } 15963 } 15964 15965 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 15966 return rc 15967 } 15968 15969 func fuzzerLoadRules(tls *libc.TLS, db uintptr, p uintptr, zDb uintptr, zData uintptr, pzErr uintptr) int32 { 15970 bp := tls.Alloc(124) 15971 defer tls.Free(124) 15972 15973 var rc int32 = SQLITE_OK 15974 var zSql uintptr 15975 var pHead uintptr = uintptr(0) 15976 15977 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, zDb, zData)) 15978 if zSql == uintptr(0) { 15979 rc = SQLITE_NOMEM 15980 } else { 15981 var rc2 int32 15982 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 15983 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 15984 if rc != SQLITE_OK { 15985 *(*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))) 15986 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 15987 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 15988 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, zData, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 15989 rc = SQLITE_ERROR 15990 } else { 15991 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 15992 *(*uintptr)(unsafe.Pointer(bp + 60)) = uintptr(0) 15993 rc = fuzzerLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+60, pzErr) 15994 if *(*uintptr)(unsafe.Pointer(bp + 60)) != 0 { 15995 (*fuzzer_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 60)))).FpNext = pHead 15996 pHead = *(*uintptr)(unsafe.Pointer(bp + 60)) 15997 } 15998 } 15999 } 16000 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 16001 if rc == SQLITE_OK { 16002 rc = rc2 16003 } 16004 } 16005 sqlite3.Xsqlite3_free(tls, zSql) 16006 16007 if rc == SQLITE_OK { 16008 var i uint32 16009 var pX uintptr 16010 16011 for i = uint32(0); i < uint32(unsafe.Sizeof([15]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0))); i++ { 16012 *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = uintptr(0) 16013 } 16014 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 16015 pHead = (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext 16016 (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 16017 for i = uint32(0); *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) != 0 && i < uint32(unsafe.Sizeof([15]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0)))-uint32(1); i++ { 16018 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)), pX) 16019 *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = uintptr(0) 16020 } 16021 *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)), pX) 16022 } 16023 pX = *(*uintptr)(unsafe.Pointer(bp + 64)) 16024 i = uint32(1) 16025 for ; i < uint32(unsafe.Sizeof([15]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0))); i++ { 16026 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 64 + uintptr(i)*4)), pX) 16027 } 16028 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = fuzzerMergeRules(tls, (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule, pX) 16029 } else { 16030 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = pHead 16031 } 16032 16033 return rc 16034 } 16035 16036 func fuzzerDequote(tls *libc.TLS, zIn uintptr) uintptr { 16037 var nIn sqlite3_int64 16038 var zOut uintptr 16039 16040 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 16041 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 16042 if zOut != 0 { 16043 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 16044 16045 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 16046 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 16047 } else { 16048 var iOut int32 = 0 16049 var iIn int32 16050 16051 if int32(q) == '[' { 16052 q = int8(']') 16053 } 16054 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 16055 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 16056 iIn++ 16057 } 16058 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 16059 } 16060 } 16061 16062 } 16063 return zOut 16064 } 16065 16066 func fuzzerDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 16067 var p uintptr = pVtab 16068 16069 for (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule != 0 { 16070 var pRule uintptr = (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule 16071 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16072 sqlite3.Xsqlite3_free(tls, pRule) 16073 } 16074 sqlite3.Xsqlite3_free(tls, p) 16075 return SQLITE_OK 16076 } 16077 16078 func fuzzerConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 16079 bp := tls.Alloc(8) 16080 defer tls.Free(8) 16081 16082 var rc int32 = SQLITE_OK 16083 var pNew uintptr = uintptr(0) 16084 var zModule uintptr = *(*uintptr)(unsafe.Pointer(argv)) 16085 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*4)) 16086 16087 if argc != 4 { 16088 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 16089 ts+5394, libc.VaList(bp, zModule)) 16090 rc = SQLITE_ERROR 16091 } else { 16092 var nModule sqlite3_int64 16093 16094 nModule = sqlite3_int64(libc.Xstrlen(tls, zModule)) 16095 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(sqlite3_int64(unsafe.Sizeof(fuzzer_vtab{}))+nModule+int64(1))) 16096 if pNew == uintptr(0) { 16097 rc = SQLITE_NOMEM 16098 } else { 16099 var zTab uintptr 16100 16101 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(fuzzer_vtab{}))) 16102 (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName = pNew + 1*24 16103 libc.Xmemcpy(tls, (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName, zModule, size_t(nModule+int64(1))) 16104 16105 zTab = fuzzerDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4))) 16106 if zTab == uintptr(0) { 16107 rc = SQLITE_NOMEM 16108 } else { 16109 rc = fuzzerLoadRules(tls, db, pNew, zDb, zTab, pzErr) 16110 sqlite3.Xsqlite3_free(tls, zTab) 16111 } 16112 16113 if rc == SQLITE_OK { 16114 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5445) 16115 } 16116 if rc != SQLITE_OK { 16117 fuzzerDisconnect(tls, pNew) 16118 pNew = uintptr(0) 16119 } else { 16120 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 16121 } 16122 } 16123 } 16124 16125 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 16126 return rc 16127 } 16128 16129 func fuzzerOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 16130 var p uintptr = pVTab 16131 var pCur uintptr 16132 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fuzzer_cursor{}))) 16133 if pCur == uintptr(0) { 16134 return SQLITE_NOMEM 16135 } 16136 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(fuzzer_cursor{}))) 16137 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab = p 16138 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 16139 (*fuzzer_vtab)(unsafe.Pointer(p)).FnCursor++ 16140 return SQLITE_OK 16141 } 16142 16143 func fuzzerClearStemList(tls *libc.TLS, pStem uintptr) { 16144 for pStem != 0 { 16145 var pNext uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext 16146 sqlite3.Xsqlite3_free(tls, pStem) 16147 pStem = pNext 16148 } 16149 } 16150 16151 func fuzzerClearCursor(tls *libc.TLS, pCur uintptr, clearHash int32) { 16152 var i int32 16153 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 16154 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone) 16155 for i = 0; i < FUZZER_NQUEUE; i++ { 16156 fuzzerClearStemList(tls, *(*uintptr)(unsafe.Pointer(pCur + 28 + uintptr(i)*4))) 16157 } 16158 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16159 if clearHash != 0 && (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem != 0 { 16160 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = 0 16161 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16162 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = uintptr(0) 16163 libc.Xmemset(tls, pCur+28, 0, uint32(unsafe.Sizeof([20]uintptr{}))) 16164 libc.Xmemset(tls, pCur+152, 0, uint32(unsafe.Sizeof([4001]uintptr{}))) 16165 } 16166 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem = 0 16167 } 16168 16169 func fuzzerClose(tls *libc.TLS, cur uintptr) int32 { 16170 var pCur uintptr = cur 16171 fuzzerClearCursor(tls, pCur, 0) 16172 sqlite3.Xsqlite3_free(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 16173 (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 16174 sqlite3.Xsqlite3_free(tls, pCur) 16175 return SQLITE_OK 16176 } 16177 16178 func fuzzerRender(tls *libc.TLS, pStem uintptr, pzBuf uintptr, pnBuf uintptr) int32 { 16179 var pRule uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule 16180 var n int32 16181 var z uintptr 16182 16183 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis) + int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo) - int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) 16184 if *(*int32)(unsafe.Pointer(pnBuf)) < n+1 { 16185 *(*uintptr)(unsafe.Pointer(pzBuf)) = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(pzBuf)), n+100) 16186 if *(*uintptr)(unsafe.Pointer(pzBuf)) == uintptr(0) { 16187 return SQLITE_NOMEM 16188 } 16189 *(*int32)(unsafe.Pointer(pnBuf)) = n + 100 16190 } 16191 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) 16192 z = *(*uintptr)(unsafe.Pointer(pzBuf)) 16193 if n < 0 { 16194 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint32(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)+1)) 16195 } else { 16196 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint32(n)) 16197 libc.Xmemcpy(tls, z+uintptr(n), pRule+20, uint32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)) 16198 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)), 16199 uint32(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-n-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)+1)) 16200 } 16201 16202 return SQLITE_OK 16203 } 16204 16205 func fuzzerHash(tls *libc.TLS, z uintptr) uint32 { 16206 var h uint32 = uint32(0) 16207 for *(*int8)(unsafe.Pointer(z)) != 0 { 16208 h = h<<3 ^ h>>29 ^ uint32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 16209 } 16210 return h % uint32(FUZZER_HASH) 16211 } 16212 16213 func fuzzerCost(tls *libc.TLS, pStem uintptr) fuzzer_cost { 16214 return libc.AssignPtrInt32(pStem+20, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrBaseCost+(*fuzzer_rule)(unsafe.Pointer((*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule)).FrCost) 16215 } 16216 16217 func fuzzerSeen(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 16218 var h uint32 16219 var pLookup uintptr 16220 16221 if fuzzerRender(tls, pStem, pCur+112, pCur+116) == SQLITE_NOMEM { 16222 return -1 16223 } 16224 h = fuzzerHash(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 16225 pLookup = *(*uintptr)(unsafe.Pointer(pCur + 152 + uintptr(h)*4)) 16226 for pLookup != 0 && libc.Xstrcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pLookup)).FzBasis, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) != 0 { 16227 pLookup = (*fuzzer_stem)(unsafe.Pointer(pLookup)).FpHash 16228 } 16229 return libc.Bool32(pLookup != uintptr(0)) 16230 } 16231 16232 func fuzzerSkipRule(tls *libc.TLS, pRule uintptr, pStem uintptr, iRuleset int32) int32 { 16233 return libc.Bool32(pRule != 0 && ((*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset != iRuleset || 16234 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)) 16235 } 16236 16237 func fuzzerAdvance(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 16238 var pRule uintptr 16239 for libc.AssignUintptr(&pRule, (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule) != uintptr(0) { 16240 for int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) < int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) { 16241 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn++ 16242 if int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) == 0 || 16243 libc.Xmemcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis+uintptr((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn), (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, uint32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)) == 0 { 16244 var rc int32 = fuzzerSeen(tls, pCur, pStem) 16245 if rc < 0 { 16246 return -1 16247 } 16248 if rc == 0 { 16249 fuzzerCost(tls, pStem) 16250 return 1 16251 } 16252 } 16253 } 16254 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = int8(-1) 16255 for __ccgo := true; __ccgo; __ccgo = fuzzerSkipRule(tls, pRule, pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 16256 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16257 } 16258 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pRule 16259 if pRule != 0 && fuzzerCost(tls, pStem) > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit { 16260 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = uintptr(0) 16261 } 16262 } 16263 return 0 16264 } 16265 16266 func fuzzerMergeStems(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 16267 bp := tls.Alloc(28) 16268 defer tls.Free(28) 16269 16270 var pTail uintptr 16271 16272 pTail = bp 16273 for pA != 0 && pB != 0 { 16274 if (*fuzzer_stem)(unsafe.Pointer(pA)).FrCostX <= (*fuzzer_stem)(unsafe.Pointer(pB)).FrCostX { 16275 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 16276 pTail = pA 16277 pA = (*fuzzer_stem)(unsafe.Pointer(pA)).FpNext 16278 } else { 16279 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 16280 pTail = pB 16281 pB = (*fuzzer_stem)(unsafe.Pointer(pB)).FpNext 16282 } 16283 } 16284 if pA == uintptr(0) { 16285 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 16286 } else { 16287 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 16288 } 16289 return (*fuzzer_stem)(unsafe.Pointer(bp)).FpNext 16290 } 16291 16292 func fuzzerLowestCostStem(tls *libc.TLS, pCur uintptr) uintptr { 16293 var pBest uintptr 16294 var pX uintptr 16295 var iBest int32 16296 var i int32 16297 16298 if (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem == uintptr(0) { 16299 iBest = -1 16300 pBest = uintptr(0) 16301 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 16302 pX = *(*uintptr)(unsafe.Pointer(pCur + 28 + uintptr(i)*4)) 16303 if pX == uintptr(0) { 16304 continue 16305 } 16306 if pBest == uintptr(0) || (*fuzzer_stem)(unsafe.Pointer(pBest)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX { 16307 pBest = pX 16308 iBest = i 16309 } 16310 } 16311 if pBest != 0 { 16312 *(*uintptr)(unsafe.Pointer(pCur + 28 + uintptr(iBest)*4)) = (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext 16313 (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext = uintptr(0) 16314 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pBest 16315 } 16316 } 16317 return (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 16318 } 16319 16320 func fuzzerInsert(tls *libc.TLS, pCur uintptr, pNew uintptr) uintptr { 16321 var pX uintptr 16322 var i int32 16323 16324 if libc.AssignUintptr(&pX, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) && (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pNew)).FrCostX { 16325 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 16326 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pNew 16327 pNew = pX 16328 } 16329 16330 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 16331 pX = pNew 16332 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 16333 if *(*uintptr)(unsafe.Pointer(pCur + 28 + uintptr(i)*4)) != 0 { 16334 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 28 + uintptr(i)*4))) 16335 *(*uintptr)(unsafe.Pointer(pCur + 28 + uintptr(i)*4)) = uintptr(0) 16336 } else { 16337 *(*uintptr)(unsafe.Pointer(pCur + 28 + uintptr(i)*4)) = pX 16338 break 16339 } 16340 } 16341 if i > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue { 16342 if i < FUZZER_NQUEUE { 16343 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = i 16344 *(*uintptr)(unsafe.Pointer(pCur + 28 + uintptr(i)*4)) = pX 16345 } else { 16346 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 28 + 19*4))) 16347 *(*uintptr)(unsafe.Pointer(pCur + 28 + 19*4)) = pX 16348 } 16349 } 16350 16351 return fuzzerLowestCostStem(tls, pCur) 16352 } 16353 16354 func fuzzerNewStem(tls *libc.TLS, pCur uintptr, zWord uintptr, rBaseCost fuzzer_cost) uintptr { 16355 var pNew uintptr 16356 var pRule uintptr 16357 var h uint32 16358 16359 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(fuzzer_stem{}))+libc.Xstrlen(tls, zWord)+uint32(1))) 16360 if pNew == uintptr(0) { 16361 return uintptr(0) 16362 } 16363 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(fuzzer_stem{}))) 16364 (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis = pNew + 1*28 16365 (*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis = fuzzer_len(libc.Xstrlen(tls, zWord)) 16366 libc.Xmemcpy(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis, zWord, uint32(int32((*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis)+1)) 16367 pRule = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 16368 for fuzzerSkipRule(tls, pRule, pNew, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 16369 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16370 } 16371 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpRule = pRule 16372 (*fuzzer_stem)(unsafe.Pointer(pNew)).Fn = int8(-1) 16373 (*fuzzer_stem)(unsafe.Pointer(pNew)).FrBaseCost = libc.AssignPtrInt32(pNew+20, rBaseCost) 16374 h = fuzzerHash(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis) 16375 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpHash = *(*uintptr)(unsafe.Pointer(pCur + 152 + uintptr(h)*4)) 16376 *(*uintptr)(unsafe.Pointer(pCur + 152 + uintptr(h)*4)) = pNew 16377 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem++ 16378 return pNew 16379 } 16380 16381 func fuzzerNext(tls *libc.TLS, cur uintptr) int32 { 16382 var pCur uintptr = cur 16383 var rc int32 16384 var pStem uintptr 16385 var pNew uintptr 16386 16387 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid++ 16388 16389 pStem = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 16390 if (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX > 0 { 16391 rc = fuzzerRender(tls, pStem, pCur+112, pCur+116) 16392 if rc == SQLITE_NOMEM { 16393 return SQLITE_NOMEM 16394 } 16395 pNew = fuzzerNewStem(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX) 16396 if pNew != 0 { 16397 if fuzzerAdvance(tls, pCur, pNew) == 0 { 16398 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 16399 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pNew 16400 } else { 16401 if fuzzerInsert(tls, pCur, pNew) == pNew { 16402 return SQLITE_OK 16403 } 16404 } 16405 } else { 16406 return SQLITE_NOMEM 16407 } 16408 } 16409 16410 for libc.AssignUintptr(&pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) { 16411 var res int32 = fuzzerAdvance(tls, pCur, pStem) 16412 if res < 0 { 16413 return SQLITE_NOMEM 16414 } else if res > 0 { 16415 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16416 pStem = fuzzerInsert(tls, pCur, pStem) 16417 if libc.AssignInt32(&rc, fuzzerSeen(tls, pCur, pStem)) != 0 { 16418 if rc < 0 { 16419 return SQLITE_NOMEM 16420 } 16421 continue 16422 } 16423 return SQLITE_OK 16424 } 16425 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16426 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 16427 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pStem 16428 if fuzzerLowestCostStem(tls, pCur) != 0 { 16429 rc = fuzzerSeen(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 16430 if rc < 0 { 16431 return SQLITE_NOMEM 16432 } 16433 if rc == 0 { 16434 return SQLITE_OK 16435 } 16436 } 16437 } 16438 16439 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16440 return SQLITE_OK 16441 } 16442 16443 func fuzzerFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 16444 var pCur uintptr = pVtabCursor 16445 var zWord uintptr = ts + 584 16446 var pStem uintptr 16447 var idx int32 16448 16449 fuzzerClearCursor(tls, pCur, 1) 16450 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 2147483647 16451 idx = 0 16452 if idxNum&1 != 0 { 16453 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 16454 idx++ 16455 } 16456 if idxNum&2 != 0 { 16457 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*4))) 16458 idx++ 16459 } 16460 if idxNum&4 != 0 { 16461 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*4))) 16462 idx++ 16463 } 16464 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FpNext = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 16465 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FrCost = 0 16466 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnFrom = int8(0) 16467 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnTo = int8(0) 16468 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FzFrom = ts + 584 16469 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 16470 16471 if int32(libc.Xstrlen(tls, zWord)) < FUZZER_MX_OUTPUT_LENGTH { 16472 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = libc.AssignUintptr(&pStem, fuzzerNewStem(tls, pCur, zWord, 0)) 16473 if pStem == uintptr(0) { 16474 return SQLITE_NOMEM 16475 } 16476 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pCur + 128 16477 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = (*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis 16478 } else { 16479 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16480 } 16481 16482 return SQLITE_OK 16483 } 16484 16485 func fuzzerColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 16486 var pCur uintptr = cur 16487 if i == 0 { 16488 if fuzzerRender(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem, pCur+112, pCur+116) == SQLITE_NOMEM { 16489 return SQLITE_NOMEM 16490 } 16491 sqlite3.Xsqlite3_result_text(tls, ctx, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 16492 } else if i == 1 { 16493 sqlite3.Xsqlite3_result_int(tls, ctx, (*fuzzer_stem)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem)).FrCostX) 16494 } else { 16495 sqlite3.Xsqlite3_result_null(tls, ctx) 16496 } 16497 return SQLITE_OK 16498 } 16499 16500 func fuzzerRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 16501 var pCur uintptr = cur 16502 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid 16503 return SQLITE_OK 16504 } 16505 16506 func fuzzerEof(tls *libc.TLS, cur uintptr) int32 { 16507 var pCur uintptr = cur 16508 return libc.Bool32((*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit <= 0) 16509 } 16510 16511 func fuzzerBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 16512 var iPlan int32 = 0 16513 var iDistTerm int32 = -1 16514 var iRulesetTerm int32 = -1 16515 var i int32 16516 var seenMatch int32 = 0 16517 var pConstraint uintptr 16518 var rCost float64 = 1e12 16519 16520 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 16521 i = 0 16522 __1: 16523 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 16524 goto __3 16525 } 16526 { 16527 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16528 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16529 seenMatch = 1 16530 } 16531 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 16532 goto __2 16533 } 16534 if iPlan&1 == 0 && 16535 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16536 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16537 iPlan = iPlan | 1 16538 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 16539 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16540 rCost = rCost / 1e6 16541 } 16542 if iPlan&2 == 0 && 16543 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 16544 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 16545 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 16546 iPlan = iPlan | 2 16547 iDistTerm = i 16548 rCost = rCost / 10.0 16549 } 16550 if iPlan&4 == 0 && 16551 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 16552 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 16553 iPlan = iPlan | 4 16554 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16555 iRulesetTerm = i 16556 rCost = rCost / 10.0 16557 } 16558 16559 } 16560 goto __2 16561 __2: 16562 i++ 16563 pConstraint += 12 16564 goto __1 16565 goto __3 16566 __3: 16567 ; 16568 if iPlan&2 != 0 { 16569 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 16570 } 16571 if iPlan&4 != 0 { 16572 var idx int32 = 1 16573 if iPlan&1 != 0 { 16574 idx++ 16575 } 16576 if iPlan&2 != 0 { 16577 idx++ 16578 } 16579 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRulesetTerm)*8)).FargvIndex = idx 16580 } 16581 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 16582 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 16583 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 16584 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 16585 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 16586 } 16587 if seenMatch != 0 && iPlan&1 == 0 { 16588 rCost = 1e99 16589 } 16590 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 16591 16592 return SQLITE_OK 16593 } 16594 16595 var fuzzerModule = sqlite3_module{ 16596 FxCreate: 0, 16597 FxConnect: 0, 16598 FxBestIndex: 0, 16599 FxDisconnect: 0, 16600 FxDestroy: 0, 16601 FxOpen: 0, 16602 FxClose: 0, 16603 FxFilter: 0, 16604 FxNext: 0, 16605 FxEof: 0, 16606 FxColumn: 0, 16607 FxRowid: 0, 16608 } 16609 16610 func sqlite3_fuzzer_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16611 var rc int32 = SQLITE_OK 16612 _ = pApi 16613 16614 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+5483, uintptr(unsafe.Pointer(&fuzzerModule)), uintptr(0)) 16615 return rc 16616 } 16617 16618 func ieee754func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16619 bp := tls.Alloc(156) 16620 defer tls.Free(156) 16621 16622 if argc == 1 { 16623 var m sqlite3_int64 16624 16625 var e int32 16626 var isNeg int32 16627 16628 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16629 uint32(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint32(unsafe.Sizeof(float64(0))) { 16630 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16631 var i uint32 16632 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = uint64(0) 16633 for i = uint32(0); i < uint32(unsafe.Sizeof(float64(0))); i++ { 16634 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 24))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16635 } 16636 libc.Xmemcpy(tls, bp+16, bp+24, uint32(unsafe.Sizeof(float64(0)))) 16637 } else { 16638 *(*float64)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16639 } 16640 if *(*float64)(unsafe.Pointer(bp + 16)) < 0.0 { 16641 isNeg = 1 16642 *(*float64)(unsafe.Pointer(bp + 16)) = -*(*float64)(unsafe.Pointer(bp + 16)) 16643 } else { 16644 isNeg = 0 16645 } 16646 libc.Xmemcpy(tls, bp+32, bp+16, uint32(unsafe.Sizeof(sqlite3_int64(0)))) 16647 if *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) == int64(0) { 16648 e = 0 16649 m = int64(0) 16650 } else { 16651 e = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 32)) >> 52) 16652 m = *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) & (int64(1)<<52 - int64(1)) 16653 if e == 0 { 16654 m <<= 1 16655 } else { 16656 m = m | int64(1)<<52 16657 } 16658 for e < 1075 && m > int64(0) && m&int64(1) == int64(0) { 16659 m >>= 1 16660 e++ 16661 } 16662 if isNeg != 0 { 16663 m = -m 16664 } 16665 } 16666 switch *(*int32)(unsafe.Pointer(sqlite3.Xsqlite3_user_data(tls, context))) { 16667 case 0: 16668 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+5490, 16669 libc.VaList(bp, m, e-1075)) 16670 sqlite3.Xsqlite3_result_text(tls, context, bp+40, -1, libc.UintptrFromInt32(-1)) 16671 break 16672 fallthrough 16673 case 1: 16674 sqlite3.Xsqlite3_result_int64(tls, context, m) 16675 break 16676 fallthrough 16677 case 2: 16678 sqlite3.Xsqlite3_result_int(tls, context, e-1075) 16679 break 16680 } 16681 } else { 16682 var m sqlite3_int64 16683 var e sqlite3_int64 16684 16685 var isNeg int32 = 0 16686 m = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 16687 e = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 16688 16689 if e > int64(10000) { 16690 e = int64(10000) 16691 } else if e < int64(-10000) { 16692 e = int64(-10000) 16693 } 16694 16695 if m < int64(0) { 16696 isNeg = 1 16697 m = -m 16698 if m < int64(0) { 16699 return 16700 } 16701 } else if m == int64(0) && e > int64(-1000) && e < int64(1000) { 16702 sqlite3.Xsqlite3_result_double(tls, context, 0.0) 16703 return 16704 } 16705 for m>>32&int64(0xffe00000) != 0 { 16706 m >>= 1 16707 e++ 16708 } 16709 for m != int64(0) && m>>32&int64(0xfff00000) == int64(0) { 16710 m <<= 1 16711 e-- 16712 } 16713 e = e + int64(1075) 16714 if e <= int64(0) { 16715 if int64(1)-e >= int64(64) { 16716 m = int64(0) 16717 } else { 16718 m >>= int64(1) - e 16719 } 16720 e = int64(0) 16721 } else if e > int64(0x7ff) { 16722 e = int64(0x7ff) 16723 } 16724 *(*sqlite3_int64)(unsafe.Pointer(bp + 148)) = m & (int64(1)<<52 - int64(1)) 16725 *(*sqlite3_int64)(unsafe.Pointer(bp + 148)) |= e << 52 16726 if isNeg != 0 { 16727 *(*sqlite3_int64)(unsafe.Pointer(bp + 148)) |= libc.Int64FromUint64(uint64(1) << 63) 16728 } 16729 libc.Xmemcpy(tls, bp+140, bp+148, uint32(unsafe.Sizeof(float64(0)))) 16730 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 140))) 16731 } 16732 } 16733 16734 func ieee754func_from_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16735 bp := tls.Alloc(16) 16736 defer tls.Free(16) 16737 16738 _ = argc 16739 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16740 uint32(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint32(unsafe.Sizeof(float64(0))) { 16741 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16742 var i uint32 16743 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = uint64(0) 16744 for i = uint32(0); i < uint32(unsafe.Sizeof(float64(0))); i++ { 16745 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 8))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16746 } 16747 libc.Xmemcpy(tls, bp, bp+8, uint32(unsafe.Sizeof(float64(0)))) 16748 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp))) 16749 } 16750 } 16751 16752 func ieee754func_to_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16753 bp := tls.Alloc(24) 16754 defer tls.Free(24) 16755 16756 _ = argc 16757 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_FLOAT || 16758 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_INTEGER { 16759 *(*float64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16760 16761 var i uint32 16762 libc.Xmemcpy(tls, bp, bp+8, uint32(unsafe.Sizeof(float64(0)))) 16763 for i = uint32(1); i <= uint32(unsafe.Sizeof(float64(0))); i++ { 16764 *(*uint8)(unsafe.Pointer(bp + 16 + uintptr(uint32(unsafe.Sizeof(float64(0)))-i))) = uint8(*(*sqlite3_uint64)(unsafe.Pointer(bp)) & uint64(0xff)) 16765 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 8 16766 } 16767 sqlite3.Xsqlite3_result_blob(tls, context, bp+16, int32(unsafe.Sizeof(float64(0))), libc.UintptrFromInt32(-1)) 16768 } 16769 } 16770 16771 func sqlite3_ieee_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16772 var i uint32 16773 var rc int32 = SQLITE_OK 16774 _ = pApi 16775 16776 _ = pzErrMsg 16777 for i = uint32(0); i < uint32(unsafe.Sizeof(aFunc1))/uint32(unsafe.Sizeof(struct { 16778 FzFName uintptr 16779 FnArg int32 16780 FiAux int32 16781 FxFunc uintptr 16782 }{})) && rc == SQLITE_OK; i++ { 16783 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc1[i].FzFName, aFunc1[i].FnArg, 16784 SQLITE_UTF8|SQLITE_INNOCUOUS, 16785 uintptr(unsafe.Pointer(&aFunc1))+uintptr(i)*16+8, 16786 aFunc1[i].FxFunc, uintptr(0), uintptr(0)) 16787 } 16788 return rc 16789 } 16790 16791 var aFunc1 = [6]struct { 16792 FzFName uintptr 16793 FnArg int32 16794 FiAux int32 16795 FxFunc uintptr 16796 }{ 16797 {FzFName: ts + 5507, FnArg: 1, FxFunc: 0}, 16798 {FzFName: ts + 5507, FnArg: 2, FxFunc: 0}, 16799 {FzFName: ts + 5515, FnArg: 1, FiAux: 1, FxFunc: 0}, 16800 {FzFName: ts + 5532, FnArg: 1, FiAux: 2, FxFunc: 0}, 16801 {FzFName: ts + 5549, FnArg: 1, FxFunc: 0}, 16802 {FzFName: ts + 5565, FnArg: 1, FxFunc: 0}, 16803 } 16804 16805 func sqlite3_mmap_warm(tls *libc.TLS, db uintptr, zDb uintptr) int32 { 16806 bp := tls.Alloc(76) 16807 defer tls.Free(76) 16808 16809 var rc int32 = SQLITE_OK 16810 var zSql uintptr = uintptr(0) 16811 var pgsz int32 = 0 16812 var nTotal int32 = 0 16813 16814 if 0 == sqlite3.Xsqlite3_get_autocommit(tls, db) { 16815 return SQLITE_MISUSE 16816 } 16817 16818 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5583, 16819 libc.VaList(bp, func() uintptr { 16820 if zDb != 0 { 16821 return ts + 5624 16822 } 16823 return ts + 584 16824 }(), func() uintptr { 16825 if zDb != 0 { 16826 return zDb 16827 } 16828 return ts + 584 16829 }(), func() uintptr { 16830 if zDb != 0 { 16831 return ts + 5626 16832 } 16833 return ts + 584 16834 }())) 16835 if zSql == uintptr(0) { 16836 return SQLITE_NOMEM 16837 } 16838 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 16839 sqlite3.Xsqlite3_free(tls, zSql) 16840 16841 if rc == SQLITE_OK { 16842 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5629, 16843 libc.VaList(bp+24, func() uintptr { 16844 if zDb != 0 { 16845 return ts + 5624 16846 } 16847 return ts + 584 16848 }(), func() uintptr { 16849 if zDb != 0 { 16850 return zDb 16851 } 16852 return ts + 584 16853 }(), func() uintptr { 16854 if zDb != 0 { 16855 return ts + 5626 16856 } 16857 return ts + 584 16858 }())) 16859 if zSql == uintptr(0) { 16860 rc = SQLITE_NOMEM 16861 } else { 16862 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 16863 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 16864 sqlite3.Xsqlite3_free(tls, zSql) 16865 if rc == SQLITE_OK { 16866 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 16867 pgsz = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 16868 } 16869 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 16870 } 16871 if rc == SQLITE_OK && pgsz == 0 { 16872 rc = SQLITE_ERROR 16873 } 16874 } 16875 } 16876 16877 if rc == SQLITE_OK { 16878 var rc2 int32 16879 *(*uintptr)(unsafe.Pointer(bp + 68)) = uintptr(0) 16880 rc = sqlite3.Xsqlite3_file_control(tls, db, zDb, SQLITE_FCNTL_FILE_POINTER, bp+68) 16881 if rc == SQLITE_OK && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 68)))).FpMethods)).FiVersion >= 3 { 16882 var iPg sqlite3_int64 = int64(1) 16883 var p uintptr = (*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 68)))).FpMethods 16884 for 1 != 0 { 16885 rc = (*struct { 16886 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 16887 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods)(unsafe.Pointer(p)).FxFetch})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 68)), sqlite3_int64(pgsz)*iPg, pgsz, bp+72) 16888 if rc != SQLITE_OK || *(*uintptr)(unsafe.Pointer(bp + 72)) == uintptr(0) { 16889 break 16890 } 16891 16892 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72))))) 16893 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)) + uintptr(pgsz-1)))) 16894 16895 rc = (*struct { 16896 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 16897 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods)(unsafe.Pointer(p)).FxUnfetch})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 68)), sqlite3_int64(pgsz)*iPg, *(*uintptr)(unsafe.Pointer(bp + 72))) 16898 if rc != SQLITE_OK { 16899 break 16900 } 16901 iPg++ 16902 } 16903 sqlite3.Xsqlite3_log(tls, SQLITE_OK, 16904 ts+5652, libc.VaList(bp+48, func() int64 { 16905 if iPg == int64(1) { 16906 return int64(0) 16907 } 16908 return iPg 16909 }(), 16910 sqlite3.Xsqlite3_db_filename(tls, db, zDb))) 16911 } 16912 16913 rc2 = sqlite3.Xsqlite3_exec(tls, db, ts+5702, uintptr(0), uintptr(0), uintptr(0)) 16914 if rc == SQLITE_OK { 16915 rc = rc2 16916 } 16917 } 16918 16919 return rc 16920 } 16921 16922 type nextCharContext1 = struct { 16923 Fdb uintptr 16924 FpStmt uintptr 16925 FzPrefix uintptr 16926 FnPrefix int32 16927 FnAlloc int32 16928 FnUsed int32 16929 FaResult uintptr 16930 FmallocFailed int32 16931 FotherError int32 16932 } 16933 16934 type nextCharContext = nextCharContext1 16935 16936 func nextCharAppend(tls *libc.TLS, p uintptr, c uint32) { 16937 var i int32 16938 for i = 0; i < (*nextCharContext)(unsafe.Pointer(p)).FnUsed; i++ { 16939 if *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(i)*4)) == c { 16940 return 16941 } 16942 } 16943 if (*nextCharContext)(unsafe.Pointer(p)).FnUsed+1 > (*nextCharContext)(unsafe.Pointer(p)).FnAlloc { 16944 var aNew uintptr 16945 var n int32 = (*nextCharContext)(unsafe.Pointer(p)).FnAlloc*2 + 30 16946 aNew = sqlite3.Xsqlite3_realloc64(tls, (*nextCharContext)(unsafe.Pointer(p)).FaResult, uint64(uint32(n)*uint32(unsafe.Sizeof(uint32(0))))) 16947 if aNew == uintptr(0) { 16948 (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed = 1 16949 return 16950 } else { 16951 (*nextCharContext)(unsafe.Pointer(p)).FaResult = aNew 16952 (*nextCharContext)(unsafe.Pointer(p)).FnAlloc = n 16953 } 16954 } 16955 *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(libc.PostIncInt32(&(*nextCharContext)(unsafe.Pointer(p)).FnUsed, 1))*4)) = c 16956 } 16957 16958 func writeUtf8(tls *libc.TLS, z uintptr, c uint32) int32 { 16959 if c < uint32(0x00080) { 16960 *(*uint8)(unsafe.Pointer(z)) = uint8(c & uint32(0xff)) 16961 return 1 16962 } 16963 if c < uint32(0x00800) { 16964 *(*uint8)(unsafe.Pointer(z)) = uint8(0xC0 + int32(uint8(c>>6&uint32(0x1F)))) 16965 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16966 return 2 16967 } 16968 if c < uint32(0x10000) { 16969 *(*uint8)(unsafe.Pointer(z)) = uint8(0xE0 + int32(uint8(c>>12&uint32(0x0F)))) 16970 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 16971 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16972 return 3 16973 } 16974 *(*uint8)(unsafe.Pointer(z)) = uint8(0xF0 + int32(uint8(c>>18&uint32(0x07)))) 16975 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>12&uint32(0x3F)))) 16976 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 16977 *(*uint8)(unsafe.Pointer(z + 3)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 16978 return 4 16979 } 16980 16981 func readUtf8(tls *libc.TLS, z uintptr, pOut uintptr) int32 { 16982 var c uint32 = uint32(*(*uint8)(unsafe.Pointer(z))) 16983 if c < uint32(0xc0) { 16984 *(*uint32)(unsafe.Pointer(pOut)) = c 16985 return 1 16986 } else { 16987 var n int32 = 1 16988 c = uint32(validBits[c-uint32(0xc0)]) 16989 for int32(*(*uint8)(unsafe.Pointer(z + uintptr(n))))&0xc0 == 0x80 { 16990 c = c<<6 + uint32(0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&n, 1)))))) 16991 } 16992 if c < uint32(0x80) || c&0xFFFFF800 == uint32(0xD800) || c&0xFFFFFFFE == uint32(0xFFFE) { 16993 c = uint32(0xFFFD) 16994 } 16995 *(*uint32)(unsafe.Pointer(pOut)) = c 16996 return n 16997 } 16998 return int32(0) 16999 } 17000 17001 var validBits = [64]uint8{ 17002 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17003 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 17004 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 17005 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 17006 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17007 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 17008 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17009 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 17010 } 17011 17012 func findNextChars(tls *libc.TLS, p uintptr) { 17013 bp := tls.Alloc(12) 17014 defer tls.Free(12) 17015 17016 var cPrev uint32 = uint32(0) 17017 17018 var n int32 17019 var rc int32 17020 17021 for { 17022 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 1, (*nextCharContext)(unsafe.Pointer(p)).FzPrefix, (*nextCharContext)(unsafe.Pointer(p)).FnPrefix, 17023 uintptr(0)) 17024 n = writeUtf8(tls, bp, cPrev+uint32(1)) 17025 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 2, bp, n, uintptr(0)) 17026 rc = sqlite3.Xsqlite3_step(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17027 if rc == SQLITE_DONE { 17028 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17029 return 17030 } else if rc != SQLITE_ROW { 17031 (*nextCharContext)(unsafe.Pointer(p)).FotherError = rc 17032 return 17033 } else { 17034 var zOut uintptr = sqlite3.Xsqlite3_column_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 0) 17035 17036 n = readUtf8(tls, zOut+uintptr((*nextCharContext)(unsafe.Pointer(p)).FnPrefix), bp+8) 17037 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17038 nextCharAppend(tls, p, *(*uint32)(unsafe.Pointer(bp + 8))) 17039 cPrev = *(*uint32)(unsafe.Pointer(bp + 8)) 17040 if (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed != 0 { 17041 return 17042 } 17043 } 17044 } 17045 } 17046 17047 func nextCharFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17048 bp := tls.Alloc(116) 17049 defer tls.Free(116) 17050 17051 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 17052 var zField uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 17053 var zWhere uintptr 17054 var zCollName uintptr 17055 var zWhereClause uintptr = uintptr(0) 17056 var zColl uintptr = uintptr(0) 17057 var zSql uintptr 17058 var rc int32 17059 17060 libc.Xmemset(tls, bp+80, 0, uint32(unsafe.Sizeof(nextCharContext{}))) 17061 (*nextCharContext)(unsafe.Pointer(bp + 80)).Fdb = sqlite3.Xsqlite3_context_db_handle(tls, context) 17062 (*nextCharContext)(unsafe.Pointer(bp + 80)).FzPrefix = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 17063 (*nextCharContext)(unsafe.Pointer(bp + 80)).FnPrefix = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 17064 if zTable == uintptr(0) || zField == uintptr(0) || (*nextCharContext)(unsafe.Pointer(bp+80)).FzPrefix == uintptr(0) { 17065 return 17066 } 17067 if argc >= 4 && 17068 libc.AssignUintptr(&zWhere, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4)))) != uintptr(0) && 17069 int32(*(*uint8)(unsafe.Pointer(zWhere))) != 0 { 17070 zWhereClause = sqlite3.Xsqlite3_mprintf(tls, ts+5706, libc.VaList(bp, zWhere)) 17071 if zWhereClause == uintptr(0) { 17072 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17073 return 17074 } 17075 } else { 17076 zWhereClause = ts + 584 17077 } 17078 if argc >= 5 && 17079 libc.AssignUintptr(&zCollName, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4)))) != uintptr(0) && 17080 int32(*(*uint8)(unsafe.Pointer(zCollName))) != 0 { 17081 zColl = sqlite3.Xsqlite3_mprintf(tls, ts+5715, libc.VaList(bp+8, zCollName)) 17082 if zColl == uintptr(0) { 17083 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17084 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 17085 sqlite3.Xsqlite3_free(tls, zWhereClause) 17086 } 17087 return 17088 } 17089 } else { 17090 zColl = ts + 584 17091 } 17092 zSql = sqlite3.Xsqlite3_mprintf(tls, 17093 ts+5728, 17094 libc.VaList(bp+16, zField, zTable, zField, zColl, zField, zColl, zWhereClause, zColl)) 17095 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 17096 sqlite3.Xsqlite3_free(tls, zWhereClause) 17097 } 17098 if *(*int8)(unsafe.Pointer(zColl)) != 0 { 17099 sqlite3.Xsqlite3_free(tls, zColl) 17100 } 17101 if zSql == uintptr(0) { 17102 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17103 return 17104 } 17105 17106 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb, zSql, -1, bp+80+4, uintptr(0)) 17107 sqlite3.Xsqlite3_free(tls, zSql) 17108 if rc != 0 { 17109 sqlite3.Xsqlite3_result_error(tls, context, sqlite3.Xsqlite3_errmsg(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb), -1) 17110 return 17111 } 17112 findNextChars(tls, bp+80) 17113 if (*nextCharContext)(unsafe.Pointer(bp+80)).FmallocFailed != 0 { 17114 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17115 } else { 17116 var pRes uintptr 17117 pRes = sqlite3.Xsqlite3_malloc64(tls, uint64((*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed*4+1)) 17118 if pRes == uintptr(0) { 17119 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17120 } else { 17121 var i int32 17122 var n int32 = 0 17123 for i = 0; i < (*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed; i++ { 17124 n = n + writeUtf8(tls, pRes+uintptr(n), *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(bp+80)).FaResult + uintptr(i)*4))) 17125 } 17126 *(*uint8)(unsafe.Pointer(pRes + uintptr(n))) = uint8(0) 17127 sqlite3.Xsqlite3_result_text(tls, context, pRes, n, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 17128 } 17129 } 17130 sqlite3.Xsqlite3_finalize(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FpStmt) 17131 sqlite3.Xsqlite3_free(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FaResult) 17132 } 17133 17134 func sqlite3_nextchar_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17135 var rc int32 = SQLITE_OK 17136 _ = pApi 17137 17138 _ = pzErrMsg 17139 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 3, 17140 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17141 *(*uintptr)(unsafe.Pointer(&struct { 17142 f func(*libc.TLS, uintptr, int32, uintptr) 17143 }{nextCharFunc})), uintptr(0), uintptr(0)) 17144 if rc == SQLITE_OK { 17145 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 4, 17146 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17147 *(*uintptr)(unsafe.Pointer(&struct { 17148 f func(*libc.TLS, uintptr, int32, uintptr) 17149 }{nextCharFunc})), uintptr(0), uintptr(0)) 17150 } 17151 if rc == SQLITE_OK { 17152 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 5, 17153 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17154 *(*uintptr)(unsafe.Pointer(&struct { 17155 f func(*libc.TLS, uintptr, int32, uintptr) 17156 }{nextCharFunc})), uintptr(0), uintptr(0)) 17157 } 17158 return rc 17159 } 17160 17161 var aiClass = [256]uint8{ 17162 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), 17163 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), 17164 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), 17165 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), 17166 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), 17167 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), 17168 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), 17169 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), 17170 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), 17171 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), 17172 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), 17173 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), 17174 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), 17175 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), 17176 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), 17177 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), 17178 } 17179 17180 var sqlite3UpperToLower = [256]uint8{ 17181 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), 17182 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), 17183 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), 17184 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), 17185 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), 17186 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), 17187 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), 17188 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), 17189 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), 17190 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), 17191 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), 17192 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), 17193 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), 17194 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), 17195 uint8(252), uint8(253), uint8(254), uint8(255), 17196 } 17197 17198 var sqlite3CtypeMap = [256]uint8{ 17199 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17200 uint8(0x00), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x00), uint8(0x00), 17201 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17202 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17203 uint8(0x01), uint8(0x00), uint8(0x80), uint8(0x00), uint8(0x40), uint8(0x00), uint8(0x00), uint8(0x80), 17204 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17205 uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), 17206 uint8(0x0c), uint8(0x0c), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17207 uint8(0x00), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x02), 17208 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 17209 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 17210 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x80), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x40), 17211 uint8(0x80), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x22), 17212 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 17213 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 17214 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17215 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17216 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17217 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17218 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17219 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17220 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17221 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17222 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17223 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17224 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17225 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17226 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17227 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17228 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17229 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17230 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17231 } 17232 17233 func sqlite3GetToken(tls *libc.TLS, z uintptr, tokenType uintptr) int32 { 17234 var i int32 17235 var c int32 17236 switch int32(aiClass[*(*uint8)(unsafe.Pointer(z))]) { 17237 case CC_SPACE: 17238 { 17239 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x01 != 0; i++ { 17240 } 17241 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17242 return i 17243 17244 } 17245 case CC_MINUS: 17246 { 17247 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '-' { 17248 for i = 2; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && c != '\n'; i++ { 17249 } 17250 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17251 return i 17252 } 17253 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17254 return 1 17255 17256 } 17257 case CC_LP: 17258 { 17259 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17260 return 1 17261 17262 } 17263 case CC_RP: 17264 { 17265 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17266 return 1 17267 17268 } 17269 case CC_SEMI: 17270 { 17271 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17272 return 1 17273 17274 } 17275 case CC_PLUS: 17276 { 17277 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17278 return 1 17279 17280 } 17281 case CC_STAR: 17282 { 17283 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17284 return 1 17285 17286 } 17287 case CC_SLASH: 17288 { 17289 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '*' || int32(*(*uint8)(unsafe.Pointer(z + 2))) == 0 { 17290 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17291 return 1 17292 } 17293 i = 3 17294 c = int32(*(*uint8)(unsafe.Pointer(z + 2))) 17295 for ; (c != '*' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/') && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17296 } 17297 if c != 0 { 17298 i++ 17299 } 17300 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17301 return i 17302 17303 } 17304 case CC_PERCENT: 17305 { 17306 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17307 return 1 17308 17309 } 17310 case CC_EQ: 17311 { 17312 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17313 return 1 + libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z + 1))) == '=') 17314 17315 } 17316 case CC_LT: 17317 { 17318 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 17319 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17320 return 2 17321 } else if c == '>' { 17322 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17323 return 2 17324 } else if c == '<' { 17325 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17326 return 2 17327 } else { 17328 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17329 return 1 17330 } 17331 17332 } 17333 fallthrough 17334 case CC_GT: 17335 { 17336 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 17337 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17338 return 2 17339 } else if c == '>' { 17340 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17341 return 2 17342 } else { 17343 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17344 return 1 17345 } 17346 17347 } 17348 fallthrough 17349 case CC_BANG: 17350 { 17351 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '=' { 17352 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17353 return 1 17354 } else { 17355 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17356 return 2 17357 } 17358 17359 } 17360 fallthrough 17361 case CC_PIPE: 17362 { 17363 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '|' { 17364 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17365 return 1 17366 } else { 17367 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17368 return 2 17369 } 17370 17371 } 17372 fallthrough 17373 case CC_COMMA: 17374 { 17375 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17376 return 1 17377 17378 } 17379 case CC_AND: 17380 { 17381 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17382 return 1 17383 17384 } 17385 case CC_TILDA: 17386 { 17387 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17388 return 1 17389 17390 } 17391 case CC_QUOTE: 17392 { 17393 var delim int32 = int32(*(*uint8)(unsafe.Pointer(z))) 17394 17395 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17396 if c == delim { 17397 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == delim { 17398 i++ 17399 } else { 17400 break 17401 } 17402 } 17403 } 17404 if c == '\'' { 17405 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17406 return i + 1 17407 } else if c != 0 { 17408 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17409 return i + 1 17410 } else { 17411 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17412 return i 17413 } 17414 17415 } 17416 fallthrough 17417 case CC_DOT: 17418 { 17419 if !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + 1))])&0x04 != 0) { 17420 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17421 return 1 17422 } 17423 17424 } 17425 fallthrough 17426 case CC_DIGIT: 17427 { 17428 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17429 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 { 17430 for i = 3; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17431 } 17432 return i 17433 } 17434 for i = 0; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 17435 } 17436 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' { 17437 i++ 17438 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 17439 i++ 17440 } 17441 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17442 } 17443 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 || 17444 (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) { 17445 i = i + 2 17446 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 17447 i++ 17448 } 17449 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17450 } 17451 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17452 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17453 i++ 17454 } 17455 return i 17456 17457 } 17458 case CC_QUOTE2: 17459 { 17460 i = 1 17461 c = int32(*(*uint8)(unsafe.Pointer(z))) 17462 for ; c != ']' && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17463 } 17464 *(*int32)(unsafe.Pointer(tokenType)) = func() int32 { 17465 if c == ']' { 17466 return TK_NAME 17467 } 17468 return TK_ERROR 17469 }() 17470 return i 17471 17472 } 17473 case CC_VARNUM: 17474 { 17475 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17476 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 17477 } 17478 return i 17479 17480 } 17481 case CC_DOLLAR: 17482 fallthrough 17483 case CC_VARALPHA: 17484 { 17485 var n int32 = 0 17486 17487 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17488 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17489 if int32(sqlite3CtypeMap[uint8(c)])&0x46 != 0 { 17490 n++ 17491 } else if c == '(' && n > 0 { 17492 for __ccgo := true; __ccgo; __ccgo = libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && !(int32(sqlite3CtypeMap[uint8(c)])&0x01 != 0) && c != ')' { 17493 i++ 17494 } 17495 if c == ')' { 17496 i++ 17497 } else { 17498 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17499 } 17500 break 17501 } else if c == ':' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == ':' { 17502 i++ 17503 } else { 17504 break 17505 } 17506 } 17507 if n == 0 { 17508 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17509 } 17510 return i 17511 17512 } 17513 case CC_KYWD: 17514 { 17515 for i = 1; int32(aiClass[*(*uint8)(unsafe.Pointer(z + uintptr(i)))]) <= CC_KYWD; i++ { 17516 } 17517 if int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17518 i++ 17519 break 17520 } 17521 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17522 return i 17523 17524 } 17525 case CC_X: 17526 { 17527 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '\'' { 17528 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17529 for i = 2; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17530 } 17531 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' || i%2 != 0 { 17532 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17533 for *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' { 17534 i++ 17535 } 17536 } 17537 if *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 { 17538 i++ 17539 } 17540 return i 17541 } 17542 17543 } 17544 fallthrough 17545 case CC_ID: 17546 { 17547 i = 1 17548 break 17549 17550 } 17551 default: 17552 { 17553 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17554 return 1 17555 17556 } 17557 } 17558 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17559 i++ 17560 } 17561 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17562 return i 17563 } 17564 17565 func sqlite3_normalize(tls *libc.TLS, zSql uintptr) uintptr { 17566 bp := tls.Alloc(4) 17567 defer tls.Free(4) 17568 17569 var z uintptr 17570 var nZ sqlite3_int64 17571 var nSql sqlite3_int64 17572 var i int32 17573 var j int32 17574 17575 var n int32 17576 var k int32 17577 17578 nSql = sqlite3_int64(libc.Xstrlen(tls, zSql)) 17579 nZ = nSql 17580 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nZ+int64(2))) 17581 if z == uintptr(0) { 17582 return uintptr(0) 17583 } 17584 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; i = i + n { 17585 n = sqlite3GetToken(tls, zSql+uintptr(i), bp) 17586 switch *(*int32)(unsafe.Pointer(bp)) { 17587 case TK_SPACE: 17588 { 17589 break 17590 17591 } 17592 case TK_ERROR: 17593 { 17594 sqlite3.Xsqlite3_free(tls, z) 17595 return uintptr(0) 17596 17597 } 17598 case TK_LITERAL: 17599 { 17600 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 17601 break 17602 17603 } 17604 case TK_PUNCT: 17605 fallthrough 17606 case TK_NAME: 17607 { 17608 if n == 4 && sqlite3.Xsqlite3_strnicmp(tls, zSql+uintptr(i), ts+5846, 4) == 0 { 17609 if j >= 3 && libc.Xstrncmp(tls, z+uintptr(j)-uintptr(2), ts+5851, uint32(2)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z + uintptr(j-3))))])&0x46 != 0) || 17610 j >= 4 && libc.Xstrncmp(tls, z+uintptr(j)-uintptr(3), ts+5854, uint32(3)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z + uintptr(j-4))))])&0x46 != 0) { 17611 } else { 17612 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 17613 break 17614 } 17615 } 17616 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 { 17617 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(' ') 17618 } 17619 for k = 0; k < n; k++ { 17620 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(sqlite3UpperToLower[uint8(*(*int8)(unsafe.Pointer(zSql + uintptr(i+k))))]) 17621 } 17622 break 17623 17624 } 17625 } 17626 } 17627 for j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) == ' ' { 17628 j-- 17629 } 17630 if j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) != ';' { 17631 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(';') 17632 } 17633 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 17634 17635 for i = 0; i < j; i = n { 17636 var zIn uintptr = libc.Xstrstr(tls, z+uintptr(i), ts+5858) 17637 var nParen int32 17638 if zIn == uintptr(0) { 17639 break 17640 } 17641 n = (int32(zIn)-int32(z))/1 + 3 17642 if n != 0 && int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + libc.UintptrFromInt32(-1))))])&0x46 != 0 { 17643 continue 17644 } 17645 if libc.Xstrncmp(tls, zIn, ts+5862, uint32(9)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 9)))])&0x46 != 0) { 17646 continue 17647 } 17648 if libc.Xstrncmp(tls, zIn, ts+5872, uint32(7)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 7)))])&0x46 != 0) { 17649 continue 17650 } 17651 nParen = 1 17652 k = 0 17653 for ; *(*int8)(unsafe.Pointer(z + uintptr(n+k))) != 0; k++ { 17654 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == '(' { 17655 nParen++ 17656 } 17657 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == ')' { 17658 nParen-- 17659 if nParen == 0 { 17660 break 17661 } 17662 } 17663 } 17664 17665 if k < 5 { 17666 z = sqlite3.Xsqlite3_realloc64(tls, z, uint64(j+(5-k)+1)) 17667 if z == uintptr(0) { 17668 return uintptr(0) 17669 } 17670 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint32(j-(n+k))) 17671 } else if k > 5 { 17672 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint32(j-(n+k))) 17673 } 17674 j = j - k + 5 17675 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 17676 libc.Xmemcpy(tls, z+uintptr(n), ts+5880, uint32(5)) 17677 } 17678 return z 17679 } 17680 17681 type Percentile1 = struct { 17682 FnAlloc uint32 17683 FnUsed uint32 17684 FrPct float64 17685 Fa uintptr 17686 } 17687 17688 type Percentile = Percentile1 17689 17690 func isInfinity(tls *libc.TLS, r float64) int32 { 17691 bp := tls.Alloc(16) 17692 defer tls.Free(16) 17693 *(*float64)(unsafe.Pointer(bp + 8)) = r 17694 17695 libc.Xmemcpy(tls, bp, bp+8, uint32(unsafe.Sizeof(sqlite3_uint64(0)))) 17696 return libc.Bool32(*(*sqlite3_uint64)(unsafe.Pointer(bp))>>52&uint64(0x7ff) == uint64(0x7ff)) 17697 } 17698 17699 func sameValue(tls *libc.TLS, a float64, b float64) int32 { 17700 a = a - b 17701 return libc.Bool32(a >= -0.001 && a <= 0.001) 17702 } 17703 17704 func percentStep(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 17705 var p uintptr 17706 var rPct float64 17707 var eType int32 17708 var y float64 17709 17710 eType = sqlite3.Xsqlite3_value_numeric_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 17711 rPct = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 17712 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT || 17713 rPct < 0.0 || rPct > 100.0 { 17714 sqlite3.Xsqlite3_result_error(tls, pCtx, 17715 ts+5886, -1) 17716 return 17717 } 17718 17719 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, int32(unsafe.Sizeof(Percentile{}))) 17720 if p == uintptr(0) { 17721 return 17722 } 17723 17724 if (*Percentile)(unsafe.Pointer(p)).FrPct == 0.0 { 17725 (*Percentile)(unsafe.Pointer(p)).FrPct = rPct + 1.0 17726 } else if !(sameValue(tls, (*Percentile)(unsafe.Pointer(p)).FrPct, rPct+1.0) != 0) { 17727 sqlite3.Xsqlite3_result_error(tls, pCtx, 17728 ts+5953, -1) 17729 return 17730 } 17731 17732 eType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) 17733 if eType == SQLITE_NULL { 17734 return 17735 } 17736 17737 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT { 17738 sqlite3.Xsqlite3_result_error(tls, pCtx, 17739 ts+6017, -1) 17740 return 17741 } 17742 17743 y = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 17744 if isInfinity(tls, y) != 0 { 17745 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+6061, -1) 17746 return 17747 } 17748 17749 if (*Percentile)(unsafe.Pointer(p)).FnUsed >= (*Percentile)(unsafe.Pointer(p)).FnAlloc { 17750 var n uint32 = (*Percentile)(unsafe.Pointer(p)).FnAlloc*uint32(2) + uint32(250) 17751 var a uintptr = sqlite3.Xsqlite3_realloc64(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64(uint32(unsafe.Sizeof(float64(0)))*n)) 17752 if a == uintptr(0) { 17753 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17754 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(Percentile{}))) 17755 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 17756 return 17757 } 17758 (*Percentile)(unsafe.Pointer(p)).FnAlloc = n 17759 (*Percentile)(unsafe.Pointer(p)).Fa = a 17760 } 17761 *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncUint32(&(*Percentile)(unsafe.Pointer(p)).FnUsed, 1))*8)) = y 17762 } 17763 17764 func doubleCmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 17765 var a float64 = *(*float64)(unsafe.Pointer(pA)) 17766 var b float64 = *(*float64)(unsafe.Pointer(pB)) 17767 if a == b { 17768 return 0 17769 } 17770 if a < b { 17771 return -1 17772 } 17773 return +1 17774 } 17775 17776 func percentFinal(tls *libc.TLS, pCtx uintptr) { 17777 var p uintptr 17778 var i1 uint32 17779 var i2 uint32 17780 var v1 float64 17781 var v2 float64 17782 var ix float64 17783 var vx float64 17784 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, 0) 17785 if p == uintptr(0) { 17786 return 17787 } 17788 if (*Percentile)(unsafe.Pointer(p)).Fa == uintptr(0) { 17789 return 17790 } 17791 if (*Percentile)(unsafe.Pointer(p)).FnUsed != 0 { 17792 libc.Xqsort(tls, (*Percentile)(unsafe.Pointer(p)).Fa, (*Percentile)(unsafe.Pointer(p)).FnUsed, uint32(unsafe.Sizeof(float64(0))), *(*uintptr)(unsafe.Pointer(&struct { 17793 f func(*libc.TLS, uintptr, uintptr) int32 17794 }{doubleCmp}))) 17795 ix = ((*Percentile)(unsafe.Pointer(p)).FrPct - 1.0) * float64((*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1)) * 0.01 17796 i1 = uint32(ix) 17797 if ix == float64(i1) || i1 == (*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1) { 17798 i2 = i1 17799 } else { 17800 i2 = i1 + uint32(1) 17801 } 17802 v1 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i1)*8)) 17803 v2 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i2)*8)) 17804 vx = v1 + (v2-v1)*(ix-float64(i1)) 17805 sqlite3.Xsqlite3_result_double(tls, pCtx, vx) 17806 } 17807 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17808 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(Percentile{}))) 17809 } 17810 17811 func sqlite3_percentile_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17812 var rc int32 = SQLITE_OK 17813 _ = pApi 17814 17815 _ = pzErrMsg 17816 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6087, 2, 17817 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17818 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17819 f func(*libc.TLS, uintptr, int32, uintptr) 17820 }{percentStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{percentFinal}))) 17821 return rc 17822 } 17823 17824 type prefixes_vtab1 = struct{ Fbase sqlite3_vtab } 17825 17826 type prefixes_vtab = prefixes_vtab1 17827 17828 type prefixes_cursor1 = struct { 17829 Fbase sqlite3_vtab_cursor 17830 FiRowid sqlite3_int64 17831 FzStr uintptr 17832 FnStr int32 17833 } 17834 17835 type prefixes_cursor = prefixes_cursor1 17836 17837 func prefixesConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17838 var pNew uintptr 17839 var rc int32 17840 17841 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17842 ts+6098) 17843 if rc == SQLITE_OK { 17844 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_vtab{}))) 17845 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17846 if pNew == uintptr(0) { 17847 return SQLITE_NOMEM 17848 } 17849 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(prefixes_vtab{}))) 17850 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 17851 } 17852 return rc 17853 } 17854 17855 func prefixesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17856 var p uintptr = pVtab 17857 sqlite3.Xsqlite3_free(tls, p) 17858 return SQLITE_OK 17859 } 17860 17861 func prefixesOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17862 var pCur uintptr 17863 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_cursor{}))) 17864 if pCur == uintptr(0) { 17865 return SQLITE_NOMEM 17866 } 17867 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(prefixes_cursor{}))) 17868 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17869 return SQLITE_OK 17870 } 17871 17872 func prefixesClose(tls *libc.TLS, cur uintptr) int32 { 17873 var pCur uintptr = cur 17874 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17875 sqlite3.Xsqlite3_free(tls, pCur) 17876 return SQLITE_OK 17877 } 17878 17879 func prefixesNext(tls *libc.TLS, cur uintptr) int32 { 17880 var pCur uintptr = cur 17881 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid++ 17882 return SQLITE_OK 17883 } 17884 17885 func prefixesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 17886 var pCur uintptr = cur 17887 switch i { 17888 case 0: 17889 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), 17890 uintptr(0)) 17891 break 17892 default: 17893 sqlite3.Xsqlite3_result_text(tls, ctx, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr, (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr, uintptr(0)) 17894 break 17895 } 17896 return SQLITE_OK 17897 } 17898 17899 func prefixesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 17900 var pCur uintptr = cur 17901 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid 17902 return SQLITE_OK 17903 } 17904 17905 func prefixesEof(tls *libc.TLS, cur uintptr) int32 { 17906 var pCur uintptr = cur 17907 return libc.Bool32((*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid > sqlite3_int64((*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr)) 17908 } 17909 17910 func prefixesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 17911 bp := tls.Alloc(8) 17912 defer tls.Free(8) 17913 17914 var pCur uintptr = pVtabCursor 17915 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17916 if argc > 0 { 17917 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 17918 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = func() int32 { 17919 if (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr != 0 { 17920 return int32(libc.Xstrlen(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr)) 17921 } 17922 return 0 17923 }() 17924 } else { 17925 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = uintptr(0) 17926 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = 0 17927 } 17928 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 17929 return SQLITE_OK 17930 } 17931 17932 func prefixesBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 17933 var i int32 17934 var p uintptr 17935 17936 i = 0 17937 p = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 17938 __1: 17939 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 17940 goto __3 17941 } 17942 { 17943 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != 1 { 17944 goto __2 17945 } 17946 if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 17947 goto __2 17948 } 17949 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 17950 goto __2 17951 } 17952 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 17953 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 17954 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 17955 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 17956 return SQLITE_OK 17957 17958 } 17959 goto __2 17960 __2: 17961 i++ 17962 p += 12 17963 goto __1 17964 goto __3 17965 __3: 17966 ; 17967 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000000) 17968 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000000000) 17969 return SQLITE_OK 17970 } 17971 17972 var prefixesModule = sqlite3_module{ 17973 FxConnect: 0, 17974 FxBestIndex: 0, 17975 FxDisconnect: 0, 17976 FxOpen: 0, 17977 FxClose: 0, 17978 FxFilter: 0, 17979 FxNext: 0, 17980 FxEof: 0, 17981 FxColumn: 0, 17982 FxRowid: 0, 17983 } 17984 17985 func prefixLengthFunc(tls *libc.TLS, ctx uintptr, nVal int32, apVal uintptr) { 17986 var nByte int32 17987 var nRet int32 = 0 17988 var zL uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 17989 var zR uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*4))) 17990 var nL int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 17991 var nR int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*4))) 17992 var i int32 17993 17994 nByte = func() int32 { 17995 if nL > nR { 17996 return nL 17997 } 17998 return nR 17999 }() 18000 for i = 0; i < nByte; i++ { 18001 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i)))) != int32(*(*uint8)(unsafe.Pointer(zR + uintptr(i)))) { 18002 break 18003 } 18004 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 != 0x80 { 18005 nRet++ 18006 } 18007 } 18008 18009 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 == 0x80 { 18010 nRet-- 18011 } 18012 sqlite3.Xsqlite3_result_int(tls, ctx, nRet) 18013 } 18014 18015 func sqlite3_prefixes_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18016 var rc int32 = SQLITE_OK 18017 _ = pApi 18018 18019 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6162, uintptr(unsafe.Pointer(&prefixesModule)), uintptr(0)) 18020 if rc == SQLITE_OK { 18021 rc = sqlite3.Xsqlite3_create_function(tls, 18022 db, ts+6171, 2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 18023 f func(*libc.TLS, uintptr, int32, uintptr) 18024 }{prefixLengthFunc})), uintptr(0), uintptr(0)) 18025 } 18026 return rc 18027 } 18028 18029 type qpvtab_vtab1 = struct{ Fbase sqlite3_vtab } 18030 18031 type qpvtab_vtab = qpvtab_vtab1 18032 18033 type qpvtab_cursor1 = struct { 18034 Fbase sqlite3_vtab_cursor 18035 FiRowid sqlite3_int64 18036 FzData uintptr 18037 FnData int32 18038 Fflags int32 18039 } 18040 18041 type qpvtab_cursor = qpvtab_cursor1 18042 18043 var azColname = [13]uintptr{ 18044 ts + 6185, 18045 ts + 6188, 18046 ts + 6191, 18047 ts + 6194, 18048 ts + 6197, 18049 ts + 6200, 18050 ts + 6204, ts + 6206, ts + 6208, ts + 6210, ts + 6212, 18051 ts + 6214, 18052 ts + 584, 18053 } 18054 18055 func qpvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 18056 var pNew uintptr 18057 var rc int32 18058 18059 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 18060 ts+6220) 18061 if rc == SQLITE_OK { 18062 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_vtab{}))) 18063 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 18064 if pNew == uintptr(0) { 18065 return SQLITE_NOMEM 18066 } 18067 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(qpvtab_vtab{}))) 18068 } 18069 return rc 18070 } 18071 18072 func qpvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 18073 var p uintptr = pVtab 18074 sqlite3.Xsqlite3_free(tls, p) 18075 return SQLITE_OK 18076 } 18077 18078 func qpvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 18079 var pCur uintptr 18080 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_cursor{}))) 18081 if pCur == uintptr(0) { 18082 return SQLITE_NOMEM 18083 } 18084 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(qpvtab_cursor{}))) 18085 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 18086 return SQLITE_OK 18087 } 18088 18089 func qpvtabClose(tls *libc.TLS, cur uintptr) int32 { 18090 var pCur uintptr = cur 18091 sqlite3.Xsqlite3_free(tls, pCur) 18092 return SQLITE_OK 18093 } 18094 18095 func qpvtabNext(tls *libc.TLS, cur uintptr) int32 { 18096 var pCur uintptr = cur 18097 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 18098 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 18099 var zEnd uintptr = libc.Xstrchr(tls, z, '\n') 18100 if zEnd != 0 { 18101 zEnd++ 18102 } 18103 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = sqlite3_int64((int32(zEnd) - int32((*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData)) / 1) 18104 } 18105 return SQLITE_OK 18106 } 18107 18108 func qpvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 18109 bp := tls.Alloc(1) 18110 defer tls.Free(1) 18111 18112 var pCur uintptr = cur 18113 if i >= QPVTAB_VN && i <= QPVTAB_RHS && (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 18114 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 18115 var zEnd uintptr 18116 var j int32 18117 j = QPVTAB_VN 18118 for 1 != 0 { 18119 zEnd = libc.Xstrchr(tls, z, func() int32 { 18120 if j == QPVTAB_RHS { 18121 return '\n' 18122 } 18123 return ',' 18124 }()) 18125 if j == i || zEnd == uintptr(0) { 18126 break 18127 } 18128 z = zEnd + uintptr(1) 18129 j++ 18130 } 18131 if zEnd == z { 18132 sqlite3.Xsqlite3_result_null(tls, ctx) 18133 } else if i == QPVTAB_IX || i == QPVTAB_OP || i == QPVTAB_UX { 18134 sqlite3.Xsqlite3_result_int(tls, ctx, libc.Xatoi(tls, z)) 18135 } else { 18136 sqlite3.Xsqlite3_result_text64(tls, ctx, z, uint64((int32(zEnd)-int32(z))/1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 18137 } 18138 } else if i >= QPVTAB_A && i <= QPVTAB_E { 18139 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags&0x001 != 0 { 18140 sqlite3.Xsqlite3_result_int(tls, ctx, i-QPVTAB_A+1) 18141 } else { 18142 *(*int8)(unsafe.Pointer(bp)) = int8('a' + i - QPVTAB_A) 18143 sqlite3.Xsqlite3_result_text64(tls, ctx, bp, uint64(1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 18144 } 18145 } else if i == QPVTAB_FLAGS { 18146 sqlite3.Xsqlite3_result_int(tls, ctx, (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags) 18147 } 18148 return SQLITE_OK 18149 } 18150 18151 func qpvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18152 var pCur uintptr = cur 18153 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid 18154 return SQLITE_OK 18155 } 18156 18157 func qpvtabEof(tls *libc.TLS, cur uintptr) int32 { 18158 var pCur uintptr = cur 18159 return libc.Bool32((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid >= sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData)) 18160 } 18161 18162 func qpvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 18163 var pCur uintptr = pVtabCursor 18164 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 18165 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData = idxStr 18166 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData = int32(libc.Xstrlen(tls, idxStr)) 18167 (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags = idxNum 18168 return SQLITE_OK 18169 } 18170 18171 func qpvtabStrAppendValue(tls *libc.TLS, pStr uintptr, pVal uintptr) { 18172 bp := tls.Alloc(25) 18173 defer tls.Free(25) 18174 18175 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 18176 case SQLITE_NULL: 18177 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+5846, 0) 18178 break 18179 case SQLITE_INTEGER: 18180 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6325, libc.VaList(bp, sqlite3.Xsqlite3_value_int64(tls, pVal))) 18181 break 18182 case SQLITE_FLOAT: 18183 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6330, libc.VaList(bp+8, sqlite3.Xsqlite3_value_double(tls, pVal))) 18184 break 18185 case SQLITE_TEXT: 18186 { 18187 var i int32 18188 var a uintptr = sqlite3.Xsqlite3_value_text(tls, pVal) 18189 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 18190 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18191 for i = 0; i < n; i++ { 18192 *(*int8)(unsafe.Pointer(bp + 24)) = *(*int8)(unsafe.Pointer(a + uintptr(i))) 18193 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\n' { 18194 *(*int8)(unsafe.Pointer(bp + 24)) = int8(' ') 18195 } 18196 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 18197 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\'' { 18198 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 18199 } 18200 } 18201 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18202 break 18203 18204 } 18205 case SQLITE_BLOB: 18206 { 18207 var i int32 18208 var a uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 18209 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 18210 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6334, 2) 18211 for i = 0; i < n; i++ { 18212 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6337, libc.VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a + uintptr(i)))))) 18213 } 18214 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18215 break 18216 18217 } 18218 } 18219 } 18220 18221 func qpvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 18222 bp := tls.Alloc(116) 18223 defer tls.Free(116) 18224 18225 var pStr uintptr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 18226 var i int32 18227 var k int32 = 0 18228 var rc int32 18229 _ = rc 18230 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6342, libc.VaList(bp, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint)) 18231 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 18232 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 18233 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 18234 if iCol == QPVTAB_FLAGS && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 18235 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 18236 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 18237 18238 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 18239 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 18240 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x002 != 0 { 18241 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 18242 } 18243 } 18244 } 18245 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 18246 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 18247 iCol = QPVTAB_NONE 18248 } 18249 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6362, 18250 libc.VaList(bp+8, i, 18251 azColname[iCol], 18252 op, 18253 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable))) 18254 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 18255 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 18256 18257 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 18258 qpvtabStrAppendValue(tls, pStr, *(*uintptr)(unsafe.Pointer(bp + 112))) 18259 } 18260 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6387, 1) 18261 } 18262 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 18263 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 18264 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 18265 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 18266 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 18267 iCol = QPVTAB_NONE 18268 } 18269 if iCol >= QPVTAB_A && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 18270 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&k, 1) 18271 if iCol <= QPVTAB_FLAGS || (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x004 != 0 { 18272 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 18273 } 18274 } 18275 } 18276 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6389, libc.VaList(bp+40, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy)) 18277 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; i++ { 18278 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 18279 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6406, libc.VaList(bp+48, i, 18280 func() uintptr { 18281 if iCol >= 0 { 18282 return azColname[iCol] 18283 } 18284 return ts + 6427 18285 }(), 18286 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy+uintptr(i)*8)).Fdesc))) 18287 } 18288 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6433, 18289 libc.VaList(bp+72, sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo))) 18290 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6463, libc.VaList(bp+80, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags)) 18291 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6480, libc.VaList(bp+88, int32((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 18292 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 18293 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 18294 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6496, libc.VaList(bp+96, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum)) 18295 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6511, 18296 libc.VaList(bp+104, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed)) 18297 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_str_finish(tls, pStr) 18298 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 18299 return SQLITE_OK 18300 } 18301 18302 var qpvtabModule = sqlite3_module{ 18303 FxConnect: 0, 18304 FxBestIndex: 0, 18305 FxDisconnect: 0, 18306 FxOpen: 0, 18307 FxClose: 0, 18308 FxFilter: 0, 18309 FxNext: 0, 18310 FxEof: 0, 18311 FxColumn: 0, 18312 FxRowid: 0, 18313 } 18314 18315 func sqlite3_qpvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18316 var rc int32 = SQLITE_OK 18317 _ = pApi 18318 18319 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6535, uintptr(unsafe.Pointer(&qpvtabModule)), uintptr(0)) 18320 return rc 18321 } 18322 18323 type ReStateNumber = uint16 18324 18325 type ReStateSet1 = struct { 18326 FnState uint32 18327 FaState uintptr 18328 } 18329 18330 type ReStateSet = ReStateSet1 18331 18332 type ReInput1 = struct { 18333 Fz uintptr 18334 Fi int32 18335 Fmx int32 18336 } 18337 18338 type ReInput = ReInput1 18339 18340 type ReCompiled1 = struct { 18341 FsIn ReInput 18342 FzErr uintptr 18343 FaOp uintptr 18344 FaArg uintptr 18345 FxNextChar uintptr 18346 FzInit [12]uint8 18347 FnInit int32 18348 FnState uint32 18349 FnAlloc uint32 18350 } 18351 18352 type ReCompiled = ReCompiled1 18353 18354 func re_add_state(tls *libc.TLS, pSet uintptr, newState int32) { 18355 var i uint32 18356 for i = uint32(0); i < (*ReStateSet)(unsafe.Pointer(pSet)).FnState; i++ { 18357 if int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(i)*2))) == newState { 18358 return 18359 } 18360 } 18361 *(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(libc.PostIncUint32(&(*ReStateSet)(unsafe.Pointer(pSet)).FnState, 1))*2)) = ReStateNumber(newState) 18362 } 18363 18364 func re_next_char(tls *libc.TLS, p uintptr) uint32 { 18365 var c uint32 18366 if (*ReInput)(unsafe.Pointer(p)).Fi >= (*ReInput)(unsafe.Pointer(p)).Fmx { 18367 return uint32(0) 18368 } 18369 c = uint32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*ReInput)(unsafe.Pointer(p)).Fi, 1))))) 18370 if c >= uint32(0x80) { 18371 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 { 18372 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) 18373 if c < uint32(0x80) { 18374 c = uint32(0xfffd) 18375 } 18376 } 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 && 18377 int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0xc0 == 0x80 { 18378 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) 18379 *(*int32)(unsafe.Pointer(p + 4)) += 2 18380 if c <= uint32(0x7ff) || c >= uint32(0xd800) && c <= uint32(0xdfff) { 18381 c = uint32(0xfffd) 18382 } 18383 } 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 && 18384 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 { 18385 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) | 18386 uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+2))))&0x3f) 18387 *(*int32)(unsafe.Pointer(p + 4)) += 3 18388 if c <= uint32(0xffff) || c > uint32(0x10ffff) { 18389 c = uint32(0xfffd) 18390 } 18391 } else { 18392 c = uint32(0xfffd) 18393 } 18394 } 18395 return c 18396 } 18397 18398 func re_next_char_nocase(tls *libc.TLS, p uintptr) uint32 { 18399 var c uint32 = re_next_char(tls, p) 18400 if c >= uint32('A') && c <= uint32('Z') { 18401 c = c + uint32('a'-'A') 18402 } 18403 return c 18404 } 18405 18406 func re_word_char(tls *libc.TLS, c int32) int32 { 18407 return libc.Bool32(c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || 18408 c >= 'A' && c <= 'Z' || c == '_') 18409 } 18410 18411 func re_digit_char(tls *libc.TLS, c int32) int32 { 18412 return libc.Bool32(c >= '0' && c <= '9') 18413 } 18414 18415 func re_space_char(tls *libc.TLS, c int32) int32 { 18416 return libc.Bool32(c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\v' || c == '\f') 18417 } 18418 18419 func sqlite3re_match(tls *libc.TLS, pRe uintptr, zIn uintptr, nIn int32) int32 { 18420 bp := tls.Alloc(228) 18421 defer tls.Free(228) 18422 18423 var pThis uintptr 18424 var pNext uintptr 18425 18426 var pToFree uintptr 18427 var i uint32 18428 var iSwap uint32 18429 var c int32 18430 var cPrev int32 18431 var rc int32 18432 18433 var x uint8 18434 var j int32 18435 var n int32 18436 var hit int32 18437 var x1 int32 18438 i = uint32(0) 18439 iSwap = uint32(0) 18440 c = RE_EOF + 1 18441 cPrev = 0 18442 rc = 0 18443 18444 (*ReInput)(unsafe.Pointer(bp + 216)).Fz = zIn 18445 (*ReInput)(unsafe.Pointer(bp + 216)).Fi = 0 18446 (*ReInput)(unsafe.Pointer(bp + 216)).Fmx = func() int32 { 18447 if nIn >= 0 { 18448 return nIn 18449 } 18450 return int32(libc.Xstrlen(tls, zIn)) 18451 }() 18452 18453 if !((*ReCompiled)(unsafe.Pointer(pRe)).FnInit != 0) { 18454 goto __1 18455 } 18456 x = *(*uint8)(unsafe.Pointer(pRe + 28)) 18457 __2: 18458 if !((*ReInput)(unsafe.Pointer(bp+216)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit <= (*ReInput)(unsafe.Pointer(bp+216)).Fmx && 18459 (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr((*ReInput)(unsafe.Pointer(bp+216)).Fi)))) != int32(x) || libc.Xstrncmp(tls, zIn+uintptr((*ReInput)(unsafe.Pointer(bp+216)).Fi), pRe+28, uint32((*ReCompiled)(unsafe.Pointer(pRe)).FnInit)) != 0)) { 18460 goto __3 18461 } 18462 (*ReInput)(unsafe.Pointer(bp+216)).Fi++ 18463 goto __2 18464 __3: 18465 ; 18466 if !((*ReInput)(unsafe.Pointer(bp+216)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit > (*ReInput)(unsafe.Pointer(bp+216)).Fmx) { 18467 goto __4 18468 } 18469 return 0 18470 __4: 18471 ; 18472 __1: 18473 ; 18474 if !((*ReCompiled)(unsafe.Pointer(pRe)).FnState <= uint32(unsafe.Sizeof([100]ReStateNumber{}))/(uint32(unsafe.Sizeof(ReStateNumber(0)))*uint32(2))) { 18475 goto __5 18476 } 18477 pToFree = uintptr(0) 18478 (*ReStateSet)(unsafe.Pointer(bp)).FaState = bp + 16 18479 goto __6 18480 __5: 18481 pToFree = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(ReStateNumber(0)))*uint32(2)*(*ReCompiled)(unsafe.Pointer(pRe)).FnState)) 18482 if !(pToFree == uintptr(0)) { 18483 goto __7 18484 } 18485 return -1 18486 __7: 18487 ; 18488 (*ReStateSet)(unsafe.Pointer(bp)).FaState = pToFree 18489 __6: 18490 ; 18491 (*ReStateSet)(unsafe.Pointer(bp + 1*8)).FaState = (*ReStateSet)(unsafe.Pointer(bp)).FaState + uintptr((*ReCompiled)(unsafe.Pointer(pRe)).FnState)*2 18492 pNext = bp + 1*8 18493 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 18494 re_add_state(tls, pNext, 0) 18495 __8: 18496 if !(c != RE_EOF && (*ReStateSet)(unsafe.Pointer(pNext)).FnState > uint32(0)) { 18497 goto __9 18498 } 18499 cPrev = c 18500 c = int32((*struct { 18501 f func(*libc.TLS, uintptr) uint32 18502 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar})).f(tls, bp+216)) 18503 pThis = pNext 18504 pNext = bp + uintptr(iSwap)*8 18505 iSwap = uint32(1) - iSwap 18506 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 18507 i = uint32(0) 18508 __10: 18509 if !(i < (*ReStateSet)(unsafe.Pointer(pThis)).FnState) { 18510 goto __12 18511 } 18512 x1 = int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pThis)).FaState + uintptr(i)*2))) 18513 switch int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) { 18514 case RE_OP_MATCH: 18515 goto __14 18516 case RE_OP_ANY: 18517 goto __15 18518 case RE_OP_WORD: 18519 goto __16 18520 case RE_OP_NOTWORD: 18521 goto __17 18522 case RE_OP_DIGIT: 18523 goto __18 18524 case RE_OP_NOTDIGIT: 18525 goto __19 18526 case RE_OP_SPACE: 18527 goto __20 18528 case RE_OP_NOTSPACE: 18529 goto __21 18530 case RE_OP_BOUNDARY: 18531 goto __22 18532 case RE_OP_ANYSTAR: 18533 goto __23 18534 case RE_OP_FORK: 18535 goto __24 18536 case RE_OP_GOTO: 18537 goto __25 18538 case RE_OP_ACCEPT: 18539 goto __26 18540 case RE_OP_CC_EXC: 18541 goto __27 18542 case RE_OP_CC_INC: 18543 goto __28 18544 } 18545 goto __13 18546 __14: 18547 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) == c) { 18548 goto __29 18549 } 18550 re_add_state(tls, pNext, x1+1) 18551 __29: 18552 ; 18553 goto __13 18554 18555 __15: 18556 if !(c != 0) { 18557 goto __30 18558 } 18559 re_add_state(tls, pNext, x1+1) 18560 __30: 18561 ; 18562 goto __13 18563 18564 __16: 18565 if !(re_word_char(tls, c) != 0) { 18566 goto __31 18567 } 18568 re_add_state(tls, pNext, x1+1) 18569 __31: 18570 ; 18571 goto __13 18572 18573 __17: 18574 if !(!(re_word_char(tls, c) != 0) && c != 0) { 18575 goto __32 18576 } 18577 re_add_state(tls, pNext, x1+1) 18578 __32: 18579 ; 18580 goto __13 18581 18582 __18: 18583 if !(re_digit_char(tls, c) != 0) { 18584 goto __33 18585 } 18586 re_add_state(tls, pNext, x1+1) 18587 __33: 18588 ; 18589 goto __13 18590 18591 __19: 18592 if !(!(re_digit_char(tls, c) != 0) && c != 0) { 18593 goto __34 18594 } 18595 re_add_state(tls, pNext, x1+1) 18596 __34: 18597 ; 18598 goto __13 18599 18600 __20: 18601 if !(re_space_char(tls, c) != 0) { 18602 goto __35 18603 } 18604 re_add_state(tls, pNext, x1+1) 18605 __35: 18606 ; 18607 goto __13 18608 18609 __21: 18610 if !(!(re_space_char(tls, c) != 0) && c != 0) { 18611 goto __36 18612 } 18613 re_add_state(tls, pNext, x1+1) 18614 __36: 18615 ; 18616 goto __13 18617 18618 __22: 18619 if !(re_word_char(tls, c) != re_word_char(tls, cPrev)) { 18620 goto __37 18621 } 18622 re_add_state(tls, pThis, x1+1) 18623 __37: 18624 ; 18625 goto __13 18626 18627 __23: 18628 re_add_state(tls, pNext, x1) 18629 re_add_state(tls, pThis, x1+1) 18630 goto __13 18631 18632 __24: 18633 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18634 re_add_state(tls, pThis, x1+1) 18635 goto __13 18636 18637 __25: 18638 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18639 goto __13 18640 18641 __26: 18642 rc = 1 18643 goto re_match_end 18644 18645 __27: 18646 if !(c == 0) { 18647 goto __38 18648 } 18649 goto __13 18650 __38: 18651 ; 18652 goto re_op_cc_inc 18653 18654 __28: 18655 re_op_cc_inc: 18656 j = 1 18657 n = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) 18658 hit = 0 18659 j = 1 18660 __39: 18661 if !(j > 0 && j < n) { 18662 goto __41 18663 } 18664 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1+j)))) == RE_OP_CC_VALUE) { 18665 goto __42 18666 } 18667 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j)*4)) == c) { 18668 goto __44 18669 } 18670 hit = 1 18671 j = -1 18672 __44: 18673 ; 18674 goto __43 18675 __42: 18676 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) { 18677 goto __45 18678 } 18679 hit = 1 18680 j = -1 18681 goto __46 18682 __45: 18683 j++ 18684 __46: 18685 ; 18686 __43: 18687 ; 18688 goto __40 18689 __40: 18690 j++ 18691 goto __39 18692 goto __41 18693 __41: 18694 ; 18695 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) == RE_OP_CC_EXC) { 18696 goto __47 18697 } 18698 hit = libc.BoolInt32(!(hit != 0)) 18699 __47: 18700 ; 18701 if !(hit != 0) { 18702 goto __48 18703 } 18704 re_add_state(tls, pNext, x1+n) 18705 __48: 18706 ; 18707 goto __13 18708 18709 __13: 18710 ; 18711 goto __11 18712 __11: 18713 i++ 18714 goto __10 18715 goto __12 18716 __12: 18717 ; 18718 goto __8 18719 __9: 18720 ; 18721 i = uint32(0) 18722 __49: 18723 if !(i < (*ReStateSet)(unsafe.Pointer(pNext)).FnState) { 18724 goto __51 18725 } 18726 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) { 18727 goto __52 18728 } 18729 rc = 1 18730 goto __51 18731 __52: 18732 ; 18733 goto __50 18734 __50: 18735 i++ 18736 goto __49 18737 goto __51 18738 __51: 18739 ; 18740 re_match_end: 18741 sqlite3.Xsqlite3_free(tls, pToFree) 18742 return rc 18743 } 18744 18745 func re_resize(tls *libc.TLS, p uintptr, N int32) int32 { 18746 var aOp uintptr 18747 var aArg uintptr 18748 aOp = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp, uint64(uint32(N)*uint32(unsafe.Sizeof(int8(0))))) 18749 if aOp == uintptr(0) { 18750 return 1 18751 } 18752 (*ReCompiled)(unsafe.Pointer(p)).FaOp = aOp 18753 aArg = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg, uint64(uint32(N)*uint32(unsafe.Sizeof(int32(0))))) 18754 if aArg == uintptr(0) { 18755 return 1 18756 } 18757 (*ReCompiled)(unsafe.Pointer(p)).FaArg = aArg 18758 (*ReCompiled)(unsafe.Pointer(p)).FnAlloc = uint32(N) 18759 return 0 18760 } 18761 18762 func re_insert(tls *libc.TLS, p uintptr, iBefore int32, op int32, arg int32) int32 { 18763 var i int32 18764 if (*ReCompiled)(unsafe.Pointer(p)).FnAlloc <= (*ReCompiled)(unsafe.Pointer(p)).FnState && re_resize(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnAlloc*uint32(2))) != 0 { 18765 return 0 18766 } 18767 for i = int32((*ReCompiled)(unsafe.Pointer(p)).FnState); i > iBefore; i-- { 18768 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i))) = *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i-1))) 18769 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i-1)*4)) 18770 } 18771 (*ReCompiled)(unsafe.Pointer(p)).FnState++ 18772 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(iBefore))) = int8(op) 18773 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iBefore)*4)) = arg 18774 return iBefore 18775 } 18776 18777 func re_append(tls *libc.TLS, p uintptr, op int32, arg int32) int32 { 18778 return re_insert(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnState), op, arg) 18779 } 18780 18781 func re_copy(tls *libc.TLS, p uintptr, iStart int32, N int32) { 18782 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 { 18783 return 18784 } 18785 libc.Xmemcpy(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp+uintptr((*ReCompiled)(unsafe.Pointer(p)).FnState), (*ReCompiled)(unsafe.Pointer(p)).FaOp+uintptr(iStart), uint32(N)*uint32(unsafe.Sizeof(int8(0)))) 18786 libc.Xmemcpy(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg+uintptr((*ReCompiled)(unsafe.Pointer(p)).FnState)*4, (*ReCompiled)(unsafe.Pointer(p)).FaArg+uintptr(iStart)*4, uint32(N)*uint32(unsafe.Sizeof(int32(0)))) 18787 *(*uint32)(unsafe.Pointer(p + 44)) += uint32(N) 18788 } 18789 18790 func re_hex(tls *libc.TLS, c int32, pV uintptr) int32 { 18791 if c >= '0' && c <= '9' { 18792 c = c - '0' 18793 } else if c >= 'a' && c <= 'f' { 18794 c = c - ('a' - 10) 18795 } else if c >= 'A' && c <= 'F' { 18796 c = c - ('A' - 10) 18797 } else { 18798 return 0 18799 } 18800 *(*int32)(unsafe.Pointer(pV)) = *(*int32)(unsafe.Pointer(pV))*16 + c&0xff 18801 return 1 18802 } 18803 18804 func re_esc_char(tls *libc.TLS, p uintptr) uint32 { 18805 bp := tls.Alloc(4) 18806 defer tls.Free(4) 18807 18808 var i int32 18809 *(*int32)(unsafe.Pointer(bp)) = 0 18810 var c int8 18811 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18812 return uint32(0) 18813 } 18814 c = int8(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi)))) 18815 if int32(c) == 'u' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+4 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18816 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18817 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18818 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 && 18819 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 3))), bp) != 0 && 18820 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 4))), bp) != 0 { 18821 *(*int32)(unsafe.Pointer(p + 4)) += 5 18822 return uint32(*(*int32)(unsafe.Pointer(bp))) 18823 } 18824 } 18825 if int32(c) == 'x' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+2 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18826 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18827 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18828 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 { 18829 *(*int32)(unsafe.Pointer(p + 4)) += 3 18830 return uint32(*(*int32)(unsafe.Pointer(bp))) 18831 } 18832 } 18833 for i = 0; zEsc[i] != 0 && int32(zEsc[i]) != int32(c); i++ { 18834 } 18835 if zEsc[i] != 0 { 18836 if i < 6 { 18837 c = zTrans[i] 18838 } 18839 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18840 } else { 18841 (*ReCompiled)(unsafe.Pointer(p)).FzErr = ts + 6542 18842 } 18843 return uint32(c) 18844 } 18845 18846 var zEsc = *(*[21]int8)(unsafe.Pointer(ts + 6559)) 18847 var zTrans = *(*[7]int8)(unsafe.Pointer(ts + 6580)) 18848 18849 func rePeek(tls *libc.TLS, p uintptr) uint8 { 18850 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18851 return *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 18852 } 18853 return uint8(0) 18854 } 18855 18856 func re_subcompile_re(tls *libc.TLS, p uintptr) uintptr { 18857 var zErr uintptr 18858 var iStart int32 18859 var iEnd int32 18860 var iGoto int32 18861 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18862 zErr = re_subcompile_string(tls, p) 18863 if zErr != 0 { 18864 return zErr 18865 } 18866 for int32(rePeek(tls, p)) == '|' { 18867 iEnd = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18868 re_insert(tls, p, iStart, RE_OP_FORK, iEnd+2-iStart) 18869 iGoto = re_append(tls, p, RE_OP_GOTO, 0) 18870 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18871 zErr = re_subcompile_string(tls, p) 18872 if zErr != 0 { 18873 return zErr 18874 } 18875 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iGoto)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iGoto)) 18876 } 18877 return uintptr(0) 18878 } 18879 18880 func re_subcompile_string(tls *libc.TLS, p uintptr) uintptr { 18881 var iPrev int32 = -1 18882 var iStart int32 18883 var c uint32 18884 var zErr uintptr 18885 for libc.AssignUint32(&c, (*struct { 18886 f func(*libc.TLS, uintptr) uint32 18887 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 18888 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18889 switch c { 18890 case uint32('|'): 18891 fallthrough 18892 case uint32('$'): 18893 fallthrough 18894 case uint32(')'): 18895 { 18896 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi-- 18897 return uintptr(0) 18898 18899 } 18900 case uint32('('): 18901 { 18902 zErr = re_subcompile_re(tls, p) 18903 if zErr != 0 { 18904 return zErr 18905 } 18906 if int32(rePeek(tls, p)) != ')' { 18907 return ts + 6587 18908 } 18909 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18910 break 18911 18912 } 18913 case uint32('.'): 18914 { 18915 if int32(rePeek(tls, p)) == '*' { 18916 re_append(tls, p, RE_OP_ANYSTAR, 0) 18917 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18918 } else { 18919 re_append(tls, p, RE_OP_ANY, 0) 18920 } 18921 break 18922 18923 } 18924 case uint32('*'): 18925 { 18926 if iPrev < 0 { 18927 return ts + 6601 18928 } 18929 re_insert(tls, p, iPrev, RE_OP_GOTO, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 18930 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState+uint32(1))) 18931 break 18932 18933 } 18934 case uint32('+'): 18935 { 18936 if iPrev < 0 { 18937 return ts + 6621 18938 } 18939 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState)) 18940 break 18941 18942 } 18943 case uint32('?'): 18944 { 18945 if iPrev < 0 { 18946 return ts + 6641 18947 } 18948 re_insert(tls, p, iPrev, RE_OP_FORK, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 18949 break 18950 18951 } 18952 case uint32('{'): 18953 { 18954 var m int32 = 0 18955 var n int32 = 0 18956 var sz int32 18957 var j int32 18958 if iPrev < 0 { 18959 return ts + 6661 18960 } 18961 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 18962 m = int32(uint32(m*10) + c - uint32('0')) 18963 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18964 } 18965 n = m 18966 if c == uint32(',') { 18967 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18968 n = 0 18969 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 18970 n = int32(uint32(n*10) + c - uint32('0')) 18971 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18972 } 18973 } 18974 if c != uint32('}') { 18975 return ts + 6685 18976 } 18977 if n > 0 && n < m { 18978 return ts + 6699 18979 } 18980 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18981 sz = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iPrev)) 18982 if m == 0 { 18983 if n == 0 { 18984 return ts + 6724 18985 } 18986 re_insert(tls, p, iPrev, RE_OP_FORK, sz+1) 18987 n-- 18988 } else { 18989 for j = 1; j < m; j++ { 18990 re_copy(tls, p, iPrev, sz) 18991 } 18992 } 18993 for j = m; j < n; j++ { 18994 re_append(tls, p, RE_OP_FORK, sz+1) 18995 re_copy(tls, p, iPrev, sz) 18996 } 18997 if n == 0 && m > 0 { 18998 re_append(tls, p, RE_OP_FORK, -sz) 18999 } 19000 break 19001 19002 } 19003 case uint32('['): 19004 { 19005 var iFirst int32 = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 19006 if int32(rePeek(tls, p)) == '^' { 19007 re_append(tls, p, RE_OP_CC_EXC, 0) 19008 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19009 } else { 19010 re_append(tls, p, RE_OP_CC_INC, 0) 19011 } 19012 for libc.AssignUint32(&c, (*struct { 19013 f func(*libc.TLS, uintptr) uint32 19014 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 19015 if c == uint32('[') && int32(rePeek(tls, p)) == ':' { 19016 return ts + 6757 19017 } 19018 if c == uint32('\\') { 19019 c = re_esc_char(tls, p) 19020 } 19021 if int32(rePeek(tls, p)) == '-' { 19022 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 19023 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19024 c = (*struct { 19025 f func(*libc.TLS, uintptr) uint32 19026 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p) 19027 if c == uint32('\\') { 19028 c = re_esc_char(tls, p) 19029 } 19030 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 19031 } else { 19032 re_append(tls, p, RE_OP_CC_VALUE, int32(c)) 19033 } 19034 if int32(rePeek(tls, p)) == ']' { 19035 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19036 break 19037 } 19038 } 19039 if c == uint32(0) { 19040 return ts + 6795 19041 } 19042 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iFirst)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iFirst)) 19043 break 19044 19045 } 19046 case uint32('\\'): 19047 { 19048 var specialOp int32 = 0 19049 switch int32(rePeek(tls, p)) { 19050 case 'b': 19051 specialOp = RE_OP_BOUNDARY 19052 break 19053 case 'd': 19054 specialOp = RE_OP_DIGIT 19055 break 19056 case 'D': 19057 specialOp = RE_OP_NOTDIGIT 19058 break 19059 case 's': 19060 specialOp = RE_OP_SPACE 19061 break 19062 case 'S': 19063 specialOp = RE_OP_NOTSPACE 19064 break 19065 case 'w': 19066 specialOp = RE_OP_WORD 19067 break 19068 case 'W': 19069 specialOp = RE_OP_NOTWORD 19070 break 19071 } 19072 if specialOp != 0 { 19073 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19074 re_append(tls, p, specialOp, 0) 19075 } else { 19076 c = re_esc_char(tls, p) 19077 re_append(tls, p, RE_OP_MATCH, int32(c)) 19078 } 19079 break 19080 19081 } 19082 default: 19083 { 19084 re_append(tls, p, RE_OP_MATCH, int32(c)) 19085 break 19086 19087 } 19088 } 19089 iPrev = iStart 19090 } 19091 return uintptr(0) 19092 } 19093 19094 func sqlite3re_free(tls *libc.TLS, pRe uintptr) { 19095 if pRe != 0 { 19096 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaOp) 19097 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaArg) 19098 sqlite3.Xsqlite3_free(tls, pRe) 19099 } 19100 } 19101 19102 func sqlite3re_compile(tls *libc.TLS, ppRe uintptr, zIn uintptr, noCase int32) uintptr { 19103 var pRe uintptr 19104 var zErr uintptr 19105 var i int32 19106 var j int32 19107 19108 *(*uintptr)(unsafe.Pointer(ppRe)) = uintptr(0) 19109 pRe = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(ReCompiled{}))) 19110 if pRe == uintptr(0) { 19111 return ts + 2069 19112 } 19113 libc.Xmemset(tls, pRe, 0, uint32(unsafe.Sizeof(ReCompiled{}))) 19114 (*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar = func() uintptr { 19115 if noCase != 0 { 19116 return *(*uintptr)(unsafe.Pointer(&struct { 19117 f func(*libc.TLS, uintptr) uint32 19118 }{re_next_char_nocase})) 19119 } 19120 return *(*uintptr)(unsafe.Pointer(&struct { 19121 f func(*libc.TLS, uintptr) uint32 19122 }{re_next_char})) 19123 }() 19124 if re_resize(tls, pRe, 30) != 0 { 19125 sqlite3re_free(tls, pRe) 19126 return ts + 2069 19127 } 19128 if int32(*(*int8)(unsafe.Pointer(zIn))) == '^' { 19129 zIn++ 19130 } else { 19131 re_append(tls, pRe, RE_OP_ANYSTAR, 0) 19132 } 19133 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fz = zIn 19134 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi = 0 19135 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx = int32(libc.Xstrlen(tls, zIn)) 19136 zErr = re_subcompile_re(tls, pRe) 19137 if zErr != 0 { 19138 sqlite3re_free(tls, pRe) 19139 return zErr 19140 } 19141 if int32(rePeek(tls, pRe)) == '$' && (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi+1 >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 19142 re_append(tls, pRe, RE_OP_MATCH, RE_EOF) 19143 re_append(tls, pRe, RE_OP_ACCEPT, 0) 19144 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 19145 } else if (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 19146 re_append(tls, pRe, RE_OP_ACCEPT, 0) 19147 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 19148 } else { 19149 sqlite3re_free(tls, pRe) 19150 return ts + 6808 19151 } 19152 19153 if int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp))) == RE_OP_ANYSTAR && !(noCase != 0) { 19154 j = 0 19155 i = 1 19156 for ; j < int32(unsafe.Sizeof([12]uint8{}))-2 && int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(i)))) == RE_OP_MATCH; i++ { 19157 var x uint32 = uint32(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(i)*4))) 19158 if x <= uint32(127) { 19159 *(*uint8)(unsafe.Pointer(pRe + 28 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(x) 19160 } else if x <= uint32(0xfff) { 19161 *(*uint8)(unsafe.Pointer(pRe + 28 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xc0) | x>>6) 19162 *(*uint8)(unsafe.Pointer(pRe + 28 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 19163 } else if x <= uint32(0xffff) { 19164 *(*uint8)(unsafe.Pointer(pRe + 28 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xe0) | x>>12) 19165 *(*uint8)(unsafe.Pointer(pRe + 28 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x>>6&uint32(0x3f)) 19166 *(*uint8)(unsafe.Pointer(pRe + 28 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 19167 } else { 19168 break 19169 } 19170 } 19171 if j > 0 && int32(*(*uint8)(unsafe.Pointer(pRe + 28 + uintptr(j-1)))) == 0 { 19172 j-- 19173 } 19174 (*ReCompiled)(unsafe.Pointer(pRe)).FnInit = j 19175 } 19176 return (*ReCompiled)(unsafe.Pointer(pRe)).FzErr 19177 } 19178 19179 func re_sql_func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19180 bp := tls.Alloc(4) 19181 defer tls.Free(4) 19182 19183 var zPattern uintptr 19184 var zStr uintptr 19185 var zErr uintptr 19186 var setAux int32 = 0 19187 19188 _ = argc 19189 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_get_auxdata(tls, context, 0) 19190 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 19191 zPattern = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19192 if zPattern == uintptr(0) { 19193 return 19194 } 19195 zErr = sqlite3re_compile(tls, bp, zPattern, libc.Bool32(sqlite3.Xsqlite3_user_data(tls, context) != uintptr(0))) 19196 if zErr != 0 { 19197 sqlite3re_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 19198 sqlite3.Xsqlite3_result_error(tls, context, zErr, -1) 19199 return 19200 } 19201 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 19202 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19203 return 19204 } 19205 setAux = 1 19206 } 19207 zStr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 19208 if zStr != uintptr(0) { 19209 sqlite3.Xsqlite3_result_int(tls, context, sqlite3re_match(tls, *(*uintptr)(unsafe.Pointer(bp)), zStr, -1)) 19210 } 19211 if setAux != 0 { 19212 sqlite3.Xsqlite3_set_auxdata(tls, context, 0, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3re_free}))) 19213 } 19214 } 19215 19216 func sqlite3_regexp_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19217 var rc int32 = SQLITE_OK 19218 _ = pApi 19219 19220 _ = pzErrMsg 19221 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6831, 2, 19222 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 19223 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 19224 f func(*libc.TLS, uintptr, int32, uintptr) 19225 }{re_sql_func})), uintptr(0), uintptr(0)) 19226 if rc == SQLITE_OK { 19227 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6838, 2, 19228 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 19229 db, *(*uintptr)(unsafe.Pointer(&struct { 19230 f func(*libc.TLS, uintptr, int32, uintptr) 19231 }{re_sql_func})), uintptr(0), uintptr(0)) 19232 } 19233 return rc 19234 } 19235 19236 func rememberFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 19237 var v sqlite3_int64 19238 var ptr uintptr 19239 19240 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 19241 ptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), ts+4060) 19242 if ptr != 0 { 19243 *(*sqlite3_int64)(unsafe.Pointer(ptr)) = v 19244 } 19245 sqlite3.Xsqlite3_result_int64(tls, pCtx, v) 19246 } 19247 19248 func sqlite3_remember_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19249 var rc int32 = SQLITE_OK 19250 _ = pApi 19251 19252 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6846, 2, SQLITE_UTF8, uintptr(0), 19253 *(*uintptr)(unsafe.Pointer(&struct { 19254 f func(*libc.TLS, uintptr, int32, uintptr) 19255 }{rememberFunc})), uintptr(0), uintptr(0)) 19256 return rc 19257 } 19258 19259 type series_cursor1 = struct { 19260 Fbase sqlite3_vtab_cursor 19261 FisDesc int32 19262 FiRowid sqlite3_int64 19263 FiValue sqlite3_int64 19264 FmnValue sqlite3_int64 19265 FmxValue sqlite3_int64 19266 FiStep sqlite3_int64 19267 } 19268 19269 type series_cursor = series_cursor1 19270 19271 func seriesConnect(tls *libc.TLS, db uintptr, pUnused uintptr, argcUnused int32, argvUnused uintptr, ppVtab uintptr, pzErrUnused uintptr) int32 { 19272 var pNew uintptr 19273 var rc int32 19274 19275 _ = pUnused 19276 _ = argcUnused 19277 _ = argvUnused 19278 _ = pzErrUnused 19279 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 19280 ts+6855) 19281 if rc == SQLITE_OK { 19282 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 19283 if pNew == uintptr(0) { 19284 return SQLITE_NOMEM 19285 } 19286 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(sqlite3_vtab{}))) 19287 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 19288 } 19289 return rc 19290 } 19291 19292 func seriesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 19293 sqlite3.Xsqlite3_free(tls, pVtab) 19294 return SQLITE_OK 19295 } 19296 19297 func seriesOpen(tls *libc.TLS, pUnused uintptr, ppCursor uintptr) int32 { 19298 var pCur uintptr 19299 _ = pUnused 19300 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(series_cursor{}))) 19301 if pCur == uintptr(0) { 19302 return SQLITE_NOMEM 19303 } 19304 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(series_cursor{}))) 19305 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 19306 return SQLITE_OK 19307 } 19308 19309 func seriesClose(tls *libc.TLS, cur uintptr) int32 { 19310 sqlite3.Xsqlite3_free(tls, cur) 19311 return SQLITE_OK 19312 } 19313 19314 func seriesNext(tls *libc.TLS, cur uintptr) int32 { 19315 var pCur uintptr = cur 19316 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 19317 *(*sqlite3_int64)(unsafe.Pointer(pCur + 16)) -= (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19318 } else { 19319 *(*sqlite3_int64)(unsafe.Pointer(pCur + 16)) += (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19320 } 19321 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid++ 19322 return SQLITE_OK 19323 } 19324 19325 func seriesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 19326 var pCur uintptr = cur 19327 var x sqlite3_int64 = int64(0) 19328 switch i { 19329 case SERIES_COLUMN_START: 19330 x = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 19331 break 19332 case SERIES_COLUMN_STOP: 19333 x = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 19334 break 19335 case SERIES_COLUMN_STEP: 19336 x = (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19337 break 19338 default: 19339 x = (*series_cursor)(unsafe.Pointer(pCur)).FiValue 19340 break 19341 } 19342 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 19343 return SQLITE_OK 19344 } 19345 19346 func seriesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 19347 var pCur uintptr = cur 19348 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*series_cursor)(unsafe.Pointer(pCur)).FiRowid 19349 return SQLITE_OK 19350 } 19351 19352 func seriesEof(tls *libc.TLS, cur uintptr) int32 { 19353 var pCur uintptr = cur 19354 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 19355 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue < (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) 19356 } else { 19357 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue > (*series_cursor)(unsafe.Pointer(pCur)).FmxValue) 19358 } 19359 return int32(0) 19360 } 19361 19362 func seriesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStrUnused uintptr, argc int32, argv uintptr) int32 { 19363 var pCur uintptr = pVtabCursor 19364 var i int32 = 0 19365 _ = idxStrUnused 19366 if idxNum&1 != 0 { 19367 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*4))) 19368 } else { 19369 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(0) 19370 } 19371 if idxNum&2 != 0 { 19372 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*4))) 19373 } else { 19374 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 19375 } 19376 if idxNum&4 != 0 { 19377 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*4))) 19378 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep == int64(0) { 19379 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 19380 } else if (*series_cursor)(unsafe.Pointer(pCur)).FiStep < int64(0) { 19381 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = -(*series_cursor)(unsafe.Pointer(pCur)).FiStep 19382 if idxNum&16 == 0 { 19383 idxNum = idxNum | 8 19384 } 19385 } 19386 } else { 19387 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 19388 } 19389 for i = 0; i < argc; i++ { 19390 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) == SQLITE_NULL { 19391 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(1) 19392 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0) 19393 break 19394 } 19395 } 19396 if idxNum&8 != 0 { 19397 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 1 19398 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 19399 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep > int64(0) { 19400 *(*sqlite3_int64)(unsafe.Pointer(pCur + 16)) -= ((*series_cursor)(unsafe.Pointer(pCur)).FmxValue - (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) % (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19401 } 19402 } else { 19403 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 0 19404 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 19405 } 19406 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 19407 return SQLITE_OK 19408 } 19409 19410 func seriesBestIndex(tls *libc.TLS, pVTab uintptr, pIdxInfo uintptr) int32 { 19411 bp := tls.Alloc(12) 19412 defer tls.Free(12) 19413 19414 var i int32 19415 var j int32 19416 var idxNum int32 = 0 19417 var bStartSeen int32 = 0 19418 var unusableMask int32 = 0 19419 var nArg int32 = 0 19420 19421 var pConstraint uintptr 19422 19423 *(*int32)(unsafe.Pointer(bp)) = libc.AssignPtrInt32(bp+1*4, libc.AssignPtrInt32(bp+2*4, -1)) 19424 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 19425 i = 0 19426 __1: 19427 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 19428 goto __3 19429 } 19430 { 19431 var iCol int32 19432 var iMask int32 19433 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < SERIES_COLUMN_START { 19434 goto __2 19435 } 19436 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn - SERIES_COLUMN_START 19437 19438 iMask = int32(1) << iCol 19439 if iCol == 0 { 19440 bStartSeen = 1 19441 } 19442 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 19443 unusableMask = unusableMask | iMask 19444 goto __2 19445 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 19446 idxNum = idxNum | iMask 19447 *(*int32)(unsafe.Pointer(bp + uintptr(iCol)*4)) = i 19448 } 19449 19450 } 19451 goto __2 19452 __2: 19453 i++ 19454 pConstraint += 12 19455 goto __1 19456 goto __3 19457 __3: 19458 ; 19459 for i = 0; i < 3; i++ { 19460 if libc.AssignInt32(&j, *(*int32)(unsafe.Pointer(bp + uintptr(i)*4))) >= 0 { 19461 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).FargvIndex = libc.PreIncInt32(&nArg, 1) 19462 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).Fomit = libc.BoolUint8(!(1 != 0)) 19463 } 19464 } 19465 19466 if !(bStartSeen != 0) { 19467 sqlite3.Xsqlite3_free(tls, (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg) 19468 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 19469 ts+6914, 0) 19470 return SQLITE_ERROR 19471 } 19472 if unusableMask & ^idxNum != 0 { 19473 return SQLITE_CONSTRAINT 19474 } 19475 if idxNum&3 == 3 { 19476 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2 - libc.Bool32(idxNum&4 != 0)) 19477 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000) 19478 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy >= 1 && (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 0 { 19479 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 19480 idxNum = idxNum | 8 19481 } else { 19482 idxNum = idxNum | 16 19483 } 19484 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 19485 } 19486 } else { 19487 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 19488 } 19489 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 19490 return SQLITE_OK 19491 } 19492 19493 var seriesModule = sqlite3_module{ 19494 FxConnect: 0, 19495 FxBestIndex: 0, 19496 FxDisconnect: 0, 19497 FxOpen: 0, 19498 FxClose: 0, 19499 FxFilter: 0, 19500 FxNext: 0, 19501 FxEof: 0, 19502 FxColumn: 0, 19503 FxRowid: 0, 19504 } 19505 19506 func sqlite3_series_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19507 var rc int32 = SQLITE_OK 19508 _ = pApi 19509 19510 if sqlite3.Xsqlite3_libversion_number(tls) < 3008012 && pzErrMsg != uintptr(0) { 19511 *(*uintptr)(unsafe.Pointer(pzErrMsg)) = sqlite3.Xsqlite3_mprintf(tls, 19512 ts+6972, 0) 19513 return SQLITE_ERROR 19514 } 19515 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+7022, uintptr(unsafe.Pointer(&seriesModule)), uintptr(0)) 19516 return rc 19517 } 19518 19519 type u16 = uint16 19520 19521 var midClass = [128]uint8{ 19522 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19523 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19524 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19525 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19526 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 19527 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19528 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19529 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19530 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19531 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19532 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19533 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19534 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19535 uint8(CCLASS_SILENT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19536 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19537 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19538 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19539 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19540 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19541 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19542 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19543 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19544 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19545 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19546 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19547 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19548 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19549 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19550 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19551 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_VOWEL), 19552 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19553 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19554 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19555 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19556 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19557 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19558 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19559 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19560 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19561 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19562 uint8(CCLASS_C), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19563 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19564 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19565 } 19566 19567 var initClass = [128]uint8{ 19568 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19569 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19570 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19571 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19572 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 19573 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19574 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19575 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19576 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19577 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19578 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19579 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19580 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19581 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19582 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19583 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19584 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19585 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19586 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19587 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19588 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19589 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19590 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19591 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19592 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19593 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19594 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19595 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19596 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19597 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_Y), 19598 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19599 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19600 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19601 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19602 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19603 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19604 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19605 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19606 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19607 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19608 uint8(CCLASS_C), uint8(CCLASS_Y), uint8(CCLASS_C), 19609 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19610 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19611 } 19612 19613 var className = *(*[14]uint8)(unsafe.Pointer(ts + 7038)) 19614 19615 func phoneticHash(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 19616 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+1)) 19617 var i int32 19618 var nOut int32 = 0 19619 var cPrev int8 = int8(0x77) 19620 var cPrevX int8 = int8(0x77) 19621 var aClass uintptr = uintptr(unsafe.Pointer(&initClass)) 19622 19623 if zOut == uintptr(0) { 19624 return uintptr(0) 19625 } 19626 if nIn > 2 { 19627 switch int32(*(*uint8)(unsafe.Pointer(zIn))) { 19628 case 'g': 19629 fallthrough 19630 case 'k': 19631 { 19632 if int32(*(*uint8)(unsafe.Pointer(zIn + 1))) == 'n' { 19633 zIn++ 19634 nIn-- 19635 } 19636 break 19637 19638 } 19639 } 19640 } 19641 for i = 0; i < nIn; i++ { 19642 var c uint8 = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 19643 if i+1 < nIn { 19644 if int32(c) == 'w' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'r' { 19645 continue 19646 } 19647 if int32(c) == 'd' && (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'j' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'g') { 19648 continue 19649 } 19650 if i+2 < nIn { 19651 if int32(c) == 't' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'c' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+2)))) == 'h' { 19652 continue 19653 } 19654 } 19655 } 19656 c = *(*uint8)(unsafe.Pointer(aClass + uintptr(int32(c)&0x7f))) 19657 if int32(c) == CCLASS_SPACE { 19658 continue 19659 } 19660 if int32(c) == CCLASS_OTHER && int32(cPrev) != CCLASS_DIGIT { 19661 continue 19662 } 19663 aClass = uintptr(unsafe.Pointer(&midClass)) 19664 if int32(c) == CCLASS_VOWEL && (int32(cPrevX) == CCLASS_R || int32(cPrevX) == CCLASS_L) { 19665 continue 19666 } 19667 if (int32(c) == CCLASS_R || int32(c) == CCLASS_L) && int32(cPrevX) == CCLASS_VOWEL { 19668 nOut-- 19669 } 19670 cPrev = int8(c) 19671 if int32(c) == CCLASS_SILENT { 19672 continue 19673 } 19674 cPrevX = int8(c) 19675 c = className[c] 19676 19677 if nOut == 0 || int32(c) != int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(nOut-1)))) { 19678 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = c 19679 } 19680 } 19681 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 19682 return zOut 19683 } 19684 19685 func phoneticHashSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19686 var zIn uintptr 19687 var zOut uintptr 19688 19689 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19690 if zIn == uintptr(0) { 19691 return 19692 } 19693 zOut = phoneticHash(tls, zIn, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 19694 if zOut == uintptr(0) { 19695 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19696 } else { 19697 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 19698 } 19699 } 19700 19701 func characterClass(tls *libc.TLS, cPrev int8, c int8) int8 { 19702 if int32(cPrev) == 0 { 19703 return int8(initClass[int32(c)&0x7f]) 19704 } 19705 return int8(midClass[int32(c)&0x7f]) 19706 } 19707 19708 func insertOrDeleteCost(tls *libc.TLS, cPrev int8, c int8, cNext int8) int32 { 19709 var classC int8 = characterClass(tls, cPrev, c) 19710 var classCprev int8 19711 19712 if int32(classC) == CCLASS_SILENT { 19713 return 1 19714 } 19715 if int32(cPrev) == int32(c) { 19716 return 10 19717 } 19718 if int32(classC) == CCLASS_VOWEL && (int32(cPrev) == 'r' || int32(cNext) == 'r') { 19719 return 20 19720 } 19721 classCprev = characterClass(tls, cPrev, cPrev) 19722 if int32(classC) == int32(classCprev) { 19723 if int32(classC) == CCLASS_VOWEL { 19724 return 15 19725 } else { 19726 return 50 19727 } 19728 } 19729 19730 return 100 19731 } 19732 19733 func substituteCost(tls *libc.TLS, cPrev int8, cFrom int8, cTo int8) int32 { 19734 var classFrom int8 19735 var classTo int8 19736 if int32(cFrom) == int32(cTo) { 19737 return 0 19738 } 19739 if int32(cFrom) == int32(cTo)^0x20 && (int32(cTo) >= 'A' && int32(cTo) <= 'Z' || int32(cTo) >= 'a' && int32(cTo) <= 'z') { 19740 return 0 19741 } 19742 classFrom = characterClass(tls, cPrev, cFrom) 19743 classTo = characterClass(tls, cPrev, cTo) 19744 if int32(classFrom) == int32(classTo) { 19745 return 40 19746 } 19747 if int32(classFrom) >= CCLASS_B && int32(classFrom) <= CCLASS_Y && 19748 int32(classTo) >= CCLASS_B && int32(classTo) <= CCLASS_Y { 19749 return 75 19750 } 19751 19752 return 100 19753 } 19754 19755 func editdist1(tls *libc.TLS, zA uintptr, zB uintptr, pnMatch uintptr) int32 { 19756 bp := tls.Alloc(300) 19757 defer tls.Free(300) 19758 19759 var nA int32 19760 var nB int32 19761 var xA int32 19762 var xB int32 19763 var cA int8 = int8(0) 19764 var cB int8 19765 var cAprev int8 19766 var cBprev int8 19767 var cAnext int8 19768 var cBnext int8 19769 var d int32 19770 var dc int32 = 0 19771 var res int32 19772 var m uintptr 19773 var cx uintptr 19774 var toFree uintptr = uintptr(0) 19775 var nMatch int32 = 0 19776 19777 if zA == uintptr(0) || zB == uintptr(0) { 19778 return -1 19779 } 19780 19781 for *(*int8)(unsafe.Pointer(zA)) != 0 && int32(*(*int8)(unsafe.Pointer(zA))) == int32(*(*int8)(unsafe.Pointer(zB))) { 19782 dc = int32(*(*int8)(unsafe.Pointer(zA))) 19783 zA++ 19784 zB++ 19785 nMatch++ 19786 } 19787 if pnMatch != 0 { 19788 *(*int32)(unsafe.Pointer(pnMatch)) = nMatch 19789 } 19790 if int32(*(*int8)(unsafe.Pointer(zA))) == 0 && int32(*(*int8)(unsafe.Pointer(zB))) == 0 { 19791 return 0 19792 } 19793 19794 for nA = 0; *(*int8)(unsafe.Pointer(zA + uintptr(nA))) != 0; nA++ { 19795 if int32(*(*int8)(unsafe.Pointer(zA + uintptr(nA))))&0x80 != 0 { 19796 return -2 19797 } 19798 } 19799 for nB = 0; *(*int8)(unsafe.Pointer(zB + uintptr(nB))) != 0; nB++ { 19800 if int32(*(*int8)(unsafe.Pointer(zB + uintptr(nB))))&0x80 != 0 { 19801 return -2 19802 } 19803 } 19804 19805 if nA == 0 { 19806 cBprev = int8(dc) 19807 for xB = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB))))) != 0; xB++ { 19808 res = res + insertOrDeleteCost(tls, cBprev, cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB+1))))/FINAL_INS_COST_DIV 19809 cBprev = cB 19810 } 19811 return res 19812 } 19813 if nB == 0 { 19814 cAprev = int8(dc) 19815 for xA = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA))))) != 0; xA++ { 19816 res = res + insertOrDeleteCost(tls, cAprev, cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA+1)))) 19817 cAprev = cA 19818 } 19819 return res 19820 } 19821 19822 if int32(*(*int8)(unsafe.Pointer(zA))) == '*' && int32(*(*int8)(unsafe.Pointer(zA + 1))) == 0 { 19823 return 0 19824 } 19825 19826 if uint32(nB) < uint32(unsafe.Sizeof([75]int32{}))*uint32(4)/(uint32(unsafe.Sizeof(int32(0)))*uint32(5)) { 19827 m = bp 19828 } else { 19829 m = libc.AssignUintptr(&toFree, sqlite3.Xsqlite3_malloc64(tls, uint64(uint32((nB+1)*5)*uint32(unsafe.Sizeof(int32(0)))/uint32(4)))) 19830 if m == uintptr(0) { 19831 return -3 19832 } 19833 } 19834 cx = m + uintptr(nB+1)*4 19835 19836 *(*int32)(unsafe.Pointer(m)) = 0 19837 *(*int8)(unsafe.Pointer(cx)) = int8(dc) 19838 cBprev = int8(dc) 19839 for xB = 1; xB <= nB; xB++ { 19840 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 19841 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 19842 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = cB 19843 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) + insertOrDeleteCost(tls, cBprev, cB, cBnext) 19844 cBprev = cB 19845 } 19846 cAprev = int8(dc) 19847 for xA = 1; xA <= nA; xA++ { 19848 var lastA int32 = libc.Bool32(xA == nA) 19849 cA = *(*int8)(unsafe.Pointer(zA + uintptr(xA-1))) 19850 cAnext = *(*int8)(unsafe.Pointer(zA + uintptr(xA))) 19851 if int32(cA) == '*' && lastA != 0 { 19852 break 19853 } 19854 d = *(*int32)(unsafe.Pointer(m)) 19855 dc = int32(*(*int8)(unsafe.Pointer(cx))) 19856 *(*int32)(unsafe.Pointer(m)) = d + insertOrDeleteCost(tls, cAprev, cA, cAnext) 19857 cBprev = int8(0) 19858 for xB = 1; xB <= nB; xB++ { 19859 var totalCost int32 19860 var insCost int32 19861 var delCost int32 19862 var subCost int32 19863 var ncx int32 19864 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 19865 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 19866 19867 insCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cB, cBnext) 19868 if lastA != 0 { 19869 insCost = insCost / FINAL_INS_COST_DIV 19870 } 19871 19872 delCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB))), cA, cBnext) 19873 19874 subCost = substituteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cA, cB) 19875 19876 totalCost = insCost + *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) 19877 ncx = int32(cB) 19878 if delCost+*(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < totalCost { 19879 totalCost = delCost + *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19880 ncx = int32(cA) 19881 } 19882 if subCost+d < totalCost { 19883 totalCost = subCost + d 19884 } 19885 19886 d = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19887 dc = int32(*(*int8)(unsafe.Pointer(cx + uintptr(xB)))) 19888 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = totalCost 19889 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = int8(ncx) 19890 cBprev = cB 19891 } 19892 cAprev = cA 19893 } 19894 19895 if int32(cA) == '*' { 19896 res = *(*int32)(unsafe.Pointer(m + 1*4)) 19897 for xB = 1; xB <= nB; xB++ { 19898 if *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < res { 19899 res = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19900 if pnMatch != 0 { 19901 *(*int32)(unsafe.Pointer(pnMatch)) = xB + nMatch 19902 } 19903 } 19904 } 19905 } else { 19906 res = *(*int32)(unsafe.Pointer(m + uintptr(nB)*4)) 19907 19908 } 19909 sqlite3.Xsqlite3_free(tls, toFree) 19910 return res 19911 } 19912 19913 func editdistSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19914 var res int32 = editdist1(tls, 19915 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 19916 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))), 19917 uintptr(0)) 19918 if res < 0 { 19919 if res == -3 { 19920 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19921 } else if res == -2 { 19922 sqlite3.Xsqlite3_result_error(tls, context, ts+7052, -1) 19923 } else { 19924 sqlite3.Xsqlite3_result_error(tls, context, ts+7082, -1) 19925 } 19926 } else { 19927 sqlite3.Xsqlite3_result_int(tls, context, res) 19928 } 19929 } 19930 19931 type EditDist3Cost1 = struct { 19932 FpNext uintptr 19933 FnFrom u8 19934 FnTo u8 19935 FiCost u16 19936 Fa [4]int8 19937 } 19938 19939 type EditDist3Cost = EditDist3Cost1 19940 type EditDist3Config1 = struct { 19941 FnLang int32 19942 Fa uintptr 19943 } 19944 19945 type EditDist3Config = EditDist3Config1 19946 type EditDist3From1 = struct { 19947 FnSubst int32 19948 FnDel int32 19949 FnByte int32 19950 FapSubst uintptr 19951 FapDel uintptr 19952 } 19953 19954 type EditDist3From = EditDist3From1 19955 type EditDist3FromString1 = struct { 19956 Fz uintptr 19957 Fn int32 19958 FisPrefix int32 19959 Fa uintptr 19960 } 19961 19962 type EditDist3FromString = EditDist3FromString1 19963 type EditDist3To1 = struct { 19964 FnIns int32 19965 FnByte int32 19966 FapIns uintptr 19967 } 19968 19969 type EditDist3To = EditDist3To1 19970 type EditDist3ToString1 = struct { 19971 Fz uintptr 19972 Fn int32 19973 Fa uintptr 19974 } 19975 19976 type EditDist3ToString = EditDist3ToString1 19977 type EditDist3Lang1 = struct { 19978 FiLang int32 19979 FiInsCost int32 19980 FiDelCost int32 19981 FiSubCost int32 19982 FpCost uintptr 19983 } 19984 19985 type EditDist3Lang = EditDist3Lang1 19986 19987 var editDist3Lang = EditDist3Lang{FiInsCost: 100, FiDelCost: 100, FiSubCost: 150} 19988 19989 func editDist3ConfigClear(tls *libc.TLS, p uintptr) { 19990 var i int32 19991 if p == uintptr(0) { 19992 return 19993 } 19994 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; i++ { 19995 var pCost uintptr 19996 var pNext uintptr 19997 pCost = (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(i)*20)).FpCost 19998 for pCost != 0 { 19999 pNext = (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext 20000 sqlite3.Xsqlite3_free(tls, pCost) 20001 pCost = pNext 20002 } 20003 } 20004 sqlite3.Xsqlite3_free(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa) 20005 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(EditDist3Config{}))) 20006 } 20007 20008 func editDist3ConfigDelete(tls *libc.TLS, pIn uintptr) { 20009 var p uintptr = pIn 20010 editDist3ConfigClear(tls, p) 20011 sqlite3.Xsqlite3_free(tls, p) 20012 } 20013 20014 func editDist3CostCompare(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 20015 var n int32 = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) 20016 var rc int32 20017 if n > int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) { 20018 n = int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 20019 } 20020 rc = libc.Xstrncmp(tls, pA+8, pB+8, uint32(n)) 20021 if rc == 0 { 20022 rc = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) - int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 20023 } 20024 return rc 20025 } 20026 20027 func editDist3CostMerge(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 20028 bp := tls.Alloc(4) 20029 defer tls.Free(4) 20030 20031 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 20032 var ppTail uintptr = bp 20033 var p uintptr 20034 for pA != 0 && pB != 0 { 20035 if editDist3CostCompare(tls, pA, pB) <= 0 { 20036 p = pA 20037 pA = (*EditDist3Cost)(unsafe.Pointer(pA)).FpNext 20038 } else { 20039 p = pB 20040 pB = (*EditDist3Cost)(unsafe.Pointer(pB)).FpNext 20041 } 20042 *(*uintptr)(unsafe.Pointer(ppTail)) = p 20043 ppTail = p 20044 } 20045 if pA != 0 { 20046 *(*uintptr)(unsafe.Pointer(ppTail)) = pA 20047 } else { 20048 *(*uintptr)(unsafe.Pointer(ppTail)) = pB 20049 } 20050 return *(*uintptr)(unsafe.Pointer(bp)) 20051 } 20052 20053 func editDist3CostSort(tls *libc.TLS, pList uintptr) uintptr { 20054 bp := tls.Alloc(240) 20055 defer tls.Free(240) 20056 20057 var p uintptr 20058 var i int32 20059 var mx int32 = 0 20060 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 20061 *(*uintptr)(unsafe.Pointer(bp + 1*4)) = uintptr(0) 20062 for pList != 0 { 20063 p = pList 20064 pList = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 20065 (*EditDist3Cost)(unsafe.Pointer(p)).FpNext = uintptr(0) 20066 for i = 0; *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*4)) != 0; i++ { 20067 p = editDist3CostMerge(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*4)), p) 20068 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*4)) = uintptr(0) 20069 } 20070 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*4)) = p 20071 if i > mx { 20072 mx = i 20073 *(*uintptr)(unsafe.Pointer(bp + uintptr(i+1)*4)) = uintptr(0) 20074 } 20075 } 20076 p = uintptr(0) 20077 for i = 0; i <= mx; i++ { 20078 if *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*4)) != 0 { 20079 p = editDist3CostMerge(tls, p, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*4))) 20080 } 20081 } 20082 return p 20083 } 20084 20085 func editDist3ConfigLoad(tls *libc.TLS, p uintptr, db uintptr, zTable uintptr) int32 { 20086 bp := tls.Alloc(12) 20087 defer tls.Free(12) 20088 20089 var rc int32 20090 var rc2 int32 20091 var zSql uintptr 20092 var iLangPrev int32 = -9999 20093 var pLang uintptr = uintptr(0) 20094 20095 zSql = sqlite3.Xsqlite3_mprintf(tls, 20096 ts+7107, libc.VaList(bp, zTable)) 20097 if zSql == uintptr(0) { 20098 return SQLITE_NOMEM 20099 } 20100 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+8, uintptr(0)) 20101 sqlite3.Xsqlite3_free(tls, zSql) 20102 if rc != 0 { 20103 return rc 20104 } 20105 editDist3ConfigClear(tls, p) 20106 for sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) == SQLITE_ROW { 20107 var iLang int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0) 20108 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 20109 var nFrom int32 20110 if zFrom != 0 { 20111 nFrom = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 20112 } else { 20113 nFrom = 0 20114 } 20115 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 20116 var nTo int32 20117 if zTo != 0 { 20118 nTo = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 20119 } else { 20120 nTo = 0 20121 } 20122 var iCost int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 3) 20123 20124 if nFrom > 100 || nTo > 100 { 20125 continue 20126 } 20127 if iCost < 0 { 20128 continue 20129 } 20130 if iCost >= 10000 { 20131 continue 20132 } 20133 if pLang == uintptr(0) || iLang != iLangPrev { 20134 var pNew uintptr 20135 pNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa, uint64(uint32((*EditDist3Config)(unsafe.Pointer(p)).FnLang+1)*uint32(unsafe.Sizeof(EditDist3Lang{})))) 20136 if pNew == uintptr(0) { 20137 rc = SQLITE_NOMEM 20138 break 20139 } 20140 (*EditDist3Config)(unsafe.Pointer(p)).Fa = pNew 20141 pLang = (*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr((*EditDist3Config)(unsafe.Pointer(p)).FnLang)*20 20142 (*EditDist3Config)(unsafe.Pointer(p)).FnLang++ 20143 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiLang = iLang 20144 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = 100 20145 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = 100 20146 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = 150 20147 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = uintptr(0) 20148 iLangPrev = iLang 20149 } 20150 if nFrom == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && nTo == 0 { 20151 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = iCost 20152 } else if nFrom == 0 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 20153 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = iCost 20154 } else if nFrom == 1 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 20155 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = iCost 20156 } else { 20157 var pCost uintptr 20158 var nExtra int32 = nFrom + nTo - 4 20159 if nExtra < 0 { 20160 nExtra = 0 20161 } 20162 pCost = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(EditDist3Cost{}))+uint32(nExtra))) 20163 if pCost == uintptr(0) { 20164 rc = SQLITE_NOMEM 20165 break 20166 } 20167 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnFrom = u8(nFrom) 20168 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnTo = u8(nTo) 20169 (*EditDist3Cost)(unsafe.Pointer(pCost)).FiCost = u16(iCost) 20170 libc.Xmemcpy(tls, pCost+8, zFrom, uint32(nFrom)) 20171 libc.Xmemcpy(tls, pCost+8+uintptr(nFrom), zTo, uint32(nTo)) 20172 (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 20173 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = pCost 20174 } 20175 } 20176 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 20177 if rc == SQLITE_OK { 20178 rc = rc2 20179 } 20180 if rc == SQLITE_OK { 20181 var iLang int32 20182 for iLang = 0; iLang < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; iLang++ { 20183 (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(iLang)*20)).FpCost = editDist3CostSort(tls, (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa+uintptr(iLang)*20)).FpCost) 20184 } 20185 } 20186 return rc 20187 } 20188 20189 func utf8Len(tls *libc.TLS, c uint8, N int32) int32 { 20190 var len int32 = 1 20191 if int32(c) > 0x7f { 20192 if int32(c)&0xe0 == 0xc0 { 20193 len = 2 20194 } else if int32(c)&0xf0 == 0xe0 { 20195 len = 3 20196 } else { 20197 len = 4 20198 } 20199 } 20200 if len > N { 20201 len = N 20202 } 20203 return len 20204 } 20205 20206 func matchTo(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 20207 if int32(*(*int8)(unsafe.Pointer(p + 8 + uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)))) != int32(*(*int8)(unsafe.Pointer(z))) { 20208 return 0 20209 } 20210 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n { 20211 return 0 20212 } 20213 if libc.Xstrncmp(tls, p+8+uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), z, uint32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)) != 0 { 20214 return 0 20215 } 20216 return 1 20217 } 20218 20219 func matchFrom(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 20220 if (*EditDist3Cost)(unsafe.Pointer(p)).FnFrom != 0 { 20221 if int32(*(*int8)(unsafe.Pointer(p + 8))) != int32(*(*int8)(unsafe.Pointer(z))) { 20222 return 0 20223 } 20224 if libc.Xstrncmp(tls, p+8, z, uint32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)) != 0 { 20225 return 0 20226 } 20227 } 20228 return 1 20229 } 20230 20231 func matchFromTo(tls *libc.TLS, pStr uintptr, n1 int32, z2 uintptr, n2 int32) int32 { 20232 var b1 int32 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n1)*20)).FnByte 20233 if b1 > n2 { 20234 return 0 20235 } 20236 20237 if int32(*(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n1)))) != int32(*(*int8)(unsafe.Pointer(z2))) { 20238 return 0 20239 } 20240 if libc.Xstrncmp(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz+uintptr(n1), z2, uint32(b1)) != 0 { 20241 return 0 20242 } 20243 return 1 20244 } 20245 20246 func editDist3FromStringDelete(tls *libc.TLS, p uintptr) { 20247 var i int32 20248 if p != 0 { 20249 for i = 0; i < (*EditDist3FromString)(unsafe.Pointer(p)).Fn; i++ { 20250 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*20)).FapDel) 20251 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*20)).FapSubst) 20252 } 20253 sqlite3.Xsqlite3_free(tls, p) 20254 } 20255 } 20256 20257 func editDist3FromStringNew(tls *libc.TLS, pLang uintptr, z uintptr, n int32) uintptr { 20258 var pStr uintptr 20259 var p uintptr 20260 var i int32 20261 20262 if z == uintptr(0) { 20263 return uintptr(0) 20264 } 20265 if n < 0 { 20266 n = int32(libc.Xstrlen(tls, z)) 20267 } 20268 pStr = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(EditDist3FromString{}))+uint32(unsafe.Sizeof(EditDist3From{}))*uint32(n)+uint32(n)+uint32(1))) 20269 if pStr == uintptr(0) { 20270 return uintptr(0) 20271 } 20272 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa = pStr + 1*16 20273 libc.Xmemset(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa, 0, uint32(unsafe.Sizeof(EditDist3From{}))*uint32(n)) 20274 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn = n 20275 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n)*20 20276 libc.Xmemcpy(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz, z, uint32(n+1)) 20277 if n != 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(n-1)))) == '*' { 20278 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 1 20279 n-- 20280 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn-- 20281 *(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n))) = int8(0) 20282 } else { 20283 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 0 20284 } 20285 20286 for i = 0; i < n; i++ { 20287 var pFrom uintptr = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(i)*20 20288 libc.Xmemset(tls, pFrom, 0, uint32(unsafe.Sizeof(EditDist3From{}))) 20289 (*EditDist3From)(unsafe.Pointer(pFrom)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))), n-i) 20290 for p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost; p != 0; p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext { 20291 var apNew uintptr 20292 if i+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > n { 20293 continue 20294 } 20295 if matchFrom(tls, p, z+uintptr(i), n-i) == 0 { 20296 continue 20297 } 20298 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) == 0 { 20299 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel, 20300 uint64(uint32(unsafe.Sizeof(uintptr(0)))*uint32((*EditDist3From)(unsafe.Pointer(pFrom)).FnDel+1))) 20301 if apNew == uintptr(0) { 20302 break 20303 } 20304 (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel = apNew 20305 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnDel, 1))*4)) = p 20306 } else { 20307 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst, 20308 uint64(uint32(unsafe.Sizeof(uintptr(0)))*uint32((*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst+1))) 20309 if apNew == uintptr(0) { 20310 break 20311 } 20312 (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst = apNew 20313 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst, 1))*4)) = p 20314 } 20315 } 20316 if p != 0 { 20317 editDist3FromStringDelete(tls, pStr) 20318 pStr = uintptr(0) 20319 break 20320 } 20321 } 20322 return pStr 20323 } 20324 20325 func updateCost(tls *libc.TLS, m uintptr, i int32, j int32, iCost int32) { 20326 var b uint32 20327 20328 b = *(*uint32)(unsafe.Pointer(m + uintptr(j)*4)) + uint32(iCost) 20329 if b < *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) { 20330 *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) = b 20331 } 20332 } 20333 20334 func editDist3Core(tls *libc.TLS, pFrom uintptr, z2 uintptr, n2 int32, pLang uintptr, pnMatch uintptr) int32 { 20335 bp := tls.Alloc(1040) 20336 defer tls.Free(1040) 20337 20338 var k int32 20339 var n int32 20340 var i1 int32 20341 var b1 int32 20342 var i2 int32 20343 var b2 int32 20344 20345 var a2 uintptr 20346 var m uintptr 20347 var pToFree uintptr 20348 var szRow int32 20349 var p uintptr 20350 var res int32 20351 var nByte sqlite3_uint64 20352 20353 var apNew uintptr 20354 var cx int32 20355 var cxp int32 20356 var cxd int32 20357 var cxu int32 20358 var rx int32 20359 var rxp int32 20360 var b int32 20361 var nExtra int32 20362 *(*EditDist3FromString)(unsafe.Pointer(bp + 1024)) = *(*EditDist3FromString)(unsafe.Pointer(pFrom)) 20363 20364 n = ((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1) * (n2 + 1) 20365 n = (n + 1) & libc.CplInt32(1) 20366 nByte = sqlite3_uint64(uint32(n)*uint32(unsafe.Sizeof(uint32(0))) + uint32(unsafe.Sizeof(EditDist3To{}))*uint32(n2)) 20367 if !(nByte <= sqlite3_uint64(unsafe.Sizeof([256]uint32{}))) { 20368 goto __1 20369 } 20370 m = bp 20371 pToFree = uintptr(0) 20372 goto __2 20373 __1: 20374 m = libc.AssignUintptr(&pToFree, sqlite3.Xsqlite3_malloc64(tls, nByte)) 20375 if !(m == uintptr(0)) { 20376 goto __3 20377 } 20378 return -1 20379 __3: 20380 ; 20381 __2: 20382 ; 20383 a2 = m + uintptr(n)*4 20384 libc.Xmemset(tls, a2, 0, uint32(unsafe.Sizeof(EditDist3To{}))*uint32(n2)) 20385 20386 i2 = 0 20387 __4: 20388 if !(i2 < n2) { 20389 goto __6 20390 } 20391 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*12)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z2 + uintptr(i2)))), n2-i2) 20392 p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 20393 __7: 20394 if !(p != 0) { 20395 goto __9 20396 } 20397 if !(int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > 0) { 20398 goto __10 20399 } 20400 goto __9 20401 __10: 20402 ; 20403 if !(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n2) { 20404 goto __11 20405 } 20406 goto __8 20407 __11: 20408 ; 20409 if !(int32(*(*int8)(unsafe.Pointer(p + 8))) > int32(*(*int8)(unsafe.Pointer(z2 + uintptr(i2))))) { 20410 goto __12 20411 } 20412 goto __9 20413 __12: 20414 ; 20415 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) == 0) { 20416 goto __13 20417 } 20418 goto __8 20419 __13: 20420 ; 20421 (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*12)).FnIns++ 20422 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*12)).FapIns, uint64(uint32(unsafe.Sizeof(uintptr(0)))*uint32((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*12)).FnIns))) 20423 if !(apNew == uintptr(0)) { 20424 goto __14 20425 } 20426 res = -1 20427 goto editDist3Abort 20428 __14: 20429 ; 20430 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*12)).FapIns = apNew 20431 *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*12)).FapIns + uintptr((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*12)).FnIns-1)*4)) = p 20432 goto __8 20433 __8: 20434 p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 20435 goto __7 20436 goto __9 20437 __9: 20438 ; 20439 goto __5 20440 __5: 20441 i2++ 20442 goto __4 20443 goto __6 20444 __6: 20445 ; 20446 szRow = (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1 20447 libc.Xmemset(tls, m, 0x01, uint32((n2+1)*szRow)*uint32(unsafe.Sizeof(uint32(0)))) 20448 *(*uint32)(unsafe.Pointer(m)) = uint32(0) 20449 20450 i1 = 0 20451 __15: 20452 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 20453 goto __17 20454 } 20455 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*20)).FnByte 20456 updateCost(tls, m, i1+b1, i1, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 20457 k = 0 20458 __18: 20459 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*20)).FnDel) { 20460 goto __20 20461 } 20462 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*20)).FapDel + uintptr(k)*4)) 20463 updateCost(tls, m, i1+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), i1, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20464 goto __19 20465 __19: 20466 k++ 20467 goto __18 20468 goto __20 20469 __20: 20470 ; 20471 goto __16 20472 __16: 20473 i1 = i1 + b1 20474 goto __15 20475 goto __17 20476 __17: 20477 ; 20478 i2 = 0 20479 __21: 20480 if !(i2 < n2) { 20481 goto __23 20482 } 20483 b2 = (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*12)).FnByte 20484 rx = szRow * (i2 + b2) 20485 rxp = szRow * i2 20486 updateCost(tls, m, rx, rxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20487 k = 0 20488 __24: 20489 if !(k < (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*12)).FnIns) { 20490 goto __26 20491 } 20492 p = *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*12)).FapIns + uintptr(k)*4)) 20493 updateCost(tls, m, szRow*(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)), rxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20494 goto __25 20495 __25: 20496 k++ 20497 goto __24 20498 goto __26 20499 __26: 20500 ; 20501 i1 = 0 20502 __27: 20503 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 20504 goto __29 20505 } 20506 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*20)).FnByte 20507 cxp = rx + i1 20508 cx = cxp + b1 20509 cxd = rxp + i1 20510 cxu = cxd + b1 20511 updateCost(tls, m, cx, cxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 20512 k = 0 20513 __30: 20514 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*20)).FnDel) { 20515 goto __32 20516 } 20517 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*20)).FapDel + uintptr(k)*4)) 20518 updateCost(tls, m, cxp+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), cxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20519 goto __31 20520 __31: 20521 k++ 20522 goto __30 20523 goto __32 20524 __32: 20525 ; 20526 updateCost(tls, m, cx, cxu, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20527 if !(matchFromTo(tls, bp+1024, i1, z2+uintptr(i2), n2-i2) != 0) { 20528 goto __33 20529 } 20530 updateCost(tls, m, cx, cxd, 0) 20531 __33: 20532 ; 20533 updateCost(tls, m, cx, cxd, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost) 20534 k = 0 20535 __34: 20536 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*20)).FnSubst) { 20537 goto __36 20538 } 20539 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*20)).FapSubst + uintptr(k)*4)) 20540 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) != 0) { 20541 goto __37 20542 } 20543 updateCost(tls, m, cxd+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)+szRow*int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo), cxd, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20544 __37: 20545 ; 20546 goto __35 20547 __35: 20548 k++ 20549 goto __34 20550 goto __36 20551 __36: 20552 ; 20553 goto __28 20554 __28: 20555 i1 = i1 + b1 20556 goto __27 20557 goto __29 20558 __29: 20559 ; 20560 goto __22 20561 __22: 20562 i2 = i2 + b2 20563 goto __21 20564 goto __23 20565 __23: 20566 ; 20567 res = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*(n2+1)-1)*4))) 20568 n = n2 20569 if !((*EditDist3FromString)(unsafe.Pointer(bp+1024)).FisPrefix != 0) { 20570 goto __38 20571 } 20572 i2 = 1 20573 __39: 20574 if !(i2 <= n2) { 20575 goto __41 20576 } 20577 b = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*i2-1)*4))) 20578 if !(b <= res) { 20579 goto __42 20580 } 20581 res = b 20582 n = i2 - 1 20583 __42: 20584 ; 20585 goto __40 20586 __40: 20587 i2++ 20588 goto __39 20589 goto __41 20590 __41: 20591 ; 20592 __38: 20593 ; 20594 if !(pnMatch != 0) { 20595 goto __43 20596 } 20597 nExtra = 0 20598 k = 0 20599 __44: 20600 if !(k < n) { 20601 goto __46 20602 } 20603 if !(int32(*(*int8)(unsafe.Pointer(z2 + uintptr(k))))&0xc0 == 0x80) { 20604 goto __47 20605 } 20606 nExtra++ 20607 __47: 20608 ; 20609 goto __45 20610 __45: 20611 k++ 20612 goto __44 20613 goto __46 20614 __46: 20615 ; 20616 *(*int32)(unsafe.Pointer(pnMatch)) = n - nExtra 20617 __43: 20618 ; 20619 editDist3Abort: 20620 i2 = 0 20621 __48: 20622 if !(i2 < n2) { 20623 goto __50 20624 } 20625 sqlite3.Xsqlite3_free(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*12)).FapIns) 20626 goto __49 20627 __49: 20628 i2++ 20629 goto __48 20630 goto __50 20631 __50: 20632 ; 20633 sqlite3.Xsqlite3_free(tls, pToFree) 20634 return res 20635 } 20636 20637 func editDist3FindLang(tls *libc.TLS, pConfig uintptr, iLang int32) uintptr { 20638 var i int32 20639 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(pConfig)).FnLang; i++ { 20640 if (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(pConfig)).Fa+uintptr(i)*20)).FiLang == iLang { 20641 return (*EditDist3Config)(unsafe.Pointer(pConfig)).Fa + uintptr(i)*20 20642 } 20643 } 20644 return uintptr(unsafe.Pointer(&editDist3Lang)) 20645 } 20646 20647 func editDist3SqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20648 var pConfig uintptr = sqlite3.Xsqlite3_user_data(tls, context) 20649 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 20650 var rc int32 20651 if argc == 1 { 20652 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20653 rc = editDist3ConfigLoad(tls, pConfig, db, zTable) 20654 if rc != 0 { 20655 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 20656 } 20657 } else { 20658 var zA uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20659 var zB uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 20660 var nA int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20661 var nB int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 20662 var iLang int32 20663 if argc == 3 { 20664 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 20665 } else { 20666 iLang = 0 20667 } 20668 var pLang uintptr = editDist3FindLang(tls, pConfig, iLang) 20669 var pFrom uintptr 20670 var dist int32 20671 20672 pFrom = editDist3FromStringNew(tls, pLang, zA, nA) 20673 if pFrom == uintptr(0) { 20674 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20675 return 20676 } 20677 dist = editDist3Core(tls, pFrom, zB, nB, pLang, uintptr(0)) 20678 editDist3FromStringDelete(tls, pFrom) 20679 if dist == -1 { 20680 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20681 } else { 20682 sqlite3.Xsqlite3_result_int(tls, context, dist) 20683 } 20684 } 20685 } 20686 20687 func editDist3Install(tls *libc.TLS, db uintptr) int32 { 20688 var rc int32 20689 var pConfig uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 20690 if pConfig == uintptr(0) { 20691 return SQLITE_NOMEM 20692 } 20693 libc.Xmemset(tls, pConfig, 0, uint32(unsafe.Sizeof(EditDist3Config{}))) 20694 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20695 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20696 *(*uintptr)(unsafe.Pointer(&struct { 20697 f func(*libc.TLS, uintptr, int32, uintptr) 20698 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20699 if rc == SQLITE_OK { 20700 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20701 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20702 *(*uintptr)(unsafe.Pointer(&struct { 20703 f func(*libc.TLS, uintptr, int32, uintptr) 20704 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20705 } 20706 if rc == SQLITE_OK { 20707 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20708 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20709 *(*uintptr)(unsafe.Pointer(&struct { 20710 f func(*libc.TLS, uintptr, int32, uintptr) 20711 }{editDist3SqlFunc})), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{editDist3ConfigDelete}))) 20712 } else { 20713 sqlite3.Xsqlite3_free(tls, pConfig) 20714 } 20715 return rc 20716 } 20717 20718 var sqlite3Utf8Trans1 = [64]uint8{ 20719 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20720 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20721 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 20722 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 20723 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20724 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20725 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20726 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 20727 } 20728 20729 func utf8Read(tls *libc.TLS, z uintptr, n int32, pSize uintptr) int32 { 20730 var c int32 20731 var i int32 20732 20733 if 0 != 0 { 20734 c = libc.AssignInt32(&i, 0) 20735 } else { 20736 c = int32(*(*uint8)(unsafe.Pointer(z))) 20737 i = 1 20738 if c >= 0xc0 { 20739 c = int32(sqlite3Utf8Trans1[c-0xc0]) 20740 for i < n && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))&0xc0 == 0x80 { 20741 c = c<<6 + 0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1))))) 20742 } 20743 } 20744 } 20745 *(*int32)(unsafe.Pointer(pSize)) = i 20746 return c 20747 } 20748 20749 func utf8Charlen(tls *libc.TLS, zIn uintptr, nIn int32) int32 { 20750 bp := tls.Alloc(4) 20751 defer tls.Free(4) 20752 20753 var i int32 20754 var nChar int32 = 0 20755 for i = 0; i < nIn; nChar++ { 20756 utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 20757 i = i + *(*int32)(unsafe.Pointer(bp)) 20758 } 20759 return nChar 20760 } 20761 20762 type Transliteration1 = struct { 20763 FcFrom uint16 20764 FcTo0 uint8 20765 FcTo1 uint8 20766 FcTo2 uint8 20767 FcTo3 uint8 20768 } 20769 20770 type Transliteration = Transliteration1 20771 20772 var translit = [389]Transliteration{ 20773 {FcFrom: uint16(0x00A0), FcTo0: uint8(0x20)}, 20774 {FcFrom: uint16(0x00B5), FcTo0: uint8(0x75)}, 20775 {FcFrom: uint16(0x00C0), FcTo0: uint8(0x41)}, 20776 {FcFrom: uint16(0x00C1), FcTo0: uint8(0x41)}, 20777 {FcFrom: uint16(0x00C2), FcTo0: uint8(0x41)}, 20778 {FcFrom: uint16(0x00C3), FcTo0: uint8(0x41)}, 20779 {FcFrom: uint16(0x00C4), FcTo0: uint8(0x41), FcTo1: uint8(0x65)}, 20780 {FcFrom: uint16(0x00C5), FcTo0: uint8(0x41), FcTo1: uint8(0x61)}, 20781 {FcFrom: uint16(0x00C6), FcTo0: uint8(0x41), FcTo1: uint8(0x45)}, 20782 {FcFrom: uint16(0x00C7), FcTo0: uint8(0x43)}, 20783 {FcFrom: uint16(0x00C8), FcTo0: uint8(0x45)}, 20784 {FcFrom: uint16(0x00C9), FcTo0: uint8(0x45)}, 20785 {FcFrom: uint16(0x00CA), FcTo0: uint8(0x45)}, 20786 {FcFrom: uint16(0x00CB), FcTo0: uint8(0x45)}, 20787 {FcFrom: uint16(0x00CC), FcTo0: uint8(0x49)}, 20788 {FcFrom: uint16(0x00CD), FcTo0: uint8(0x49)}, 20789 {FcFrom: uint16(0x00CE), FcTo0: uint8(0x49)}, 20790 {FcFrom: uint16(0x00CF), FcTo0: uint8(0x49)}, 20791 {FcFrom: uint16(0x00D0), FcTo0: uint8(0x44)}, 20792 {FcFrom: uint16(0x00D1), FcTo0: uint8(0x4E)}, 20793 {FcFrom: uint16(0x00D2), FcTo0: uint8(0x4F)}, 20794 {FcFrom: uint16(0x00D3), FcTo0: uint8(0x4F)}, 20795 {FcFrom: uint16(0x00D4), FcTo0: uint8(0x4F)}, 20796 {FcFrom: uint16(0x00D5), FcTo0: uint8(0x4F)}, 20797 {FcFrom: uint16(0x00D6), FcTo0: uint8(0x4F), FcTo1: uint8(0x65)}, 20798 {FcFrom: uint16(0x00D7), FcTo0: uint8(0x78)}, 20799 {FcFrom: uint16(0x00D8), FcTo0: uint8(0x4F)}, 20800 {FcFrom: uint16(0x00D9), FcTo0: uint8(0x55)}, 20801 {FcFrom: uint16(0x00DA), FcTo0: uint8(0x55)}, 20802 {FcFrom: uint16(0x00DB), FcTo0: uint8(0x55)}, 20803 {FcFrom: uint16(0x00DC), FcTo0: uint8(0x55), FcTo1: uint8(0x65)}, 20804 {FcFrom: uint16(0x00DD), FcTo0: uint8(0x59)}, 20805 {FcFrom: uint16(0x00DE), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20806 {FcFrom: uint16(0x00DF), FcTo0: uint8(0x73), FcTo1: uint8(0x73)}, 20807 {FcFrom: uint16(0x00E0), FcTo0: uint8(0x61)}, 20808 {FcFrom: uint16(0x00E1), FcTo0: uint8(0x61)}, 20809 {FcFrom: uint16(0x00E2), FcTo0: uint8(0x61)}, 20810 {FcFrom: uint16(0x00E3), FcTo0: uint8(0x61)}, 20811 {FcFrom: uint16(0x00E4), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20812 {FcFrom: uint16(0x00E5), FcTo0: uint8(0x61), FcTo1: uint8(0x61)}, 20813 {FcFrom: uint16(0x00E6), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20814 {FcFrom: uint16(0x00E7), FcTo0: uint8(0x63)}, 20815 {FcFrom: uint16(0x00E8), FcTo0: uint8(0x65)}, 20816 {FcFrom: uint16(0x00E9), FcTo0: uint8(0x65)}, 20817 {FcFrom: uint16(0x00EA), FcTo0: uint8(0x65)}, 20818 {FcFrom: uint16(0x00EB), FcTo0: uint8(0x65)}, 20819 {FcFrom: uint16(0x00EC), FcTo0: uint8(0x69)}, 20820 {FcFrom: uint16(0x00ED), FcTo0: uint8(0x69)}, 20821 {FcFrom: uint16(0x00EE), FcTo0: uint8(0x69)}, 20822 {FcFrom: uint16(0x00EF), FcTo0: uint8(0x69)}, 20823 {FcFrom: uint16(0x00F0), FcTo0: uint8(0x64)}, 20824 {FcFrom: uint16(0x00F1), FcTo0: uint8(0x6E)}, 20825 {FcFrom: uint16(0x00F2), FcTo0: uint8(0x6F)}, 20826 {FcFrom: uint16(0x00F3), FcTo0: uint8(0x6F)}, 20827 {FcFrom: uint16(0x00F4), FcTo0: uint8(0x6F)}, 20828 {FcFrom: uint16(0x00F5), FcTo0: uint8(0x6F)}, 20829 {FcFrom: uint16(0x00F6), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20830 {FcFrom: uint16(0x00F7), FcTo0: uint8(0x3A)}, 20831 {FcFrom: uint16(0x00F8), FcTo0: uint8(0x6F)}, 20832 {FcFrom: uint16(0x00F9), FcTo0: uint8(0x75)}, 20833 {FcFrom: uint16(0x00FA), FcTo0: uint8(0x75)}, 20834 {FcFrom: uint16(0x00FB), FcTo0: uint8(0x75)}, 20835 {FcFrom: uint16(0x00FC), FcTo0: uint8(0x75), FcTo1: uint8(0x65)}, 20836 {FcFrom: uint16(0x00FD), FcTo0: uint8(0x79)}, 20837 {FcFrom: uint16(0x00FE), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 20838 {FcFrom: uint16(0x00FF), FcTo0: uint8(0x79)}, 20839 {FcFrom: uint16(0x0100), FcTo0: uint8(0x41)}, 20840 {FcFrom: uint16(0x0101), FcTo0: uint8(0x61)}, 20841 {FcFrom: uint16(0x0102), FcTo0: uint8(0x41)}, 20842 {FcFrom: uint16(0x0103), FcTo0: uint8(0x61)}, 20843 {FcFrom: uint16(0x0104), FcTo0: uint8(0x41)}, 20844 {FcFrom: uint16(0x0105), FcTo0: uint8(0x61)}, 20845 {FcFrom: uint16(0x0106), FcTo0: uint8(0x43)}, 20846 {FcFrom: uint16(0x0107), FcTo0: uint8(0x63)}, 20847 {FcFrom: uint16(0x0108), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20848 {FcFrom: uint16(0x0109), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20849 {FcFrom: uint16(0x010A), FcTo0: uint8(0x43)}, 20850 {FcFrom: uint16(0x010B), FcTo0: uint8(0x63)}, 20851 {FcFrom: uint16(0x010C), FcTo0: uint8(0x43)}, 20852 {FcFrom: uint16(0x010D), FcTo0: uint8(0x63)}, 20853 {FcFrom: uint16(0x010E), FcTo0: uint8(0x44)}, 20854 {FcFrom: uint16(0x010F), FcTo0: uint8(0x64)}, 20855 {FcFrom: uint16(0x0110), FcTo0: uint8(0x44)}, 20856 {FcFrom: uint16(0x0111), FcTo0: uint8(0x64)}, 20857 {FcFrom: uint16(0x0112), FcTo0: uint8(0x45)}, 20858 {FcFrom: uint16(0x0113), FcTo0: uint8(0x65)}, 20859 {FcFrom: uint16(0x0114), FcTo0: uint8(0x45)}, 20860 {FcFrom: uint16(0x0115), FcTo0: uint8(0x65)}, 20861 {FcFrom: uint16(0x0116), FcTo0: uint8(0x45)}, 20862 {FcFrom: uint16(0x0117), FcTo0: uint8(0x65)}, 20863 {FcFrom: uint16(0x0118), FcTo0: uint8(0x45)}, 20864 {FcFrom: uint16(0x0119), FcTo0: uint8(0x65)}, 20865 {FcFrom: uint16(0x011A), FcTo0: uint8(0x45)}, 20866 {FcFrom: uint16(0x011B), FcTo0: uint8(0x65)}, 20867 {FcFrom: uint16(0x011C), FcTo0: uint8(0x47), FcTo1: uint8(0x68)}, 20868 {FcFrom: uint16(0x011D), FcTo0: uint8(0x67), FcTo1: uint8(0x68)}, 20869 {FcFrom: uint16(0x011E), FcTo0: uint8(0x47)}, 20870 {FcFrom: uint16(0x011F), FcTo0: uint8(0x67)}, 20871 {FcFrom: uint16(0x0120), FcTo0: uint8(0x47)}, 20872 {FcFrom: uint16(0x0121), FcTo0: uint8(0x67)}, 20873 {FcFrom: uint16(0x0122), FcTo0: uint8(0x47)}, 20874 {FcFrom: uint16(0x0123), FcTo0: uint8(0x67)}, 20875 {FcFrom: uint16(0x0124), FcTo0: uint8(0x48), FcTo1: uint8(0x68)}, 20876 {FcFrom: uint16(0x0125), FcTo0: uint8(0x68), FcTo1: uint8(0x68)}, 20877 {FcFrom: uint16(0x0126), FcTo0: uint8(0x48)}, 20878 {FcFrom: uint16(0x0127), FcTo0: uint8(0x68)}, 20879 {FcFrom: uint16(0x0128), FcTo0: uint8(0x49)}, 20880 {FcFrom: uint16(0x0129), FcTo0: uint8(0x69)}, 20881 {FcFrom: uint16(0x012A), FcTo0: uint8(0x49)}, 20882 {FcFrom: uint16(0x012B), FcTo0: uint8(0x69)}, 20883 {FcFrom: uint16(0x012C), FcTo0: uint8(0x49)}, 20884 {FcFrom: uint16(0x012D), FcTo0: uint8(0x69)}, 20885 {FcFrom: uint16(0x012E), FcTo0: uint8(0x49)}, 20886 {FcFrom: uint16(0x012F), FcTo0: uint8(0x69)}, 20887 {FcFrom: uint16(0x0130), FcTo0: uint8(0x49)}, 20888 {FcFrom: uint16(0x0131), FcTo0: uint8(0x69)}, 20889 {FcFrom: uint16(0x0132), FcTo0: uint8(0x49), FcTo1: uint8(0x4A)}, 20890 {FcFrom: uint16(0x0133), FcTo0: uint8(0x69), FcTo1: uint8(0x6A)}, 20891 {FcFrom: uint16(0x0134), FcTo0: uint8(0x4A), FcTo1: uint8(0x68)}, 20892 {FcFrom: uint16(0x0135), FcTo0: uint8(0x6A), FcTo1: uint8(0x68)}, 20893 {FcFrom: uint16(0x0136), FcTo0: uint8(0x4B)}, 20894 {FcFrom: uint16(0x0137), FcTo0: uint8(0x6B)}, 20895 {FcFrom: uint16(0x0138), FcTo0: uint8(0x6B)}, 20896 {FcFrom: uint16(0x0139), FcTo0: uint8(0x4C)}, 20897 {FcFrom: uint16(0x013A), FcTo0: uint8(0x6C)}, 20898 {FcFrom: uint16(0x013B), FcTo0: uint8(0x4C)}, 20899 {FcFrom: uint16(0x013C), FcTo0: uint8(0x6C)}, 20900 {FcFrom: uint16(0x013D), FcTo0: uint8(0x4C)}, 20901 {FcFrom: uint16(0x013E), FcTo0: uint8(0x6C)}, 20902 {FcFrom: uint16(0x013F), FcTo0: uint8(0x4C), FcTo1: uint8(0x2E)}, 20903 {FcFrom: uint16(0x0140), FcTo0: uint8(0x6C), FcTo1: uint8(0x2E)}, 20904 {FcFrom: uint16(0x0141), FcTo0: uint8(0x4C)}, 20905 {FcFrom: uint16(0x0142), FcTo0: uint8(0x6C)}, 20906 {FcFrom: uint16(0x0143), FcTo0: uint8(0x4E)}, 20907 {FcFrom: uint16(0x0144), FcTo0: uint8(0x6E)}, 20908 {FcFrom: uint16(0x0145), FcTo0: uint8(0x4E)}, 20909 {FcFrom: uint16(0x0146), FcTo0: uint8(0x6E)}, 20910 {FcFrom: uint16(0x0147), FcTo0: uint8(0x4E)}, 20911 {FcFrom: uint16(0x0148), FcTo0: uint8(0x6E)}, 20912 {FcFrom: uint16(0x0149), FcTo0: uint8(0x27), FcTo1: uint8(0x6E)}, 20913 {FcFrom: uint16(0x014A), FcTo0: uint8(0x4E), FcTo1: uint8(0x47)}, 20914 {FcFrom: uint16(0x014B), FcTo0: uint8(0x6E), FcTo1: uint8(0x67)}, 20915 {FcFrom: uint16(0x014C), FcTo0: uint8(0x4F)}, 20916 {FcFrom: uint16(0x014D), FcTo0: uint8(0x6F)}, 20917 {FcFrom: uint16(0x014E), FcTo0: uint8(0x4F)}, 20918 {FcFrom: uint16(0x014F), FcTo0: uint8(0x6F)}, 20919 {FcFrom: uint16(0x0150), FcTo0: uint8(0x4F)}, 20920 {FcFrom: uint16(0x0151), FcTo0: uint8(0x6F)}, 20921 {FcFrom: uint16(0x0152), FcTo0: uint8(0x4F), FcTo1: uint8(0x45)}, 20922 {FcFrom: uint16(0x0153), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20923 {FcFrom: uint16(0x0154), FcTo0: uint8(0x52)}, 20924 {FcFrom: uint16(0x0155), FcTo0: uint8(0x72)}, 20925 {FcFrom: uint16(0x0156), FcTo0: uint8(0x52)}, 20926 {FcFrom: uint16(0x0157), FcTo0: uint8(0x72)}, 20927 {FcFrom: uint16(0x0158), FcTo0: uint8(0x52)}, 20928 {FcFrom: uint16(0x0159), FcTo0: uint8(0x72)}, 20929 {FcFrom: uint16(0x015A), FcTo0: uint8(0x53)}, 20930 {FcFrom: uint16(0x015B), FcTo0: uint8(0x73)}, 20931 {FcFrom: uint16(0x015C), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 20932 {FcFrom: uint16(0x015D), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 20933 {FcFrom: uint16(0x015E), FcTo0: uint8(0x53)}, 20934 {FcFrom: uint16(0x015F), FcTo0: uint8(0x73)}, 20935 {FcFrom: uint16(0x0160), FcTo0: uint8(0x53)}, 20936 {FcFrom: uint16(0x0161), FcTo0: uint8(0x73)}, 20937 {FcFrom: uint16(0x0162), FcTo0: uint8(0x54)}, 20938 {FcFrom: uint16(0x0163), FcTo0: uint8(0x74)}, 20939 {FcFrom: uint16(0x0164), FcTo0: uint8(0x54)}, 20940 {FcFrom: uint16(0x0165), FcTo0: uint8(0x74)}, 20941 {FcFrom: uint16(0x0166), FcTo0: uint8(0x54)}, 20942 {FcFrom: uint16(0x0167), FcTo0: uint8(0x74)}, 20943 {FcFrom: uint16(0x0168), FcTo0: uint8(0x55)}, 20944 {FcFrom: uint16(0x0169), FcTo0: uint8(0x75)}, 20945 {FcFrom: uint16(0x016A), FcTo0: uint8(0x55)}, 20946 {FcFrom: uint16(0x016B), FcTo0: uint8(0x75)}, 20947 {FcFrom: uint16(0x016C), FcTo0: uint8(0x55)}, 20948 {FcFrom: uint16(0x016D), FcTo0: uint8(0x75)}, 20949 {FcFrom: uint16(0x016E), FcTo0: uint8(0x55)}, 20950 {FcFrom: uint16(0x016F), FcTo0: uint8(0x75)}, 20951 {FcFrom: uint16(0x0170), FcTo0: uint8(0x55)}, 20952 {FcFrom: uint16(0x0171), FcTo0: uint8(0x75)}, 20953 {FcFrom: uint16(0x0172), FcTo0: uint8(0x55)}, 20954 {FcFrom: uint16(0x0173), FcTo0: uint8(0x75)}, 20955 {FcFrom: uint16(0x0174), FcTo0: uint8(0x57)}, 20956 {FcFrom: uint16(0x0175), FcTo0: uint8(0x77)}, 20957 {FcFrom: uint16(0x0176), FcTo0: uint8(0x59)}, 20958 {FcFrom: uint16(0x0177), FcTo0: uint8(0x79)}, 20959 {FcFrom: uint16(0x0178), FcTo0: uint8(0x59)}, 20960 {FcFrom: uint16(0x0179), FcTo0: uint8(0x5A)}, 20961 {FcFrom: uint16(0x017A), FcTo0: uint8(0x7A)}, 20962 {FcFrom: uint16(0x017B), FcTo0: uint8(0x5A)}, 20963 {FcFrom: uint16(0x017C), FcTo0: uint8(0x7A)}, 20964 {FcFrom: uint16(0x017D), FcTo0: uint8(0x5A)}, 20965 {FcFrom: uint16(0x017E), FcTo0: uint8(0x7A)}, 20966 {FcFrom: uint16(0x017F), FcTo0: uint8(0x73)}, 20967 {FcFrom: uint16(0x0192), FcTo0: uint8(0x66)}, 20968 {FcFrom: uint16(0x0218), FcTo0: uint8(0x53)}, 20969 {FcFrom: uint16(0x0219), FcTo0: uint8(0x73)}, 20970 {FcFrom: uint16(0x021A), FcTo0: uint8(0x54)}, 20971 {FcFrom: uint16(0x021B), FcTo0: uint8(0x74)}, 20972 {FcFrom: uint16(0x0386), FcTo0: uint8(0x41)}, 20973 {FcFrom: uint16(0x0388), FcTo0: uint8(0x45)}, 20974 {FcFrom: uint16(0x0389), FcTo0: uint8(0x49)}, 20975 {FcFrom: uint16(0x038A), FcTo0: uint8(0x49)}, 20976 {FcFrom: uint16(0x038C), FcTo0: uint8(0x4f)}, 20977 {FcFrom: uint16(0x038E), FcTo0: uint8(0x59)}, 20978 {FcFrom: uint16(0x038F), FcTo0: uint8(0x4f)}, 20979 {FcFrom: uint16(0x0390), FcTo0: uint8(0x69)}, 20980 {FcFrom: uint16(0x0391), FcTo0: uint8(0x41)}, 20981 {FcFrom: uint16(0x0392), FcTo0: uint8(0x42)}, 20982 {FcFrom: uint16(0x0393), FcTo0: uint8(0x47)}, 20983 {FcFrom: uint16(0x0394), FcTo0: uint8(0x44)}, 20984 {FcFrom: uint16(0x0395), FcTo0: uint8(0x45)}, 20985 {FcFrom: uint16(0x0396), FcTo0: uint8(0x5a)}, 20986 {FcFrom: uint16(0x0397), FcTo0: uint8(0x49)}, 20987 {FcFrom: uint16(0x0398), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20988 {FcFrom: uint16(0x0399), FcTo0: uint8(0x49)}, 20989 {FcFrom: uint16(0x039A), FcTo0: uint8(0x4b)}, 20990 {FcFrom: uint16(0x039B), FcTo0: uint8(0x4c)}, 20991 {FcFrom: uint16(0x039C), FcTo0: uint8(0x4d)}, 20992 {FcFrom: uint16(0x039D), FcTo0: uint8(0x4e)}, 20993 {FcFrom: uint16(0x039E), FcTo0: uint8(0x58)}, 20994 {FcFrom: uint16(0x039F), FcTo0: uint8(0x4f)}, 20995 {FcFrom: uint16(0x03A0), FcTo0: uint8(0x50)}, 20996 {FcFrom: uint16(0x03A1), FcTo0: uint8(0x52)}, 20997 {FcFrom: uint16(0x03A3), FcTo0: uint8(0x53)}, 20998 {FcFrom: uint16(0x03A4), FcTo0: uint8(0x54)}, 20999 {FcFrom: uint16(0x03A5), FcTo0: uint8(0x59)}, 21000 {FcFrom: uint16(0x03A6), FcTo0: uint8(0x46)}, 21001 {FcFrom: uint16(0x03A7), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 21002 {FcFrom: uint16(0x03A8), FcTo0: uint8(0x50), FcTo1: uint8(0x73)}, 21003 {FcFrom: uint16(0x03A9), FcTo0: uint8(0x4f)}, 21004 {FcFrom: uint16(0x03AA), FcTo0: uint8(0x49)}, 21005 {FcFrom: uint16(0x03AB), FcTo0: uint8(0x59)}, 21006 {FcFrom: uint16(0x03AC), FcTo0: uint8(0x61)}, 21007 {FcFrom: uint16(0x03AD), FcTo0: uint8(0x65)}, 21008 {FcFrom: uint16(0x03AE), FcTo0: uint8(0x69)}, 21009 {FcFrom: uint16(0x03AF), FcTo0: uint8(0x69)}, 21010 {FcFrom: uint16(0x03B1), FcTo0: uint8(0x61)}, 21011 {FcFrom: uint16(0x03B2), FcTo0: uint8(0x62)}, 21012 {FcFrom: uint16(0x03B3), FcTo0: uint8(0x67)}, 21013 {FcFrom: uint16(0x03B4), FcTo0: uint8(0x64)}, 21014 {FcFrom: uint16(0x03B5), FcTo0: uint8(0x65)}, 21015 {FcFrom: uint16(0x03B6), FcTo0: uint8(0x7a)}, 21016 {FcFrom: uint16(0x03B7), FcTo0: uint8(0x69)}, 21017 {FcFrom: uint16(0x03B8), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 21018 {FcFrom: uint16(0x03B9), FcTo0: uint8(0x69)}, 21019 {FcFrom: uint16(0x03BA), FcTo0: uint8(0x6b)}, 21020 {FcFrom: uint16(0x03BB), FcTo0: uint8(0x6c)}, 21021 {FcFrom: uint16(0x03BC), FcTo0: uint8(0x6d)}, 21022 {FcFrom: uint16(0x03BD), FcTo0: uint8(0x6e)}, 21023 {FcFrom: uint16(0x03BE), FcTo0: uint8(0x78)}, 21024 {FcFrom: uint16(0x03BF), FcTo0: uint8(0x6f)}, 21025 {FcFrom: uint16(0x03C0), FcTo0: uint8(0x70)}, 21026 {FcFrom: uint16(0x03C1), FcTo0: uint8(0x72)}, 21027 {FcFrom: uint16(0x03C3), FcTo0: uint8(0x73)}, 21028 {FcFrom: uint16(0x03C4), FcTo0: uint8(0x74)}, 21029 {FcFrom: uint16(0x03C5), FcTo0: uint8(0x79)}, 21030 {FcFrom: uint16(0x03C6), FcTo0: uint8(0x66)}, 21031 {FcFrom: uint16(0x03C7), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 21032 {FcFrom: uint16(0x03C8), FcTo0: uint8(0x70), FcTo1: uint8(0x73)}, 21033 {FcFrom: uint16(0x03C9), FcTo0: uint8(0x6f)}, 21034 {FcFrom: uint16(0x03CA), FcTo0: uint8(0x69)}, 21035 {FcFrom: uint16(0x03CB), FcTo0: uint8(0x79)}, 21036 {FcFrom: uint16(0x03CC), FcTo0: uint8(0x6f)}, 21037 {FcFrom: uint16(0x03CD), FcTo0: uint8(0x79)}, 21038 {FcFrom: uint16(0x03CE), FcTo0: uint8(0x69)}, 21039 {FcFrom: uint16(0x0400), FcTo0: uint8(0x45)}, 21040 {FcFrom: uint16(0x0401), FcTo0: uint8(0x45)}, 21041 {FcFrom: uint16(0x0402), FcTo0: uint8(0x44)}, 21042 {FcFrom: uint16(0x0403), FcTo0: uint8(0x47)}, 21043 {FcFrom: uint16(0x0404), FcTo0: uint8(0x45)}, 21044 {FcFrom: uint16(0x0405), FcTo0: uint8(0x5a)}, 21045 {FcFrom: uint16(0x0406), FcTo0: uint8(0x49)}, 21046 {FcFrom: uint16(0x0407), FcTo0: uint8(0x49)}, 21047 {FcFrom: uint16(0x0408), FcTo0: uint8(0x4a)}, 21048 {FcFrom: uint16(0x0409), FcTo0: uint8(0x49)}, 21049 {FcFrom: uint16(0x040A), FcTo0: uint8(0x4e)}, 21050 {FcFrom: uint16(0x040B), FcTo0: uint8(0x44)}, 21051 {FcFrom: uint16(0x040C), FcTo0: uint8(0x4b)}, 21052 {FcFrom: uint16(0x040D), FcTo0: uint8(0x49)}, 21053 {FcFrom: uint16(0x040E), FcTo0: uint8(0x55)}, 21054 {FcFrom: uint16(0x040F), FcTo0: uint8(0x44)}, 21055 {FcFrom: uint16(0x0410), FcTo0: uint8(0x41)}, 21056 {FcFrom: uint16(0x0411), FcTo0: uint8(0x42)}, 21057 {FcFrom: uint16(0x0412), FcTo0: uint8(0x56)}, 21058 {FcFrom: uint16(0x0413), FcTo0: uint8(0x47)}, 21059 {FcFrom: uint16(0x0414), FcTo0: uint8(0x44)}, 21060 {FcFrom: uint16(0x0415), FcTo0: uint8(0x45)}, 21061 {FcFrom: uint16(0x0416), FcTo0: uint8(0x5a), FcTo1: uint8(0x68)}, 21062 {FcFrom: uint16(0x0417), FcTo0: uint8(0x5a)}, 21063 {FcFrom: uint16(0x0418), FcTo0: uint8(0x49)}, 21064 {FcFrom: uint16(0x0419), FcTo0: uint8(0x49)}, 21065 {FcFrom: uint16(0x041A), FcTo0: uint8(0x4b)}, 21066 {FcFrom: uint16(0x041B), FcTo0: uint8(0x4c)}, 21067 {FcFrom: uint16(0x041C), FcTo0: uint8(0x4d)}, 21068 {FcFrom: uint16(0x041D), FcTo0: uint8(0x4e)}, 21069 {FcFrom: uint16(0x041E), FcTo0: uint8(0x4f)}, 21070 {FcFrom: uint16(0x041F), FcTo0: uint8(0x50)}, 21071 {FcFrom: uint16(0x0420), FcTo0: uint8(0x52)}, 21072 {FcFrom: uint16(0x0421), FcTo0: uint8(0x53)}, 21073 {FcFrom: uint16(0x0422), FcTo0: uint8(0x54)}, 21074 {FcFrom: uint16(0x0423), FcTo0: uint8(0x55)}, 21075 {FcFrom: uint16(0x0424), FcTo0: uint8(0x46)}, 21076 {FcFrom: uint16(0x0425), FcTo0: uint8(0x4b), FcTo1: uint8(0x68)}, 21077 {FcFrom: uint16(0x0426), FcTo0: uint8(0x54), FcTo1: uint8(0x63)}, 21078 {FcFrom: uint16(0x0427), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 21079 {FcFrom: uint16(0x0428), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 21080 {FcFrom: uint16(0x0429), FcTo0: uint8(0x53), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 21081 {FcFrom: uint16(0x042A), FcTo0: uint8(0x61)}, 21082 {FcFrom: uint16(0x042B), FcTo0: uint8(0x59)}, 21083 {FcFrom: uint16(0x042C), FcTo0: uint8(0x59)}, 21084 {FcFrom: uint16(0x042D), FcTo0: uint8(0x45)}, 21085 {FcFrom: uint16(0x042E), FcTo0: uint8(0x49), FcTo1: uint8(0x75)}, 21086 {FcFrom: uint16(0x042F), FcTo0: uint8(0x49), FcTo1: uint8(0x61)}, 21087 {FcFrom: uint16(0x0430), FcTo0: uint8(0x61)}, 21088 {FcFrom: uint16(0x0431), FcTo0: uint8(0x62)}, 21089 {FcFrom: uint16(0x0432), FcTo0: uint8(0x76)}, 21090 {FcFrom: uint16(0x0433), FcTo0: uint8(0x67)}, 21091 {FcFrom: uint16(0x0434), FcTo0: uint8(0x64)}, 21092 {FcFrom: uint16(0x0435), FcTo0: uint8(0x65)}, 21093 {FcFrom: uint16(0x0436), FcTo0: uint8(0x7a), FcTo1: uint8(0x68)}, 21094 {FcFrom: uint16(0x0437), FcTo0: uint8(0x7a)}, 21095 {FcFrom: uint16(0x0438), FcTo0: uint8(0x69)}, 21096 {FcFrom: uint16(0x0439), FcTo0: uint8(0x69)}, 21097 {FcFrom: uint16(0x043A), FcTo0: uint8(0x6b)}, 21098 {FcFrom: uint16(0x043B), FcTo0: uint8(0x6c)}, 21099 {FcFrom: uint16(0x043C), FcTo0: uint8(0x6d)}, 21100 {FcFrom: uint16(0x043D), FcTo0: uint8(0x6e)}, 21101 {FcFrom: uint16(0x043E), FcTo0: uint8(0x6f)}, 21102 {FcFrom: uint16(0x043F), FcTo0: uint8(0x70)}, 21103 {FcFrom: uint16(0x0440), FcTo0: uint8(0x72)}, 21104 {FcFrom: uint16(0x0441), FcTo0: uint8(0x73)}, 21105 {FcFrom: uint16(0x0442), FcTo0: uint8(0x74)}, 21106 {FcFrom: uint16(0x0443), FcTo0: uint8(0x75)}, 21107 {FcFrom: uint16(0x0444), FcTo0: uint8(0x66)}, 21108 {FcFrom: uint16(0x0445), FcTo0: uint8(0x6b), FcTo1: uint8(0x68)}, 21109 {FcFrom: uint16(0x0446), FcTo0: uint8(0x74), FcTo1: uint8(0x63)}, 21110 {FcFrom: uint16(0x0447), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 21111 {FcFrom: uint16(0x0448), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 21112 {FcFrom: uint16(0x0449), FcTo0: uint8(0x73), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 21113 {FcFrom: uint16(0x044A), FcTo0: uint8(0x61)}, 21114 {FcFrom: uint16(0x044B), FcTo0: uint8(0x79)}, 21115 {FcFrom: uint16(0x044C), FcTo0: uint8(0x79)}, 21116 {FcFrom: uint16(0x044D), FcTo0: uint8(0x65)}, 21117 {FcFrom: uint16(0x044E), FcTo0: uint8(0x69), FcTo1: uint8(0x75)}, 21118 {FcFrom: uint16(0x044F), FcTo0: uint8(0x69), FcTo1: uint8(0x61)}, 21119 {FcFrom: uint16(0x0450), FcTo0: uint8(0x65)}, 21120 {FcFrom: uint16(0x0451), FcTo0: uint8(0x65)}, 21121 {FcFrom: uint16(0x0452), FcTo0: uint8(0x64)}, 21122 {FcFrom: uint16(0x0453), FcTo0: uint8(0x67)}, 21123 {FcFrom: uint16(0x0454), FcTo0: uint8(0x65)}, 21124 {FcFrom: uint16(0x0455), FcTo0: uint8(0x7a)}, 21125 {FcFrom: uint16(0x0456), FcTo0: uint8(0x69)}, 21126 {FcFrom: uint16(0x0457), FcTo0: uint8(0x69)}, 21127 {FcFrom: uint16(0x0458), FcTo0: uint8(0x6a)}, 21128 {FcFrom: uint16(0x0459), FcTo0: uint8(0x69)}, 21129 {FcFrom: uint16(0x045A), FcTo0: uint8(0x6e)}, 21130 {FcFrom: uint16(0x045B), FcTo0: uint8(0x64)}, 21131 {FcFrom: uint16(0x045C), FcTo0: uint8(0x6b)}, 21132 {FcFrom: uint16(0x045D), FcTo0: uint8(0x69)}, 21133 {FcFrom: uint16(0x045E), FcTo0: uint8(0x75)}, 21134 {FcFrom: uint16(0x045F), FcTo0: uint8(0x64)}, 21135 {FcFrom: uint16(0x1E02), FcTo0: uint8(0x42)}, 21136 {FcFrom: uint16(0x1E03), FcTo0: uint8(0x62)}, 21137 {FcFrom: uint16(0x1E0A), FcTo0: uint8(0x44)}, 21138 {FcFrom: uint16(0x1E0B), FcTo0: uint8(0x64)}, 21139 {FcFrom: uint16(0x1E1E), FcTo0: uint8(0x46)}, 21140 {FcFrom: uint16(0x1E1F), FcTo0: uint8(0x66)}, 21141 {FcFrom: uint16(0x1E40), FcTo0: uint8(0x4D)}, 21142 {FcFrom: uint16(0x1E41), FcTo0: uint8(0x6D)}, 21143 {FcFrom: uint16(0x1E56), FcTo0: uint8(0x50)}, 21144 {FcFrom: uint16(0x1E57), FcTo0: uint8(0x70)}, 21145 {FcFrom: uint16(0x1E60), FcTo0: uint8(0x53)}, 21146 {FcFrom: uint16(0x1E61), FcTo0: uint8(0x73)}, 21147 {FcFrom: uint16(0x1E6A), FcTo0: uint8(0x54)}, 21148 {FcFrom: uint16(0x1E6B), FcTo0: uint8(0x74)}, 21149 {FcFrom: uint16(0x1E80), FcTo0: uint8(0x57)}, 21150 {FcFrom: uint16(0x1E81), FcTo0: uint8(0x77)}, 21151 {FcFrom: uint16(0x1E82), FcTo0: uint8(0x57)}, 21152 {FcFrom: uint16(0x1E83), FcTo0: uint8(0x77)}, 21153 {FcFrom: uint16(0x1E84), FcTo0: uint8(0x57)}, 21154 {FcFrom: uint16(0x1E85), FcTo0: uint8(0x77)}, 21155 {FcFrom: uint16(0x1EF2), FcTo0: uint8(0x59)}, 21156 {FcFrom: uint16(0x1EF3), FcTo0: uint8(0x79)}, 21157 {FcFrom: uint16(0xFB00), FcTo0: uint8(0x66), FcTo1: uint8(0x66)}, 21158 {FcFrom: uint16(0xFB01), FcTo0: uint8(0x66), FcTo1: uint8(0x69)}, 21159 {FcFrom: uint16(0xFB02), FcTo0: uint8(0x66), FcTo1: uint8(0x6C)}, 21160 {FcFrom: uint16(0xFB05), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 21161 {FcFrom: uint16(0xFB06), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 21162 } 21163 21164 func spellfixFindTranslit(tls *libc.TLS, c int32, pxTop uintptr) uintptr { 21165 *(*int32)(unsafe.Pointer(pxTop)) = int32(uint32(unsafe.Sizeof(translit))/uint32(unsafe.Sizeof(Transliteration{})) - uint32(1)) 21166 return uintptr(unsafe.Pointer(&translit)) 21167 } 21168 21169 func transliterate(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 21170 bp := tls.Alloc(8) 21171 defer tls.Free(8) 21172 21173 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn*4+1)) 21174 var c int32 21175 21176 var nOut int32 21177 if zOut == uintptr(0) { 21178 return uintptr(0) 21179 } 21180 nOut = 0 21181 for nIn > 0 { 21182 c = utf8Read(tls, zIn, nIn, bp) 21183 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 21184 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 21185 if c <= 127 { 21186 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8(c) 21187 } else { 21188 var xBtm int32 21189 var x int32 21190 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 21191 xBtm = 0 21192 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 21193 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 21194 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 21195 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo0 21196 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 21197 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo1 21198 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 21199 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo2 21200 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 21201 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo3 21202 } 21203 } 21204 } 21205 c = 0 21206 break 21207 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 21208 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 21209 } else { 21210 xBtm = x + 1 21211 } 21212 } 21213 if c != 0 { 21214 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8('?') 21215 } 21216 } 21217 } 21218 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 21219 return zOut 21220 } 21221 21222 func translen_to_charlen(tls *libc.TLS, zIn uintptr, nIn int32, nTrans int32) int32 { 21223 bp := tls.Alloc(8) 21224 defer tls.Free(8) 21225 21226 var i int32 21227 var c int32 21228 21229 var nOut int32 21230 var nChar int32 21231 21232 i = libc.AssignInt32(&nOut, 0) 21233 for nChar = 0; i < nIn && nOut < nTrans; nChar++ { 21234 c = utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 21235 i = i + *(*int32)(unsafe.Pointer(bp)) 21236 21237 nOut++ 21238 if c >= 128 { 21239 var xBtm int32 21240 var x int32 21241 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 21242 xBtm = 0 21243 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 21244 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 21245 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 21246 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 21247 nOut++ 21248 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 21249 nOut++ 21250 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 21251 nOut++ 21252 } 21253 } 21254 } 21255 break 21256 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 21257 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 21258 } else { 21259 xBtm = x + 1 21260 } 21261 } 21262 } 21263 } 21264 21265 return nChar 21266 } 21267 21268 func transliterateSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21269 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21270 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21271 var zOut uintptr = transliterate(tls, zIn, nIn) 21272 if zOut == uintptr(0) { 21273 sqlite3.Xsqlite3_result_error_nomem(tls, context) 21274 } else { 21275 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 21276 } 21277 } 21278 21279 func scriptCodeSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21280 bp := tls.Alloc(4) 21281 defer tls.Free(4) 21282 21283 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21284 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21285 var c int32 21286 21287 var scriptMask int32 = 0 21288 var res int32 21289 var seenDigit int32 = 0 21290 21291 for nIn > 0 { 21292 c = utf8Read(tls, zIn, nIn, bp) 21293 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 21294 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 21295 if c < 0x02af { 21296 if c >= 0x80 || int32(midClass[c&0x7f]) < CCLASS_DIGIT { 21297 scriptMask = scriptMask | SCRIPT_LATIN 21298 } else if c >= '0' && c <= '9' { 21299 seenDigit = 1 21300 } 21301 } else if c >= 0x0400 && c <= 0x04ff { 21302 scriptMask = scriptMask | SCRIPT_CYRILLIC 21303 } else if c >= 0x0386 && c <= 0x03ce { 21304 scriptMask = scriptMask | SCRIPT_GREEK 21305 } else if c >= 0x0590 && c <= 0x05ff { 21306 scriptMask = scriptMask | SCRIPT_HEBREW 21307 } else if c >= 0x0600 && c <= 0x06ff { 21308 scriptMask = scriptMask | SCRIPT_ARABIC 21309 } 21310 } 21311 if scriptMask == 0 && seenDigit != 0 { 21312 scriptMask = SCRIPT_LATIN 21313 } 21314 switch scriptMask { 21315 case 0: 21316 res = 999 21317 break 21318 case SCRIPT_LATIN: 21319 res = 215 21320 break 21321 case SCRIPT_CYRILLIC: 21322 res = 220 21323 break 21324 case SCRIPT_GREEK: 21325 res = 200 21326 break 21327 case SCRIPT_HEBREW: 21328 res = 125 21329 break 21330 case SCRIPT_ARABIC: 21331 res = 160 21332 break 21333 default: 21334 res = 998 21335 break 21336 } 21337 sqlite3.Xsqlite3_result_int(tls, context, res) 21338 } 21339 21340 type spellfix1_vtab1 = struct { 21341 Fbase sqlite3_vtab 21342 Fdb uintptr 21343 FzDbName uintptr 21344 FzTableName uintptr 21345 FzCostTable uintptr 21346 FpConfig3 uintptr 21347 } 21348 21349 type spellfix1_vtab = spellfix1_vtab1 21350 type spellfix1_cursor1 = struct { 21351 Fbase sqlite3_vtab_cursor 21352 FpVTab uintptr 21353 FzPattern uintptr 21354 FidxNum int32 21355 FnRow int32 21356 FnAlloc int32 21357 FiRow int32 21358 FiLang int32 21359 FiTop int32 21360 FiScope int32 21361 FnSearch int32 21362 FpFullScan uintptr 21363 Fa uintptr 21364 } 21365 21366 type spellfix1_cursor = spellfix1_cursor1 21367 21368 type spellfix1_row = struct { 21369 FiRowid sqlite3_int64 21370 FzWord uintptr 21371 FiRank int32 21372 FiDistance int32 21373 FiScore int32 21374 FiMatchlen int32 21375 FzHash [32]int8 21376 } 21377 21378 func spellfix1DbExec(tls *libc.TLS, pRc uintptr, db uintptr, zFormat uintptr, va uintptr) { 21379 var ap va_list 21380 _ = ap 21381 var zSql uintptr 21382 if *(*int32)(unsafe.Pointer(pRc)) != 0 { 21383 return 21384 } 21385 ap = va 21386 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap) 21387 _ = ap 21388 if zSql == uintptr(0) { 21389 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 21390 } else { 21391 *(*int32)(unsafe.Pointer(pRc)) = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 21392 sqlite3.Xsqlite3_free(tls, zSql) 21393 } 21394 } 21395 21396 func spellfix1Uninit(tls *libc.TLS, isDestroy int32, pVTab uintptr) int32 { 21397 bp := tls.Alloc(20) 21398 defer tls.Free(20) 21399 21400 var p uintptr = pVTab 21401 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 21402 if isDestroy != 0 { 21403 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 21404 spellfix1DbExec(tls, bp+16, db, ts+7189, 21405 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 21406 } 21407 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 21408 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 21409 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 21410 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21411 sqlite3.Xsqlite3_free(tls, p) 21412 } 21413 return *(*int32)(unsafe.Pointer(bp + 16)) 21414 } 21415 21416 func spellfix1Disconnect(tls *libc.TLS, pVTab uintptr) int32 { 21417 return spellfix1Uninit(tls, 0, pVTab) 21418 } 21419 21420 func spellfix1Destroy(tls *libc.TLS, pVTab uintptr) int32 { 21421 return spellfix1Uninit(tls, 1, pVTab) 21422 } 21423 21424 func spellfix1Dequote(tls *libc.TLS, zIn uintptr) uintptr { 21425 bp := tls.Alloc(8) 21426 defer tls.Free(8) 21427 21428 var zOut uintptr 21429 var i int32 21430 var j int32 21431 var c int8 21432 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zIn)))))*2)))&int32(_ISspace) != 0 { 21433 zIn++ 21434 } 21435 zOut = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zIn)) 21436 if zOut == uintptr(0) { 21437 return uintptr(0) 21438 } 21439 i = int32(libc.Xstrlen(tls, zOut)) 21440 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = int8(0) 21441 c = *(*int8)(unsafe.Pointer(zOut)) 21442 if int32(c) == '\'' || int32(c) == '"' { 21443 i = 1 21444 j = 0 21445 for ; 1 != 0; i++ { 21446 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zOut + uintptr(i))) 21447 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i)))) == int32(c) { 21448 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i+1)))) == int32(c) { 21449 i++ 21450 } else { 21451 *(*int8)(unsafe.Pointer(zOut + uintptr(j-1))) = int8(0) 21452 break 21453 } 21454 } 21455 } 21456 } 21457 return zOut 21458 } 21459 21460 func spellfix1Init(tls *libc.TLS, isCreate int32, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21461 bp := tls.Alloc(60) 21462 defer tls.Free(60) 21463 21464 var pNew uintptr = uintptr(0) 21465 21466 var zDbName uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*4)) 21467 var zTableName uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*4)) 21468 var nDbName int32 21469 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_OK 21470 var i int32 21471 21472 nDbName = int32(libc.Xstrlen(tls, zDbName)) 21473 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(spellfix1_vtab{}))+uint32(nDbName)+uint32(1))) 21474 if pNew == uintptr(0) { 21475 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21476 } else { 21477 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(spellfix1_vtab{}))) 21478 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName = pNew + 1*32 21479 libc.Xmemcpy(tls, (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName, zDbName, uint32(nDbName+1)) 21480 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 21481 (*spellfix1_vtab)(unsafe.Pointer(pNew)).Fdb = db 21482 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0) { 21483 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21484 } else { 21485 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 21486 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_declare_vtab(tls, db, 21487 ts+7226) 21488 } 21489 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && isCreate != 0 { 21490 spellfix1DbExec(tls, bp+56, db, 21491 ts+7380, 21492 libc.VaList(bp+8, zDbName, zTableName)) 21493 spellfix1DbExec(tls, bp+56, db, 21494 ts+7514, 21495 libc.VaList(bp+24, zDbName, zTableName, zTableName)) 21496 } 21497 for i = 3; *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && i < argc; i++ { 21498 if libc.Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), ts+7599, uint32(16)) == 0 && (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 21499 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable = spellfix1Dequote(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))+16) 21500 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 21501 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21502 } 21503 continue 21504 } 21505 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+7616, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)))) 21506 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_ERROR 21507 } 21508 } 21509 21510 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 && pNew != 0 { 21511 *(*uintptr)(unsafe.Pointer(ppVTab)) = uintptr(0) 21512 spellfix1Uninit(tls, 0, pNew) 21513 } else { 21514 *(*uintptr)(unsafe.Pointer(ppVTab)) = pNew 21515 } 21516 return *(*int32)(unsafe.Pointer(bp + 56)) 21517 } 21518 21519 func spellfix1Connect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21520 return spellfix1Init(tls, 0, db, pAux, argc, argv, ppVTab, pzErr) 21521 } 21522 21523 func spellfix1Create(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21524 return spellfix1Init(tls, 1, db, pAux, argc, argv, ppVTab, pzErr) 21525 } 21526 21527 func spellfix1ResetCursor(tls *libc.TLS, pCur uintptr) { 21528 var i int32 21529 for i = 0; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21530 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(i)*60)).FzWord) 21531 } 21532 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = 0 21533 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 21534 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch = 0 21535 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21536 sqlite3.Xsqlite3_finalize(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21537 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan = uintptr(0) 21538 } 21539 } 21540 21541 func spellfix1ResizeCursor(tls *libc.TLS, pCur uintptr, N int32) { 21542 var aNew uintptr 21543 21544 aNew = sqlite3.Xsqlite3_realloc64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64(uint32(unsafe.Sizeof(spellfix1_row{}))*uint32(N))) 21545 if aNew == uintptr(0) && N > 0 { 21546 spellfix1ResetCursor(tls, pCur) 21547 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa) 21548 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = 0 21549 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = uintptr(0) 21550 } else { 21551 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = N 21552 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = aNew 21553 } 21554 } 21555 21556 func spellfix1Close(tls *libc.TLS, cur uintptr) int32 { 21557 var pCur uintptr = cur 21558 spellfix1ResetCursor(tls, pCur) 21559 spellfix1ResizeCursor(tls, pCur, 0) 21560 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21561 sqlite3.Xsqlite3_free(tls, pCur) 21562 return SQLITE_OK 21563 } 21564 21565 func spellfix1BestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 21566 var iPlan int32 = 0 21567 var iLangTerm int32 = -1 21568 var iTopTerm int32 = -1 21569 var iScopeTerm int32 = -1 21570 var iDistTerm int32 = -1 21571 var iRowidTerm int32 = -1 21572 var i int32 21573 var pConstraint uintptr 21574 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 21575 i = 0 21576 __1: 21577 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 21578 goto __3 21579 } 21580 { 21581 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 21582 goto __2 21583 } 21584 21585 if iPlan&SPELLFIX_IDXNUM_MATCH == 0 && 21586 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_WORD && 21587 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 21588 iPlan = iPlan | SPELLFIX_IDXNUM_MATCH 21589 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 21590 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 21591 } 21592 21593 if iPlan&SPELLFIX_IDXNUM_LANGID == 0 && 21594 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_LANGID && 21595 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21596 iPlan = iPlan | SPELLFIX_IDXNUM_LANGID 21597 iLangTerm = i 21598 } 21599 21600 if iPlan&SPELLFIX_IDXNUM_TOP == 0 && 21601 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_TOP && 21602 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21603 iPlan = iPlan | SPELLFIX_IDXNUM_TOP 21604 iTopTerm = i 21605 } 21606 21607 if iPlan&SPELLFIX_IDXNUM_SCOPE == 0 && 21608 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_SCOPE && 21609 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21610 iPlan = iPlan | SPELLFIX_IDXNUM_SCOPE 21611 iScopeTerm = i 21612 } 21613 21614 if iPlan&(0x10|0x20) == 0 && 21615 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_DISTANCE && 21616 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 21617 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 21618 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 21619 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLT 21620 } else { 21621 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLE 21622 } 21623 iDistTerm = i 21624 } 21625 21626 if iPlan&SPELLFIX_IDXNUM_ROWID == 0 && 21627 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < 0 && 21628 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21629 iPlan = iPlan | SPELLFIX_IDXNUM_ROWID 21630 iRowidTerm = i 21631 } 21632 21633 } 21634 goto __2 21635 __2: 21636 i++ 21637 pConstraint += 12 21638 goto __1 21639 goto __3 21640 __3: 21641 ; 21642 if iPlan&SPELLFIX_IDXNUM_MATCH != 0 { 21643 var idx int32 = 2 21644 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 21645 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 21646 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == SPELLFIX_COL_SCORE && 21647 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 21648 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 21649 } 21650 if iPlan&SPELLFIX_IDXNUM_LANGID != 0 { 21651 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21652 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).Fomit = uint8(1) 21653 } 21654 if iPlan&SPELLFIX_IDXNUM_TOP != 0 { 21655 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21656 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).Fomit = uint8(1) 21657 } 21658 if iPlan&SPELLFIX_IDXNUM_SCOPE != 0 { 21659 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21660 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).Fomit = uint8(1) 21661 } 21662 if iPlan&(0x10|0x20) != 0 { 21663 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21664 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).Fomit = uint8(1) 21665 } 21666 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e5 21667 } else if iPlan&SPELLFIX_IDXNUM_ROWID != 0 { 21668 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SPELLFIX_IDXNUM_ROWID 21669 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).FargvIndex = 1 21670 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).Fomit = uint8(1) 21671 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 21672 } else { 21673 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 21674 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e50 21675 } 21676 return SQLITE_OK 21677 } 21678 21679 func spellfix1Open(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 21680 var p uintptr = pVTab 21681 var pCur uintptr 21682 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21683 if pCur == uintptr(0) { 21684 return SQLITE_NOMEM 21685 } 21686 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(spellfix1_cursor{}))) 21687 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab = p 21688 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 21689 return SQLITE_OK 21690 } 21691 21692 func spellfix1Score(tls *libc.TLS, iDistance int32, iRank int32) int32 { 21693 var iLog2 int32 21694 iLog2 = 0 21695 __1: 21696 if !(iRank > 0) { 21697 goto __3 21698 } 21699 { 21700 } 21701 goto __2 21702 __2: 21703 iLog2++ 21704 iRank >>= 1 21705 goto __1 21706 goto __3 21707 __3: 21708 ; 21709 return iDistance + 32 - iLog2 21710 } 21711 21712 func spellfix1RowCompare(tls *libc.TLS, A uintptr, B uintptr) int32 { 21713 var a uintptr = A 21714 var b uintptr = B 21715 return (*spellfix1_row)(unsafe.Pointer(a)).FiScore - (*spellfix1_row)(unsafe.Pointer(b)).FiScore 21716 } 21717 21718 type MatchQuery1 = struct { 21719 FpCur uintptr 21720 FpStmt uintptr 21721 FzHash [32]int8 21722 FzPattern uintptr 21723 FnPattern int32 21724 FpMatchStr3 uintptr 21725 FpConfig3 uintptr 21726 FpLang uintptr 21727 FiLang int32 21728 FiScope int32 21729 FiMaxDist int32 21730 Frc int32 21731 FnRun int32 21732 FazPrior [1][32]int8 21733 } 21734 21735 type MatchQuery = MatchQuery1 21736 21737 func spellfix1RunQuery(tls *libc.TLS, p uintptr, zQuery uintptr, nQuery int32) { 21738 bp := tls.Alloc(76) 21739 defer tls.Free(76) 21740 21741 var zK1 uintptr 21742 var zWord uintptr 21743 var iDist int32 21744 var iRank int32 21745 var iScore int32 21746 var iWorst int32 = 0 21747 var idx int32 21748 var idxWorst int32 = -1 21749 var i int32 21750 var iScope int32 = (*MatchQuery)(unsafe.Pointer(p)).FiScope 21751 var pCur uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpCur 21752 var pStmt uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpStmt 21753 21754 var zClass uintptr 21755 var nClass int32 21756 var rc int32 21757 21758 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) || (*MatchQuery)(unsafe.Pointer(p)).Frc != 0 { 21759 return 21760 } 21761 zClass = phoneticHash(tls, zQuery, nQuery) 21762 if zClass == uintptr(0) { 21763 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21764 return 21765 } 21766 nClass = int32(libc.Xstrlen(tls, zClass)) 21767 if nClass > SPELLFIX_MX_HASH-2 { 21768 nClass = SPELLFIX_MX_HASH - 2 21769 *(*int8)(unsafe.Pointer(zClass + uintptr(nClass))) = int8(0) 21770 } 21771 if nClass <= iScope { 21772 if nClass > 2 { 21773 iScope = nClass - 1 21774 } else { 21775 iScope = nClass 21776 } 21777 } 21778 libc.Xmemcpy(tls, bp+8, zClass, uint32(iScope)) 21779 sqlite3.Xsqlite3_free(tls, zClass) 21780 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(iScope))) = int8(0) 21781 libc.Xmemcpy(tls, bp+40, bp+8, uint32(iScope)) 21782 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope))) = int8('Z') 21783 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope+1))) = int8(0) 21784 21785 libc.Xmemcpy(tls, p+80+uintptr(libc.PostIncInt32(&(*MatchQuery)(unsafe.Pointer(p)).FnRun, 1))*32, bp+8, uint32(iScope+1)) 21786 if sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, bp+8, -1, uintptr(0)) == SQLITE_NOMEM || 21787 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, bp+40, -1, uintptr(0)) == SQLITE_NOMEM { 21788 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21789 return 21790 } 21791 for sqlite3.Xsqlite3_step(tls, pStmt) == SQLITE_ROW { 21792 *(*int32)(unsafe.Pointer(bp + 72)) = -1 21793 iRank = sqlite3.Xsqlite3_column_int(tls, pStmt, 2) 21794 if (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3 != 0 { 21795 var nWord int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, 1) 21796 zWord = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 21797 iDist = editDist3Core(tls, (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3, zWord, nWord, (*MatchQuery)(unsafe.Pointer(p)).FpLang, bp+72) 21798 } else { 21799 zK1 = sqlite3.Xsqlite3_column_text(tls, pStmt, 3) 21800 if zK1 == uintptr(0) { 21801 continue 21802 } 21803 iDist = editdist1(tls, (*MatchQuery)(unsafe.Pointer(p)).FzPattern, zK1, uintptr(0)) 21804 } 21805 if iDist < 0 { 21806 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21807 break 21808 } 21809 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch++ 21810 21811 if (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist >= 0 { 21812 if iDist > (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist { 21813 continue 21814 } 21815 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc && (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum&SPELLFIX_IDXNUM_TOP == 0 { 21816 spellfix1ResizeCursor(tls, pCur, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc*2+10) 21817 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) { 21818 break 21819 } 21820 } 21821 } 21822 21823 iScore = spellfix1Score(tls, iDist, iRank) 21824 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21825 idx = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 21826 } else if iScore < iWorst { 21827 idx = idxWorst 21828 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*60)).FzWord) 21829 } else { 21830 continue 21831 } 21832 21833 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*60)).FzWord = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pStmt, 1))) 21834 if (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*60)).FzWord == uintptr(0) { 21835 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21836 break 21837 } 21838 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*60)).FiRowid = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 21839 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*60)).FiRank = iRank 21840 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*60)).FiDistance = iDist 21841 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*60)).FiScore = iScore 21842 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*60)).FiMatchlen = *(*int32)(unsafe.Pointer(bp + 72)) 21843 libc.Xmemcpy(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*60+28, bp+8, uint32(iScope+1)) 21844 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21845 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow++ 21846 } 21847 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow == (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21848 iWorst = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa)).FiScore 21849 idxWorst = 0 21850 for i = 1; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21851 iScore = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(i)*60)).FiScore 21852 if iWorst < iScore { 21853 iWorst = iScore 21854 idxWorst = i 21855 } 21856 } 21857 } 21858 } 21859 rc = sqlite3.Xsqlite3_reset(tls, pStmt) 21860 if rc != 0 { 21861 (*MatchQuery)(unsafe.Pointer(p)).Frc = rc 21862 } 21863 } 21864 21865 func spellfix1FilterForMatch(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 21866 bp := tls.Alloc(140) 21867 defer tls.Free(140) 21868 21869 var idxNum int32 21870 var zMatchThis uintptr 21871 var pMatchStr3 uintptr 21872 var zPattern uintptr 21873 var nPattern int32 21874 var iLimit int32 21875 var iScope int32 21876 var iLang int32 21877 var zSql uintptr 21878 21879 var rc int32 21880 var idx int32 21881 var p uintptr 21882 21883 idxNum = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 21884 pMatchStr3 = uintptr(0) 21885 iLimit = 20 21886 iScope = 3 21887 iLang = 0 21888 *(*uintptr)(unsafe.Pointer(bp + 136)) = uintptr(0) 21889 idx = 1 21890 p = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 21891 21892 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable != uintptr(0) && (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 21893 goto __1 21894 } 21895 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 21896 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 21897 goto __2 21898 } 21899 return SQLITE_NOMEM 21900 __2: 21901 ; 21902 libc.Xmemset(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, 0, uint32(unsafe.Sizeof(EditDist3Config{}))) 21903 rc = editDist3ConfigLoad(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21904 if !(rc != 0) { 21905 goto __3 21906 } 21907 return rc 21908 __3: 21909 ; 21910 __1: 21911 ; 21912 libc.Xmemset(tls, bp+24, 0, uint32(unsafe.Sizeof(MatchQuery{}))) 21913 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 3 21914 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = -1 21915 21916 if !(idxNum&2 != 0) { 21917 goto __4 21918 } 21919 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*4))) 21920 __4: 21921 ; 21922 if !(idxNum&4 != 0) { 21923 goto __5 21924 } 21925 iLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*4))) 21926 if !(iLimit < 1) { 21927 goto __6 21928 } 21929 iLimit = 1 21930 __6: 21931 ; 21932 __5: 21933 ; 21934 if !(idxNum&8 != 0) { 21935 goto __7 21936 } 21937 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*4))) 21938 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope < 1) { 21939 goto __8 21940 } 21941 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 1 21942 __8: 21943 ; 21944 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope > SPELLFIX_MX_HASH-2) { 21945 goto __9 21946 } 21947 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = SPELLFIX_MX_HASH - 2 21948 __9: 21949 ; 21950 __7: 21951 ; 21952 if !(idxNum&(16|32) != 0) { 21953 goto __10 21954 } 21955 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*4))) 21956 if !(idxNum&16 != 0) { 21957 goto __11 21958 } 21959 (*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist-- 21960 __11: 21961 ; 21962 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist < 0) { 21963 goto __12 21964 } 21965 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = 0 21966 __12: 21967 ; 21968 __10: 21969 ; 21970 spellfix1ResetCursor(tls, pCur) 21971 spellfix1ResizeCursor(tls, pCur, iLimit) 21972 zMatchThis = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21973 if !(zMatchThis == uintptr(0)) { 21974 goto __13 21975 } 21976 return SQLITE_OK 21977 __13: 21978 ; 21979 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 != 0) { 21980 goto __14 21981 } 21982 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = editDist3FindLang(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, iLang) 21983 pMatchStr3 = editDist3FromStringNew(tls, (*MatchQuery)(unsafe.Pointer(bp+24)).FpLang, zMatchThis, -1) 21984 if !(pMatchStr3 == uintptr(0)) { 21985 goto __16 21986 } 21987 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 21988 goto filter_exit 21989 __16: 21990 ; 21991 goto __15 21992 __14: 21993 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = uintptr(0) 21994 __15: 21995 ; 21996 zPattern = transliterate(tls, zMatchThis, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 21997 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21998 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern = zPattern 21999 if !(zPattern == uintptr(0)) { 22000 goto __17 22001 } 22002 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22003 goto filter_exit 22004 __17: 22005 ; 22006 nPattern = int32(libc.Xstrlen(tls, zPattern)) 22007 if !(int32(*(*int8)(unsafe.Pointer(zPattern + uintptr(nPattern-1)))) == '*') { 22008 goto __18 22009 } 22010 nPattern-- 22011 __18: 22012 ; 22013 zSql = sqlite3.Xsqlite3_mprintf(tls, 22014 ts+7650, 22015 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, iLang)) 22016 if !(zSql == uintptr(0)) { 22017 goto __19 22018 } 22019 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22020 *(*uintptr)(unsafe.Pointer(bp + 136)) = uintptr(0) 22021 goto filter_exit 22022 __19: 22023 ; 22024 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, bp+136, uintptr(0)) 22025 sqlite3.Xsqlite3_free(tls, zSql) 22026 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang = iLang 22027 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpCur = pCur 22028 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpStmt = *(*uintptr)(unsafe.Pointer(bp + 136)) 22029 (*MatchQuery)(unsafe.Pointer(bp + 24)).FzPattern = zPattern 22030 (*MatchQuery)(unsafe.Pointer(bp + 24)).FnPattern = nPattern 22031 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpMatchStr3 = pMatchStr3 22032 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiLang = iLang 22033 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = rc 22034 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpConfig3 = (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 22035 if !((*MatchQuery)(unsafe.Pointer(bp+24)).Frc == SQLITE_OK) { 22036 goto __20 22037 } 22038 spellfix1RunQuery(tls, bp+24, zPattern, nPattern) 22039 __20: 22040 ; 22041 if !((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa != 0) { 22042 goto __21 22043 } 22044 libc.Xqsort(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint32((*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow), uint32(unsafe.Sizeof(spellfix1_row{})), *(*uintptr)(unsafe.Pointer(&struct { 22045 f func(*libc.TLS, uintptr, uintptr) int32 22046 }{spellfix1RowCompare}))) 22047 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop = iLimit 22048 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope = iScope 22049 goto __22 22050 __21: 22051 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22052 __22: 22053 ; 22054 filter_exit: 22055 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 136))) 22056 editDist3FromStringDelete(tls, pMatchStr3) 22057 return (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc 22058 } 22059 22060 func spellfix1FilterForFullScan(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 22061 bp := tls.Alloc(24) 22062 defer tls.Free(24) 22063 22064 var rc int32 = SQLITE_OK 22065 var idxNum int32 = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 22066 var zSql uintptr 22067 var pVTab uintptr = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 22068 spellfix1ResetCursor(tls, pCur) 22069 22070 zSql = sqlite3.Xsqlite3_mprintf(tls, 22071 ts+7750, 22072 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzTableName, 22073 func() uintptr { 22074 if idxNum&64 != 0 { 22075 return ts + 7809 22076 } 22077 return ts + 584 22078 }())) 22079 if zSql == uintptr(0) { 22080 return SQLITE_NOMEM 22081 } 22082 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).Fdb, zSql, -1, pCur+44, uintptr(0)) 22083 sqlite3.Xsqlite3_free(tls, zSql) 22084 if rc == SQLITE_OK && idxNum&64 != 0 { 22085 rc = sqlite3.Xsqlite3_bind_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 1, *(*uintptr)(unsafe.Pointer(argv))) 22086 } 22087 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = libc.AssignPtrInt32(pCur+24, 0) 22088 if rc == SQLITE_OK { 22089 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 22090 if rc == SQLITE_ROW { 22091 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = -1 22092 rc = SQLITE_OK 22093 } 22094 if rc == SQLITE_DONE { 22095 rc = SQLITE_OK 22096 } 22097 } else { 22098 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 22099 } 22100 return rc 22101 } 22102 22103 func spellfix1Filter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 22104 var pCur uintptr = cur 22105 var rc int32 22106 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum = idxNum 22107 if idxNum&1 != 0 { 22108 rc = spellfix1FilterForMatch(tls, pCur, argc, argv) 22109 } else { 22110 rc = spellfix1FilterForFullScan(tls, pCur, argc, argv) 22111 } 22112 return rc 22113 } 22114 22115 func spellfix1Next(tls *libc.TLS, cur uintptr) int32 { 22116 var pCur uintptr = cur 22117 var rc int32 = SQLITE_OK 22118 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow { 22119 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22120 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 22121 if rc != SQLITE_ROW { 22122 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 22123 } 22124 if rc == SQLITE_ROW || rc == SQLITE_DONE { 22125 rc = SQLITE_OK 22126 } 22127 } else { 22128 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow++ 22129 } 22130 } 22131 return rc 22132 } 22133 22134 func spellfix1Eof(tls *libc.TLS, cur uintptr) int32 { 22135 var pCur uintptr = cur 22136 return libc.Bool32((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow) 22137 } 22138 22139 func spellfix1Column(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 22140 bp := tls.Alloc(4) 22141 defer tls.Free(4) 22142 22143 var pCur uintptr = cur 22144 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22145 if i <= SPELLFIX_COL_LANGID { 22146 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, i)) 22147 } else { 22148 sqlite3.Xsqlite3_result_null(tls, ctx) 22149 } 22150 return SQLITE_OK 22151 } 22152 switch i { 22153 case SPELLFIX_COL_WORD: 22154 { 22155 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*60)).FzWord, -1, uintptr(0)) 22156 break 22157 22158 } 22159 case SPELLFIX_COL_RANK: 22160 { 22161 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*60)).FiRank) 22162 break 22163 22164 } 22165 case SPELLFIX_COL_DISTANCE: 22166 { 22167 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*60)).FiDistance) 22168 break 22169 22170 } 22171 case SPELLFIX_COL_LANGID: 22172 { 22173 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang) 22174 break 22175 22176 } 22177 case SPELLFIX_COL_SCORE: 22178 { 22179 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*60)).FiScore) 22180 break 22181 22182 } 22183 case SPELLFIX_COL_MATCHLEN: 22184 { 22185 *(*int32)(unsafe.Pointer(bp)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*60)).FiMatchlen 22186 if *(*int32)(unsafe.Pointer(bp)) < 0 { 22187 var nPattern int32 = int32(libc.Xstrlen(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern)) 22188 var zWord uintptr = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*60)).FzWord 22189 var nWord int32 = int32(libc.Xstrlen(tls, zWord)) 22190 22191 if nPattern > 0 && int32(*(*int8)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern + uintptr(nPattern-1)))) == '*' { 22192 var zTranslit uintptr 22193 var res int32 22194 zTranslit = transliterate(tls, zWord, nWord) 22195 if !(zTranslit != 0) { 22196 return SQLITE_NOMEM 22197 } 22198 res = editdist1(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern, zTranslit, bp) 22199 sqlite3.Xsqlite3_free(tls, zTranslit) 22200 if res < 0 { 22201 return SQLITE_NOMEM 22202 } 22203 *(*int32)(unsafe.Pointer(bp)) = translen_to_charlen(tls, zWord, nWord, *(*int32)(unsafe.Pointer(bp))) 22204 } else { 22205 *(*int32)(unsafe.Pointer(bp)) = utf8Charlen(tls, zWord, nWord) 22206 } 22207 } 22208 22209 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(bp))) 22210 break 22211 22212 } 22213 case SPELLFIX_COL_PHONEHASH: 22214 { 22215 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*60+28, -1, uintptr(0)) 22216 break 22217 22218 } 22219 case SPELLFIX_COL_TOP: 22220 { 22221 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop) 22222 break 22223 22224 } 22225 case SPELLFIX_COL_SCOPE: 22226 { 22227 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope) 22228 break 22229 22230 } 22231 case SPELLFIX_COL_SRCHCNT: 22232 { 22233 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch) 22234 break 22235 22236 } 22237 default: 22238 { 22239 sqlite3.Xsqlite3_result_null(tls, ctx) 22240 break 22241 22242 } 22243 } 22244 return SQLITE_OK 22245 } 22246 22247 func spellfix1Rowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 22248 var pCur uintptr = cur 22249 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22250 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 4) 22251 } else { 22252 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*60)).FiRowid 22253 } 22254 return SQLITE_OK 22255 } 22256 22257 func spellfix1GetConflict(tls *libc.TLS, db uintptr) uintptr { 22258 var eConflict int32 = sqlite3.Xsqlite3_vtab_on_conflict(tls, db) 22259 22260 return azConflict[eConflict-1] 22261 } 22262 22263 var azConflict = [5]uintptr{ 22264 ts + 7824, ts + 7833, ts + 7840, ts + 7840, ts + 7846, 22265 } 22266 22267 func spellfix1Update(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 22268 bp := tls.Alloc(284) 22269 defer tls.Free(284) 22270 22271 *(*int32)(unsafe.Pointer(bp + 280)) = SQLITE_OK 22272 var rowid sqlite3_int64 22273 var newRowid sqlite3_int64 22274 var p uintptr = pVTab 22275 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 22276 22277 if argc == 1 { 22278 rowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22279 spellfix1DbExec(tls, bp+280, db, 22280 ts+7854, 22281 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, rowid)) 22282 } else { 22283 var zWord uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 22284 var nWord int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 22285 var iLang int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 5*4))) 22286 var iRank int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4))) 22287 var zSoundslike uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 12*4))) 22288 var nSoundslike int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 12*4))) 22289 var zK1 uintptr 22290 var zK2 uintptr 22291 var i int32 22292 var c int8 22293 var zConflict uintptr = spellfix1GetConflict(tls, db) 22294 22295 if zWord == uintptr(0) { 22296 var zCmd uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 13*4))) 22297 if zCmd == uintptr(0) { 22298 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7897, 22299 libc.VaList(bp+24, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 22300 return SQLITE_CONSTRAINT | int32(5)<<8 22301 } 22302 if libc.Xstrcmp(tls, zCmd, ts+7933) == 0 { 22303 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 22304 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 22305 return SQLITE_OK 22306 } 22307 if libc.Xstrncmp(tls, zCmd, ts+7599, uint32(16)) == 0 { 22308 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 22309 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 22310 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22311 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = spellfix1Dequote(tls, zCmd+uintptr(16)) 22312 if (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable == uintptr(0) { 22313 return SQLITE_NOMEM 22314 } 22315 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 { 22316 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22317 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = uintptr(0) 22318 } 22319 return SQLITE_OK 22320 } 22321 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7944, 22322 libc.VaList(bp+32, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zCmd)) 22323 return SQLITE_ERROR 22324 } 22325 if iRank < 1 { 22326 iRank = 1 22327 } 22328 if zSoundslike != 0 { 22329 zK1 = transliterate(tls, zSoundslike, nSoundslike) 22330 } else { 22331 zK1 = transliterate(tls, zWord, nWord) 22332 } 22333 if zK1 == uintptr(0) { 22334 return SQLITE_NOMEM 22335 } 22336 for i = 0; int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zK1 + uintptr(i))))) != 0; i++ { 22337 if int32(c) >= 'A' && int32(c) <= 'Z' { 22338 *(*int8)(unsafe.Pointer(zK1 + uintptr(i))) += int8('a' - 'A') 22339 } 22340 } 22341 zK2 = phoneticHash(tls, zK1, i) 22342 if zK2 == uintptr(0) { 22343 sqlite3.Xsqlite3_free(tls, zK1) 22344 return SQLITE_NOMEM 22345 } 22346 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 22347 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) == SQLITE_NULL { 22348 spellfix1DbExec(tls, bp+280, db, 22349 ts+7979, 22350 libc.VaList(bp+48, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 22351 iRank, iLang, zWord, zK1, zWord, zK2)) 22352 } else { 22353 newRowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 22354 spellfix1DbExec(tls, bp+280, db, 22355 ts+8065, 22356 libc.VaList(bp+112, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 22357 newRowid, iRank, iLang, zWord, zK1, zWord, zK2)) 22358 } 22359 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 22360 } else { 22361 rowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 22362 newRowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)))) 22363 spellfix1DbExec(tls, bp+280, db, 22364 ts+8165, 22365 libc.VaList(bp+192, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, newRowid, iRank, iLang, 22366 zWord, zK1, zWord, zK2, rowid)) 22367 } 22368 sqlite3.Xsqlite3_free(tls, zK1) 22369 sqlite3.Xsqlite3_free(tls, zK2) 22370 } 22371 return *(*int32)(unsafe.Pointer(bp + 280)) 22372 } 22373 22374 func spellfix1Rename(tls *libc.TLS, pVTab uintptr, zNew uintptr) int32 { 22375 bp := tls.Alloc(36) 22376 defer tls.Free(36) 22377 22378 var p uintptr = pVTab 22379 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 22380 *(*int32)(unsafe.Pointer(bp + 32)) = SQLITE_OK 22381 var zNewName uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zNew)) 22382 if zNewName == uintptr(0) { 22383 return SQLITE_NOMEM 22384 } 22385 spellfix1DbExec(tls, bp+32, db, 22386 ts+8274, 22387 libc.VaList(bp+8, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zNewName)) 22388 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK { 22389 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 22390 (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName = zNewName 22391 } else { 22392 sqlite3.Xsqlite3_free(tls, zNewName) 22393 } 22394 return *(*int32)(unsafe.Pointer(bp + 32)) 22395 } 22396 22397 var spellfix1Module = sqlite3_module{ 22398 FxCreate: 0, 22399 FxConnect: 0, 22400 FxBestIndex: 0, 22401 FxDisconnect: 0, 22402 FxDestroy: 0, 22403 FxOpen: 0, 22404 FxClose: 0, 22405 FxFilter: 0, 22406 FxNext: 0, 22407 FxEof: 0, 22408 FxColumn: 0, 22409 FxRowid: 0, 22410 FxUpdate: 0, 22411 FxRename: 0, 22412 } 22413 22414 func spellfix1Register(tls *libc.TLS, db uintptr) int32 { 22415 var rc int32 = SQLITE_OK 22416 var i int32 22417 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8323, 1, 22418 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22419 *(*uintptr)(unsafe.Pointer(&struct { 22420 f func(*libc.TLS, uintptr, int32, uintptr) 22421 }{transliterateSqlFunc})), uintptr(0), uintptr(0)) 22422 if rc == SQLITE_OK { 22423 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8342, 2, 22424 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22425 *(*uintptr)(unsafe.Pointer(&struct { 22426 f func(*libc.TLS, uintptr, int32, uintptr) 22427 }{editdistSqlFunc})), uintptr(0), uintptr(0)) 22428 } 22429 if rc == SQLITE_OK { 22430 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8361, 1, 22431 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22432 *(*uintptr)(unsafe.Pointer(&struct { 22433 f func(*libc.TLS, uintptr, int32, uintptr) 22434 }{phoneticHashSqlFunc})), uintptr(0), uintptr(0)) 22435 } 22436 if rc == SQLITE_OK { 22437 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8381, 1, 22438 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22439 *(*uintptr)(unsafe.Pointer(&struct { 22440 f func(*libc.TLS, uintptr, int32, uintptr) 22441 }{scriptCodeSqlFunc})), uintptr(0), uintptr(0)) 22442 } 22443 if rc == SQLITE_OK { 22444 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8402, uintptr(unsafe.Pointer(&spellfix1Module)), uintptr(0)) 22445 } 22446 if rc == SQLITE_OK { 22447 rc = editDist3Install(tls, db) 22448 } 22449 22450 for i = 0; uint32(i) < uint32(unsafe.Sizeof(translit))/uint32(unsafe.Sizeof(Transliteration{}))-uint32(1); i++ { 22451 } 22452 22453 return rc 22454 } 22455 22456 func sqlite3_spellfix_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 22457 _ = pApi 22458 22459 return spellfix1Register(tls, db) 22460 return SQLITE_OK 22461 } 22462 22463 func totypeIsspace(tls *libc.TLS, c uint8) int32 { 22464 return libc.Bool32(int32(c) == ' ' || int32(c) == '\t' || int32(c) == '\n' || int32(c) == '\v' || int32(c) == '\f' || int32(c) == '\r') 22465 } 22466 22467 func totypeIsdigit(tls *libc.TLS, c uint8) int32 { 22468 return libc.Bool32(int32(c) >= '0' && int32(c) <= '9') 22469 } 22470 22471 func totypeCompare2pow63(tls *libc.TLS, zNum uintptr) int32 { 22472 var c int32 = 0 22473 var i int32 22474 22475 var pow63 uintptr = ts + 8412 22476 for i = 0; c == 0 && i < 18; i++ { 22477 c = (int32(*(*int8)(unsafe.Pointer(zNum + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(pow63 + uintptr(i))))) * 10 22478 } 22479 if c == 0 { 22480 c = int32(*(*int8)(unsafe.Pointer(zNum + 18))) - '8' 22481 } 22482 return c 22483 } 22484 22485 func totypeAtoi64(tls *libc.TLS, zNum uintptr, pNum uintptr, length int32) int32 { 22486 var u sqlite3_uint64 = uint64(0) 22487 var neg int32 = 0 22488 var i int32 22489 var c int32 = 0 22490 var nonNum int32 = 0 22491 var zStart uintptr 22492 var zEnd uintptr = zNum + uintptr(length) 22493 22494 for zNum < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(zNum)))) != 0 { 22495 zNum++ 22496 } 22497 if zNum < zEnd { 22498 if int32(*(*int8)(unsafe.Pointer(zNum))) == '-' { 22499 neg = 1 22500 zNum++ 22501 } else if int32(*(*int8)(unsafe.Pointer(zNum))) == '+' { 22502 zNum++ 22503 } 22504 } 22505 zStart = zNum 22506 for zNum < zEnd && int32(*(*int8)(unsafe.Pointer(zNum))) == '0' { 22507 zNum++ 22508 } 22509 for i = 0; zNum+uintptr(i) < zEnd && libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(zNum + uintptr(i))))) >= '0' && c <= '9'; i++ { 22510 u = u*uint64(10) + sqlite3_uint64(c) - uint64('0') 22511 } 22512 if u > uint64(int64(0xffffffff)|int64(0x7fffffff)<<32) { 22513 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 22514 } else if neg != 0 { 22515 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = -sqlite3_int64(u) 22516 } else { 22517 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = sqlite3_int64(u) 22518 } 22519 if c != 0 && zNum+uintptr(i) < zEnd || i == 0 && zStart == zNum || i > 19 || nonNum != 0 { 22520 return 1 22521 } else if i < 19 { 22522 return 0 22523 } else { 22524 c = totypeCompare2pow63(tls, zNum) 22525 if c < 0 { 22526 return 0 22527 } else if c > 0 { 22528 return 1 22529 } else { 22530 if neg != 0 { 22531 return 0 22532 } 22533 return 2 22534 } 22535 } 22536 return int32(0) 22537 } 22538 22539 func totypeAtoF(tls *libc.TLS, z uintptr, pResult uintptr, length int32) int32 { 22540 var zEnd uintptr 22541 22542 var sign int32 22543 var s sqlite3_int64 22544 var d int32 22545 var esign int32 22546 var e int32 22547 var eValid int32 22548 var result float64 22549 var nDigits int32 22550 var nonNum int32 22551 var scale float64 22552 zEnd = z + uintptr(length) 22553 sign = 1 22554 s = int64(0) 22555 d = 0 22556 esign = 1 22557 e = 0 22558 eValid = 1 22559 nDigits = 0 22560 nonNum = 0 22561 22562 *(*float64)(unsafe.Pointer(pResult)) = 0.0 22563 22564 __1: 22565 if !(z < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22566 goto __2 22567 } 22568 z++ 22569 goto __1 22570 __2: 22571 ; 22572 if !(z >= zEnd) { 22573 goto __3 22574 } 22575 return 0 22576 __3: 22577 ; 22578 if !(int32(*(*int8)(unsafe.Pointer(z))) == '-') { 22579 goto __4 22580 } 22581 sign = -1 22582 z++ 22583 goto __5 22584 __4: 22585 if !(int32(*(*int8)(unsafe.Pointer(z))) == '+') { 22586 goto __6 22587 } 22588 z++ 22589 __6: 22590 ; 22591 __5: 22592 ; 22593 __7: 22594 if !(z < zEnd && int32(*(*int8)(unsafe.Pointer(z))) == '0') { 22595 goto __8 22596 } 22597 z++ 22598 nDigits++ 22599 goto __7 22600 __8: 22601 ; 22602 __9: 22603 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 22604 goto __10 22605 } 22606 s = s*int64(10) + sqlite3_int64(int32(*(*int8)(unsafe.Pointer(z)))-'0') 22607 z++ 22608 nDigits++ 22609 goto __9 22610 __10: 22611 ; 22612 __11: 22613 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22614 goto __12 22615 } 22616 z++ 22617 nDigits++ 22618 d++ 22619 goto __11 22620 __12: 22621 ; 22622 if !(z >= zEnd) { 22623 goto __13 22624 } 22625 goto totype_atof_calc 22626 __13: 22627 ; 22628 if !(int32(*(*int8)(unsafe.Pointer(z))) == '.') { 22629 goto __14 22630 } 22631 z++ 22632 22633 __15: 22634 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 22635 goto __16 22636 } 22637 s = s*int64(10) + sqlite3_int64(int32(*(*int8)(unsafe.Pointer(z)))-'0') 22638 z++ 22639 nDigits++ 22640 d-- 22641 goto __15 22642 __16: 22643 ; 22644 __17: 22645 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22646 goto __18 22647 } 22648 z++ 22649 nDigits++ 22650 goto __17 22651 __18: 22652 ; 22653 __14: 22654 ; 22655 if !(z >= zEnd) { 22656 goto __19 22657 } 22658 goto totype_atof_calc 22659 __19: 22660 ; 22661 if !(int32(*(*int8)(unsafe.Pointer(z))) == 'e' || int32(*(*int8)(unsafe.Pointer(z))) == 'E') { 22662 goto __20 22663 } 22664 z++ 22665 eValid = 0 22666 if !(z >= zEnd) { 22667 goto __21 22668 } 22669 goto totype_atof_calc 22670 __21: 22671 ; 22672 if !(int32(*(*int8)(unsafe.Pointer(z))) == '-') { 22673 goto __22 22674 } 22675 esign = -1 22676 z++ 22677 goto __23 22678 __22: 22679 if !(int32(*(*int8)(unsafe.Pointer(z))) == '+') { 22680 goto __24 22681 } 22682 z++ 22683 __24: 22684 ; 22685 __23: 22686 ; 22687 __25: 22688 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22689 goto __26 22690 } 22691 if e < 10000 { 22692 e = e*10 + (int32(*(*int8)(unsafe.Pointer(z))) - '0') 22693 } else { 22694 e = 10000 22695 } 22696 z++ 22697 eValid = 1 22698 goto __25 22699 __26: 22700 ; 22701 __20: 22702 ; 22703 if !(nDigits != 0 && eValid != 0) { 22704 goto __27 22705 } 22706 __28: 22707 if !(z < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 22708 goto __29 22709 } 22710 z++ 22711 goto __28 22712 __29: 22713 ; 22714 __27: 22715 ; 22716 totype_atof_calc: 22717 e = e*esign + d 22718 if !(e < 0) { 22719 goto __30 22720 } 22721 esign = -1 22722 e = e * -1 22723 goto __31 22724 __30: 22725 esign = 1 22726 __31: 22727 ; 22728 if !!(s != 0) { 22729 goto __32 22730 } 22731 22732 if sign < 0 && nDigits != 0 { 22733 result = -libc.Float64FromFloat64(float64(0)) 22734 } else { 22735 result = float64(0) 22736 } 22737 goto __33 22738 __32: 22739 if !(esign > 0) { 22740 goto __34 22741 } 22742 __36: 22743 if !(s < (int64(0xffffffff)|int64(0x7fffffff)<<32)/int64(10) && e > 0) { 22744 goto __37 22745 } 22746 e-- 22747 s = s * int64(10) 22748 goto __36 22749 __37: 22750 ; 22751 goto __35 22752 __34: 22753 __38: 22754 if !(!(int32(s%int64(10)) != 0) && e > 0) { 22755 goto __39 22756 } 22757 e-- 22758 s = s / int64(10) 22759 goto __38 22760 __39: 22761 ; 22762 __35: 22763 ; 22764 if sign < 0 { 22765 s = -s 22766 } else { 22767 s = s 22768 } 22769 22770 if !(e != 0) { 22771 goto __40 22772 } 22773 scale = 1.0 22774 22775 if !(e > 307 && e < 342) { 22776 goto __42 22777 } 22778 __44: 22779 if !(e%308 != 0) { 22780 goto __45 22781 } 22782 scale = scale * 1.0e+1 22783 e = e - 1 22784 goto __44 22785 __45: 22786 ; 22787 if !(esign < 0) { 22788 goto __46 22789 } 22790 result = float64(s) / scale 22791 result = result / 1.0e+308 22792 goto __47 22793 __46: 22794 result = float64(s) * scale 22795 result = result * 1.0e+308 22796 __47: 22797 ; 22798 goto __43 22799 __42: 22800 if !(e >= 342) { 22801 goto __48 22802 } 22803 if !(esign < 0) { 22804 goto __50 22805 } 22806 result = 0.0 * float64(s) 22807 goto __51 22808 __50: 22809 result = libc.Float64(1e308) * libc.Float64(1e308) * float64(s) 22810 __51: 22811 ; 22812 goto __49 22813 __48: 22814 __52: 22815 if !(e%22 != 0) { 22816 goto __53 22817 } 22818 scale = scale * 1.0e+1 22819 e = e - 1 22820 goto __52 22821 __53: 22822 ; 22823 __54: 22824 if !(e > 0) { 22825 goto __55 22826 } 22827 scale = scale * 1.0e+22 22828 e = e - 22 22829 goto __54 22830 __55: 22831 ; 22832 if !(esign < 0) { 22833 goto __56 22834 } 22835 result = float64(s) / scale 22836 goto __57 22837 __56: 22838 result = float64(s) * scale 22839 __57: 22840 ; 22841 __49: 22842 ; 22843 __43: 22844 ; 22845 goto __41 22846 __40: 22847 result = float64(s) 22848 __41: 22849 ; 22850 __33: 22851 ; 22852 *(*float64)(unsafe.Pointer(pResult)) = result 22853 22854 return libc.Bool32(z >= zEnd && nDigits > 0 && eValid != 0 && nonNum == 0) 22855 } 22856 22857 func tointegerFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22858 bp := tls.Alloc(24) 22859 defer tls.Free(24) 22860 22861 _ = argc 22862 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 22863 case SQLITE_FLOAT: 22864 { 22865 var rVal float64 = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 22866 var iVal sqlite3_int64 = sqlite3_int64(rVal) 22867 if rVal == float64(iVal) { 22868 sqlite3.Xsqlite3_result_int64(tls, context, iVal) 22869 } 22870 break 22871 22872 } 22873 case SQLITE_INTEGER: 22874 { 22875 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22876 break 22877 22878 } 22879 case SQLITE_BLOB: 22880 { 22881 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 22882 if zBlob != 0 { 22883 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22884 if uint32(nBlob) == uint32(unsafe.Sizeof(sqlite3_int64(0))) { 22885 if 0 != 0 { 22886 var i int32 22887 22888 for i = 0; uint32(i) < uint32(unsafe.Sizeof(sqlite3_int64(0))); i++ { 22889 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint32(unsafe.Sizeof(sqlite3_int64(0)))-uint32(1)-uint32(i)))) 22890 } 22891 libc.Xmemcpy(tls, bp+8, bp, uint32(unsafe.Sizeof(sqlite3_int64(0)))) 22892 } else { 22893 libc.Xmemcpy(tls, bp+8, zBlob, uint32(unsafe.Sizeof(sqlite3_int64(0)))) 22894 } 22895 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))) 22896 } 22897 } 22898 break 22899 22900 } 22901 case SQLITE_TEXT: 22902 { 22903 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22904 if zStr != 0 { 22905 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22906 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) { 22907 if !(totypeAtoi64(tls, zStr, bp+16, nStr) != 0) { 22908 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 22909 } 22910 } 22911 } 22912 break 22913 22914 } 22915 default: 22916 { 22917 break 22918 22919 } 22920 } 22921 } 22922 22923 func torealFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22924 bp := tls.Alloc(24) 22925 defer tls.Free(24) 22926 22927 _ = argc 22928 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 22929 case SQLITE_FLOAT: 22930 { 22931 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22932 break 22933 22934 } 22935 case SQLITE_INTEGER: 22936 { 22937 var iVal sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 22938 var rVal float64 = float64(iVal) 22939 if iVal == sqlite3_int64(rVal) { 22940 sqlite3.Xsqlite3_result_double(tls, context, rVal) 22941 } 22942 break 22943 22944 } 22945 case SQLITE_BLOB: 22946 { 22947 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 22948 if zBlob != 0 { 22949 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22950 if uint32(nBlob) == uint32(unsafe.Sizeof(float64(0))) { 22951 if 1 != 0 { 22952 var i int32 22953 22954 for i = 0; uint32(i) < uint32(unsafe.Sizeof(float64(0))); i++ { 22955 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint32(unsafe.Sizeof(float64(0)))-uint32(1)-uint32(i)))) 22956 } 22957 libc.Xmemcpy(tls, bp+8, bp, uint32(unsafe.Sizeof(float64(0)))) 22958 } else { 22959 libc.Xmemcpy(tls, bp+8, zBlob, uint32(unsafe.Sizeof(float64(0)))) 22960 } 22961 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 8))) 22962 } 22963 } 22964 break 22965 22966 } 22967 case SQLITE_TEXT: 22968 { 22969 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22970 if zStr != 0 { 22971 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22972 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr + uintptr(nStr-1)))) != 0) { 22973 if totypeAtoF(tls, zStr, bp+16, nStr) != 0 { 22974 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 16))) 22975 return 22976 } 22977 } 22978 } 22979 break 22980 22981 } 22982 default: 22983 { 22984 break 22985 22986 } 22987 } 22988 } 22989 22990 func sqlite3_totype_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 22991 var rc int32 = SQLITE_OK 22992 _ = pApi 22993 22994 _ = pzErrMsg 22995 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8431, 1, 22996 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 22997 *(*uintptr)(unsafe.Pointer(&struct { 22998 f func(*libc.TLS, uintptr, int32, uintptr) 22999 }{tointegerFunc})), uintptr(0), uintptr(0)) 23000 if rc == SQLITE_OK { 23001 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8441, 1, 23002 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 23003 *(*uintptr)(unsafe.Pointer(&struct { 23004 f func(*libc.TLS, uintptr, int32, uintptr) 23005 }{torealFunc})), uintptr(0), uintptr(0)) 23006 } 23007 return rc 23008 } 23009 23010 type UnionCsr1 = struct { 23011 Fbase sqlite3_vtab_cursor 23012 FpStmt uintptr 23013 FiMaxRowid sqlite3_int64 23014 FiTab int32 23015 } 23016 23017 type UnionCsr = UnionCsr1 23018 type UnionTab1 = struct { 23019 Fbase sqlite3_vtab 23020 Fdb uintptr 23021 FbSwarm int32 23022 FiPK int32 23023 FnSrc int32 23024 FaSrc uintptr 23025 FbHasContext int32 23026 FzSourceStr uintptr 23027 FpNotFound uintptr 23028 FpOpenClose uintptr 23029 FpClosable uintptr 23030 FnOpen int32 23031 FnMaxOpen int32 23032 } 23033 23034 type UnionTab = UnionTab1 23035 type UnionSrc1 = struct { 23036 FzDb uintptr 23037 FzTab uintptr 23038 FiMin sqlite3_int64 23039 FiMax sqlite3_int64 23040 FzFile uintptr 23041 FzContext uintptr 23042 FnUser int32 23043 Fdb uintptr 23044 FpNextClosable uintptr 23045 } 23046 23047 type UnionSrc = UnionSrc1 23048 23049 func unionMalloc(tls *libc.TLS, pRc uintptr, nByte sqlite3_int64) uintptr { 23050 var pRet uintptr 23051 23052 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23053 pRet = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 23054 if pRet != 0 { 23055 libc.Xmemset(tls, pRet, 0, size_t(nByte)) 23056 } else { 23057 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 23058 } 23059 } else { 23060 pRet = uintptr(0) 23061 } 23062 return pRet 23063 } 23064 23065 func unionStrdup(tls *libc.TLS, pRc uintptr, zIn uintptr) uintptr { 23066 var zRet uintptr = uintptr(0) 23067 if zIn != 0 { 23068 var nByte sqlite3_int64 = sqlite3_int64(libc.Xstrlen(tls, zIn) + size_t(1)) 23069 zRet = unionMalloc(tls, pRc, nByte) 23070 if zRet != 0 { 23071 libc.Xmemcpy(tls, zRet, zIn, size_t(nByte)) 23072 } 23073 } 23074 return zRet 23075 } 23076 23077 func unionDequote(tls *libc.TLS, z uintptr) { 23078 if z != 0 { 23079 var q int8 = *(*int8)(unsafe.Pointer(z)) 23080 23081 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 23082 var iIn int32 = 1 23083 var iOut int32 = 0 23084 if int32(q) == '[' { 23085 q = int8(']') 23086 } 23087 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 23088 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 23089 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 23090 iIn++ 23091 break 23092 } else { 23093 iIn = iIn + 2 23094 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 23095 } 23096 } else { 23097 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 23098 } 23099 } 23100 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 23101 } 23102 } 23103 } 23104 23105 func unionPrepare(tls *libc.TLS, pRc uintptr, db uintptr, zSql uintptr, pzErr uintptr) uintptr { 23106 bp := tls.Alloc(12) 23107 defer tls.Free(12) 23108 23109 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 23110 23111 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23112 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 23113 if rc != SQLITE_OK { 23114 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8448, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 23115 *(*int32)(unsafe.Pointer(pRc)) = rc 23116 } 23117 } 23118 return *(*uintptr)(unsafe.Pointer(bp + 8)) 23119 } 23120 23121 func unionPreparePrintf(tls *libc.TLS, pRc uintptr, pzErr uintptr, db uintptr, zFmt uintptr, va uintptr) uintptr { 23122 var pRet uintptr = uintptr(0) 23123 var zSql uintptr 23124 var ap va_list 23125 _ = ap 23126 ap = va 23127 23128 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 23129 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23130 if zSql == uintptr(0) { 23131 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 23132 } else { 23133 pRet = unionPrepare(tls, pRc, db, zSql, pzErr) 23134 } 23135 } 23136 sqlite3.Xsqlite3_free(tls, zSql) 23137 23138 _ = ap 23139 return pRet 23140 } 23141 23142 func unionFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr, pzErr uintptr) { 23143 bp := tls.Alloc(8) 23144 defer tls.Free(8) 23145 23146 var db uintptr = sqlite3.Xsqlite3_db_handle(tls, pStmt) 23147 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 23148 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23149 *(*int32)(unsafe.Pointer(pRc)) = rc 23150 if rc != 0 { 23151 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 23152 } 23153 } 23154 } 23155 23156 func unionInvokeOpenClose(tls *libc.TLS, pTab uintptr, pSrc uintptr, bClose int32, pzErr uintptr) int32 { 23157 bp := tls.Alloc(8) 23158 defer tls.Free(8) 23159 23160 var rc int32 = SQLITE_OK 23161 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 23162 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 23163 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23164 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 23165 } 23166 sqlite3.Xsqlite3_bind_int(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2+(*UnionTab)(unsafe.Pointer(pTab)).FbHasContext, bClose) 23167 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 23168 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose)) { 23169 if pzErr != 0 { 23170 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 23171 } 23172 } 23173 } 23174 return rc 23175 } 23176 23177 func unionCloseSources(tls *libc.TLS, pTab uintptr, nMax int32) { 23178 for (*UnionTab)(unsafe.Pointer(pTab)).FpClosable != 0 && (*UnionTab)(unsafe.Pointer(pTab)).FnOpen > nMax { 23179 var p uintptr 23180 var pp uintptr 23181 for pp = pTab + 48; (*UnionSrc)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNextClosable != 0; pp = *(*uintptr)(unsafe.Pointer(pp)) + 40 { 23182 } 23183 p = *(*uintptr)(unsafe.Pointer(pp)) 23184 23185 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(p)).Fdb) 23186 (*UnionSrc)(unsafe.Pointer(p)).Fdb = uintptr(0) 23187 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 23188 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen-- 23189 unionInvokeOpenClose(tls, pTab, p, 1, uintptr(0)) 23190 } 23191 } 23192 23193 func unionDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 23194 if pVtab != 0 { 23195 var pTab uintptr = pVtab 23196 var i int32 23197 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23198 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*44 23199 var bHaveSrcDb int32 = libc.Bool32((*UnionSrc)(unsafe.Pointer(pSrc)).Fdb != uintptr(0)) 23200 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23201 if bHaveSrcDb != 0 { 23202 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 23203 } 23204 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb) 23205 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab) 23206 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile) 23207 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext) 23208 } 23209 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 23210 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 23211 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) 23212 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc) 23213 sqlite3.Xsqlite3_free(tls, pTab) 23214 } 23215 return SQLITE_OK 23216 } 23217 23218 func unionIsIntkeyTable(tls *libc.TLS, db uintptr, pSrc uintptr, pzErr uintptr) int32 { 23219 bp := tls.Alloc(32) 23220 defer tls.Free(32) 23221 23222 *(*int32)(unsafe.Pointer(bp + 28)) = 0 23223 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 23224 var rc int32 23225 23226 sqlite3.Xsqlite3_table_column_metadata(tls, 23227 db, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, ts+8462, bp+24, uintptr(0), uintptr(0), bp+28, uintptr(0)) 23228 rc = sqlite3.Xsqlite3_errcode(tls, db) 23229 if rc == SQLITE_ERROR || 23230 rc == SQLITE_OK && (!(*(*int32)(unsafe.Pointer(bp + 28)) != 0) || sqlite3.Xsqlite3_stricmp(tls, ts+8470, *(*uintptr)(unsafe.Pointer(bp + 24))) != 0) { 23231 rc = SQLITE_ERROR 23232 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8478, 23233 libc.VaList(bp, func() uintptr { 23234 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23235 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 23236 } 23237 return ts + 584 23238 }(), 23239 func() uintptr { 23240 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23241 return ts + 8506 23242 } 23243 return ts + 584 23244 }(), 23245 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 23246 } 23247 return rc 23248 } 23249 23250 func unionSourceToStr(tls *libc.TLS, pRc uintptr, pTab uintptr, pSrc uintptr, pzErr uintptr) uintptr { 23251 bp := tls.Alloc(4) 23252 defer tls.Free(4) 23253 23254 var zRet uintptr = uintptr(0) 23255 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23256 var db uintptr = func() uintptr { 23257 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23258 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 23259 } 23260 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23261 }() 23262 *(*int32)(unsafe.Pointer(bp)) = unionIsIntkeyTable(tls, db, pSrc, pzErr) 23263 var pStmt uintptr = unionPrepare(tls, bp, db, 23264 ts+8508, pzErr) 23265 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23266 sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, -1, uintptr(0)) 23267 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, -1, uintptr(0)) 23268 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23269 var z uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23270 zRet = unionStrdup(tls, bp, z) 23271 } 23272 unionFinalize(tls, bp, pStmt, pzErr) 23273 } 23274 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp)) 23275 } 23276 23277 return zRet 23278 } 23279 23280 func unionSourceCheck(tls *libc.TLS, pTab uintptr, pzErr uintptr) int32 { 23281 bp := tls.Alloc(4) 23282 defer tls.Free(4) 23283 23284 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23285 var z0 uintptr = uintptr(0) 23286 var i int32 23287 23288 z0 = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, pzErr) 23289 for i = 1; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23290 var z uintptr = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc+uintptr(i)*44, pzErr) 23291 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && sqlite3.Xsqlite3_stricmp(tls, z, z0) != 0 { 23292 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 23293 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 23294 } 23295 sqlite3.Xsqlite3_free(tls, z) 23296 } 23297 sqlite3.Xsqlite3_free(tls, z0) 23298 23299 return *(*int32)(unsafe.Pointer(bp)) 23300 } 23301 23302 func unionOpenDatabaseInner(tls *libc.TLS, pTab uintptr, pSrc uintptr, pzErr uintptr) int32 { 23303 bp := tls.Alloc(16) 23304 defer tls.Free(16) 23305 23306 var rc int32 23307 23308 rc = unionInvokeOpenClose(tls, pTab, pSrc, 0, pzErr) 23309 if rc != SQLITE_OK { 23310 return rc 23311 } 23312 23313 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+36, openFlags, uintptr(0)) 23314 if rc == SQLITE_OK { 23315 return rc 23316 } 23317 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 23318 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23319 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 23320 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 23321 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23322 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 23323 } 23324 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 23325 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound)) { 23326 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 23327 return rc 23328 } 23329 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+36, openFlags, uintptr(0)) 23330 } 23331 if rc != SQLITE_OK { 23332 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_errmsg(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb))) 23333 } 23334 return rc 23335 } 23336 23337 var openFlags int32 = SQLITE_OPEN_READONLY | SQLITE_OPEN_URI 23338 23339 func unionOpenDatabase(tls *libc.TLS, pTab uintptr, iSrc int32, pzErr uintptr) int32 { 23340 bp := tls.Alloc(4) 23341 defer tls.Free(4) 23342 23343 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23344 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iSrc)*44 23345 23346 if (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb == uintptr(0) { 23347 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen-1) 23348 *(*int32)(unsafe.Pointer(bp)) = unionOpenDatabaseInner(tls, pTab, pSrc, pzErr) 23349 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23350 var z uintptr = unionSourceToStr(tls, bp, pTab, pSrc, pzErr) 23351 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23352 if (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr == uintptr(0) { 23353 (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr = z 23354 } else { 23355 if sqlite3.Xsqlite3_stricmp(tls, z, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) != 0 { 23356 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 23357 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 23358 } 23359 sqlite3.Xsqlite3_free(tls, z) 23360 } 23361 } 23362 } 23363 23364 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23365 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 23366 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 23367 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen++ 23368 } else { 23369 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23370 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 23371 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 23372 } 23373 } 23374 23375 return *(*int32)(unsafe.Pointer(bp)) 23376 } 23377 23378 func unionIncrRefcount(tls *libc.TLS, pTab uintptr, iTab int32) { 23379 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23380 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iTab)*44 23381 23382 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 23383 var pp uintptr 23384 for pp = pTab + 48; *(*uintptr)(unsafe.Pointer(pp)) != pSrc; pp = *(*uintptr)(unsafe.Pointer(pp)) + 40 { 23385 } 23386 *(*uintptr)(unsafe.Pointer(pp)) = (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable 23387 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = uintptr(0) 23388 } 23389 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser++ 23390 } 23391 } 23392 23393 func unionFinalizeCsrStmt(tls *libc.TLS, pCsr uintptr) int32 { 23394 var rc int32 = SQLITE_OK 23395 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 23396 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 23397 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*44 23398 rc = sqlite3.Xsqlite3_finalize(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) 23399 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 23400 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23401 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser-- 23402 23403 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 23404 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 23405 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 23406 } 23407 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen) 23408 } 23409 } 23410 return rc 23411 } 23412 23413 func union_isspace(tls *libc.TLS, c int8) int32 { 23414 return libc.Bool32(int32(c) == ' ' || int32(c) == '\n' || int32(c) == '\r' || int32(c) == '\t') 23415 } 23416 23417 func union_isidchar(tls *libc.TLS, c int8) int32 { 23418 return libc.Bool32(int32(c) >= 'a' && int32(c) <= 'z' || int32(c) >= 'A' && int32(c) < 'Z' || int32(c) >= '0' && int32(c) <= '9') 23419 } 23420 23421 func unionConfigureVtab(tls *libc.TLS, pRc uintptr, pTab uintptr, pStmt uintptr, nArg int32, azArg uintptr, pzErr uintptr) { 23422 bp := tls.Alloc(68) 23423 defer tls.Free(68) 23424 23425 *(*int32)(unsafe.Pointer(bp + 64)) = *(*int32)(unsafe.Pointer(pRc)) 23426 var i int32 23427 if *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK { 23428 (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext = libc.Bool32(sqlite3.Xsqlite3_column_count(tls, pStmt) > 4) 23429 } 23430 for i = 0; *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK && i < nArg; i++ { 23431 var zArg uintptr = unionStrdup(tls, bp+64, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*4))) 23432 if zArg != 0 { 23433 var nOpt int32 = 0 23434 var zOpt uintptr 23435 var zVal uintptr 23436 23437 unionDequote(tls, zArg) 23438 zOpt = zArg 23439 for union_isspace(tls, *(*int8)(unsafe.Pointer(zOpt))) != 0 { 23440 zOpt++ 23441 } 23442 zVal = zOpt 23443 if int32(*(*int8)(unsafe.Pointer(zVal))) == ':' { 23444 zVal++ 23445 } 23446 for union_isidchar(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 23447 zVal++ 23448 } 23449 nOpt = (int32(zVal) - int32(zOpt)) / 1 23450 23451 for union_isspace(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 23452 zVal++ 23453 } 23454 if int32(*(*int8)(unsafe.Pointer(zVal))) == '=' { 23455 *(*int8)(unsafe.Pointer(zOpt + uintptr(nOpt))) = int8(0) 23456 zVal++ 23457 for union_isspace(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 23458 zVal++ 23459 } 23460 zVal = unionStrdup(tls, bp+64, zVal) 23461 if zVal != 0 { 23462 unionDequote(tls, zVal) 23463 if int32(*(*int8)(unsafe.Pointer(zOpt))) == ':' { 23464 var iParam int32 = sqlite3.Xsqlite3_bind_parameter_index(tls, pStmt, zOpt) 23465 if iParam == 0 { 23466 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23467 ts+8621, libc.VaList(bp, zOpt)) 23468 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23469 } else { 23470 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3_bind_text(tls, pStmt, iParam, zVal, -1, libc.UintptrFromInt32(-1)) 23471 } 23472 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8658, 7) { 23473 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = libc.Xatoi(tls, zVal) 23474 if (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen <= 0 { 23475 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8666, 0) 23476 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23477 } 23478 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8699, 7) { 23479 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 23480 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23481 ts+8707, 0) 23482 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23483 } else { 23484 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23485 ts+8745, libc.VaList(bp+8, zVal, func() uintptr { 23486 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23487 return ts + 8762 23488 } 23489 return ts + 584 23490 }())) 23491 } 23492 } else if nOpt == 9 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8765, 9) { 23493 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 23494 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23495 ts+8775, 0) 23496 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23497 } else { 23498 (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23499 ts+8815, libc.VaList(bp+24, zVal, func() uintptr { 23500 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23501 return ts + 8762 23502 } 23503 return ts + 584 23504 }())) 23505 } 23506 } else { 23507 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8834, libc.VaList(bp+40, zOpt)) 23508 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23509 } 23510 sqlite3.Xsqlite3_free(tls, zVal) 23511 } 23512 } else { 23513 if i == 0 && nArg == 1 { 23514 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23515 ts+8869, libc.VaList(bp+48, zArg)) 23516 } else { 23517 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8884, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*4)))) 23518 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23519 } 23520 } 23521 sqlite3.Xsqlite3_free(tls, zArg) 23522 } 23523 } 23524 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 64)) 23525 } 23526 23527 func unionConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 23528 bp := tls.Alloc(44) 23529 defer tls.Free(44) 23530 23531 var pTab uintptr = uintptr(0) 23532 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 23533 var bSwarm int32 = func() int32 { 23534 if pAux == uintptr(0) { 23535 return 0 23536 } 23537 return 1 23538 }() 23539 var zVtab uintptr = func() uintptr { 23540 if bSwarm != 0 { 23541 return ts + 8911 23542 } 23543 return ts + 8921 23544 }() 23545 23546 if sqlite3.Xsqlite3_stricmp(tls, ts+8931, *(*uintptr)(unsafe.Pointer(argv + 1*4))) != 0 { 23547 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8936, libc.VaList(bp, zVtab)) 23548 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23549 } else if argc < 4 || argc > 4 && bSwarm == 0 { 23550 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8977, libc.VaList(bp+8, zVtab)) 23551 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23552 } else { 23553 var nAlloc int32 = 0 23554 var pStmt uintptr = uintptr(0) 23555 var zArg uintptr = unionStrdup(tls, bp+40, *(*uintptr)(unsafe.Pointer(argv + 3*4))) 23556 23557 unionDequote(tls, zArg) 23558 pStmt = unionPreparePrintf(tls, bp+40, pzErr, db, 23559 ts+9010, libc.VaList(bp+16, zArg)) 23560 23561 pTab = unionMalloc(tls, bp+40, int64(unsafe.Sizeof(UnionTab{}))) 23562 if pTab != 0 { 23563 (*UnionTab)(unsafe.Pointer(pTab)).Fdb = db 23564 (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm = bSwarm 23565 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = SWARMVTAB_MAX_OPEN 23566 } 23567 23568 if bSwarm != 0 { 23569 unionConfigureVtab(tls, bp+40, pTab, pStmt, argc-4, argv+4*4, pzErr) 23570 } 23571 23572 for *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23573 var zDb uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23574 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 23575 var iMin sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 2) 23576 var iMax sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 3) 23577 var pSrc uintptr 23578 23579 if nAlloc <= (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 23580 var nNew int32 23581 if nAlloc != 0 { 23582 nNew = nAlloc * 2 23583 } else { 23584 nNew = 8 23585 } 23586 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, 23587 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, uint64(uint32(nNew)*uint32(unsafe.Sizeof(UnionSrc{})))) 23588 if aNew == uintptr(0) { 23589 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_NOMEM 23590 break 23591 } else { 23592 libc.Xmemset(tls, aNew+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*44, 0, uint32(nNew-(*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*uint32(unsafe.Sizeof(UnionSrc{}))) 23593 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc = aNew 23594 nAlloc = nNew 23595 } 23596 } 23597 23598 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)*44)).FiMax { 23599 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9040, 0) 23600 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23601 } 23602 23603 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23604 pSrc = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(libc.PostIncInt32(&(*UnionTab)(unsafe.Pointer(pTab)).FnSrc, 1))*44 23605 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab = unionStrdup(tls, bp+40, zTab) 23606 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin = iMin 23607 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax = iMax 23608 if bSwarm != 0 { 23609 (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile = unionStrdup(tls, bp+40, zDb) 23610 } else { 23611 (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb = unionStrdup(tls, bp+40, zDb) 23612 } 23613 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23614 var zContext uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 4) 23615 (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext = unionStrdup(tls, bp+40, zContext) 23616 } 23617 } 23618 } 23619 unionFinalize(tls, bp+40, pStmt, pzErr) 23620 pStmt = uintptr(0) 23621 23622 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FnSrc == 0 { 23623 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9067, 0) 23624 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23625 } 23626 23627 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23628 if bSwarm != 0 { 23629 *(*int32)(unsafe.Pointer(bp + 40)) = unionOpenDatabase(tls, pTab, 0, pzErr) 23630 } else { 23631 *(*int32)(unsafe.Pointer(bp + 40)) = unionSourceCheck(tls, pTab, pzErr) 23632 } 23633 } 23634 23635 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23636 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc 23637 var tdb uintptr = func() uintptr { 23638 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23639 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 23640 } 23641 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23642 }() 23643 pStmt = unionPreparePrintf(tls, bp+40, pzErr, tdb, 23644 ts+9095, 23645 libc.VaList(bp+24, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb)) 23646 } 23647 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23648 var zDecl uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23649 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zDecl) 23650 (*UnionTab)(unsafe.Pointer(pTab)).FiPK = sqlite3.Xsqlite3_column_int(tls, pStmt, 1) 23651 } 23652 23653 unionFinalize(tls, bp+40, pStmt, pzErr) 23654 } 23655 23656 if *(*int32)(unsafe.Pointer(bp + 40)) != SQLITE_OK { 23657 unionDisconnect(tls, pTab) 23658 pTab = uintptr(0) 23659 } 23660 23661 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 23662 return *(*int32)(unsafe.Pointer(bp + 40)) 23663 } 23664 23665 func unionOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 23666 bp := tls.Alloc(4) 23667 defer tls.Free(4) 23668 23669 var pCsr uintptr 23670 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23671 _ = p 23672 pCsr = unionMalloc(tls, bp, int64(unsafe.Sizeof(UnionCsr{}))) 23673 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 23674 return *(*int32)(unsafe.Pointer(bp)) 23675 } 23676 23677 func unionClose(tls *libc.TLS, cur uintptr) int32 { 23678 var pCsr uintptr = cur 23679 unionFinalizeCsrStmt(tls, pCsr) 23680 sqlite3.Xsqlite3_free(tls, pCsr) 23681 return SQLITE_OK 23682 } 23683 23684 func doUnionNext(tls *libc.TLS, pCsr uintptr) int32 { 23685 bp := tls.Alloc(28) 23686 defer tls.Free(28) 23687 23688 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_OK 23689 23690 if sqlite3.Xsqlite3_step(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) != SQLITE_ROW { 23691 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 23692 *(*int32)(unsafe.Pointer(bp + 24)) = unionFinalizeCsrStmt(tls, pCsr) 23693 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23694 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab++ 23695 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 23696 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*44 23697 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid >= (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23698 *(*int32)(unsafe.Pointer(bp + 24)) = unionOpenDatabase(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab, pTab+8) 23699 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPreparePrintf(tls, bp+24, pTab+8, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb, 23700 ts+9273, 23701 libc.VaList(bp, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, 23702 func() uintptr { 23703 if (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax > (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid { 23704 return ts + 9305 23705 } 23706 return ts + 9322 23707 }(), 23708 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid)) 23709 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 23710 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 23711 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ROW 23712 } 23713 } 23714 } 23715 } 23716 } 23717 23718 return *(*int32)(unsafe.Pointer(bp + 24)) 23719 } 23720 23721 func unionNext(tls *libc.TLS, cur uintptr) int32 { 23722 var rc int32 23723 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_ROW { 23724 rc = doUnionNext(tls, cur) 23725 } 23726 return rc 23727 } 23728 23729 func unionColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 23730 var pCsr uintptr = cur 23731 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 23732 return SQLITE_OK 23733 } 23734 23735 func unionRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 23736 var pCsr uintptr = cur 23737 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, 0) 23738 return SQLITE_OK 23739 } 23740 23741 func unionEof(tls *libc.TLS, cur uintptr) int32 { 23742 var pCsr uintptr = cur 23743 return libc.Bool32((*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 23744 } 23745 23746 func unionFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 23747 bp := tls.Alloc(108) 23748 defer tls.Free(108) 23749 23750 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 23751 var pCsr uintptr = pVtabCursor 23752 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 23753 var i int32 23754 var zSql uintptr = uintptr(0) 23755 var bZero int32 = 0 23756 23757 var iMin sqlite3_int64 = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 23758 var iMax sqlite3_int64 = int64(0xffffffff) | int64(0x7fffffff)<<32 23759 23760 _ = idxStr 23761 23762 if idxNum == SQLITE_INDEX_CONSTRAINT_EQ { 23763 iMin = libc.AssignInt64(&iMax, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 23764 } else { 23765 if idxNum&(SQLITE_INDEX_CONSTRAINT_LE|SQLITE_INDEX_CONSTRAINT_LT) != 0 { 23766 iMax = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 23767 if idxNum&SQLITE_INDEX_CONSTRAINT_LT != 0 { 23768 if iMax == int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) { 23769 bZero = 1 23770 } else { 23771 iMax-- 23772 } 23773 } 23774 } 23775 23776 if idxNum&(SQLITE_INDEX_CONSTRAINT_GE|SQLITE_INDEX_CONSTRAINT_GT) != 0 { 23777 iMin = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(argc-1)*4))) 23778 if idxNum&SQLITE_INDEX_CONSTRAINT_GT != 0 { 23779 if iMin == int64(0xffffffff)|int64(0x7fffffff)<<32 { 23780 bZero = 1 23781 } else { 23782 iMin++ 23783 } 23784 } 23785 } 23786 } 23787 23788 unionFinalizeCsrStmt(tls, pCsr) 23789 if bZero != 0 { 23790 return SQLITE_OK 23791 } 23792 23793 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23794 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*44 23795 if iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax || iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23796 continue 23797 } 23798 23799 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9326, libc.VaList(bp, zSql, func() uintptr { 23800 if zSql != 0 { 23801 return ts + 9360 23802 } 23803 return ts + 584 23804 }(), func() uintptr { 23805 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23806 return ts + 5624 23807 } 23808 return ts + 584 23809 }(), func() uintptr { 23810 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23811 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 23812 } 23813 return ts + 584 23814 }(), func() uintptr { 23815 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23816 return ts + 5626 23817 } 23818 return ts + 584 23819 }(), (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 23820 if zSql == uintptr(0) { 23821 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 23822 break 23823 } 23824 23825 if iMin == iMax { 23826 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9372, libc.VaList(bp+48, zSql, iMin)) 23827 } else { 23828 var zWhere uintptr = ts + 9392 23829 if iMin != int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) && iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23830 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9398, libc.VaList(bp+64, zSql, iMin)) 23831 zWhere = ts + 9419 23832 } 23833 if iMax != int64(0xffffffff)|int64(0x7fffffff)<<32 && iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax { 23834 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9423, libc.VaList(bp+80, zSql, zWhere, iMax)) 23835 } 23836 } 23837 23838 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23839 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab = i 23840 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid = iMax 23841 *(*int32)(unsafe.Pointer(bp + 104)) = unionOpenDatabase(tls, pTab, i, pTab+8) 23842 break 23843 } 23844 } 23845 23846 if zSql == uintptr(0) { 23847 return *(*int32)(unsafe.Pointer(bp + 104)) 23848 } else { 23849 var db uintptr = func() uintptr { 23850 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23851 return (*UnionSrc)(unsafe.Pointer((*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*44)).Fdb 23852 } 23853 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23854 }() 23855 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPrepare(tls, bp+104, db, zSql, pTab+8) 23856 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 23857 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 23858 } 23859 sqlite3.Xsqlite3_free(tls, zSql) 23860 } 23861 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 23862 return *(*int32)(unsafe.Pointer(bp + 104)) 23863 } 23864 return unionNext(tls, pVtabCursor) 23865 } 23866 23867 func unionBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 23868 var pTab uintptr = tab 23869 var iEq int32 = -1 23870 var iLt int32 = -1 23871 var iGt int32 = -1 23872 var i int32 23873 23874 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 23875 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 23876 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) { 23877 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) { 23878 case SQLITE_INDEX_CONSTRAINT_EQ: 23879 iEq = i 23880 break 23881 fallthrough 23882 case SQLITE_INDEX_CONSTRAINT_LE: 23883 fallthrough 23884 case SQLITE_INDEX_CONSTRAINT_LT: 23885 iLt = i 23886 break 23887 fallthrough 23888 case SQLITE_INDEX_CONSTRAINT_GE: 23889 fallthrough 23890 case SQLITE_INDEX_CONSTRAINT_GT: 23891 iGt = i 23892 break 23893 } 23894 } 23895 } 23896 23897 if iEq >= 0 { 23898 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1) 23899 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags = SQLITE_INDEX_SCAN_UNIQUE 23900 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 23901 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SQLITE_INDEX_CONSTRAINT_EQ 23902 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).FargvIndex = 1 23903 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).Fomit = uint8(1) 23904 } else { 23905 var iCons int32 = 1 23906 var idxNum int32 = 0 23907 var nRow sqlite3_int64 = int64(1000000) 23908 if iLt >= 0 { 23909 nRow = nRow / int64(2) 23910 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 23911 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).Fomit = uint8(1) 23912 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iLt)*12)).Fop) 23913 } 23914 if iGt >= 0 { 23915 nRow = nRow / int64(2) 23916 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 23917 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).Fomit = uint8(1) 23918 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iGt)*12)).Fop) 23919 } 23920 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = nRow 23921 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 * float64(nRow) 23922 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 23923 } 23924 23925 return SQLITE_OK 23926 } 23927 23928 func createUnionVtab(tls *libc.TLS, db uintptr) int32 { 23929 var rc int32 23930 23931 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8921, uintptr(unsafe.Pointer(&unionModule)), uintptr(0)) 23932 if rc == SQLITE_OK { 23933 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8911, uintptr(unsafe.Pointer(&unionModule)), db) 23934 } 23935 return rc 23936 } 23937 23938 var unionModule = sqlite3_module{ 23939 FxCreate: 0, 23940 FxConnect: 0, 23941 FxBestIndex: 0, 23942 FxDisconnect: 0, 23943 FxDestroy: 0, 23944 FxOpen: 0, 23945 FxClose: 0, 23946 FxFilter: 0, 23947 FxNext: 0, 23948 FxEof: 0, 23949 FxColumn: 0, 23950 FxRowid: 0, 23951 } 23952 23953 func sqlite3_unionvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 23954 var rc int32 = SQLITE_OK 23955 _ = pApi 23956 23957 _ = pzErrMsg 23958 rc = createUnionVtab(tls, db) 23959 return rc 23960 } 23961 23962 type wholenumber_cursor1 = struct { 23963 Fbase sqlite3_vtab_cursor 23964 FiValue sqlite3_int64 23965 FmxValue sqlite3_int64 23966 } 23967 23968 type wholenumber_cursor = wholenumber_cursor1 23969 23970 func wholenumberConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 23971 var pNew uintptr 23972 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 23973 if pNew == uintptr(0) { 23974 return SQLITE_NOMEM 23975 } 23976 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+9441) 23977 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 23978 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(sqlite3_vtab{}))) 23979 return SQLITE_OK 23980 } 23981 23982 func wholenumberDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 23983 sqlite3.Xsqlite3_free(tls, pVtab) 23984 return SQLITE_OK 23985 } 23986 23987 func wholenumberOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 23988 var pCur uintptr 23989 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(wholenumber_cursor{}))) 23990 if pCur == uintptr(0) { 23991 return SQLITE_NOMEM 23992 } 23993 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(wholenumber_cursor{}))) 23994 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 23995 return SQLITE_OK 23996 } 23997 23998 func wholenumberClose(tls *libc.TLS, cur uintptr) int32 { 23999 sqlite3.Xsqlite3_free(tls, cur) 24000 return SQLITE_OK 24001 } 24002 24003 func wholenumberNext(tls *libc.TLS, cur uintptr) int32 { 24004 var pCur uintptr = cur 24005 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue++ 24006 return SQLITE_OK 24007 } 24008 24009 func wholenumberColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 24010 var pCur uintptr = cur 24011 sqlite3.Xsqlite3_result_int64(tls, ctx, (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue) 24012 return SQLITE_OK 24013 } 24014 24015 func wholenumberRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 24016 var pCur uintptr = cur 24017 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue 24018 return SQLITE_OK 24019 } 24020 24021 func wholenumberEof(tls *libc.TLS, cur uintptr) int32 { 24022 var pCur uintptr = cur 24023 return libc.Bool32((*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue || (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue == int64(0)) 24024 } 24025 24026 func wholenumberFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 24027 var pCur uintptr = pVtabCursor 24028 var v sqlite3_int64 24029 var i int32 = 0 24030 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = int64(1) 24031 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 24032 if idxNum&3 != 0 { 24033 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) + sqlite3_int64(idxNum&1) 24034 if v > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v <= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 24035 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = v 24036 } 24037 i++ 24038 } 24039 if idxNum&12 != 0 { 24040 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) - sqlite3_int64(idxNum>>2&1) 24041 if v >= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v < (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 24042 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = v 24043 } 24044 } 24045 return SQLITE_OK 24046 } 24047 24048 func wholenumberBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 24049 var i int32 24050 var idxNum int32 = 0 24051 var argvIdx int32 = 1 24052 var ltIdx int32 = -1 24053 var gtIdx int32 = -1 24054 var pConstraint uintptr 24055 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 24056 i = 0 24057 __1: 24058 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 24059 goto __3 24060 } 24061 { 24062 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 24063 goto __2 24064 } 24065 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GT { 24066 idxNum = idxNum | 1 24067 ltIdx = i 24068 } 24069 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GE { 24070 idxNum = idxNum | 2 24071 ltIdx = i 24072 } 24073 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 24074 idxNum = idxNum | 4 24075 gtIdx = i 24076 } 24077 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE { 24078 idxNum = idxNum | 8 24079 gtIdx = i 24080 } 24081 24082 } 24083 goto __2 24084 __2: 24085 i++ 24086 pConstraint += 12 24087 goto __1 24088 goto __3 24089 __3: 24090 ; 24091 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 24092 if ltIdx >= 0 { 24093 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).FargvIndex = libc.PostIncInt32(&argvIdx, 1) 24094 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).Fomit = uint8(1) 24095 } 24096 if gtIdx >= 0 { 24097 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).FargvIndex = argvIdx 24098 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).Fomit = uint8(1) 24099 } 24100 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 24101 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 24102 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 24103 } 24104 if idxNum&12 == 0 { 24105 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e99 24106 } else if idxNum&3 == 0 { 24107 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 24108 } else { 24109 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 24110 } 24111 return SQLITE_OK 24112 } 24113 24114 var wholenumberModule = sqlite3_module{ 24115 FxCreate: 0, 24116 FxConnect: 0, 24117 FxBestIndex: 0, 24118 FxDisconnect: 0, 24119 FxDestroy: 0, 24120 FxOpen: 0, 24121 FxClose: 0, 24122 FxFilter: 0, 24123 FxNext: 0, 24124 FxEof: 0, 24125 FxColumn: 0, 24126 FxRowid: 0, 24127 } 24128 24129 func sqlite3_wholenumber_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 24130 var rc int32 = SQLITE_OK 24131 _ = pApi 24132 24133 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+9463, uintptr(unsafe.Pointer(&wholenumberModule)), uintptr(0)) 24134 return rc 24135 } 24136 24137 func test_rbu_delta(tls *libc.TLS, pCtx uintptr, nArg int32, apVal uintptr) { 24138 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 24139 var pScript uintptr 24140 var i int32 24141 24142 pScript = tcl.XTcl_NewObj(tls) 24143 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 24144 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, ts+9475, -1)) 24145 for i = 0; i < nArg; i++ { 24146 var pIn uintptr = *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*4)) 24147 var z uintptr = sqlite3.Xsqlite3_value_text(tls, pIn) 24148 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, z, -1)) 24149 } 24150 24151 if TCL_OK == tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_GLOBAL_ONLY) { 24152 var z uintptr = tcl.XTcl_GetStringResult(tls, interp) 24153 sqlite3.Xsqlite3_result_text(tls, pCtx, z, -1, libc.UintptrFromInt32(-1)) 24154 } else { 24155 tcl.XTcl_BackgroundError(tls, interp) 24156 } 24157 24158 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 24159 var _objPtr uintptr = pScript 24160 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 24161 tcl.XTclFreeObj(tls, _objPtr) 24162 } 24163 } 24164 } 24165 24166 func test_sqlite3rbu_cmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24167 bp := tls.Alloc(296) 24168 defer tls.Free(296) 24169 24170 var ret int32 = TCL_OK 24171 var pRbu uintptr = clientData 24172 *(*[14]RbuCmd)(unsafe.Pointer(bp + 24)) = [14]RbuCmd{ 24173 {FzName: ts + 9485, FnArg: 2, FzUsage: ts + 584}, 24174 {FzName: ts + 9490, FnArg: 2, FzUsage: ts + 584}, 24175 {FzName: ts + 9496, FnArg: 2, FzUsage: ts + 584}, 24176 {FzName: ts + 9513, FnArg: 2, FzUsage: ts + 584}, 24177 {FzName: ts + 9523, FnArg: 3, FzUsage: ts + 9535}, 24178 {FzName: ts + 9539, FnArg: 2, FzUsage: ts + 584}, 24179 {FzName: ts + 9551, FnArg: 3, FzUsage: ts + 9554}, 24180 {FzName: ts + 9558, FnArg: 2, FzUsage: ts + 584}, 24181 {FzName: ts + 9564, FnArg: 2, FzUsage: ts + 584}, 24182 {FzName: ts + 9573, FnArg: 2, FzUsage: ts + 584}, 24183 {FzName: ts + 9588, FnArg: 3, FzUsage: ts + 9604}, 24184 {FzName: ts + 9610, FnArg: 2, FzUsage: ts + 584}, 24185 {FzName: ts + 9620, FnArg: 3, FzUsage: ts + 9535}, 24186 {}, 24187 } 24188 24189 if objc < 2 { 24190 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9631) 24191 return TCL_ERROR 24192 } 24193 ret = tcl.XTcl_GetIndexFromObjStruct(tls, 24194 interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+24, int32(unsafe.Sizeof(RbuCmd{})), ts+9638, 0, bp+192) 24195 if ret != 0 { 24196 return TCL_ERROR 24197 } 24198 if objc != (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 192)))*12)).FnArg { 24199 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 192)))*12)).FzUsage) 24200 return TCL_ERROR 24201 } 24202 24203 switch *(*int32)(unsafe.Pointer(bp + 192)) { 24204 case 0: 24205 { 24206 var rc int32 = sqlite3.Xsqlite3rbu_step(tls, pRbu) 24207 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24208 break 24209 24210 } 24211 24212 case 9: 24213 fallthrough 24214 case 1: 24215 { 24216 *(*uintptr)(unsafe.Pointer(bp + 196)) = uintptr(0) 24217 var rc int32 24218 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 24219 if *(*int32)(unsafe.Pointer(bp + 192)) == 1 { 24220 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, bp+196) 24221 } else { 24222 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, uintptr(0)) 24223 } 24224 if rc == SQLITE_OK || rc == SQLITE_DONE { 24225 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24226 24227 } else { 24228 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24229 if *(*uintptr)(unsafe.Pointer(bp + 196)) != 0 { 24230 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, *(*uintptr)(unsafe.Pointer(bp + 196)), 0)) 24231 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 196))) 24232 } 24233 ret = TCL_ERROR 24234 } 24235 break 24236 24237 } 24238 24239 case 2: 24240 { 24241 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, 0) 24242 var rc int32 = sqlite3.Xsqlite3_create_function(tls, 24243 db, ts+9475, -1, SQLITE_UTF8, interp, *(*uintptr)(unsafe.Pointer(&struct { 24244 f func(*libc.TLS, uintptr, int32, uintptr) 24245 }{test_rbu_delta})), uintptr(0), uintptr(0)) 24246 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24247 ret = func() int32 { 24248 if rc == SQLITE_OK { 24249 return TCL_OK 24250 } 24251 return TCL_ERROR 24252 }() 24253 break 24254 24255 } 24256 24257 case 3: 24258 { 24259 var rc int32 = sqlite3.Xsqlite3rbu_savestate(tls, pRbu) 24260 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24261 ret = func() int32 { 24262 if rc == SQLITE_OK { 24263 return TCL_OK 24264 } 24265 return TCL_ERROR 24266 }() 24267 break 24268 24269 } 24270 24271 case 12: 24272 fallthrough 24273 case 4: 24274 { 24275 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 192)) == 12)) 24276 var rc int32 = sqlite3.Xsqlite3_exec(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), uintptr(0), uintptr(0), uintptr(0)) 24277 if rc != SQLITE_OK { 24278 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, db), -1)) 24279 ret = TCL_ERROR 24280 } 24281 break 24282 24283 } 24284 24285 case 5: 24286 { 24287 var pObj uintptr 24288 sqlite3.Xsqlite3rbu_bp_progress(tls, pRbu, bp+200, bp+204) 24289 24290 pObj = tcl.XTcl_NewObj(tls) 24291 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 200)))) 24292 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 204)))) 24293 tcl.XTcl_SetObjResult(tls, interp, pObj) 24294 break 24295 24296 } 24297 24298 case 6: 24299 { 24300 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+208) != 0 { 24301 ret = TCL_ERROR 24302 } else { 24303 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, *(*int32)(unsafe.Pointer(bp + 208))) 24304 if sqlite3TestMakePointerStr(tls, interp, bp+212, db) != 0 { 24305 ret = TCL_ERROR 24306 } else { 24307 tcl.XTcl_SetResult(tls, interp, bp+212, uintptr(1)) 24308 } 24309 } 24310 break 24311 24312 } 24313 case 7: 24314 { 24315 *(*[6]uintptr)(unsafe.Pointer(bp + 264)) = [6]uintptr{uintptr(0), ts + 9649, ts + 9653, ts + 9658, ts + 9669, ts + 9674} 24316 var eState int32 = sqlite3.Xsqlite3rbu_state(tls, pRbu) 24317 24318 tcl.XTcl_SetResult(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 264 + uintptr(eState)*4)), uintptr(0)) 24319 break 24320 24321 } 24322 case 8: 24323 { 24324 var nStep sqlite3_int64 = sqlite3.Xsqlite3rbu_progress(tls, pRbu) 24325 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nStep)) 24326 break 24327 24328 } 24329 24330 case 10: 24331 { 24332 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+288) != 0 { 24333 ret = TCL_ERROR 24334 } else { 24335 *(*sqlite3_int64)(unsafe.Pointer(bp + 288)) = sqlite3.Xsqlite3rbu_temp_size_limit(tls, pRbu, *(*sqlite3_int64)(unsafe.Pointer(bp + 288))) 24336 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 288)))) 24337 } 24338 break 24339 24340 } 24341 case 11: 24342 { 24343 var sz sqlite3_int64 = sqlite3.Xsqlite3rbu_temp_size(tls, pRbu) 24344 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sz)) 24345 break 24346 24347 } 24348 24349 default: 24350 break 24351 } 24352 24353 return ret 24354 } 24355 24356 type RbuCmd = struct { 24357 FzName uintptr 24358 FnArg int32 24359 FzUsage uintptr 24360 } 24361 24362 func test_sqlite3rbu(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24363 var pRbu uintptr = uintptr(0) 24364 var zCmd uintptr 24365 var zTarget uintptr 24366 var zRbu uintptr 24367 var zStateDb uintptr = uintptr(0) 24368 24369 if objc != 4 && objc != 5 { 24370 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9680) 24371 return TCL_ERROR 24372 } 24373 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 24374 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 24375 zRbu = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 24376 if objc == 5 { 24377 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))) 24378 } 24379 24380 pRbu = sqlite3.Xsqlite3rbu_open(tls, zTarget, zRbu, zStateDb) 24381 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 24382 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 24383 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 24384 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 24385 return TCL_OK 24386 } 24387 24388 func test_sqlite3rbu_vacuum(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24389 var pRbu uintptr = uintptr(0) 24390 var zCmd uintptr 24391 var zTarget uintptr 24392 var zStateDb uintptr = uintptr(0) 24393 24394 if objc != 3 && objc != 4 { 24395 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9713) 24396 return TCL_ERROR 24397 } 24398 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 24399 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 24400 if objc == 4 { 24401 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 24402 } 24403 if zStateDb != 0 && int32(*(*int8)(unsafe.Pointer(zStateDb))) == 0 { 24404 zStateDb = uintptr(0) 24405 } 24406 24407 pRbu = sqlite3.Xsqlite3rbu_vacuum(tls, zTarget, zStateDb) 24408 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 24409 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 24410 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 24411 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 24412 return TCL_OK 24413 } 24414 24415 func test_sqlite3rbu_create_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24416 var zName uintptr 24417 var zParent uintptr 24418 var rc int32 24419 24420 if objc != 3 && objc != 4 { 24421 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9739) 24422 return TCL_ERROR 24423 } 24424 24425 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*4))) 24426 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4))) 24427 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 24428 zParent = uintptr(0) 24429 } 24430 24431 rc = sqlite3.Xsqlite3rbu_create_vfs(tls, zName, zParent) 24432 if rc != SQLITE_OK { 24433 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24434 return TCL_ERROR 24435 } else if objc == 4 { 24436 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, zName) 24437 sqlite3.Xsqlite3_vfs_register(tls, pVfs, 1) 24438 } 24439 24440 tcl.XTcl_ResetResult(tls, interp) 24441 return TCL_OK 24442 } 24443 24444 func test_sqlite3rbu_destroy_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24445 var zName uintptr 24446 24447 if objc != 2 { 24448 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 24449 return TCL_ERROR 24450 } 24451 24452 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 24453 sqlite3.Xsqlite3rbu_destroy_vfs(tls, zName) 24454 return TCL_OK 24455 } 24456 24457 func test_sqlite3rbu_internal_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24458 bp := tls.Alloc(16) 24459 defer tls.Free(16) 24460 24461 var db uintptr 24462 24463 if objc != 1 { 24464 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 24465 return TCL_ERROR 24466 } 24467 24468 db = sqlite3.Xsqlite3rbu_db(tls, uintptr(0), 0) 24469 if db != uintptr(0) { 24470 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9767, 0)) 24471 return TCL_ERROR 24472 } 24473 24474 return TCL_OK 24475 } 24476 24477 func SqliteRbu_Init(tls *libc.TLS, interp uintptr) int32 { 24478 var i int32 24479 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd))/uint32(unsafe.Sizeof(struct { 24480 FzName uintptr 24481 FxProc uintptr 24482 }{})); i++ { 24483 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd[i].FzName, aObjCmd[i].FxProc, uintptr(0), uintptr(0)) 24484 } 24485 return TCL_OK 24486 } 24487 24488 var aObjCmd = [5]struct { 24489 FzName uintptr 24490 FxProc uintptr 24491 }{ 24492 {FzName: ts + 9790, FxProc: 0}, 24493 {FzName: ts + 9801, FxProc: 0}, 24494 {FzName: ts + 9819, FxProc: 0}, 24495 {FzName: ts + 9841, FxProc: 0}, 24496 {FzName: ts + 9864, FxProc: 0}, 24497 } 24498 24499 type sqlite31 = sqlite32 24500 24501 type sqlite3_str = sqlite3_str1 24502 24503 type uint8_t = uint8 24504 type uint16_t = uint16 24505 type uint32_t = uint32 24506 type uint64_t = uint64 24507 24508 type int_least8_t = int8 24509 type int_least16_t = int16 24510 type int_least32_t = int32 24511 type int_least64_t = int64 24512 24513 type uint_least8_t = uint8 24514 type uint_least16_t = uint16 24515 type uint_least32_t = uint32 24516 type uint_least64_t = uint64 24517 24518 type int_fast8_t = int8 24519 type int_fast16_t = int32 24520 type int_fast32_t = int32 24521 24522 type int_fast64_t = int64 24523 24524 type uint_fast8_t = uint8 24525 type uint_fast16_t = uint32 24526 type uint_fast32_t = uint32 24527 24528 type uint_fast64_t = uint64 24529 type uintptr_t = uint32 24530 24531 type intmax_t = int64 24532 type uintmax_t = uint64 24533 24534 type imaxdiv_t = struct { 24535 Fquot int64 24536 Frem int64 24537 } 24538 24539 type Hash1 = struct { 24540 Fhtsize uint32 24541 Fcount uint32 24542 Ffirst uintptr 24543 Fht uintptr 24544 } 24545 24546 type Hash = Hash1 24547 type HashElem1 = struct { 24548 Fnext uintptr 24549 Fprev uintptr 24550 Fdata uintptr 24551 FpKey uintptr 24552 } 24553 24554 type HashElem = HashElem1 24555 24556 type _ht = struct { 24557 Fcount uint32 24558 Fchain uintptr 24559 } 24560 24561 type max_align_t = struct { 24562 F__max_align_ll int64 24563 F__max_align_ld float64 24564 F__max_align_f128 float64 24565 } 24566 type i16 = int16_t 24567 type i8 = int8_t 24568 24569 type tRowcnt = u32 24570 24571 type LogEst = int16_t 24572 24573 type uptr = uintptr_t 24574 24575 type BusyHandler1 = struct { 24576 FxBusyHandler uintptr 24577 FpBusyArg uintptr 24578 FnBusy int32 24579 } 24580 24581 type BusyHandler = BusyHandler1 24582 24583 type AggInfo1 = struct { 24584 FdirectMode u8 24585 FuseSortingIdx u8 24586 F__ccgo_pad1 [2]byte 24587 FsortingIdx int32 24588 FsortingIdxPTab int32 24589 FnSortingColumn int32 24590 FmnReg int32 24591 FmxReg int32 24592 FpGroupBy uintptr 24593 FaCol uintptr 24594 FnColumn int32 24595 FnAccumulator int32 24596 FaFunc uintptr 24597 FnFunc int32 24598 FselId u32 24599 } 24600 24601 type AggInfo = AggInfo1 24602 type AuthContext1 = struct { 24603 FzAuthContext uintptr 24604 FpParse uintptr 24605 } 24606 24607 type AuthContext = AuthContext1 24608 type AutoincInfo1 = struct { 24609 FpNext uintptr 24610 FpTab uintptr 24611 FiDb int32 24612 FregCtr int32 24613 } 24614 24615 type AutoincInfo = AutoincInfo1 24616 type CollSeq1 = struct { 24617 FzName uintptr 24618 Fenc u8 24619 F__ccgo_pad1 [3]byte 24620 FpUser uintptr 24621 FxCmp uintptr 24622 FxDel uintptr 24623 } 24624 24625 type CollSeq = CollSeq1 24626 type Column1 = struct { 24627 FzCnName uintptr 24628 FnotNull uint8 24629 F__ccgo_pad1 [1]byte 24630 Faffinity int8 24631 FszEst u8 24632 FhName u8 24633 F__ccgo_pad2 [1]byte 24634 FiDflt u16 24635 FcolFlags u16 24636 F__ccgo_pad3 [2]byte 24637 } 24638 24639 type Column = Column1 24640 type Cte1 = struct { 24641 FzName uintptr 24642 FpCols uintptr 24643 FpSelect uintptr 24644 FzCteErr uintptr 24645 FpUse uintptr 24646 FeM10d u8 24647 F__ccgo_pad1 [3]byte 24648 } 24649 24650 type Cte = Cte1 24651 type CteUse1 = struct { 24652 FnUse int32 24653 FaddrM9e int32 24654 FregRtn int32 24655 FiCur int32 24656 FnRowEst LogEst 24657 FeM10d u8 24658 F__ccgo_pad1 [1]byte 24659 } 24660 24661 type CteUse = CteUse1 24662 type Db1 = struct { 24663 FzDbSName uintptr 24664 FpBt uintptr 24665 Fsafety_level u8 24666 FbSyncSet u8 24667 F__ccgo_pad1 [2]byte 24668 FpSchema uintptr 24669 } 24670 24671 type Db = Db1 24672 type DbFixer1 = struct { 24673 FpParse uintptr 24674 Fw Walker 24675 FpSchema uintptr 24676 FbTemp u8 24677 F__ccgo_pad1 [3]byte 24678 FzDb uintptr 24679 FzType uintptr 24680 FpName uintptr 24681 } 24682 24683 type DbFixer = DbFixer1 24684 type Schema1 = struct { 24685 Fschema_cookie int32 24686 FiGeneration int32 24687 FtblHash Hash 24688 FidxHash Hash 24689 FtrigHash Hash 24690 FfkeyHash Hash 24691 FpSeqTab uintptr 24692 Ffile_format u8 24693 Fenc u8 24694 FschemaFlags u16 24695 Fcache_size int32 24696 } 24697 24698 type Schema = Schema1 24699 type Expr1 = struct { 24700 Fop u8 24701 FaffExpr int8 24702 Fop2 u8 24703 F__ccgo_pad1 [1]byte 24704 Fflags u32 24705 Fu struct{ FzToken uintptr } 24706 FpLeft uintptr 24707 FpRight uintptr 24708 Fx struct{ FpList uintptr } 24709 FnHeight int32 24710 FiTable int32 24711 FiColumn ynVar 24712 FiAgg i16 24713 Fw struct{ FiJoin int32 } 24714 FpAggInfo uintptr 24715 Fy struct { 24716 FpTab uintptr 24717 F__ccgo_pad1 [4]byte 24718 } 24719 } 24720 24721 type Expr = Expr1 24722 type ExprList1 = struct { 24723 FnExpr int32 24724 FnAlloc int32 24725 Fa [1]struct { 24726 FpExpr uintptr 24727 FzEName uintptr 24728 Ffg struct { 24729 F__ccgo_pad1 [0]uint32 24730 FsortFlags u8 24731 F__ccgo_pad2 [3]byte 24732 FeEName uint16 24733 F__ccgo_pad3 [2]byte 24734 } 24735 Fu struct { 24736 F__ccgo_pad1 [0]uint32 24737 Fx struct { 24738 FiOrderByCol u16 24739 FiAlias u16 24740 } 24741 } 24742 } 24743 } 24744 24745 type ExprList = ExprList1 24746 type FKey1 = struct { 24747 FpFrom uintptr 24748 FpNextFrom uintptr 24749 FzTo uintptr 24750 FpNextTo uintptr 24751 FpPrevTo uintptr 24752 FnCol int32 24753 FisDeferred u8 24754 FaAction [2]u8 24755 F__ccgo_pad1 [1]byte 24756 FapTrigger [2]uintptr 24757 FaCol [1]struct { 24758 FiFrom int32 24759 FzCol uintptr 24760 } 24761 } 24762 24763 type FKey = FKey1 24764 type FuncDestructor1 = struct { 24765 FnRef int32 24766 FxDestroy uintptr 24767 FpUserData uintptr 24768 } 24769 24770 type FuncDestructor = FuncDestructor1 24771 type FuncDef1 = struct { 24772 FnArg i8 24773 F__ccgo_pad1 [3]byte 24774 FfuncFlags u32 24775 FpUserData uintptr 24776 FpNext uintptr 24777 FxSFunc uintptr 24778 FxFinalize uintptr 24779 FxValue uintptr 24780 FxInverse uintptr 24781 FzName uintptr 24782 Fu struct{ FpHash uintptr } 24783 } 24784 24785 type FuncDef = FuncDef1 24786 type FuncDefHash1 = struct{ Fa [23]uintptr } 24787 24788 type FuncDefHash = FuncDefHash1 24789 type IdList1 = struct { 24790 FnId int32 24791 FeU4 u8 24792 F__ccgo_pad1 [3]byte 24793 Fa [1]struct { 24794 FzName uintptr 24795 Fu4 struct{ Fidx int32 } 24796 } 24797 } 24798 24799 type IdList = IdList1 24800 type Index1 = struct { 24801 FzName uintptr 24802 FaiColumn uintptr 24803 FaiRowLogEst uintptr 24804 FpTable uintptr 24805 FzColAff uintptr 24806 FpNext uintptr 24807 FpSchema uintptr 24808 FaSortOrder uintptr 24809 FazColl uintptr 24810 FpPartIdxWhere uintptr 24811 FaColExpr uintptr 24812 Ftnum Pgno 24813 FszIdxRow LogEst 24814 FnKeyCol u16 24815 FnColumn u16 24816 FonError u8 24817 F__ccgo_pad1 [1]byte 24818 FidxType uint16 24819 F__ccgo_pad2 [2]byte 24820 FnSample int32 24821 FnSampleCol int32 24822 FaAvgEq uintptr 24823 FaSample uintptr 24824 FaiRowEst uintptr 24825 FnRowEst0 tRowcnt 24826 FcolNotIdxed Bitmask 24827 } 24828 24829 type Index = Index1 24830 type IndexSample1 = struct { 24831 Fp uintptr 24832 Fn int32 24833 FanEq uintptr 24834 FanLt uintptr 24835 FanDLt uintptr 24836 } 24837 24838 type IndexSample = IndexSample1 24839 type KeyInfo1 = struct { 24840 FnRef u32 24841 Fenc u8 24842 F__ccgo_pad1 [1]byte 24843 FnKeyField u16 24844 FnAllField u16 24845 F__ccgo_pad2 [2]byte 24846 Fdb uintptr 24847 FaSortFlags uintptr 24848 FaColl [1]uintptr 24849 } 24850 24851 type KeyInfo = KeyInfo1 24852 type Lookaside1 = struct { 24853 FbDisable u32 24854 Fsz u16 24855 FszTrue u16 24856 FbMalloced u8 24857 F__ccgo_pad1 [3]byte 24858 FnSlot u32 24859 FanStat [3]u32 24860 FpInit uintptr 24861 FpFree uintptr 24862 FpSmallInit uintptr 24863 FpSmallFree uintptr 24864 FpMiddle uintptr 24865 FpStart uintptr 24866 FpEnd uintptr 24867 } 24868 24869 type Lookaside = Lookaside1 24870 type LookasideSlot1 = struct{ FpNext uintptr } 24871 24872 type LookasideSlot = LookasideSlot1 24873 type Module1 = struct { 24874 FpModule uintptr 24875 FzName uintptr 24876 FnRefModule int32 24877 FpAux uintptr 24878 FxDestroy uintptr 24879 FpEpoTab uintptr 24880 } 24881 24882 type Module = Module1 24883 type NameContext1 = struct { 24884 FpParse uintptr 24885 FpSrcList uintptr 24886 FuNC struct{ FpEList uintptr } 24887 FpNext uintptr 24888 FnRef int32 24889 FnNcErr int32 24890 FncFlags int32 24891 FpWinSelect uintptr 24892 } 24893 24894 type NameContext = NameContext1 24895 type OnOrUsing1 = struct { 24896 FpOn uintptr 24897 FpUsing uintptr 24898 } 24899 24900 type OnOrUsing = OnOrUsing1 24901 type Parse1 = struct { 24902 Fdb uintptr 24903 FzErrMsg uintptr 24904 FpVdbe uintptr 24905 Frc int32 24906 FcolNamesSet u8 24907 FcheckSchema u8 24908 Fnested u8 24909 FnTempReg u8 24910 FisMultiWrite u8 24911 FmayAbort u8 24912 FhasCompound u8 24913 FokConstFactor u8 24914 FdisableLookaside u8 24915 FdisableVtab u8 24916 FwithinRJSubrtn u8 24917 F__ccgo_pad1 [1]byte 24918 FnRangeReg int32 24919 FiRangeReg int32 24920 FnErr int32 24921 FnTab int32 24922 FnMem int32 24923 FszOpAlloc int32 24924 FiSelfTab int32 24925 FnLabel int32 24926 FnLabelAlloc int32 24927 FaLabel uintptr 24928 FpConstExpr uintptr 24929 FconstraintName Token 24930 FwriteMask yDbMask 24931 FcookieMask yDbMask 24932 FregRowid int32 24933 FregRoot int32 24934 FnMaxArg int32 24935 FnSelect int32 24936 FnTableLock int32 24937 FaTableLock uintptr 24938 FpAinc uintptr 24939 FpToplevel uintptr 24940 FpTriggerTab uintptr 24941 FpTriggerPrg uintptr 24942 FpCleanup uintptr 24943 Fu1 struct{ FaddrCrTab int32 } 24944 FnQueryLoop u32 24945 Foldmask u32 24946 Fnewmask u32 24947 FeTriggerOp u8 24948 FbReturning u8 24949 FeOrconf u8 24950 FdisableTriggers u8 24951 FaTempReg [8]int32 24952 FpOuterParse uintptr 24953 FsNameToken Token 24954 FsLastToken Token 24955 FnVar ynVar 24956 FiPkSortOrder u8 24957 Fexplain u8 24958 FeParseMode u8 24959 F__ccgo_pad2 [3]byte 24960 FnVtabLock int32 24961 FnHeight int32 24962 FaddrExplain int32 24963 FpVList uintptr 24964 FpReprepare uintptr 24965 FzTail uintptr 24966 FpNewTable uintptr 24967 FpNewIndex uintptr 24968 FpNewTrigger uintptr 24969 FzAuthContext uintptr 24970 FsArg Token 24971 FapVtabLock uintptr 24972 FpWith uintptr 24973 FpRename uintptr 24974 } 24975 24976 type Parse = Parse1 24977 type ParseCleanup1 = struct { 24978 FpNext uintptr 24979 FpPtr uintptr 24980 FxCleanup uintptr 24981 } 24982 24983 type ParseCleanup = ParseCleanup1 24984 type PreUpdate1 = struct { 24985 Fv uintptr 24986 FpCsr uintptr 24987 Fop int32 24988 FaRecord uintptr 24989 Fkeyinfo KeyInfo 24990 FpUnpacked uintptr 24991 FpNewUnpacked uintptr 24992 FiNewReg int32 24993 FiBlobWrite int32 24994 FiKey1 i64 24995 FiKey2 i64 24996 FaNew uintptr 24997 FpTab uintptr 24998 FpPk uintptr 24999 } 25000 25001 type PrintfArguments1 = struct { 25002 FnArg int32 25003 FnUsed int32 25004 FapArg uintptr 25005 } 25006 25007 type PrintfArguments = PrintfArguments1 25008 type Returning1 = struct { 25009 FpParse uintptr 25010 FpReturnEL uintptr 25011 FretTrig Trigger 25012 FretTStep TriggerStep 25013 FiRetCur int32 25014 FnRetCol int32 25015 FiRetReg int32 25016 } 25017 25018 type Returning = Returning1 25019 type Savepoint1 = struct { 25020 FzName uintptr 25021 FnDeferredCons i64 25022 FnDeferredImmCons i64 25023 FpNext uintptr 25024 } 25025 25026 type Savepoint = Savepoint1 25027 type Select1 = struct { 25028 Fop u8 25029 F__ccgo_pad1 [1]byte 25030 FnSelectRow LogEst 25031 FselFlags u32 25032 FiLimit int32 25033 FiOffset int32 25034 FselId u32 25035 FaddrOpenEphm [2]int32 25036 FpEList uintptr 25037 FpSrc uintptr 25038 FpWhere uintptr 25039 FpGroupBy uintptr 25040 FpHaving uintptr 25041 FpOrderBy uintptr 25042 FpPrior uintptr 25043 FpNext uintptr 25044 FpLimit uintptr 25045 FpWith uintptr 25046 FpWin uintptr 25047 FpWinDefn uintptr 25048 } 25049 25050 type Select = Select1 25051 type SelectDest1 = struct { 25052 FeDest u8 25053 F__ccgo_pad1 [3]byte 25054 FiSDParm int32 25055 FiSDParm2 int32 25056 FiSdst int32 25057 FnSdst int32 25058 FzAffSdst uintptr 25059 FpOrderBy uintptr 25060 } 25061 25062 type SelectDest = SelectDest1 25063 type SrcItem1 = struct { 25064 FpSchema uintptr 25065 FzDatabase uintptr 25066 FzName uintptr 25067 FzAlias uintptr 25068 FpTab uintptr 25069 FpSelect uintptr 25070 FaddrFillSub int32 25071 FregReturn int32 25072 FregResult int32 25073 Ffg struct { 25074 F__ccgo_pad1 [0]uint32 25075 Fjointype u8 25076 F__ccgo_pad2 [3]byte 25077 FnotIndexed uint16 25078 F__ccgo_pad3 [2]byte 25079 } 25080 FiCursor int32 25081 Fu3 struct{ FpOn uintptr } 25082 FcolUsed Bitmask 25083 Fu1 struct{ FzIndexedBy uintptr } 25084 Fu2 struct{ FpIBIndex uintptr } 25085 } 25086 25087 type SrcItem = SrcItem1 25088 type SrcList1 = struct { 25089 FnSrc int32 25090 FnAlloc u32 25091 Fa [1]SrcItem 25092 } 25093 25094 type SrcList = SrcList1 25095 type StrAccum = sqlite3_str1 25096 type Table1 = struct { 25097 FzName uintptr 25098 FaCol uintptr 25099 FpIndex uintptr 25100 FzColAff uintptr 25101 FpCheck uintptr 25102 Ftnum Pgno 25103 FnTabRef u32 25104 FtabFlags u32 25105 FiPKey i16 25106 FnCol i16 25107 FnNVCol i16 25108 FnRowLogEst LogEst 25109 FszTabRow LogEst 25110 FkeyConf u8 25111 FeTabType u8 25112 Fu struct { 25113 Ftab struct { 25114 FaddColOffset int32 25115 FpFKey uintptr 25116 FpDfltList uintptr 25117 } 25118 } 25119 FpTrigger uintptr 25120 FpSchema uintptr 25121 } 25122 25123 type Table = Table1 25124 type Token1 = struct { 25125 Fz uintptr 25126 Fn uint32 25127 } 25128 25129 type Token = Token1 25130 type Trigger1 = struct { 25131 FzName uintptr 25132 Ftable uintptr 25133 Fop u8 25134 Ftr_tm u8 25135 FbReturning u8 25136 F__ccgo_pad1 [1]byte 25137 FpWhen uintptr 25138 FpColumns uintptr 25139 FpSchema uintptr 25140 FpTabSchema uintptr 25141 Fstep_list uintptr 25142 FpNext uintptr 25143 } 25144 25145 type Trigger = Trigger1 25146 type TriggerPrg1 = struct { 25147 FpTrigger uintptr 25148 FpNext uintptr 25149 FpProgram uintptr 25150 Forconf int32 25151 FaColmask [2]u32 25152 } 25153 25154 type TriggerPrg = TriggerPrg1 25155 type TriggerStep1 = struct { 25156 Fop u8 25157 Forconf u8 25158 F__ccgo_pad1 [2]byte 25159 FpTrig uintptr 25160 FpSelect uintptr 25161 FzTarget uintptr 25162 FpFrom uintptr 25163 FpWhere uintptr 25164 FpExprList uintptr 25165 FpIdList uintptr 25166 FpUpsert uintptr 25167 FzSpan uintptr 25168 FpNext uintptr 25169 FpLast uintptr 25170 } 25171 25172 type TriggerStep = TriggerStep1 25173 type UnpackedRecord1 = struct { 25174 FpKeyInfo uintptr 25175 FaMem uintptr 25176 Fu struct { 25177 Fz uintptr 25178 F__ccgo_pad1 [4]byte 25179 } 25180 Fn int32 25181 FnField u16 25182 Fdefault_rc i8 25183 FerrCode u8 25184 Fr1 i8 25185 Fr2 i8 25186 FeqSeen u8 25187 F__ccgo_pad1 [1]byte 25188 } 25189 25190 type UnpackedRecord = UnpackedRecord1 25191 type Upsert1 = struct { 25192 FpUpsertTarget uintptr 25193 FpUpsertTargetWhere uintptr 25194 FpUpsertSet uintptr 25195 FpUpsertWhere uintptr 25196 FpNextUpsert uintptr 25197 FisDoUpdate u8 25198 F__ccgo_pad1 [3]byte 25199 FpToFree uintptr 25200 FpUpsertIdx uintptr 25201 FpUpsertSrc uintptr 25202 FregData int32 25203 FiDataCur int32 25204 FiIdxCur int32 25205 } 25206 25207 type Upsert = Upsert1 25208 type VTable1 = struct { 25209 Fdb uintptr 25210 FpMod uintptr 25211 FpVtab uintptr 25212 FnRef int32 25213 FbConstraint u8 25214 FeVtabRisk u8 25215 F__ccgo_pad1 [2]byte 25216 FiSavepoint int32 25217 FpNext uintptr 25218 } 25219 25220 type VTable = VTable1 25221 type Walker1 = struct { 25222 FpParse uintptr 25223 FxExprCallback uintptr 25224 FxSelectCallback uintptr 25225 FxSelectCallback2 uintptr 25226 FwalkerDepth int32 25227 FeCode u16 25228 F__ccgo_pad1 [2]byte 25229 Fu struct{ FpNC uintptr } 25230 } 25231 25232 type Walker = Walker1 25233 type Window1 = struct { 25234 FzName uintptr 25235 FzBase uintptr 25236 FpPartition uintptr 25237 FpOrderBy uintptr 25238 FeFrmType u8 25239 FeStart u8 25240 FeEnd u8 25241 FbImplicitFrame u8 25242 FeExclude u8 25243 F__ccgo_pad1 [3]byte 25244 FpStart uintptr 25245 FpEnd uintptr 25246 FppThis uintptr 25247 FpNextWin uintptr 25248 FpFilter uintptr 25249 FpWFunc uintptr 25250 FiEphCsr int32 25251 FregAccum int32 25252 FregResult int32 25253 FcsrApp int32 25254 FregApp int32 25255 FregPart int32 25256 FpOwner uintptr 25257 FnBufferCol int32 25258 FiArgCol int32 25259 FregOne int32 25260 FregStartRowid int32 25261 FregEndRowid int32 25262 FbExprArgs u8 25263 F__ccgo_pad2 [3]byte 25264 } 25265 25266 type Window = Window1 25267 type With1 = struct { 25268 FnCte int32 25269 FbView int32 25270 FpOuter uintptr 25271 Fa [1]Cte 25272 } 25273 25274 type With = With1 25275 25276 type Bitmask = u64 25277 25278 type VList = int32 25279 25280 type Pgno = u32 25281 25282 type PgHdr1 = struct { 25283 FpPage uintptr 25284 FpData uintptr 25285 FpExtra uintptr 25286 FpCache uintptr 25287 FpDirty uintptr 25288 FpPager uintptr 25289 Fpgno Pgno 25290 Fflags u16 25291 FnRef i16 25292 FpDirtyNext uintptr 25293 FpDirtyPrev uintptr 25294 } 25295 25296 type DbPage = PgHdr1 25297 25298 type Btree1 = struct { 25299 Fdb uintptr 25300 FpBt uintptr 25301 FinTrans u8 25302 Fsharable u8 25303 Flocked u8 25304 FhasIncrblobCur u8 25305 FwantToLock int32 25306 FnBackup int32 25307 FiBDataVersion u32 25308 FpNext uintptr 25309 FpPrev uintptr 25310 Flock BtLock 25311 } 25312 25313 type BtCursor1 = struct { 25314 FeState u8 25315 FcurFlags u8 25316 FcurPagerFlags u8 25317 Fhints u8 25318 FskipNext int32 25319 FpBtree uintptr 25320 FaOverflow uintptr 25321 FpKey uintptr 25322 FpBt uintptr 25323 FpNext uintptr 25324 Finfo CellInfo 25325 FnKey i64 25326 FpgnoRoot Pgno 25327 FiPage i8 25328 FcurIntKey u8 25329 Fix u16 25330 FaiIdx [19]u16 25331 F__ccgo_pad1 [2]byte 25332 FpKeyInfo uintptr 25333 FpPage uintptr 25334 FapPage [19]uintptr 25335 } 25336 25337 type BtShared1 = struct { 25338 FpPager uintptr 25339 Fdb uintptr 25340 FpCursor uintptr 25341 FpPage1 uintptr 25342 FopenFlags u8 25343 FautoVacuum u8 25344 FincrVacuum u8 25345 FbDoTruncate u8 25346 FinTransaction u8 25347 Fmax1bytePayload u8 25348 FnReserveWanted u8 25349 F__ccgo_pad1 [1]byte 25350 FbtsFlags u16 25351 FmaxLocal u16 25352 FminLocal u16 25353 FmaxLeaf u16 25354 FminLeaf u16 25355 F__ccgo_pad2 [2]byte 25356 FpageSize u32 25357 FusableSize u32 25358 FnTransaction int32 25359 FnPage u32 25360 FpSchema uintptr 25361 FxFreeSchema uintptr 25362 Fmutex uintptr 25363 FpHasContent uintptr 25364 FnRef int32 25365 FpNext uintptr 25366 FpLock uintptr 25367 FpWriter uintptr 25368 FpTmpSpace uintptr 25369 FnPreformatSize int32 25370 } 25371 25372 type BtreePayload1 = struct { 25373 FpKey uintptr 25374 FnKey sqlite3_int64 25375 FpData uintptr 25376 FaMem uintptr 25377 FnMem u16 25378 F__ccgo_pad1 [2]byte 25379 FnData int32 25380 FnZero int32 25381 } 25382 25383 type BtreePayload = BtreePayload1 25384 25385 type Vdbe1 = struct { 25386 Fdb uintptr 25387 FpPrev uintptr 25388 FpNext uintptr 25389 FpParse uintptr 25390 FnVar ynVar 25391 F__ccgo_pad1 [2]byte 25392 FnMem int32 25393 FnCursor int32 25394 FcacheCtr u32 25395 Fpc int32 25396 Frc int32 25397 FnChange i64 25398 FiStatement int32 25399 FiCurrentTime i64 25400 FnFkConstraint i64 25401 FnStmtDefCons i64 25402 FnStmtDefImmCons i64 25403 FaMem uintptr 25404 FapArg uintptr 25405 FapCsr uintptr 25406 FaVar uintptr 25407 FaOp uintptr 25408 FnOp int32 25409 FnOpAlloc int32 25410 FaColName uintptr 25411 FpResultSet uintptr 25412 FzErrMsg uintptr 25413 FpVList uintptr 25414 FstartTime i64 25415 FnResColumn u16 25416 FerrorAction u8 25417 FminWriteFileFormat u8 25418 FprepFlags u8 25419 FeVdbeState u8 25420 F__ccgo_pad2 [2]byte 25421 Fexpired uint8 25422 F__ccgo_pad3 [3]byte 25423 FbtreeMask yDbMask 25424 FlockMask yDbMask 25425 FaCounter [9]u32 25426 FzSql uintptr 25427 FpFree uintptr 25428 FpFrame uintptr 25429 FpDelFrame uintptr 25430 FnFrame int32 25431 Fexpmask u32 25432 FpProgram uintptr 25433 FpAuxData uintptr 25434 } 25435 25436 type SubProgram1 = struct { 25437 FaOp uintptr 25438 FnOp int32 25439 FnMem int32 25440 FnCsr int32 25441 FaOnce uintptr 25442 Ftoken uintptr 25443 FpNext uintptr 25444 } 25445 25446 type SubProgram = SubProgram1 25447 25448 type VdbeOp1 = struct { 25449 Fopcode u8 25450 Fp4type int8 25451 Fp5 u16 25452 Fp1 int32 25453 Fp2 int32 25454 Fp3 int32 25455 Fp4 struct{ Fi int32 } 25456 FzComment uintptr 25457 } 25458 25459 type p4union = struct{ Fi int32 } 25460 25461 type VdbeOp = VdbeOp1 25462 25463 type VdbeOpList1 = struct { 25464 Fopcode u8 25465 Fp1 int8 25466 Fp2 int8 25467 Fp3 int8 25468 } 25469 25470 type VdbeOpList = VdbeOpList1 25471 25472 type RecordCompare = uintptr 25473 25474 type PgHdr = PgHdr1 25475 25476 type sqlite3_xauth = uintptr 25477 25478 type sqlite3InitInfo = struct { 25479 FnewTnum Pgno 25480 FiDb u8 25481 Fbusy u8 25482 F__ccgo_pad1 [2]byte 25483 ForphanTrigger uint8 25484 F__ccgo_pad2 [3]byte 25485 FazInit uintptr 25486 } 25487 25488 type sColMap = struct { 25489 FiFrom int32 25490 FzCol uintptr 25491 } 25492 25493 type AggInfo_col = struct { 25494 FpTab uintptr 25495 FpCExpr uintptr 25496 FiTable int32 25497 FiMem int32 25498 FiColumn i16 25499 FiSorterColumn i16 25500 } 25501 25502 type AggInfo_func = struct { 25503 FpFExpr uintptr 25504 FpFunc uintptr 25505 FiMem int32 25506 FiDistinct int32 25507 FiDistAddr int32 25508 } 25509 25510 type ynVar = i16 25511 25512 type ExprList_item = struct { 25513 FpExpr uintptr 25514 FzEName uintptr 25515 Ffg struct { 25516 F__ccgo_pad1 [0]uint32 25517 FsortFlags u8 25518 F__ccgo_pad2 [3]byte 25519 FeEName uint16 25520 F__ccgo_pad3 [2]byte 25521 } 25522 Fu struct { 25523 F__ccgo_pad1 [0]uint32 25524 Fx struct { 25525 FiOrderByCol u16 25526 FiAlias u16 25527 } 25528 } 25529 } 25530 25531 type IdList_item = struct { 25532 FzName uintptr 25533 Fu4 struct{ Fidx int32 } 25534 } 25535 25536 type yDbMask = uint32 25537 25538 type InitData = struct { 25539 Fdb uintptr 25540 FpzErrMsg uintptr 25541 FiDb int32 25542 Frc int32 25543 FmInitFlags u32 25544 FnInitRow u32 25545 FmxPage Pgno 25546 } 25547 25548 type Sqlite3Config = struct { 25549 FbMemstat int32 25550 FbCoreMutex u8 25551 FbFullMutex u8 25552 FbOpenUri u8 25553 FbUseCis u8 25554 FbSmallMalloc u8 25555 FbExtraSchemaChecks u8 25556 F__ccgo_pad1 [2]byte 25557 FmxStrlen int32 25558 FneverCorrupt int32 25559 FszLookaside int32 25560 FnLookaside int32 25561 FnStmtSpill int32 25562 Fm sqlite3_mem_methods 25563 Fmutex sqlite3_mutex_methods 25564 Fpcache2 sqlite3_pcache_methods2 25565 FpHeap uintptr 25566 FnHeap int32 25567 FmnReq int32 25568 FmxReq int32 25569 FszMmap sqlite3_int64 25570 FmxMmap sqlite3_int64 25571 FpPage uintptr 25572 FszPage int32 25573 FnPage int32 25574 FmxParserStack int32 25575 FsharedCacheEnabled int32 25576 FszPma u32 25577 FisInit int32 25578 FinProgress int32 25579 FisMutexInit int32 25580 FisMallocInit int32 25581 FisPCacheInit int32 25582 FnRefInitMutex int32 25583 FpInitMutex uintptr 25584 FxLog uintptr 25585 FpLogArg uintptr 25586 FmxMemdbSize sqlite3_int64 25587 FxTestCallback uintptr 25588 FbLocaltimeFault int32 25589 FxAltLocaltime uintptr 25590 FiOnceResetThreshold int32 25591 FszSorterRef u32 25592 FiPrngSeed uint32 25593 } 25594 25595 type BoxGeomCtx1 = struct { 25596 Finterp uintptr 25597 FpScript uintptr 25598 } 25599 25600 type BoxGeomCtx = BoxGeomCtx1 25601 25602 type BoxQueryCtx1 = struct { 25603 Finterp uintptr 25604 FpScript uintptr 25605 } 25606 25607 type BoxQueryCtx = BoxQueryCtx1 25608 25609 func testDelUser(tls *libc.TLS, pCtx uintptr) { 25610 var p uintptr = pCtx 25611 tcl.XTcl_EvalObjEx(tls, (*BoxGeomCtx)(unsafe.Pointer(p)).Finterp, (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript, 0) 25612 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25613 var _objPtr uintptr = (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript 25614 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25615 tcl.XTclFreeObj(tls, _objPtr) 25616 } 25617 } 25618 sqlite3.Xsqlite3_free(tls, p) 25619 } 25620 25621 func invokeTclGeomCb(tls *libc.TLS, zName uintptr, p uintptr, nCoord int32, aCoord uintptr) int32 { 25622 bp := tls.Alloc(88) 25623 defer tls.Free(88) 25624 25625 var rc int32 = SQLITE_OK 25626 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext != 0 { 25627 var pCtx uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext 25628 var interp uintptr = (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp 25629 var pScript uintptr = uintptr(0) 25630 var pParam uintptr = uintptr(0) 25631 var pCoord uintptr = uintptr(0) 25632 var ii int32 25633 var pRes uintptr 25634 25635 pScript = tcl.XTcl_DuplicateObj(tls, (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript) 25636 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 25637 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 25638 25639 sqlite3.Xsqlite3_snprintf(tls, int32(uint32(unsafe.Sizeof([64]int8{}))-uint32(1)), bp+16, ts+9889, libc.VaList(bp, (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext)) 25640 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25641 25642 pParam = tcl.XTcl_NewObj(tls) 25643 for ii = 0; ii < (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam; ii++ { 25644 tcl.XTcl_ListObjAppendElement(tls, 25645 interp, pParam, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + uintptr(ii)*8)))) 25646 } 25647 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pParam) 25648 25649 pCoord = tcl.XTcl_NewObj(tls) 25650 for ii = 0; ii < nCoord; ii++ { 25651 tcl.XTcl_ListObjAppendElement(tls, interp, pCoord, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + uintptr(ii)*8)))) 25652 } 25653 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pCoord) 25654 25655 sqlite3.Xsqlite3_snprintf(tls, int32(uint32(unsafe.Sizeof([64]int8{}))-uint32(1)), bp+16, ts+9889, libc.VaList(bp+8, p)) 25656 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25657 25658 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 25659 if rc != TCL_OK { 25660 rc = SQLITE_ERROR 25661 } else { 25662 *(*int32)(unsafe.Pointer(bp + 80)) = 0 25663 *(*uintptr)(unsafe.Pointer(bp + 84)) = uintptr(0) 25664 25665 pRes = tcl.XTcl_GetObjResult(tls, interp) 25666 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+84) != 0 { 25667 return TCL_ERROR 25668 } 25669 if *(*int32)(unsafe.Pointer(bp + 80)) > 0 { 25670 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 84))))) 25671 if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9892) { 25672 *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) = 0.0 25673 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam = 1 25674 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9897) { 25675 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 25676 rc = SQLITE_ERROR 25677 } else { 25678 var pBGCtx uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(BoxGeomCtx{}))) 25679 if pBGCtx == uintptr(0) { 25680 rc = SQLITE_NOMEM 25681 } else { 25682 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).Finterp = interp 25683 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, pRes) 25684 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript)).FrefCount++ 25685 tcl.XTcl_ListObjReplace(tls, interp, (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript, 0, 1, 0, uintptr(0)) 25686 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pBGCtx 25687 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testDelUser})) 25688 } 25689 } 25690 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9902) { 25691 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 25692 rc = SQLITE_ERROR 25693 } 25694 } 25695 } 25696 } 25697 } 25698 return rc 25699 } 25700 25701 func box_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 25702 var ii int32 25703 25704 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != nCoord { 25705 invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) 25706 return SQLITE_ERROR 25707 } 25708 if invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) != 0 { 25709 return SQLITE_ERROR 25710 } 25711 25712 for ii = 0; ii < nCoord; ii = ii + 2 { 25713 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)) { 25714 *(*int32)(unsafe.Pointer(pRes)) = 0 25715 return SQLITE_OK 25716 } 25717 } 25718 25719 *(*int32)(unsafe.Pointer(pRes)) = 1 25720 25721 return SQLITE_OK 25722 } 25723 25724 func register_box_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25725 bp := tls.Alloc(76) 25726 defer tls.Free(76) 25727 25728 var pCtx uintptr 25729 25730 if objc != 3 { 25731 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 25732 return TCL_ERROR 25733 } 25734 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+8) != 0 { 25735 return TCL_ERROR 25736 } 25737 25738 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(uintptr(0)))) 25739 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp = interp 25740 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 25741 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 25742 25743 sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), ts+9915, *(*uintptr)(unsafe.Pointer(&struct { 25744 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 25745 }{box_geom})), pCtx) 25746 25747 sqlite3.Xsqlite3_snprintf(tls, 64, bp+12, ts+9889, libc.VaList(bp, pCtx)) 25748 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+12, -1)) 25749 return TCL_OK 25750 } 25751 25752 func box_query(tls *libc.TLS, pInfo uintptr) int32 { 25753 bp := tls.Alloc(36) 25754 defer tls.Free(36) 25755 25756 *(*[4]uintptr)(unsafe.Pointer(bp)) = [4]uintptr{ts + 5854, ts + 9929, ts + 9936, uintptr(0)} 25757 var pCtx uintptr = (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FpContext 25758 var interp uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp 25759 var pEval uintptr 25760 var pArg uintptr 25761 var pTmp uintptr = uintptr(0) 25762 var rc int32 25763 var ii int32 25764 25765 pEval = tcl.XTcl_DuplicateObj(tls, (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript) 25766 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 25767 pArg = tcl.XTcl_NewObj(tls) 25768 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 25769 25770 pTmp = tcl.XTcl_NewObj(tls) 25771 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25772 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnParam; ii++ { 25773 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaParam + uintptr(ii)*8))) 25774 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25775 } 25776 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9942, -1)) 25777 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25778 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25779 var _objPtr uintptr = pTmp 25780 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25781 tcl.XTclFreeObj(tls, _objPtr) 25782 } 25783 } 25784 25785 pTmp = tcl.XTcl_NewObj(tls) 25786 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25787 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnCoord; ii++ { 25788 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaCoord + uintptr(ii)*8))) 25789 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25790 } 25791 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9949, -1)) 25792 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25793 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 25794 var _objPtr uintptr = pTmp 25795 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25796 tcl.XTclFreeObj(tls, _objPtr) 25797 } 25798 } 25799 25800 pTmp = tcl.XTcl_NewObj(tls) 25801 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25802 for ii = 0; ii <= (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel; ii++ { 25803 var p uintptr = tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FanQueue + uintptr(ii)*4)))) 25804 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25805 } 25806 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9956, -1)) 25807 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25808 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 25809 var _objPtr uintptr = pTmp 25810 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25811 tcl.XTclFreeObj(tls, _objPtr) 25812 } 25813 } 25814 25815 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9964, -1)) 25816 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiLevel)) 25817 25818 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9971, -1)) 25819 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel)) 25820 25821 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9979, -1)) 25822 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewWideIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiRowid)) 25823 25824 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9986, -1)) 25825 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewDoubleObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrParentScore)) 25826 25827 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9999, -1)) 25828 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, 25829 tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin)*4)), -1)) 25830 25831 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, pArg) 25832 if tcl.XTcl_EvalObjEx(tls, interp, pEval, 0) != 0 { 25833 rc = SQLITE_ERROR 25834 } else { 25835 rc = SQLITE_OK 25836 } 25837 25838 if rc == SQLITE_OK { 25839 *(*float64)(unsafe.Pointer(bp + 24)) = 0.0 25840 *(*int32)(unsafe.Pointer(bp + 16)) = 0 25841 *(*int32)(unsafe.Pointer(bp + 32)) = 0 25842 *(*uintptr)(unsafe.Pointer(bp + 20)) = uintptr(0) 25843 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 25844 25845 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+16, bp+20) != 0 || 25846 *(*int32)(unsafe.Pointer(bp + 16)) != 2 || 25847 tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 20)) + 1*4)), bp+24) != 0 || 25848 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 20)))), bp, int32(unsafe.Sizeof(uintptr(0))), ts+10013, 0, bp+32) != 0 { 25849 rc = SQLITE_ERROR 25850 } else { 25851 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrScore = *(*float64)(unsafe.Pointer(bp + 24)) 25852 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin = *(*int32)(unsafe.Pointer(bp + 32)) 25853 } 25854 } 25855 25856 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 25857 var _objPtr uintptr = pArg 25858 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25859 tcl.XTclFreeObj(tls, _objPtr) 25860 } 25861 } 25862 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 25863 var _objPtr uintptr = pEval 25864 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25865 tcl.XTclFreeObj(tls, _objPtr) 25866 } 25867 } 25868 return rc 25869 } 25870 25871 func box_query_destroy(tls *libc.TLS, p uintptr) { 25872 var pCtx uintptr = p 25873 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25874 var _objPtr uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript 25875 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25876 tcl.XTclFreeObj(tls, _objPtr) 25877 } 25878 } 25879 tcl.XTcl_Free(tls, pCtx) 25880 } 25881 25882 func register_box_query(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25883 bp := tls.Alloc(4) 25884 defer tls.Free(4) 25885 25886 var pCtx uintptr 25887 25888 if objc != 3 { 25889 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 25890 return TCL_ERROR 25891 } 25892 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 25893 return TCL_ERROR 25894 } 25895 25896 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(BoxQueryCtx{}))) 25897 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp = interp 25898 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 25899 (*Tcl_Obj)(unsafe.Pointer((*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 25900 25901 sqlite3.Xsqlite3_rtree_query_callback(tls, 25902 *(*uintptr)(unsafe.Pointer(bp)), ts+10019, *(*uintptr)(unsafe.Pointer(&struct { 25903 f func(*libc.TLS, uintptr) int32 25904 }{box_query})), pCtx, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{box_query_destroy}))) 25905 25906 tcl.XTcl_ResetResult(tls, interp) 25907 return TCL_OK 25908 } 25909 25910 func Sqlitetestrtreedoc_Init(tls *libc.TLS, interp uintptr) int32 { 25911 tcl.XTcl_CreateObjCommand(tls, interp, ts+10024, *(*uintptr)(unsafe.Pointer(&struct { 25912 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 25913 }{register_box_geom})), uintptr(0), uintptr(0)) 25914 tcl.XTcl_CreateObjCommand(tls, interp, ts+10042, *(*uintptr)(unsafe.Pointer(&struct { 25915 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 25916 }{register_box_query})), uintptr(0), uintptr(0)) 25917 return TCL_OK 25918 } 25919 25920 type TestSession1 = struct { 25921 FpSession uintptr 25922 Finterp uintptr 25923 FpFilterScript uintptr 25924 } 25925 25926 type TestSession = TestSession1 25927 25928 type TestStreamInput1 = struct { 25929 FnStream int32 25930 FaData uintptr 25931 FnData int32 25932 FiData int32 25933 } 25934 25935 type TestStreamInput = TestStreamInput1 25936 25937 func dbHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 25938 bp := tls.Alloc(56) 25939 defer tls.Free(56) 25940 25941 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 25942 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 25943 return TCL_ERROR 25944 } 25945 25946 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 25947 return TCL_OK 25948 } 25949 25950 func sql_exec_changeset(tls *libc.TLS, db uintptr, zSql uintptr, pnChangeset uintptr, ppChangeset uintptr) int32 { 25951 bp := tls.Alloc(4) 25952 defer tls.Free(4) 25953 25954 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 25955 var rc int32 25956 25957 rc = sqlite3.Xsqlite3session_create(tls, db, ts+85, bp) 25958 25959 if rc == SQLITE_OK { 25960 rc = sqlite3.Xsqlite3session_attach(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0)) 25961 } 25962 25963 if rc == SQLITE_OK { 25964 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 25965 } 25966 25967 if rc == SQLITE_OK { 25968 rc = sqlite3.Xsqlite3session_changeset(tls, *(*uintptr)(unsafe.Pointer(bp)), pnChangeset, ppChangeset) 25969 } 25970 25971 sqlite3.Xsqlite3session_delete(tls, *(*uintptr)(unsafe.Pointer(bp))) 25972 25973 return rc 25974 } 25975 25976 func test_sql_exec_changeset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25977 bp := tls.Alloc(28) 25978 defer tls.Free(28) 25979 25980 var zSql uintptr 25981 25982 var rc int32 25983 25984 if objc != 3 { 25985 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 25986 return TCL_ERROR 25987 } 25988 if dbHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16) != 0 { 25989 return TCL_ERROR 25990 } 25991 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 25992 25993 rc = sql_exec_changeset(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zSql, bp+20, bp+24) 25994 if rc != SQLITE_OK { 25995 tcl.XTcl_ResetResult(tls, interp) 25996 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+10068, 0)) 25997 return TCL_ERROR 25998 } 25999 26000 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 20)))) 26001 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 26002 return TCL_OK 26003 } 26004 26005 func test_tcl_integer(tls *libc.TLS, interp uintptr, zVar uintptr) int32 { 26006 bp := tls.Alloc(4) 26007 defer tls.Free(4) 26008 26009 var pObj uintptr 26010 *(*int32)(unsafe.Pointer(bp)) = 0 26011 var pName uintptr = tcl.XTcl_NewStringObj(tls, zVar, -1) 26012 (*Tcl_Obj)(unsafe.Pointer(pName)).FrefCount++ 26013 pObj = tcl.XTcl_ObjGetVar2(tls, interp, pName, uintptr(0), TCL_GLOBAL_ONLY) 26014 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26015 var _objPtr uintptr = pName 26016 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26017 tcl.XTclFreeObj(tls, _objPtr) 26018 } 26019 } 26020 if pObj != 0 { 26021 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pObj, bp) 26022 } 26023 return *(*int32)(unsafe.Pointer(bp)) 26024 } 26025 26026 func test_session_error(tls *libc.TLS, interp uintptr, rc int32, zErr uintptr) int32 { 26027 bp := tls.Alloc(24) 26028 defer tls.Free(24) 26029 26030 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26031 if zErr != 0 { 26032 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, zErr, 0)) 26033 sqlite3.Xsqlite3_free(tls, zErr) 26034 } 26035 return TCL_ERROR 26036 } 26037 26038 func test_table_filter(tls *libc.TLS, pCtx uintptr, zTbl uintptr) int32 { 26039 bp := tls.Alloc(4) 26040 defer tls.Free(4) 26041 26042 var p uintptr = pCtx 26043 var pEval uintptr 26044 var rc int32 26045 *(*int32)(unsafe.Pointer(bp)) = 0 26046 26047 pEval = tcl.XTcl_DuplicateObj(tls, (*TestSession)(unsafe.Pointer(p)).FpFilterScript) 26048 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26049 rc = tcl.XTcl_ListObjAppendElement(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 26050 if rc == TCL_OK { 26051 rc = tcl.XTcl_EvalObjEx(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 26052 } 26053 if rc == TCL_OK { 26054 rc = tcl.XTcl_GetBooleanFromObj(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestSession)(unsafe.Pointer(p)).Finterp), bp) 26055 } 26056 if rc != TCL_OK { 26057 tcl.XTcl_BackgroundError(tls, (*TestSession)(unsafe.Pointer(p)).Finterp) 26058 } 26059 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26060 var _objPtr uintptr = pEval 26061 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26062 tcl.XTclFreeObj(tls, _objPtr) 26063 } 26064 } 26065 26066 return *(*int32)(unsafe.Pointer(bp)) 26067 } 26068 26069 type TestSessionsBlob1 = struct { 26070 Fp uintptr 26071 Fn int32 26072 } 26073 26074 type TestSessionsBlob = TestSessionsBlob1 26075 26076 func testStreamOutput(tls *libc.TLS, pCtx uintptr, pData uintptr, nData int32) int32 { 26077 var pBlob uintptr = pCtx 26078 var pNew uintptr 26079 26080 pNew = sqlite3.Xsqlite3_realloc(tls, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn+nData) 26081 if pNew == uintptr(0) { 26082 return SQLITE_NOMEM 26083 } 26084 (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp = pNew 26085 libc.Xmemcpy(tls, pNew+uintptr((*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn), pData, uint32(nData)) 26086 *(*int32)(unsafe.Pointer(pBlob + 4)) += nData 26087 return SQLITE_OK 26088 } 26089 26090 func test_session_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26091 bp := tls.Alloc(28) 26092 defer tls.Free(28) 26093 26094 var p uintptr = clientData 26095 var pSession uintptr = (*TestSession)(unsafe.Pointer(p)).FpSession 26096 26097 var rc int32 26098 26099 if objc < 2 { 26100 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 26101 return TCL_ERROR 26102 } 26103 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 26104 *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(unsafe.Pointer(&aSub)), int32(unsafe.Sizeof(SessionSubcmd{})), ts+2014, 0, bp) 26105 if rc != TCL_OK { 26106 return rc 26107 } 26108 if objc != 2+aSub[*(*int32)(unsafe.Pointer(bp))].FnArg { 26109 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub[*(*int32)(unsafe.Pointer(bp))].FzMsg) 26110 return TCL_ERROR 26111 } 26112 26113 switch *(*int32)(unsafe.Pointer(bp)) { 26114 case 0: 26115 { 26116 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 26117 if int32(*(*int8)(unsafe.Pointer(zArg))) == '*' && int32(*(*int8)(unsafe.Pointer(zArg + 1))) == 0 { 26118 zArg = uintptr(0) 26119 } 26120 rc = sqlite3.Xsqlite3session_attach(tls, pSession, zArg) 26121 if rc != SQLITE_OK { 26122 return test_session_error(tls, interp, rc, uintptr(0)) 26123 } 26124 break 26125 26126 } 26127 26128 case 7: 26129 fallthrough 26130 case 1: 26131 { 26132 *(*TestSessionsBlob)(unsafe.Pointer(bp + 4)) = TestSessionsBlob{} 26133 if test_tcl_integer(tls, interp, ts+10098) != 0 { 26134 var pCtx uintptr = bp + 4 26135 if *(*int32)(unsafe.Pointer(bp)) == 7 { 26136 rc = sqlite3.Xsqlite3session_patchset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26137 f func(*libc.TLS, uintptr, uintptr, int32) int32 26138 }{testStreamOutput})), pCtx) 26139 } else { 26140 rc = sqlite3.Xsqlite3session_changeset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26141 f func(*libc.TLS, uintptr, uintptr, int32) int32 26142 }{testStreamOutput})), pCtx) 26143 } 26144 } else { 26145 if *(*int32)(unsafe.Pointer(bp)) == 7 { 26146 rc = sqlite3.Xsqlite3session_patchset(tls, pSession, bp+4+4, bp+4) 26147 } else { 26148 rc = sqlite3.Xsqlite3session_changeset(tls, pSession, bp+4+4, bp+4) 26149 } 26150 } 26151 if rc == SQLITE_OK { 26152 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+4)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+4)).Fn)) 26153 } 26154 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+4)).Fp) 26155 if rc != SQLITE_OK { 26156 return test_session_error(tls, interp, rc, uintptr(0)) 26157 } 26158 break 26159 26160 } 26161 26162 case 2: 26163 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 26164 break 26165 26166 case 3: 26167 { 26168 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+12) != 0 { 26169 return TCL_ERROR 26170 } 26171 *(*int32)(unsafe.Pointer(bp + 12)) = sqlite3.Xsqlite3session_enable(tls, pSession, *(*int32)(unsafe.Pointer(bp + 12))) 26172 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 12)) != 0))) 26173 break 26174 26175 } 26176 26177 case 4: 26178 { 26179 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+16) != 0 { 26180 return TCL_ERROR 26181 } 26182 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3session_indirect(tls, pSession, *(*int32)(unsafe.Pointer(bp + 16))) 26183 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 16)) != 0))) 26184 break 26185 26186 } 26187 26188 case 5: 26189 { 26190 var val int32 26191 val = sqlite3.Xsqlite3session_isempty(tls, pSession) 26192 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(val != 0))) 26193 break 26194 26195 } 26196 26197 case 6: 26198 { 26199 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 26200 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26201 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 26202 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26203 tcl.XTclFreeObj(tls, _objPtr) 26204 } 26205 } 26206 } 26207 (*TestSession)(unsafe.Pointer(p)).Finterp = interp 26208 (*TestSession)(unsafe.Pointer(p)).FpFilterScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 26209 (*Tcl_Obj)(unsafe.Pointer((*TestSession)(unsafe.Pointer(p)).FpFilterScript)).FrefCount++ 26210 sqlite3.Xsqlite3session_table_filter(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26211 f func(*libc.TLS, uintptr, uintptr) int32 26212 }{test_table_filter})), clientData) 26213 break 26214 26215 } 26216 26217 case 8: 26218 { 26219 *(*uintptr)(unsafe.Pointer(bp + 20)) = uintptr(0) 26220 rc = sqlite3.Xsqlite3session_diff(tls, pSession, 26221 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), 26222 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))), 26223 bp+20) 26224 26225 if rc != 0 { 26226 return test_session_error(tls, interp, rc, *(*uintptr)(unsafe.Pointer(bp + 20))) 26227 } 26228 break 26229 26230 } 26231 26232 case 9: 26233 { 26234 var nMalloc sqlite3_int64 = sqlite3.Xsqlite3session_memory_used(tls, pSession) 26235 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nMalloc)) 26236 break 26237 26238 } 26239 26240 case 10: 26241 { 26242 var nSize sqlite3_int64 = sqlite3.Xsqlite3session_changeset_size(tls, pSession) 26243 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nSize)) 26244 break 26245 26246 } 26247 case 11: 26248 { 26249 var rc int32 26250 26251 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+24) != 0 { 26252 return TCL_ERROR 26253 } 26254 rc = sqlite3.Xsqlite3session_object_config(tls, 26255 pSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+24) 26256 if rc != SQLITE_OK { 26257 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26258 } else { 26259 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 24)))) 26260 } 26261 break 26262 26263 } 26264 } 26265 26266 return TCL_OK 26267 } 26268 26269 type SessionSubcmd = struct { 26270 FzSub uintptr 26271 FnArg int32 26272 FzMsg uintptr 26273 FiSub int32 26274 } 26275 26276 var aSub = [13]SessionSubcmd{ 26277 {FzSub: ts + 10121, FnArg: 1, FzMsg: ts + 1951}, 26278 {FzSub: ts + 10128, FzMsg: ts + 584}, 26279 {FzSub: ts + 10138, FzMsg: ts + 584}, 26280 {FzSub: ts + 10145, FnArg: 1, FzMsg: ts + 10152}, 26281 {FzSub: ts + 10157, FnArg: 1, FzMsg: ts + 10152}, 26282 {FzSub: ts + 10166, FzMsg: ts + 584}, 26283 {FzSub: ts + 10174, FnArg: 1, FzMsg: ts + 10187}, 26284 {FzSub: ts + 10194, FzMsg: ts + 584}, 26285 {FzSub: ts + 10203, FnArg: 2, FzMsg: ts + 10208}, 26286 {FzSub: ts + 10219, FzMsg: ts + 584}, 26287 {FzSub: ts + 10231, FzMsg: ts + 584}, 26288 {FzSub: ts + 10246, FnArg: 1, FzMsg: ts + 2413}, 26289 {}, 26290 } 26291 26292 func test_session_del(tls *libc.TLS, clientData uintptr) { 26293 var p uintptr = clientData 26294 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 26295 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26296 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 26297 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26298 tcl.XTclFreeObj(tls, _objPtr) 26299 } 26300 } 26301 } 26302 sqlite3.Xsqlite3session_delete(tls, (*TestSession)(unsafe.Pointer(p)).FpSession) 26303 tcl.XTcl_Free(tls, p) 26304 } 26305 26306 func test_sqlite3session(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26307 bp := tls.Alloc(60) 26308 defer tls.Free(60) 26309 26310 var db uintptr 26311 26312 var rc int32 26313 var p uintptr 26314 *(*int32)(unsafe.Pointer(bp + 56)) = -1 26315 26316 if objc != 4 { 26317 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10265) 26318 return TCL_ERROR 26319 } 26320 26321 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), bp+24) { 26322 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), 0)) 26323 return TCL_ERROR 26324 } 26325 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26326 26327 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestSession{}))) 26328 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(TestSession{}))) 26329 rc = sqlite3.Xsqlite3session_create(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))), p) 26330 if rc != SQLITE_OK { 26331 tcl.XTcl_Free(tls, p) 26332 return test_session_error(tls, interp, rc, uintptr(0)) 26333 } 26334 26335 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+56) 26336 26337 *(*int32)(unsafe.Pointer(bp + 56)) = 1 26338 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+56) 26339 26340 tcl.XTcl_CreateObjCommand(tls, 26341 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), *(*uintptr)(unsafe.Pointer(&struct { 26342 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26343 }{test_session_cmd})), p, 26344 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_session_del}))) 26345 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 26346 return TCL_OK 26347 } 26348 26349 func test_append_value(tls *libc.TLS, pList uintptr, pVal uintptr) { 26350 if pVal == uintptr(0) { 26351 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 26352 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 26353 } else { 26354 var pObj uintptr 26355 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 26356 case SQLITE_NULL: 26357 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10287, 1)) 26358 pObj = tcl.XTcl_NewObj(tls) 26359 break 26360 fallthrough 26361 case SQLITE_INTEGER: 26362 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10289, 1)) 26363 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, pVal)) 26364 break 26365 fallthrough 26366 case SQLITE_FLOAT: 26367 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10291, 1)) 26368 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, pVal)) 26369 break 26370 fallthrough 26371 case SQLITE_TEXT: 26372 { 26373 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 26374 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 26375 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10293, 1)) 26376 pObj = tcl.XTcl_NewStringObj(tls, z, n) 26377 break 26378 26379 } 26380 fallthrough 26381 default: 26382 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+6206, 1)) 26383 pObj = tcl.XTcl_NewByteArrayObj(tls, 26384 sqlite3.Xsqlite3_value_blob(tls, pVal), 26385 sqlite3.Xsqlite3_value_bytes(tls, pVal)) 26386 break 26387 } 26388 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, pObj) 26389 } 26390 } 26391 26392 type TestConflictHandler1 = struct { 26393 Finterp uintptr 26394 FpConflictScript uintptr 26395 FpFilterScript uintptr 26396 } 26397 26398 type TestConflictHandler = TestConflictHandler1 26399 26400 func test_obj_eq_string(tls *libc.TLS, p uintptr, z uintptr) int32 { 26401 bp := tls.Alloc(4) 26402 defer tls.Free(4) 26403 26404 var n int32 26405 26406 var zObj uintptr 26407 26408 n = int32(libc.Xstrlen(tls, z)) 26409 zObj = tcl.XTcl_GetStringFromObj(tls, p, bp) 26410 26411 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == n && (n == 0 || 0 == libc.Xmemcmp(tls, zObj, z, uint32(n)))) 26412 } 26413 26414 func test_filter_handler(tls *libc.TLS, pCtx uintptr, zTab uintptr) int32 { 26415 bp := tls.Alloc(4) 26416 defer tls.Free(4) 26417 26418 var p uintptr = pCtx 26419 *(*int32)(unsafe.Pointer(bp)) = 1 26420 var pEval uintptr 26421 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 26422 26423 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpFilterScript) 26424 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26425 26426 if TCL_OK != tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zTab, -1)) || 26427 TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) || 26428 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 26429 tcl.XTcl_BackgroundError(tls, interp) 26430 } 26431 26432 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26433 var _objPtr uintptr = pEval 26434 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26435 tcl.XTclFreeObj(tls, _objPtr) 26436 } 26437 } 26438 return *(*int32)(unsafe.Pointer(bp)) 26439 } 26440 26441 func test_conflict_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 26442 bp := tls.Alloc(60) 26443 defer tls.Free(60) 26444 26445 var p uintptr = pCtx 26446 var pEval uintptr 26447 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 26448 *(*int32)(unsafe.Pointer(bp + 56)) = 0 26449 26450 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpConflictScript) 26451 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26452 26453 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+4, bp+8, uintptr(0)) 26454 26455 if eConf == SQLITE_CHANGESET_FOREIGN_KEY { 26456 sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+12) 26457 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, ts+10295, -1)) 26458 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 26459 } else { 26460 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, 26461 func() uintptr { 26462 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_INSERT { 26463 return ts + 10307 26464 } 26465 return func() uintptr { 26466 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_UPDATE { 26467 return ts + 10314 26468 } 26469 return ts + 10321 26470 }() 26471 }(), -1)) 26472 26473 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp)), -1)) 26474 26475 switch eConf { 26476 case SQLITE_CHANGESET_DATA: 26477 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10328, -1)) 26478 break 26479 fallthrough 26480 case SQLITE_CHANGESET_NOTFOUND: 26481 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10333, -1)) 26482 break 26483 fallthrough 26484 case SQLITE_CHANGESET_CONFLICT: 26485 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10342, -1)) 26486 break 26487 fallthrough 26488 case SQLITE_CHANGESET_CONSTRAINT: 26489 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10351, -1)) 26490 break 26491 } 26492 26493 if *(*int32)(unsafe.Pointer(bp + 8)) != SQLITE_INSERT { 26494 var i int32 26495 var pOld uintptr = tcl.XTcl_NewObj(tls) 26496 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 4)); i++ { 26497 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+16) 26498 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 16))) 26499 } 26500 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pOld) 26501 } 26502 26503 if *(*int32)(unsafe.Pointer(bp + 8)) != SQLITE_DELETE { 26504 var i int32 26505 var pNew uintptr = tcl.XTcl_NewObj(tls) 26506 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 4)); i++ { 26507 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+20) 26508 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 20))) 26509 } 26510 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pNew) 26511 } 26512 26513 if eConf == SQLITE_CHANGESET_DATA || eConf == SQLITE_CHANGESET_CONFLICT { 26514 var i int32 26515 var pConflict uintptr = tcl.XTcl_NewObj(tls) 26516 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 4)); i++ { 26517 var rc int32 26518 _ = rc 26519 26520 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, i, bp+24) 26521 26522 test_append_value(tls, pConflict, *(*uintptr)(unsafe.Pointer(bp + 24))) 26523 } 26524 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pConflict) 26525 } 26526 26527 if eConf == SQLITE_CHANGESET_CONSTRAINT || 26528 eConf == SQLITE_CHANGESET_NOTFOUND { 26529 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, 0, bp+28) 26530 _ = rc 26531 26532 } else { 26533 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, -1, bp+32) 26534 _ = rc 26535 26536 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, *(*int32)(unsafe.Pointer(bp + 4)), bp+32) 26537 26538 } 26539 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_DELETE { 26540 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, 0, bp+36) 26541 _ = rc 26542 26543 } else { 26544 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, -1, bp+40) 26545 _ = rc 26546 26547 rc = sqlite3.Xsqlite3changeset_new(tls, pIter, *(*int32)(unsafe.Pointer(bp + 4)), bp+40) 26548 26549 } 26550 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_INSERT { 26551 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, 0, bp+44) 26552 _ = rc 26553 26554 } else { 26555 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, -1, bp+48) 26556 _ = rc 26557 26558 rc = sqlite3.Xsqlite3changeset_old(tls, pIter, *(*int32)(unsafe.Pointer(bp + 4)), bp+48) 26559 26560 } 26561 if eConf != SQLITE_CHANGESET_FOREIGN_KEY { 26562 var rc int32 = sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+52) 26563 _ = rc 26564 26565 } 26566 26567 } 26568 26569 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) { 26570 tcl.XTcl_BackgroundError(tls, interp) 26571 } else { 26572 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 26573 if test_obj_eq_string(tls, pRes, ts+10362) != 0 || test_obj_eq_string(tls, pRes, ts+584) != 0 { 26574 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_CHANGESET_OMIT 26575 } else if test_obj_eq_string(tls, pRes, ts+7846) != 0 { 26576 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_CHANGESET_REPLACE 26577 } else if test_obj_eq_string(tls, pRes, ts+7840) != 0 { 26578 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_CHANGESET_ABORT 26579 } else { 26580 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pRes, bp+56) 26581 } 26582 } 26583 26584 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26585 var _objPtr uintptr = pEval 26586 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26587 tcl.XTclFreeObj(tls, _objPtr) 26588 } 26589 } 26590 return *(*int32)(unsafe.Pointer(bp + 56)) 26591 } 26592 26593 func replace_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 26594 bp := tls.Alloc(20) 26595 defer tls.Free(20) 26596 26597 var i int32 26598 var x int32 = 0 26599 26600 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+4, bp+8, uintptr(0)) 26601 26602 if *(*int32)(unsafe.Pointer(bp + 8)) != SQLITE_INSERT { 26603 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 4)); i++ { 26604 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+12) 26605 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 12))) 26606 x++ 26607 } 26608 } 26609 26610 if *(*int32)(unsafe.Pointer(bp + 8)) != SQLITE_DELETE { 26611 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 4)); i++ { 26612 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+16) 26613 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 26614 x++ 26615 } 26616 } 26617 26618 if eConf == SQLITE_CHANGESET_DATA { 26619 return SQLITE_CHANGESET_REPLACE 26620 } 26621 return SQLITE_CHANGESET_OMIT 26622 } 26623 26624 func testStreamInput(tls *libc.TLS, pCtx uintptr, pData uintptr, pnData uintptr) int32 { 26625 var p uintptr = pCtx 26626 var nReq int32 = *(*int32)(unsafe.Pointer(pnData)) 26627 var nRem int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnData - (*TestStreamInput)(unsafe.Pointer(p)).FiData 26628 var nRet int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnStream 26629 26630 var pAlloc uintptr = sqlite3.Xsqlite3_malloc(tls, 10) 26631 if pAlloc == uintptr(0) { 26632 return SQLITE_NOMEM 26633 } 26634 sqlite3.Xsqlite3_free(tls, pAlloc) 26635 26636 if nRet > nReq { 26637 nRet = nReq 26638 } 26639 if nRet > nRem { 26640 nRet = nRem 26641 } 26642 26643 if nRet > 0 { 26644 libc.Xmemcpy(tls, pData, (*TestStreamInput)(unsafe.Pointer(p)).FaData+uintptr((*TestStreamInput)(unsafe.Pointer(p)).FiData), uint32(nRet)) 26645 *(*int32)(unsafe.Pointer(p + 12)) += nRet 26646 } 26647 26648 *(*int32)(unsafe.Pointer(pnData)) = nRet 26649 return SQLITE_OK 26650 } 26651 26652 func testSqlite3changesetApply(tls *libc.TLS, bV2 int32, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26653 bp := tls.Alloc(96) 26654 defer tls.Free(96) 26655 26656 var db uintptr 26657 26658 var rc int32 26659 var pChangeset uintptr 26660 26661 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 26662 *(*int32)(unsafe.Pointer(bp + 92)) = 0 26663 var flags int32 = 0 26664 26665 libc.Xmemset(tls, bp+24, 0, uint32(unsafe.Sizeof(TestStreamInput{}))) 26666 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26667 26668 if bV2 != 0 { 26669 if objc > 1 { 26670 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 26671 var n int32 = int32(libc.Xstrlen(tls, z1)) 26672 if n > 1 && n <= 12 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10367, z1, n) { 26673 flags = flags | SQLITE_CHANGESETAPPLY_NOSAVEPOINT 26674 objc-- 26675 objv += 4 26676 } 26677 } 26678 if objc > 1 { 26679 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 26680 var n int32 = int32(libc.Xstrlen(tls, z1)) 26681 if n > 1 && n <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10380, z1, n) { 26682 flags = flags | SQLITE_CHANGESETAPPLY_INVERT 26683 objc-- 26684 objv += 4 26685 } 26686 } 26687 } 26688 26689 if objc != 4 && objc != 5 { 26690 var zMsg uintptr 26691 if bV2 != 0 { 26692 zMsg = ts + 10388 26693 } else { 26694 zMsg = ts + 10459 26695 } 26696 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zMsg) 26697 return TCL_ERROR 26698 } 26699 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+40) { 26700 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), 0)) 26701 return TCL_ERROR 26702 } 26703 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 40)).FobjClientData)) 26704 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+72) 26705 (*TestConflictHandler)(unsafe.Pointer(bp + 76)).FpConflictScript = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 26706 (*TestConflictHandler)(unsafe.Pointer(bp + 76)).FpFilterScript = func() uintptr { 26707 if objc == 5 { 26708 return *(*uintptr)(unsafe.Pointer(objv + 4*4)) 26709 } 26710 return uintptr(0) 26711 }() 26712 (*TestConflictHandler)(unsafe.Pointer(bp + 76)).Finterp = interp 26713 26714 if (*TestStreamInput)(unsafe.Pointer(bp+24)).FnStream == 0 { 26715 if bV2 == 0 { 26716 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 72)), pChangeset, 26717 func() uintptr { 26718 if objc == 5 { 26719 return *(*uintptr)(unsafe.Pointer(&struct { 26720 f func(*libc.TLS, uintptr, uintptr) int32 26721 }{test_filter_handler})) 26722 } 26723 return uintptr(0) 26724 }(), *(*uintptr)(unsafe.Pointer(&struct { 26725 f func(*libc.TLS, uintptr, int32, uintptr) int32 26726 }{test_conflict_handler})), bp+76) 26727 } else { 26728 rc = sqlite3.Xsqlite3changeset_apply_v2(tls, db, *(*int32)(unsafe.Pointer(bp + 72)), pChangeset, 26729 func() uintptr { 26730 if objc == 5 { 26731 return *(*uintptr)(unsafe.Pointer(&struct { 26732 f func(*libc.TLS, uintptr, uintptr) int32 26733 }{test_filter_handler})) 26734 } 26735 return uintptr(0) 26736 }(), *(*uintptr)(unsafe.Pointer(&struct { 26737 f func(*libc.TLS, uintptr, int32, uintptr) int32 26738 }{test_conflict_handler})), bp+76, 26739 bp+88, bp+92, flags) 26740 } 26741 } else { 26742 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = pChangeset 26743 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnData = *(*int32)(unsafe.Pointer(bp + 72)) 26744 if bV2 == 0 { 26745 rc = sqlite3.Xsqlite3changeset_apply_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 26746 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26747 }{testStreamInput})), bp+24, 26748 func() uintptr { 26749 if objc == 5 { 26750 return *(*uintptr)(unsafe.Pointer(&struct { 26751 f func(*libc.TLS, uintptr, uintptr) int32 26752 }{test_filter_handler})) 26753 } 26754 return uintptr(0) 26755 }(), 26756 *(*uintptr)(unsafe.Pointer(&struct { 26757 f func(*libc.TLS, uintptr, int32, uintptr) int32 26758 }{test_conflict_handler})), bp+76) 26759 } else { 26760 rc = sqlite3.Xsqlite3changeset_apply_v2_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 26761 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26762 }{testStreamInput})), bp+24, 26763 func() uintptr { 26764 if objc == 5 { 26765 return *(*uintptr)(unsafe.Pointer(&struct { 26766 f func(*libc.TLS, uintptr, uintptr) int32 26767 }{test_filter_handler})) 26768 } 26769 return uintptr(0) 26770 }(), 26771 *(*uintptr)(unsafe.Pointer(&struct { 26772 f func(*libc.TLS, uintptr, int32, uintptr) int32 26773 }{test_conflict_handler})), bp+76, 26774 bp+88, bp+92, flags) 26775 } 26776 } 26777 26778 if rc != SQLITE_OK { 26779 return test_session_error(tls, interp, rc, uintptr(0)) 26780 } else { 26781 tcl.XTcl_ResetResult(tls, interp) 26782 if bV2 != 0 && *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 26783 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), *(*int32)(unsafe.Pointer(bp + 92)))) 26784 } 26785 } 26786 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 26787 return TCL_OK 26788 } 26789 26790 func test_sqlite3changeset_apply(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26791 return testSqlite3changesetApply(tls, 0, clientData, interp, objc, objv) 26792 } 26793 26794 func test_sqlite3changeset_apply_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26795 return testSqlite3changesetApply(tls, 1, clientData, interp, objc, objv) 26796 } 26797 26798 func test_sqlite3changeset_apply_replace_all(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26799 bp := tls.Alloc(60) 26800 defer tls.Free(60) 26801 26802 var db uintptr 26803 26804 var rc int32 26805 var pChangeset uintptr 26806 26807 if objc != 3 { 26808 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10504) 26809 return TCL_ERROR 26810 } 26811 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+24) { 26812 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), 0)) 26813 return TCL_ERROR 26814 } 26815 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26816 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+56) 26817 26818 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 56)), pChangeset, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 26819 f func(*libc.TLS, uintptr, int32, uintptr) int32 26820 }{replace_handler})), uintptr(0)) 26821 if rc != SQLITE_OK { 26822 return test_session_error(tls, interp, rc, uintptr(0)) 26823 } 26824 tcl.XTcl_ResetResult(tls, interp) 26825 return TCL_OK 26826 } 26827 26828 func test_sqlite3changeset_invert(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26829 bp := tls.Alloc(24) 26830 defer tls.Free(24) 26831 26832 var rc int32 26833 26834 if objc != 2 { 26835 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10517) 26836 return TCL_ERROR 26837 } 26838 26839 libc.Xmemset(tls, bp, 0, uint32(unsafe.Sizeof(TestStreamInput{}))) 26840 libc.Xmemset(tls, bp+16, 0, uint32(unsafe.Sizeof(TestSessionsBlob{}))) 26841 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26842 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+8) 26843 26844 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream != 0 { 26845 rc = sqlite3.Xsqlite3changeset_invert_strm(tls, 26846 *(*uintptr)(unsafe.Pointer(&struct { 26847 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26848 }{testStreamInput})), bp, *(*uintptr)(unsafe.Pointer(&struct { 26849 f func(*libc.TLS, uintptr, uintptr, int32) int32 26850 }{testStreamOutput})), bp+16) 26851 } else { 26852 rc = sqlite3.Xsqlite3changeset_invert(tls, (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, bp+16+4, bp+16) 26853 } 26854 if rc != SQLITE_OK { 26855 rc = test_session_error(tls, interp, rc, uintptr(0)) 26856 } else { 26857 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+16)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+16)).Fn)) 26858 } 26859 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+16)).Fp) 26860 return rc 26861 } 26862 26863 func test_sqlite3changeset_concat(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26864 bp := tls.Alloc(40) 26865 defer tls.Free(40) 26866 26867 var rc int32 26868 26869 *(*TestSessionsBlob)(unsafe.Pointer(bp + 32)) = TestSessionsBlob{} 26870 26871 if objc != 3 { 26872 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10527) 26873 return TCL_ERROR 26874 } 26875 26876 libc.Xmemset(tls, bp, 0, uint32(unsafe.Sizeof(TestStreamInput{}))) 26877 libc.Xmemset(tls, bp+16, 0, uint32(unsafe.Sizeof(TestStreamInput{}))) 26878 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+8) 26879 (*TestStreamInput)(unsafe.Pointer(bp + 16)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+16+8) 26880 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26881 (*TestStreamInput)(unsafe.Pointer(bp + 16)).FnStream = (*TestStreamInput)(unsafe.Pointer(bp)).FnStream 26882 26883 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream > 0 { 26884 rc = sqlite3.Xsqlite3changeset_concat_strm(tls, 26885 *(*uintptr)(unsafe.Pointer(&struct { 26886 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26887 }{testStreamInput})), bp, 26888 *(*uintptr)(unsafe.Pointer(&struct { 26889 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26890 }{testStreamInput})), bp+16, 26891 *(*uintptr)(unsafe.Pointer(&struct { 26892 f func(*libc.TLS, uintptr, uintptr, int32) int32 26893 }{testStreamOutput})), bp+32) 26894 } else { 26895 rc = sqlite3.Xsqlite3changeset_concat(tls, 26896 (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, (*TestStreamInput)(unsafe.Pointer(bp+16)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+16)).FaData, bp+32+4, bp+32) 26897 } 26898 26899 if rc != SQLITE_OK { 26900 rc = test_session_error(tls, interp, rc, uintptr(0)) 26901 } else { 26902 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fn)) 26903 } 26904 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp) 26905 return rc 26906 } 26907 26908 func test_sqlite3session_foreach(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26909 bp := tls.Alloc(60) 26910 defer tls.Free(60) 26911 26912 var pChangeset uintptr 26913 26914 var rc int32 26915 var pVarname uintptr 26916 var pCS uintptr 26917 var pScript uintptr 26918 var isCheckNext int32 = 0 26919 var isInvert int32 = 0 26920 26921 libc.Xmemset(tls, bp, 0, uint32(unsafe.Sizeof(TestStreamInput{}))) 26922 26923 for objc > 1 { 26924 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 26925 var nOpt int32 = int32(libc.Xstrlen(tls, zOpt)) 26926 if int32(*(*int8)(unsafe.Pointer(zOpt))) != '-' { 26927 break 26928 } 26929 if nOpt <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10380, nOpt) { 26930 isInvert = 1 26931 } else if nOpt <= 5 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10538, nOpt) { 26932 isCheckNext = 1 26933 } else { 26934 break 26935 } 26936 objv += 4 26937 objc-- 26938 } 26939 if objc != 4 { 26940 tcl.XTcl_WrongNumArgs(tls, 26941 interp, 1, objv, ts+10544) 26942 return TCL_ERROR 26943 } 26944 26945 pVarname = *(*uintptr)(unsafe.Pointer(objv + 1*4)) 26946 pCS = *(*uintptr)(unsafe.Pointer(objv + 2*4)) 26947 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 26948 26949 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, pCS, bp+16) 26950 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26951 if isInvert != 0 { 26952 var f int32 = SQLITE_CHANGESETSTART_INVERT 26953 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 26954 rc = sqlite3.Xsqlite3changeset_start_v2(tls, bp+20, *(*int32)(unsafe.Pointer(bp + 16)), pChangeset, f) 26955 } else { 26956 var pCtx uintptr = bp 26957 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 26958 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 16)) 26959 rc = sqlite3.Xsqlite3changeset_start_v2_strm(tls, bp+20, *(*uintptr)(unsafe.Pointer(&struct { 26960 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26961 }{testStreamInput})), pCtx, f) 26962 } 26963 } else { 26964 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 26965 rc = sqlite3.Xsqlite3changeset_start(tls, bp+20, *(*int32)(unsafe.Pointer(bp + 16)), pChangeset) 26966 } else { 26967 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 26968 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 16)) 26969 rc = sqlite3.Xsqlite3changeset_start_strm(tls, bp+20, *(*uintptr)(unsafe.Pointer(&struct { 26970 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26971 }{testStreamInput})), bp) 26972 } 26973 } 26974 if rc != SQLITE_OK { 26975 return test_session_error(tls, interp, rc, uintptr(0)) 26976 } 26977 26978 for SQLITE_ROW == sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) { 26979 var pVar uintptr 26980 var pOld uintptr 26981 var pNew uintptr 26982 26983 var zPK uintptr 26984 26985 var i int32 26986 26987 if SQLITE_MISUSE != sqlite3.Xsqlite3changeset_fk_conflicts(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), bp+24) { 26988 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) 26989 return TCL_ERROR 26990 } 26991 26992 sqlite3.Xsqlite3changeset_op(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), bp+28, bp+32, bp+36, bp+40) 26993 pVar = tcl.XTcl_NewObj(tls) 26994 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, 26995 func() uintptr { 26996 if *(*int32)(unsafe.Pointer(bp + 36)) == SQLITE_INSERT { 26997 return ts + 10307 26998 } 26999 return func() uintptr { 27000 if *(*int32)(unsafe.Pointer(bp + 36)) == SQLITE_UPDATE { 27001 return ts + 10314 27002 } 27003 return ts + 10321 27004 }() 27005 }(), -1)) 27006 27007 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 28)), -1)) 27008 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 40)) != 0))) 27009 27010 zPK = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 32))+1)) 27011 libc.Xmemset(tls, zPK, 0, uint32(*(*int32)(unsafe.Pointer(bp + 32))+1)) 27012 sqlite3.Xsqlite3changeset_pk(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), bp+44, bp+48) 27013 27014 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 27015 *(*int8)(unsafe.Pointer(zPK + uintptr(i))) = func() int8 { 27016 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 44)) + uintptr(i))) != 0 { 27017 return int8('X') 27018 } 27019 return int8('.') 27020 }() 27021 } 27022 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, zPK, -1)) 27023 tcl.XTcl_Free(tls, zPK) 27024 27025 pOld = tcl.XTcl_NewObj(tls) 27026 if *(*int32)(unsafe.Pointer(bp + 36)) != SQLITE_INSERT { 27027 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 27028 sqlite3.Xsqlite3changeset_old(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), i, bp+52) 27029 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 52))) 27030 } 27031 } 27032 pNew = tcl.XTcl_NewObj(tls) 27033 if *(*int32)(unsafe.Pointer(bp + 36)) != SQLITE_DELETE { 27034 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 27035 sqlite3.Xsqlite3changeset_new(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), i, bp+56) 27036 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 56))) 27037 } 27038 } 27039 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pOld) 27040 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pNew) 27041 27042 tcl.XTcl_ObjSetVar2(tls, interp, pVarname, uintptr(0), pVar, 0) 27043 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 27044 if rc != TCL_OK && rc != TCL_CONTINUE { 27045 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) 27046 if rc == TCL_BREAK { 27047 return TCL_OK 27048 } 27049 return rc 27050 } 27051 } 27052 27053 if isCheckNext != 0 { 27054 var rc2 int32 = sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) 27055 _ = rc2 27056 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) 27057 27058 } else { 27059 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) 27060 } 27061 if rc != SQLITE_OK { 27062 return test_session_error(tls, interp, rc, uintptr(0)) 27063 } 27064 27065 return TCL_OK 27066 } 27067 27068 func test_rebaser_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27069 bp := tls.Alloc(32) 27070 defer tls.Free(32) 27071 27072 var p uintptr = clientData 27073 27074 var rc int32 27075 27076 if objc < 2 { 27077 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 27078 return TCL_ERROR 27079 } 27080 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 27081 *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(unsafe.Pointer(&aSub1)), int32(unsafe.Sizeof(RebaseSubcmd{})), ts+2014, 0, bp) 27082 if rc != TCL_OK { 27083 return rc 27084 } 27085 if objc != 2+aSub1[*(*int32)(unsafe.Pointer(bp))].FnArg { 27086 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub1[*(*int32)(unsafe.Pointer(bp))].FzMsg) 27087 return TCL_ERROR 27088 } 27089 27090 switch *(*int32)(unsafe.Pointer(bp)) { 27091 case 0: 27092 { 27093 *(*int32)(unsafe.Pointer(bp + 4)) = 0 27094 var pRebase uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) 27095 rc = sqlite3.Xsqlite3rebaser_configure(tls, p, *(*int32)(unsafe.Pointer(bp + 4)), pRebase) 27096 break 27097 27098 } 27099 27100 case 1: 27101 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 27102 break 27103 27104 default: 27105 { 27106 libc.Xmemset(tls, bp+8, 0, uint32(unsafe.Sizeof(TestStreamInput{}))) 27107 libc.Xmemset(tls, bp+24, 0, uint32(unsafe.Sizeof(TestSessionsBlob{}))) 27108 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+8+8) 27109 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27110 27111 if (*TestStreamInput)(unsafe.Pointer(bp+8)).FnStream != 0 { 27112 rc = sqlite3.Xsqlite3rebaser_rebase_strm(tls, p, 27113 *(*uintptr)(unsafe.Pointer(&struct { 27114 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27115 }{testStreamInput})), bp+8, 27116 *(*uintptr)(unsafe.Pointer(&struct { 27117 f func(*libc.TLS, uintptr, uintptr, int32) int32 27118 }{testStreamOutput})), bp+24) 27119 } else { 27120 rc = sqlite3.Xsqlite3rebaser_rebase(tls, p, (*TestStreamInput)(unsafe.Pointer(bp+8)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+8)).FaData, bp+24+4, bp+24) 27121 } 27122 27123 if rc == SQLITE_OK { 27124 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fn)) 27125 } 27126 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp) 27127 break 27128 27129 } 27130 } 27131 27132 if rc != SQLITE_OK { 27133 return test_session_error(tls, interp, rc, uintptr(0)) 27134 } 27135 return TCL_OK 27136 } 27137 27138 type RebaseSubcmd = struct { 27139 FzSub uintptr 27140 FnArg int32 27141 FzMsg uintptr 27142 FiSub int32 27143 } 27144 27145 var aSub1 = [4]RebaseSubcmd{ 27146 {FzSub: ts + 10587, FnArg: 1, FzMsg: ts + 10597}, 27147 {FzSub: ts + 10138, FzMsg: ts + 584}, 27148 {FzSub: ts + 10609, FnArg: 1, FzMsg: ts + 10517}, 27149 {}, 27150 } 27151 27152 func test_rebaser_del(tls *libc.TLS, clientData uintptr) { 27153 var p uintptr = clientData 27154 sqlite3.Xsqlite3rebaser_delete(tls, p) 27155 } 27156 27157 func test_sqlite3rebaser_create(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27158 bp := tls.Alloc(4) 27159 defer tls.Free(4) 27160 27161 var rc int32 27162 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 27163 if objc != 2 { 27164 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 27165 return SQLITE_ERROR 27166 } 27167 27168 rc = sqlite3.Xsqlite3rebaser_create(tls, bp) 27169 if rc != SQLITE_OK { 27170 return test_session_error(tls, interp, rc, uintptr(0)) 27171 } 27172 27173 tcl.XTcl_CreateObjCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), *(*uintptr)(unsafe.Pointer(&struct { 27174 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27175 }{test_rebaser_cmd})), 27176 *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_rebaser_del}))) 27177 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 27178 return TCL_OK 27179 } 27180 27181 func test_sqlite3session_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27182 bp := tls.Alloc(8) 27183 defer tls.Free(8) 27184 27185 var rc int32 27186 27187 if objc != 3 { 27188 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10616) 27189 return SQLITE_ERROR 27190 } 27191 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 27192 *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(unsafe.Pointer(&aSub2)), int32(unsafe.Sizeof(ConfigOpt{})), ts+2014, 0, bp) 27193 if rc != TCL_OK { 27194 return rc 27195 } 27196 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 27197 return TCL_ERROR 27198 } 27199 27200 rc = sqlite3.Xsqlite3session_config(tls, aSub2[*(*int32)(unsafe.Pointer(bp))].Fop, bp+4) 27201 if rc != SQLITE_OK { 27202 return test_session_error(tls, interp, rc, uintptr(0)) 27203 } 27204 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 27205 return TCL_OK 27206 } 27207 27208 type ConfigOpt = struct { 27209 FzSub uintptr 27210 Fop int32 27211 } 27212 27213 var aSub2 = [3]ConfigOpt{ 27214 {FzSub: ts + 10625, Fop: SQLITE_SESSION_CONFIG_STRMSIZE}, 27215 {FzSub: ts + 2758}, 27216 {}, 27217 } 27218 27219 func TestSession_Init(tls *libc.TLS, interp uintptr) int32 { 27220 bp := tls.Alloc(80) 27221 defer tls.Free(80) 27222 27223 *(*[10]struct { 27224 FzCmd uintptr 27225 FxProc uintptr 27226 })(unsafe.Pointer(bp)) = [10]struct { 27227 FzCmd uintptr 27228 FxProc uintptr 27229 }{ 27230 {FzCmd: ts + 10635, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27231 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27232 }{test_sqlite3session}))}, 27233 {FzCmd: ts + 10650, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27234 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27235 }{test_sqlite3session_foreach}))}, 27236 {FzCmd: ts + 10673, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27237 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27238 }{test_sqlite3changeset_invert}))}, 27239 {FzCmd: ts + 10697, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27240 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27241 }{test_sqlite3changeset_concat}))}, 27242 {FzCmd: ts + 10721, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27243 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27244 }{test_sqlite3changeset_apply}))}, 27245 {FzCmd: ts + 10744, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27246 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27247 }{test_sqlite3changeset_apply_v2}))}, 27248 {FzCmd: ts + 10770, 27249 FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27250 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27251 }{test_sqlite3changeset_apply_replace_all}))}, 27252 {FzCmd: ts + 10805, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27253 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27254 }{test_sql_exec_changeset}))}, 27255 {FzCmd: ts + 10824, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27256 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27257 }{test_sqlite3rebaser_create}))}, 27258 {FzCmd: ts + 10846, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27259 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27260 }{test_sqlite3session_config}))}, 27261 } 27262 var i int32 27263 27264 for i = 0; uint32(i) < uint32(unsafe.Sizeof([10]struct { 27265 FzCmd uintptr 27266 FxProc uintptr 27267 }{}))/uint32(unsafe.Sizeof(struct { 27268 FzCmd uintptr 27269 FxProc uintptr 27270 }{})); i++ { 27271 var p uintptr = bp + uintptr(i)*8 27272 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 27273 FzCmd uintptr 27274 FxProc uintptr 27275 })(unsafe.Pointer(p)).FzCmd, (*struct { 27276 FzCmd uintptr 27277 FxProc uintptr 27278 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 27279 } 27280 27281 return TCL_OK 27282 } 27283 27284 type sig_atomic_t = int32 27285 27286 type sigval = struct{ Fsival_int int32 } 27287 27288 type siginfo_t = struct { 27289 Fsi_signo int32 27290 Fsi_errno int32 27291 Fsi_code int32 27292 F_sifields struct{ F_pad [29]int32 } 27293 } 27294 27295 type sigval_t = sigval 27296 27297 type sigevent_t = sigevent 27298 27299 type sig_t = uintptr 27300 27301 type sigaction = struct { 27302 F__sigaction_handler struct{ Fsa_handler uintptr } 27303 Fsa_mask struct{ F__val [32]uint32 } 27304 Fsa_flags int32 27305 Fsa_restorer uintptr 27306 } 27307 27308 type _fpx_sw_bytes = struct { 27309 Fmagic1 uint32 27310 Fextended_size uint32 27311 Fxstate_bv uint64 27312 Fxstate_size uint32 27313 F__glibc_reserved1 [7]uint32 27314 } 27315 27316 type _fpreg = struct { 27317 Fsignificand [4]uint16 27318 Fexponent uint16 27319 } 27320 27321 type _fpxreg = struct { 27322 Fsignificand [4]uint16 27323 Fexponent uint16 27324 F__glibc_reserved1 [3]uint16 27325 } 27326 27327 type _xmmreg = struct{ Felement [4]uint32 } 27328 27329 type _fpstate = struct { 27330 Fcw uint32 27331 Fsw uint32 27332 Ftag uint32 27333 Fipoff uint32 27334 Fcssel uint32 27335 Fdataoff uint32 27336 Fdatasel uint32 27337 F_st [8]struct { 27338 Fsignificand [4]uint16 27339 Fexponent uint16 27340 } 27341 Fstatus uint16 27342 Fmagic uint16 27343 F_fxsr_env [6]uint32 27344 Fmxcsr uint32 27345 F__glibc_reserved1 uint32 27346 F_fxsr_st [8]struct { 27347 Fsignificand [4]uint16 27348 Fexponent uint16 27349 F__glibc_reserved1 [3]uint16 27350 } 27351 F_xmm [8]struct{ Felement [4]uint32 } 27352 F__glibc_reserved2 [56]uint32 27353 } 27354 27355 type sigcontext = struct { 27356 Fgs uint16 27357 F__gsh uint16 27358 Ffs uint16 27359 F__fsh uint16 27360 Fes uint16 27361 F__esh uint16 27362 Fds uint16 27363 F__dsh uint16 27364 Fedi uint32 27365 Fesi uint32 27366 Febp uint32 27367 Fesp uint32 27368 Febx uint32 27369 Fedx uint32 27370 Fecx uint32 27371 Feax uint32 27372 Ftrapno uint32 27373 Ferr uint32 27374 Feip uint32 27375 Fcs uint16 27376 F__csh uint16 27377 Feflags uint32 27378 Fesp_at_signal uint32 27379 Fss uint16 27380 F__ssh uint16 27381 Ffpstate uintptr 27382 Foldmask uint32 27383 Fcr2 uint32 27384 } 27385 27386 type _xsave_hdr = struct { 27387 Fxstate_bv uint64 27388 F__glibc_reserved1 [2]uint64 27389 F__glibc_reserved2 [5]uint64 27390 } 27391 27392 type _ymmh_state = struct{ Fymmh_space [64]uint32 } 27393 27394 type _xstate = struct { 27395 Ffpstate struct { 27396 Fcw uint32 27397 Fsw uint32 27398 Ftag uint32 27399 Fipoff uint32 27400 Fcssel uint32 27401 Fdataoff uint32 27402 Fdatasel uint32 27403 F_st [8]struct { 27404 Fsignificand [4]uint16 27405 Fexponent uint16 27406 } 27407 Fstatus uint16 27408 Fmagic uint16 27409 F_fxsr_env [6]uint32 27410 Fmxcsr uint32 27411 F__glibc_reserved1 uint32 27412 F_fxsr_st [8]struct { 27413 Fsignificand [4]uint16 27414 Fexponent uint16 27415 F__glibc_reserved1 [3]uint16 27416 } 27417 F_xmm [8]struct{ Felement [4]uint32 } 27418 F__glibc_reserved2 [56]uint32 27419 } 27420 Fxstate_hdr struct { 27421 Fxstate_bv uint64 27422 F__glibc_reserved1 [2]uint64 27423 F__glibc_reserved2 [5]uint64 27424 } 27425 Fymmh struct{ Fymmh_space [64]uint32 } 27426 } 27427 27428 type stack_t = struct { 27429 Fss_sp uintptr 27430 Fss_flags int32 27431 Fss_size size_t 27432 } 27433 27434 type greg_t = int32 27435 27436 type gregset_t = [19]greg_t 27437 27438 type _libc_fpreg = struct { 27439 Fsignificand [4]uint16 27440 Fexponent uint16 27441 } 27442 27443 type _libc_fpstate = struct { 27444 Fcw uint32 27445 Fsw uint32 27446 Ftag uint32 27447 Fipoff uint32 27448 Fcssel uint32 27449 Fdataoff uint32 27450 Fdatasel uint32 27451 F_st [8]struct { 27452 Fsignificand [4]uint16 27453 Fexponent uint16 27454 } 27455 Fstatus uint32 27456 } 27457 27458 type fpregset_t = uintptr 27459 27460 type mcontext_t = struct { 27461 Fgregs gregset_t 27462 Ffpregs fpregset_t 27463 Foldmask uint32 27464 Fcr2 uint32 27465 } 27466 27467 type ucontext_t1 = struct { 27468 Fuc_flags uint32 27469 Fuc_link uintptr 27470 Fuc_stack stack_t 27471 Fuc_mcontext mcontext_t 27472 Fuc_sigmask sigset_t 27473 F__fpregs_mem struct { 27474 Fcw uint32 27475 Fsw uint32 27476 Ftag uint32 27477 Fipoff uint32 27478 Fcssel uint32 27479 Fdataoff uint32 27480 Fdatasel uint32 27481 F_st [8]struct { 27482 Fsignificand [4]uint16 27483 Fexponent uint16 27484 } 27485 Fstatus uint32 27486 } 27487 F__ssp [4]uint32 27488 } 27489 27490 type ucontext_t = ucontext_t1 27491 27492 type sigstack = struct { 27493 Fss_sp uintptr 27494 Fss_onstack int32 27495 } 27496 27497 type SqliteDb = struct { 27498 Fdb uintptr 27499 Finterp uintptr 27500 FzBusy uintptr 27501 FzCommit uintptr 27502 FzTrace uintptr 27503 FzTraceV2 uintptr 27504 FzProfile uintptr 27505 FzProgress uintptr 27506 FzBindFallback uintptr 27507 FzAuth uintptr 27508 FdisableAuth int32 27509 FzNull uintptr 27510 FpFunc uintptr 27511 FpUpdateHook uintptr 27512 FpPreUpdateHook uintptr 27513 FpRollbackHook uintptr 27514 FpWalHook uintptr 27515 FpUnlockNotify uintptr 27516 FpCollate uintptr 27517 Frc int32 27518 FpCollateNeeded uintptr 27519 FstmtList uintptr 27520 FstmtLast uintptr 27521 FmaxStmt int32 27522 FnStmt int32 27523 FpIncrblob uintptr 27524 FnStep int32 27525 FnSort int32 27526 FnIndex int32 27527 FnVMStep int32 27528 FnTransaction int32 27529 FopenFlags int32 27530 FnRef int32 27531 FbLegacyPrepare int32 27532 } 27533 27534 type SqlFunc1 = struct { 27535 Finterp uintptr 27536 FpScript uintptr 27537 FpDb uintptr 27538 FuseEvalObjv int32 27539 FeType int32 27540 FzName uintptr 27541 FpNext uintptr 27542 } 27543 27544 type SqlFunc = SqlFunc1 27545 27546 type SqlCollate1 = struct { 27547 Finterp uintptr 27548 FzScript uintptr 27549 FpNext uintptr 27550 } 27551 27552 type SqlCollate = SqlCollate1 27553 27554 type SqlPreparedStmt1 = struct { 27555 FpNext uintptr 27556 FpPrev uintptr 27557 FpStmt uintptr 27558 FnSql int32 27559 FzSql uintptr 27560 FnParm int32 27561 FapParm uintptr 27562 } 27563 27564 type SqlPreparedStmt = SqlPreparedStmt1 27565 27566 type IncrblobChannel1 = struct { 27567 FpBlob uintptr 27568 FpDb uintptr 27569 FiSeek int32 27570 Fchannel Tcl_Channel 27571 FpNext uintptr 27572 FpPrev uintptr 27573 } 27574 27575 type IncrblobChannel = IncrblobChannel1 27576 27577 func strlen30(tls *libc.TLS, z uintptr) int32 { 27578 var z2 uintptr = z 27579 for *(*int8)(unsafe.Pointer(z2)) != 0 { 27580 z2++ 27581 } 27582 return 0x3fffffff & ((int32(z2) - int32(z)) / 1) 27583 } 27584 27585 func closeIncrblobChannels(tls *libc.TLS, pDb uintptr) { 27586 var p uintptr 27587 var pNext uintptr 27588 27589 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob; p != 0; p = pNext { 27590 pNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27591 27592 tcl.XTcl_UnregisterChannel(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27593 } 27594 } 27595 27596 func incrblobClose(tls *libc.TLS, instanceData ClientData, interp uintptr) int32 { 27597 var p uintptr = instanceData 27598 var rc int32 = sqlite3.Xsqlite3_blob_close(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27599 var db uintptr = (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).Fdb 27600 27601 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27602 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev 27603 } 27604 if (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev != 0 { 27605 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpPrev)).FpNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27606 } 27607 if (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob == p { 27608 (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27609 } 27610 27611 tcl.XTcl_Free(tls, p) 27612 27613 if rc != SQLITE_OK { 27614 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(1)) 27615 return TCL_ERROR 27616 } 27617 return TCL_OK 27618 } 27619 27620 func incrblobInput(tls *libc.TLS, instanceData ClientData, buf uintptr, bufSize int32, errorCodePtr uintptr) int32 { 27621 var p uintptr = instanceData 27622 var nRead int32 = bufSize 27623 var nBlob int32 27624 var rc int32 27625 27626 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27627 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nRead > nBlob { 27628 nRead = nBlob - (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27629 } 27630 if nRead <= 0 { 27631 return 0 27632 } 27633 27634 rc = sqlite3.Xsqlite3_blob_read(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nRead, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27635 if rc != SQLITE_OK { 27636 *(*int32)(unsafe.Pointer(errorCodePtr)) = rc 27637 return -1 27638 } 27639 27640 *(*int32)(unsafe.Pointer(p + 8)) += nRead 27641 return nRead 27642 } 27643 27644 func incrblobOutput(tls *libc.TLS, instanceData ClientData, buf uintptr, toWrite int32, errorCodePtr uintptr) int32 { 27645 var p uintptr = instanceData 27646 var nWrite int32 = toWrite 27647 var nBlob int32 27648 var rc int32 27649 27650 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27651 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nWrite > nBlob { 27652 *(*int32)(unsafe.Pointer(errorCodePtr)) = EINVAL 27653 return -1 27654 } 27655 if nWrite <= 0 { 27656 return 0 27657 } 27658 27659 rc = sqlite3.Xsqlite3_blob_write(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nWrite, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27660 if rc != SQLITE_OK { 27661 *(*int32)(unsafe.Pointer(errorCodePtr)) = EIO 27662 return -1 27663 } 27664 27665 *(*int32)(unsafe.Pointer(p + 8)) += nWrite 27666 return nWrite 27667 } 27668 27669 func incrblobSeek(tls *libc.TLS, instanceData ClientData, offset int32, seekMode int32, errorCodePtr uintptr) int32 { 27670 var p uintptr = instanceData 27671 27672 switch seekMode { 27673 case SEEK_SET: 27674 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = offset 27675 break 27676 case SEEK_CUR: 27677 *(*int32)(unsafe.Pointer(p + 8)) += offset 27678 break 27679 case SEEK_END: 27680 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) + offset 27681 break 27682 27683 default: 27684 } 27685 27686 return (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27687 } 27688 27689 func incrblobWatch(tls *libc.TLS, instanceData ClientData, mode int32) { 27690 } 27691 27692 func incrblobHandle(tls *libc.TLS, instanceData ClientData, dir int32, hPtr uintptr) int32 { 27693 return TCL_ERROR 27694 } 27695 27696 var IncrblobChannelType = Tcl_ChannelType{ 27697 FtypeName: ts + 10868, 27698 Fversion: uintptr(0x2), 27699 FcloseProc: 0, 27700 FinputProc: 0, 27701 FoutputProc: 0, 27702 FseekProc: 0, 27703 FwatchProc: 0, 27704 FgetHandleProc: 0, 27705 } 27706 27707 func createIncrblobChannel(tls *libc.TLS, interp uintptr, pDb uintptr, zDb uintptr, zTable uintptr, zColumn uintptr, iRow sqlite_int64, isReadonly int32) int32 { 27708 bp := tls.Alloc(76) 27709 defer tls.Free(76) 27710 27711 var p uintptr 27712 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 27713 27714 var rc int32 27715 var flags int32 = int32(1)<<1 | func() int32 { 27716 if isReadonly != 0 { 27717 return 0 27718 } 27719 return int32(1) << 2 27720 }() 27721 27722 rc = sqlite3.Xsqlite3_blob_open(tls, db, zDb, zTable, zColumn, iRow, libc.BoolInt32(!(isReadonly != 0)), bp+8) 27723 if rc != SQLITE_OK { 27724 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 27725 return TCL_ERROR 27726 } 27727 27728 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(IncrblobChannel{}))) 27729 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = 0 27730 (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob = *(*uintptr)(unsafe.Pointer(bp + 8)) 27731 27732 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+12, ts+10877, libc.VaList(bp, libc.PreIncInt32(&count, 1))) 27733 (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel = tcl.XTcl_CreateChannel(tls, uintptr(unsafe.Pointer(&IncrblobChannelType)), bp+12, p, flags) 27734 tcl.XTcl_RegisterChannel(tls, interp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27735 27736 (*IncrblobChannel)(unsafe.Pointer(p)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob 27737 (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev = uintptr(0) 27738 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27739 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = p 27740 } 27741 (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob = p 27742 (*IncrblobChannel)(unsafe.Pointer(p)).FpDb = pDb 27743 27744 tcl.XTcl_SetResult(tls, interp, tcl.XTcl_GetChannelName(tls, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel), uintptr(1)) 27745 return TCL_OK 27746 } 27747 27748 var count int32 = 0 27749 27750 func safeToUseEvalObjv(tls *libc.TLS, interp uintptr, pCmd uintptr) int32 { 27751 bp := tls.Alloc(4) 27752 defer tls.Free(4) 27753 27754 var z uintptr 27755 27756 z = tcl.XTcl_GetStringFromObj(tls, pCmd, bp) 27757 for libc.PostDecInt32(&*(*int32)(unsafe.Pointer(bp)), 1) > 0 { 27758 var c int32 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 27759 if c == '$' || c == '[' || c == ';' { 27760 return 0 27761 } 27762 } 27763 return 1 27764 } 27765 27766 func findSqlFunc(tls *libc.TLS, pDb uintptr, zName uintptr) uintptr { 27767 var p uintptr 27768 var pNew uintptr 27769 var nName int32 = strlen30(tls, zName) 27770 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqlFunc{}))+uint32(nName)+uint32(1)) 27771 (*SqlFunc)(unsafe.Pointer(pNew)).FzName = pNew + 1*28 27772 libc.Xmemcpy(tls, (*SqlFunc)(unsafe.Pointer(pNew)).FzName, zName, uint32(nName+1)) 27773 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc; p != 0; p = (*SqlFunc)(unsafe.Pointer(p)).FpNext { 27774 if sqlite3.Xsqlite3_stricmp(tls, (*SqlFunc)(unsafe.Pointer(p)).FzName, (*SqlFunc)(unsafe.Pointer(pNew)).FzName) == 0 { 27775 tcl.XTcl_Free(tls, pNew) 27776 return p 27777 } 27778 } 27779 (*SqlFunc)(unsafe.Pointer(pNew)).Finterp = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 27780 (*SqlFunc)(unsafe.Pointer(pNew)).FpDb = pDb 27781 (*SqlFunc)(unsafe.Pointer(pNew)).FpScript = uintptr(0) 27782 (*SqlFunc)(unsafe.Pointer(pNew)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27783 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = pNew 27784 return pNew 27785 } 27786 27787 func dbFreeStmt(tls *libc.TLS, pStmt uintptr) { 27788 if sqlite3.Xsqlite3_sql(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) == uintptr(0) { 27789 tcl.XTcl_Free(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FzSql) 27790 } 27791 sqlite3.Xsqlite3_finalize(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) 27792 tcl.XTcl_Free(tls, pStmt) 27793 } 27794 27795 func flushStmtCache(tls *libc.TLS, pDb uintptr) { 27796 var pPreStmt uintptr 27797 var pNext uintptr 27798 27799 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = pNext { 27800 pNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 27801 dbFreeStmt(tls, pPreStmt) 27802 } 27803 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt = 0 27804 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = uintptr(0) 27805 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = uintptr(0) 27806 } 27807 27808 func addDatabaseRef(tls *libc.TLS, pDb uintptr) { 27809 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef++ 27810 } 27811 27812 func delDatabaseRef(tls *libc.TLS, pDb uintptr) { 27813 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef-- 27814 if (*SqliteDb)(unsafe.Pointer(pDb)).FnRef == 0 { 27815 flushStmtCache(tls, pDb) 27816 closeIncrblobChannels(tls, pDb) 27817 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 27818 for (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc != 0 { 27819 var pFunc uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27820 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = (*SqlFunc)(unsafe.Pointer(pFunc)).FpNext 27821 27822 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27823 var _objPtr uintptr = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 27824 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27825 tcl.XTclFreeObj(tls, _objPtr) 27826 } 27827 } 27828 tcl.XTcl_Free(tls, pFunc) 27829 } 27830 for (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate != 0 { 27831 var pCollate uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 27832 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext 27833 tcl.XTcl_Free(tls, pCollate) 27834 } 27835 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0 { 27836 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 27837 } 27838 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0 { 27839 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 27840 } 27841 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0 { 27842 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 27843 } 27844 if (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0 { 27845 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 27846 } 27847 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0 { 27848 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 27849 } 27850 if (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0 { 27851 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 27852 } 27853 if (*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0 { 27854 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 27855 } 27856 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 27857 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27858 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook 27859 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27860 tcl.XTclFreeObj(tls, _objPtr) 27861 } 27862 } 27863 } 27864 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 27865 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 27866 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook 27867 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27868 tcl.XTclFreeObj(tls, _objPtr) 27869 } 27870 } 27871 } 27872 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 27873 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 27874 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook 27875 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27876 tcl.XTclFreeObj(tls, _objPtr) 27877 } 27878 } 27879 } 27880 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 27881 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 27882 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook 27883 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27884 tcl.XTclFreeObj(tls, _objPtr) 27885 } 27886 } 27887 } 27888 if (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0 { 27889 for __ccgo5 := true; __ccgo5; __ccgo5 = 0 != 0 { 27890 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 27891 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27892 tcl.XTclFreeObj(tls, _objPtr) 27893 } 27894 } 27895 } 27896 tcl.XTcl_Free(tls, pDb) 27897 } 27898 } 27899 27900 func DbDeleteCmd(tls *libc.TLS, db uintptr) { 27901 var pDb uintptr = db 27902 delDatabaseRef(tls, pDb) 27903 } 27904 27905 func DbBusyHandler(tls *libc.TLS, cd uintptr, nTries int32) int32 { 27906 bp := tls.Alloc(70) 27907 defer tls.Free(70) 27908 27909 var pDb uintptr = cd 27910 var rc int32 27911 27912 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+40, ts+1333, libc.VaList(bp, nTries)) 27913 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))) 27914 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27915 return 0 27916 } 27917 return 1 27918 } 27919 27920 func DbProgressHandler(tls *libc.TLS, cd uintptr) int32 { 27921 var pDb uintptr = cd 27922 var rc int32 27923 27924 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 27925 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 27926 return 1 27927 } 27928 return 0 27929 } 27930 27931 func DbTraceHandler(tls *libc.TLS, cd uintptr, zSql uintptr) { 27932 bp := tls.Alloc(212) 27933 defer tls.Free(212) 27934 27935 var pDb uintptr = cd 27936 27937 tcl.XTcl_DStringInit(tls, bp) 27938 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, -1) 27939 tcl.XTcl_DStringAppendElement(tls, bp, zSql) 27940 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 27941 tcl.XTcl_DStringFree(tls, bp) 27942 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27943 } 27944 27945 func DbTraceV2Handler(tls *libc.TLS, type1 uint32, cd uintptr, pd uintptr, xd uintptr) int32 { 27946 var pDb uintptr = cd 27947 var pCmd uintptr 27948 27949 switch type1 { 27950 case uint32(SQLITE_TRACE_STMT): 27951 { 27952 var pStmt uintptr = pd 27953 var zSql uintptr = xd 27954 27955 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27956 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27957 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27958 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27959 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27960 tcl.XTcl_NewStringObj(tls, zSql, -1)) 27961 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27962 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27963 var _objPtr uintptr = pCmd 27964 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27965 tcl.XTclFreeObj(tls, _objPtr) 27966 } 27967 } 27968 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27969 break 27970 27971 } 27972 case uint32(SQLITE_TRACE_PROFILE): 27973 { 27974 var pStmt uintptr = pd 27975 var ns sqlite3_int64 = *(*sqlite3_int64)(unsafe.Pointer(xd)) 27976 27977 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27978 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 27979 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27980 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 27981 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 27982 tcl.XTcl_NewWideIntObj(tls, ns)) 27983 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 27984 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 27985 var _objPtr uintptr = pCmd 27986 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27987 tcl.XTclFreeObj(tls, _objPtr) 27988 } 27989 } 27990 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 27991 break 27992 27993 } 27994 case uint32(SQLITE_TRACE_ROW): 27995 { 27996 var pStmt uintptr = pd 27997 27998 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 27999 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28000 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28001 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 28002 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28003 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28004 var _objPtr uintptr = pCmd 28005 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28006 tcl.XTclFreeObj(tls, _objPtr) 28007 } 28008 } 28009 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28010 break 28011 28012 } 28013 case uint32(SQLITE_TRACE_CLOSE): 28014 { 28015 var db uintptr = pd 28016 28017 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28018 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28019 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28020 tcl.XTcl_NewWideIntObj(tls, int64(db))) 28021 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28022 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 28023 var _objPtr uintptr = pCmd 28024 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28025 tcl.XTclFreeObj(tls, _objPtr) 28026 } 28027 } 28028 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28029 break 28030 28031 } 28032 } 28033 return SQLITE_OK 28034 } 28035 28036 func DbProfileHandler(tls *libc.TLS, cd uintptr, zSql uintptr, tm1 sqlite_uint64) { 28037 bp := tls.Alloc(320) 28038 defer tls.Free(320) 28039 28040 var pDb uintptr = cd 28041 28042 sqlite3.Xsqlite3_snprintf(tls, int32(uint32(unsafe.Sizeof([100]int8{}))-uint32(1)), bp+8, ts+6325, libc.VaList(bp, tm1)) 28043 tcl.XTcl_DStringInit(tls, bp+108) 28044 tcl.XTcl_DStringAppend(tls, bp+108, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, -1) 28045 tcl.XTcl_DStringAppendElement(tls, bp+108, zSql) 28046 tcl.XTcl_DStringAppendElement(tls, bp+108, bp+8) 28047 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+108)).Fstring) 28048 tcl.XTcl_DStringFree(tls, bp+108) 28049 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28050 } 28051 28052 func DbCommitHandler(tls *libc.TLS, cd uintptr) int32 { 28053 var pDb uintptr = cd 28054 var rc int32 28055 28056 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 28057 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 28058 return 1 28059 } 28060 return 0 28061 } 28062 28063 func DbRollbackHandler(tls *libc.TLS, clientData uintptr) { 28064 var pDb uintptr = clientData 28065 28066 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook, 0) { 28067 tcl.XTcl_BackgroundError(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28068 } 28069 } 28070 28071 func DbWalHandler(tls *libc.TLS, clientData uintptr, db uintptr, zDb uintptr, nEntry int32) int32 { 28072 bp := tls.Alloc(4) 28073 defer tls.Free(4) 28074 28075 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 28076 var p uintptr 28077 var pDb uintptr = clientData 28078 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28079 28080 p = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook) 28081 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 28082 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28083 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewIntObj(tls, nEntry)) 28084 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, p, 0) || 28085 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 28086 tcl.XTcl_BackgroundError(tls, interp) 28087 } 28088 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28089 var _objPtr uintptr = p 28090 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28091 tcl.XTclFreeObj(tls, _objPtr) 28092 } 28093 } 28094 28095 return *(*int32)(unsafe.Pointer(bp)) 28096 } 28097 28098 func setTestUnlockNotifyVars(tls *libc.TLS, interp uintptr, iArg int32, nArg int32) { 28099 bp := tls.Alloc(80) 28100 defer tls.Free(80) 28101 28102 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp, iArg)) 28103 tcl.XTcl_SetVar2(tls, interp, ts+10889, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 28104 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp+8, nArg)) 28105 tcl.XTcl_SetVar2(tls, interp, ts+10914, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 28106 } 28107 28108 func DbUnlockNotify(tls *libc.TLS, apArg uintptr, nArg int32) { 28109 var i int32 28110 for i = 0; i < nArg; i++ { 28111 var flags int32 = TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT 28112 var pDb uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*4)) 28113 setTestUnlockNotifyVars(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, i, nArg) 28114 28115 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify, flags) 28116 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28117 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 28118 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28119 tcl.XTclFreeObj(tls, _objPtr) 28120 } 28121 } 28122 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 28123 } 28124 } 28125 28126 func DbPreUpdateHandler(tls *libc.TLS, p uintptr, db uintptr, op int32, zDb uintptr, zTbl uintptr, iKey1 sqlite_int64, iKey2 sqlite_int64) { 28127 var pDb uintptr = p 28128 var pCmd uintptr 28129 28130 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook) 28131 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28132 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr[(op-1)/9], -1)) 28133 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28134 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28135 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey1)) 28136 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey2)) 28137 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28138 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28139 var _objPtr uintptr = pCmd 28140 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28141 tcl.XTclFreeObj(tls, _objPtr) 28142 } 28143 } 28144 } 28145 28146 var azStr = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 28147 28148 func DbUpdateHandler(tls *libc.TLS, p uintptr, op int32, zDb uintptr, zTbl uintptr, rowid sqlite_int64) { 28149 var pDb uintptr = p 28150 var pCmd uintptr 28151 28152 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook) 28153 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28154 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr1[(op-1)/9], -1)) 28155 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28156 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28157 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, rowid)) 28158 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28159 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28160 var _objPtr uintptr = pCmd 28161 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28162 tcl.XTclFreeObj(tls, _objPtr) 28163 } 28164 } 28165 } 28166 28167 var azStr1 = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 28168 28169 func tclCollateNeeded(tls *libc.TLS, pCtx uintptr, db uintptr, enc int32, zName uintptr) { 28170 var pDb uintptr = pCtx 28171 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 28172 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 28173 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 28174 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pScript, 0) 28175 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28176 var _objPtr uintptr = pScript 28177 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28178 tcl.XTclFreeObj(tls, _objPtr) 28179 } 28180 } 28181 } 28182 28183 func tclSqlCollate(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 28184 var p uintptr = pCtx 28185 var pCmd uintptr 28186 28187 pCmd = tcl.XTcl_NewStringObj(tls, (*SqlCollate)(unsafe.Pointer(p)).FzScript, -1) 28188 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28189 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zA, nA)) 28190 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zB, nB)) 28191 tcl.XTcl_EvalObjEx(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 28192 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28193 var _objPtr uintptr = pCmd 28194 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28195 tcl.XTclFreeObj(tls, _objPtr) 28196 } 28197 } 28198 return libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp)) 28199 } 28200 28201 func tclSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 28202 bp := tls.Alloc(28) 28203 defer tls.Free(28) 28204 28205 var p uintptr = sqlite3.Xsqlite3_user_data(tls, context) 28206 var pCmd uintptr 28207 var i int32 28208 var rc int32 28209 28210 if argc == 0 { 28211 pCmd = (*SqlFunc)(unsafe.Pointer(p)).FpScript 28212 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28213 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, 0) 28214 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28215 var _objPtr uintptr = pCmd 28216 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28217 tcl.XTclFreeObj(tls, _objPtr) 28218 } 28219 } 28220 } else { 28221 if tcl.XTcl_ListObjGetElements(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, (*SqlFunc)(unsafe.Pointer(p)).FpScript, bp, bp+4) != 0 { 28222 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28223 return 28224 } 28225 pCmd = tcl.XTcl_NewListObj(tls, *(*int32)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 4))) 28226 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28227 for i = 0; i < argc; i++ { 28228 var pIn uintptr = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) 28229 var pVal uintptr 28230 28231 switch sqlite3.Xsqlite3_value_type(tls, pIn) { 28232 case SQLITE_BLOB: 28233 { 28234 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 28235 pVal = tcl.XTcl_NewByteArrayObj(tls, sqlite3.Xsqlite3_value_blob(tls, pIn), bytes) 28236 break 28237 28238 } 28239 fallthrough 28240 case SQLITE_INTEGER: 28241 { 28242 var v sqlite_int64 = sqlite3.Xsqlite3_value_int64(tls, pIn) 28243 if v >= int64(-2147483647) && v <= int64(2147483647) { 28244 pVal = tcl.XTcl_NewIntObj(tls, int32(v)) 28245 } else { 28246 pVal = tcl.XTcl_NewWideIntObj(tls, v) 28247 } 28248 break 28249 28250 } 28251 fallthrough 28252 case SQLITE_FLOAT: 28253 { 28254 var r float64 = sqlite3.Xsqlite3_value_double(tls, pIn) 28255 pVal = tcl.XTcl_NewDoubleObj(tls, r) 28256 break 28257 28258 } 28259 fallthrough 28260 case SQLITE_NULL: 28261 { 28262 pVal = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 28263 break 28264 28265 } 28266 fallthrough 28267 default: 28268 { 28269 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 28270 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pIn), bytes) 28271 break 28272 28273 } 28274 } 28275 rc = tcl.XTcl_ListObjAppendElement(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, pVal) 28276 if rc != 0 { 28277 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28278 var _objPtr uintptr = pCmd 28279 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28280 tcl.XTclFreeObj(tls, _objPtr) 28281 } 28282 } 28283 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28284 return 28285 } 28286 } 28287 if !((*SqlFunc)(unsafe.Pointer(p)).FuseEvalObjv != 0) { 28288 tcl.XTcl_GetString(tls, pCmd) 28289 } 28290 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 28291 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28292 var _objPtr uintptr = pCmd 28293 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28294 tcl.XTclFreeObj(tls, _objPtr) 28295 } 28296 } 28297 } 28298 28299 if rc != 0 && rc != TCL_RETURN { 28300 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28301 } else { 28302 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp) 28303 28304 var data uintptr 28305 var zType uintptr = func() uintptr { 28306 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28307 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28308 } 28309 return ts + 584 28310 }() 28311 var c int8 = *(*int8)(unsafe.Pointer(zType)) 28312 var eType int32 = (*SqlFunc)(unsafe.Pointer(p)).FeType 28313 28314 if eType == SQLITE_NULL { 28315 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28316 eType = SQLITE_BLOB 28317 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 || 28318 int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || 28319 int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28320 eType = SQLITE_INTEGER 28321 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28322 eType = SQLITE_FLOAT 28323 } else { 28324 eType = SQLITE_TEXT 28325 } 28326 } 28327 28328 switch eType { 28329 case SQLITE_BLOB: 28330 { 28331 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+8) 28332 sqlite3.Xsqlite3_result_blob(tls, context, data, *(*int32)(unsafe.Pointer(bp + 8)), libc.UintptrFromInt32(-1)) 28333 break 28334 28335 } 28336 fallthrough 28337 case SQLITE_INTEGER: 28338 { 28339 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+12) { 28340 sqlite3.Xsqlite3_result_int64(tls, context, *(*Tcl_WideInt)(unsafe.Pointer(bp + 12))) 28341 break 28342 } 28343 28344 } 28345 fallthrough 28346 case SQLITE_FLOAT: 28347 { 28348 if TCL_OK == tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+20) { 28349 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 20))) 28350 break 28351 } 28352 28353 } 28354 fallthrough 28355 default: 28356 { 28357 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+8) 28358 sqlite3.Xsqlite3_result_text(tls, context, data, *(*int32)(unsafe.Pointer(bp + 8)), libc.UintptrFromInt32(-1)) 28359 break 28360 28361 } 28362 } 28363 28364 } 28365 } 28366 28367 func auth_callback(tls *libc.TLS, pArg uintptr, code int32, zArg1 uintptr, zArg2 uintptr, zArg3 uintptr, zArg4 uintptr) int32 { 28368 bp := tls.Alloc(212) 28369 defer tls.Free(212) 28370 28371 var zCode uintptr 28372 28373 var rc int32 28374 var zReply uintptr 28375 28376 var pDb uintptr = pArg 28377 if (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth != 0 { 28378 return SQLITE_OK 28379 } 28380 28381 switch code { 28382 case SQLITE_COPY: 28383 zCode = ts + 10944 28384 break 28385 case SQLITE_CREATE_INDEX: 28386 zCode = ts + 10956 28387 break 28388 case SQLITE_CREATE_TABLE: 28389 zCode = ts + 10976 28390 break 28391 case SQLITE_CREATE_TEMP_INDEX: 28392 zCode = ts + 10996 28393 break 28394 case SQLITE_CREATE_TEMP_TABLE: 28395 zCode = ts + 11021 28396 break 28397 case SQLITE_CREATE_TEMP_TRIGGER: 28398 zCode = ts + 11046 28399 break 28400 case SQLITE_CREATE_TEMP_VIEW: 28401 zCode = ts + 11073 28402 break 28403 case SQLITE_CREATE_TRIGGER: 28404 zCode = ts + 11097 28405 break 28406 case SQLITE_CREATE_VIEW: 28407 zCode = ts + 11119 28408 break 28409 case SQLITE_DELETE: 28410 zCode = ts + 11138 28411 break 28412 case SQLITE_DROP_INDEX: 28413 zCode = ts + 11152 28414 break 28415 case SQLITE_DROP_TABLE: 28416 zCode = ts + 11170 28417 break 28418 case SQLITE_DROP_TEMP_INDEX: 28419 zCode = ts + 11188 28420 break 28421 case SQLITE_DROP_TEMP_TABLE: 28422 zCode = ts + 11211 28423 break 28424 case SQLITE_DROP_TEMP_TRIGGER: 28425 zCode = ts + 11234 28426 break 28427 case SQLITE_DROP_TEMP_VIEW: 28428 zCode = ts + 11259 28429 break 28430 case SQLITE_DROP_TRIGGER: 28431 zCode = ts + 11281 28432 break 28433 case SQLITE_DROP_VIEW: 28434 zCode = ts + 11301 28435 break 28436 case SQLITE_INSERT: 28437 zCode = ts + 11318 28438 break 28439 case SQLITE_PRAGMA: 28440 zCode = ts + 11332 28441 break 28442 case SQLITE_READ: 28443 zCode = ts + 11346 28444 break 28445 case SQLITE_SELECT: 28446 zCode = ts + 11358 28447 break 28448 case SQLITE_TRANSACTION: 28449 zCode = ts + 11372 28450 break 28451 case SQLITE_UPDATE: 28452 zCode = ts + 11391 28453 break 28454 case SQLITE_ATTACH: 28455 zCode = ts + 11405 28456 break 28457 case SQLITE_DETACH: 28458 zCode = ts + 11419 28459 break 28460 case SQLITE_ALTER_TABLE: 28461 zCode = ts + 11433 28462 break 28463 case SQLITE_REINDEX: 28464 zCode = ts + 11452 28465 break 28466 case SQLITE_ANALYZE: 28467 zCode = ts + 11467 28468 break 28469 case SQLITE_CREATE_VTABLE: 28470 zCode = ts + 11482 28471 break 28472 case SQLITE_DROP_VTABLE: 28473 zCode = ts + 11503 28474 break 28475 case SQLITE_FUNCTION: 28476 zCode = ts + 11522 28477 break 28478 case SQLITE_SAVEPOINT: 28479 zCode = ts + 11538 28480 break 28481 case SQLITE_RECURSIVE: 28482 zCode = ts + 11555 28483 break 28484 default: 28485 zCode = ts + 11572 28486 break 28487 } 28488 tcl.XTcl_DStringInit(tls, bp) 28489 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, -1) 28490 tcl.XTcl_DStringAppendElement(tls, bp, zCode) 28491 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28492 if zArg1 != 0 { 28493 return zArg1 28494 } 28495 return ts + 584 28496 }()) 28497 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28498 if zArg2 != 0 { 28499 return zArg2 28500 } 28501 return ts + 584 28502 }()) 28503 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28504 if zArg3 != 0 { 28505 return zArg3 28506 } 28507 return ts + 584 28508 }()) 28509 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28510 if zArg4 != 0 { 28511 return zArg4 28512 } 28513 return ts + 584 28514 }()) 28515 rc = tcl.XTcl_GlobalEval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 28516 tcl.XTcl_DStringFree(tls, bp) 28517 if rc == TCL_OK { 28518 zReply = tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28519 } else { 28520 zReply = ts + 11577 28521 } 28522 if libc.Xstrcmp(tls, zReply, ts+2127) == 0 { 28523 rc = SQLITE_OK 28524 } else if libc.Xstrcmp(tls, zReply, ts+11577) == 0 { 28525 rc = SQLITE_DENY 28526 } else if libc.Xstrcmp(tls, zReply, ts+11589) == 0 { 28527 rc = SQLITE_IGNORE 28528 } else { 28529 rc = 999 28530 } 28531 return rc 28532 } 28533 28534 func local_getline(tls *libc.TLS, zPrompt uintptr, in uintptr) uintptr { 28535 var zLine uintptr 28536 var nLine int32 28537 var n int32 28538 28539 nLine = 100 28540 zLine = libc.Xmalloc(tls, uint32(nLine)) 28541 if zLine == uintptr(0) { 28542 return uintptr(0) 28543 } 28544 n = 0 28545 for 1 != 0 { 28546 if n+100 > nLine { 28547 nLine = nLine*2 + 100 28548 zLine = libc.Xrealloc(tls, zLine, uint32(nLine)) 28549 if zLine == uintptr(0) { 28550 return uintptr(0) 28551 } 28552 } 28553 if libc.Xfgets(tls, zLine+uintptr(n), nLine-n, in) == uintptr(0) { 28554 if n == 0 { 28555 libc.Xfree(tls, zLine) 28556 return uintptr(0) 28557 } 28558 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 28559 break 28560 } 28561 for *(*int8)(unsafe.Pointer(zLine + uintptr(n))) != 0 { 28562 n++ 28563 } 28564 if n > 0 && int32(*(*int8)(unsafe.Pointer(zLine + uintptr(n-1)))) == '\n' { 28565 n-- 28566 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 28567 break 28568 } 28569 } 28570 zLine = libc.Xrealloc(tls, zLine, uint32(n+1)) 28571 return zLine 28572 } 28573 28574 func DbTransPostCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 28575 bp := tls.Alloc(16) 28576 defer tls.Free(16) 28577 28578 var pDb uintptr = *(*ClientData)(unsafe.Pointer(data)) 28579 var rc int32 = result 28580 var zEnd uintptr 28581 28582 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction-- 28583 zEnd = azEnd[libc.Bool32(rc == TCL_ERROR)*2+libc.Bool32((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0)] 28584 28585 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 28586 if sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zEnd, uintptr(0), uintptr(0), uintptr(0)) != 0 { 28587 if rc != TCL_ERROR { 28588 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 28589 rc = TCL_ERROR 28590 } 28591 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+7824, uintptr(0), uintptr(0), uintptr(0)) 28592 } 28593 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 28594 28595 delDatabaseRef(tls, pDb) 28596 return rc 28597 } 28598 28599 var azEnd = [4]uintptr{ 28600 ts + 11603, 28601 ts + 11628, 28602 ts + 11635, 28603 ts + 7824, 28604 } 28605 28606 func dbPrepare(tls *libc.TLS, pDb uintptr, zSql uintptr, ppStmt uintptr, pzOut uintptr) int32 { 28607 var prepFlags uint32 = uint32(0) 28608 if (*SqliteDb)(unsafe.Pointer(pDb)).FbLegacyPrepare != 0 { 28609 return sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, ppStmt, pzOut) 28610 } 28611 28612 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt > 5 { 28613 prepFlags = uint32(SQLITE_PREPARE_PERSISTENT) 28614 } 28615 28616 return sqlite3.Xsqlite3_prepare_v3(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, prepFlags, ppStmt, pzOut) 28617 } 28618 28619 func dbPrepareAndBind(tls *libc.TLS, pDb uintptr, zIn uintptr, pzOut uintptr, ppPreStmt uintptr) int32 { 28620 bp := tls.Alloc(24) 28621 defer tls.Free(24) 28622 28623 var zSql uintptr = zIn 28624 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 28625 var pPreStmt uintptr 28626 var nSql int32 28627 var nVar int32 = 0 28628 var iParm int32 = 0 28629 var c int8 28630 var i int32 28631 var needResultReset int32 = 0 28632 var rc int32 = SQLITE_OK 28633 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28634 28635 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = uintptr(0) 28636 28637 for int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zSql)))) == ' ' || int32(c) == '\t' || int32(c) == '\r' || int32(c) == '\n' { 28638 zSql++ 28639 } 28640 nSql = strlen30(tls, zSql) 28641 28642 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext { 28643 var n int32 = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql 28644 if nSql >= n && 28645 libc.Xmemcmp(tls, (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql, zSql, uint32(n)) == 0 && 28646 (int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n)))) == 0 || int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n-1)))) == ';') { 28647 *(*uintptr)(unsafe.Pointer(bp)) = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28648 *(*uintptr)(unsafe.Pointer(pzOut)) = zSql + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql) 28649 28650 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev != 0 { 28651 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev)).FpNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28652 } else { 28653 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28654 } 28655 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext != 0 { 28656 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext)).FpPrev = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28657 } else { 28658 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28659 } 28660 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28661 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28662 break 28663 } 28664 } 28665 28666 if pPreStmt == uintptr(0) { 28667 var nByte int32 28668 28669 if SQLITE_OK != dbPrepare(tls, pDb, zSql, bp, pzOut) { 28670 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28671 return TCL_ERROR 28672 } 28673 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 28674 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) { 28675 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28676 return TCL_ERROR 28677 } else { 28678 return TCL_OK 28679 } 28680 } 28681 28682 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28683 nByte = int32(uint32(unsafe.Sizeof(SqlPreparedStmt{})) + uint32(nVar)*uint32(unsafe.Sizeof(uintptr(0)))) 28684 pPreStmt = tcl.XTcl_Alloc(tls, uint32(nByte)) 28685 libc.Xmemset(tls, pPreStmt, 0, uint32(nByte)) 28686 28687 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt = *(*uintptr)(unsafe.Pointer(bp)) 28688 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql = (int32(*(*uintptr)(unsafe.Pointer(pzOut))) - int32(zSql)) / 1 28689 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 28690 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm = pPreStmt + 1*28 28691 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql == uintptr(0) { 28692 var zCopy uintptr = tcl.XTcl_Alloc(tls, uint32((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql+1)) 28693 libc.Xmemcpy(tls, zCopy, zSql, uint32((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql)) 28694 *(*int8)(unsafe.Pointer(zCopy + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql))) = int8(0) 28695 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = zCopy 28696 } 28697 } 28698 28699 for i = 1; i <= nVar; i++ { 28700 var zVar uintptr = sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28701 if zVar != uintptr(0) && (int32(*(*int8)(unsafe.Pointer(zVar))) == '$' || int32(*(*int8)(unsafe.Pointer(zVar))) == ':' || int32(*(*int8)(unsafe.Pointer(zVar))) == '@') { 28702 var pVar uintptr = tcl.XTcl_GetVar2Ex(tls, interp, zVar+1, uintptr(0), 0) 28703 if pVar == uintptr(0) && (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != uintptr(0) { 28704 var pCmd uintptr 28705 var rx int32 28706 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, -1) 28707 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28708 tcl.XTcl_ListObjAppendElement(tls, interp, pCmd, tcl.XTcl_NewStringObj(tls, zVar, -1)) 28709 if needResultReset != 0 { 28710 tcl.XTcl_ResetResult(tls, interp) 28711 } 28712 needResultReset = 1 28713 rx = tcl.XTcl_EvalObjEx(tls, interp, pCmd, TCL_EVAL_DIRECT) 28714 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28715 var _objPtr uintptr = pCmd 28716 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28717 tcl.XTclFreeObj(tls, _objPtr) 28718 } 28719 } 28720 if rx == TCL_OK { 28721 pVar = tcl.XTcl_GetObjResult(tls, interp) 28722 } else if rx == TCL_ERROR { 28723 rc = TCL_ERROR 28724 break 28725 } else { 28726 pVar = uintptr(0) 28727 } 28728 } 28729 if pVar != 0 { 28730 var data uintptr 28731 var zType uintptr = func() uintptr { 28732 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28733 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28734 } 28735 return ts + 584 28736 }() 28737 c = *(*int8)(unsafe.Pointer(zType)) 28738 if int32(*(*int8)(unsafe.Pointer(zVar))) == '@' || int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28739 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+4) 28740 sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) 28741 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28742 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*4)) = pVar 28743 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 28744 tcl.XTcl_GetIntFromObj(tls, interp, pVar, bp+4) 28745 sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*int32)(unsafe.Pointer(bp + 4))) 28746 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28747 tcl.XTcl_GetDoubleFromObj(tls, interp, pVar, bp+8) 28748 sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*float64)(unsafe.Pointer(bp + 8))) 28749 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28750 tcl.XTcl_GetWideIntFromObj(tls, interp, pVar, bp+16) 28751 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*Tcl_WideInt)(unsafe.Pointer(bp + 16))) 28752 } else { 28753 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+4) 28754 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) 28755 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28756 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*4)) = pVar 28757 } 28758 } else { 28759 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28760 } 28761 if needResultReset != 0 { 28762 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28763 } 28764 } 28765 } 28766 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = iParm 28767 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = pPreStmt 28768 if needResultReset != 0 && rc == TCL_OK { 28769 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28770 } 28771 28772 return rc 28773 } 28774 28775 func dbReleaseStmt(tls *libc.TLS, pDb uintptr, pPreStmt uintptr, discard int32) { 28776 var i int32 28777 28778 for i = 0; i < (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm; i++ { 28779 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28780 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(i)*4)) 28781 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28782 tcl.XTclFreeObj(tls, _objPtr) 28783 } 28784 } 28785 } 28786 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = 0 28787 28788 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt <= 0 || discard != 0 { 28789 dbFreeStmt(tls, pPreStmt) 28790 } else { 28791 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList 28792 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev = uintptr(0) 28793 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 28794 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpPrev = pPreStmt 28795 } 28796 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = pPreStmt 28797 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast == uintptr(0) { 28798 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = pPreStmt 28799 } else { 28800 } 28801 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt++ 28802 28803 for (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt > (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt { 28804 var pLast uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast 28805 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pLast)).FpPrev 28806 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast)).FpNext = uintptr(0) 28807 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28808 dbFreeStmt(tls, pLast) 28809 } 28810 } 28811 } 28812 28813 type DbEvalContext1 = struct { 28814 FpDb uintptr 28815 FpSql uintptr 28816 FzSql uintptr 28817 FpPreStmt uintptr 28818 FnCol int32 28819 FevalFlags int32 28820 FpArray uintptr 28821 FapColName uintptr 28822 } 28823 28824 type DbEvalContext = DbEvalContext1 28825 28826 func dbReleaseColumnNames(tls *libc.TLS, p uintptr) { 28827 if (*DbEvalContext)(unsafe.Pointer(p)).FapColName != 0 { 28828 var i int32 28829 for i = 0; i < (*DbEvalContext)(unsafe.Pointer(p)).FnCol; i++ { 28830 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28831 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FapColName + uintptr(i)*4)) 28832 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28833 tcl.XTclFreeObj(tls, _objPtr) 28834 } 28835 } 28836 } 28837 tcl.XTcl_Free(tls, (*DbEvalContext)(unsafe.Pointer(p)).FapColName) 28838 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = uintptr(0) 28839 } 28840 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = 0 28841 } 28842 28843 func dbEvalInit(tls *libc.TLS, p uintptr, pDb uintptr, pSql uintptr, pArray uintptr, evalFlags int32) { 28844 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(DbEvalContext{}))) 28845 (*DbEvalContext)(unsafe.Pointer(p)).FpDb = pDb 28846 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = tcl.XTcl_GetString(tls, pSql) 28847 (*DbEvalContext)(unsafe.Pointer(p)).FpSql = pSql 28848 (*Tcl_Obj)(unsafe.Pointer(pSql)).FrefCount++ 28849 if pArray != 0 { 28850 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = pArray 28851 (*Tcl_Obj)(unsafe.Pointer(pArray)).FrefCount++ 28852 } 28853 (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags = evalFlags 28854 addDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 28855 } 28856 28857 func dbEvalRowInfo(tls *libc.TLS, p uintptr, pnCol uintptr, papColName uintptr) { 28858 if uintptr(0) == (*DbEvalContext)(unsafe.Pointer(p)).FapColName { 28859 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 28860 var i int32 28861 var nCol int32 28862 var apColName uintptr = uintptr(0) 28863 28864 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = libc.AssignInt32(&nCol, sqlite3.Xsqlite3_column_count(tls, pStmt)) 28865 if nCol > 0 && (papColName != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0) { 28866 apColName = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(uintptr(0)))*uint32(nCol)) 28867 for i = 0; i < nCol; i++ { 28868 *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*4)) = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_name(tls, pStmt, i), -1) 28869 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*4)))).FrefCount++ 28870 } 28871 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = apColName 28872 } 28873 28874 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28875 var interp uintptr = (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).Finterp 28876 var pColList uintptr = tcl.XTcl_NewObj(tls) 28877 var pStar uintptr = tcl.XTcl_NewStringObj(tls, ts+3840, -1) 28878 28879 for i = 0; i < nCol; i++ { 28880 tcl.XTcl_ListObjAppendElement(tls, interp, pColList, *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*4))) 28881 } 28882 (*Tcl_Obj)(unsafe.Pointer(pStar)).FrefCount++ 28883 tcl.XTcl_ObjSetVar2(tls, interp, (*DbEvalContext)(unsafe.Pointer(p)).FpArray, pStar, pColList, 0) 28884 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28885 var _objPtr uintptr = pStar 28886 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28887 tcl.XTclFreeObj(tls, _objPtr) 28888 } 28889 } 28890 } 28891 } 28892 28893 if papColName != 0 { 28894 *(*uintptr)(unsafe.Pointer(papColName)) = (*DbEvalContext)(unsafe.Pointer(p)).FapColName 28895 } 28896 if pnCol != 0 { 28897 *(*int32)(unsafe.Pointer(pnCol)) = (*DbEvalContext)(unsafe.Pointer(p)).FnCol 28898 } 28899 } 28900 28901 func dbEvalStep(tls *libc.TLS, p uintptr) int32 { 28902 var zPrevSql uintptr = uintptr(0) 28903 28904 for *(*int8)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FzSql)) != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 28905 var rc int32 28906 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt == uintptr(0) { 28907 zPrevSql = func() uintptr { 28908 if (*DbEvalContext)(unsafe.Pointer(p)).FzSql == zPrevSql { 28909 return uintptr(0) 28910 } 28911 return (*DbEvalContext)(unsafe.Pointer(p)).FzSql 28912 }() 28913 rc = dbPrepareAndBind(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FzSql, p+8, p+12) 28914 if rc != TCL_OK { 28915 return rc 28916 } 28917 } else { 28918 var rcs int32 28919 var pDb uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpDb 28920 var pPreStmt uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt 28921 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28922 28923 rcs = sqlite3.Xsqlite3_step(tls, pStmt) 28924 if rcs == SQLITE_ROW { 28925 return TCL_OK 28926 } 28927 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28928 dbEvalRowInfo(tls, p, uintptr(0), uintptr(0)) 28929 } 28930 rcs = sqlite3.Xsqlite3_reset(tls, pStmt) 28931 28932 (*SqliteDb)(unsafe.Pointer(pDb)).FnStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, 1) 28933 (*SqliteDb)(unsafe.Pointer(pDb)).FnSort = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_SORT, 1) 28934 (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_AUTOINDEX, 1) 28935 (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_VM_STEP, 1) 28936 dbReleaseColumnNames(tls, p) 28937 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 28938 28939 if rcs != SQLITE_OK { 28940 dbReleaseStmt(tls, pDb, pPreStmt, 1) 28941 if (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FbLegacyPrepare != 0 && rcs == SQLITE_SCHEMA && zPrevSql != 0 { 28942 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = zPrevSql 28943 continue 28944 } 28945 tcl.XTcl_SetObjResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, 28946 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28947 return TCL_ERROR 28948 } else { 28949 dbReleaseStmt(tls, pDb, pPreStmt, 0) 28950 } 28951 } 28952 } 28953 28954 return TCL_BREAK 28955 } 28956 28957 func dbEvalFinalize(tls *libc.TLS, p uintptr) { 28958 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 28959 sqlite3.Xsqlite3_reset(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt) 28960 dbReleaseStmt(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt, 0) 28961 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 28962 } 28963 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 28964 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28965 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 28966 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28967 tcl.XTclFreeObj(tls, _objPtr) 28968 } 28969 } 28970 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = uintptr(0) 28971 } 28972 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28973 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpSql 28974 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28975 tcl.XTclFreeObj(tls, _objPtr) 28976 } 28977 } 28978 dbReleaseColumnNames(tls, p) 28979 delDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 28980 } 28981 28982 func dbEvalColumnValue(tls *libc.TLS, p uintptr, iCol int32) uintptr { 28983 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 28984 switch sqlite3.Xsqlite3_column_type(tls, pStmt, iCol) { 28985 case SQLITE_BLOB: 28986 { 28987 var bytes int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, iCol) 28988 var zBlob uintptr = sqlite3.Xsqlite3_column_blob(tls, pStmt, iCol) 28989 if !(zBlob != 0) { 28990 bytes = 0 28991 } 28992 return tcl.XTcl_NewByteArrayObj(tls, zBlob, bytes) 28993 28994 } 28995 case SQLITE_INTEGER: 28996 { 28997 var v sqlite_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, iCol) 28998 if v >= int64(-2147483647) && v <= int64(2147483647) { 28999 return tcl.XTcl_NewIntObj(tls, int32(v)) 29000 } else { 29001 return tcl.XTcl_NewWideIntObj(tls, v) 29002 } 29003 29004 } 29005 fallthrough 29006 case SQLITE_FLOAT: 29007 { 29008 return tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_column_double(tls, pStmt, iCol)) 29009 29010 } 29011 case SQLITE_NULL: 29012 { 29013 return tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 29014 29015 } 29016 } 29017 29018 return tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_text(tls, pStmt, iCol), -1) 29019 } 29020 29021 func DbUseNre(tls *libc.TLS) int32 { 29022 bp := tls.Alloc(8) 29023 defer tls.Free(8) 29024 29025 tcl.XTcl_GetVersion(tls, bp, bp+4, uintptr(0), uintptr(0)) 29026 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == 8 && *(*int32)(unsafe.Pointer(bp + 4)) >= 6 || *(*int32)(unsafe.Pointer(bp)) > 8) 29027 } 29028 29029 func DbEvalNextCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 29030 bp := tls.Alloc(8) 29031 defer tls.Free(8) 29032 29033 var rc int32 = result 29034 29035 var p uintptr = *(*ClientData)(unsafe.Pointer(data)) 29036 var pScript uintptr = *(*ClientData)(unsafe.Pointer(data + 1*4)) 29037 var pArray uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 29038 29039 for (rc == TCL_OK || rc == TCL_CONTINUE) && TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, p)) { 29040 var i int32 29041 29042 dbEvalRowInfo(tls, p, bp, bp+4) 29043 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 29044 if pArray == uintptr(0) { 29045 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(i)*4)), uintptr(0), dbEvalColumnValue(tls, p, i), 0) 29046 } else if (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags&SQLITE_EVAL_WITHOUTNULLS != 0 && 29047 sqlite3.Xsqlite3_column_type(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt, i) == SQLITE_NULL { 29048 tcl.XTcl_UnsetVar2(tls, interp, tcl.XTcl_GetString(tls, pArray), 29049 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(i)*4))), 0) 29050 } else { 29051 tcl.XTcl_ObjSetVar2(tls, interp, pArray, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(i)*4)), dbEvalColumnValue(tls, p, i), 0) 29052 } 29053 } 29054 29055 if DbUseNre(tls) != 0 { 29056 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 29057 f func(*libc.TLS, uintptr, uintptr, int32) int32 29058 }{DbEvalNextCmd})), p, pScript, uintptr(0), uintptr(0)) 29059 return tcl.XTcl_NREvalObj(tls, interp, pScript, 0) 29060 } else { 29061 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 29062 } 29063 } 29064 29065 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29066 var _objPtr uintptr = pScript 29067 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29068 tcl.XTclFreeObj(tls, _objPtr) 29069 } 29070 } 29071 dbEvalFinalize(tls, p) 29072 tcl.XTcl_Free(tls, p) 29073 29074 if rc == TCL_OK || rc == TCL_BREAK { 29075 tcl.XTcl_ResetResult(tls, interp) 29076 rc = TCL_OK 29077 } 29078 return rc 29079 } 29080 29081 func DbHookCmd(tls *libc.TLS, interp uintptr, pDb uintptr, pArg uintptr, ppHook uintptr) { 29082 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 29083 29084 if *(*uintptr)(unsafe.Pointer(ppHook)) != 0 { 29085 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(ppHook))) 29086 if pArg != 0 { 29087 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29088 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer(ppHook)) 29089 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29090 tcl.XTclFreeObj(tls, _objPtr) 29091 } 29092 } 29093 *(*uintptr)(unsafe.Pointer(ppHook)) = uintptr(0) 29094 } 29095 } 29096 if pArg != 0 { 29097 if tcl.XTcl_GetCharLength(tls, pArg) > 0 { 29098 *(*uintptr)(unsafe.Pointer(ppHook)) = pArg 29099 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppHook)))).FrefCount++ 29100 } 29101 } 29102 29103 sqlite3.Xsqlite3_preupdate_hook(tls, db, func() uintptr { 29104 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 29105 return *(*uintptr)(unsafe.Pointer(&struct { 29106 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, sqlite_int64, sqlite_int64) 29107 }{DbPreUpdateHandler})) 29108 } 29109 return uintptr(0) 29110 }(), pDb) 29111 sqlite3.Xsqlite3_update_hook(tls, db, func() uintptr { 29112 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 29113 return *(*uintptr)(unsafe.Pointer(&struct { 29114 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, sqlite_int64) 29115 }{DbUpdateHandler})) 29116 } 29117 return uintptr(0) 29118 }(), pDb) 29119 sqlite3.Xsqlite3_rollback_hook(tls, db, func() uintptr { 29120 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 29121 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbRollbackHandler})) 29122 } 29123 return uintptr(0) 29124 }(), pDb) 29125 sqlite3.Xsqlite3_wal_hook(tls, db, func() uintptr { 29126 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 29127 return *(*uintptr)(unsafe.Pointer(&struct { 29128 f func(*libc.TLS, uintptr, uintptr, uintptr, int32) int32 29129 }{DbWalHandler})) 29130 } 29131 return uintptr(0) 29132 }(), pDb) 29133 } 29134 29135 func DbObjCmd(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29136 bp := tls.Alloc(1460) 29137 defer tls.Free(1460) 29138 *(*uintptr)(unsafe.Pointer(bp + 1344)) = cd 29139 29140 var pDb uintptr 29141 29142 var rc int32 29143 var zAuth uintptr 29144 29145 var zDestFile uintptr 29146 var zSrcDb uintptr 29147 29148 var pBackup uintptr 29149 var zCallback uintptr 29150 29151 var zBusy uintptr 29152 29153 var subCmd uintptr 29154 29155 var pResult uintptr 29156 var pCollate uintptr 29157 var zName uintptr 29158 var zScript uintptr 29159 29160 var _objPtr uintptr 29161 var zCommit uintptr 29162 29163 var pResult1 uintptr 29164 var isComplete int32 29165 29166 var zOpt uintptr 29167 29168 var pResult2 uintptr 29169 var ii int32 29170 var zErr uintptr 29171 var nErr int32 29172 var z uintptr 29173 var zTable uintptr 29174 var zFile uintptr 29175 var zConflict uintptr 29176 29177 var nCol int32 29178 var nByte int32 29179 var i int32 29180 var j int32 29181 var nSep int32 29182 var nNull int32 29183 var zSql uintptr 29184 var zLine uintptr 29185 var azCol uintptr 29186 var zCommit1 uintptr 29187 var in uintptr 29188 var lineno int32 29189 29190 var pResult3 uintptr 29191 29192 var zSep uintptr 29193 var zNull uintptr 29194 29195 var z1 uintptr 29196 var flags int32 29197 var zSchema uintptr 29198 var pValue uintptr 29199 var pBA uintptr 29200 var pData uintptr 29201 29202 var xrc int32 29203 29204 var i1 int32 29205 29206 var pResult4 uintptr 29207 29208 var i2 int32 29209 29210 var _objPtr1 uintptr 29211 29212 var pRet uintptr 29213 29214 var p uintptr 29215 var pArray uintptr 29216 var pScript uintptr 29217 var evalFlags int32 29218 var zOpt1 uintptr 29219 29220 var z2 uintptr 29221 var n1 int32 29222 var _objPtr2 uintptr 29223 var flags1 int32 29224 var pFunc uintptr 29225 var pScript1 uintptr 29226 var zName1 uintptr 29227 29228 var i3 int32 29229 29230 var isReadonly1 int32 29231 var zDb uintptr 29232 var zTable1 uintptr 29233 var zColumn uintptr 29234 29235 var zNull1 uintptr 29236 var pResult5 uintptr 29237 var rowid Tcl_WideInt 29238 var zProgress uintptr 29239 29240 var zProfile uintptr 29241 29242 var zSrcFile uintptr 29243 var zDestDb uintptr 29244 29245 var pBackup1 uintptr 29246 var nTimeout int32 29247 var needFree int32 29248 var zSchema1 uintptr 29249 29250 var pData1 uintptr 29251 var v2 int32 29252 var zOp uintptr 29253 29254 var pResult6 uintptr 29255 var zTrace uintptr 29256 29257 var _objPtr3 uintptr 29258 var _objPtr4 uintptr 29259 29260 var pError uintptr 29261 29262 var i4 int32 29263 var zTraceV2 uintptr 29264 29265 var wMask Tcl_WideInt 29266 29267 var pScript2 uintptr 29268 var zBegin uintptr 29269 var _objPtr5 uintptr 29270 var xNotify uintptr 29271 var pNotifyArg uintptr 29272 var nCol2 int32 29273 var pRet1 uintptr 29274 var pObj1 uintptr 29275 29276 var ppHook uintptr 29277 29278 var zArg uintptr 29279 var i5 int32 29280 pDb = *(*uintptr)(unsafe.Pointer(bp + 1344)) 29281 rc = TCL_OK 29282 29283 if !(objc < 2) { 29284 goto __1 29285 } 29286 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 29287 return TCL_ERROR 29288 __1: 29289 ; 29290 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(unsafe.Pointer(&DB_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+11691, 0, bp+1016) != 0) { 29291 goto __2 29292 } 29293 return TCL_ERROR 29294 __2: 29295 ; 29296 switch uint32(*(*int32)(unsafe.Pointer(bp + 1016))) { 29297 case uint32(0): 29298 goto __4 29299 29300 case uint32(1): 29301 goto __5 29302 29303 case uint32(2): 29304 goto __6 29305 29306 case uint32(3): 29307 goto __7 29308 29309 case uint32(4): 29310 goto __8 29311 29312 case uint32(5): 29313 goto __9 29314 29315 case uint32(6): 29316 goto __10 29317 29318 case uint32(7): 29319 goto __11 29320 29321 case uint32(8): 29322 goto __12 29323 29324 case uint32(9): 29325 goto __13 29326 29327 case uint32(10): 29328 goto __14 29329 29330 case uint32(11): 29331 goto __15 29332 29333 case uint32(12): 29334 goto __16 29335 29336 case uint32(13): 29337 goto __17 29338 29339 case uint32(14): 29340 goto __18 29341 29342 case uint32(15): 29343 goto __19 29344 29345 case uint32(16): 29346 goto __20 29347 29348 case uint32(18): 29349 goto __21 29350 case uint32(24): 29351 goto __22 29352 29353 case uint32(17): 29354 goto __23 29355 29356 case uint32(19): 29357 goto __24 29358 29359 case uint32(20): 29360 goto __25 29361 29362 case uint32(21): 29363 goto __26 29364 29365 case uint32(23): 29366 goto __27 29367 29368 case uint32(22): 29369 goto __28 29370 29371 case uint32(27): 29372 goto __29 29373 29374 case uint32(26): 29375 goto __30 29376 29377 case uint32(28): 29378 goto __31 29379 29380 case uint32(29): 29381 goto __32 29382 29383 case uint32(31): 29384 goto __33 29385 29386 case uint32(32): 29387 goto __34 29388 29389 case uint32(33): 29390 goto __35 29391 29392 case uint32(34): 29393 goto __36 29394 29395 case uint32(35): 29396 goto __37 29397 29398 case uint32(36): 29399 goto __38 29400 29401 case uint32(37): 29402 goto __39 29403 29404 case uint32(38): 29405 goto __40 29406 29407 case uint32(25): 29408 goto __41 29409 29410 case uint32(41): 29411 goto __42 29412 case uint32(39): 29413 goto __43 29414 case uint32(30): 29415 goto __44 29416 29417 case uint32(40): 29418 goto __45 29419 } 29420 goto __3 29421 29422 __4: 29423 if !(objc > 3) { 29424 goto __46 29425 } 29426 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29427 return TCL_ERROR 29428 goto __47 29429 __46: 29430 if !(objc == 2) { 29431 goto __48 29432 } 29433 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29434 goto __50 29435 } 29436 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, uintptr(0))) 29437 __50: 29438 ; 29439 goto __49 29440 __48: 29441 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29442 goto __51 29443 } 29444 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 29445 __51: 29446 ; 29447 zAuth = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1020) 29448 if !(zAuth != 0 && *(*int32)(unsafe.Pointer(bp + 1020)) > 0) { 29449 goto __52 29450 } 29451 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 29452 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, zAuth, uint32(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 29453 goto __53 29454 __52: 29455 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = uintptr(0) 29456 __53: 29457 ; 29458 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29459 goto __54 29460 } 29461 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29462 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29463 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 29464 }{auth_callback})), pDb) 29465 goto __55 29466 __54: 29467 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29468 __55: 29469 ; 29470 __49: 29471 ; 29472 __47: 29473 ; 29474 goto __3 29475 29476 __5: 29477 if !(objc == 3) { 29478 goto __56 29479 } 29480 zSrcDb = ts + 85 29481 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 29482 goto __57 29483 __56: 29484 if !(objc == 4) { 29485 goto __58 29486 } 29487 zSrcDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 29488 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 29489 goto __59 29490 __58: 29491 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 29492 return TCL_ERROR 29493 __59: 29494 ; 29495 __57: 29496 ; 29497 rc = sqlite3.Xsqlite3_open_v2(tls, zDestFile, bp+1024, 29498 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 29499 if !(rc != SQLITE_OK) { 29500 goto __60 29501 } 29502 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+11729, 29503 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29504 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29505 return TCL_ERROR 29506 __60: 29507 ; 29508 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 1024)), ts+85, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSrcDb) 29509 if !(pBackup == uintptr(0)) { 29510 goto __61 29511 } 29512 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+11759, 29513 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29514 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29515 return TCL_ERROR 29516 __61: 29517 ; 29518 __62: 29519 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup, 100)) == SQLITE_OK) { 29520 goto __63 29521 } 29522 goto __62 29523 __63: 29524 ; 29525 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 29526 if !(rc == SQLITE_DONE) { 29527 goto __64 29528 } 29529 rc = TCL_OK 29530 goto __65 29531 __64: 29532 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+11759, 29533 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29534 rc = TCL_ERROR 29535 __65: 29536 ; 29537 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29538 goto __3 29539 29540 __6: 29541 if !(objc > 3) { 29542 goto __66 29543 } 29544 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29545 return TCL_ERROR 29546 goto __67 29547 __66: 29548 if !(objc == 2) { 29549 goto __68 29550 } 29551 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 29552 goto __70 29553 } 29554 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+88, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, uintptr(0))) 29555 __70: 29556 ; 29557 goto __69 29558 __68: 29559 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 29560 goto __71 29561 } 29562 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 29563 __71: 29564 ; 29565 zCallback = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1028) 29566 if !(zCallback != 0 && *(*int32)(unsafe.Pointer(bp + 1028)) > 0) { 29567 goto __72 29568 } 29569 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1028))+1)) 29570 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, zCallback, uint32(*(*int32)(unsafe.Pointer(bp + 1028))+1)) 29571 goto __73 29572 __72: 29573 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = uintptr(0) 29574 __73: 29575 ; 29576 __69: 29577 ; 29578 __67: 29579 ; 29580 goto __3 29581 29582 __7: 29583 if !(objc > 3) { 29584 goto __74 29585 } 29586 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11775) 29587 return TCL_ERROR 29588 goto __75 29589 __74: 29590 if !(objc == 2) { 29591 goto __76 29592 } 29593 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29594 goto __78 29595 } 29596 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, uintptr(0))) 29597 __78: 29598 ; 29599 goto __77 29600 __76: 29601 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29602 goto __79 29603 } 29604 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 29605 __79: 29606 ; 29607 zBusy = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1032) 29608 if !(zBusy != 0 && *(*int32)(unsafe.Pointer(bp + 1032)) > 0) { 29609 goto __80 29610 } 29611 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 29612 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, zBusy, uint32(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 29613 goto __81 29614 __80: 29615 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = uintptr(0) 29616 __81: 29617 ; 29618 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29619 goto __82 29620 } 29621 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29622 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29623 f func(*libc.TLS, uintptr, int32) int32 29624 }{DbBusyHandler})), pDb) 29625 goto __83 29626 __82: 29627 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29628 __83: 29629 ; 29630 __77: 29631 ; 29632 __75: 29633 ; 29634 goto __3 29635 29636 __8: 29637 if !(objc <= 2) { 29638 goto __84 29639 } 29640 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+11784) 29641 return TCL_ERROR 29642 __84: 29643 ; 29644 subCmd = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0)) 29645 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 'f' && libc.Xstrcmp(tls, subCmd, ts+11803) == 0) { 29646 goto __85 29647 } 29648 if !(objc != 3) { 29649 goto __87 29650 } 29651 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11803) 29652 return TCL_ERROR 29653 goto __88 29654 __87: 29655 flushStmtCache(tls, pDb) 29656 __88: 29657 ; 29658 goto __86 29659 __85: 29660 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 's' && libc.Xstrcmp(tls, subCmd, ts+11809) == 0) { 29661 goto __89 29662 } 29663 if !(objc != 4) { 29664 goto __91 29665 } 29666 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11814) 29667 return TCL_ERROR 29668 goto __92 29669 __91: 29670 if !(TCL_ERROR == tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+1036)) { 29671 goto __93 29672 } 29673 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+120, ts+11821, 29674 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), uintptr(0)), ts+11838, uintptr(0))) 29675 return TCL_ERROR 29676 goto __94 29677 __93: 29678 if !(*(*int32)(unsafe.Pointer(bp + 1036)) < 0) { 29679 goto __95 29680 } 29681 flushStmtCache(tls, pDb) 29682 *(*int32)(unsafe.Pointer(bp + 1036)) = 0 29683 goto __96 29684 __95: 29685 if !(*(*int32)(unsafe.Pointer(bp + 1036)) > MAX_PREPARED_STMTS) { 29686 goto __97 29687 } 29688 *(*int32)(unsafe.Pointer(bp + 1036)) = MAX_PREPARED_STMTS 29689 __97: 29690 ; 29691 __96: 29692 ; 29693 (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt = *(*int32)(unsafe.Pointer(bp + 1036)) 29694 __94: 29695 ; 29696 __92: 29697 ; 29698 goto __90 29699 __89: 29700 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+152, ts+11851, 29701 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0)), ts+11864, 29702 uintptr(0))) 29703 return TCL_ERROR 29704 __90: 29705 ; 29706 __86: 29707 ; 29708 goto __3 29709 29710 __9: 29711 if !(objc != 2) { 29712 goto __98 29713 } 29714 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 29715 return TCL_ERROR 29716 __98: 29717 ; 29718 pResult = tcl.XTcl_GetObjResult(tls, interp) 29719 tcl.XTcl_SetWideIntObj(tls, pResult, sqlite3.Xsqlite3_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 29720 goto __3 29721 29722 __10: 29723 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0))) 29724 goto __3 29725 29726 __11: 29727 if !(objc != 4) { 29728 goto __99 29729 } 29730 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11889) 29731 return TCL_ERROR 29732 __99: 29733 ; 29734 zName = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0)) 29735 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+1040) 29736 pCollate = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqlCollate{}))+uint32(*(*int32)(unsafe.Pointer(bp + 1040)))+uint32(1)) 29737 if !(pCollate == uintptr(0)) { 29738 goto __100 29739 } 29740 return TCL_ERROR 29741 __100: 29742 ; 29743 (*SqlCollate)(unsafe.Pointer(pCollate)).Finterp = interp 29744 (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 29745 (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript = pCollate + 1*12 29746 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = pCollate 29747 libc.Xmemcpy(tls, (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript, zScript, uint32(*(*int32)(unsafe.Pointer(bp + 1040))+1)) 29748 if !(sqlite3.Xsqlite3_create_collation(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName, SQLITE_UTF8, 29749 pCollate, *(*uintptr)(unsafe.Pointer(&struct { 29750 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 29751 }{tclSqlCollate}))) != 0) { 29752 goto __101 29753 } 29754 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 29755 return TCL_ERROR 29756 __101: 29757 ; 29758 goto __3 29759 29760 __12: 29761 if !(objc != 3) { 29762 goto __102 29763 } 29764 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+10187) 29765 return TCL_ERROR 29766 __102: 29767 ; 29768 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0) { 29769 goto __103 29770 } 29771 __104: 29772 _objPtr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 29773 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1) { 29774 goto __107 29775 } 29776 tcl.XTclFreeObj(tls, _objPtr) 29777 __107: 29778 ; 29779 goto __105 29780 __105: 29781 if 0 != 0 { 29782 goto __104 29783 } 29784 goto __106 29785 __106: 29786 ; 29787 __103: 29788 ; 29789 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 29790 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount++ 29791 sqlite3.Xsqlite3_collation_needed(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, pDb, *(*uintptr)(unsafe.Pointer(&struct { 29792 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 29793 }{tclCollateNeeded}))) 29794 goto __3 29795 29796 __13: 29797 if !(objc > 3) { 29798 goto __108 29799 } 29800 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29801 return TCL_ERROR 29802 goto __109 29803 __108: 29804 if !(objc == 2) { 29805 goto __110 29806 } 29807 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29808 goto __112 29809 } 29810 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+184, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, uintptr(0))) 29811 __112: 29812 ; 29813 goto __111 29814 __110: 29815 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29816 goto __113 29817 } 29818 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 29819 __113: 29820 ; 29821 zCommit = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1044) 29822 if !(zCommit != 0 && *(*int32)(unsafe.Pointer(bp + 1044)) > 0) { 29823 goto __114 29824 } 29825 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1044))+1)) 29826 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, zCommit, uint32(*(*int32)(unsafe.Pointer(bp + 1044))+1)) 29827 goto __115 29828 __114: 29829 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = uintptr(0) 29830 __115: 29831 ; 29832 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29833 goto __116 29834 } 29835 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29836 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29837 f func(*libc.TLS, uintptr) int32 29838 }{DbCommitHandler})), pDb) 29839 goto __117 29840 __116: 29841 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29842 __117: 29843 ; 29844 __111: 29845 ; 29846 __109: 29847 ; 29848 goto __3 29849 29850 __14: 29851 if !(objc != 3) { 29852 goto __118 29853 } 29854 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 29855 return TCL_ERROR 29856 __118: 29857 ; 29858 isComplete = sqlite3.Xsqlite3_complete(tls, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0))) 29859 pResult1 = tcl.XTcl_GetObjResult(tls, interp) 29860 tcl.XTcl_SetIntObj(tls, pResult1, libc.Bool32(isComplete != 0)) 29861 goto __3 29862 29863 __15: 29864 if !(objc > 4) { 29865 goto __119 29866 } 29867 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11901) 29868 return TCL_ERROR 29869 __119: 29870 ; 29871 if !(objc == 2) { 29872 goto __120 29873 } 29874 29875 pResult2 = tcl.XTcl_NewListObj(tls, 0, uintptr(0)) 29876 ii = 0 29877 __122: 29878 if !(uint32(ii) < uint32(unsafe.Sizeof(aDbConfig))/uint32(unsafe.Sizeof(DbConfigChoices{}))) { 29879 goto __124 29880 } 29881 *(*int32)(unsafe.Pointer(bp + 1048)) = 0 29882 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+200, -1, bp+1048)) 29883 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 29884 tcl.XTcl_NewStringObj(tls, aDbConfig[ii].FzName, -1)) 29885 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 29886 tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1048)))) 29887 goto __123 29888 __123: 29889 ii++ 29890 goto __122 29891 goto __124 29892 __124: 29893 ; 29894 goto __121 29895 __120: 29896 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 29897 *(*int32)(unsafe.Pointer(bp + 1052)) = -1 29898 *(*int32)(unsafe.Pointer(bp + 1056)) = 0 29899 if !(int32(*(*int8)(unsafe.Pointer(zOpt))) == '-') { 29900 goto __125 29901 } 29902 zOpt++ 29903 __125: 29904 ; 29905 ii = 0 29906 __126: 29907 if !(uint32(ii) < uint32(unsafe.Sizeof(aDbConfig))/uint32(unsafe.Sizeof(DbConfigChoices{}))) { 29908 goto __128 29909 } 29910 if !(libc.Xstrcmp(tls, aDbConfig[ii].FzName, zOpt) == 0) { 29911 goto __129 29912 } 29913 goto __128 29914 __129: 29915 ; 29916 goto __127 29917 __127: 29918 ii++ 29919 goto __126 29920 goto __128 29921 __128: 29922 ; 29923 if !(uint32(ii) >= uint32(unsafe.Sizeof(aDbConfig))/uint32(unsafe.Sizeof(DbConfigChoices{}))) { 29924 goto __130 29925 } 29926 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+216, ts+11920, zOpt, 29927 ts+11945, uintptr(0))) 29928 return TCL_ERROR 29929 __130: 29930 ; 29931 if !(objc == 4) { 29932 goto __131 29933 } 29934 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+1052) != 0) { 29935 goto __132 29936 } 29937 return TCL_ERROR 29938 __132: 29939 ; 29940 __131: 29941 ; 29942 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+248, *(*int32)(unsafe.Pointer(bp + 1052)), bp+1056)) 29943 pResult2 = tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1056))) 29944 __121: 29945 ; 29946 tcl.XTcl_SetObjResult(tls, interp, pResult2) 29947 goto __3 29948 29949 __16: 29950 lineno = 0 29951 if !(objc < 5 || objc > 7) { 29952 goto __133 29953 } 29954 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 29955 ts+11947) 29956 return TCL_ERROR 29957 __133: 29958 ; 29959 if !(objc >= 6) { 29960 goto __134 29961 } 29962 zSep = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*4)), uintptr(0)) 29963 goto __135 29964 __134: 29965 zSep = ts + 12009 29966 __135: 29967 ; 29968 if !(objc >= 7) { 29969 goto __136 29970 } 29971 zNull = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*4)), uintptr(0)) 29972 goto __137 29973 __136: 29974 zNull = ts + 584 29975 __137: 29976 ; 29977 zConflict = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0)) 29978 zTable = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), uintptr(0)) 29979 zFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4)), uintptr(0)) 29980 nSep = strlen30(tls, zSep) 29981 nNull = strlen30(tls, zNull) 29982 if !(nSep == 0) { 29983 goto __138 29984 } 29985 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+264, ts+12011, 29986 uintptr(0))) 29987 return TCL_ERROR 29988 __138: 29989 ; 29990 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) { 29991 goto __139 29992 } 29993 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+280, ts+12090, zConflict, 29994 ts+12099, uintptr(0))) 29995 return TCL_ERROR 29996 __139: 29997 ; 29998 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+12179, libc.VaList(bp+312, zTable)) 29999 if !(zSql == uintptr(0)) { 30000 goto __140 30001 } 30002 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+320, ts+12198, zTable, uintptr(0))) 30003 return TCL_ERROR 30004 __140: 30005 ; 30006 nByte = strlen30(tls, zSql) 30007 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1060, uintptr(0)) 30008 sqlite3.Xsqlite3_free(tls, zSql) 30009 if !(rc != 0) { 30010 goto __141 30011 } 30012 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+344, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30013 nCol = 0 30014 goto __142 30015 __141: 30016 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 1060))) 30017 __142: 30018 ; 30019 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1060))) 30020 if !(nCol == 0) { 30021 goto __143 30022 } 30023 return TCL_ERROR 30024 __143: 30025 ; 30026 zSql = libc.Xmalloc(tls, uint32(nByte+50+nCol*2)) 30027 if !(zSql == uintptr(0)) { 30028 goto __144 30029 } 30030 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+368, ts+12229, uintptr(0))) 30031 return TCL_ERROR 30032 __144: 30033 ; 30034 sqlite3.Xsqlite3_snprintf(tls, nByte+50, zSql, ts+12251, 30035 libc.VaList(bp+384, zConflict, zTable)) 30036 j = strlen30(tls, zSql) 30037 i = 1 30038 __145: 30039 if !(i < nCol) { 30040 goto __147 30041 } 30042 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(',') 30043 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 30044 goto __146 30045 __146: 30046 i++ 30047 goto __145 30048 goto __147 30049 __147: 30050 ; 30051 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(')') 30052 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 30053 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1060, uintptr(0)) 30054 libc.Xfree(tls, zSql) 30055 if !(rc != 0) { 30056 goto __148 30057 } 30058 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+400, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30059 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1060))) 30060 return TCL_ERROR 30061 __148: 30062 ; 30063 in = libc.Xfopen(tls, zFile, ts+4402) 30064 if !(in == uintptr(0)) { 30065 goto __149 30066 } 30067 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+424, ts+12283, zFile, uintptr(0))) 30068 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1060))) 30069 return TCL_ERROR 30070 __149: 30071 ; 30072 azCol = libc.Xmalloc(tls, uint32(unsafe.Sizeof(uintptr(0)))*uint32(nCol+1)) 30073 if !(azCol == uintptr(0)) { 30074 goto __150 30075 } 30076 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+448, ts+12229, uintptr(0))) 30077 libc.Xfclose(tls, in) 30078 return TCL_ERROR 30079 __150: 30080 ; 30081 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+12309, uintptr(0), uintptr(0), uintptr(0)) 30082 zCommit1 = ts + 11628 30083 __151: 30084 if !(libc.AssignUintptr(&zLine, local_getline(tls, uintptr(0), in)) != uintptr(0)) { 30085 goto __152 30086 } 30087 lineno++ 30088 *(*uintptr)(unsafe.Pointer(azCol)) = zLine 30089 i = 0 30090 z = zLine 30091 __153: 30092 if !(*(*int8)(unsafe.Pointer(z)) != 0) { 30093 goto __155 30094 } 30095 if !(int32(*(*int8)(unsafe.Pointer(z))) == int32(*(*int8)(unsafe.Pointer(zSep))) && libc.Xstrncmp(tls, z, zSep, uint32(nSep)) == 0) { 30096 goto __156 30097 } 30098 *(*int8)(unsafe.Pointer(z)) = int8(0) 30099 i++ 30100 if !(i < nCol) { 30101 goto __157 30102 } 30103 *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*4)) = z + uintptr(nSep) 30104 z += uintptr(nSep - 1) 30105 __157: 30106 ; 30107 __156: 30108 ; 30109 goto __154 30110 __154: 30111 z++ 30112 goto __153 30113 goto __155 30114 __155: 30115 ; 30116 if !(i+1 != nCol) { 30117 goto __158 30118 } 30119 nErr = strlen30(tls, zFile) + 200 30120 zErr = libc.Xmalloc(tls, uint32(nErr)) 30121 if !(zErr != 0) { 30122 goto __159 30123 } 30124 sqlite3.Xsqlite3_snprintf(tls, nErr, zErr, 30125 ts+12315, 30126 libc.VaList(bp+464, zFile, lineno, nCol, i+1)) 30127 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+496, zErr, uintptr(0))) 30128 libc.Xfree(tls, zErr) 30129 __159: 30130 ; 30131 zCommit1 = ts + 7824 30132 goto __152 30133 __158: 30134 ; 30135 i = 0 30136 __160: 30137 if !(i < nCol) { 30138 goto __162 30139 } 30140 30141 if !(nNull > 0 && libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*4)), zNull) == 0 || 30142 strlen30(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*4))) == 0) { 30143 goto __163 30144 } 30145 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 1060)), i+1) 30146 goto __164 30147 __163: 30148 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1060)), i+1, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*4)), -1, uintptr(0)) 30149 __164: 30150 ; 30151 goto __161 30152 __161: 30153 i++ 30154 goto __160 30155 goto __162 30156 __162: 30157 ; 30158 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 1060))) 30159 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 1060))) 30160 libc.Xfree(tls, zLine) 30161 if !(rc != SQLITE_OK) { 30162 goto __165 30163 } 30164 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+512, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30165 zCommit1 = ts + 7824 30166 goto __152 30167 __165: 30168 ; 30169 goto __151 30170 __152: 30171 ; 30172 libc.Xfree(tls, azCol) 30173 libc.Xfclose(tls, in) 30174 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1060))) 30175 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zCommit1, uintptr(0), uintptr(0), uintptr(0)) 30176 30177 if !(int32(*(*int8)(unsafe.Pointer(zCommit1))) == 'C') { 30178 goto __166 30179 } 30180 30181 pResult3 = tcl.XTcl_GetObjResult(tls, interp) 30182 tcl.XTcl_SetIntObj(tls, pResult3, lineno) 30183 rc = TCL_OK 30184 goto __167 30185 __166: 30186 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+1064, ts+1333, libc.VaList(bp+536, lineno)) 30187 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+544, ts+12375, bp+1064, 30188 uintptr(0))) 30189 rc = TCL_ERROR 30190 __167: 30191 ; 30192 goto __3 30193 30194 __17: 30195 zSchema = uintptr(0) 30196 pValue = uintptr(0) 30197 *(*sqlite3_int64)(unsafe.Pointer(bp + 1160)) = int64(0) 30198 *(*int32)(unsafe.Pointer(bp + 1152)) = 0 30199 30200 if !(objc < 3) { 30201 goto __168 30202 } 30203 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12408) 30204 rc = TCL_ERROR 30205 goto __3 30206 __168: 30207 ; 30208 i1 = 2 30209 __169: 30210 if !(i1 < objc-1) { 30211 goto __171 30212 } 30213 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i1)*4))) 30214 if !(libc.Xstrcmp(tls, z1, ts+12425) == 0 && i1 < objc-2) { 30215 goto __172 30216 } 30217 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*4)), bp+1144) 30218 if !(rc != 0) { 30219 goto __173 30220 } 30221 goto deserialize_error 30222 __173: 30223 ; 30224 *(*sqlite3_int64)(unsafe.Pointer(bp + 1160)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 1144)) 30225 goto __170 30226 __172: 30227 ; 30228 if !(libc.Xstrcmp(tls, z1, ts+12434) == 0 && i1 < objc-2) { 30229 goto __174 30230 } 30231 rc = tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*4)), bp+1152) 30232 if !(rc != 0) { 30233 goto __175 30234 } 30235 goto deserialize_error 30236 __175: 30237 ; 30238 goto __170 30239 __174: 30240 ; 30241 if !(zSchema == uintptr(0) && i1 == objc-2 && int32(*(*int8)(unsafe.Pointer(z1))) != '-') { 30242 goto __176 30243 } 30244 zSchema = z1 30245 goto __170 30246 __176: 30247 ; 30248 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+568, ts+12444, z1, uintptr(0))) 30249 rc = TCL_ERROR 30250 goto deserialize_error 30251 goto __170 30252 __170: 30253 i1++ 30254 goto __169 30255 goto __171 30256 __171: 30257 ; 30258 pValue = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)) 30259 pBA = tcl.XTcl_GetByteArrayFromObj(tls, pValue, bp+1156) 30260 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(*(*int32)(unsafe.Pointer(bp + 1156)))) 30261 if !(pData == uintptr(0) && *(*int32)(unsafe.Pointer(bp + 1156)) > 0) { 30262 goto __177 30263 } 30264 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+592, ts+2069, uintptr(0))) 30265 rc = TCL_ERROR 30266 goto __178 30267 __177: 30268 if !(*(*int32)(unsafe.Pointer(bp + 1156)) > 0) { 30269 goto __179 30270 } 30271 libc.Xmemcpy(tls, pData, pBA, uint32(*(*int32)(unsafe.Pointer(bp + 1156)))) 30272 __179: 30273 ; 30274 if !(*(*int32)(unsafe.Pointer(bp + 1152)) != 0) { 30275 goto __180 30276 } 30277 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY 30278 goto __181 30279 __180: 30280 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE 30281 __181: 30282 ; 30283 xrc = sqlite3.Xsqlite3_deserialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, pData, int64(*(*int32)(unsafe.Pointer(bp + 1156))), int64(*(*int32)(unsafe.Pointer(bp + 1156))), uint32(flags)) 30284 if !(xrc != 0) { 30285 goto __182 30286 } 30287 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+608, ts+12461, uintptr(0))) 30288 rc = TCL_ERROR 30289 __182: 30290 ; 30291 if !(*(*sqlite3_int64)(unsafe.Pointer(bp + 1160)) > int64(0)) { 30292 goto __183 30293 } 30294 sqlite3.Xsqlite3_file_control(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, SQLITE_FCNTL_SIZE_LIMIT, bp+1160) 30295 __183: 30296 ; 30297 __178: 30298 ; 30299 deserialize_error: 30300 goto __3 30301 30302 __18: 30303 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+624, ts+12489, 30304 uintptr(0))) 30305 return TCL_ERROR 30306 30307 __19: 30308 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 30309 goto __3 30310 30311 __20: 30312 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_error_offset(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 30313 goto __3 30314 30315 __21: 30316 __22: 30317 pResult4 = uintptr(0) 30318 if !(objc != 3) { 30319 goto __184 30320 } 30321 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 30322 return TCL_ERROR 30323 __184: 30324 ; 30325 dbEvalInit(tls, bp+1168, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0), 0) 30326 rc = dbEvalStep(tls, bp+1168) 30327 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 24) { 30328 goto __185 30329 } 30330 if !(rc == TCL_OK) { 30331 goto __187 30332 } 30333 pResult4 = dbEvalColumnValue(tls, bp+1168, 0) 30334 goto __188 30335 __187: 30336 if !(rc == TCL_BREAK) { 30337 goto __189 30338 } 30339 tcl.XTcl_ResetResult(tls, interp) 30340 __189: 30341 ; 30342 __188: 30343 ; 30344 goto __186 30345 __185: 30346 if !(rc == TCL_BREAK || rc == TCL_OK) { 30347 goto __190 30348 } 30349 pResult4 = tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(rc == TCL_OK) != 0)) 30350 __190: 30351 ; 30352 __186: 30353 ; 30354 dbEvalFinalize(tls, bp+1168) 30355 if !(pResult4 != 0) { 30356 goto __191 30357 } 30358 tcl.XTcl_SetObjResult(tls, interp, pResult4) 30359 __191: 30360 ; 30361 if !(rc == TCL_BREAK) { 30362 goto __192 30363 } 30364 rc = TCL_OK 30365 __192: 30366 ; 30367 goto __3 30368 30369 __23: 30370 evalFlags = 0 30371 __193: 30372 if !(objc > 3 && libc.AssignUintptr(&zOpt1, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)))) != uintptr(0) && int32(*(*int8)(unsafe.Pointer(zOpt1))) == '-') { 30373 goto __194 30374 } 30375 if !(libc.Xstrcmp(tls, zOpt1, ts+12537) == 0) { 30376 goto __195 30377 } 30378 evalFlags = evalFlags | SQLITE_EVAL_WITHOUTNULLS 30379 goto __196 30380 __195: 30381 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+640, ts+12551, zOpt1, ts+11945, uintptr(0))) 30382 return TCL_ERROR 30383 __196: 30384 ; 30385 objc-- 30386 objv += 4 30387 goto __193 30388 __194: 30389 ; 30390 if !(objc < 3 || objc > 5) { 30391 goto __197 30392 } 30393 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 30394 ts+12569) 30395 return TCL_ERROR 30396 __197: 30397 ; 30398 if !(objc == 3) { 30399 goto __198 30400 } 30401 pRet = tcl.XTcl_NewObj(tls) 30402 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 30403 dbEvalInit(tls, bp+1200, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0), 0) 30404 __200: 30405 if !(TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, bp+1200))) { 30406 goto __201 30407 } 30408 dbEvalRowInfo(tls, bp+1200, bp+1232, uintptr(0)) 30409 i2 = 0 30410 __202: 30411 if !(i2 < *(*int32)(unsafe.Pointer(bp + 1232))) { 30412 goto __204 30413 } 30414 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, dbEvalColumnValue(tls, bp+1200, i2)) 30415 goto __203 30416 __203: 30417 i2++ 30418 goto __202 30419 goto __204 30420 __204: 30421 ; 30422 goto __200 30423 __201: 30424 ; 30425 dbEvalFinalize(tls, bp+1200) 30426 if !(rc == TCL_BREAK) { 30427 goto __205 30428 } 30429 tcl.XTcl_SetObjResult(tls, interp, pRet) 30430 rc = TCL_OK 30431 __205: 30432 ; 30433 __206: 30434 _objPtr1 = pRet 30435 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr1)).FrefCount, 1) <= 1) { 30436 goto __209 30437 } 30438 tcl.XTclFreeObj(tls, _objPtr1) 30439 __209: 30440 ; 30441 goto __207 30442 __207: 30443 if 0 != 0 { 30444 goto __206 30445 } 30446 goto __208 30447 __208: 30448 ; 30449 goto __199 30450 __198: 30451 pArray = uintptr(0) 30452 30453 if !(objc >= 5 && *(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))))) != 0) { 30454 goto __210 30455 } 30456 pArray = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 30457 __210: 30458 ; 30459 pScript = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)) 30460 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 30461 30462 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(DbEvalContext{}))) 30463 dbEvalInit(tls, p, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*4)), pArray, evalFlags) 30464 30465 *(*ClientData)(unsafe.Pointer(bp + 1236)) = p 30466 *(*ClientData)(unsafe.Pointer(bp + 1236 + 1*4)) = pScript 30467 rc = DbEvalNextCmd(tls, bp+1236, interp, TCL_OK) 30468 __199: 30469 ; 30470 goto __3 30471 30472 __24: 30473 flags1 = SQLITE_UTF8 30474 *(*int32)(unsafe.Pointer(bp + 1244)) = -1 30475 *(*int32)(unsafe.Pointer(bp + 1272)) = SQLITE_NULL 30476 if !(objc < 4) { 30477 goto __211 30478 } 30479 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12605) 30480 return TCL_ERROR 30481 __211: 30482 ; 30483 i3 = 3 30484 __212: 30485 if !(i3 < objc-1) { 30486 goto __214 30487 } 30488 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*4))) 30489 n1 = strlen30(tls, z2) 30490 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12628, uint32(n1)) == 0) { 30491 goto __215 30492 } 30493 if !(i3 == objc-2) { 30494 goto __217 30495 } 30496 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+672, ts+12638, z2, uintptr(0))) 30497 return TCL_ERROR 30498 __217: 30499 ; 30500 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3+1)*4)), bp+1244) != 0) { 30501 goto __218 30502 } 30503 return TCL_ERROR 30504 __218: 30505 ; 30506 if !(*(*int32)(unsafe.Pointer(bp + 1244)) < 0) { 30507 goto __219 30508 } 30509 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+696, ts+12668, 30510 uintptr(0))) 30511 return TCL_ERROR 30512 __219: 30513 ; 30514 i3++ 30515 goto __216 30516 __215: 30517 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12709, uint32(n1)) == 0) { 30518 goto __220 30519 } 30520 flags1 = flags1 | SQLITE_DETERMINISTIC 30521 goto __221 30522 __220: 30523 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12724, uint32(n1)) == 0) { 30524 goto __222 30525 } 30526 flags1 = flags1 | SQLITE_DIRECTONLY 30527 goto __223 30528 __222: 30529 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12736, uint32(n1)) == 0) { 30530 goto __224 30531 } 30532 flags1 = flags1 | SQLITE_INNOCUOUS 30533 goto __225 30534 __224: 30535 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12747, uint32(n1)) == 0) { 30536 goto __226 30537 } 30538 *(*[6]uintptr)(unsafe.Pointer(bp + 1248)) = [6]uintptr{ts + 8470, ts + 12759, ts + 12764, ts + 12769, ts + 12774, uintptr(0)} 30539 30540 if !(i3 == objc-2) { 30541 goto __228 30542 } 30543 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+712, ts+12638, z2, uintptr(0))) 30544 return TCL_ERROR 30545 __228: 30546 ; 30547 i3++ 30548 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*4)), bp+1248, int32(unsafe.Sizeof(uintptr(0))), ts+12778, 0, bp+1272) != 0) { 30549 goto __229 30550 } 30551 return TCL_ERROR 30552 __229: 30553 ; 30554 *(*int32)(unsafe.Pointer(bp + 1272))++ 30555 goto __227 30556 __226: 30557 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+736, ts+11851, z2, 30558 ts+12783, uintptr(0))) 30559 return TCL_ERROR 30560 __227: 30561 ; 30562 __225: 30563 ; 30564 __223: 30565 ; 30566 __221: 30567 ; 30568 __216: 30569 ; 30570 goto __213 30571 __213: 30572 i3++ 30573 goto __212 30574 goto __214 30575 __214: 30576 ; 30577 pScript1 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)) 30578 zName1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0)) 30579 pFunc = findSqlFunc(tls, pDb, zName1) 30580 if !(pFunc == uintptr(0)) { 30581 goto __230 30582 } 30583 return TCL_ERROR 30584 __230: 30585 ; 30586 if !((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript != 0) { 30587 goto __231 30588 } 30589 __232: 30590 _objPtr2 = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 30591 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr2)).FrefCount, 1) <= 1) { 30592 goto __235 30593 } 30594 tcl.XTclFreeObj(tls, _objPtr2) 30595 __235: 30596 ; 30597 goto __233 30598 __233: 30599 if 0 != 0 { 30600 goto __232 30601 } 30602 goto __234 30603 __234: 30604 ; 30605 __231: 30606 ; 30607 (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript = pScript1 30608 (*Tcl_Obj)(unsafe.Pointer(pScript1)).FrefCount++ 30609 (*SqlFunc)(unsafe.Pointer(pFunc)).FuseEvalObjv = safeToUseEvalObjv(tls, interp, pScript1) 30610 (*SqlFunc)(unsafe.Pointer(pFunc)).FeType = *(*int32)(unsafe.Pointer(bp + 1272)) 30611 rc = sqlite3.Xsqlite3_create_function(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName1, *(*int32)(unsafe.Pointer(bp + 1244)), flags1, 30612 pFunc, *(*uintptr)(unsafe.Pointer(&struct { 30613 f func(*libc.TLS, uintptr, int32, uintptr) 30614 }{tclSqlFunc})), uintptr(0), uintptr(0)) 30615 if !(rc != SQLITE_OK) { 30616 goto __236 30617 } 30618 rc = TCL_ERROR 30619 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 30620 __236: 30621 ; 30622 goto __3 30623 30624 __25: 30625 isReadonly1 = 0 30626 zDb = ts + 85 30627 30628 if !(objc > 3 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), ts+12434) == 0) { 30629 goto __237 30630 } 30631 isReadonly1 = 1 30632 __237: 30633 ; 30634 if !(objc != 5+isReadonly1 && objc != 6+isReadonly1) { 30635 goto __238 30636 } 30637 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12861) 30638 return TCL_ERROR 30639 __238: 30640 ; 30641 if !(objc == 6+isReadonly1) { 30642 goto __239 30643 } 30644 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(2+isReadonly1)*4))) 30645 __239: 30646 ; 30647 zTable1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*4))) 30648 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*4))) 30649 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)), bp+1276) 30650 30651 if !(rc == TCL_OK) { 30652 goto __240 30653 } 30654 rc = createIncrblobChannel(tls, 30655 interp, pDb, zDb, zTable1, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 1276)), isReadonly1) 30656 __240: 30657 ; 30658 goto __3 30659 30660 __26: 30661 sqlite3.Xsqlite3_interrupt(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30662 goto __3 30663 30664 __27: 30665 if !(objc != 2 && objc != 3) { 30666 goto __241 30667 } 30668 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12897) 30669 return TCL_ERROR 30670 __241: 30671 ; 30672 if !(objc == 3) { 30673 goto __242 30674 } 30675 zNull1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1284) 30676 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0) { 30677 goto __243 30678 } 30679 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 30680 __243: 30681 ; 30682 if !(zNull1 != 0 && *(*int32)(unsafe.Pointer(bp + 1284)) > 0) { 30683 goto __244 30684 } 30685 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1284))+1)) 30686 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, zNull1, uint32(*(*int32)(unsafe.Pointer(bp + 1284)))) 30687 *(*int8)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FzNull + uintptr(*(*int32)(unsafe.Pointer(bp + 1284))))) = int8(0) 30688 goto __245 30689 __244: 30690 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = uintptr(0) 30691 __245: 30692 ; 30693 __242: 30694 ; 30695 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, -1)) 30696 goto __3 30697 30698 __28: 30699 if !(objc != 2) { 30700 goto __246 30701 } 30702 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30703 return TCL_ERROR 30704 __246: 30705 ; 30706 rowid = sqlite3.Xsqlite3_last_insert_rowid(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30707 pResult5 = tcl.XTcl_GetObjResult(tls, interp) 30708 tcl.XTcl_SetWideIntObj(tls, pResult5, rowid) 30709 goto __3 30710 30711 __29: 30712 if !(objc == 2) { 30713 goto __247 30714 } 30715 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30716 goto __249 30717 } 30718 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+768, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, uintptr(0))) 30719 __249: 30720 ; 30721 goto __248 30722 __247: 30723 if !(objc == 4) { 30724 goto __250 30725 } 30726 if !(TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1288)) { 30727 goto __252 30728 } 30729 return TCL_ERROR 30730 __252: 30731 ; 30732 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30733 goto __253 30734 } 30735 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 30736 __253: 30737 ; 30738 zProgress = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+1292) 30739 if !(zProgress != 0 && *(*int32)(unsafe.Pointer(bp + 1292)) > 0) { 30740 goto __254 30741 } 30742 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1292))+1)) 30743 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, zProgress, uint32(*(*int32)(unsafe.Pointer(bp + 1292))+1)) 30744 goto __255 30745 __254: 30746 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = uintptr(0) 30747 __255: 30748 ; 30749 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30750 goto __256 30751 } 30752 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30753 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1288)), *(*uintptr)(unsafe.Pointer(&struct { 30754 f func(*libc.TLS, uintptr) int32 30755 }{DbProgressHandler})), pDb) 30756 goto __257 30757 __256: 30758 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, 0, uintptr(0), uintptr(0)) 30759 __257: 30760 ; 30761 goto __251 30762 __250: 30763 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12907) 30764 return TCL_ERROR 30765 __251: 30766 ; 30767 __248: 30768 ; 30769 goto __3 30770 30771 __30: 30772 if !(objc > 3) { 30773 goto __258 30774 } 30775 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30776 return TCL_ERROR 30777 goto __259 30778 __258: 30779 if !(objc == 2) { 30780 goto __260 30781 } 30782 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30783 goto __262 30784 } 30785 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+784, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, uintptr(0))) 30786 __262: 30787 ; 30788 goto __261 30789 __260: 30790 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30791 goto __263 30792 } 30793 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 30794 __263: 30795 ; 30796 zProfile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1296) 30797 if !(zProfile != 0 && *(*int32)(unsafe.Pointer(bp + 1296)) > 0) { 30798 goto __264 30799 } 30800 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1296))+1)) 30801 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, zProfile, uint32(*(*int32)(unsafe.Pointer(bp + 1296))+1)) 30802 goto __265 30803 __264: 30804 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = uintptr(0) 30805 __265: 30806 ; 30807 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30808 goto __266 30809 } 30810 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30811 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30812 f func(*libc.TLS, uintptr, uintptr, sqlite_uint64) 30813 }{DbProfileHandler})), pDb) 30814 goto __267 30815 __266: 30816 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30817 __267: 30818 ; 30819 __261: 30820 ; 30821 __259: 30822 ; 30823 goto __3 30824 30825 __31: 30826 if !(objc != 3) { 30827 goto __268 30828 } 30829 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12918) 30830 return TCL_ERROR 30831 __268: 30832 ; 30833 goto __3 30834 30835 __32: 30836 nTimeout = 0 30837 30838 if !(objc == 3) { 30839 goto __269 30840 } 30841 zDestDb = ts + 85 30842 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 30843 goto __270 30844 __269: 30845 if !(objc == 4) { 30846 goto __271 30847 } 30848 zDestDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 30849 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 30850 goto __272 30851 __271: 30852 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 30853 return TCL_ERROR 30854 __272: 30855 ; 30856 __270: 30857 ; 30858 rc = sqlite3.Xsqlite3_open_v2(tls, zSrcFile, bp+1300, 30859 SQLITE_OPEN_READONLY|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 30860 if !(rc != SQLITE_OK) { 30861 goto __273 30862 } 30863 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+800, ts+12922, 30864 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1300))), uintptr(0))) 30865 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1300))) 30866 return TCL_ERROR 30867 __273: 30868 ; 30869 pBackup1 = sqlite3.Xsqlite3_backup_init(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zDestDb, *(*uintptr)(unsafe.Pointer(bp + 1300)), ts+85) 30870 if !(pBackup1 == uintptr(0)) { 30871 goto __274 30872 } 30873 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+824, ts+12952, 30874 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30875 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1300))) 30876 return TCL_ERROR 30877 __274: 30878 ; 30879 __275: 30880 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup1, 100)) == SQLITE_OK || 30881 rc == SQLITE_BUSY) { 30882 goto __276 30883 } 30884 if !(rc == SQLITE_BUSY) { 30885 goto __277 30886 } 30887 if !(libc.PostIncInt32(&nTimeout, 1) >= 3) { 30888 goto __278 30889 } 30890 goto __276 30891 __278: 30892 ; 30893 sqlite3.Xsqlite3_sleep(tls, 100) 30894 __277: 30895 ; 30896 goto __275 30897 __276: 30898 ; 30899 sqlite3.Xsqlite3_backup_finish(tls, pBackup1) 30900 if !(rc == SQLITE_DONE) { 30901 goto __279 30902 } 30903 rc = TCL_OK 30904 goto __280 30905 __279: 30906 if !(rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { 30907 goto __281 30908 } 30909 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+848, ts+12969, 30910 uintptr(0))) 30911 rc = TCL_ERROR 30912 goto __282 30913 __281: 30914 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+864, ts+12952, 30915 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30916 rc = TCL_ERROR 30917 __282: 30918 ; 30919 __280: 30920 ; 30921 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1300))) 30922 goto __3 30923 30924 __33: 30925 if objc >= 3 { 30926 zSchema1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 30927 } else { 30928 zSchema1 = ts + 85 30929 } 30930 *(*sqlite3_int64)(unsafe.Pointer(bp + 1304)) = int64(0) 30931 if !(objc != 2 && objc != 3) { 30932 goto __283 30933 } 30934 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13006) 30935 rc = TCL_ERROR 30936 goto __284 30937 __283: 30938 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1304, uint32(SQLITE_SERIALIZE_NOCOPY)) 30939 if !(pData1 != 0) { 30940 goto __285 30941 } 30942 needFree = 0 30943 goto __286 30944 __285: 30945 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1304, uint32(0)) 30946 needFree = 1 30947 __286: 30948 ; 30949 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pData1, int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 1304))))) 30950 if !(needFree != 0) { 30951 goto __287 30952 } 30953 sqlite3.Xsqlite3_free(tls, pData1) 30954 __287: 30955 ; 30956 __284: 30957 ; 30958 goto __3 30959 30960 __34: 30961 if !(objc != 3) { 30962 goto __288 30963 } 30964 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13017) 30965 return TCL_ERROR 30966 __288: 30967 ; 30968 zOp = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 30969 if !(libc.Xstrcmp(tls, zOp, ts+9485) == 0) { 30970 goto __289 30971 } 30972 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnStep 30973 goto __290 30974 __289: 30975 if !(libc.Xstrcmp(tls, zOp, ts+13039) == 0) { 30976 goto __291 30977 } 30978 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnSort 30979 goto __292 30980 __291: 30981 if !(libc.Xstrcmp(tls, zOp, ts+13044) == 0) { 30982 goto __293 30983 } 30984 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex 30985 goto __294 30986 __293: 30987 if !(libc.Xstrcmp(tls, zOp, ts+13054) == 0) { 30988 goto __295 30989 } 30990 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep 30991 goto __296 30992 __295: 30993 tcl.XTcl_AppendResult(tls, interp, 30994 libc.VaList(bp+888, ts+13061, 30995 uintptr(0))) 30996 return TCL_ERROR 30997 __296: 30998 ; 30999 __294: 31000 ; 31001 __292: 31002 ; 31003 __290: 31004 ; 31005 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, v2)) 31006 goto __3 31007 31008 __35: 31009 if !(objc != 3) { 31010 goto __297 31011 } 31012 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13117) 31013 return TCL_ERROR 31014 __297: 31015 ; 31016 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1312) != 0) { 31017 goto __298 31018 } 31019 return TCL_ERROR 31020 __298: 31021 ; 31022 sqlite3.Xsqlite3_busy_timeout(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1312))) 31023 goto __3 31024 31025 __36: 31026 if !(objc != 2) { 31027 goto __299 31028 } 31029 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 31030 return TCL_ERROR 31031 __299: 31032 ; 31033 pResult6 = tcl.XTcl_GetObjResult(tls, interp) 31034 tcl.XTcl_SetWideIntObj(tls, pResult6, sqlite3.Xsqlite3_total_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 31035 goto __3 31036 31037 __37: 31038 if !(objc > 3) { 31039 goto __300 31040 } 31041 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 31042 return TCL_ERROR 31043 goto __301 31044 __300: 31045 if !(objc == 2) { 31046 goto __302 31047 } 31048 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31049 goto __304 31050 } 31051 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+904, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, uintptr(0))) 31052 __304: 31053 ; 31054 goto __303 31055 __302: 31056 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31057 goto __305 31058 } 31059 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 31060 __305: 31061 ; 31062 zTrace = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1316) 31063 if !(zTrace != 0 && *(*int32)(unsafe.Pointer(bp + 1316)) > 0) { 31064 goto __306 31065 } 31066 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1316))+1)) 31067 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, zTrace, uint32(*(*int32)(unsafe.Pointer(bp + 1316))+1)) 31068 goto __307 31069 __306: 31070 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = uintptr(0) 31071 __307: 31072 ; 31073 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31074 goto __308 31075 } 31076 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31077 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 31078 f func(*libc.TLS, uintptr, uintptr) 31079 }{DbTraceHandler})), pDb) 31080 goto __309 31081 __308: 31082 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 31083 __309: 31084 ; 31085 __303: 31086 ; 31087 __301: 31088 ; 31089 goto __3 31090 31091 __38: 31092 if !(objc > 4) { 31093 goto __310 31094 } 31095 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13130) 31096 return TCL_ERROR 31097 goto __311 31098 __310: 31099 if !(objc == 2) { 31100 goto __312 31101 } 31102 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31103 goto __314 31104 } 31105 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+920, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, uintptr(0))) 31106 __314: 31107 ; 31108 goto __313 31109 __312: 31110 wMask = int64(0) 31111 if !(objc == 4) { 31112 goto __315 31113 } 31114 if !(TCL_OK != tcl.XTcl_ListObjLength(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+1320)) { 31115 goto __317 31116 } 31117 return TCL_ERROR 31118 __317: 31119 ; 31120 i4 = 0 31121 __318: 31122 if !(i4 < *(*int32)(unsafe.Pointer(bp + 1320))) { 31123 goto __320 31124 } 31125 if !(TCL_OK != tcl.XTcl_ListObjIndex(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), i4, bp+1324)) { 31126 goto __321 31127 } 31128 return TCL_ERROR 31129 __321: 31130 ; 31131 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1324)), uintptr(unsafe.Pointer(&TTYPE_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+13148, 0, bp+1328) != TCL_OK) { 31132 goto __322 31133 } 31134 pError = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, interp)) 31135 (*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount++ 31136 if !(TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1324)), bp+1332)) { 31137 goto __324 31138 } 31139 __326: 31140 _objPtr3 = pError 31141 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr3)).FrefCount, 1) <= 1) { 31142 goto __329 31143 } 31144 tcl.XTclFreeObj(tls, _objPtr3) 31145 __329: 31146 ; 31147 goto __327 31148 __327: 31149 if 0 != 0 { 31150 goto __326 31151 } 31152 goto __328 31153 __328: 31154 ; 31155 wMask = wMask | *(*Tcl_WideInt)(unsafe.Pointer(bp + 1332)) 31156 goto __325 31157 __324: 31158 tcl.XTcl_SetObjResult(tls, interp, pError) 31159 __330: 31160 _objPtr4 = pError 31161 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr4)).FrefCount, 1) <= 1) { 31162 goto __333 31163 } 31164 tcl.XTclFreeObj(tls, _objPtr4) 31165 __333: 31166 ; 31167 goto __331 31168 __331: 31169 if 0 != 0 { 31170 goto __330 31171 } 31172 goto __332 31173 __332: 31174 ; 31175 return TCL_ERROR 31176 __325: 31177 ; 31178 goto __323 31179 __322: 31180 switch uint32(*(*int32)(unsafe.Pointer(bp + 1328))) { 31181 case uint32(0): 31182 goto __335 31183 case uint32(1): 31184 goto __336 31185 case uint32(2): 31186 goto __337 31187 case uint32(3): 31188 goto __338 31189 } 31190 goto __334 31191 __335: 31192 wMask = wMask | int64(SQLITE_TRACE_STMT) 31193 goto __334 31194 __336: 31195 wMask = wMask | int64(SQLITE_TRACE_PROFILE) 31196 goto __334 31197 __337: 31198 wMask = wMask | int64(SQLITE_TRACE_ROW) 31199 goto __334 31200 __338: 31201 wMask = wMask | int64(SQLITE_TRACE_CLOSE) 31202 goto __334 31203 __334: 31204 ; 31205 __323: 31206 ; 31207 goto __319 31208 __319: 31209 i4++ 31210 goto __318 31211 goto __320 31212 __320: 31213 ; 31214 goto __316 31215 __315: 31216 wMask = int64(SQLITE_TRACE_STMT) 31217 __316: 31218 ; 31219 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31220 goto __339 31221 } 31222 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 31223 __339: 31224 ; 31225 zTraceV2 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+1320) 31226 if !(zTraceV2 != 0 && *(*int32)(unsafe.Pointer(bp + 1320)) > 0) { 31227 goto __340 31228 } 31229 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1320))+1)) 31230 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, zTraceV2, uint32(*(*int32)(unsafe.Pointer(bp + 1320))+1)) 31231 goto __341 31232 __340: 31233 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = uintptr(0) 31234 __341: 31235 ; 31236 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31237 goto __342 31238 } 31239 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31240 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(wMask), *(*uintptr)(unsafe.Pointer(&struct { 31241 f func(*libc.TLS, uint32, uintptr, uintptr, uintptr) int32 31242 }{DbTraceV2Handler})), pDb) 31243 goto __343 31244 __342: 31245 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(0), uintptr(0), uintptr(0)) 31246 __343: 31247 ; 31248 __313: 31249 ; 31250 __311: 31251 ; 31252 goto __3 31253 31254 __39: 31255 zBegin = ts + 13159 31256 if !(objc != 3 && objc != 4) { 31257 goto __344 31258 } 31259 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13186) 31260 return TCL_ERROR 31261 __344: 31262 ; 31263 if !((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0 && objc == 4) { 31264 goto __345 31265 } 31266 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(unsafe.Pointer(&TTYPE_strs1)), int32(unsafe.Sizeof(uintptr(0))), ts+13200, 0, bp+1340) != 0) { 31267 goto __346 31268 } 31269 return TCL_ERROR 31270 __346: 31271 ; 31272 switch uint32(*(*int32)(unsafe.Pointer(bp + 1340))) { 31273 case uint32(0): 31274 goto __348 31275 case uint32(1): 31276 goto __349 31277 case uint32(2): 31278 goto __350 31279 } 31280 goto __347 31281 __348: 31282 ; 31283 goto __347 31284 __349: 31285 zBegin = ts + 13217 31286 goto __347 31287 __350: 31288 zBegin = ts + 13233 31289 goto __347 31290 __347: 31291 ; 31292 __345: 31293 ; 31294 pScript2 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)) 31295 31296 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 31297 rc = sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zBegin, uintptr(0), uintptr(0), uintptr(0)) 31298 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 31299 if !(rc != SQLITE_OK) { 31300 goto __351 31301 } 31302 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+936, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31303 return TCL_ERROR 31304 __351: 31305 ; 31306 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction++ 31307 31308 addDatabaseRef(tls, pDb) 31309 if !(DbUseNre(tls) != 0) { 31310 goto __352 31311 } 31312 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31313 f func(*libc.TLS, uintptr, uintptr, int32) int32 31314 }{DbTransPostCmd})), *(*uintptr)(unsafe.Pointer(bp + 1344)), uintptr(0), uintptr(0), uintptr(0)) 31315 tcl.XTcl_NREvalObj(tls, interp, pScript2, 0) 31316 goto __353 31317 __352: 31318 rc = DbTransPostCmd(tls, bp+1344, interp, tcl.XTcl_EvalObjEx(tls, interp, pScript2, 0)) 31319 __353: 31320 ; 31321 goto __3 31322 31323 __40: 31324 if !(objc != 2 && objc != 3) { 31325 goto __354 31326 } 31327 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 31328 rc = TCL_ERROR 31329 goto __355 31330 __354: 31331 xNotify = uintptr(0) 31332 pNotifyArg = uintptr(0) 31333 31334 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify != 0) { 31335 goto __356 31336 } 31337 __357: 31338 _objPtr5 = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 31339 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr5)).FrefCount, 1) <= 1) { 31340 goto __360 31341 } 31342 tcl.XTclFreeObj(tls, _objPtr5) 31343 __360: 31344 ; 31345 goto __358 31346 __358: 31347 if 0 != 0 { 31348 goto __357 31349 } 31350 goto __359 31351 __359: 31352 ; 31353 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 31354 __356: 31355 ; 31356 if !(objc == 3) { 31357 goto __361 31358 } 31359 xNotify = *(*uintptr)(unsafe.Pointer(&struct { 31360 f func(*libc.TLS, uintptr, int32) 31361 }{DbUnlockNotify})) 31362 pNotifyArg = pDb 31363 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = *(*uintptr)(unsafe.Pointer(objv + 2*4)) 31364 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount++ 31365 __361: 31366 ; 31367 if !(sqlite3.Xsqlite3_unlock_notify(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, xNotify, pNotifyArg) != 0) { 31368 goto __362 31369 } 31370 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+952, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31371 rc = TCL_ERROR 31372 __362: 31373 ; 31374 __355: 31375 ; 31376 goto __3 31377 31378 __41: 31379 if !(objc < 3) { 31380 goto __363 31381 } 31382 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13258) 31383 __363: 31384 ; 31385 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(unsafe.Pointer(&azSub)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+1348) != 0) { 31386 goto __364 31387 } 31388 return TCL_ERROR 31389 __364: 31390 ; 31391 switch uint32(*(*int32)(unsafe.Pointer(bp + 1348))) { 31392 case uint32(0): 31393 goto __366 31394 31395 case uint32(2): 31396 goto __367 31397 31398 case uint32(1): 31399 goto __368 31400 31401 case uint32(3): 31402 goto __369 31403 case uint32(4): 31404 goto __370 31405 } 31406 goto __365 31407 __366: 31408 nCol2 = sqlite3.Xsqlite3_preupdate_count(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 31409 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol2)) 31410 goto __365 31411 31412 __367: 31413 if !(objc > 4) { 31414 goto __371 31415 } 31416 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13277) 31417 return TCL_ERROR 31418 __371: 31419 ; 31420 DbHookCmd(tls, interp, pDb, func() uintptr { 31421 if objc == 4 { 31422 return *(*uintptr)(unsafe.Pointer(objv + 3*4)) 31423 } 31424 return uintptr(0) 31425 }(), pDb+56) 31426 goto __365 31427 31428 __368: 31429 if !(objc != 3) { 31430 goto __372 31431 } 31432 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+584) 31433 return TCL_ERROR 31434 __372: 31435 ; 31436 pRet1 = tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_preupdate_depth(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 31437 tcl.XTcl_SetObjResult(tls, interp, pRet1) 31438 goto __365 31439 31440 __369: 31441 __370: 31442 if !(objc != 4) { 31443 goto __373 31444 } 31445 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+13291) 31446 return TCL_ERROR 31447 __373: 31448 ; 31449 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+1352) != 0) { 31450 goto __374 31451 } 31452 return TCL_ERROR 31453 __374: 31454 ; 31455 if !(*(*int32)(unsafe.Pointer(bp + 1348)) == 4) { 31456 goto __375 31457 } 31458 rc = sqlite3.Xsqlite3_preupdate_old(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1352)), bp+1356) 31459 goto __376 31460 __375: 31461 ; 31462 rc = sqlite3.Xsqlite3_preupdate_new(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1352)), bp+1356) 31463 __376: 31464 ; 31465 if !(rc == SQLITE_OK) { 31466 goto __377 31467 } 31468 pObj1 = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1356))), -1) 31469 tcl.XTcl_SetObjResult(tls, interp, pObj1) 31470 goto __378 31471 __377: 31472 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+968, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31473 return TCL_ERROR 31474 __378: 31475 ; 31476 __365: 31477 ; 31478 goto __3 31479 31480 __42: 31481 __43: 31482 __44: 31483 ppHook = uintptr(0) 31484 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 41) { 31485 goto __379 31486 } 31487 ppHook = pDb + 64 31488 __379: 31489 ; 31490 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 39) { 31491 goto __380 31492 } 31493 ppHook = pDb + 52 31494 __380: 31495 ; 31496 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 30) { 31497 goto __381 31498 } 31499 ppHook = pDb + 60 31500 __381: 31501 ; 31502 if !(objc > 3) { 31503 goto __382 31504 } 31505 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 31506 return TCL_ERROR 31507 __382: 31508 ; 31509 DbHookCmd(tls, interp, pDb, func() uintptr { 31510 if objc == 3 { 31511 return *(*uintptr)(unsafe.Pointer(objv + 2*4)) 31512 } 31513 return uintptr(0) 31514 }(), ppHook) 31515 goto __3 31516 31517 __45: 31518 i5 = 2 31519 __383: 31520 if !(i5 < objc) { 31521 goto __385 31522 } 31523 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*4))) 31524 31525 if !(libc.Xstrcmp(tls, zArg, ts+13297) == 0 && i5+1 < objc) { 31526 goto __386 31527 } 31528 i5++ 31529 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*4)), pDb+132) != 0) { 31530 goto __388 31531 } 31532 return TCL_ERROR 31533 __388: 31534 ; 31535 goto __387 31536 __386: 31537 if !(libc.Xstrcmp(tls, zArg, ts+13317) == 0) { 31538 goto __389 31539 } 31540 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+1360, ts+9889, 31541 libc.VaList(bp+984, func() uintptr { 31542 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 31543 return (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpStmt 31544 } 31545 return uintptr(0) 31546 }())) 31547 tcl.XTcl_SetResult(tls, interp, bp+1360, uintptr(1)) 31548 goto __390 31549 __389: 31550 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+992, ts+13332, zArg, uintptr(0))) 31551 return TCL_ERROR 31552 __390: 31553 ; 31554 __387: 31555 ; 31556 goto __384 31557 __384: 31558 i5++ 31559 goto __383 31560 goto __385 31561 __385: 31562 ; 31563 if !(i5 == 2) { 31564 goto __391 31565 } 31566 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_libversion(tls), uintptr(0)) 31567 __391: 31568 ; 31569 goto __3 31570 31571 __3: 31572 ; 31573 return rc 31574 } 31575 31576 type DbConfigChoices = struct { 31577 FzName uintptr 31578 Fop int32 31579 } 31580 31581 var DB_strs = [43]uintptr{ 31582 ts + 13351, ts + 13362, ts + 13369, 31583 ts + 13383, ts + 13388, ts + 13394, 31584 ts + 9490, ts + 13402, ts + 13410, 31585 ts + 13427, ts + 13439, ts + 13448, 31586 ts + 13455, ts + 13460, ts + 13472, 31587 ts + 13494, ts + 13504, ts + 4896, 31588 ts + 13516, ts + 13523, ts + 10868, 31589 ts + 13532, ts + 13542, ts + 13560, 31590 ts + 13570, ts + 13580, ts + 13590, 31591 ts + 9564, ts + 13598, ts + 13604, 31592 ts + 13612, ts + 13626, ts + 13636, 31593 ts + 13643, ts + 13651, ts + 13665, 31594 ts + 13671, ts + 13680, ts + 13692, 31595 ts + 13706, ts + 13718, ts + 13726, 31596 uintptr(0), 31597 } 31598 var aDbConfig = [16]DbConfigChoices{ 31599 {FzName: ts + 13735, Fop: SQLITE_DBCONFIG_DEFENSIVE}, 31600 {FzName: ts + 13745, Fop: SQLITE_DBCONFIG_DQS_DDL}, 31601 {FzName: ts + 13753, Fop: SQLITE_DBCONFIG_DQS_DML}, 31602 {FzName: ts + 13761, Fop: SQLITE_DBCONFIG_ENABLE_FKEY}, 31603 {FzName: ts + 13773, Fop: SQLITE_DBCONFIG_ENABLE_QPSG}, 31604 {FzName: ts + 13785, Fop: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 31605 {FzName: ts + 13800, Fop: SQLITE_DBCONFIG_ENABLE_VIEW}, 31606 {FzName: ts + 13812, Fop: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 31607 {FzName: ts + 13827, Fop: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 31608 {FzName: ts + 13846, Fop: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 31609 {FzName: ts + 13865, Fop: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 31610 {FzName: ts + 13880, Fop: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 31611 {FzName: ts + 13897, Fop: SQLITE_DBCONFIG_RESET_DATABASE}, 31612 {FzName: ts + 13912, Fop: SQLITE_DBCONFIG_TRIGGER_EQP}, 31613 {FzName: ts + 13924, Fop: SQLITE_DBCONFIG_TRUSTED_SCHEMA}, 31614 {FzName: ts + 13939, Fop: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 31615 } 31616 var TTYPE_strs = [5]uintptr{ 31617 ts + 13955, ts + 13590, ts + 13965, ts + 9490, uintptr(0), 31618 } 31619 var TTYPE_strs1 = [4]uintptr{ 31620 ts + 13969, ts + 13978, ts + 13988, uintptr(0), 31621 } 31622 var azSub = [6]uintptr{ts + 1965, ts + 13998, ts + 14004, ts + 14009, ts + 14013, uintptr(0)} 31623 31624 func DbObjCmdAdaptor(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31625 return tcl.XTcl_NRCallObjProc(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31626 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31627 }{DbObjCmd})), cd, objc, objv) 31628 } 31629 31630 func sqliteCmdUsage(tls *libc.TLS, interp uintptr, objv uintptr) int32 { 31631 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 31632 ts+14017) 31633 return TCL_ERROR 31634 } 31635 31636 func DbMain(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31637 bp := tls.Alloc(328) 31638 defer tls.Free(328) 31639 31640 var p uintptr 31641 var zArg uintptr 31642 var zErrMsg uintptr 31643 var i int32 31644 var zFile uintptr = uintptr(0) 31645 var zVfs uintptr = uintptr(0) 31646 var flags int32 31647 *(*int32)(unsafe.Pointer(bp + 112)) = 1 31648 31649 var rc int32 31650 31651 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX 31652 31653 if objc == 1 { 31654 return sqliteCmdUsage(tls, interp, objv) 31655 } 31656 if objc == 2 { 31657 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(0)) 31658 if libc.Xstrcmp(tls, zArg, ts+14163) == 0 { 31659 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_libversion(tls), uintptr(0))) 31660 return TCL_OK 31661 } 31662 if libc.Xstrcmp(tls, zArg, ts+14172) == 0 { 31663 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3_sourceid(tls), uintptr(0))) 31664 return TCL_OK 31665 } 31666 if libc.Xstrcmp(tls, zArg, ts+14182) == 0 { 31667 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+14193, uintptr(0))) 31668 return TCL_OK 31669 } 31670 if int32(*(*int8)(unsafe.Pointer(zArg))) == '-' { 31671 return sqliteCmdUsage(tls, interp, objv) 31672 } 31673 } 31674 for i = 2; i < objc; i++ { 31675 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4))) 31676 if int32(*(*int8)(unsafe.Pointer(zArg))) != '-' { 31677 if zFile != uintptr(0) { 31678 return sqliteCmdUsage(tls, interp, objv) 31679 } 31680 zFile = zArg 31681 continue 31682 } 31683 if i == objc-1 { 31684 return sqliteCmdUsage(tls, interp, objv) 31685 } 31686 i++ 31687 if libc.Xstrcmp(tls, zArg, ts+14195) == 0 { 31688 } else if libc.Xstrcmp(tls, zArg, ts+14200) == 0 { 31689 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4))) 31690 } else if libc.Xstrcmp(tls, zArg, ts+12434) == 0 { 31691 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+88) != 0 { 31692 return TCL_ERROR 31693 } 31694 if *(*int32)(unsafe.Pointer(bp + 88)) != 0 { 31695 flags = flags & libc.CplInt32(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE) 31696 flags = flags | SQLITE_OPEN_READONLY 31697 } else { 31698 flags = flags & libc.CplInt32(SQLITE_OPEN_READONLY) 31699 flags = flags | SQLITE_OPEN_READWRITE 31700 } 31701 } else if libc.Xstrcmp(tls, zArg, ts+14205) == 0 { 31702 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+92) != 0 { 31703 return TCL_ERROR 31704 } 31705 if *(*int32)(unsafe.Pointer(bp + 92)) != 0 && flags&SQLITE_OPEN_READONLY == 0 { 31706 flags = flags | SQLITE_OPEN_CREATE 31707 } else { 31708 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 31709 } 31710 } else if libc.Xstrcmp(tls, zArg, ts+14213) == 0 { 31711 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+96) != 0 { 31712 return TCL_ERROR 31713 } 31714 if *(*int32)(unsafe.Pointer(bp + 96)) != 0 { 31715 flags = flags | SQLITE_OPEN_NOFOLLOW 31716 } else { 31717 flags = flags & libc.CplInt32(SQLITE_OPEN_NOFOLLOW) 31718 } 31719 } else if libc.Xstrcmp(tls, zArg, ts+14223) == 0 { 31720 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+100) != 0 { 31721 return TCL_ERROR 31722 } 31723 if *(*int32)(unsafe.Pointer(bp + 100)) != 0 { 31724 flags = flags | SQLITE_OPEN_NOMUTEX 31725 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31726 } else { 31727 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31728 } 31729 } else if libc.Xstrcmp(tls, zArg, ts+14232) == 0 { 31730 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+104) != 0 { 31731 return TCL_ERROR 31732 } 31733 if *(*int32)(unsafe.Pointer(bp + 104)) != 0 { 31734 flags = flags | SQLITE_OPEN_FULLMUTEX 31735 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31736 } else { 31737 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31738 } 31739 } else if libc.Xstrcmp(tls, zArg, ts+14243) == 0 { 31740 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+108) != 0 { 31741 return TCL_ERROR 31742 } 31743 if *(*int32)(unsafe.Pointer(bp + 108)) != 0 { 31744 flags = flags | SQLITE_OPEN_URI 31745 } else { 31746 flags = flags & libc.CplInt32(SQLITE_OPEN_URI) 31747 } 31748 } else if libc.Xstrcmp(tls, zArg, ts+14248) == 0 { 31749 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+112) != 0 { 31750 return TCL_ERROR 31751 } 31752 } else { 31753 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+12444, zArg, uintptr(0))) 31754 return TCL_ERROR 31755 } 31756 } 31757 zErrMsg = uintptr(0) 31758 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqliteDb{}))) 31759 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(SqliteDb{}))) 31760 if zFile == uintptr(0) { 31761 zFile = ts + 584 31762 } 31763 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31764 zFile = tcl.XTcl_TranslateFileName(tls, interp, zFile, bp+116) 31765 } 31766 rc = sqlite3.Xsqlite3_open_v2(tls, zFile, p, flags, zVfs) 31767 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31768 tcl.XTcl_DStringFree(tls, bp+116) 31769 } 31770 if (*SqliteDb)(unsafe.Pointer(p)).Fdb != 0 { 31771 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) { 31772 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb))) 31773 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) 31774 (*SqliteDb)(unsafe.Pointer(p)).Fdb = uintptr(0) 31775 } 31776 } else { 31777 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+80, sqlite3.Xsqlite3_errstr(tls, rc))) 31778 } 31779 if (*SqliteDb)(unsafe.Pointer(p)).Fdb == uintptr(0) { 31780 tcl.XTcl_SetResult(tls, interp, zErrMsg, uintptr(1)) 31781 tcl.XTcl_Free(tls, p) 31782 sqlite3.Xsqlite3_free(tls, zErrMsg) 31783 return TCL_ERROR 31784 } 31785 (*SqliteDb)(unsafe.Pointer(p)).FmaxStmt = NUM_PREPARED_STMTS 31786 (*SqliteDb)(unsafe.Pointer(p)).FopenFlags = flags & SQLITE_OPEN_URI 31787 (*SqliteDb)(unsafe.Pointer(p)).Finterp = interp 31788 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(0)) 31789 if DbUseNre(tls) != 0 { 31790 tcl.XTcl_NRCreateCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31791 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31792 }{DbObjCmdAdaptor})), *(*uintptr)(unsafe.Pointer(&struct { 31793 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31794 }{DbObjCmd})), 31795 p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31796 } else { 31797 tcl.XTcl_CreateObjCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31798 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31799 }{DbObjCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31800 } 31801 (*SqliteDb)(unsafe.Pointer(p)).FnRef = 1 31802 return TCL_OK 31803 } 31804 31805 func Sqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31806 var rc int32 31807 if 1 != 0 { 31808 rc = TCL_OK 31809 } else { 31810 rc = TCL_ERROR 31811 } 31812 if rc == TCL_OK { 31813 tcl.XTcl_CreateObjCommand(tls, interp, ts+14267, *(*uintptr)(unsafe.Pointer(&struct { 31814 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31815 }{DbMain})), uintptr(0), uintptr(0)) 31816 31817 tcl.XTcl_CreateObjCommand(tls, interp, ts+14275, *(*uintptr)(unsafe.Pointer(&struct { 31818 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31819 }{DbMain})), uintptr(0), uintptr(0)) 31820 rc = tcl.XTcl_PkgProvideEx(tls, interp, ts+14267, ts+14282, uintptr(0)) 31821 } 31822 return rc 31823 } 31824 31825 func Tclsqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31826 return Sqlite3_Init(tls, interp) 31827 } 31828 31829 func Sqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31830 return TCL_OK 31831 } 31832 31833 func Tclsqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31834 return TCL_OK 31835 } 31836 31837 func Sqlite3_SafeInit(tls *libc.TLS, interp uintptr) int32 { 31838 return TCL_ERROR 31839 } 31840 31841 func Sqlite3_SafeUnload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31842 return TCL_ERROR 31843 } 31844 31845 func Sqlite_Init(tls *libc.TLS, interp uintptr) int32 { 31846 return Sqlite3_Init(tls, interp) 31847 } 31848 31849 func Tclsqlite_Init(tls *libc.TLS, interp uintptr) int32 { 31850 return Sqlite3_Init(tls, interp) 31851 } 31852 31853 func Sqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31854 return TCL_OK 31855 } 31856 31857 func Tclsqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 31858 return TCL_OK 31859 } 31860 31861 func tclsh_main_loop(tls *libc.TLS) uintptr { 31862 return uintptr(unsafe.Pointer(&zMainloop)) 31863 } 31864 31865 var zMainloop = *(*[431]int8)(unsafe.Pointer(ts + 14289)) 31866 31867 func main1(tls *libc.TLS, argc int32, argv uintptr) int32 { 31868 bp := tls.Alloc(64) 31869 defer tls.Free(64) 31870 31871 var interp uintptr 31872 var i int32 31873 var zScript uintptr = uintptr(0) 31874 31875 if libc.Xgetenv(tls, ts+14720) != 0 { 31876 if libc.Xisatty(tls, 0) != 0 && libc.Xisatty(tls, 2) != 0 { 31877 libc.Xfprintf(tls, libc.Xstderr, 31878 ts+14739, 31879 libc.VaList(bp, libc.Xgetpid(tls))) 31880 libc.Xfgetc(tls, libc.Xstdin) 31881 } else { 31882 libc.Xraise(tls, SIGTRAP) 31883 } 31884 } 31885 31886 sqlite3.Xsqlite3_shutdown(tls) 31887 31888 tcl.XTcl_FindExecutable(tls, *(*uintptr)(unsafe.Pointer(argv))) 31889 tcl.XTcl_SetSystemEncoding(tls, uintptr(0), ts+14801) 31890 interp = tcl.XTcl_CreateInterp(tls) 31891 Sqlite3_Init(tls, interp) 31892 31893 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]int8{})), bp+32, ts+1333, libc.VaList(bp+8, argc-1)) 31894 tcl.XTcl_SetVar2(tls, interp, ts+14807, uintptr(0), bp+32, TCL_GLOBAL_ONLY) 31895 tcl.XTcl_SetVar2(tls, interp, ts+14812, uintptr(0), *(*uintptr)(unsafe.Pointer(argv)), TCL_GLOBAL_ONLY) 31896 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), ts+584, TCL_GLOBAL_ONLY) 31897 for i = 1; i < argc; i++ { 31898 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), TCL_GLOBAL_ONLY|TCL_LIST_ELEMENT|TCL_APPEND_VALUE) 31899 } 31900 zScript = sqlite3TestInit(tls, interp) 31901 if zScript == uintptr(0) { 31902 zScript = tclsh_main_loop(tls) 31903 } 31904 if tcl.XTcl_GlobalEval(tls, interp, zScript) != TCL_OK { 31905 var zInfo uintptr = tcl.XTcl_GetVar2(tls, interp, ts+14823, uintptr(0), TCL_GLOBAL_ONLY) 31906 if zInfo == uintptr(0) { 31907 zInfo = tcl.XTcl_GetStringResult(tls, interp) 31908 } 31909 libc.Xfprintf(tls, libc.Xstderr, ts+14833, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv)), zInfo)) 31910 return 1 31911 } 31912 return 0 31913 } 31914 31915 type sqlite3_value = sqlite3_value1 31916 31917 type sqlite3_context = sqlite3_context1 31918 31919 type _IO_cookie_io_functions_t = struct { 31920 Fread uintptr 31921 Fwrite uintptr 31922 Fseek uintptr 31923 Fclose uintptr 31924 } 31925 31926 type cookie_io_functions_t = _IO_cookie_io_functions_t 31927 type off64_t = int64 31928 type fpos64_t = _G_fpos64_t 31929 type ino64_t = uint64 31930 31931 type fd_set1 = struct{ Ffds_bits [32]int32 } 31932 31933 type blkcnt64_t = int64 31934 type fsblkcnt64_t = uint64 31935 type fsfilcnt64_t = uint64 31936 31937 type comparison_fn_t = uintptr 31938 type PreUpdate = PreUpdate1 31939 31940 type Vdbe = Vdbe1 31941 31942 type Mem = sqlite3_value1 31943 31944 type Op = VdbeOp1 31945 31946 type Bool = uint32 31947 31948 type AuxData1 = struct { 31949 FiAuxOp int32 31950 FiAuxArg int32 31951 FpAux uintptr 31952 FxDeleteAux uintptr 31953 FpNextAux uintptr 31954 } 31955 31956 type AuxData = AuxData1 31957 31958 type VdbeCursor1 = struct { 31959 FeCurType u8 31960 FiDb i8 31961 FnullRow u8 31962 FdeferredMoveto u8 31963 FisTable u8 31964 F__ccgo_pad1 [3]byte 31965 FisEphemeral uint8 31966 F__ccgo_pad2 [1]byte 31967 FseekHit u16 31968 Fub struct{ FpBtx uintptr } 31969 FseqCount i64 31970 FcacheStatus u32 31971 FseekResult int32 31972 FpAltCursor uintptr 31973 Fuc struct{ FpCursor uintptr } 31974 FpKeyInfo uintptr 31975 FiHdrOffset u32 31976 FpgnoRoot Pgno 31977 FnField i16 31978 FnHdrParsed u16 31979 FmovetoTarget i64 31980 FaOffset uintptr 31981 FaRow uintptr 31982 FpayloadSize u32 31983 FszRow u32 31984 FaType [1]u32 31985 } 31986 31987 type VdbeCursor = VdbeCursor1 31988 31989 type VdbeFrame1 = struct { 31990 Fv uintptr 31991 FpParent uintptr 31992 FaOp uintptr 31993 FanExec uintptr 31994 FaMem uintptr 31995 FapCsr uintptr 31996 FaOnce uintptr 31997 Ftoken uintptr 31998 FlastRowid i64 31999 FpAuxData uintptr 32000 FnCursor int32 32001 Fpc int32 32002 FnOp int32 32003 FnMem int32 32004 FnChildMem int32 32005 FnChildCsr int32 32006 FnChange i64 32007 FnDbChange i64 32008 } 32009 32010 type VdbeFrame = VdbeFrame1 32011 32012 type MemValue = struct{ Fr float64 } 32013 32014 type bft = uint32 32015 32016 type ScanStatus1 = struct { 32017 FaddrExplain int32 32018 FaddrLoop int32 32019 FaddrVisit int32 32020 FiSelectID int32 32021 FnEst LogEst 32022 F__ccgo_pad1 [2]byte 32023 FzName uintptr 32024 } 32025 32026 type ScanStatus = ScanStatus1 32027 32028 type DblquoteStr1 = struct { 32029 FpNextStr uintptr 32030 Fz [8]int8 32031 } 32032 32033 type DblquoteStr = DblquoteStr1 32034 32035 type ValueList1 = struct { 32036 FpCsr uintptr 32037 FpOut uintptr 32038 } 32039 32040 type ValueList = ValueList1 32041 32042 func testHexToInt(tls *libc.TLS, h int32) int32 { 32043 if h >= '0' && h <= '9' { 32044 return h - '0' 32045 } else if h >= 'a' && h <= 'f' { 32046 return h - 'a' + 10 32047 } else { 32048 return h - 'A' + 10 32049 } 32050 return int32(0) 32051 } 32052 32053 func sqlite3TestTextToPtr(tls *libc.TLS, z uintptr) uintptr { 32054 bp := tls.Alloc(16) 32055 defer tls.Free(16) 32056 32057 if int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 'x' { 32058 z += uintptr(2) 32059 } 32060 *(*u64)(unsafe.Pointer(bp + 4)) = uint64(0) 32061 for *(*int8)(unsafe.Pointer(z)) != 0 { 32062 *(*u64)(unsafe.Pointer(bp + 4)) = *(*u64)(unsafe.Pointer(bp + 4))<<4 + u64(testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(z))))) 32063 z++ 32064 } 32065 if uint32(unsafe.Sizeof(uintptr(0))) == uint32(unsafe.Sizeof(u64(0))) { 32066 libc.Xmemcpy(tls, bp, bp+4, uint32(unsafe.Sizeof(uintptr(0)))) 32067 } else { 32068 *(*u32)(unsafe.Pointer(bp + 12)) = u32(*(*u64)(unsafe.Pointer(bp + 4))) 32069 libc.Xmemcpy(tls, bp, bp+12, uint32(unsafe.Sizeof(uintptr(0)))) 32070 } 32071 return *(*uintptr)(unsafe.Pointer(bp)) 32072 } 32073 32074 func get_sqlite_pointer(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 32075 bp := tls.Alloc(180) 32076 defer tls.Free(180) 32077 32078 var p uintptr 32079 32080 if objc != 2 { 32081 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+14841) 32082 return TCL_ERROR 32083 } 32084 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0) { 32085 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 32086 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), uintptr(0))) 32087 return TCL_ERROR 32088 } 32089 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData 32090 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+80, ts+9889, libc.VaList(bp+24, (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb)) 32091 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 32092 return TCL_OK 32093 } 32094 32095 func getDbPointer(tls *libc.TLS, interp uintptr, zA uintptr, ppDb uintptr) int32 { 32096 bp := tls.Alloc(32) 32097 defer tls.Free(32) 32098 32099 var p uintptr 32100 32101 if tcl.XTcl_GetCommandInfo(tls, interp, zA, bp) != 0 { 32102 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 32103 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 32104 } else { 32105 *(*uintptr)(unsafe.Pointer(ppDb)) = sqlite3TestTextToPtr(tls, zA) 32106 } 32107 return TCL_OK 32108 } 32109 32110 func sqlite3TestErrCode(tls *libc.TLS, interp uintptr, db uintptr, rc int32) int32 { 32111 bp := tls.Alloc(248) 32112 defer tls.Free(248) 32113 32114 if sqlite3.Xsqlite3_threadsafe(tls) == 0 && rc != SQLITE_MISUSE && rc != SQLITE_OK && 32115 sqlite3.Xsqlite3_errcode(tls, db) != rc { 32116 var r2 int32 = sqlite3.Xsqlite3_errcode(tls, db) 32117 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+48, 32118 ts+14879, 32119 libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), rc, sqlite3.Xsqlite3ErrName(tls, r2), r2)) 32120 tcl.XTcl_ResetResult(tls, interp) 32121 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 32122 return 1 32123 } 32124 return 0 32125 } 32126 32127 func getStmtPointer(tls *libc.TLS, interp uintptr, zArg uintptr, ppStmt uintptr) int32 { 32128 *(*uintptr)(unsafe.Pointer(ppStmt)) = sqlite3TestTextToPtr(tls, zArg) 32129 return TCL_OK 32130 } 32131 32132 func sqlite3TestMakePointerStr(tls *libc.TLS, interp uintptr, zPtr uintptr, p uintptr) int32 { 32133 bp := tls.Alloc(8) 32134 defer tls.Free(8) 32135 32136 sqlite3.Xsqlite3_snprintf(tls, 100, zPtr, ts+9889, libc.VaList(bp, p)) 32137 return TCL_OK 32138 } 32139 32140 func exec_printf_cb(tls *libc.TLS, pArg uintptr, argc int32, argv uintptr, name uintptr) int32 { 32141 var str uintptr = pArg 32142 var i int32 32143 32144 if (*Tcl_DString)(unsafe.Pointer(str)).Flength == 0 { 32145 for i = 0; i < argc; i++ { 32146 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 32147 if *(*uintptr)(unsafe.Pointer(name + uintptr(i)*4)) != 0 { 32148 return *(*uintptr)(unsafe.Pointer(name + uintptr(i)*4)) 32149 } 32150 return ts + 5846 32151 }()) 32152 } 32153 } 32154 for i = 0; i < argc; i++ { 32155 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 32156 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) != 0 { 32157 return *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) 32158 } 32159 return ts + 5846 32160 }()) 32161 } 32162 return 0 32163 } 32164 32165 func test_io_trace(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32166 return TCL_OK 32167 } 32168 32169 func clang_sanitize_address(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32170 var res int32 = 0 32171 if res == 0 && libc.Xgetenv(tls, ts+14937) != uintptr(0) { 32172 res = 1 32173 } 32174 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 32175 return TCL_OK 32176 } 32177 32178 func test_exec_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32179 bp := tls.Alloc(298) 32180 defer tls.Free(298) 32181 32182 var rc int32 32183 *(*uintptr)(unsafe.Pointer(bp + 264)) = uintptr(0) 32184 var zSql uintptr 32185 32186 if argc != 4 { 32187 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32188 ts+14975, 0)) 32189 return TCL_ERROR 32190 } 32191 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+48) != 0 { 32192 return TCL_ERROR 32193 } 32194 tcl.XTcl_DStringInit(tls, bp+52) 32195 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*4)))) 32196 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 32197 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32198 }{exec_printf_cb})), bp+52, bp+264) 32199 sqlite3.Xsqlite3_free(tls, zSql) 32200 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+268, ts+1333, libc.VaList(bp+40, rc)) 32201 tcl.XTcl_AppendElement(tls, interp, bp+268) 32202 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32203 if rc == SQLITE_OK { 32204 return (*Tcl_DString)(unsafe.Pointer(bp + 52)).Fstring 32205 } 32206 return *(*uintptr)(unsafe.Pointer(bp + 264)) 32207 }()) 32208 tcl.XTcl_DStringFree(tls, bp+52) 32209 if *(*uintptr)(unsafe.Pointer(bp + 264)) != 0 { 32210 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 264))) 32211 } 32212 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 32213 return TCL_ERROR 32214 } 32215 return TCL_OK 32216 } 32217 32218 func test_exec_hex(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32219 bp := tls.Alloc(794) 32220 defer tls.Free(794) 32221 32222 var rc int32 32223 var i int32 32224 var j int32 32225 *(*uintptr)(unsafe.Pointer(bp + 760)) = uintptr(0) 32226 var zHex uintptr 32227 32228 if argc != 3 { 32229 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32230 ts+14993, 0)) 32231 return TCL_ERROR 32232 } 32233 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+40) != 0 { 32234 return TCL_ERROR 32235 } 32236 zHex = *(*uintptr)(unsafe.Pointer(argv + 2*4)) 32237 i = libc.AssignInt32(&j, 0) 32238 __1: 32239 if !(uint32(i) < uint32(unsafe.Sizeof([501]int8{}))-uint32(1) && *(*int8)(unsafe.Pointer(zHex + uintptr(j))) != 0) { 32240 goto __3 32241 } 32242 { 32243 if int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j)))) == '%' && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 { 32244 *(*int8)(unsafe.Pointer(bp + 44 + uintptr(i))) = int8(testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j+1)))))<<4 + testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j+2)))))) 32245 j = j + 2 32246 } else { 32247 *(*int8)(unsafe.Pointer(bp + 44 + uintptr(i))) = *(*int8)(unsafe.Pointer(zHex + uintptr(j))) 32248 } 32249 32250 } 32251 goto __2 32252 __2: 32253 i++ 32254 j++ 32255 goto __1 32256 goto __3 32257 __3: 32258 ; 32259 *(*int8)(unsafe.Pointer(bp + 44 + uintptr(i))) = int8(0) 32260 tcl.XTcl_DStringInit(tls, bp+548) 32261 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+44, *(*uintptr)(unsafe.Pointer(&struct { 32262 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32263 }{exec_printf_cb})), bp+548, bp+760) 32264 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+764, ts+1333, libc.VaList(bp+32, rc)) 32265 tcl.XTcl_AppendElement(tls, interp, bp+764) 32266 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32267 if rc == SQLITE_OK { 32268 return (*Tcl_DString)(unsafe.Pointer(bp + 548)).Fstring 32269 } 32270 return *(*uintptr)(unsafe.Pointer(bp + 760)) 32271 }()) 32272 tcl.XTcl_DStringFree(tls, bp+548) 32273 if *(*uintptr)(unsafe.Pointer(bp + 760)) != 0 { 32274 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 760))) 32275 } 32276 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 40)), rc) != 0 { 32277 return TCL_ERROR 32278 } 32279 return TCL_OK 32280 } 32281 32282 func db_enter(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32283 bp := tls.Alloc(36) 32284 defer tls.Free(36) 32285 32286 if argc != 2 { 32287 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32288 ts+15001, 0)) 32289 return TCL_ERROR 32290 } 32291 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 32292 return TCL_ERROR 32293 } 32294 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32295 return TCL_OK 32296 } 32297 32298 func db_leave(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32299 bp := tls.Alloc(36) 32300 defer tls.Free(36) 32301 32302 if argc != 2 { 32303 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32304 ts+15001, 0)) 32305 return TCL_ERROR 32306 } 32307 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 32308 return TCL_ERROR 32309 } 32310 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32311 return TCL_OK 32312 } 32313 32314 func test_exec(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32315 bp := tls.Alloc(298) 32316 defer tls.Free(298) 32317 32318 var rc int32 32319 *(*uintptr)(unsafe.Pointer(bp + 264)) = uintptr(0) 32320 var zSql uintptr 32321 var i int32 32322 var j int32 32323 32324 if argc != 3 { 32325 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32326 ts+15005, 0)) 32327 return TCL_ERROR 32328 } 32329 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+48) != 0 { 32330 return TCL_ERROR 32331 } 32332 tcl.XTcl_DStringInit(tls, bp+52) 32333 zSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 32334 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; { 32335 if int32(*(*int8)(unsafe.Pointer(zSql + uintptr(i)))) == '%' { 32336 *(*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)))))) 32337 i = i + 3 32338 } else { 32339 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&i, 1)))) 32340 } 32341 } 32342 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 32343 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 32344 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32345 }{exec_printf_cb})), bp+52, bp+264) 32346 sqlite3.Xsqlite3_free(tls, zSql) 32347 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+268, ts+1333, libc.VaList(bp+40, rc)) 32348 tcl.XTcl_AppendElement(tls, interp, bp+268) 32349 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32350 if rc == SQLITE_OK { 32351 return (*Tcl_DString)(unsafe.Pointer(bp + 52)).Fstring 32352 } 32353 return *(*uintptr)(unsafe.Pointer(bp + 264)) 32354 }()) 32355 tcl.XTcl_DStringFree(tls, bp+52) 32356 if *(*uintptr)(unsafe.Pointer(bp + 264)) != 0 { 32357 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 264))) 32358 } 32359 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 32360 return TCL_ERROR 32361 } 32362 return TCL_OK 32363 } 32364 32365 func test_exec_nr(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32366 bp := tls.Alloc(40) 32367 defer tls.Free(40) 32368 32369 var rc int32 32370 *(*uintptr)(unsafe.Pointer(bp + 36)) = uintptr(0) 32371 if argc != 3 { 32372 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32373 ts+15005, 0)) 32374 return TCL_ERROR 32375 } 32376 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 32377 return TCL_ERROR 32378 } 32379 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*4)), uintptr(0), uintptr(0), bp+36) 32380 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32381 return TCL_ERROR 32382 } 32383 return TCL_OK 32384 } 32385 32386 func test_mprintf_z(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32387 bp := tls.Alloc(40) 32388 defer tls.Free(40) 32389 32390 var zResult uintptr = uintptr(0) 32391 var i int32 32392 32393 for i = 2; i < argc && (i == 2 || zResult != 0); i++ { 32394 zResult = sqlite3.Xsqlite3_mprintf(tls, ts+15013, libc.VaList(bp, zResult, *(*uintptr)(unsafe.Pointer(argv + 1*4)), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)))) 32395 } 32396 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zResult, 0)) 32397 sqlite3.Xsqlite3_free(tls, zResult) 32398 return TCL_OK 32399 } 32400 32401 func test_mprintf_n(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32402 bp := tls.Alloc(20) 32403 defer tls.Free(20) 32404 32405 var zStr uintptr 32406 *(*int32)(unsafe.Pointer(bp + 16)) = 0 32407 zStr = sqlite3.Xsqlite3_mprintf(tls, ts+15020, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+16)) 32408 sqlite3.Xsqlite3_free(tls, zStr) 32409 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 32410 return TCL_OK 32411 } 32412 32413 func test_snprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32414 bp := tls.Alloc(124) 32415 defer tls.Free(124) 32416 32417 var n int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 32418 var zFormat uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*4)) 32419 var a1 int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4))) 32420 if uint32(n) > uint32(unsafe.Sizeof([100]int8{})) { 32421 n = int32(unsafe.Sizeof([100]int8{})) 32422 } 32423 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+15025, 0) 32424 sqlite3.Xsqlite3_snprintf(tls, n, bp+24, zFormat, libc.VaList(bp, a1)) 32425 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, 0)) 32426 return TCL_OK 32427 } 32428 32429 func test_get_table_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32430 bp := tls.Alloc(330) 32431 defer tls.Free(330) 32432 32433 var rc int32 32434 *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(0) 32435 *(*int32)(unsafe.Pointer(bp + 292)) = 0 32436 *(*int32)(unsafe.Pointer(bp + 296)) = 0 32437 32438 var i int32 32439 32440 var zSql uintptr 32441 *(*int32)(unsafe.Pointer(bp + 64)) = -1 32442 if argc == 5 { 32443 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*4)), bp+64) != 0 { 32444 return TCL_ERROR 32445 } 32446 } 32447 if argc != 4 && argc != 5 { 32448 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32449 ts+15052, 0)) 32450 return TCL_ERROR 32451 } 32452 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+68) != 0 { 32453 return TCL_ERROR 32454 } 32455 tcl.XTcl_DStringInit(tls, bp+72) 32456 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*4)))) 32457 if argc == 5 { 32458 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 68)), zSql, bp+284, uintptr(0), uintptr(0), bp+288) 32459 } else { 32460 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 68)), zSql, bp+284, bp+292, bp+296, bp+288) 32461 *(*int32)(unsafe.Pointer(bp + 64)) = (*(*int32)(unsafe.Pointer(bp + 292)) + 1) * *(*int32)(unsafe.Pointer(bp + 296)) 32462 } 32463 sqlite3.Xsqlite3_free(tls, zSql) 32464 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+300, ts+1333, libc.VaList(bp+40, rc)) 32465 tcl.XTcl_AppendElement(tls, interp, bp+300) 32466 if rc == SQLITE_OK { 32467 if argc == 4 { 32468 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+300, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 292)))) 32469 tcl.XTcl_AppendElement(tls, interp, bp+300) 32470 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+300, ts+1333, libc.VaList(bp+56, *(*int32)(unsafe.Pointer(bp + 296)))) 32471 tcl.XTcl_AppendElement(tls, interp, bp+300) 32472 } 32473 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 32474 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32475 if *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 284)) + uintptr(i)*4)) != 0 { 32476 return *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 284)) + uintptr(i)*4)) 32477 } 32478 return ts + 5846 32479 }()) 32480 } 32481 } else { 32482 tcl.XTcl_AppendElement(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 288))) 32483 } 32484 sqlite3.Xsqlite3_free_table(tls, *(*uintptr)(unsafe.Pointer(bp + 284))) 32485 if *(*uintptr)(unsafe.Pointer(bp + 288)) != 0 { 32486 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 288))) 32487 } 32488 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 68)), rc) != 0 { 32489 return TCL_ERROR 32490 } 32491 return TCL_OK 32492 } 32493 32494 func test_last_rowid(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32495 bp := tls.Alloc(90) 32496 defer tls.Free(90) 32497 32498 if argc != 2 { 32499 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15078, 0)) 32500 return TCL_ERROR 32501 } 32502 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+56) != 0 { 32503 return TCL_ERROR 32504 } 32505 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+60, ts+6325, libc.VaList(bp+32, sqlite3.Xsqlite3_last_insert_rowid(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 32506 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 32507 return SQLITE_OK 32508 } 32509 32510 func test_key(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32511 return TCL_OK 32512 } 32513 32514 func test_rekey(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32515 return TCL_OK 32516 } 32517 32518 func sqlite_test_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32519 bp := tls.Alloc(36) 32520 defer tls.Free(36) 32521 32522 var rc int32 32523 if argc != 2 { 32524 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32525 ts+15083, 0)) 32526 return TCL_ERROR 32527 } 32528 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 32529 return TCL_ERROR 32530 } 32531 rc = sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32532 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32533 return TCL_OK 32534 } 32535 32536 func sqlite_test_close_v2(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32537 bp := tls.Alloc(36) 32538 defer tls.Free(36) 32539 32540 var rc int32 32541 if argc != 2 { 32542 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32543 ts+15083, 0)) 32544 return TCL_ERROR 32545 } 32546 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 32547 return TCL_ERROR 32548 } 32549 rc = sqlite3.Xsqlite3_close_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32550 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32551 return TCL_OK 32552 } 32553 32554 func t1_ifnullFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32555 var i int32 32556 for i = 0; i < argc; i++ { 32557 if SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) { 32558 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 32559 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))), 32560 n, libc.UintptrFromInt32(-1)) 32561 break 32562 } 32563 } 32564 } 32565 32566 func hex8Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 32567 bp := tls.Alloc(208) 32568 defer tls.Free(208) 32569 32570 var z uintptr 32571 var i int32 32572 32573 z = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32574 for i = 0; uint32(i) < uint32(unsafe.Sizeof([200]int8{}))/uint32(2)-uint32(2) && *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 32575 sqlite3.Xsqlite3_snprintf(tls, int32(uint32(unsafe.Sizeof([200]int8{}))-uint32(i*2)), bp+8+uintptr(i*2), ts+6337, libc.VaList(bp, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))))) 32576 } 32577 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = int8(0) 32578 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 32579 } 32580 32581 func hex16Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 32582 bp := tls.Alloc(408) 32583 defer tls.Free(408) 32584 32585 var z uintptr 32586 var i int32 32587 32588 z = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32589 for i = 0; uint32(i) < uint32(unsafe.Sizeof([400]int8{}))/uint32(4)-uint32(4) && *(*uint16)(unsafe.Pointer(z + uintptr(i)*2)) != 0; i++ { 32590 sqlite3.Xsqlite3_snprintf(tls, int32(uint32(unsafe.Sizeof([400]int8{}))-uint32(i*4)), bp+8+uintptr(i*4), ts+15094, libc.VaList(bp, int32(*(*uint16)(unsafe.Pointer(z + uintptr(i)*2)))&0xff)) 32591 } 32592 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*4))) = int8(0) 32593 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 32594 } 32595 32596 type dstr = struct { 32597 FnAlloc int32 32598 FnUsed int32 32599 Fz uintptr 32600 } 32601 32602 func dstrAppend(tls *libc.TLS, p uintptr, z uintptr, divider int32) { 32603 var n int32 = int32(libc.Xstrlen(tls, z)) 32604 if (*dstr)(unsafe.Pointer(p)).FnUsed+n+2 > (*dstr)(unsafe.Pointer(p)).FnAlloc { 32605 var zNew uintptr 32606 (*dstr)(unsafe.Pointer(p)).FnAlloc = (*dstr)(unsafe.Pointer(p)).FnAlloc*2 + n + 200 32607 zNew = sqlite3.Xsqlite3_realloc(tls, (*dstr)(unsafe.Pointer(p)).Fz, (*dstr)(unsafe.Pointer(p)).FnAlloc) 32608 if zNew == uintptr(0) { 32609 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(p)).Fz) 32610 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(dstr{}))) 32611 return 32612 } 32613 (*dstr)(unsafe.Pointer(p)).Fz = zNew 32614 } 32615 if divider != 0 && (*dstr)(unsafe.Pointer(p)).FnUsed > 0 { 32616 *(*int8)(unsafe.Pointer((*dstr)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*dstr)(unsafe.Pointer(p)).FnUsed, 1)))) = int8(divider) 32617 } 32618 libc.Xmemcpy(tls, (*dstr)(unsafe.Pointer(p)).Fz+uintptr((*dstr)(unsafe.Pointer(p)).FnUsed), z, uint32(n+1)) 32619 *(*int32)(unsafe.Pointer(p + 4)) += n 32620 } 32621 32622 func execFuncCallback(tls *libc.TLS, pData uintptr, argc int32, argv uintptr, NotUsed uintptr) int32 { 32623 var p uintptr = pData 32624 var i int32 32625 for i = 0; i < argc; i++ { 32626 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) == uintptr(0) { 32627 dstrAppend(tls, p, ts+5846, ' ') 32628 } else { 32629 dstrAppend(tls, p, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), ' ') 32630 } 32631 } 32632 return 0 32633 } 32634 32635 func sqlite3ExecFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32636 bp := tls.Alloc(12) 32637 defer tls.Free(12) 32638 32639 libc.Xmemset(tls, bp, 0, uint32(unsafe.Sizeof(dstr{}))) 32640 sqlite3.Xsqlite3_exec(tls, sqlite3.Xsqlite3_user_data(tls, context), 32641 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 32642 *(*uintptr)(unsafe.Pointer(&struct { 32643 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32644 }{execFuncCallback})), bp, uintptr(0)) 32645 sqlite3.Xsqlite3_result_text(tls, context, (*dstr)(unsafe.Pointer(bp)).Fz, (*dstr)(unsafe.Pointer(bp)).FnUsed, libc.UintptrFromInt32(-1)) 32646 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(bp)).Fz) 32647 } 32648 32649 func tkt2213Function(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32650 var nText int32 32651 var zText1 uintptr 32652 var zText2 uintptr 32653 var zText3 uintptr 32654 32655 nText = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32656 zText1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32657 zText2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32658 zText3 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32659 32660 if zText1 != zText2 || zText2 != zText3 { 32661 sqlite3.Xsqlite3_result_error(tls, context, ts+15099, -1) 32662 } else { 32663 var zCopy uintptr = sqlite3.Xsqlite3_malloc(tls, nText) 32664 libc.Xmemcpy(tls, zCopy, zText1, uint32(nText)) 32665 sqlite3.Xsqlite3_result_text(tls, context, zCopy, nText, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 32666 } 32667 } 32668 32669 func ptrChngFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32670 var p1 uintptr 32671 var p2 uintptr 32672 var zCmd uintptr 32673 if argc != 4 { 32674 return 32675 } 32676 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 32677 if zCmd == uintptr(0) { 32678 return 32679 } 32680 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32681 p1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32682 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32683 p1 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32684 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32685 p1 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32686 } else { 32687 return 32688 } 32689 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 32690 if zCmd == uintptr(0) { 32691 return 32692 } 32693 if libc.Xstrcmp(tls, zCmd, ts+15127) == 0 { 32694 sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32695 } else if libc.Xstrcmp(tls, zCmd, ts+15133) == 0 { 32696 sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32697 } else if libc.Xstrcmp(tls, zCmd, ts+15141) == 0 { 32698 } else { 32699 return 32700 } 32701 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4))) 32702 if zCmd == uintptr(0) { 32703 return 32704 } 32705 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32706 p2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32707 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32708 p2 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32709 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32710 p2 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32711 } else { 32712 return 32713 } 32714 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(p1 != p2)) 32715 } 32716 32717 func nondeterministicFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32718 sqlite3.Xsqlite3_result_int(tls, context, libc.PostIncInt32(&cnt, 1)) 32719 } 32720 32721 var cnt int32 = 0 32722 32723 func intrealFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32724 bp := tls.Alloc(8) 32725 defer tls.Free(8) 32726 32727 var v sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 32728 sqlite3.Xsqlite3_result_int64(tls, context, v) 32729 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_RESULT_INTREAL, libc.VaList(bp, context)) 32730 } 32731 32732 func test_create_function(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32733 bp := tls.Alloc(36) 32734 defer tls.Free(36) 32735 32736 var rc int32 32737 32738 if argc != 2 { 32739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32740 ts+15078, 0)) 32741 return TCL_ERROR 32742 } 32743 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 32744 return TCL_ERROR 32745 } 32746 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15146, -1, SQLITE_UTF8, uintptr(0), 32747 *(*uintptr)(unsafe.Pointer(&struct { 32748 f func(*libc.TLS, uintptr, int32, uintptr) 32749 }{t1_ifnullFunc})), uintptr(0), uintptr(0)) 32750 if rc == SQLITE_OK { 32751 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15157, 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32752 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32753 f func(*libc.TLS, uintptr, int32, uintptr) 32754 }{hex8Func})), uintptr(0), uintptr(0)) 32755 } 32756 if rc == SQLITE_OK { 32757 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15162, 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 32758 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32759 f func(*libc.TLS, uintptr, int32, uintptr) 32760 }{hex16Func})), uintptr(0), uintptr(0)) 32761 } 32762 if rc == SQLITE_OK { 32763 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15168, 1, SQLITE_ANY, uintptr(0), 32764 *(*uintptr)(unsafe.Pointer(&struct { 32765 f func(*libc.TLS, uintptr, int32, uintptr) 32766 }{tkt2213Function})), uintptr(0), uintptr(0)) 32767 } 32768 if rc == SQLITE_OK { 32769 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15180, 4, SQLITE_ANY, uintptr(0), 32770 *(*uintptr)(unsafe.Pointer(&struct { 32771 f func(*libc.TLS, uintptr, int32, uintptr) 32772 }{ptrChngFunction})), uintptr(0), uintptr(0)) 32773 } 32774 32775 if rc == SQLITE_OK { 32776 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15195, -1, SQLITE_UTF8, 32777 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32778 f func(*libc.TLS, uintptr, int32, uintptr) 32779 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32780 } 32781 if rc == SQLITE_OK { 32782 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15204, -1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32783 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32784 f func(*libc.TLS, uintptr, int32, uintptr) 32785 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32786 } 32787 32788 if rc == SQLITE_OK { 32789 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15213, 1, SQLITE_UTF8, 32790 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32791 f func(*libc.TLS, uintptr, int32, uintptr) 32792 }{intrealFunction})), uintptr(0), uintptr(0)) 32793 } 32794 32795 if rc == SQLITE_OK { 32796 var zUtf16 uintptr 32797 var pVal uintptr 32798 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32799 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32800 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+15221, uint8(SQLITE_UTF8), uintptr(0)) 32801 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 32802 if (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FmallocFailed != 0 { 32803 rc = SQLITE_NOMEM 32804 } else { 32805 rc = sqlite3.Xsqlite3_create_function16(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zUtf16, 32806 1, SQLITE_UTF16, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct { 32807 f func(*libc.TLS, uintptr, int32, uintptr) 32808 }{sqlite3ExecFunc})), uintptr(0), uintptr(0)) 32809 } 32810 sqlite3.Xsqlite3ValueFree(tls, pVal) 32811 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32812 } 32813 32814 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32815 return TCL_ERROR 32816 } 32817 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32818 return TCL_OK 32819 } 32820 32821 func test_drop_modules(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32822 bp := tls.Alloc(36) 32823 defer tls.Free(36) 32824 32825 if argc < 2 { 32826 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32827 ts+15078, 0)) 32828 return TCL_ERROR 32829 } 32830 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 32831 return TCL_ERROR 32832 } 32833 sqlite3.Xsqlite3_drop_modules(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), func() uintptr { 32834 if argc > 2 { 32835 return argv + uintptr(2)*4 32836 } 32837 return uintptr(0) 32838 }()) 32839 return TCL_OK 32840 } 32841 32842 type t1CountCtx1 = struct{ Fn int32 } 32843 32844 type t1CountCtx = t1CountCtx1 32845 32846 func t1CountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32847 bp := tls.Alloc(9) 32848 defer tls.Free(9) 32849 32850 var p uintptr 32851 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 32852 if (argc == 0 || SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv)))) && p != 0 { 32853 (*t1CountCtx)(unsafe.Pointer(p)).Fn++ 32854 } 32855 if argc > 0 { 32856 var v int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 32857 if v == 40 { 32858 sqlite3.Xsqlite3_result_error(tls, context, ts+15235, -1) 32859 } else if v == 41 { 32860 *(*[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)} 32861 sqlite3.Xsqlite3_result_error16(tls, context, bp+1, -1) 32862 } 32863 } 32864 } 32865 32866 func t1CountFinalize(tls *libc.TLS, context uintptr) { 32867 var p uintptr 32868 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 32869 if p != 0 { 32870 if (*t1CountCtx)(unsafe.Pointer(p)).Fn == 42 { 32871 sqlite3.Xsqlite3_result_error(tls, context, ts+15265, -1) 32872 } else { 32873 sqlite3.Xsqlite3_result_int(tls, context, func() int32 { 32874 if p != 0 { 32875 return (*t1CountCtx)(unsafe.Pointer(p)).Fn 32876 } 32877 return 0 32878 }()) 32879 } 32880 } 32881 } 32882 32883 func legacyCountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32884 } 32885 32886 func legacyCountFinalize(tls *libc.TLS, context uintptr) { 32887 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_aggregate_count(tls, context)) 32888 } 32889 32890 func test_create_aggregate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32891 bp := tls.Alloc(36) 32892 defer tls.Free(36) 32893 32894 var rc int32 32895 if argc != 2 { 32896 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32897 ts+15083, 0)) 32898 return TCL_ERROR 32899 } 32900 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 32901 return TCL_ERROR 32902 } 32903 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 0, SQLITE_UTF8, uintptr(0), uintptr(0), 32904 *(*uintptr)(unsafe.Pointer(&struct { 32905 f func(*libc.TLS, uintptr, int32, uintptr) 32906 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 32907 if rc == SQLITE_OK { 32908 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 1, SQLITE_UTF8, uintptr(0), uintptr(0), 32909 *(*uintptr)(unsafe.Pointer(&struct { 32910 f func(*libc.TLS, uintptr, int32, uintptr) 32911 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 32912 } 32913 if rc == SQLITE_OK { 32914 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15294, 0, SQLITE_ANY, uintptr(0), uintptr(0), 32915 *(*uintptr)(unsafe.Pointer(&struct { 32916 f func(*libc.TLS, uintptr, int32, uintptr) 32917 }{legacyCountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{legacyCountFinalize}))) 32918 } 32919 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32920 return TCL_ERROR 32921 } 32922 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32923 return TCL_OK 32924 } 32925 32926 func test_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32927 bp := tls.Alloc(40) 32928 defer tls.Free(40) 32929 32930 if argc != 2 { 32931 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32932 ts+15307, 0)) 32933 return TCL_ERROR 32934 } 32935 libc.Xprintf(tls, ts+389, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 1*4)))) 32936 return TCL_OK 32937 } 32938 32939 func sqlite3_mprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32940 bp := tls.Alloc(84) 32941 defer tls.Free(84) 32942 32943 var i int32 32944 var z uintptr 32945 if argc != 5 { 32946 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32947 ts+15314, 0)) 32948 return TCL_ERROR 32949 } 32950 for i = 2; i < 5; i++ { 32951 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), bp+72+uintptr(i-2)*4) != 0 { 32952 return TCL_ERROR 32953 } 32954 } 32955 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), *(*int32)(unsafe.Pointer(bp + 72 + 2*4)))) 32956 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 32957 sqlite3.Xsqlite3_free(tls, z) 32958 return TCL_OK 32959 } 32960 32961 func sqlite3_mprintf_int64(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32962 bp := tls.Alloc(112) 32963 defer tls.Free(112) 32964 32965 var i int32 32966 32967 var z uintptr 32968 if argc != 5 { 32969 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32970 ts+15314, 0)) 32971 return TCL_ERROR 32972 } 32973 for i = 2; i < 5; i++ { 32974 if sqlite3.Xsqlite3Atoi64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), bp+88+uintptr(i-2)*8, sqlite3.Xsqlite3Strlen30(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))), uint8(SQLITE_UTF8)) != 0 { 32975 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15335, 0)) 32976 return TCL_ERROR 32977 } 32978 } 32979 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), 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)))) 32980 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 32981 sqlite3.Xsqlite3_free(tls, z) 32982 return TCL_OK 32983 } 32984 32985 func sqlite3_mprintf_long(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32986 bp := tls.Alloc(96) 32987 defer tls.Free(96) 32988 32989 var i int32 32990 32991 var z uintptr 32992 if argc != 5 { 32993 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32994 ts+15314, 0)) 32995 return TCL_ERROR 32996 } 32997 for i = 2; i < 5; i++ { 32998 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), bp+72+uintptr(i-2)*4) != 0 { 32999 return TCL_ERROR 33000 } 33001 *(*int32)(unsafe.Pointer(bp + 84 + uintptr(i-2)*4)) = *(*int32)(unsafe.Pointer(bp + 72 + uintptr(i-2)*4)) 33002 *(*int32)(unsafe.Pointer(bp + 84 + uintptr(i-2)*4)) &= libc.Int32FromUint64(uint64(1)<<(uint32(unsafe.Sizeof(int32(0)))*uint32(8)) - uint64(1)) 33003 } 33004 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 84)), *(*int32)(unsafe.Pointer(bp + 84 + 1*4)), *(*int32)(unsafe.Pointer(bp + 84 + 2*4)))) 33005 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33006 sqlite3.Xsqlite3_free(tls, z) 33007 return TCL_OK 33008 } 33009 33010 func sqlite3_mprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33011 bp := tls.Alloc(84) 33012 defer tls.Free(84) 33013 33014 var i int32 33015 var z uintptr 33016 if argc < 4 || argc > 5 { 33017 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33018 ts+15374, 0)) 33019 return TCL_ERROR 33020 } 33021 for i = 2; i < 4; i++ { 33022 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), bp+72+uintptr(i-2)*4) != 0 { 33023 return TCL_ERROR 33024 } 33025 } 33026 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), func() uintptr { 33027 if argc > 4 { 33028 return *(*uintptr)(unsafe.Pointer(argv + 4*4)) 33029 } 33030 return uintptr(0) 33031 }())) 33032 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33033 sqlite3.Xsqlite3_free(tls, z) 33034 return TCL_OK 33035 } 33036 33037 func sqlite3_snprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33038 bp := tls.Alloc(104) 33039 defer tls.Free(104) 33040 33041 var i int32 33042 33043 var z uintptr 33044 if argc < 5 || argc > 6 { 33045 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33046 ts+15400, 0)) 33047 return TCL_ERROR 33048 } 33049 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+88) != 0 { 33050 return TCL_ERROR 33051 } 33052 if *(*int32)(unsafe.Pointer(bp + 88)) < 0 { 33053 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15430, 0)) 33054 return TCL_ERROR 33055 } 33056 for i = 3; i < 5; i++ { 33057 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), bp+92+uintptr(i-3)*4) != 0 { 33058 return TCL_ERROR 33059 } 33060 } 33061 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 88))+1) 33062 sqlite3.Xsqlite3_snprintf(tls, *(*int32)(unsafe.Pointer(bp + 88)), z, *(*uintptr)(unsafe.Pointer(argv + 2*4)), libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 92)), *(*int32)(unsafe.Pointer(bp + 92 + 1*4)), func() uintptr { 33063 if argc > 4 { 33064 return *(*uintptr)(unsafe.Pointer(argv + 5*4)) 33065 } 33066 return uintptr(0) 33067 }())) 33068 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33069 sqlite3.Xsqlite3_free(tls, z) 33070 return TCL_OK 33071 } 33072 33073 func sqlite3_mprintf_double(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33074 bp := tls.Alloc(92) 33075 defer tls.Free(92) 33076 33077 var i int32 33078 33079 var z uintptr 33080 if argc != 5 { 33081 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33082 ts+15453, 0)) 33083 return TCL_ERROR 33084 } 33085 for i = 2; i < 4; i++ { 33086 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), bp+72+uintptr(i-2)*4) != 0 { 33087 return TCL_ERROR 33088 } 33089 } 33090 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*4)), bp+84) != 0 { 33091 return TCL_ERROR 33092 } 33093 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), *(*float64)(unsafe.Pointer(bp + 84)))) 33094 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33095 sqlite3.Xsqlite3_free(tls, z) 33096 return TCL_OK 33097 } 33098 33099 func sqlite3_mprintf_scaled(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33100 bp := tls.Alloc(72) 33101 defer tls.Free(72) 33102 33103 var i int32 33104 33105 var z uintptr 33106 if argc != 4 { 33107 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33108 ts+15477, 0)) 33109 return TCL_ERROR 33110 } 33111 for i = 2; i < 4; i++ { 33112 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)), bp+56+uintptr(i-2)*8) != 0 { 33113 return TCL_ERROR 33114 } 33115 } 33116 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), libc.VaList(bp+32, *(*float64)(unsafe.Pointer(bp + 56))**(*float64)(unsafe.Pointer(bp + 56 + 1*8)))) 33117 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 33118 sqlite3.Xsqlite3_free(tls, z) 33119 return TCL_OK 33120 } 33121 33122 func sqlite3_mprintf_stronly(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33123 bp := tls.Alloc(56) 33124 defer tls.Free(56) 33125 33126 var z uintptr 33127 if argc != 3 { 33128 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33129 ts+15500, 0)) 33130 return TCL_ERROR 33131 } 33132 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 33133 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 33134 sqlite3.Xsqlite3_free(tls, z) 33135 return TCL_OK 33136 } 33137 33138 func sqlite3_mprintf_hexdouble(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33139 bp := tls.Alloc(112) 33140 defer tls.Free(112) 33141 33142 var z uintptr 33143 33144 if argc != 3 { 33145 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33146 ts+15500, 0)) 33147 return TCL_ERROR 33148 } 33149 if libc.Xsscanf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4)), ts+15516, libc.VaList(bp+32, bp+88, bp+92)) != 2 { 33150 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+15525, 0)) 33151 return TCL_ERROR 33152 } 33153 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 88))) 33154 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = *(*sqlite_uint64)(unsafe.Pointer(bp + 104))<<32 + sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 92))) 33155 libc.Xmemcpy(tls, bp+96, bp+104, uint32(unsafe.Sizeof(float64(0)))) 33156 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), libc.VaList(bp+64, *(*float64)(unsafe.Pointer(bp + 96)))) 33157 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33158 sqlite3.Xsqlite3_free(tls, z) 33159 return TCL_OK 33160 } 33161 33162 func test_enable_shared(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33163 bp := tls.Alloc(4) 33164 defer tls.Free(4) 33165 33166 var rc int32 33167 33168 var ret int32 = 0 33169 33170 if objc != 2 && objc != 1 { 33171 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15569) 33172 return TCL_ERROR 33173 } 33174 ret = sqlite3.Xsqlite3Config.FsharedCacheEnabled 33175 33176 if objc == 2 { 33177 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 33178 return TCL_ERROR 33179 } 33180 rc = sqlite3.Xsqlite3_enable_shared_cache(tls, *(*int32)(unsafe.Pointer(bp))) 33181 if rc != SQLITE_OK { 33182 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 33183 return TCL_ERROR 33184 } 33185 } 33186 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(ret != 0))) 33187 return TCL_OK 33188 } 33189 33190 func test_extended_result_codes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33191 bp := tls.Alloc(8) 33192 defer tls.Free(8) 33193 33194 if objc != 3 { 33195 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15579) 33196 return TCL_ERROR 33197 } 33198 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 33199 return TCL_ERROR 33200 } 33201 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 33202 return TCL_ERROR 33203 } 33204 sqlite3.Xsqlite3_extended_result_codes(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 33205 return TCL_OK 33206 } 33207 33208 func test_libversion_number(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33209 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_libversion_number(tls))) 33210 return TCL_OK 33211 } 33212 33213 func test_table_column_metadata(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33214 bp := tls.Alloc(40) 33215 defer tls.Free(40) 33216 33217 var zDb uintptr 33218 var zTbl uintptr 33219 var zCol uintptr 33220 var rc int32 33221 var pRet uintptr 33222 33223 if objc != 5 && objc != 4 { 33224 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15590) 33225 return TCL_ERROR 33226 } 33227 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0 { 33228 return TCL_ERROR 33229 } 33230 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 33231 zTbl = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 33232 if objc == 5 { 33233 zCol = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))) 33234 } else { 33235 zCol = uintptr(0) 33236 } 33237 33238 if libc.Xstrlen(tls, zDb) == size_t(0) { 33239 zDb = uintptr(0) 33240 } 33241 33242 rc = sqlite3.Xsqlite3_table_column_metadata(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDb, zTbl, zCol, 33243 bp+20, bp+24, bp+28, bp+32, bp+36) 33244 33245 if rc != SQLITE_OK { 33246 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 33247 return TCL_ERROR 33248 } 33249 33250 pRet = tcl.XTcl_NewObj(tls) 33251 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), -1)) 33252 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), -1)) 33253 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 28)))) 33254 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 32)))) 33255 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 36)))) 33256 tcl.XTcl_SetObjResult(tls, interp, pRet) 33257 33258 return TCL_OK 33259 } 33260 33261 func blobHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 33262 bp := tls.Alloc(8) 33263 defer tls.Free(8) 33264 33265 var z uintptr 33266 33267 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 33268 if *(*int32)(unsafe.Pointer(bp)) == 0 { 33269 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 33270 } else { 33271 var channel Tcl_Channel 33272 var instanceData ClientData 33273 33274 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 33275 if !(channel != 0) { 33276 return TCL_ERROR 33277 } 33278 33279 tcl.XTcl_Flush(tls, channel) 33280 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 33281 33282 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 33283 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 33284 } 33285 33286 return TCL_OK 33287 } 33288 33289 func test_blob_reopen(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33290 bp := tls.Alloc(12) 33291 defer tls.Free(12) 33292 33293 var rc int32 33294 33295 if objc != 3 { 33296 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15616) 33297 return TCL_ERROR 33298 } 33299 33300 if blobHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 33301 return TCL_ERROR 33302 } 33303 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 33304 return TCL_ERROR 33305 } 33306 33307 rc = sqlite3.Xsqlite3_blob_reopen(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 4))) 33308 if rc != SQLITE_OK { 33309 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 33310 } 33311 33312 return func() int32 { 33313 if rc == SQLITE_OK { 33314 return TCL_OK 33315 } 33316 return TCL_ERROR 33317 }() 33318 } 33319 33320 type TestCollationX1 = struct { 33321 Finterp uintptr 33322 FpCmp uintptr 33323 FpDel uintptr 33324 } 33325 33326 type TestCollationX = TestCollationX1 33327 33328 func testCreateCollationDel(tls *libc.TLS, pCtx uintptr) { 33329 var p uintptr = pCtx 33330 33331 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, (*TestCollationX)(unsafe.Pointer(p)).FpDel, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) 33332 if rc != TCL_OK { 33333 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 33334 } 33335 33336 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33337 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpCmp 33338 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33339 tcl.XTclFreeObj(tls, _objPtr) 33340 } 33341 } 33342 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 33343 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpDel 33344 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33345 tcl.XTclFreeObj(tls, _objPtr) 33346 } 33347 } 33348 sqlite3.Xsqlite3_free(tls, p) 33349 } 33350 33351 func testCreateCollationCmp(tls *libc.TLS, pCtx uintptr, nLeft int32, zLeft uintptr, nRight int32, zRight uintptr) int32 { 33352 bp := tls.Alloc(4) 33353 defer tls.Free(4) 33354 33355 var p uintptr = pCtx 33356 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpCmp) 33357 *(*int32)(unsafe.Pointer(bp)) = 0 33358 33359 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 33360 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zLeft, nLeft)) 33361 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zRight, nRight)) 33362 33363 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, pScript, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) || 33364 TCL_OK != tcl.XTcl_GetIntFromObj(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp), bp) { 33365 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 33366 } 33367 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33368 var _objPtr uintptr = pScript 33369 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33370 tcl.XTclFreeObj(tls, _objPtr) 33371 } 33372 } 33373 33374 return *(*int32)(unsafe.Pointer(bp)) 33375 } 33376 33377 func test_create_collation_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33378 bp := tls.Alloc(20) 33379 defer tls.Free(20) 33380 33381 var p uintptr 33382 33383 var rc int32 33384 33385 if objc != 5 { 33386 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15630) 33387 return TCL_ERROR 33388 } 33389 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0 { 33390 return TCL_ERROR 33391 } 33392 33393 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TestCollationX{}))) 33394 (*TestCollationX)(unsafe.Pointer(p)).FpCmp = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 33395 (*TestCollationX)(unsafe.Pointer(p)).FpDel = *(*uintptr)(unsafe.Pointer(objv + 4*4)) 33396 (*TestCollationX)(unsafe.Pointer(p)).Finterp = interp 33397 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpCmp)).FrefCount++ 33398 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpDel)).FrefCount++ 33399 33400 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), 16, 33401 p, *(*uintptr)(unsafe.Pointer(&struct { 33402 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33403 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 33404 if rc != SQLITE_MISUSE { 33405 tcl.XTcl_AppendResult(tls, interp, 33406 libc.VaList(bp, ts+15663, uintptr(0))) 33407 return TCL_ERROR 33408 } 33409 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), SQLITE_UTF8, 33410 p, *(*uintptr)(unsafe.Pointer(&struct { 33411 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33412 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 33413 return TCL_OK 33414 } 33415 33416 type CreateFunctionV21 = struct { 33417 Finterp uintptr 33418 FpFunc uintptr 33419 FpStep uintptr 33420 FpFinal uintptr 33421 FpDestroy uintptr 33422 } 33423 33424 type CreateFunctionV2 = CreateFunctionV21 33425 33426 func cf2Func(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 33427 } 33428 33429 func cf2Step(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 33430 } 33431 33432 func cf2Final(tls *libc.TLS, ctx uintptr) { 33433 } 33434 33435 func cf2Destroy(tls *libc.TLS, pUser uintptr) { 33436 var p uintptr = pUser 33437 33438 if (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp != 0 && (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33439 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy, 0) 33440 if rc != TCL_OK { 33441 tcl.XTcl_BackgroundError(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp) 33442 } 33443 } 33444 33445 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33446 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33447 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc 33448 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33449 tcl.XTclFreeObj(tls, _objPtr) 33450 } 33451 } 33452 } 33453 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33454 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 33455 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep 33456 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33457 tcl.XTclFreeObj(tls, _objPtr) 33458 } 33459 } 33460 } 33461 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33462 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 33463 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal 33464 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33465 tcl.XTclFreeObj(tls, _objPtr) 33466 } 33467 } 33468 } 33469 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33470 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 33471 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy 33472 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33473 tcl.XTclFreeObj(tls, _objPtr) 33474 } 33475 } 33476 } 33477 sqlite3.Xsqlite3_free(tls, p) 33478 } 33479 33480 func test_create_function_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33481 bp := tls.Alloc(100) 33482 defer tls.Free(100) 33483 33484 var zFunc uintptr 33485 33486 var p uintptr 33487 var i int32 33488 var rc int32 33489 33490 *(*[6]EncTable)(unsafe.Pointer(bp + 24)) = [6]EncTable{ 33491 {FzEnc: ts + 15728, Fenc: SQLITE_UTF8}, 33492 {FzEnc: ts + 15733, Fenc: SQLITE_UTF16}, 33493 {FzEnc: ts + 15739, Fenc: SQLITE_UTF16LE}, 33494 {FzEnc: ts + 15747, Fenc: SQLITE_UTF16BE}, 33495 {FzEnc: ts + 12774, Fenc: SQLITE_ANY}, 33496 {FzEnc: ts + 14193}, 33497 } 33498 33499 if objc < 5 || objc%2 == 0 { 33500 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15755) 33501 return TCL_ERROR 33502 } 33503 33504 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0 { 33505 return TCL_ERROR 33506 } 33507 zFunc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 33508 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+20) != 0 { 33509 return TCL_ERROR 33510 } 33511 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+24, int32(unsafe.Sizeof(EncTable{})), 33512 ts+15784, 0, bp+72) != 0 { 33513 return TCL_ERROR 33514 } 33515 *(*int32)(unsafe.Pointer(bp + 72)) = (*EncTable)(unsafe.Pointer(bp + 24 + uintptr(*(*int32)(unsafe.Pointer(bp + 72)))*8)).Fenc 33516 33517 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CreateFunctionV2{}))) 33518 33519 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(CreateFunctionV2{}))) 33520 (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp = interp 33521 33522 for i = 5; i < objc; i = i + 2 { 33523 *(*[5]uintptr)(unsafe.Pointer(bp + 76)) = [5]uintptr{ts + 15793, ts + 15799, ts + 15805, ts + 15812, uintptr(0)} 33524 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+76, int32(unsafe.Sizeof(uintptr(0))), ts+15821, 0, bp+96) != 0 { 33525 sqlite3.Xsqlite3_free(tls, p) 33526 return TCL_ERROR 33527 } 33528 33529 switch *(*int32)(unsafe.Pointer(bp + 96)) { 33530 case 0: 33531 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)) 33532 break 33533 case 1: 33534 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)) 33535 break 33536 case 2: 33537 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)) 33538 break 33539 case 3: 33540 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)) 33541 break 33542 } 33543 } 33544 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33545 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc) 33546 } 33547 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33548 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep) 33549 } 33550 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33551 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal) 33552 } 33553 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33554 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy) 33555 } 33556 33557 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33558 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc)).FrefCount++ 33559 } 33560 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33561 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpStep)).FrefCount++ 33562 } 33563 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33564 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal)).FrefCount++ 33565 } 33566 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33567 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy)).FrefCount++ 33568 } 33569 33570 rc = sqlite3.Xsqlite3_create_function_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zFunc, *(*int32)(unsafe.Pointer(bp + 20)), *(*int32)(unsafe.Pointer(bp + 72)), p, 33571 func() uintptr { 33572 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33573 return *(*uintptr)(unsafe.Pointer(&struct { 33574 f func(*libc.TLS, uintptr, int32, uintptr) 33575 }{cf2Func})) 33576 } 33577 return uintptr(0) 33578 }(), 33579 func() uintptr { 33580 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33581 return *(*uintptr)(unsafe.Pointer(&struct { 33582 f func(*libc.TLS, uintptr, int32, uintptr) 33583 }{cf2Step})) 33584 } 33585 return uintptr(0) 33586 }(), 33587 func() uintptr { 33588 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33589 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Final})) 33590 } 33591 return uintptr(0) 33592 }(), 33593 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Destroy}))) 33594 if rc != SQLITE_OK { 33595 tcl.XTcl_ResetResult(tls, interp) 33596 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 33597 return TCL_ERROR 33598 } 33599 return TCL_OK 33600 } 33601 33602 type EncTable = struct { 33603 FzEnc uintptr 33604 Fenc int32 33605 } 33606 33607 func test_load_extension(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33608 bp := tls.Alloc(56) 33609 defer tls.Free(56) 33610 33611 var db uintptr 33612 _ = db 33613 var rc int32 33614 var zDb uintptr 33615 var zFile uintptr 33616 _ = zFile 33617 var zProc uintptr = uintptr(0) 33618 _ = zProc 33619 var zErr uintptr = uintptr(0) 33620 33621 if objc != 4 && objc != 3 { 33622 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15828) 33623 return TCL_ERROR 33624 } 33625 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 33626 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 33627 if objc == 4 { 33628 zProc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 33629 } 33630 33631 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+24) != 0) { 33632 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33633 return TCL_ERROR 33634 } 33635 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)).Fdb 33636 33637 rc = SQLITE_ERROR 33638 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+15850, 0) 33639 _ = zProc 33640 _ = zFile 33641 if rc != SQLITE_OK { 33642 tcl.XTcl_SetResult(tls, interp, func() uintptr { 33643 if zErr != 0 { 33644 return zErr 33645 } 33646 return ts + 584 33647 }(), uintptr(1)) 33648 rc = TCL_ERROR 33649 } else { 33650 rc = TCL_OK 33651 } 33652 sqlite3.Xsqlite3_free(tls, zErr) 33653 33654 return rc 33655 } 33656 33657 func test_enable_load(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33658 bp := tls.Alloc(68) 33659 defer tls.Free(68) 33660 33661 var db uintptr 33662 _ = db 33663 var zDb uintptr 33664 33665 if objc != 3 { 33666 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15892) 33667 return TCL_ERROR 33668 } 33669 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 33670 33671 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+32) != 0) { 33672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33673 return TCL_ERROR 33674 } 33675 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 32)).FobjClientData)).Fdb 33676 33677 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+64) != 0 { 33678 return TCL_ERROR 33679 } 33680 33681 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+15850)) 33682 return TCL_ERROR 33683 } 33684 33685 func sqlite_abort(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33686 libc.Xexit(tls, 255) 33687 33688 return TCL_OK 33689 } 33690 33691 func testFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33692 var zArg0 uintptr 33693 __1: 33694 if !(argc >= 2) { 33695 goto __2 33696 } 33697 zArg0 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33698 if !(zArg0 != 0) { 33699 goto __3 33700 } 33701 if !(0 == sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2577)) { 33702 goto __5 33703 } 33704 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)))) 33705 goto __6 33706 __5: 33707 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+3973) == 0) { 33708 goto __7 33709 } 33710 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)))) 33711 goto __8 33712 __7: 33713 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+15908) == 0) { 33714 goto __9 33715 } 33716 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))), -1, 33717 libc.UintptrFromInt32(-1)) 33718 goto __10 33719 __9: 33720 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2562) == 0) { 33721 goto __11 33722 } 33723 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)))) 33724 goto __12 33725 __11: 33726 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+7939) == 0) { 33727 goto __13 33728 } 33729 sqlite3.Xsqlite3_result_null(tls, context) 33730 goto __14 33731 __13: 33732 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+10013) == 0) { 33733 goto __15 33734 } 33735 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv + uintptr(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))))*4))) 33736 goto __16 33737 __15: 33738 goto error_out 33739 __16: 33740 ; 33741 __14: 33742 ; 33743 __12: 33744 ; 33745 __10: 33746 ; 33747 __8: 33748 ; 33749 __6: 33750 ; 33751 goto __4 33752 __3: 33753 goto error_out 33754 __4: 33755 ; 33756 argc = argc - 2 33757 argv += 4 * uintptr(2) 33758 goto __1 33759 __2: 33760 ; 33761 return 33762 33763 error_out: 33764 sqlite3.Xsqlite3_result_error(tls, context, 33765 ts+15915, -1) 33766 } 33767 33768 func test_register_func(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33769 bp := tls.Alloc(52) 33770 defer tls.Free(52) 33771 33772 var rc int32 33773 if argc != 3 { 33774 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33775 ts+15983, 0)) 33776 return TCL_ERROR 33777 } 33778 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+48) != 0 { 33779 return TCL_ERROR 33780 } 33781 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(argv + 2*4)), -1, SQLITE_UTF8, uintptr(0), 33782 *(*uintptr)(unsafe.Pointer(&struct { 33783 f func(*libc.TLS, uintptr, int32, uintptr) 33784 }{testFunc})), uintptr(0), uintptr(0)) 33785 if rc != 0 { 33786 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 33787 return TCL_ERROR 33788 } 33789 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 33790 return TCL_ERROR 33791 } 33792 return TCL_OK 33793 } 33794 33795 func test_finalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33796 bp := tls.Alloc(36) 33797 defer tls.Free(36) 33798 33799 var rc int32 33800 var db uintptr = uintptr(0) 33801 33802 if objc != 2 { 33803 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33804 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33805 return TCL_ERROR 33806 } 33807 33808 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 33809 return TCL_ERROR 33810 } 33811 33812 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 { 33813 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33814 } 33815 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33816 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33817 if db != 0 && sqlite3TestErrCode(tls, interp, db, rc) != 0 { 33818 return TCL_ERROR 33819 } 33820 return TCL_OK 33821 } 33822 33823 func test_stmt_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33824 bp := tls.Alloc(12) 33825 defer tls.Free(12) 33826 33827 var iValue int32 33828 var i int32 33829 *(*int32)(unsafe.Pointer(bp + 4)) = 0 33830 33831 var zOpName uintptr 33832 33833 if objc != 4 { 33834 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16009) 33835 return TCL_ERROR 33836 } 33837 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 33838 return TCL_ERROR 33839 } 33840 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 33841 for i = 0; i < int32(uint32(unsafe.Sizeof(aOp))/uint32(unsafe.Sizeof(struct { 33842 FzName uintptr 33843 Fop int32 33844 }{}))); i++ { 33845 if libc.Xstrcmp(tls, aOp[i].FzName, zOpName) == 0 { 33846 *(*int32)(unsafe.Pointer(bp + 4)) = aOp[i].Fop 33847 break 33848 } 33849 } 33850 if i >= int32(uint32(unsafe.Sizeof(aOp))/uint32(unsafe.Sizeof(struct { 33851 FzName uintptr 33852 Fop int32 33853 }{}))) { 33854 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 33855 return TCL_ERROR 33856 } 33857 } 33858 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+8) != 0 { 33859 return TCL_ERROR 33860 } 33861 iValue = sqlite3.Xsqlite3_stmt_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), *(*int32)(unsafe.Pointer(bp + 8))) 33862 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iValue)) 33863 return TCL_OK 33864 } 33865 33866 var aOp = [7]struct { 33867 FzName uintptr 33868 Fop int32 33869 }{ 33870 {FzName: ts + 16034, Fop: SQLITE_STMTSTATUS_FULLSCAN_STEP}, 33871 {FzName: ts + 16066, Fop: SQLITE_STMTSTATUS_SORT}, 33872 {FzName: ts + 16089, Fop: SQLITE_STMTSTATUS_AUTOINDEX}, 33873 {FzName: ts + 16117, Fop: SQLITE_STMTSTATUS_VM_STEP}, 33874 {FzName: ts + 16143, Fop: SQLITE_STMTSTATUS_REPREPARE}, 33875 {FzName: ts + 16171, Fop: SQLITE_STMTSTATUS_RUN}, 33876 {FzName: ts + 16193, Fop: SQLITE_STMTSTATUS_MEMUSED}, 33877 } 33878 33879 func test_config_sorterref(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33880 bp := tls.Alloc(12) 33881 defer tls.Free(12) 33882 33883 if objc != 2 { 33884 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 33885 return TCL_ERROR 33886 } 33887 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+8) != 0 { 33888 return TCL_ERROR 33889 } 33890 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_SORTERREF_SIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 33891 return TCL_OK 33892 } 33893 33894 func vfsCurrentTimeInt64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33895 bp := tls.Alloc(8) 33896 defer tls.Free(8) 33897 33898 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 33899 if objc != 1 { 33900 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 33901 return TCL_ERROR 33902 } 33903 (*struct { 33904 f func(*libc.TLS, uintptr, uintptr) int32 33905 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTimeInt64})).f(tls, pVfs, bp) 33906 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*i64)(unsafe.Pointer(bp)))) 33907 return TCL_OK 33908 } 33909 33910 func test_snapshot_get(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33911 bp := tls.Alloc(108) 33912 defer tls.Free(108) 33913 33914 var rc int32 33915 33916 var zName uintptr 33917 *(*uintptr)(unsafe.Pointer(bp + 4)) = uintptr(0) 33918 33919 if objc != 3 { 33920 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33921 return TCL_ERROR 33922 } 33923 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 33924 return TCL_ERROR 33925 } 33926 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 33927 33928 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+4) 33929 if rc != SQLITE_OK { 33930 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33931 return TCL_ERROR 33932 } else { 33933 if sqlite3TestMakePointerStr(tls, interp, bp+8, *(*uintptr)(unsafe.Pointer(bp + 4))) != 0 { 33934 return TCL_ERROR 33935 } 33936 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 33937 } 33938 return TCL_OK 33939 } 33940 33941 func test_snapshot_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33942 bp := tls.Alloc(4) 33943 defer tls.Free(4) 33944 33945 var rc int32 33946 33947 var zName uintptr 33948 33949 if objc != 3 { 33950 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 33951 return TCL_ERROR 33952 } 33953 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 33954 return TCL_ERROR 33955 } 33956 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 33957 33958 rc = sqlite3.Xsqlite3_snapshot_recover(tls, *(*uintptr)(unsafe.Pointer(bp)), zName) 33959 if rc != SQLITE_OK { 33960 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33961 return TCL_ERROR 33962 } else { 33963 tcl.XTcl_ResetResult(tls, interp) 33964 } 33965 return TCL_OK 33966 } 33967 33968 func test_snapshot_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33969 bp := tls.Alloc(4) 33970 defer tls.Free(4) 33971 33972 var rc int32 33973 33974 var zName uintptr 33975 var pSnapshot uintptr 33976 33977 if objc != 4 { 33978 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 33979 return TCL_ERROR 33980 } 33981 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 33982 return TCL_ERROR 33983 } 33984 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 33985 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)))) 33986 33987 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, pSnapshot) 33988 if rc != SQLITE_OK { 33989 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 33990 return TCL_ERROR 33991 } else { 33992 tcl.XTcl_ResetResult(tls, interp) 33993 } 33994 return TCL_OK 33995 } 33996 33997 func test_snapshot_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33998 var pSnapshot uintptr 33999 if objc != 2 { 34000 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16254) 34001 return TCL_ERROR 34002 } 34003 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 34004 sqlite3.Xsqlite3_snapshot_free(tls, pSnapshot) 34005 return TCL_OK 34006 } 34007 34008 func test_snapshot_cmp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34009 var res int32 34010 var p1 uintptr 34011 var p2 uintptr 34012 if objc != 3 { 34013 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 34014 return TCL_ERROR 34015 } 34016 p1 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 34017 p2 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)))) 34018 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 34019 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 34020 return TCL_OK 34021 } 34022 34023 func test_snapshot_get_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34024 bp := tls.Alloc(8) 34025 defer tls.Free(8) 34026 34027 var rc int32 34028 34029 var zName uintptr 34030 *(*uintptr)(unsafe.Pointer(bp + 4)) = uintptr(0) 34031 34032 if objc != 3 { 34033 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 34034 return TCL_ERROR 34035 } 34036 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 34037 return TCL_ERROR 34038 } 34039 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 34040 34041 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+4) 34042 if rc != SQLITE_OK { 34043 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34044 return TCL_ERROR 34045 } else { 34046 tcl.XTcl_SetObjResult(tls, interp, 34047 tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 4)), int32(unsafe.Sizeof(sqlite3_snapshot{})))) 34048 sqlite3.Xsqlite3_snapshot_free(tls, *(*uintptr)(unsafe.Pointer(bp + 4))) 34049 } 34050 return TCL_OK 34051 } 34052 34053 func test_snapshot_open_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34054 bp := tls.Alloc(24) 34055 defer tls.Free(24) 34056 34057 var rc int32 34058 34059 var zName uintptr 34060 var pBlob uintptr 34061 34062 if objc != 4 { 34063 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 34064 return TCL_ERROR 34065 } 34066 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0 { 34067 return TCL_ERROR 34068 } 34069 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 34070 pBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+20) 34071 if uint32(*(*int32)(unsafe.Pointer(bp + 20))) != uint32(unsafe.Sizeof(sqlite3_snapshot{})) { 34072 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 34073 return TCL_ERROR 34074 } 34075 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zName, pBlob) 34076 if rc != SQLITE_OK { 34077 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34078 return TCL_ERROR 34079 } 34080 return TCL_OK 34081 } 34082 34083 func test_snapshot_cmp_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34084 bp := tls.Alloc(24) 34085 defer tls.Free(24) 34086 34087 var res int32 34088 var p1 uintptr 34089 var p2 uintptr 34090 34091 if objc != 3 { 34092 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 34093 return TCL_ERROR 34094 } 34095 34096 p1 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16) 34097 p2 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+20) 34098 34099 if uint32(*(*int32)(unsafe.Pointer(bp + 16))) != uint32(unsafe.Sizeof(sqlite3_snapshot{})) || *(*int32)(unsafe.Pointer(bp + 16)) != *(*int32)(unsafe.Pointer(bp + 20)) { 34100 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 34101 return TCL_ERROR 34102 } 34103 34104 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 34105 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 34106 return TCL_OK 34107 } 34108 34109 func test_delete_database(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34110 var rc int32 34111 var zFile uintptr 34112 if objc != 2 { 34113 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16296) 34114 return TCL_ERROR 34115 } 34116 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 34117 rc = sqlite3_delete_database(tls, zFile) 34118 34119 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34120 return TCL_OK 34121 } 34122 34123 func test_atomic_batch_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34124 bp := tls.Alloc(24) 34125 defer tls.Free(24) 34126 34127 var zFile uintptr = uintptr(0) 34128 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 34129 *(*uintptr)(unsafe.Pointer(bp + 20)) = uintptr(0) 34130 var bRes int32 = 0 34131 var dc int32 = 0 34132 var rc int32 34133 34134 if objc != 2 { 34135 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16301) 34136 return TCL_ERROR 34137 } 34138 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 34139 34140 rc = sqlite3.Xsqlite3_open(tls, zFile, bp+16) 34141 if rc != SQLITE_OK { 34142 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 34143 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 34144 return TCL_ERROR 34145 } 34146 34147 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+20) 34148 dc = (*struct { 34149 f func(*libc.TLS, uintptr) int32 34150 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 20)))).FpMethods)).FxDeviceCharacteristics})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) 34151 if dc&SQLITE_IOCAP_BATCH_ATOMIC != 0 { 34152 bRes = 1 34153 } 34154 34155 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bRes)) 34156 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 34157 return TCL_OK 34158 } 34159 34160 func test_next_stmt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34161 bp := tls.Alloc(106) 34162 defer tls.Free(106) 34163 34164 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 34165 34166 if objc != 3 { 34167 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34168 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16306, 0)) 34169 return TCL_ERROR 34170 } 34171 34172 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0 { 34173 return TCL_ERROR 34174 } 34175 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), bp+52) != 0 { 34176 return TCL_ERROR 34177 } 34178 *(*uintptr)(unsafe.Pointer(bp + 52)) = sqlite3.Xsqlite3_next_stmt(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 52))) 34179 if *(*uintptr)(unsafe.Pointer(bp + 52)) != 0 { 34180 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 52))) != 0 { 34181 return TCL_ERROR 34182 } 34183 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 34184 } 34185 return TCL_OK 34186 } 34187 34188 func test_stmt_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34189 bp := tls.Alloc(36) 34190 defer tls.Free(36) 34191 34192 var rc int32 34193 34194 if objc != 2 { 34195 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34196 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34197 return TCL_ERROR 34198 } 34199 34200 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34201 return TCL_ERROR 34202 } 34203 rc = sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34204 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 34205 return TCL_OK 34206 } 34207 34208 func test_stmt_isexplain(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34209 bp := tls.Alloc(36) 34210 defer tls.Free(36) 34211 34212 var rc int32 34213 34214 if objc != 2 { 34215 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34216 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34217 return TCL_ERROR 34218 } 34219 34220 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34221 return TCL_ERROR 34222 } 34223 rc = sqlite3.Xsqlite3_stmt_isexplain(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34224 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 34225 return TCL_OK 34226 } 34227 34228 func test_stmt_busy(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34229 bp := tls.Alloc(36) 34230 defer tls.Free(36) 34231 34232 var rc int32 34233 34234 if objc != 2 { 34235 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34236 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34237 return TCL_ERROR 34238 } 34239 34240 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34241 return TCL_ERROR 34242 } 34243 rc = sqlite3.Xsqlite3_stmt_busy(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34244 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 34245 return TCL_OK 34246 } 34247 34248 func uses_stmt_journal(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34249 bp := tls.Alloc(36) 34250 defer tls.Free(36) 34251 34252 if objc != 2 { 34253 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34254 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34255 return TCL_ERROR 34256 } 34257 34258 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34259 return TCL_ERROR 34260 } 34261 sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34262 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)) + 144))&0x20>>5) != 0))) 34263 return TCL_OK 34264 } 34265 34266 func test_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34267 bp := tls.Alloc(36) 34268 defer tls.Free(36) 34269 34270 var rc int32 34271 34272 if objc != 2 { 34273 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34274 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34275 return TCL_ERROR 34276 } 34277 34278 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34279 return TCL_ERROR 34280 } 34281 34282 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34283 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 && sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34284 return TCL_ERROR 34285 } 34286 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 34287 34288 return TCL_OK 34289 } 34290 34291 func test_expired(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34292 bp := tls.Alloc(36) 34293 defer tls.Free(36) 34294 34295 if objc != 2 { 34296 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34297 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34298 return TCL_ERROR 34299 } 34300 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34301 return TCL_ERROR 34302 } 34303 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(sqlite3.Xsqlite3_expired(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) != 0))) 34304 return TCL_OK 34305 } 34306 34307 func test_transfer_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34308 bp := tls.Alloc(40) 34309 defer tls.Free(40) 34310 34311 if objc != 3 { 34312 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34313 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16321, 0)) 34314 return TCL_ERROR 34315 } 34316 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34317 return TCL_ERROR 34318 } 34319 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), bp+36) != 0 { 34320 return TCL_ERROR 34321 } 34322 tcl.XTcl_SetObjResult(tls, interp, 34323 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_transfer_bindings(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 36))))) 34324 return TCL_OK 34325 } 34326 34327 func test_changes(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34328 bp := tls.Alloc(36) 34329 defer tls.Free(36) 34330 34331 if objc != 2 { 34332 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34333 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 34334 return TCL_ERROR 34335 } 34336 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34337 return TCL_ERROR 34338 } 34339 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_changes(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 34340 return TCL_OK 34341 } 34342 34343 var sqlite_static_bind_value uintptr = uintptr(0) 34344 var sqlite_static_bind_nbyte int32 = 0 34345 34346 func test_bind(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34347 bp := tls.Alloc(138) 34348 defer tls.Free(138) 34349 34350 var rc int32 34351 34352 if argc != 5 { 34353 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34354 ts+16340, 0)) 34355 return TCL_ERROR 34356 } 34357 if getStmtPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+80) != 0 { 34358 return TCL_ERROR 34359 } 34360 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+84) != 0 { 34361 return TCL_ERROR 34362 } 34363 if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4)), ts+7939) == 0 { 34364 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 84))) 34365 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4)), ts+16376) == 0 { 34366 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 84)), sqlite_static_bind_value, -1, uintptr(0)) 34367 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4)), ts+16383) == 0 { 34368 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 84)), sqlite_static_bind_value, 34369 sqlite_static_bind_nbyte, uintptr(0)) 34370 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4)), ts+16397) == 0 { 34371 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 84)), *(*uintptr)(unsafe.Pointer(argv + 3*4)), -1, libc.UintptrFromInt32(-1)) 34372 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4)), ts+16404) == 0 { 34373 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 84)), ts+16411, 10, uintptr(0)) 34374 } else { 34375 tcl.XTcl_AppendResult(tls, interp, 34376 libc.VaList(bp+32, ts+16422, 0)) 34377 return TCL_ERROR 34378 } 34379 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), rc) != 0 { 34380 return TCL_ERROR 34381 } 34382 if rc != 0 { 34383 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+88, ts+16476, libc.VaList(bp+48, rc)) 34384 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 34385 return TCL_ERROR 34386 } 34387 return TCL_OK 34388 } 34389 34390 var pTestCollateInterp uintptr 34391 34392 func test_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 34393 bp := tls.Alloc(4) 34394 defer tls.Free(4) 34395 34396 var i uintptr = pTestCollateInterp 34397 var encin int32 = int32(pCtx) 34398 34399 var n int32 34400 var pVal uintptr 34401 var pX uintptr 34402 34403 pX = tcl.XTcl_NewStringObj(tls, ts+16482, -1) 34404 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34405 34406 switch encin { 34407 case SQLITE_UTF8: 34408 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34409 break 34410 case SQLITE_UTF16LE: 34411 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34412 break 34413 case SQLITE_UTF16BE: 34414 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34415 break 34416 default: 34417 } 34418 34419 sqlite3.Xsqlite3BeginBenignMalloc(tls) 34420 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34421 if pVal != 0 { 34422 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nA, zA, uint8(encin), uintptr(0)) 34423 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 34424 tcl.XTcl_ListObjAppendElement(tls, i, pX, 34425 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 34426 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nB, zB, uint8(encin), uintptr(0)) 34427 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 34428 tcl.XTcl_ListObjAppendElement(tls, i, pX, 34429 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 34430 sqlite3.Xsqlite3ValueFree(tls, pVal) 34431 } 34432 sqlite3.Xsqlite3EndBenignMalloc(tls) 34433 34434 tcl.XTcl_EvalObjEx(tls, i, pX, 0) 34435 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34436 var _objPtr uintptr = pX 34437 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34438 tcl.XTclFreeObj(tls, _objPtr) 34439 } 34440 } 34441 tcl.XTcl_GetIntFromObj(tls, i, tcl.XTcl_GetObjResult(tls, i), bp) 34442 return *(*int32)(unsafe.Pointer(bp)) 34443 } 34444 34445 func test_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34446 bp := tls.Alloc(56) 34447 defer tls.Free(56) 34448 34449 var pVal uintptr 34450 var rc int32 34451 var zUtf16 uintptr 34452 34453 if !(objc != 5) { 34454 goto __1 34455 } 34456 goto bad_args 34457 __1: 34458 ; 34459 pTestCollateInterp = interp 34460 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0) { 34461 goto __2 34462 } 34463 return TCL_ERROR 34464 __2: 34465 ; 34466 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+52)) { 34467 goto __3 34468 } 34469 return TCL_ERROR 34470 __3: 34471 ; 34472 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF8, 34473 uintptr(SQLITE_UTF8), func() uintptr { 34474 if *(*int32)(unsafe.Pointer(bp + 52)) != 0 { 34475 return *(*uintptr)(unsafe.Pointer(&struct { 34476 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34477 }{test_collate_func})) 34478 } 34479 return uintptr(0) 34480 }()) 34481 if !(rc == SQLITE_OK) { 34482 goto __4 34483 } 34484 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+52)) { 34485 goto __5 34486 } 34487 return TCL_ERROR 34488 __5: 34489 ; 34490 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF16LE, 34491 uintptr(SQLITE_UTF16LE), func() uintptr { 34492 if *(*int32)(unsafe.Pointer(bp + 52)) != 0 { 34493 return *(*uintptr)(unsafe.Pointer(&struct { 34494 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34495 }{test_collate_func})) 34496 } 34497 return uintptr(0) 34498 }()) 34499 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+52)) { 34500 goto __6 34501 } 34502 return TCL_ERROR 34503 __6: 34504 ; 34505 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 34506 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 34507 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+16482, uint8(SQLITE_UTF8), uintptr(0)) 34508 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 34509 if !((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FmallocFailed != 0) { 34510 goto __7 34511 } 34512 rc = SQLITE_NOMEM 34513 goto __8 34514 __7: 34515 rc = sqlite3.Xsqlite3_create_collation16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zUtf16, SQLITE_UTF16BE, 34516 uintptr(SQLITE_UTF16BE), func() uintptr { 34517 if *(*int32)(unsafe.Pointer(bp + 52)) != 0 { 34518 return *(*uintptr)(unsafe.Pointer(&struct { 34519 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34520 }{test_collate_func})) 34521 } 34522 return uintptr(0) 34523 }()) 34524 __8: 34525 ; 34526 sqlite3.Xsqlite3ValueFree(tls, pVal) 34527 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 34528 __4: 34529 ; 34530 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0) { 34531 goto __9 34532 } 34533 return TCL_ERROR 34534 __9: 34535 ; 34536 if !(rc != SQLITE_OK) { 34537 goto __10 34538 } 34539 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34540 return TCL_ERROR 34541 __10: 34542 ; 34543 return TCL_OK 34544 34545 bad_args: 34546 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+14949, 34547 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 34548 return TCL_ERROR 34549 } 34550 34551 func test_utf16bin_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 34552 var nCmp int32 = func() int32 { 34553 if nA > nB { 34554 return nB 34555 } 34556 return nA 34557 }() 34558 var res int32 = libc.Xmemcmp(tls, zA, zB, uint32(nCmp)) 34559 if res == 0 { 34560 res = nA - nB 34561 } 34562 return res 34563 } 34564 34565 func test_utf16bin_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34566 bp := tls.Alloc(4) 34567 defer tls.Free(4) 34568 34569 var rc int32 34570 34571 if !(objc != 2) { 34572 goto __1 34573 } 34574 goto bad_args 34575 __1: 34576 ; 34577 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0) { 34578 goto __2 34579 } 34580 return TCL_ERROR 34581 __2: 34582 ; 34583 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16552, SQLITE_UTF16, uintptr(0), 34584 *(*uintptr)(unsafe.Pointer(&struct { 34585 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34586 }{test_utf16bin_collate_func}))) 34587 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 34588 goto __3 34589 } 34590 return TCL_ERROR 34591 __3: 34592 ; 34593 return TCL_OK 34594 34595 bad_args: 34596 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 34597 return TCL_ERROR 34598 } 34599 34600 var zNeededCollation [200]int8 34601 var pzNeededCollation uintptr = 0 34602 34603 func test_collate_needed_cb(tls *libc.TLS, pCtx uintptr, db uintptr, eTextRep int32, pName uintptr) { 34604 var enc int32 = int32((*sqlite31)(unsafe.Pointer(db)).Fenc) 34605 var i int32 34606 var z uintptr 34607 z = pName 34608 i = 0 34609 for ; *(*int8)(unsafe.Pointer(z)) != 0 || *(*int8)(unsafe.Pointer(z + 1)) != 0; z++ { 34610 if *(*int8)(unsafe.Pointer(z)) != 0 { 34611 zNeededCollation[libc.PostIncInt32(&i, 1)] = *(*int8)(unsafe.Pointer(z)) 34612 } 34613 } 34614 zNeededCollation[i] = int8(0) 34615 sqlite3.Xsqlite3_create_collation(tls, 34616 db, ts+16482, int32((*sqlite31)(unsafe.Pointer(db)).Fenc), uintptr(enc), *(*uintptr)(unsafe.Pointer(&struct { 34617 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34618 }{test_collate_func}))) 34619 } 34620 34621 func test_collate_needed(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34622 bp := tls.Alloc(4) 34623 defer tls.Free(4) 34624 34625 var rc int32 34626 34627 if !(objc != 2) { 34628 goto __1 34629 } 34630 goto bad_args 34631 __1: 34632 ; 34633 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0) { 34634 goto __2 34635 } 34636 return TCL_ERROR 34637 __2: 34638 ; 34639 rc = sqlite3.Xsqlite3_collation_needed16(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34640 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 34641 }{test_collate_needed_cb}))) 34642 zNeededCollation[0] = int8(0) 34643 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 34644 goto __3 34645 } 34646 return TCL_ERROR 34647 __3: 34648 ; 34649 return TCL_OK 34650 34651 bad_args: 34652 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 34653 return TCL_ERROR 34654 } 34655 34656 var unaligned_string_counter int32 = 0 34657 34658 func alignmentCollFunc(tls *libc.TLS, NotUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 34659 var rc int32 34660 var n int32 34661 if nKey1 < nKey2 { 34662 n = nKey1 34663 } else { 34664 n = nKey2 34665 } 34666 if nKey1 > 0 && 1 == 1&int32(pKey1) { 34667 unaligned_string_counter++ 34668 } 34669 if nKey2 > 0 && 1 == 1&int32(pKey2) { 34670 unaligned_string_counter++ 34671 } 34672 rc = libc.Xmemcmp(tls, pKey1, pKey2, uint32(n)) 34673 if rc == 0 { 34674 rc = nKey1 - nKey2 34675 } 34676 return rc 34677 } 34678 34679 func add_alignment_test_collations(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34680 bp := tls.Alloc(4) 34681 defer tls.Free(4) 34682 34683 if objc >= 2 { 34684 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 34685 return TCL_ERROR 34686 } 34687 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16561, SQLITE_UTF16, 34688 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34689 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34690 }{alignmentCollFunc}))) 34691 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16577, SQLITE_UTF16_ALIGNED, 34692 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34693 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34694 }{alignmentCollFunc}))) 34695 } 34696 return SQLITE_OK 34697 } 34698 34699 func test_function_utf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34700 var interp uintptr 34701 var pX uintptr 34702 var pVal uintptr 34703 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34704 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34705 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34706 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34707 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34708 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34709 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34710 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34711 var _objPtr uintptr = pX 34712 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34713 tcl.XTclFreeObj(tls, _objPtr) 34714 } 34715 } 34716 sqlite3.Xsqlite3_result_text(tls, pCtx, tcl.XTcl_GetStringResult(tls, interp), -1, libc.UintptrFromInt32(-1)) 34717 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34718 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34719 uint8(SQLITE_UTF8), uintptr(0)) 34720 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16be(tls, pVal), 34721 -1, libc.UintptrFromInt32(-1)) 34722 sqlite3.Xsqlite3ValueFree(tls, pVal) 34723 } 34724 34725 func test_function_utf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34726 var interp uintptr 34727 var pX uintptr 34728 var pVal uintptr 34729 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34730 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34731 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34732 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34733 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34734 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34735 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34736 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34737 var _objPtr uintptr = pX 34738 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34739 tcl.XTclFreeObj(tls, _objPtr) 34740 } 34741 } 34742 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34743 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34744 uint8(SQLITE_UTF8), uintptr(0)) 34745 sqlite3.Xsqlite3_result_text(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, pVal), -1, libc.UintptrFromInt32(-1)) 34746 sqlite3.Xsqlite3ValueFree(tls, pVal) 34747 } 34748 34749 func test_function_utf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34750 var interp uintptr 34751 var pX uintptr 34752 var pVal uintptr 34753 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34754 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34755 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34756 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34757 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34758 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34759 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34760 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34761 var _objPtr uintptr = pX 34762 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34763 tcl.XTclFreeObj(tls, _objPtr) 34764 } 34765 } 34766 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34767 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34768 uint8(SQLITE_UTF8), uintptr(0)) 34769 sqlite3.Xsqlite3_result_text16(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34770 -1, libc.UintptrFromInt32(-1)) 34771 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34772 -1, libc.UintptrFromInt32(-1)) 34773 sqlite3.Xsqlite3_result_text16le(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34774 -1, libc.UintptrFromInt32(-1)) 34775 sqlite3.Xsqlite3ValueFree(tls, pVal) 34776 } 34777 34778 func test_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34779 bp := tls.Alloc(40) 34780 defer tls.Free(40) 34781 34782 if !(objc != 5) { 34783 goto __1 34784 } 34785 goto bad_args 34786 __1: 34787 ; 34788 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0) { 34789 goto __2 34790 } 34791 return TCL_ERROR 34792 __2: 34793 ; 34794 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36)) { 34795 goto __3 34796 } 34797 return TCL_ERROR 34798 __3: 34799 ; 34800 if !(*(*int32)(unsafe.Pointer(bp + 36)) != 0) { 34801 goto __4 34802 } 34803 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF8, 34804 interp, *(*uintptr)(unsafe.Pointer(&struct { 34805 f func(*libc.TLS, uintptr, int32, uintptr) 34806 }{test_function_utf8})), uintptr(0), uintptr(0)) 34807 __4: 34808 ; 34809 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+36)) { 34810 goto __5 34811 } 34812 return TCL_ERROR 34813 __5: 34814 ; 34815 if !(*(*int32)(unsafe.Pointer(bp + 36)) != 0) { 34816 goto __6 34817 } 34818 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16LE, 34819 interp, *(*uintptr)(unsafe.Pointer(&struct { 34820 f func(*libc.TLS, uintptr, int32, uintptr) 34821 }{test_function_utf16le})), uintptr(0), uintptr(0)) 34822 __6: 34823 ; 34824 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+36)) { 34825 goto __7 34826 } 34827 return TCL_ERROR 34828 __7: 34829 ; 34830 if !(*(*int32)(unsafe.Pointer(bp + 36)) != 0) { 34831 goto __8 34832 } 34833 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16BE, 34834 interp, *(*uintptr)(unsafe.Pointer(&struct { 34835 f func(*libc.TLS, uintptr, int32, uintptr) 34836 }{test_function_utf16be})), uintptr(0), uintptr(0)) 34837 __8: 34838 ; 34839 return TCL_OK 34840 bad_args: 34841 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34842 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 34843 return TCL_ERROR 34844 } 34845 34846 func test_errstr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34847 var zCode uintptr 34848 var i int32 34849 if objc != 1 { 34850 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16605) 34851 } 34852 34853 zCode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 34854 for i = 0; i < 200; i++ { 34855 if 0 == libc.Xstrcmp(tls, sqlite3.Xsqlite3ErrName(tls, i), zCode) { 34856 break 34857 } 34858 } 34859 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, i), uintptr(0)) 34860 return TCL_OK 34861 } 34862 34863 func test_breakpoint(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34864 return TCL_OK 34865 } 34866 34867 func test_bind_zeroblob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34868 bp := tls.Alloc(12) 34869 defer tls.Free(12) 34870 34871 var rc int32 34872 34873 if objc != 4 { 34874 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 34875 return TCL_ERROR 34876 } 34877 34878 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 34879 return TCL_ERROR 34880 } 34881 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 34882 return TCL_ERROR 34883 } 34884 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+8) != 0 { 34885 return TCL_ERROR 34886 } 34887 34888 rc = sqlite3.Xsqlite3_bind_zeroblob(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), *(*int32)(unsafe.Pointer(bp + 8))) 34889 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp))), rc) != 0 { 34890 return TCL_ERROR 34891 } 34892 if rc != SQLITE_OK { 34893 return TCL_ERROR 34894 } 34895 34896 return TCL_OK 34897 } 34898 34899 func test_bind_zeroblob64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34900 bp := tls.Alloc(32) 34901 defer tls.Free(32) 34902 34903 var rc int32 34904 34905 if objc != 4 { 34906 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 34907 return TCL_ERROR 34908 } 34909 34910 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0 { 34911 return TCL_ERROR 34912 } 34913 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+20) != 0 { 34914 return TCL_ERROR 34915 } 34916 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+24) != 0 { 34917 return TCL_ERROR 34918 } 34919 34920 rc = sqlite3.Xsqlite3_bind_zeroblob64(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 20)), uint64(*(*Tcl_WideInt)(unsafe.Pointer(bp + 24)))) 34921 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), rc) != 0 { 34922 return TCL_ERROR 34923 } 34924 if rc != SQLITE_OK { 34925 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34926 return TCL_ERROR 34927 } 34928 34929 return TCL_OK 34930 } 34931 34932 func test_bind_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34933 bp := tls.Alloc(44) 34934 defer tls.Free(44) 34935 34936 var rc int32 34937 34938 if objc != 4 { 34939 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34940 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 34941 return TCL_ERROR 34942 } 34943 34944 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 34945 return TCL_ERROR 34946 } 34947 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 34948 return TCL_ERROR 34949 } 34950 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+40) != 0 { 34951 return TCL_ERROR 34952 } 34953 34954 rc = sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36)), *(*int32)(unsafe.Pointer(bp + 40))) 34955 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34956 return TCL_ERROR 34957 } 34958 if rc != SQLITE_OK { 34959 return TCL_ERROR 34960 } 34961 34962 return TCL_OK 34963 } 34964 34965 func test_intarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34966 var i int32 34967 34968 sqlite3.Xsqlite3_free(tls, p) 34969 p = uintptr(0) 34970 if objc > 1 { 34971 p = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(int32(0)))*uint32(objc-1))) 34972 if p == uintptr(0) { 34973 return TCL_ERROR 34974 } 34975 for i = 0; i < objc-1; i++ { 34976 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*4)), p+uintptr(i)*4) != 0 { 34977 sqlite3.Xsqlite3_free(tls, p) 34978 p = uintptr(0) 34979 return TCL_ERROR 34980 } 34981 } 34982 } 34983 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p))) 34984 return TCL_OK 34985 } 34986 34987 var p uintptr = uintptr(0) 34988 34989 func test_int64array_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34990 bp := tls.Alloc(8) 34991 defer tls.Free(8) 34992 34993 var i int32 34994 34995 sqlite3.Xsqlite3_free(tls, p1) 34996 p1 = uintptr(0) 34997 if objc > 1 { 34998 p1 = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(sqlite3_int64(0)))*uint32(objc-1))) 34999 if p1 == uintptr(0) { 35000 return TCL_ERROR 35001 } 35002 for i = 0; i < objc-1; i++ { 35003 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*4)), bp) != 0 { 35004 sqlite3.Xsqlite3_free(tls, p1) 35005 p1 = uintptr(0) 35006 return TCL_ERROR 35007 } 35008 *(*sqlite3_int64)(unsafe.Pointer(p1 + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 35009 } 35010 } 35011 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p1))) 35012 return TCL_OK 35013 } 35014 35015 var p1 uintptr = uintptr(0) 35016 35017 func test_doublearray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35018 var i int32 35019 35020 sqlite3.Xsqlite3_free(tls, p2) 35021 p2 = uintptr(0) 35022 if objc > 1 { 35023 p2 = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(float64(0)))*uint32(objc-1))) 35024 if p2 == uintptr(0) { 35025 return TCL_ERROR 35026 } 35027 for i = 0; i < objc-1; i++ { 35028 if tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*4)), p2+uintptr(i)*8) != 0 { 35029 sqlite3.Xsqlite3_free(tls, p2) 35030 p2 = uintptr(0) 35031 return TCL_ERROR 35032 } 35033 } 35034 } 35035 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p2))) 35036 return TCL_OK 35037 } 35038 35039 var p2 uintptr = uintptr(0) 35040 35041 func test_textarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35042 bp := tls.Alloc(8) 35043 defer tls.Free(8) 35044 35045 var i int32 35046 35047 for i = 0; i < n; i++ { 35048 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*4))) 35049 } 35050 sqlite3.Xsqlite3_free(tls, p3) 35051 p3 = uintptr(0) 35052 if objc > 1 { 35053 p3 = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(uintptr(0)))*uint32(objc-1))) 35054 if p3 == uintptr(0) { 35055 return TCL_ERROR 35056 } 35057 for i = 0; i < objc-1; i++ { 35058 *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*4)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*4))))) 35059 } 35060 } 35061 n = objc - 1 35062 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p3))) 35063 return TCL_OK 35064 } 35065 35066 var n int32 = 0 35067 var p3 uintptr = uintptr(0) 35068 35069 func test_bind_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35070 bp := tls.Alloc(48) 35071 defer tls.Free(48) 35072 35073 var rc int32 35074 35075 if objc != 4 { 35076 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35077 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35078 return TCL_ERROR 35079 } 35080 35081 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 35082 return TCL_ERROR 35083 } 35084 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 35085 return TCL_ERROR 35086 } 35087 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+40) != 0 { 35088 return TCL_ERROR 35089 } 35090 35091 rc = sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 40))) 35092 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35093 return TCL_ERROR 35094 } 35095 if rc != SQLITE_OK { 35096 return TCL_ERROR 35097 } 35098 35099 return TCL_OK 35100 } 35101 35102 func test_bind_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35103 bp := tls.Alloc(56) 35104 defer tls.Free(56) 35105 35106 *(*float64)(unsafe.Pointer(bp + 40)) = float64(0) 35107 var rc int32 35108 var zVal uintptr 35109 var i int32 35110 35111 if objc != 4 { 35112 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35113 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35114 return TCL_ERROR 35115 } 35116 35117 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 35118 return TCL_ERROR 35119 } 35120 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 35121 return TCL_ERROR 35122 } 35123 35124 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 35125 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aSpecialFp))/uint32(unsafe.Sizeof(struct { 35126 FzName uintptr 35127 FiUpper uint32 35128 FiLower uint32 35129 }{})); i++ { 35130 if libc.Xstrcmp(tls, aSpecialFp[i].FzName, zVal) == 0 { 35131 *(*sqlite3_uint64)(unsafe.Pointer(bp + 48)) = sqlite3_uint64(aSpecialFp[i].FiUpper) 35132 *(*sqlite3_uint64)(unsafe.Pointer(bp + 48)) <<= 32 35133 *(*sqlite3_uint64)(unsafe.Pointer(bp + 48)) |= sqlite3_uint64(aSpecialFp[i].FiLower) 35134 35135 libc.Xmemcpy(tls, bp+40, bp+48, uint32(8)) 35136 break 35137 } 35138 } 35139 if uint32(i) >= uint32(unsafe.Sizeof(aSpecialFp))/uint32(unsafe.Sizeof(struct { 35140 FzName uintptr 35141 FiUpper uint32 35142 FiLower uint32 35143 }{})) && tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+40) != 0 { 35144 return TCL_ERROR 35145 } 35146 rc = sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36)), *(*float64)(unsafe.Pointer(bp + 40))) 35147 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35148 return TCL_ERROR 35149 } 35150 if rc != SQLITE_OK { 35151 return TCL_ERROR 35152 } 35153 35154 return TCL_OK 35155 } 35156 35157 var aSpecialFp = [10]struct { 35158 FzName uintptr 35159 FiUpper uint32 35160 FiLower uint32 35161 }{ 35162 {FzName: ts + 16643, FiUpper: uint32(0x7fffffff), FiLower: 0xffffffff}, 35163 {FzName: ts + 16647, FiUpper: uint32(0x7ff7ffff), FiLower: 0xffffffff}, 35164 {FzName: ts + 16652, FiUpper: 0xffffffff, FiLower: 0xffffffff}, 35165 {FzName: ts + 16657, FiUpper: 0xfff7ffff, FiLower: 0xffffffff}, 35166 {FzName: ts + 16663, FiUpper: uint32(0x7ff00000)}, 35167 {FzName: ts + 16668, FiUpper: 0xfff00000}, 35168 {FzName: ts + 16673, FiLower: uint32(0x00000001)}, 35169 {FzName: ts + 16681, FiUpper: 0x80000000, FiLower: uint32(0x00000001)}, 35170 {FzName: ts + 16690, FiUpper: uint32(0x7ff80000)}, 35171 {FzName: ts + 16695, FiUpper: 0xfff80000}, 35172 } 35173 35174 func test_bind_null(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35175 bp := tls.Alloc(40) 35176 defer tls.Free(40) 35177 35178 var rc int32 35179 35180 if objc != 3 { 35181 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35182 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16701, 0)) 35183 return TCL_ERROR 35184 } 35185 35186 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 35187 return TCL_ERROR 35188 } 35189 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 35190 return TCL_ERROR 35191 } 35192 35193 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))) 35194 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35195 return TCL_ERROR 35196 } 35197 if rc != SQLITE_OK { 35198 return TCL_ERROR 35199 } 35200 35201 return TCL_OK 35202 } 35203 35204 func test_bind_text(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35205 bp := tls.Alloc(80) 35206 defer tls.Free(80) 35207 35208 *(*int32)(unsafe.Pointer(bp + 72)) = 0 35209 35210 var value uintptr 35211 var rc int32 35212 var toFree uintptr = uintptr(0) 35213 35214 if objc != 5 { 35215 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35216 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 35217 return TCL_ERROR 35218 } 35219 35220 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+64) != 0 { 35221 return TCL_ERROR 35222 } 35223 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+68) != 0 { 35224 return TCL_ERROR 35225 } 35226 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+72) 35227 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+76) != 0 { 35228 return TCL_ERROR 35229 } 35230 if *(*int32)(unsafe.Pointer(bp + 76)) < 0 { 35231 toFree = libc.Xmalloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 72))+1)) 35232 if toFree == uintptr(0) { 35233 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 35234 return TCL_ERROR 35235 } 35236 libc.Xmemcpy(tls, toFree, value, uint32(*(*int32)(unsafe.Pointer(bp + 72)))) 35237 *(*int8)(unsafe.Pointer(toFree + uintptr(*(*int32)(unsafe.Pointer(bp + 72))))) = int8(0) 35238 value = toFree 35239 } 35240 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 68)), value, *(*int32)(unsafe.Pointer(bp + 76)), libc.UintptrFromInt32(-1)) 35241 libc.Xfree(tls, toFree) 35242 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35243 return TCL_ERROR 35244 } 35245 if rc != SQLITE_OK { 35246 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 35247 return TCL_ERROR 35248 } 35249 35250 return TCL_OK 35251 } 35252 35253 func test_bind_text16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35254 bp := tls.Alloc(80) 35255 defer tls.Free(80) 35256 35257 var value uintptr 35258 var toFree uintptr = uintptr(0) 35259 var rc int32 35260 *(*int32)(unsafe.Pointer(bp + 72)) = 0 35261 35262 var xDel uintptr = func() uintptr { 35263 if objc == 6 { 35264 return uintptr(0) 35265 } 35266 return libc.UintptrFromInt32(-1) 35267 }() 35268 var oStmt uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-4)*4)) 35269 var oN uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*4)) 35270 var oString uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*4)) 35271 var oBytes uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)) 35272 35273 if objc != 5 && objc != 6 { 35274 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35275 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 35276 return TCL_ERROR 35277 } 35278 35279 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, oStmt), bp+64) != 0 { 35280 return TCL_ERROR 35281 } 35282 if tcl.XTcl_GetIntFromObj(tls, interp, oN, bp+68) != 0 { 35283 return TCL_ERROR 35284 } 35285 value = tcl.XTcl_GetByteArrayFromObj(tls, oString, bp+72) 35286 if tcl.XTcl_GetIntFromObj(tls, interp, oBytes, bp+76) != 0 { 35287 return TCL_ERROR 35288 } 35289 if *(*int32)(unsafe.Pointer(bp + 76)) < 0 && xDel == libc.UintptrFromInt32(-1) { 35290 toFree = libc.Xmalloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 72))+3)) 35291 if toFree == uintptr(0) { 35292 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 35293 return TCL_ERROR 35294 } 35295 libc.Xmemcpy(tls, toFree, value, uint32(*(*int32)(unsafe.Pointer(bp + 72)))) 35296 libc.Xmemset(tls, toFree+uintptr(*(*int32)(unsafe.Pointer(bp + 72))), 0, uint32(3)) 35297 value = toFree 35298 } 35299 rc = sqlite3.Xsqlite3_bind_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 68)), value, *(*int32)(unsafe.Pointer(bp + 76)), xDel) 35300 libc.Xfree(tls, toFree) 35301 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35302 return TCL_ERROR 35303 } 35304 if rc != SQLITE_OK { 35305 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35306 return TCL_ERROR 35307 } 35308 35309 return TCL_OK 35310 } 35311 35312 func test_bind_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35313 bp := tls.Alloc(280) 35314 defer tls.Free(280) 35315 35316 var value uintptr 35317 var rc int32 35318 var xDestructor sqlite3_destructor_type = libc.UintptrFromInt32(-1) 35319 35320 if objc != 5 && objc != 6 { 35321 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35322 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16729, 0)) 35323 return TCL_ERROR 35324 } 35325 35326 if objc == 6 { 35327 xDestructor = uintptr(0) 35328 objv += 4 35329 } 35330 35331 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+64) != 0 { 35332 return TCL_ERROR 35333 } 35334 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+68) != 0 { 35335 return TCL_ERROR 35336 } 35337 35338 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+72) 35339 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+76) != 0 { 35340 return TCL_ERROR 35341 } 35342 35343 if *(*int32)(unsafe.Pointer(bp + 76)) > *(*int32)(unsafe.Pointer(bp + 72)) { 35344 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+80, 35345 ts+16748, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 76)), *(*int32)(unsafe.Pointer(bp + 72)))) 35346 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+80, uintptr(0))) 35347 return TCL_ERROR 35348 } 35349 35350 rc = sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 68)), value, *(*int32)(unsafe.Pointer(bp + 76)), xDestructor) 35351 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35352 return TCL_ERROR 35353 } 35354 if rc != SQLITE_OK { 35355 return TCL_ERROR 35356 } 35357 35358 return TCL_OK 35359 } 35360 35361 func test_bind_value_from_preupdate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35362 bp := tls.Alloc(40) 35363 defer tls.Free(40) 35364 35365 var z3 uintptr = uintptr(0) 35366 var db uintptr = uintptr(0) 35367 *(*uintptr)(unsafe.Pointer(bp + 36)) = uintptr(0) 35368 35369 if objc != 5 { 35370 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16782) 35371 return TCL_ERROR 35372 } 35373 35374 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+24) != 0 { 35375 return TCL_ERROR 35376 } 35377 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+28) != 0 { 35378 return TCL_ERROR 35379 } 35380 z3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 35381 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+32) != 0 { 35382 return TCL_ERROR 35383 } 35384 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 35385 35386 if int32(*(*int8)(unsafe.Pointer(z3))) == 'n' { 35387 sqlite3.Xsqlite3_preupdate_new(tls, db, *(*int32)(unsafe.Pointer(bp + 32)), bp+36) 35388 } else if int32(*(*int8)(unsafe.Pointer(z3))) == 'o' { 35389 sqlite3.Xsqlite3_preupdate_old(tls, db, *(*int32)(unsafe.Pointer(bp + 32)), bp+36) 35390 } else { 35391 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16801, z3, uintptr(0))) 35392 return TCL_ERROR 35393 } 35394 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 28)), *(*uintptr)(unsafe.Pointer(bp + 36))) 35395 35396 return TCL_OK 35397 } 35398 35399 func test_bind_value_from_select(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35400 bp := tls.Alloc(60) 35401 defer tls.Free(60) 35402 35403 var zSql uintptr = uintptr(0) 35404 var db uintptr = uintptr(0) 35405 var rc int32 = SQLITE_OK 35406 35407 if objc != 4 { 35408 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16828) 35409 return TCL_ERROR 35410 } 35411 35412 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0 { 35413 return TCL_ERROR 35414 } 35415 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+52) != 0 { 35416 return TCL_ERROR 35417 } 35418 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 35419 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35420 35421 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 35422 if rc != SQLITE_OK { 35423 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16842, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 35424 return TCL_ERROR 35425 } 35426 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) == SQLITE_ROW { 35427 var pVal uintptr = sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), 0) 35428 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)), pVal) 35429 } 35430 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 35431 if rc != SQLITE_OK { 35432 tcl.XTcl_AppendResult(tls, interp, 35433 libc.VaList(bp+24, ts+16857, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 35434 return TCL_ERROR 35435 } 35436 35437 return TCL_OK 35438 } 35439 35440 func test_carray_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35441 bp := tls.Alloc(108) 35442 defer tls.Free(108) 35443 35444 var eType int32 35445 var nData int32 35446 var aData uintptr 35447 var isTransient int32 35448 var isStatic int32 35449 35450 var i int32 35451 var j int32 35452 var rc int32 35453 var xDel uintptr 35454 var z uintptr 35455 35456 var a uintptr 35457 35458 var a1 uintptr 35459 35460 var a2 uintptr 35461 var v3 uintptr 35462 var a3 uintptr 35463 eType = 0 35464 nData = 0 35465 aData = uintptr(0) 35466 isTransient = 0 35467 isStatic = 0 35468 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 35469 35470 if !(aStaticData != 0) { 35471 goto __1 35472 } 35473 35474 if !(eStaticType == 3) { 35475 goto __2 35476 } 35477 i = 0 35478 __3: 35479 if !(i < nStaticData) { 35480 goto __5 35481 } 35482 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aStaticData + uintptr(i)*4))) 35483 goto __4 35484 __4: 35485 i++ 35486 goto __3 35487 goto __5 35488 __5: 35489 ; 35490 __2: 35491 ; 35492 sqlite3.Xsqlite3_free(tls, aStaticData) 35493 aStaticData = uintptr(0) 35494 nStaticData = 0 35495 eStaticType = 0 35496 __1: 35497 ; 35498 if !(objc == 1) { 35499 goto __6 35500 } 35501 return TCL_OK 35502 __6: 35503 ; 35504 i = 1 35505 __7: 35506 if !(i < objc && int32(*(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)))))) == '-') { 35507 goto __9 35508 } 35509 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4))) 35510 if !(libc.Xstrcmp(tls, z, ts+16878) == 0) { 35511 goto __10 35512 } 35513 isTransient = 1 35514 xDel = libc.UintptrFromInt32(-1) 35515 goto __11 35516 __10: 35517 if !(libc.Xstrcmp(tls, z, ts+16889) == 0) { 35518 goto __12 35519 } 35520 isStatic = 1 35521 xDel = uintptr(0) 35522 goto __13 35523 __12: 35524 if !(libc.Xstrcmp(tls, z, ts+16897) == 0) { 35525 goto __14 35526 } 35527 eType = 0 35528 goto __15 35529 __14: 35530 if !(libc.Xstrcmp(tls, z, ts+16904) == 0) { 35531 goto __16 35532 } 35533 eType = 1 35534 goto __17 35535 __16: 35536 if !(libc.Xstrcmp(tls, z, ts+16911) == 0) { 35537 goto __18 35538 } 35539 eType = 2 35540 goto __19 35541 __18: 35542 if !(libc.Xstrcmp(tls, z, ts+16919) == 0) { 35543 goto __20 35544 } 35545 eType = 3 35546 goto __21 35547 __20: 35548 if !(libc.Xstrcmp(tls, z, ts+16925) == 0) { 35549 goto __22 35550 } 35551 goto __9 35552 goto __23 35553 __22: 35554 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+12444, z, uintptr(0))) 35555 return TCL_ERROR 35556 __23: 35557 ; 35558 __21: 35559 ; 35560 __19: 35561 ; 35562 __17: 35563 ; 35564 __15: 35565 ; 35566 __13: 35567 ; 35568 __11: 35569 ; 35570 goto __8 35571 __8: 35572 i++ 35573 goto __7 35574 goto __9 35575 __9: 35576 ; 35577 if !(eType == 3 && !(isStatic != 0) && !(isTransient != 0)) { 35578 goto __24 35579 } 35580 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+16928, 35581 uintptr(0))) 35582 return TCL_ERROR 35583 __24: 35584 ; 35585 if !(isStatic != 0 && isTransient != 0) { 35586 goto __25 35587 } 35588 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+16975, 35589 uintptr(0))) 35590 return TCL_ERROR 35591 __25: 35592 ; 35593 if !(objc-i < 2) { 35594 goto __26 35595 } 35596 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17013) 35597 return TCL_ERROR 35598 __26: 35599 ; 35600 if !(getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4))), bp+80) != 0) { 35601 goto __27 35602 } 35603 return TCL_ERROR 35604 __27: 35605 ; 35606 i++ 35607 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+84) != 0) { 35608 goto __28 35609 } 35610 return TCL_ERROR 35611 __28: 35612 ; 35613 i++ 35614 nData = objc - i 35615 switch eType + 4*libc.Bool32(nData <= 0) { 35616 case 0: 35617 goto __30 35618 case 1: 35619 goto __31 35620 case 2: 35621 goto __32 35622 case 3: 35623 goto __33 35624 case 4: 35625 goto __34 35626 } 35627 goto __29 35628 __30: 35629 a = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(int32(0)))*uint32(nData))) 35630 if !(a == uintptr(0)) { 35631 goto __35 35632 } 35633 rc = SQLITE_NOMEM 35634 goto carray_bind_done 35635 __35: 35636 ; 35637 j = 0 35638 __36: 35639 if !(j < nData) { 35640 goto __38 35641 } 35642 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*4)), bp+88) != 0) { 35643 goto __39 35644 } 35645 sqlite3.Xsqlite3_free(tls, a) 35646 return TCL_ERROR 35647 __39: 35648 ; 35649 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = *(*int32)(unsafe.Pointer(bp + 88)) 35650 goto __37 35651 __37: 35652 j++ 35653 goto __36 35654 goto __38 35655 __38: 35656 ; 35657 aData = a 35658 goto __29 35659 35660 __31: 35661 a1 = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(sqlite3_int64(0)))*uint32(nData))) 35662 if !(a1 == uintptr(0)) { 35663 goto __40 35664 } 35665 rc = SQLITE_NOMEM 35666 goto carray_bind_done 35667 __40: 35668 ; 35669 j = 0 35670 __41: 35671 if !(j < nData) { 35672 goto __43 35673 } 35674 if !(tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*4)), bp+92) != 0) { 35675 goto __44 35676 } 35677 sqlite3.Xsqlite3_free(tls, a1) 35678 return TCL_ERROR 35679 __44: 35680 ; 35681 *(*sqlite3_int64)(unsafe.Pointer(a1 + uintptr(j)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 92)) 35682 goto __42 35683 __42: 35684 j++ 35685 goto __41 35686 goto __43 35687 __43: 35688 ; 35689 aData = a1 35690 goto __29 35691 35692 __32: 35693 a2 = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(float64(0)))*uint32(nData))) 35694 if !(a2 == uintptr(0)) { 35695 goto __45 35696 } 35697 rc = SQLITE_NOMEM 35698 goto carray_bind_done 35699 __45: 35700 ; 35701 j = 0 35702 __46: 35703 if !(j < nData) { 35704 goto __48 35705 } 35706 if !(tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*4)), bp+100) != 0) { 35707 goto __49 35708 } 35709 sqlite3.Xsqlite3_free(tls, a2) 35710 return TCL_ERROR 35711 __49: 35712 ; 35713 *(*float64)(unsafe.Pointer(a2 + uintptr(j)*8)) = *(*float64)(unsafe.Pointer(bp + 100)) 35714 goto __47 35715 __47: 35716 j++ 35717 goto __46 35718 goto __48 35719 __48: 35720 ; 35721 aData = a2 35722 goto __29 35723 35724 __33: 35725 a3 = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(uintptr(0)))*uint32(nData))) 35726 if !(a3 == uintptr(0)) { 35727 goto __50 35728 } 35729 rc = SQLITE_NOMEM 35730 goto carray_bind_done 35731 __50: 35732 ; 35733 j = 0 35734 __51: 35735 if !(j < nData) { 35736 goto __53 35737 } 35738 v3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*4))) 35739 *(*uintptr)(unsafe.Pointer(a3 + uintptr(j)*4)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+56, v3)) 35740 goto __52 35741 __52: 35742 j++ 35743 goto __51 35744 goto __53 35745 __53: 35746 ; 35747 aData = a3 35748 goto __29 35749 35750 __34: 35751 aData = ts + 584 35752 xDel = uintptr(0) 35753 isTransient = 0 35754 isStatic = 0 35755 goto __29 35756 35757 __29: 35758 ; 35759 if !(isStatic != 0) { 35760 goto __54 35761 } 35762 aStaticData = aData 35763 nStaticData = nData 35764 eStaticType = eType 35765 __54: 35766 ; 35767 rc = sqlite3_carray_bind(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 84)), aData, nData, eType, xDel) 35768 if !(isTransient != 0) { 35769 goto __55 35770 } 35771 if !(eType == 3) { 35772 goto __56 35773 } 35774 i = 0 35775 __57: 35776 if !(i < nData) { 35777 goto __59 35778 } 35779 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*4))) 35780 goto __58 35781 __58: 35782 i++ 35783 goto __57 35784 goto __59 35785 __59: 35786 ; 35787 __56: 35788 ; 35789 sqlite3.Xsqlite3_free(tls, aData) 35790 __55: 35791 ; 35792 carray_bind_done: 35793 if !(rc != 0) { 35794 goto __60 35795 } 35796 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, sqlite3.Xsqlite3_errstr(tls, rc), uintptr(0))) 35797 return TCL_ERROR 35798 __60: 35799 ; 35800 return TCL_OK 35801 } 35802 35803 var aStaticData uintptr = uintptr(0) 35804 var nStaticData int32 = 0 35805 var eStaticType int32 = 0 35806 35807 func test_bind_parameter_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35808 bp := tls.Alloc(4) 35809 defer tls.Free(4) 35810 35811 if objc != 2 { 35812 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35813 return TCL_ERROR 35814 } 35815 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 35816 return TCL_ERROR 35817 } 35818 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))))) 35819 return TCL_OK 35820 } 35821 35822 func test_bind_parameter_name(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35823 bp := tls.Alloc(8) 35824 defer tls.Free(8) 35825 35826 if objc != 3 { 35827 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17047) 35828 return TCL_ERROR 35829 } 35830 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 35831 return TCL_ERROR 35832 } 35833 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 35834 return TCL_ERROR 35835 } 35836 tcl.XTcl_SetObjResult(tls, interp, 35837 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))), -1)) 35838 return TCL_OK 35839 } 35840 35841 func test_bind_parameter_index(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35842 bp := tls.Alloc(4) 35843 defer tls.Free(4) 35844 35845 if objc != 3 { 35846 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17054) 35847 return TCL_ERROR 35848 } 35849 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 35850 return TCL_ERROR 35851 } 35852 tcl.XTcl_SetObjResult(tls, interp, 35853 tcl.XTcl_NewIntObj(tls, 35854 sqlite3.Xsqlite3_bind_parameter_index(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)))))) 35855 return TCL_OK 35856 } 35857 35858 func test_clear_bindings(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35859 bp := tls.Alloc(4) 35860 defer tls.Free(4) 35861 35862 if objc != 2 { 35863 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35864 return TCL_ERROR 35865 } 35866 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 35867 return TCL_ERROR 35868 } 35869 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_clear_bindings(tls, *(*uintptr)(unsafe.Pointer(bp))))) 35870 return TCL_OK 35871 } 35872 35873 func test_sleep(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35874 bp := tls.Alloc(4) 35875 defer tls.Free(4) 35876 35877 if objc != 2 { 35878 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+13117) 35879 return TCL_ERROR 35880 } 35881 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 35882 return TCL_ERROR 35883 } 35884 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_sleep(tls, *(*int32)(unsafe.Pointer(bp))))) 35885 return TCL_OK 35886 } 35887 35888 func test_ex_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35889 bp := tls.Alloc(52) 35890 defer tls.Free(52) 35891 35892 var rc int32 35893 35894 if objc != 2 { 35895 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35896 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35897 return TCL_ERROR 35898 } 35899 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0 { 35900 return TCL_ERROR 35901 } 35902 rc = sqlite3.Xsqlite3_extended_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35903 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35904 return TCL_OK 35905 } 35906 35907 func test_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35908 bp := tls.Alloc(52) 35909 defer tls.Free(52) 35910 35911 var rc int32 35912 35913 if objc != 2 { 35914 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35915 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35916 return TCL_ERROR 35917 } 35918 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0 { 35919 return TCL_ERROR 35920 } 35921 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35922 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35923 return TCL_OK 35924 } 35925 35926 func test_errmsg(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35927 bp := tls.Alloc(36) 35928 defer tls.Free(36) 35929 35930 var zErr uintptr 35931 35932 if objc != 2 { 35933 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35934 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35935 return TCL_ERROR 35936 } 35937 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 35938 return TCL_ERROR 35939 } 35940 35941 zErr = sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35942 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErr, -1)) 35943 return TCL_OK 35944 } 35945 35946 func test_error_offset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35947 bp := tls.Alloc(36) 35948 defer tls.Free(36) 35949 35950 var iByteOffset int32 35951 35952 if objc != 2 { 35953 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35954 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35955 return TCL_ERROR 35956 } 35957 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 35958 return TCL_ERROR 35959 } 35960 35961 iByteOffset = sqlite3.Xsqlite3_error_offset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35962 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iByteOffset)) 35963 return TCL_OK 35964 } 35965 35966 func test_errmsg16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35967 bp := tls.Alloc(36) 35968 defer tls.Free(36) 35969 35970 var zErr uintptr 35971 var z uintptr 35972 var bytes int32 = 0 35973 35974 if objc != 2 { 35975 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35976 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 35977 return TCL_ERROR 35978 } 35979 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 35980 return TCL_ERROR 35981 } 35982 35983 zErr = sqlite3.Xsqlite3_errmsg16(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35984 if zErr != 0 { 35985 z = zErr 35986 for bytes = 0; *(*int8)(unsafe.Pointer(z + uintptr(bytes))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(bytes+1))) != 0; bytes = bytes + 2 { 35987 } 35988 } 35989 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zErr, bytes)) 35990 return TCL_OK 35991 } 35992 35993 func test_prepare(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35994 bp := tls.Alloc(146) 35995 defer tls.Free(146) 35996 35997 var zSql uintptr 35998 35999 *(*uintptr)(unsafe.Pointer(bp + 92)) = uintptr(0) 36000 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 36001 36002 var rc int32 36003 36004 if objc != 5 && objc != 4 { 36005 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36006 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36007 return TCL_ERROR 36008 } 36009 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+80) != 0 { 36010 return TCL_ERROR 36011 } 36012 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 36013 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+84) != 0 { 36014 return TCL_ERROR 36015 } 36016 36017 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 84)), bp+88, func() uintptr { 36018 if objc >= 5 { 36019 return bp + 92 36020 } 36021 return uintptr(0) 36022 }()) 36023 tcl.XTcl_ResetResult(tls, interp) 36024 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36025 return TCL_ERROR 36026 } 36027 if *(*uintptr)(unsafe.Pointer(bp + 92)) != 0 && objc >= 5 { 36028 if *(*int32)(unsafe.Pointer(bp + 84)) >= 0 { 36029 *(*int32)(unsafe.Pointer(bp + 84)) = *(*int32)(unsafe.Pointer(bp + 84)) - (int32(*(*uintptr)(unsafe.Pointer(bp + 92)))-int32(zSql))/1 36030 } 36031 if int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 92)))) < *(*int32)(unsafe.Pointer(bp + 84)) { 36032 *(*int32)(unsafe.Pointer(bp + 84)) = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 92)))) 36033 } 36034 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 92)), *(*int32)(unsafe.Pointer(bp + 84))), 0) 36035 } 36036 if rc != SQLITE_OK { 36037 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+96, ts+16476, libc.VaList(bp+32, rc)) 36038 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36039 return TCL_ERROR 36040 } 36041 36042 if *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 36043 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 88))) != 0 { 36044 return TCL_ERROR 36045 } 36046 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 36047 } 36048 return TCL_OK 36049 } 36050 36051 func test_prepare_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36052 bp := tls.Alloc(146) 36053 defer tls.Free(146) 36054 36055 var zSql uintptr 36056 var zCopy uintptr = uintptr(0) 36057 36058 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 36059 var pzTail uintptr 36060 *(*uintptr)(unsafe.Pointer(bp + 92)) = uintptr(0) 36061 36062 var rc int32 36063 36064 if objc != 5 && objc != 4 { 36065 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36066 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 36067 return TCL_ERROR 36068 } 36069 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+80) != 0 { 36070 return TCL_ERROR 36071 } 36072 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 36073 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+84) != 0 { 36074 return TCL_ERROR 36075 } 36076 36077 if *(*int32)(unsafe.Pointer(bp + 84)) >= 0 { 36078 zCopy = libc.Xmalloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 84)))) 36079 libc.Xmemcpy(tls, zCopy, zSql, uint32(*(*int32)(unsafe.Pointer(bp + 84)))) 36080 } else { 36081 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 36082 zCopy = libc.Xmalloc(tls, uint32(n)) 36083 libc.Xmemcpy(tls, zCopy, zSql, uint32(n)) 36084 } 36085 if objc >= 5 { 36086 pzTail = bp + 88 36087 } else { 36088 pzTail = uintptr(0) 36089 } 36090 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 84)), bp+92, pzTail) 36091 if objc >= 5 { 36092 *(*uintptr)(unsafe.Pointer(bp + 88)) = zSql + uintptr((int32(*(*uintptr)(unsafe.Pointer(bp + 88)))-int32(zCopy))/1) 36093 } 36094 libc.Xfree(tls, zCopy) 36095 36096 tcl.XTcl_ResetResult(tls, interp) 36097 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36098 return TCL_ERROR 36099 } 36100 if rc == SQLITE_OK && objc >= 5 && *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 36101 if *(*int32)(unsafe.Pointer(bp + 84)) >= 0 { 36102 *(*int32)(unsafe.Pointer(bp + 84)) = *(*int32)(unsafe.Pointer(bp + 84)) - (int32(*(*uintptr)(unsafe.Pointer(bp + 88)))-int32(zSql))/1 36103 } 36104 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), *(*int32)(unsafe.Pointer(bp + 84))), 0) 36105 } 36106 if rc != SQLITE_OK { 36107 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+96, ts+16476, libc.VaList(bp+32, rc)) 36108 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36109 return TCL_ERROR 36110 } 36111 36112 if *(*uintptr)(unsafe.Pointer(bp + 92)) != 0 { 36113 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 92))) != 0 { 36114 return TCL_ERROR 36115 } 36116 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 36117 } 36118 return TCL_OK 36119 } 36120 36121 func test_prepare_v3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36122 bp := tls.Alloc(150) 36123 defer tls.Free(150) 36124 36125 var zSql uintptr 36126 var zCopy uintptr = uintptr(0) 36127 36128 *(*uintptr)(unsafe.Pointer(bp + 92)) = uintptr(0) 36129 var pzTail uintptr 36130 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 36131 36132 var rc int32 36133 36134 if objc != 6 && objc != 5 { 36135 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36136 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17110, 0)) 36137 return TCL_ERROR 36138 } 36139 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+80) != 0 { 36140 return TCL_ERROR 36141 } 36142 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 36143 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+84) != 0 { 36144 return TCL_ERROR 36145 } 36146 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+88) != 0 { 36147 return TCL_ERROR 36148 } 36149 36150 if *(*int32)(unsafe.Pointer(bp + 84)) >= 0 { 36151 zCopy = libc.Xmalloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 84)))) 36152 libc.Xmemcpy(tls, zCopy, zSql, uint32(*(*int32)(unsafe.Pointer(bp + 84)))) 36153 } else { 36154 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 36155 zCopy = libc.Xmalloc(tls, uint32(n)) 36156 libc.Xmemcpy(tls, zCopy, zSql, uint32(n)) 36157 } 36158 if objc >= 6 { 36159 pzTail = bp + 92 36160 } else { 36161 pzTail = uintptr(0) 36162 } 36163 rc = sqlite3.Xsqlite3_prepare_v3(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 84)), uint32(*(*int32)(unsafe.Pointer(bp + 88))), bp+96, pzTail) 36164 libc.Xfree(tls, zCopy) 36165 *(*uintptr)(unsafe.Pointer(bp + 92)) = zSql + uintptr((int32(*(*uintptr)(unsafe.Pointer(bp + 92)))-int32(zCopy))/1) 36166 36167 tcl.XTcl_ResetResult(tls, interp) 36168 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36169 return TCL_ERROR 36170 } 36171 if rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 92)) != 0 && objc >= 6 { 36172 if *(*int32)(unsafe.Pointer(bp + 84)) >= 0 { 36173 *(*int32)(unsafe.Pointer(bp + 84)) = *(*int32)(unsafe.Pointer(bp + 84)) - (int32(*(*uintptr)(unsafe.Pointer(bp + 92)))-int32(zSql))/1 36174 } 36175 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*4)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 92)), *(*int32)(unsafe.Pointer(bp + 84))), 0) 36176 } 36177 if rc != SQLITE_OK { 36178 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+100, ts+16476, libc.VaList(bp+32, rc)) 36179 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+100, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36180 return TCL_ERROR 36181 } 36182 36183 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 36184 if sqlite3TestMakePointerStr(tls, interp, bp+100, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 36185 return TCL_ERROR 36186 } 36187 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+100, 0)) 36188 } 36189 return TCL_OK 36190 } 36191 36192 func test_prepare_tkt3134(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36193 bp := tls.Alloc(138) 36194 defer tls.Free(138) 36195 36196 *(*uintptr)(unsafe.Pointer(bp + 84)) = uintptr(0) 36197 36198 var rc int32 36199 36200 if objc != 2 { 36201 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36202 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 36203 return TCL_ERROR 36204 } 36205 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+80) != 0 { 36206 return TCL_ERROR 36207 } 36208 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), uintptr(unsafe.Pointer(&zSql))+1, 0, bp+84, uintptr(0)) 36209 36210 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36211 return TCL_ERROR 36212 } 36213 if rc != SQLITE_OK { 36214 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+88, ts+16476, libc.VaList(bp+32, rc)) 36215 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+88, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36216 return TCL_ERROR 36217 } 36218 36219 if *(*uintptr)(unsafe.Pointer(bp + 84)) != 0 { 36220 if sqlite3TestMakePointerStr(tls, interp, bp+88, *(*uintptr)(unsafe.Pointer(bp + 84))) != 0 { 36221 return TCL_ERROR 36222 } 36223 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+88, 0)) 36224 } 36225 return TCL_OK 36226 } 36227 36228 var zSql = *(*[10]int8)(unsafe.Pointer(ts + 17138)) 36229 36230 func test_prepare16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36231 bp := tls.Alloc(118) 36232 defer tls.Free(118) 36233 36234 var zSql uintptr 36235 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 36236 var pTail uintptr = uintptr(0) 36237 *(*uintptr)(unsafe.Pointer(bp + 60)) = uintptr(0) 36238 36239 var rc int32 36240 36241 if objc != 5 && objc != 4 { 36242 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36243 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36244 return TCL_ERROR 36245 } 36246 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0 { 36247 return TCL_ERROR 36248 } 36249 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+52) 36250 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+56) != 0 { 36251 return TCL_ERROR 36252 } 36253 36254 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 56)), bp+60, func() uintptr { 36255 if objc >= 5 { 36256 return bp + 64 36257 } 36258 return uintptr(0) 36259 }()) 36260 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36261 return TCL_ERROR 36262 } 36263 if rc != 0 { 36264 return TCL_ERROR 36265 } 36266 36267 if objc >= 5 { 36268 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 36269 *(*int32)(unsafe.Pointer(bp + 52)) = *(*int32)(unsafe.Pointer(bp + 52)) - (int32(*(*uintptr)(unsafe.Pointer(bp + 64)))-int32(zSql))/1 36270 } else { 36271 *(*int32)(unsafe.Pointer(bp + 52)) = 0 36272 } 36273 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 52))) 36274 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 36275 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), uintptr(0), pTail, 0) 36276 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36277 var _objPtr uintptr = pTail 36278 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36279 tcl.XTclFreeObj(tls, _objPtr) 36280 } 36281 } 36282 } 36283 36284 if *(*uintptr)(unsafe.Pointer(bp + 60)) != 0 { 36285 if sqlite3TestMakePointerStr(tls, interp, bp+68, *(*uintptr)(unsafe.Pointer(bp + 60))) != 0 { 36286 return TCL_ERROR 36287 } 36288 } 36289 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+68, 0)) 36290 return TCL_OK 36291 } 36292 36293 func test_prepare16_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36294 bp := tls.Alloc(118) 36295 defer tls.Free(118) 36296 36297 var zSql uintptr 36298 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 36299 var pTail uintptr = uintptr(0) 36300 *(*uintptr)(unsafe.Pointer(bp + 60)) = uintptr(0) 36301 36302 var rc int32 36303 36304 if objc != 5 && objc != 4 { 36305 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36306 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36307 return TCL_ERROR 36308 } 36309 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0 { 36310 return TCL_ERROR 36311 } 36312 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+52) 36313 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+56) != 0 { 36314 return TCL_ERROR 36315 } 36316 36317 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 56)), bp+60, func() uintptr { 36318 if objc >= 5 { 36319 return bp + 64 36320 } 36321 return uintptr(0) 36322 }()) 36323 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36324 return TCL_ERROR 36325 } 36326 if rc != 0 { 36327 return TCL_ERROR 36328 } 36329 36330 if objc >= 5 { 36331 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 36332 *(*int32)(unsafe.Pointer(bp + 52)) = *(*int32)(unsafe.Pointer(bp + 52)) - (int32(*(*uintptr)(unsafe.Pointer(bp + 64)))-int32(zSql))/1 36333 } else { 36334 *(*int32)(unsafe.Pointer(bp + 52)) = 0 36335 } 36336 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 52))) 36337 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 36338 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), uintptr(0), pTail, 0) 36339 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36340 var _objPtr uintptr = pTail 36341 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36342 tcl.XTclFreeObj(tls, _objPtr) 36343 } 36344 } 36345 } 36346 36347 if *(*uintptr)(unsafe.Pointer(bp + 60)) != 0 { 36348 if sqlite3TestMakePointerStr(tls, interp, bp+68, *(*uintptr)(unsafe.Pointer(bp + 60))) != 0 { 36349 return TCL_ERROR 36350 } 36351 } 36352 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+68, 0)) 36353 return TCL_OK 36354 } 36355 36356 func test_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36357 bp := tls.Alloc(152) 36358 defer tls.Free(152) 36359 36360 var zFilename uintptr 36361 36362 if objc != 3 && objc != 2 && objc != 1 { 36363 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36364 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 36365 return TCL_ERROR 36366 } 36367 36368 if objc > 1 { 36369 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 36370 } else { 36371 zFilename = uintptr(0) 36372 } 36373 sqlite3.Xsqlite3_open(tls, zFilename, bp+48) 36374 36375 if sqlite3TestMakePointerStr(tls, interp, bp+52, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 36376 return TCL_ERROR 36377 } 36378 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+52, 0)) 36379 return TCL_OK 36380 } 36381 36382 func test_open_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36383 bp := tls.Alloc(300) 36384 defer tls.Free(300) 36385 36386 var zFilename uintptr 36387 var zVfs uintptr 36388 var flags int32 = 0 36389 36390 var rc int32 36391 36392 var i int32 36393 36394 if objc != 4 { 36395 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17171) 36396 return TCL_ERROR 36397 } 36398 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 36399 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 36400 if int32(*(*int8)(unsafe.Pointer(zVfs))) == 0x00 { 36401 zVfs = uintptr(0) 36402 } 36403 36404 rc = tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+16, bp+20) 36405 if rc != TCL_OK { 36406 return rc 36407 } 36408 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 16)); i++ { 36409 *(*[21]OpenFlag)(unsafe.Pointer(bp + 24)) = [21]OpenFlag{ 36410 {FzFlag: ts + 17190, Fflag: SQLITE_OPEN_READONLY}, 36411 {FzFlag: ts + 17211, Fflag: SQLITE_OPEN_READWRITE}, 36412 {FzFlag: ts + 17233, Fflag: SQLITE_OPEN_CREATE}, 36413 {FzFlag: ts + 17252, Fflag: SQLITE_OPEN_DELETEONCLOSE}, 36414 {FzFlag: ts + 17278, Fflag: SQLITE_OPEN_EXCLUSIVE}, 36415 {FzFlag: ts + 17300, Fflag: SQLITE_OPEN_AUTOPROXY}, 36416 {FzFlag: ts + 17322, Fflag: SQLITE_OPEN_MAIN_DB}, 36417 {FzFlag: ts + 17342, Fflag: SQLITE_OPEN_TEMP_DB}, 36418 {FzFlag: ts + 17362, Fflag: SQLITE_OPEN_TRANSIENT_DB}, 36419 {FzFlag: ts + 17387, Fflag: SQLITE_OPEN_MAIN_JOURNAL}, 36420 {FzFlag: ts + 17412, Fflag: SQLITE_OPEN_TEMP_JOURNAL}, 36421 {FzFlag: ts + 17437, Fflag: SQLITE_OPEN_SUBJOURNAL}, 36422 {FzFlag: ts + 17460, Fflag: SQLITE_OPEN_SUPER_JOURNAL}, 36423 {FzFlag: ts + 17486, Fflag: SQLITE_OPEN_NOMUTEX}, 36424 {FzFlag: ts + 17506, Fflag: SQLITE_OPEN_FULLMUTEX}, 36425 {FzFlag: ts + 17528, Fflag: SQLITE_OPEN_SHAREDCACHE}, 36426 {FzFlag: ts + 17552, Fflag: SQLITE_OPEN_PRIVATECACHE}, 36427 {FzFlag: ts + 17577, Fflag: SQLITE_OPEN_WAL}, 36428 {FzFlag: ts + 17593, Fflag: SQLITE_OPEN_URI}, 36429 {FzFlag: ts + 17609, Fflag: SQLITE_OPEN_EXRESCODE}, 36430 {}, 36431 } 36432 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 20)) + uintptr(i)*4)), bp+24, int32(unsafe.Sizeof(OpenFlag{})), 36433 ts+17631, 0, bp+192) 36434 if rc != TCL_OK { 36435 return rc 36436 } 36437 flags = flags | (*OpenFlag)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 192)))*8)).Fflag 36438 } 36439 36440 rc = sqlite3.Xsqlite3_open_v2(tls, zFilename, bp+196, flags, zVfs) 36441 if sqlite3TestMakePointerStr(tls, interp, bp+200, *(*uintptr)(unsafe.Pointer(bp + 196))) != 0 { 36442 return TCL_ERROR 36443 } 36444 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+200, 0)) 36445 return TCL_OK 36446 } 36447 36448 type OpenFlag = struct { 36449 FzFlag uintptr 36450 Fflag int32 36451 } 36452 36453 func test_open16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36454 bp := tls.Alloc(152) 36455 defer tls.Free(152) 36456 36457 var zFilename uintptr 36458 36459 if objc != 3 { 36460 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36461 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 36462 return TCL_ERROR 36463 } 36464 36465 zFilename = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(0)) 36466 sqlite3.Xsqlite3_open16(tls, zFilename, bp+48) 36467 36468 if sqlite3TestMakePointerStr(tls, interp, bp+52, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 36469 return TCL_ERROR 36470 } 36471 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+52, 0)) 36472 return TCL_OK 36473 } 36474 36475 func test_complete16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36476 var zBuf uintptr 36477 36478 if objc != 2 { 36479 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17636) 36480 return TCL_ERROR 36481 } 36482 36483 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(0)) 36484 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_complete16(tls, zBuf))) 36485 return TCL_OK 36486 } 36487 36488 func test_normalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36489 var zSql uintptr 36490 var zNorm uintptr 36491 36492 if objc != 2 { 36493 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9535) 36494 return TCL_ERROR 36495 } 36496 36497 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 36498 zNorm = sqlite3_normalize(tls, zSql) 36499 if zNorm != 0 { 36500 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zNorm, -1)) 36501 sqlite3.Xsqlite3_free(tls, zNorm) 36502 } 36503 return TCL_OK 36504 } 36505 36506 func test_step(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36507 bp := tls.Alloc(36) 36508 defer tls.Free(36) 36509 36510 var rc int32 36511 36512 if objc != 2 { 36513 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36514 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+16315, 0)) 36515 return TCL_ERROR 36516 } 36517 36518 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36519 return TCL_ERROR 36520 } 36521 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36522 36523 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36524 return TCL_OK 36525 } 36526 36527 func test_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36528 bp := tls.Alloc(4) 36529 defer tls.Free(4) 36530 36531 if objc != 2 { 36532 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36533 return TCL_ERROR 36534 } 36535 36536 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 36537 return TCL_ERROR 36538 } 36539 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 36540 return TCL_OK 36541 } 36542 36543 func test_ex_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36544 bp := tls.Alloc(4) 36545 defer tls.Free(4) 36546 36547 var z uintptr 36548 36549 if objc != 2 { 36550 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36551 return TCL_ERROR 36552 } 36553 36554 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 36555 return TCL_ERROR 36556 } 36557 z = sqlite3.Xsqlite3_expanded_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 36558 tcl.XTcl_SetResult(tls, interp, z, uintptr(1)) 36559 sqlite3.Xsqlite3_free(tls, z) 36560 return TCL_OK 36561 } 36562 36563 func test_column_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36564 bp := tls.Alloc(36) 36565 defer tls.Free(36) 36566 36567 if objc != 2 { 36568 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36569 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36570 return TCL_ERROR 36571 } 36572 36573 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36574 return TCL_ERROR 36575 } 36576 36577 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36578 return TCL_OK 36579 } 36580 36581 func test_column_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36582 bp := tls.Alloc(40) 36583 defer tls.Free(40) 36584 36585 var tp int32 36586 36587 if objc != 3 { 36588 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36589 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36590 return TCL_ERROR 36591 } 36592 36593 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36594 return TCL_ERROR 36595 } 36596 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 36597 return TCL_ERROR 36598 } 36599 36600 tp = sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))) 36601 switch tp { 36602 case SQLITE_INTEGER: 36603 tcl.XTcl_SetResult(tls, interp, ts+2413, uintptr(0)) 36604 break 36605 case SQLITE_NULL: 36606 tcl.XTcl_SetResult(tls, interp, ts+5846, uintptr(0)) 36607 break 36608 case SQLITE_FLOAT: 36609 tcl.XTcl_SetResult(tls, interp, ts+17662, uintptr(0)) 36610 break 36611 case SQLITE_TEXT: 36612 tcl.XTcl_SetResult(tls, interp, ts+17668, uintptr(0)) 36613 break 36614 case SQLITE_BLOB: 36615 tcl.XTcl_SetResult(tls, interp, ts+17673, uintptr(0)) 36616 break 36617 default: 36618 } 36619 36620 return TCL_OK 36621 } 36622 36623 func test_column_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36624 bp := tls.Alloc(40) 36625 defer tls.Free(40) 36626 36627 var iVal i64 36628 36629 if objc != 3 { 36630 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36631 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36632 return TCL_ERROR 36633 } 36634 36635 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36636 return TCL_ERROR 36637 } 36638 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 36639 return TCL_ERROR 36640 } 36641 36642 iVal = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))) 36643 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iVal)) 36644 return TCL_OK 36645 } 36646 36647 func test_column_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36648 bp := tls.Alloc(40) 36649 defer tls.Free(40) 36650 36651 var len int32 36652 var pBlob uintptr 36653 36654 if objc != 3 { 36655 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36656 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36657 return TCL_ERROR 36658 } 36659 36660 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36661 return TCL_ERROR 36662 } 36663 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 36664 return TCL_ERROR 36665 } 36666 36667 len = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))) 36668 pBlob = sqlite3.Xsqlite3_column_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))) 36669 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pBlob, len)) 36670 return TCL_OK 36671 } 36672 36673 func test_column_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36674 bp := tls.Alloc(40) 36675 defer tls.Free(40) 36676 36677 var rVal float64 36678 36679 if objc != 3 { 36680 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36681 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36682 return TCL_ERROR 36683 } 36684 36685 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36686 return TCL_ERROR 36687 } 36688 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 36689 return TCL_ERROR 36690 } 36691 36692 rVal = sqlite3.Xsqlite3_column_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))) 36693 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewDoubleObj(tls, rVal)) 36694 return TCL_OK 36695 } 36696 36697 func test_data_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36698 bp := tls.Alloc(36) 36699 defer tls.Free(36) 36700 36701 if objc != 2 { 36702 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36703 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36704 return TCL_ERROR 36705 } 36706 36707 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36708 return TCL_ERROR 36709 } 36710 36711 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_data_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36712 return TCL_OK 36713 } 36714 36715 func test_stmt_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36716 bp := tls.Alloc(40) 36717 defer tls.Free(40) 36718 36719 var xFunc uintptr 36720 var zRet uintptr 36721 36722 xFunc = clientData 36723 if objc != 3 { 36724 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36725 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36726 return TCL_ERROR 36727 } 36728 36729 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36730 return TCL_ERROR 36731 } 36732 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 36733 return TCL_ERROR 36734 } 36735 zRet = (*struct { 36736 f func(*libc.TLS, uintptr, int32) uintptr 36737 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))) 36738 if zRet != 0 { 36739 tcl.XTcl_SetResult(tls, interp, zRet, uintptr(0)) 36740 } 36741 return TCL_OK 36742 } 36743 36744 func test_global_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36745 var rc int32 36746 if objc != 1 { 36747 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 36748 return TCL_ERROR 36749 } 36750 rc = sqlite3.Xsqlite3_global_recover(tls) 36751 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36752 return TCL_OK 36753 } 36754 36755 func test_stmt_utf16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36756 bp := tls.Alloc(40) 36757 defer tls.Free(40) 36758 36759 var pRet uintptr 36760 var zName16 uintptr 36761 var xFunc uintptr 36762 36763 xFunc = clientData 36764 if objc != 3 { 36765 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36766 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36767 return TCL_ERROR 36768 } 36769 36770 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36771 return TCL_ERROR 36772 } 36773 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 36774 return TCL_ERROR 36775 } 36776 36777 zName16 = (*struct { 36778 f func(*libc.TLS, uintptr, int32) uintptr 36779 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))) 36780 if zName16 != 0 { 36781 var n int32 36782 var z uintptr = zName16 36783 for n = 0; *(*int8)(unsafe.Pointer(z + uintptr(n))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(n+1))) != 0; n = n + 2 { 36784 } 36785 pRet = tcl.XTcl_NewByteArrayObj(tls, zName16, n+2) 36786 tcl.XTcl_SetObjResult(tls, interp, pRet) 36787 } 36788 36789 return TCL_OK 36790 } 36791 36792 func test_stmt_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36793 bp := tls.Alloc(40) 36794 defer tls.Free(40) 36795 36796 var xFunc uintptr 36797 36798 xFunc = clientData 36799 if objc != 3 { 36800 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36801 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36802 return TCL_ERROR 36803 } 36804 36805 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 36806 return TCL_ERROR 36807 } 36808 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 36809 return TCL_ERROR 36810 } 36811 36812 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*struct { 36813 f func(*libc.TLS, uintptr, int32) int32 36814 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))))) 36815 return TCL_OK 36816 } 36817 36818 func test_interrupt(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36819 bp := tls.Alloc(36) 36820 defer tls.Free(36) 36821 36822 if argc != 2 { 36823 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15001, 0)) 36824 return TCL_ERROR 36825 } 36826 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 36827 return TCL_ERROR 36828 } 36829 sqlite3.Xsqlite3_interrupt(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36830 return TCL_OK 36831 } 36832 36833 func delete_function(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36834 bp := tls.Alloc(36) 36835 defer tls.Free(36) 36836 36837 var rc int32 36838 36839 if argc != 3 { 36840 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36841 ts+17678, 0)) 36842 return TCL_ERROR 36843 } 36844 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 36845 return TCL_ERROR 36846 } 36847 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*4)), -1, SQLITE_UTF8, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 36848 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36849 return TCL_OK 36850 } 36851 36852 func delete_collation(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36853 bp := tls.Alloc(36) 36854 defer tls.Free(36) 36855 36856 var rc int32 36857 36858 if argc != 3 { 36859 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36860 ts+17678, 0)) 36861 return TCL_ERROR 36862 } 36863 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+32) != 0 { 36864 return TCL_ERROR 36865 } 36866 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*4)), SQLITE_UTF8, uintptr(0), uintptr(0)) 36867 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36868 return TCL_OK 36869 } 36870 36871 func get_autocommit(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36872 bp := tls.Alloc(90) 36873 defer tls.Free(90) 36874 36875 if argc != 2 { 36876 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36877 ts+15001, 0)) 36878 return TCL_ERROR 36879 } 36880 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+56) != 0 { 36881 return TCL_ERROR 36882 } 36883 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+60, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3_get_autocommit(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 36884 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 36885 return TCL_OK 36886 } 36887 36888 func test_busy_timeout(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36889 bp := tls.Alloc(56) 36890 defer tls.Free(56) 36891 36892 var rc int32 36893 36894 if argc != 3 { 36895 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36896 ts+15001, 0)) 36897 return TCL_ERROR 36898 } 36899 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+48) != 0 { 36900 return TCL_ERROR 36901 } 36902 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+52) != 0 { 36903 return TCL_ERROR 36904 } 36905 rc = sqlite3.Xsqlite3_busy_timeout(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52))) 36906 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36907 return TCL_OK 36908 } 36909 36910 func tcl_variable_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36911 var pVar uintptr 36912 if objc != 2 { 36913 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17696) 36914 return TCL_ERROR 36915 } 36916 pVar = tcl.XTcl_GetVar2Ex(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), uintptr(0), TCL_LEAVE_ERR_MSG) 36917 if pVar == uintptr(0) { 36918 return TCL_ERROR 36919 } 36920 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 36921 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname, -1)) 36922 } 36923 return TCL_OK 36924 } 36925 36926 func test_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36927 bp := tls.Alloc(4) 36928 defer tls.Free(4) 36929 36930 var amt int32 36931 if objc != 1 && objc != 2 { 36932 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 36933 return TCL_ERROR 36934 } 36935 if objc == 2 { 36936 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 36937 return TCL_ERROR 36938 } 36939 } else { 36940 *(*int32)(unsafe.Pointer(bp)) = -1 36941 } 36942 amt = sqlite3.Xsqlite3_release_memory(tls, *(*int32)(unsafe.Pointer(bp))) 36943 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, amt)) 36944 return TCL_OK 36945 } 36946 36947 func test_db_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36948 bp := tls.Alloc(4) 36949 defer tls.Free(4) 36950 36951 var rc int32 36952 if objc != 2 { 36953 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36954 return TCL_ERROR 36955 } 36956 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 36957 return TCL_ERROR 36958 } 36959 rc = sqlite3.Xsqlite3_db_release_memory(tls, *(*uintptr)(unsafe.Pointer(bp))) 36960 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36961 return TCL_OK 36962 } 36963 36964 func test_db_cacheflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36965 bp := tls.Alloc(4) 36966 defer tls.Free(4) 36967 36968 var rc int32 36969 if objc != 2 { 36970 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36971 return TCL_ERROR 36972 } 36973 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 36974 return TCL_ERROR 36975 } 36976 rc = sqlite3.Xsqlite3_db_cacheflush(tls, *(*uintptr)(unsafe.Pointer(bp))) 36977 if rc != 0 { 36978 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 36979 return TCL_ERROR 36980 } 36981 36982 tcl.XTcl_ResetResult(tls, interp) 36983 return TCL_OK 36984 } 36985 36986 func test_system_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36987 bp := tls.Alloc(4) 36988 defer tls.Free(4) 36989 36990 var iErrno int32 36991 if objc != 2 { 36992 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 36993 return TCL_ERROR 36994 } 36995 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 36996 return TCL_ERROR 36997 } 36998 iErrno = sqlite3.Xsqlite3_system_errno(tls, *(*uintptr)(unsafe.Pointer(bp))) 36999 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iErrno)) 37000 return TCL_OK 37001 } 37002 37003 func test_db_filename(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37004 bp := tls.Alloc(20) 37005 defer tls.Free(20) 37006 37007 var zDbName uintptr 37008 if objc != 3 { 37009 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 37010 return TCL_ERROR 37011 } 37012 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0 { 37013 return TCL_ERROR 37014 } 37015 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37016 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_db_filename(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbName), uintptr(0))) 37017 return TCL_OK 37018 } 37019 37020 func test_db_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37021 bp := tls.Alloc(4) 37022 defer tls.Free(4) 37023 37024 var zDbName uintptr 37025 if objc != 3 { 37026 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 37027 return TCL_ERROR 37028 } 37029 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 37030 return TCL_ERROR 37031 } 37032 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37033 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_db_readonly(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName))) 37034 return TCL_OK 37035 } 37036 37037 func test_soft_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37038 bp := tls.Alloc(8) 37039 defer tls.Free(8) 37040 37041 var amt sqlite3_int64 37042 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 37043 if objc != 1 && objc != 2 { 37044 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 37045 return TCL_ERROR 37046 } 37047 if objc == 2 { 37048 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 37049 return TCL_ERROR 37050 } 37051 } 37052 amt = sqlite3.Xsqlite3_soft_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 37053 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 37054 return TCL_OK 37055 } 37056 37057 func test_hard_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37058 bp := tls.Alloc(8) 37059 defer tls.Free(8) 37060 37061 var amt sqlite3_int64 37062 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 37063 if objc != 1 && objc != 2 { 37064 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 37065 return TCL_ERROR 37066 } 37067 if objc == 2 { 37068 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 37069 return TCL_ERROR 37070 } 37071 } 37072 amt = sqlite3.Xsqlite3_hard_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 37073 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 37074 return TCL_OK 37075 } 37076 37077 func test_thread_cleanup(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37078 sqlite3.Xsqlite3_thread_cleanup(tls) 37079 return TCL_OK 37080 } 37081 37082 func test_pager_refcounts(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37083 bp := tls.Alloc(36) 37084 defer tls.Free(36) 37085 37086 var i int32 37087 var v int32 37088 var a uintptr 37089 var pResult uintptr 37090 37091 if objc != 2 { 37092 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37093 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37094 return TCL_ERROR 37095 } 37096 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 37097 return TCL_ERROR 37098 } 37099 pResult = tcl.XTcl_NewObj(tls) 37100 for i = 0; i < (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FnDb; i++ { 37101 if (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*16)).FpBt == uintptr(0) { 37102 v = -1 37103 } else { 37104 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 37105 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*16)).FpBt)) 37106 v = *(*int32)(unsafe.Pointer(a)) 37107 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 37108 } 37109 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, v)) 37110 } 37111 tcl.XTcl_SetObjResult(tls, interp, pResult) 37112 return TCL_OK 37113 } 37114 37115 func working_64bit_int(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37116 var pTestObj uintptr 37117 var working int32 = 0 37118 37119 pTestObj = tcl.XTcl_NewWideIntObj(tls, int64(1000000)*int64(1234567890)) 37120 working = libc.Bool32(libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, pTestObj), ts+17709) == 0) 37121 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37122 var _objPtr uintptr = pTestObj 37123 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37124 tcl.XTclFreeObj(tls, _objPtr) 37125 } 37126 } 37127 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(working != 0))) 37128 return TCL_OK 37129 } 37130 37131 func vfs_unlink_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37132 bp := tls.Alloc(256) 37133 defer tls.Free(256) 37134 37135 var i int32 37136 var pMain uintptr 37137 37138 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(0)) 37139 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 37140 (*sqlite3_vfs)(unsafe.Pointer(bp + 88)).FzName = ts + 17732 37141 37142 pMain = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37143 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 37144 37145 sqlite3.Xsqlite3_vfs_register(tls, bp+88, 0) 37146 37147 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 37148 37149 sqlite3.Xsqlite3_vfs_register(tls, bp+88, 1) 37150 37151 if pMain != 0 { 37152 sqlite3.Xsqlite3_vfs_register(tls, pMain, 1) 37153 37154 } 37155 37156 for i = 0; uint32(i) < uint32(unsafe.Sizeof([20]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0))); i++ { 37157 *(*uintptr)(unsafe.Pointer(bp + 176 + uintptr(i)*4)) = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37158 if *(*uintptr)(unsafe.Pointer(bp + 176 + uintptr(i)*4)) != 0 { 37159 sqlite3.Xsqlite3_vfs_unregister(tls, *(*uintptr)(unsafe.Pointer(bp + 176 + uintptr(i)*4))) 37160 37161 } 37162 } 37163 37164 sqlite3.Xsqlite3_vfs_register(tls, pMain, 0) 37165 37166 sqlite3.Xsqlite3_vfs_unregister(tls, pMain) 37167 37168 for i = int32(uint32(unsafe.Sizeof([20]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0))) - uint32(1)); i >= 0; i-- { 37169 if *(*uintptr)(unsafe.Pointer(bp + 176 + uintptr(i)*4)) != 0 { 37170 sqlite3.Xsqlite3_vfs_register(tls, *(*uintptr)(unsafe.Pointer(bp + 176 + uintptr(i)*4)), 1) 37171 37172 } 37173 } 37174 37175 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 37176 sqlite3.Xsqlite3_vfs_unregister(tls, bp+88) 37177 37178 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 37179 sqlite3.Xsqlite3_vfs_unregister(tls, bp+88) 37180 37181 return TCL_OK 37182 } 37183 37184 func vfs_initfail_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37185 bp := tls.Alloc(88) 37186 defer tls.Free(88) 37187 37188 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 37189 37190 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37191 return TCL_ERROR 37192 } 37193 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 37194 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37195 return TCL_ERROR 37196 } 37197 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 37198 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37199 return TCL_ERROR 37200 } 37201 return TCL_OK 37202 } 37203 37204 var apVfs [20]uintptr 37205 var nVfs int32 = 0 37206 37207 func vfs_unregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37208 var i int32 37209 for i = 0; i < int32(uint32(unsafe.Sizeof(apVfs))/uint32(unsafe.Sizeof(uintptr(0)))); i++ { 37210 apVfs[i] = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37211 if apVfs[i] == uintptr(0) { 37212 break 37213 } 37214 sqlite3.Xsqlite3_vfs_unregister(tls, apVfs[i]) 37215 } 37216 nVfs = i 37217 return TCL_OK 37218 } 37219 37220 func vfs_reregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37221 var i int32 37222 for i = nVfs - 1; i >= 0; i-- { 37223 sqlite3.Xsqlite3_vfs_register(tls, apVfs[i], 1) 37224 } 37225 return TCL_OK 37226 } 37227 37228 func file_control_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37229 bp := tls.Alloc(40) 37230 defer tls.Free(40) 37231 37232 *(*int32)(unsafe.Pointer(bp + 36)) = 0 37233 37234 var rc int32 37235 _ = rc 37236 37237 if objc != 2 { 37238 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37239 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37240 return TCL_ERROR 37241 } 37242 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 37243 return TCL_ERROR 37244 } 37245 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), uintptr(0), 0, bp+36) 37246 37247 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+17738, SQLITE_FCNTL_LOCKSTATE, bp+36) 37248 37249 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+85, -1, bp+36) 37250 37251 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+8931, -1, bp+36) 37252 37253 return TCL_OK 37254 } 37255 37256 func file_control_lasterrno_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37257 bp := tls.Alloc(72) 37258 defer tls.Free(72) 37259 37260 *(*int32)(unsafe.Pointer(bp + 68)) = 0 37261 37262 var rc int32 37263 37264 if objc != 2 { 37265 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37266 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37267 return TCL_ERROR 37268 } 37269 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+64) != 0 { 37270 return TCL_ERROR 37271 } 37272 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_LAST_ERRNO, bp+68) 37273 if rc != 0 { 37274 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37275 return TCL_ERROR 37276 } 37277 if *(*int32)(unsafe.Pointer(bp + 68)) != 0 { 37278 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17751, 37279 tcl.XTcl_GetStringFromObj(tls, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 68))), uintptr(0)), ts+4894, 0)) 37280 return TCL_ERROR 37281 } 37282 return TCL_OK 37283 } 37284 37285 func file_control_data_version(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37286 bp := tls.Alloc(116) 37287 defer tls.Free(116) 37288 37289 var zDb uintptr 37290 37291 var rc int32 37292 37293 if objc != 3 && objc != 2 { 37294 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17779) 37295 return TCL_ERROR 37296 } 37297 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+8) != 0 { 37298 return TCL_ERROR 37299 } 37300 if objc == 3 { 37301 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37302 } else { 37303 zDb = uintptr(0) 37304 } 37305 37306 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, SQLITE_FCNTL_DATA_VERSION, bp+12) 37307 if rc != 0 { 37308 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37309 return TCL_ERROR 37310 } else { 37311 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+16, ts+17791, libc.VaList(bp, *(*uint32)(unsafe.Pointer(bp + 12)))) 37312 tcl.XTcl_SetResult(tls, interp, bp+16, uintptr(1)) 37313 return TCL_OK 37314 } 37315 return int32(0) 37316 } 37317 37318 func file_control_chunksize_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37319 bp := tls.Alloc(8) 37320 defer tls.Free(8) 37321 37322 var zDb uintptr 37323 37324 var rc int32 37325 37326 if objc != 4 { 37327 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 37328 return TCL_ERROR 37329 } 37330 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 || 37331 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+4) != 0 { 37332 return TCL_ERROR 37333 } 37334 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37335 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 37336 zDb = uintptr(0) 37337 } 37338 37339 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_CHUNK_SIZE, bp+4) 37340 if rc != 0 { 37341 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37342 return TCL_ERROR 37343 } 37344 return TCL_OK 37345 } 37346 37347 func file_control_sizehint_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37348 bp := tls.Alloc(12) 37349 defer tls.Free(12) 37350 37351 var zDb uintptr 37352 37353 var rc int32 37354 37355 if objc != 4 { 37356 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 37357 return TCL_ERROR 37358 } 37359 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 || 37360 tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+4) != 0 { 37361 return TCL_ERROR 37362 } 37363 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37364 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 37365 zDb = uintptr(0) 37366 } 37367 37368 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_SIZE_HINT, bp+4) 37369 if rc != 0 { 37370 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37371 return TCL_ERROR 37372 } 37373 return TCL_OK 37374 } 37375 37376 func file_control_lockproxy_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37377 bp := tls.Alloc(36) 37378 defer tls.Free(36) 37379 37380 if objc != 3 { 37381 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37382 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17809, 0)) 37383 return TCL_ERROR 37384 } 37385 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 37386 return TCL_ERROR 37387 } 37388 37389 return TCL_OK 37390 } 37391 37392 func file_control_persist_wal(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37393 bp := tls.Alloc(172) 37394 defer tls.Free(172) 37395 37396 var rc int32 37397 37398 if objc != 3 { 37399 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37400 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 37401 return TCL_ERROR 37402 } 37403 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+64) != 0 { 37404 return TCL_ERROR 37405 } 37406 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+68) != 0 { 37407 return TCL_ERROR 37408 } 37409 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_PERSIST_WAL, bp+68) 37410 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 68)))) 37411 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+72, uintptr(0))) 37412 return TCL_OK 37413 } 37414 37415 func file_control_powersafe_overwrite(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37416 bp := tls.Alloc(172) 37417 defer tls.Free(172) 37418 37419 var rc int32 37420 37421 if objc != 3 { 37422 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37423 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 37424 return TCL_ERROR 37425 } 37426 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+64) != 0 { 37427 return TCL_ERROR 37428 } 37429 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+68) != 0 { 37430 return TCL_ERROR 37431 } 37432 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_POWERSAFE_OVERWRITE, bp+68) 37433 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 68)))) 37434 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+72, uintptr(0))) 37435 return TCL_OK 37436 } 37437 37438 func file_control_vfsname(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37439 bp := tls.Alloc(56) 37440 defer tls.Free(56) 37441 37442 var zDbName uintptr = ts + 85 37443 *(*uintptr)(unsafe.Pointer(bp + 52)) = uintptr(0) 37444 37445 if objc != 2 && objc != 3 { 37446 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37447 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37448 return TCL_ERROR 37449 } 37450 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0 { 37451 return TCL_ERROR 37452 } 37453 if objc == 3 { 37454 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37455 } 37456 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_VFSNAME, bp+52) 37457 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 52)), uintptr(0))) 37458 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 52))) 37459 return TCL_OK 37460 } 37461 37462 func file_control_reservebytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37463 bp := tls.Alloc(8) 37464 defer tls.Free(8) 37465 37466 var zDbName uintptr = ts + 85 37467 *(*int32)(unsafe.Pointer(bp + 4)) = 0 37468 var rc int32 37469 37470 if objc != 3 { 37471 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17844) 37472 return TCL_ERROR 37473 } 37474 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 || 37475 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 37476 return TCL_ERROR 37477 } 37478 37479 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName, SQLITE_FCNTL_RESERVE_BYTES, bp+4) 37480 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 37481 return TCL_OK 37482 } 37483 37484 func file_control_tempfilename(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37485 bp := tls.Alloc(56) 37486 defer tls.Free(56) 37487 37488 var zDbName uintptr = ts + 85 37489 *(*uintptr)(unsafe.Pointer(bp + 52)) = uintptr(0) 37490 37491 if objc != 2 && objc != 3 { 37492 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37493 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37494 return TCL_ERROR 37495 } 37496 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0 { 37497 return TCL_ERROR 37498 } 37499 if objc == 3 { 37500 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37501 } 37502 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_TEMPFILENAME, bp+52) 37503 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 52)), uintptr(0))) 37504 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 52))) 37505 return TCL_OK 37506 } 37507 37508 func file_control_external_reader(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37509 bp := tls.Alloc(40) 37510 defer tls.Free(40) 37511 37512 var zName uintptr = ts + 85 37513 *(*int32)(unsafe.Pointer(bp + 36)) = 0 37514 var rc int32 = SQLITE_OK 37515 37516 if objc != 2 && objc != 3 { 37517 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37518 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37519 return TCL_ERROR 37520 } 37521 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 37522 return TCL_ERROR 37523 } 37524 if objc == 3 { 37525 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37526 } 37527 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, SQLITE_FCNTL_EXTERNAL_READER, bp+36) 37528 if rc != SQLITE_OK { 37529 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37530 return TCL_ERROR 37531 } 37532 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 36)))) 37533 return TCL_OK 37534 } 37535 37536 func vfs_list(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37537 var pVfs uintptr 37538 var pRet uintptr = tcl.XTcl_NewObj(tls) 37539 if objc != 1 { 37540 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 37541 return TCL_ERROR 37542 } 37543 for pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)); pVfs != 0; pVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpNext { 37544 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 37545 } 37546 tcl.XTcl_SetObjResult(tls, interp, pRet) 37547 return TCL_OK 37548 } 37549 37550 func test_limit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37551 bp := tls.Alloc(64) 37552 defer tls.Free(64) 37553 37554 var rc int32 37555 var i int32 37556 var id int32 = 0 37557 37558 var zId uintptr 37559 37560 if objc != 4 { 37561 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37562 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17849, 0)) 37563 return TCL_ERROR 37564 } 37565 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+56) != 0 { 37566 return TCL_ERROR 37567 } 37568 zId = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37569 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aId))/uint32(unsafe.Sizeof(struct { 37570 FzName uintptr 37571 Fid int32 37572 }{})); i++ { 37573 if libc.Xstrcmp(tls, zId, aId[i].FzName) == 0 { 37574 id = aId[i].Fid 37575 break 37576 } 37577 } 37578 if uint32(i) >= uint32(unsafe.Sizeof(aId))/uint32(unsafe.Sizeof(struct { 37579 FzName uintptr 37580 Fid int32 37581 }{})) { 37582 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17862, zId, uintptr(0))) 37583 return TCL_ERROR 37584 } 37585 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+60) != 0 { 37586 return TCL_ERROR 37587 } 37588 rc = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), id, *(*int32)(unsafe.Pointer(bp + 60))) 37589 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37590 return TCL_OK 37591 } 37592 37593 var aId = [14]struct { 37594 FzName uintptr 37595 Fid int32 37596 }{ 37597 {FzName: ts + 17883}, 37598 {FzName: ts + 17903, Fid: SQLITE_LIMIT_SQL_LENGTH}, 37599 {FzName: ts + 17927, Fid: SQLITE_LIMIT_COLUMN}, 37600 {FzName: ts + 17947, Fid: SQLITE_LIMIT_EXPR_DEPTH}, 37601 {FzName: ts + 17971, Fid: SQLITE_LIMIT_COMPOUND_SELECT}, 37602 {FzName: ts + 18000, Fid: SQLITE_LIMIT_VDBE_OP}, 37603 {FzName: ts + 18021, Fid: SQLITE_LIMIT_FUNCTION_ARG}, 37604 {FzName: ts + 18047, Fid: SQLITE_LIMIT_ATTACHED}, 37605 {FzName: ts + 18069, Fid: SQLITE_LIMIT_LIKE_PATTERN_LENGTH}, 37606 {FzName: ts + 18102, Fid: SQLITE_LIMIT_VARIABLE_NUMBER}, 37607 {FzName: ts + 18131, Fid: SQLITE_LIMIT_TRIGGER_DEPTH}, 37608 {FzName: ts + 18158, Fid: SQLITE_LIMIT_WORKER_THREADS}, 37609 {FzName: ts + 18186, Fid: -1}, 37610 {FzName: ts + 18208, Fid: SQLITE_LIMIT_WORKER_THREADS + 1}, 37611 } 37612 37613 func save_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37614 var rc int32 = sqlite3.Xsqlite3_test_control(tls, 9999, 0) 37615 _ = rc 37616 37617 rc = sqlite3.Xsqlite3_test_control(tls, -1, 0) 37618 37619 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SAVE, 0) 37620 return TCL_OK 37621 } 37622 37623 func restore_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37624 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_RESTORE, 0) 37625 return TCL_OK 37626 } 37627 37628 func reset_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37629 sqlite3.Xsqlite3_randomness(tls, 0, uintptr(0)) 37630 return TCL_OK 37631 } 37632 37633 func prng_seed(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37634 bp := tls.Alloc(24) 37635 defer tls.Free(24) 37636 37637 *(*int32)(unsafe.Pointer(bp + 16)) = 0 37638 *(*uintptr)(unsafe.Pointer(bp + 20)) = uintptr(0) 37639 if objc != 2 && objc != 3 { 37640 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18228) 37641 return TCL_ERROR 37642 } 37643 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16) != 0 { 37644 return TCL_ERROR 37645 } 37646 if objc == 3 && getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), bp+20) != 0 { 37647 return TCL_ERROR 37648 } 37649 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SEED, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 20)))) 37650 return TCL_OK 37651 } 37652 37653 func extra_schema_checks(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37654 bp := tls.Alloc(12) 37655 defer tls.Free(12) 37656 37657 *(*int32)(unsafe.Pointer(bp + 8)) = 0 37658 if objc != 2 { 37659 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 37660 return TCL_ERROR 37661 } 37662 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+8) != 0 { 37663 return TCL_ERROR 37664 } 37665 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 37666 return TCL_OK 37667 } 37668 37669 func database_may_be_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37670 bp := tls.Alloc(8) 37671 defer tls.Free(8) 37672 37673 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 0)) 37674 return TCL_OK 37675 } 37676 37677 func database_never_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37678 bp := tls.Alloc(8) 37679 defer tls.Free(8) 37680 37681 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 1)) 37682 return TCL_OK 37683 } 37684 37685 func test_pcache_stats(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37686 bp := tls.Alloc(16) 37687 defer tls.Free(16) 37688 37689 var pRet uintptr 37690 37691 sqlite3.Xsqlite3PcacheStats(tls, bp, bp+4, bp+8, bp+12) 37692 37693 pRet = tcl.XTcl_NewObj(tls) 37694 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18246, -1)) 37695 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp)))) 37696 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18254, -1)) 37697 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 37698 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18258, -1)) 37699 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 37700 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18262, -1)) 37701 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 37702 37703 tcl.XTcl_SetObjResult(tls, interp, pRet) 37704 37705 return TCL_OK 37706 } 37707 37708 func test_unlock_notify_cb(tls *libc.TLS, aArg uintptr, nArg int32) { 37709 var ii int32 37710 for ii = 0; ii < nArg; ii++ { 37711 tcl.XTcl_EvalEx(tls, *(*uintptr)(unsafe.Pointer(aArg + uintptr(ii)*4)), ts+13692, -1, TCL_EVAL_GLOBAL) 37712 } 37713 } 37714 37715 func test_unlock_notify(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37716 bp := tls.Alloc(4) 37717 defer tls.Free(4) 37718 37719 var rc int32 37720 37721 if objc != 2 { 37722 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37723 return TCL_ERROR 37724 } 37725 37726 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 37727 return TCL_ERROR 37728 } 37729 rc = sqlite3.Xsqlite3_unlock_notify(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct { 37730 f func(*libc.TLS, uintptr, int32) 37731 }{test_unlock_notify_cb})), interp) 37732 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37733 return TCL_OK 37734 } 37735 37736 func test_wal_checkpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37737 bp := tls.Alloc(4) 37738 defer tls.Free(4) 37739 37740 var zDb uintptr = uintptr(0) 37741 37742 var rc int32 37743 37744 if objc != 3 && objc != 2 { 37745 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18273) 37746 return TCL_ERROR 37747 } 37748 37749 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 37750 return TCL_ERROR 37751 } 37752 if objc == 3 { 37753 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 37754 } 37755 rc = sqlite3.Xsqlite3_wal_checkpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 37756 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37757 return TCL_OK 37758 } 37759 37760 func test_wal_checkpoint_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37761 bp := tls.Alloc(68) 37762 defer tls.Free(68) 37763 37764 var zDb uintptr = uintptr(0) 37765 37766 var rc int32 37767 37768 *(*int32)(unsafe.Pointer(bp + 60)) = -555 37769 *(*int32)(unsafe.Pointer(bp + 64)) = -555 37770 var pRet uintptr 37771 37772 *(*[5]uintptr)(unsafe.Pointer(bp + 40)) = [5]uintptr{ts + 18283, ts + 18291, ts + 18296, ts + 18304, uintptr(0)} 37773 37774 if objc != 3 && objc != 4 { 37775 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18313) 37776 return TCL_ERROR 37777 } 37778 37779 if objc == 4 { 37780 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 37781 } 37782 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 || TCL_OK != tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) && 37783 TCL_OK != tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+40, int32(unsafe.Sizeof(uintptr(0))), ts+18328, 0, bp+36) { 37784 return TCL_ERROR 37785 } 37786 37787 rc = sqlite3.Xsqlite3_wal_checkpoint_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zDb, *(*int32)(unsafe.Pointer(bp + 36)), bp+60, bp+64) 37788 if rc != SQLITE_OK && rc != SQLITE_BUSY { 37789 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37790 tcl.XTcl_ResetResult(tls, interp) 37791 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErrCode, ts+9645, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0)) 37792 return TCL_ERROR 37793 } 37794 37795 pRet = tcl.XTcl_NewObj(tls) 37796 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, func() int32 { 37797 if rc == SQLITE_BUSY { 37798 return 1 37799 } 37800 return 0 37801 }())) 37802 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 60)))) 37803 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 64)))) 37804 tcl.XTcl_SetObjResult(tls, interp, pRet) 37805 37806 return TCL_OK 37807 } 37808 37809 func test_wal_autocheckpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37810 bp := tls.Alloc(8) 37811 defer tls.Free(8) 37812 37813 var rc int32 37814 37815 if objc != 3 { 37816 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18333) 37817 return TCL_ERROR 37818 } 37819 37820 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 || 37821 tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 37822 return TCL_ERROR 37823 } 37824 37825 rc = sqlite3.Xsqlite3_wal_autocheckpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 37826 tcl.XTcl_ResetResult(tls, interp) 37827 if rc != SQLITE_OK { 37828 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37829 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErrCode, -1)) 37830 return TCL_ERROR 37831 } 37832 37833 return TCL_OK 37834 } 37835 37836 type LogCallback = struct { 37837 FpInterp uintptr 37838 FpObj uintptr 37839 } 37840 37841 var logcallback = LogCallback{} 37842 37843 func xLogcallback(tls *libc.TLS, unused uintptr, err int32, zMsg uintptr) { 37844 var pNew uintptr = tcl.XTcl_DuplicateObj(tls, logcallback.FpObj) 37845 (*Tcl_Obj)(unsafe.Pointer(pNew)).FrefCount++ 37846 tcl.XTcl_ListObjAppendElement(tls, 37847 uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, err), -1)) 37848 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, zMsg, -1)) 37849 tcl.XTcl_EvalObjEx(tls, logcallback.FpInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT) 37850 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37851 var _objPtr uintptr = pNew 37852 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37853 tcl.XTclFreeObj(tls, _objPtr) 37854 } 37855 } 37856 } 37857 37858 func test_sqlite3_log(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37859 bp := tls.Alloc(32) 37860 defer tls.Free(32) 37861 37862 if objc > 2 { 37863 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10187) 37864 return TCL_ERROR 37865 } 37866 if logcallback.FpObj != 0 { 37867 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37868 var _objPtr uintptr = logcallback.FpObj 37869 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37870 tcl.XTclFreeObj(tls, _objPtr) 37871 } 37872 } 37873 logcallback.FpObj = uintptr(0) 37874 logcallback.FpInterp = uintptr(0) 37875 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp, uintptr(0), uintptr(0))) 37876 } 37877 if objc > 1 { 37878 logcallback.FpObj = *(*uintptr)(unsafe.Pointer(objv + 1*4)) 37879 (*Tcl_Obj)(unsafe.Pointer(logcallback.FpObj)).FrefCount++ 37880 logcallback.FpInterp = interp 37881 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct { 37882 f func(*libc.TLS, uintptr, int32, uintptr) 37883 }{xLogcallback})), uintptr(0))) 37884 } 37885 return TCL_OK 37886 } 37887 37888 func runAsObjProc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37889 bp := tls.Alloc(80) 37890 defer tls.Free(80) 37891 37892 if objc < 2 { 37893 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18342) 37894 return TCL_ERROR 37895 } 37896 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+48) != 0) { 37897 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 37898 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), uintptr(0))) 37899 return TCL_ERROR 37900 } 37901 if (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjProc == uintptr(0) { 37902 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18354, 37903 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), uintptr(0))) 37904 return TCL_ERROR 37905 } 37906 return (*struct { 37907 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 37908 })(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)*4) 37909 } 37910 37911 func printExplainQueryPlan(tls *libc.TLS, pStmt uintptr) int32 { 37912 bp := tls.Alloc(44) 37913 defer tls.Free(44) 37914 37915 var zSql uintptr 37916 var zExplain uintptr 37917 37918 var rc int32 37919 37920 zSql = sqlite3.Xsqlite3_sql(tls, pStmt) 37921 if zSql == uintptr(0) { 37922 return SQLITE_ERROR 37923 } 37924 37925 zExplain = sqlite3.Xsqlite3_mprintf(tls, ts+330, libc.VaList(bp, zSql)) 37926 if zExplain == uintptr(0) { 37927 return SQLITE_NOMEM 37928 } 37929 37930 rc = sqlite3.Xsqlite3_prepare_v2(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt), zExplain, -1, bp+40, uintptr(0)) 37931 sqlite3.Xsqlite3_free(tls, zExplain) 37932 if rc != SQLITE_OK { 37933 return rc 37934 } 37935 37936 for SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 37937 var iSelectid int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 37938 var iOrder int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 37939 var iFrom int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 37940 var zDetail uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 3) 37941 37942 libc.Xprintf(tls, ts+18379, libc.VaList(bp+8, iSelectid, iOrder, iFrom, zDetail)) 37943 } 37944 37945 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 37946 } 37947 37948 func test_print_eqp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37949 bp := tls.Alloc(4) 37950 defer tls.Free(4) 37951 37952 var rc int32 37953 37954 if objc != 2 { 37955 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 37956 return TCL_ERROR 37957 } 37958 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 37959 return TCL_ERROR 37960 } 37961 rc = printExplainQueryPlan(tls, *(*uintptr)(unsafe.Pointer(bp))) 37962 37963 libc.Xfflush(tls, libc.Xstdout) 37964 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37965 return TCL_OK 37966 } 37967 37968 type timex = struct { 37969 Fmodes uint32 37970 Foffset int32 37971 Ffreq int32 37972 Fmaxerror int32 37973 Festerror int32 37974 Fstatus int32 37975 Fconstant int32 37976 Fprecision int32 37977 Ftolerance int32 37978 Ftime struct { 37979 Ftv_sec int32 37980 Ftv_usec int32 37981 } 37982 Ftick int32 37983 Fppsfreq int32 37984 Fjitter int32 37985 Fshift int32 37986 Fstabil int32 37987 Fjitcnt int32 37988 Fcalcnt int32 37989 Ferrcnt int32 37990 Fstbcnt int32 37991 Ftai int32 37992 __84 uint32 37993 __88 uint32 37994 __92 uint32 37995 __96 uint32 37996 __100 uint32 37997 __104 uint32 37998 __108 uint32 37999 __112 uint32 38000 __116 uint32 38001 __120 uint32 38002 __124 uint32 38003 } 38004 38005 func testLocaltime(tls *libc.TLS, aliasT uintptr, aliasTM uintptr) int32 { 38006 var t time_t = *(*time_t)(unsafe.Pointer(aliasT)) 38007 var pTm uintptr = aliasTM 38008 var altT time_t 38009 var iJD sqlite3_int64 38010 var Z int32 38011 var A int32 38012 var B int32 38013 var C int32 38014 var D int32 38015 var E int32 38016 var X1 int32 38017 var S int32 38018 38019 if t/86400&1 != 0 { 38020 altT = t + 1800 38021 } else { 38022 altT = t - 1800 38023 } 38024 iJD = int64(altT) + 210866760000 38025 Z = int32((iJD + int64(43200)) / int64(86400)) 38026 A = libc.Int32FromFloat64((float64(Z) - 1867216.25) / 36524.25) 38027 A = Z + 1 + A - A/4 38028 B = A + 1524 38029 C = libc.Int32FromFloat64((float64(B) - 122.1) / 365.25) 38030 D = 36525 * (C & 32767) / 100 38031 E = libc.Int32FromFloat64(float64(B-D) / 30.6001) 38032 X1 = libc.Int32FromFloat64(30.6001 * float64(E)) 38033 (*tm)(unsafe.Pointer(pTm)).Ftm_mday = B - D - X1 38034 (*tm)(unsafe.Pointer(pTm)).Ftm_mon = func() int32 { 38035 if E < 14 { 38036 return E - 2 38037 } 38038 return E - 14 38039 }() 38040 (*tm)(unsafe.Pointer(pTm)).Ftm_year = func() int32 { 38041 if (*tm)(unsafe.Pointer(pTm)).Ftm_mon > 1 { 38042 return C - 4716 38043 } 38044 return C - 4715 38045 }() - 1900 38046 S = int32((iJD + int64(43200)) % int64(86400)) 38047 (*tm)(unsafe.Pointer(pTm)).Ftm_hour = S / 3600 38048 (*tm)(unsafe.Pointer(pTm)).Ftm_min = S / 60 % 60 38049 (*tm)(unsafe.Pointer(pTm)).Ftm_sec = S % 60 38050 return libc.Bool32(t == 959609760) 38051 } 38052 38053 func test_test_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38054 bp := tls.Alloc(136) 38055 defer tls.Free(136) 38056 38057 *(*[4]Verb)(unsafe.Pointer(bp + 72)) = [4]Verb{ 38058 {FzName: ts + 18392, Fi: SQLITE_TESTCTRL_LOCALTIME_FAULT}, 38059 {FzName: ts + 18424, Fi: SQLITE_TESTCTRL_SORTER_MMAP}, 38060 {FzName: ts + 18452, Fi: SQLITE_TESTCTRL_IMPOSTER}, 38061 {FzName: ts + 18477, Fi: SQLITE_TESTCTRL_INTERNAL_FUNCTIONS}, 38062 } 38063 38064 var iFlag int32 38065 var rc int32 38066 38067 if objc < 2 { 38068 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18512) 38069 return TCL_ERROR 38070 } 38071 38072 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 38073 interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+72, int32(unsafe.Sizeof(Verb{})), ts+18525, 0, bp+104) 38074 if rc != TCL_OK { 38075 return rc 38076 } 38077 38078 iFlag = (*Verb)(unsafe.Pointer(bp + 72 + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).Fi 38079 switch iFlag { 38080 case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: 38081 { 38082 *(*uintptr)(unsafe.Pointer(bp + 108)) = uintptr(0) 38083 if objc != 3 { 38084 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 38085 return TCL_ERROR 38086 } 38087 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), bp+108) != 0 { 38088 return TCL_ERROR 38089 } 38090 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(bp + 108)))) 38091 break 38092 38093 } 38094 case SQLITE_TESTCTRL_LOCALTIME_FAULT: 38095 { 38096 if objc != 3 { 38097 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18530) 38098 return TCL_ERROR 38099 } 38100 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+112) != 0 { 38101 return TCL_ERROR 38102 } 38103 sqlite3.Xsqlite3_test_control(tls, iFlag, libc.VaList(bp+8, *(*int32)(unsafe.Pointer(bp + 112)), *(*uintptr)(unsafe.Pointer(&struct { 38104 f func(*libc.TLS, uintptr, uintptr) int32 38105 }{testLocaltime})))) 38106 break 38107 38108 } 38109 38110 case SQLITE_TESTCTRL_SORTER_MMAP: 38111 { 38112 if objc != 4 { 38113 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18536) 38114 return TCL_ERROR 38115 } 38116 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), bp+116) != 0 { 38117 return TCL_ERROR 38118 } 38119 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+120) != 0 { 38120 return TCL_ERROR 38121 } 38122 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_SORTER_MMAP, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 116)), *(*int32)(unsafe.Pointer(bp + 120)))) 38123 break 38124 38125 } 38126 38127 case SQLITE_TESTCTRL_IMPOSTER: 38128 { 38129 var zDbName uintptr 38130 38131 if objc != 6 { 38132 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18545) 38133 return TCL_ERROR 38134 } 38135 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), bp+124) != 0 { 38136 return TCL_ERROR 38137 } 38138 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 38139 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+128) != 0 { 38140 return TCL_ERROR 38141 } 38142 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*4)), bp+132) != 0 { 38143 return TCL_ERROR 38144 } 38145 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_IMPOSTER, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 124)), zDbName, *(*int32)(unsafe.Pointer(bp + 128)), *(*int32)(unsafe.Pointer(bp + 132)))) 38146 break 38147 38148 } 38149 } 38150 38151 tcl.XTcl_ResetResult(tls, interp) 38152 return TCL_OK 38153 } 38154 38155 type Verb = struct { 38156 FzName uintptr 38157 Fi int32 38158 } 38159 38160 type rlim_t = uint64 38161 type rlim64_t = uint64 38162 38163 type rlimit = struct { 38164 Frlim_cur rlim_t 38165 Frlim_max rlim_t 38166 } 38167 38168 type rlimit64 = struct { 38169 Frlim_cur rlim64_t 38170 Frlim_max rlim64_t 38171 } 38172 38173 type rusage = struct { 38174 Fru_utime struct { 38175 Ftv_sec int32 38176 Ftv_usec int32 38177 } 38178 Fru_stime struct { 38179 Ftv_sec int32 38180 Ftv_usec int32 38181 } 38182 F__16 struct{ Fru_maxrss int32 } 38183 F__20 struct{ Fru_ixrss int32 } 38184 F__24 struct{ Fru_idrss int32 } 38185 F__28 struct{ Fru_isrss int32 } 38186 F__32 struct{ Fru_minflt int32 } 38187 F__36 struct{ Fru_majflt int32 } 38188 F__40 struct{ Fru_nswap int32 } 38189 F__44 struct{ Fru_inblock int32 } 38190 F__48 struct{ Fru_oublock int32 } 38191 F__52 struct{ Fru_msgsnd int32 } 38192 F__56 struct{ Fru_msgrcv int32 } 38193 F__60 struct{ Fru_nsignals int32 } 38194 F__64 struct{ Fru_nvcsw int32 } 38195 F__68 struct{ Fru_nivcsw int32 } 38196 } 38197 38198 func test_getrusage(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38199 bp := tls.Alloc(1144) 38200 defer tls.Free(1144) 38201 38202 libc.Xmemset(tls, bp+48, 0, uint32(unsafe.Sizeof(rusage{}))) 38203 libc.Xgetrusage(tls, RUSAGE_SELF, bp+48) 38204 38205 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1024]int8{})), bp+120, 38206 ts+18566, 38207 libc.VaList(bp, (*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_sec, (*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_usec, 38208 (*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_sec, (*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_usec, 38209 *(*int32)(unsafe.Pointer(bp + 48 + 32)), *(*int32)(unsafe.Pointer(bp + 48 + 36)))) 38210 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+120, -1)) 38211 return TCL_OK 38212 } 38213 38214 func optimization_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38215 bp := tls.Alloc(64) 38216 defer tls.Free(64) 38217 38218 var i int32 38219 38220 var zOpt uintptr 38221 38222 var mask int32 = 0 38223 38224 if objc != 4 { 38225 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18626) 38226 return TCL_ERROR 38227 } 38228 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+56) != 0 { 38229 return TCL_ERROR 38230 } 38231 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+60) != 0 { 38232 return TCL_ERROR 38233 } 38234 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 38235 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aOpt))/uint32(unsafe.Sizeof(struct { 38236 FzOptName uintptr 38237 Fmask int32 38238 }{})); i++ { 38239 if libc.Xstrcmp(tls, zOpt, aOpt[i].FzOptName) == 0 { 38240 mask = aOpt[i].Fmask 38241 break 38242 } 38243 } 38244 if *(*int32)(unsafe.Pointer(bp + 60)) != 0 { 38245 mask = ^mask 38246 } 38247 if uint32(i) >= uint32(unsafe.Sizeof(aOpt))/uint32(unsafe.Sizeof(struct { 38248 FzOptName uintptr 38249 Fmask int32 38250 }{})) { 38251 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18641, 38252 uintptr(0))) 38253 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aOpt))/uint32(unsafe.Sizeof(struct { 38254 FzOptName uintptr 38255 Fmask int32 38256 }{})); i++ { 38257 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+4894, aOpt[i].FzOptName, uintptr(0))) 38258 } 38259 return TCL_ERROR 38260 } 38261 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_OPTIMIZATIONS, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 56)), mask)) 38262 return TCL_OK 38263 } 38264 38265 var aOpt = [14]struct { 38266 FzOptName uintptr 38267 Fmask int32 38268 }{ 38269 {FzOptName: ts + 18682, Fmask: libc.Int32FromUint32(SQLITE_AllOpts)}, 38270 {FzOptName: ts + 18686}, 38271 {FzOptName: ts + 18691, Fmask: SQLITE_QueryFlattener}, 38272 {FzOptName: ts + 18707, Fmask: SQLITE_GroupByOrder}, 38273 {FzOptName: ts + 18721, Fmask: SQLITE_FactorOutConst}, 38274 {FzOptName: ts + 18738, Fmask: SQLITE_DistinctOpt}, 38275 {FzOptName: ts + 18751, Fmask: SQLITE_CoverIdxScan}, 38276 {FzOptName: ts + 18766, Fmask: SQLITE_OrderByIdxJoin}, 38277 {FzOptName: ts + 18784, Fmask: SQLITE_Transitive}, 38278 {FzOptName: ts + 18795, Fmask: SQLITE_OmitNoopJoin}, 38279 {FzOptName: ts + 18810, Fmask: SQLITE_Stat4}, 38280 {FzOptName: ts + 18816, Fmask: SQLITE_SkipScan}, 38281 {FzOptName: ts + 18826, Fmask: SQLITE_PushDown}, 38282 {FzOptName: ts + 18836, Fmask: SQLITE_BalancedMerge}, 38283 } 38284 38285 func tclLoadStaticExtensionCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38286 bp := tls.Alloc(72) 38287 defer tls.Free(72) 38288 38289 var zName uintptr 38290 var i int32 38291 var j int32 38292 var rc int32 38293 *(*uintptr)(unsafe.Pointer(bp + 68)) = uintptr(0) 38294 if objc < 3 { 38295 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18851) 38296 return TCL_ERROR 38297 } 38298 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+64) != 0 { 38299 return TCL_ERROR 38300 } 38301 for j = 2; j < objc; j++ { 38302 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(j)*4))) 38303 for i = 0; i < int32(uint32(unsafe.Sizeof(aExtension))/uint32(unsafe.Sizeof(struct { 38304 FzExtName uintptr 38305 FpInit uintptr 38306 }{}))); i++ { 38307 if libc.Xstrcmp(tls, zName, aExtension[i].FzExtName) == 0 { 38308 break 38309 } 38310 } 38311 if i >= int32(uint32(unsafe.Sizeof(aExtension))/uint32(unsafe.Sizeof(struct { 38312 FzExtName uintptr 38313 FpInit uintptr 38314 }{}))) { 38315 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18863, zName, uintptr(0))) 38316 return TCL_ERROR 38317 } 38318 if aExtension[i].FpInit != 0 { 38319 rc = (*struct { 38320 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 38321 })(unsafe.Pointer(&struct{ uintptr }{aExtension[i].FpInit})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), bp+68, uintptr(0)) 38322 } else { 38323 rc = SQLITE_OK 38324 } 38325 if rc != SQLITE_OK && rc != SQLITE_OK|int32(1)<<8 || *(*uintptr)(unsafe.Pointer(bp + 68)) != 0 { 38326 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18883, zName, ts+18902, *(*uintptr)(unsafe.Pointer(bp + 68)), 38327 uintptr(0))) 38328 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 68))) 38329 return TCL_ERROR 38330 } 38331 } 38332 return TCL_OK 38333 } 38334 38335 var aExtension = [22]struct { 38336 FzExtName uintptr 38337 FpInit uintptr 38338 }{ 38339 {FzExtName: ts + 18912, FpInit: 0}, 38340 {FzExtName: ts + 18919, FpInit: 0}, 38341 {FzExtName: ts + 4060, FpInit: 0}, 38342 {FzExtName: ts + 18929, FpInit: 0}, 38343 {FzExtName: ts + 4815, FpInit: 0}, 38344 {FzExtName: ts + 4838, FpInit: 0}, 38345 {FzExtName: ts + 4896, FpInit: 0}, 38346 {FzExtName: ts + 4974, FpInit: 0}, 38347 {FzExtName: ts + 18937, FpInit: 0}, 38348 {FzExtName: ts + 5483, FpInit: 0}, 38349 {FzExtName: ts + 5507, FpInit: 0}, 38350 {FzExtName: ts + 18944, FpInit: 0}, 38351 {FzExtName: ts + 6087, FpInit: 0}, 38352 {FzExtName: ts + 6162, FpInit: 0}, 38353 {FzExtName: ts + 6535, FpInit: 0}, 38354 {FzExtName: ts + 6831, FpInit: 0}, 38355 {FzExtName: ts + 6846, FpInit: 0}, 38356 {FzExtName: ts + 18953, FpInit: 0}, 38357 {FzExtName: ts + 18960, FpInit: 0}, 38358 {FzExtName: ts + 18969, FpInit: 0}, 38359 {FzExtName: ts + 8921, FpInit: 0}, 38360 {FzExtName: ts + 9463, FpInit: 0}, 38361 } 38362 38363 func sorter_test_fakeheap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38364 bp := tls.Alloc(4) 38365 defer tls.Free(4) 38366 38367 if objc != 2 { 38368 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 38369 return TCL_ERROR 38370 } 38371 38372 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 38373 return TCL_ERROR 38374 } 38375 38376 if *(*int32)(unsafe.Pointer(bp)) != 0 { 38377 if sqlite3.Xsqlite3Config.FpHeap == uintptr(0) { 38378 sqlite3.Xsqlite3Config.FpHeap = libc.UintptrFromInt32(-1) 38379 } 38380 } else { 38381 if sqlite3.Xsqlite3Config.FpHeap == libc.UintptrFromInt32(-1) { 38382 sqlite3.Xsqlite3Config.FpHeap = uintptr(0) 38383 } 38384 } 38385 38386 tcl.XTcl_ResetResult(tls, interp) 38387 return TCL_OK 38388 } 38389 38390 func sorter_test_sort4_helper(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38391 bp := tls.Alloc(68) 38392 defer tls.Free(68) 38393 38394 var zSql1 uintptr 38395 var zSql2 uintptr 38396 38397 var iStep int32 38398 var iCksum1 uint32 38399 var iCksum2 uint32 38400 var rc int32 38401 var iB int32 38402 38403 var a int32 38404 var a1 int32 38405 iCksum1 = uint32(0) 38406 iCksum2 = uint32(0) 38407 38408 if !(objc != 5) { 38409 goto __1 38410 } 38411 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18976) 38412 return TCL_ERROR 38413 __1: 38414 ; 38415 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+56) != 0) { 38416 goto __2 38417 } 38418 return TCL_ERROR 38419 __2: 38420 ; 38421 zSql1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 38422 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+60) != 0) { 38423 goto __3 38424 } 38425 return TCL_ERROR 38426 __3: 38427 ; 38428 zSql2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))) 38429 38430 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql1, -1, bp+64, uintptr(0)) 38431 if !(rc != SQLITE_OK) { 38432 goto __4 38433 } 38434 goto sql_error 38435 __4: 38436 ; 38437 iB = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) - 1 38438 iStep = 0 38439 __5: 38440 if !(iStep < *(*int32)(unsafe.Pointer(bp + 60)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64)))) { 38441 goto __7 38442 } 38443 a = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 38444 if !(a != sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), iB)) { 38445 goto __8 38446 } 38447 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18995, 0)) 38448 return TCL_ERROR 38449 __8: 38450 ; 38451 iCksum1 = iCksum1 + (iCksum1<<3 + uint32(a)) 38452 goto __6 38453 __6: 38454 iStep++ 38455 goto __5 38456 goto __7 38457 __7: 38458 ; 38459 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 38460 if !(rc != SQLITE_OK) { 38461 goto __9 38462 } 38463 goto sql_error 38464 __9: 38465 ; 38466 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql2, -1, bp+64, uintptr(0)) 38467 if !(rc != SQLITE_OK) { 38468 goto __10 38469 } 38470 goto sql_error 38471 __10: 38472 ; 38473 iStep = 0 38474 __11: 38475 if !(SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64)))) { 38476 goto __13 38477 } 38478 a1 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 38479 iCksum2 = iCksum2 + (iCksum2<<3 + uint32(a1)) 38480 goto __12 38481 __12: 38482 iStep++ 38483 goto __11 38484 goto __13 38485 __13: 38486 ; 38487 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 38488 if !(rc != SQLITE_OK) { 38489 goto __14 38490 } 38491 goto sql_error 38492 __14: 38493 ; 38494 if !(iCksum1 != iCksum2) { 38495 goto __15 38496 } 38497 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19014, 0)) 38498 return TCL_ERROR 38499 __15: 38500 ; 38501 return TCL_OK 38502 sql_error: 38503 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19032, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 56))), 0)) 38504 return TCL_ERROR 38505 } 38506 38507 func test_bad_behavior(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38508 bp := tls.Alloc(44) 38509 defer tls.Free(44) 38510 38511 var xyz int32 38512 var i int32 = *(*int32)(unsafe.Pointer(clientData)) 38513 var j int32 38514 38515 var a uintptr 38516 if objc != 2 { 38517 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19044) 38518 return TCL_ERROR 38519 } 38520 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 38521 return TCL_ERROR 38522 } 38523 switch *(*int32)(unsafe.Pointer(bp)) { 38524 case 1: 38525 { 38526 xyz = 0x7fffff00 - i 38527 xyz = xyz + 0x100 38528 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, xyz)) 38529 break 38530 38531 } 38532 case 2: 38533 { 38534 *(*int32)(unsafe.Pointer(bp + 4 + 1*4)) = 5 38535 if *(*int32)(unsafe.Pointer(bp + 4 + uintptr(i)*4)) > 0 { 38536 *(*int32)(unsafe.Pointer(bp + 4 + 1*4))++ 38537 } 38538 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4 + 1*4)))) 38539 break 38540 38541 } 38542 case 3: 38543 { 38544 a = libc.Xmalloc(tls, uint32(unsafe.Sizeof(int32(0)))*uint32(10)) 38545 for j = 0; j < 10; j++ { 38546 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = j 38547 } 38548 libc.Xfree(tls, a) 38549 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 38550 break 38551 38552 } 38553 case 4: 38554 { 38555 tcl.XTcl_Panic(tls, ts+19049, 0) 38556 break 38557 38558 } 38559 } 38560 return TCL_OK 38561 } 38562 38563 func test_register_dbstat_vtab(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38564 bp := tls.Alloc(32) 38565 defer tls.Free(32) 38566 38567 var zDb uintptr 38568 38569 if objc != 2 { 38570 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38571 return TCL_ERROR 38572 } 38573 38574 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 38575 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp) != 0 { 38576 var db uintptr = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)).Fdb 38577 sqlite3.Xsqlite3DbstatRegister(tls, db) 38578 } 38579 return TCL_OK 38580 } 38581 38582 func test_sqlite3_db_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38583 bp := tls.Alloc(24) 38584 defer tls.Free(24) 38585 38586 var i int32 38587 *(*int32)(unsafe.Pointer(bp + 20)) = 0 38588 var zSetting uintptr 38589 38590 if objc != 4 && objc != 3 { 38591 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19066) 38592 return TCL_ERROR 38593 } 38594 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0 { 38595 return TCL_ERROR 38596 } 38597 zSetting = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 38598 if sqlite3.Xsqlite3_strglob(tls, ts+19085, zSetting) == 0 { 38599 zSetting += uintptr(7) 38600 } 38601 if sqlite3.Xsqlite3_strglob(tls, ts+19094, zSetting) == 0 { 38602 zSetting += uintptr(9) 38603 } 38604 if sqlite3.Xsqlite3_strglob(tls, ts+19105, zSetting) == 0 { 38605 zSetting += uintptr(7) 38606 } 38607 for i = 0; i < int32(uint32(unsafe.Sizeof(aSetting))/uint32(unsafe.Sizeof(struct { 38608 FzName uintptr 38609 FeVal int32 38610 }{}))); i++ { 38611 if libc.Xstrcmp(tls, zSetting, aSetting[i].FzName) == 0 { 38612 break 38613 } 38614 } 38615 if i >= int32(uint32(unsafe.Sizeof(aSetting))/uint32(unsafe.Sizeof(struct { 38616 FzName uintptr 38617 FeVal int32 38618 }{}))) { 38619 tcl.XTcl_SetObjResult(tls, interp, 38620 tcl.XTcl_NewStringObj(tls, ts+19114, -1)) 38621 return TCL_ERROR 38622 } 38623 if objc == 4 { 38624 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+20) != 0 { 38625 return TCL_ERROR 38626 } 38627 } else { 38628 *(*int32)(unsafe.Pointer(bp + 20)) = -1 38629 } 38630 sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), aSetting[i].FeVal, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 20)), bp+20)) 38631 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 20)))) 38632 return TCL_OK 38633 } 38634 38635 var aSetting = [14]struct { 38636 FzName uintptr 38637 FeVal int32 38638 }{ 38639 {FzName: ts + 19148, FeVal: SQLITE_DBCONFIG_ENABLE_FKEY}, 38640 {FzName: ts + 19153, FeVal: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 38641 {FzName: ts + 19161, FeVal: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 38642 {FzName: ts + 19176, FeVal: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 38643 {FzName: ts + 19191, FeVal: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 38644 {FzName: ts + 19208, FeVal: SQLITE_DBCONFIG_ENABLE_QPSG}, 38645 {FzName: ts + 19213, FeVal: SQLITE_DBCONFIG_TRIGGER_EQP}, 38646 {FzName: ts + 19225, FeVal: SQLITE_DBCONFIG_RESET_DATABASE}, 38647 {FzName: ts + 19234, FeVal: SQLITE_DBCONFIG_DEFENSIVE}, 38648 {FzName: ts + 19244, FeVal: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 38649 {FzName: ts + 19260, FeVal: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 38650 {FzName: ts + 19279, FeVal: SQLITE_DBCONFIG_DQS_DML}, 38651 {FzName: ts + 19287, FeVal: SQLITE_DBCONFIG_DQS_DDL}, 38652 {FzName: ts + 19295, FeVal: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 38653 } 38654 38655 func test_sqlite3_txn_state(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38656 bp := tls.Alloc(4) 38657 defer tls.Free(4) 38658 38659 var zSchema uintptr 38660 var iTxn int32 38661 38662 if objc != 2 && objc != 3 { 38663 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19314) 38664 return TCL_ERROR 38665 } 38666 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 38667 return TCL_ERROR 38668 } 38669 if objc == 3 { 38670 zSchema = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 38671 } else { 38672 zSchema = uintptr(0) 38673 } 38674 iTxn = sqlite3.Xsqlite3_txn_state(tls, *(*uintptr)(unsafe.Pointer(bp)), zSchema) 38675 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iTxn)) 38676 return TCL_OK 38677 } 38678 38679 func test_dbconfig_maindbname_icecube(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38680 bp := tls.Alloc(12) 38681 defer tls.Free(12) 38682 38683 var rc int32 38684 38685 if objc != 2 { 38686 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38687 return TCL_ERROR 38688 } else { 38689 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+8) != 0 { 38690 return TCL_ERROR 38691 } 38692 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), SQLITE_DBCONFIG_MAINDBNAME, libc.VaList(bp, ts+19326)) 38693 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 38694 return TCL_OK 38695 } 38696 return int32(0) 38697 } 38698 38699 func test_mmap_warm(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38700 bp := tls.Alloc(4) 38701 defer tls.Free(4) 38702 38703 if objc != 2 && objc != 3 { 38704 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19334) 38705 return TCL_ERROR 38706 } else { 38707 var rc int32 38708 38709 var zDb uintptr = uintptr(0) 38710 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 38711 return TCL_ERROR 38712 } 38713 if objc == 3 { 38714 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 38715 } 38716 rc = sqlite3_mmap_warm(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 38717 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 38718 return TCL_OK 38719 } 38720 return int32(0) 38721 } 38722 38723 func test_write_db(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38724 bp := tls.Alloc(20) 38725 defer tls.Free(20) 38726 38727 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 38728 *(*Tcl_WideInt)(unsafe.Pointer(bp + 4)) = int64(0) 38729 var aData uintptr = uintptr(0) 38730 *(*int32)(unsafe.Pointer(bp + 12)) = 0 38731 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 38732 var rc int32 38733 38734 if objc != 4 { 38735 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19346) 38736 return TCL_ERROR 38737 } 38738 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 38739 return TCL_ERROR 38740 } 38741 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 38742 return TCL_ERROR 38743 } 38744 aData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+12) 38745 38746 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+16) 38747 rc = (*struct { 38748 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 38749 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))).FpMethods)).FxWrite})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), aData, *(*int32)(unsafe.Pointer(bp + 12)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 4))) 38750 38751 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38752 return TCL_OK 38753 } 38754 38755 func test_register_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38756 if objc != 1 { 38757 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38758 return TCL_ERROR 38759 } else { 38760 var rc int32 = sqlite3_register_cksumvfs(tls, uintptr(0)) 38761 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38762 } 38763 return TCL_OK 38764 } 38765 38766 func test_unregister_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38767 if objc != 1 { 38768 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38769 return TCL_ERROR 38770 } else { 38771 var rc int32 = sqlite3_unregister_cksumvfs(tls) 38772 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38773 } 38774 return TCL_OK 38775 } 38776 38777 func test_decode_hexdb(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38778 bp := tls.Alloc(296) 38779 defer tls.Free(296) 38780 38781 var zIn uintptr = uintptr(0) 38782 var a uintptr = uintptr(0) 38783 *(*int32)(unsafe.Pointer(bp + 216)) = 0 38784 var lineno int32 = 0 38785 var i int32 38786 var iNext int32 38787 var iOffset int32 = 0 38788 38789 var rc int32 38790 38791 if objc != 2 { 38792 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19361) 38793 return TCL_ERROR 38794 } 38795 zIn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 38796 for i = 0; *(*int8)(unsafe.Pointer(zIn + uintptr(i))) != 0; i = iNext { 38797 lineno++ 38798 for iNext = i; *(*int8)(unsafe.Pointer(zIn + uintptr(iNext))) != 0 && int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) != '\n'; iNext++ { 38799 } 38800 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) == '\n' { 38801 iNext++ 38802 } 38803 for int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == ' ' || int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == '\t' { 38804 i++ 38805 } 38806 if a == uintptr(0) { 38807 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19367, libc.VaList(bp, bp+216, bp+220)) 38808 if rc != 2 { 38809 continue 38810 } 38811 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 { 38812 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19389, uintptr(0))) 38813 return TCL_ERROR 38814 } 38815 *(*int32)(unsafe.Pointer(bp + 216)) = (*(*int32)(unsafe.Pointer(bp + 216)) + *(*int32)(unsafe.Pointer(bp + 220)) - 1) & ^(*(*int32)(unsafe.Pointer(bp + 220)) - 1) 38816 if *(*int32)(unsafe.Pointer(bp + 216)) < 512 { 38817 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19410, uintptr(0))) 38818 return TCL_ERROR 38819 } 38820 a = libc.Xmalloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 216)))) 38821 if a == uintptr(0) { 38822 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+2069, uintptr(0))) 38823 return TCL_ERROR 38824 } 38825 libc.Xmemset(tls, a, 0, uint32(*(*int32)(unsafe.Pointer(bp + 216)))) 38826 continue 38827 } 38828 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19427, libc.VaList(bp+64, bp+224, bp+228)) 38829 if rc == 2 { 38830 iOffset = *(*int32)(unsafe.Pointer(bp + 228)) 38831 continue 38832 } 38833 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19447, 38834 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, 38835 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)) 38836 if rc == 17 { 38837 *(*int32)(unsafe.Pointer(bp + 228)) = iOffset + *(*int32)(unsafe.Pointer(bp + 224)) 38838 if *(*int32)(unsafe.Pointer(bp + 228))+16 <= *(*int32)(unsafe.Pointer(bp + 216)) { 38839 var ii int32 38840 for ii = 0; ii < 16; ii++ { 38841 *(*uint8)(unsafe.Pointer(a + uintptr(*(*int32)(unsafe.Pointer(bp + 228))+ii))) = uint8(*(*uint32)(unsafe.Pointer(bp + 232 + uintptr(ii)*4)) & uint32(0xff)) 38842 } 38843 } 38844 continue 38845 } 38846 } 38847 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, a, *(*int32)(unsafe.Pointer(bp + 216)))) 38848 libc.Xfree(tls, a) 38849 return TCL_OK 38850 } 38851 38852 type AutovacPageData1 = struct { 38853 Finterp uintptr 38854 FzScript uintptr 38855 } 38856 38857 type AutovacPageData = AutovacPageData1 38858 38859 func test_autovacuum_pages_callback(tls *libc.TLS, pClientData uintptr, zSchema uintptr, nFilePages uint32, nFreePages uint32, nBytePerPage uint32) uint32 { 38860 bp := tls.Alloc(340) 38861 defer tls.Free(340) 38862 38863 var pData uintptr = pClientData 38864 38865 tcl.XTcl_DStringInit(tls, bp+24) 38866 tcl.XTcl_DStringAppend(tls, bp+24, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, -1) 38867 tcl.XTcl_DStringAppendElement(tls, bp+24, zSchema) 38868 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+236, ts+17791, libc.VaList(bp, nFilePages)) 38869 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+236) 38870 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+236, ts+17791, libc.VaList(bp+8, nFreePages)) 38871 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+236) 38872 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+236, ts+17791, libc.VaList(bp+16, nBytePerPage)) 38873 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+236) 38874 tcl.XTcl_ResetResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp) 38875 tcl.XTcl_Eval(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+24)).Fstring) 38876 tcl.XTcl_DStringFree(tls, bp+24) 38877 *(*uint32)(unsafe.Pointer(bp + 336)) = nFreePages 38878 tcl.XTcl_GetIntFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp), bp+336) 38879 return *(*uint32)(unsafe.Pointer(bp + 336)) 38880 } 38881 38882 func test_autovacuum_pages(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38883 bp := tls.Alloc(1044) 38884 defer tls.Free(1044) 38885 38886 var pData uintptr 38887 38888 var rc int32 38889 var zScript uintptr 38890 if objc != 2 && objc != 3 { 38891 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19501) 38892 return TCL_ERROR 38893 } 38894 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+40) != 0 { 38895 return TCL_ERROR 38896 } 38897 if objc == 3 { 38898 zScript = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 38899 } else { 38900 zScript = uintptr(0) 38901 } 38902 if zScript != 0 { 38903 var nScript size_t = libc.Xstrlen(tls, zScript) 38904 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(AutovacPageData{}))+nScript+uint32(1))) 38905 if pData == uintptr(0) { 38906 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, uintptr(0))) 38907 return TCL_ERROR 38908 } 38909 (*AutovacPageData)(unsafe.Pointer(pData)).Finterp = interp 38910 (*AutovacPageData)(unsafe.Pointer(pData)).FzScript = pData + 1*8 38911 libc.Xmemcpy(tls, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, zScript, nScript+size_t(1)) 38912 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), *(*uintptr)(unsafe.Pointer(&struct { 38913 f func(*libc.TLS, uintptr, uintptr, uint32, uint32, uint32) uint32 38914 }{test_autovacuum_pages_callback})), 38915 pData, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 38916 } else { 38917 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), uintptr(0), uintptr(0), uintptr(0)) 38918 } 38919 if rc != 0 { 38920 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+44, 38921 ts+19513, libc.VaList(bp+16, rc)) 38922 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+44, uintptr(0))) 38923 return TCL_ERROR 38924 } 38925 return TCL_OK 38926 } 38927 38928 func Sqlitetest1_Init(tls *libc.TLS, interp uintptr) int32 { 38929 var i int32 38930 38931 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd1))/uint32(unsafe.Sizeof(struct { 38932 FzName uintptr 38933 FxProc uintptr 38934 }{})); i++ { 38935 tcl.XTcl_CreateCommand(tls, interp, aCmd1[i].FzName, aCmd1[i].FxProc, uintptr(0), uintptr(0)) 38936 } 38937 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd1))/uint32(unsafe.Sizeof(struct { 38938 FzName uintptr 38939 FxProc uintptr 38940 FclientData uintptr 38941 }{})); i++ { 38942 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd1[i].FzName, 38943 aObjCmd1[i].FxProc, aObjCmd1[i].FclientData, uintptr(0)) 38944 } 38945 tcl.XTcl_LinkVar(tls, interp, ts+19551, 38946 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_search_count)), TCL_LINK_INT) 38947 tcl.XTcl_LinkVar(tls, interp, ts+19571, 38948 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_found_count)), TCL_LINK_INT) 38949 tcl.XTcl_LinkVar(tls, interp, ts+19590, 38950 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sort_count)), TCL_LINK_INT) 38951 tcl.XTcl_LinkVar(tls, interp, ts+19608, 38952 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_max_blobsize)), TCL_LINK_INT) 38953 tcl.XTcl_LinkVar(tls, interp, ts+19629, 38954 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_like_count)), TCL_LINK_INT) 38955 tcl.XTcl_LinkVar(tls, interp, ts+19647, 38956 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_interrupt_count)), TCL_LINK_INT) 38957 tcl.XTcl_LinkVar(tls, interp, ts+19670, 38958 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_open_file_count)), TCL_LINK_INT) 38959 tcl.XTcl_LinkVar(tls, interp, ts+19693, 38960 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_current_time)), TCL_LINK_INT) 38961 tcl.XTcl_LinkVar(tls, interp, ts+19713, 38962 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_xferopt_count)), TCL_LINK_INT) 38963 tcl.XTcl_LinkVar(tls, interp, ts+19735, 38964 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_readdb_count)), TCL_LINK_INT) 38965 tcl.XTcl_LinkVar(tls, interp, ts+19762, 38966 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writedb_count)), TCL_LINK_INT) 38967 tcl.XTcl_LinkVar(tls, interp, ts+19790, 38968 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writej_count)), TCL_LINK_INT) 38969 tcl.XTcl_LinkVar(tls, interp, ts+19817, 38970 uintptr(unsafe.Pointer(&unaligned_string_counter)), TCL_LINK_INT) 38971 tcl.XTcl_LinkVar(tls, interp, ts+19842, 38972 uintptr(unsafe.Pointer(&pzNeededCollation)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 38973 { 38974 tcl.XTcl_LinkVar(tls, interp, ts+19871, 38975 uintptr(unsafe.Pointer(&query_plan)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 38976 38977 } 38978 tcl.XTcl_LinkVar(tls, interp, ts+19889, 38979 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_opentemp_count)), TCL_LINK_INT) 38980 tcl.XTcl_LinkVar(tls, interp, ts+19911, 38981 uintptr(unsafe.Pointer(&sqlite_static_bind_value)), TCL_LINK_STRING) 38982 tcl.XTcl_LinkVar(tls, interp, ts+19936, 38983 uintptr(unsafe.Pointer(&sqlite_static_bind_nbyte)), TCL_LINK_INT) 38984 tcl.XTcl_LinkVar(tls, interp, ts+19961, 38985 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_temp_directory)), TCL_LINK_STRING) 38986 tcl.XTcl_LinkVar(tls, interp, ts+19983, 38987 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_data_directory)), TCL_LINK_STRING) 38988 tcl.XTcl_LinkVar(tls, interp, ts+20005, 38989 uintptr(unsafe.Pointer(&bitmask_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 38990 tcl.XTcl_LinkVar(tls, interp, ts+20018, 38991 uintptr(unsafe.Pointer(&longdouble_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 38992 tcl.XTcl_LinkVar(tls, interp, ts+20034, 38993 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sync_count)), TCL_LINK_INT) 38994 tcl.XTcl_LinkVar(tls, interp, ts+20052, 38995 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_fullsync_count)), TCL_LINK_INT) 38996 return TCL_OK 38997 } 38998 38999 var iZero int32 = 0 39000 var aCmd1 = [39]struct { 39001 FzName uintptr 39002 FxProc uintptr 39003 }{ 39004 {FzName: ts + 20074, FxProc: 0}, 39005 {FzName: ts + 20083, FxProc: 0}, 39006 {FzName: ts + 20092, FxProc: 0}, 39007 {FzName: ts + 20112, FxProc: 0}, 39008 {FzName: ts + 20134, FxProc: 0}, 39009 {FzName: ts + 20155, FxProc: 0}, 39010 {FzName: ts + 20175, FxProc: 0}, 39011 {FzName: ts + 20196, FxProc: 0}, 39012 {FzName: ts + 20220, FxProc: 0}, 39013 {FzName: ts + 20243, FxProc: 0}, 39014 {FzName: ts + 20266, FxProc: 0}, 39015 {FzName: ts + 20292, FxProc: 0}, 39016 {FzName: ts + 20315, FxProc: 0}, 39017 {FzName: ts + 20338, FxProc: 0}, 39018 {FzName: ts + 20359, FxProc: 0}, 39019 {FzName: ts + 20385, FxProc: 0}, 39020 {FzName: ts + 20405, FxProc: 0}, 39021 {FzName: ts + 20422, FxProc: 0}, 39022 {FzName: ts + 20435, FxProc: 0}, 39023 {FzName: ts + 20451, FxProc: 0}, 39024 {FzName: ts + 20476, FxProc: 0}, 39025 {FzName: ts + 20490, FxProc: 0}, 39026 {FzName: ts + 20507, FxProc: 0}, 39027 {FzName: ts + 20531, FxProc: 0}, 39028 {FzName: ts + 20556, FxProc: 0}, 39029 {FzName: ts + 20577, FxProc: 0}, 39030 {FzName: ts + 20607, FxProc: 0}, 39031 {FzName: ts + 20620, FxProc: 0}, 39032 {FzName: ts + 20632, FxProc: 0}, 39033 {FzName: ts + 20643, FxProc: 0}, 39034 {FzName: ts + 20655, FxProc: 0}, 39035 {FzName: ts + 20669, FxProc: 0}, 39036 {FzName: ts + 20687, FxProc: 0}, 39037 {FzName: ts + 20710, FxProc: 0}, 39038 {FzName: ts + 20734, FxProc: 0}, 39039 {FzName: ts + 20757, FxProc: 0}, 39040 {FzName: ts + 20778, FxProc: 0}, 39041 {FzName: ts + 20785, FxProc: 0}, 39042 {FzName: ts + 20800, FxProc: 0}, 39043 } 39044 var aObjCmd1 = [165]struct { 39045 FzName uintptr 39046 FxProc uintptr 39047 FclientData uintptr 39048 }{ 39049 {FzName: ts + 20823, FxProc: 0}, 39050 {FzName: ts + 20841, FxProc: 0}, 39051 {FzName: ts + 20859, FxProc: 0, FclientData: 0}, 39052 {FzName: ts + 20872, FxProc: 0}, 39053 {FzName: ts + 20893, FxProc: 0}, 39054 {FzName: ts + 20920, FxProc: 0}, 39055 {FzName: ts + 20934, FxProc: 0}, 39056 {FzName: ts + 20950, FxProc: 0}, 39057 {FzName: ts + 20967, FxProc: 0}, 39058 {FzName: ts + 20982, FxProc: 0}, 39059 {FzName: ts + 20999, FxProc: 0}, 39060 {FzName: ts + 21021, FxProc: 0}, 39061 {FzName: ts + 21045, FxProc: 0}, 39062 {FzName: ts + 21064, FxProc: 0}, 39063 {FzName: ts + 21084, FxProc: 0}, 39064 {FzName: ts + 21102, FxProc: 0}, 39065 {FzName: ts + 21120, FxProc: 0}, 39066 {FzName: ts + 21140, FxProc: 0}, 39067 {FzName: ts + 21158, FxProc: 0}, 39068 {FzName: ts + 21189, FxProc: 0}, 39069 {FzName: ts + 21223, FxProc: 0}, 39070 {FzName: ts + 21243, FxProc: 0}, 39071 {FzName: ts + 21272, FxProc: 0}, 39072 {FzName: ts + 21300, FxProc: 0}, 39073 {FzName: ts + 21329, FxProc: 0}, 39074 {FzName: ts + 21352, FxProc: 0}, 39075 {FzName: ts + 21366, FxProc: 0}, 39076 {FzName: ts + 21382, FxProc: 0}, 39077 {FzName: ts + 21407, FxProc: 0}, 39078 {FzName: ts + 21422, FxProc: 0}, 39079 {FzName: ts + 21443, FxProc: 0}, 39080 {FzName: ts + 21460, FxProc: 0}, 39081 {FzName: ts + 21473, FxProc: 0}, 39082 {FzName: ts + 21488, FxProc: 0}, 39083 {FzName: ts + 21504, FxProc: 0}, 39084 {FzName: ts + 21523, FxProc: 0}, 39085 {FzName: ts + 21541, FxProc: 0}, 39086 {FzName: ts + 21557, FxProc: 0}, 39087 {FzName: ts + 21575, FxProc: 0}, 39088 {FzName: ts + 21594, FxProc: 0}, 39089 {FzName: ts + 21613, FxProc: 0}, 39090 {FzName: ts + 21637, FxProc: 0}, 39091 {FzName: ts + 21658, FxProc: 0}, 39092 {FzName: ts + 21675, FxProc: 0}, 39093 {FzName: ts + 21695, FxProc: 0}, 39094 {FzName: ts + 21709, FxProc: 0}, 39095 {FzName: ts + 21725, FxProc: 0}, 39096 {FzName: ts + 21751, FxProc: 0}, 39097 {FzName: ts + 21767, FxProc: 0}, 39098 {FzName: ts + 21780, FxProc: 0}, 39099 {FzName: ts + 21792, FxProc: 0}, 39100 {FzName: ts + 21813, FxProc: 0}, 39101 {FzName: ts + 21831, FxProc: 0}, 39102 {FzName: ts + 21853, FxProc: 0}, 39103 {FzName: ts + 21876, FxProc: 0}, 39104 {FzName: ts + 21894, FxProc: 0}, 39105 {FzName: ts + 21912, FxProc: 0}, 39106 {FzName: ts + 21935, FxProc: 0}, 39107 {FzName: ts + 21961, FxProc: 0}, 39108 {FzName: ts + 21983, FxProc: 0}, 39109 {FzName: ts + 22004, FxProc: 0}, 39110 {FzName: ts + 22024, FxProc: 0}, 39111 {FzName: ts + 22044, FxProc: 0}, 39112 {FzName: ts + 22068, FxProc: 0}, 39113 {FzName: ts + 22094, FxProc: 0}, 39114 {FzName: ts + 22120, FxProc: 0}, 39115 {FzName: ts + 22143, FxProc: 0}, 39116 {FzName: ts + 22167, FxProc: 0}, 39117 {FzName: ts + 22190, FxProc: 0}, 39118 {FzName: ts + 22220, FxProc: 0}, 39119 {FzName: ts + 22250, FxProc: 0}, 39120 {FzName: ts + 22264, FxProc: 0}, 39121 {FzName: ts + 22292, FxProc: 0}, 39122 {FzName: ts + 22308, FxProc: 0}, 39123 {FzName: ts + 22327, FxProc: 0}, 39124 {FzName: ts + 22344, FxProc: 0}, 39125 {FzName: ts + 22354, FxProc: 0}, 39126 {FzName: ts + 22374, FxProc: 0}, 39127 {FzName: ts + 22397, FxProc: 0}, 39128 {FzName: ts + 22421, FxProc: 0}, 39129 {FzName: ts + 22442, FxProc: 0}, 39130 {FzName: ts + 22454, FxProc: 0}, 39131 {FzName: ts + 22475, FxProc: 0}, 39132 {FzName: ts + 22494, FxProc: 0}, 39133 {FzName: ts + 22514, FxProc: 0}, 39134 {FzName: ts + 22534, FxProc: 0}, 39135 {FzName: ts + 22556, FxProc: 0}, 39136 {FzName: ts + 22577, FxProc: 0, FclientData: 0}, 39137 {FzName: ts + 22597, FxProc: 0, FclientData: 0}, 39138 {FzName: ts + 22617, FxProc: 0, FclientData: 0}, 39139 {FzName: ts + 22636, FxProc: 0, FclientData: 0}, 39140 {FzName: ts + 22657, FxProc: 0, FclientData: 0}, 39141 {FzName: ts + 22681, FxProc: 0, FclientData: 0}, 39142 {FzName: ts + 22710, FxProc: 0, FclientData: 0}, 39143 {FzName: ts + 22736, FxProc: 0, FclientData: 0}, 39144 {FzName: ts + 22763, FxProc: 0, FclientData: 0}, 39145 {FzName: ts + 22786, FxProc: 0, FclientData: 0}, 39146 {FzName: ts + 22808, FxProc: 0, FclientData: 0}, 39147 {FzName: ts + 22830, FxProc: 0}, 39148 {FzName: ts + 22860, FxProc: 0, FclientData: 0}, 39149 {FzName: ts + 22886, 39150 FxProc: 0, FclientData: 0}, 39151 {FzName: ts + 22917, FxProc: 0, FclientData: 0}, 39152 {FzName: ts + 22945, FxProc: 0, FclientData: 0}, 39153 {FzName: ts + 22974, FxProc: 0}, 39154 {FzName: ts + 23002, FxProc: 0}, 39155 {FzName: ts + 23025, FxProc: 0}, 39156 {FzName: ts + 23043, FxProc: 0}, 39157 {FzName: ts + 23059, FxProc: 0}, 39158 {FzName: ts + 23077, FxProc: 0}, 39159 {FzName: ts + 23096, FxProc: 0}, 39160 {FzName: ts + 23115, FxProc: 0}, 39161 {FzName: ts + 23133, FxProc: 0}, 39162 {FzName: ts + 23161, FxProc: 0}, 39163 {FzName: ts + 23189, FxProc: 0}, 39164 {FzName: ts + 23217, FxProc: 0}, 39165 {FzName: ts + 23244, FxProc: 0}, 39166 {FzName: ts + 23270, FxProc: 0}, 39167 {FzName: ts + 23295, FxProc: 0}, 39168 {FzName: ts + 23328, FxProc: 0}, 39169 {FzName: ts + 23349, FxProc: 0}, 39170 {FzName: ts + 23375, FxProc: 0}, 39171 {FzName: ts + 23401, FxProc: 0}, 39172 {FzName: ts + 23430, FxProc: 0}, 39173 {FzName: ts + 23447, FxProc: 0}, 39174 {FzName: ts + 23474, FxProc: 0}, 39175 {FzName: ts + 23491, FxProc: 0}, 39176 {FzName: ts + 23515, FxProc: 0}, 39177 {FzName: ts + 23533, FxProc: 0}, 39178 {FzName: ts + 23559, FxProc: 0}, 39179 {FzName: ts + 23579, FxProc: 0}, 39180 {FzName: ts + 23597, FxProc: 0}, 39181 {FzName: ts + 23625, FxProc: 0}, 39182 {FzName: ts + 23653, FxProc: 0}, 39183 {FzName: ts + 23679, FxProc: 0}, 39184 {FzName: ts + 23709, FxProc: 0}, 39185 {FzName: ts + 23729, FxProc: 0}, 39186 {FzName: ts + 23742, FxProc: 0}, 39187 {FzName: ts + 23764, FxProc: 0}, 39188 {FzName: ts + 23787, FxProc: 0}, 39189 {FzName: ts + 23813, FxProc: 0}, 39190 {FzName: ts + 23840, FxProc: 0}, 39191 {FzName: ts + 23857, FxProc: 0}, 39192 {FzName: ts + 23882, FxProc: 0}, 39193 {FzName: ts + 23903, FxProc: 0}, 39194 {FzName: ts + 23913, FxProc: 0}, 39195 {FzName: ts + 23935, FxProc: 0}, 39196 {FzName: ts + 23956, FxProc: 0}, 39197 {FzName: ts + 23981, FxProc: 0}, 39198 {FzName: ts + 24004, FxProc: 0}, 39199 {FzName: ts + 24025, FxProc: 0}, 39200 {FzName: ts + 24047, FxProc: 0}, 39201 {FzName: ts + 24069, FxProc: 0}, 39202 {FzName: ts + 24090, FxProc: 0}, 39203 {FzName: ts + 24115, FxProc: 0}, 39204 {FzName: ts + 24141, FxProc: 0}, 39205 {FzName: ts + 24168, FxProc: 0}, 39206 {FzName: ts + 24194, FxProc: 0}, 39207 {FzName: ts + 24218, FxProc: 0}, 39208 {FzName: ts + 24237, FxProc: 0}, 39209 {FzName: ts + 24255, FxProc: 0}, 39210 {FzName: ts + 24280, FxProc: 0}, 39211 {FzName: ts + 24305, FxProc: 0}, 39212 {FzName: ts + 24318, FxProc: 0}, 39213 {FzName: ts + 24332, FxProc: 0}, 39214 {FzName: ts + 24358, FxProc: 0}, 39215 } 39216 var bitmask_size int32 = int32(uint32(unsafe.Sizeof(Bitmask(0))) * uint32(8)) 39217 var longdouble_size int32 = int32(unsafe.Sizeof(float64(0))) 39218 var query_plan uintptr = ts + 24386 39219 39220 var test_pagesize int32 = 1024 39221 39222 func pager_test_reiniter(tls *libc.TLS, pNotUsed uintptr) { 39223 return 39224 } 39225 39226 func pager_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39227 bp := tls.Alloc(184) 39228 defer tls.Free(184) 39229 39230 var rc int32 39231 39232 if argc != 3 { 39233 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39234 ts+24412, 0)) 39235 return TCL_ERROR 39236 } 39237 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+72) != 0 { 39238 return TCL_ERROR 39239 } 39240 rc = sqlite3.Xsqlite3PagerOpen(tls, sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)), bp+76, *(*uintptr)(unsafe.Pointer(argv + 1*4)), 0, 0, 39241 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB, 39242 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{pager_test_reiniter}))) 39243 if rc != SQLITE_OK { 39244 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39245 return TCL_ERROR 39246 } 39247 sqlite3.Xsqlite3PagerSetCachesize(tls, *(*uintptr)(unsafe.Pointer(bp + 76)), *(*int32)(unsafe.Pointer(bp + 72))) 39248 *(*u32)(unsafe.Pointer(bp + 80)) = u32(test_pagesize) 39249 sqlite3.Xsqlite3PagerSetPagesize(tls, *(*uintptr)(unsafe.Pointer(bp + 76)), bp+80, -1) 39250 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+84, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 76)))) 39251 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+84, 0)) 39252 return TCL_OK 39253 } 39254 39255 func pager_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39256 bp := tls.Alloc(48) 39257 defer tls.Free(48) 39258 39259 var pPager uintptr 39260 var rc int32 39261 if argc != 2 { 39262 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39263 ts+24430, 0)) 39264 return TCL_ERROR 39265 } 39266 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39267 rc = sqlite3.Xsqlite3PagerClose(tls, pPager, uintptr(0)) 39268 if rc != SQLITE_OK { 39269 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39270 return TCL_ERROR 39271 } 39272 return TCL_OK 39273 } 39274 39275 func pager_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39276 bp := tls.Alloc(48) 39277 defer tls.Free(48) 39278 39279 var pPager uintptr 39280 var rc int32 39281 if argc != 2 { 39282 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39283 ts+24430, 0)) 39284 return TCL_ERROR 39285 } 39286 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39287 rc = sqlite3.Xsqlite3PagerRollback(tls, pPager) 39288 if rc != SQLITE_OK { 39289 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39290 return TCL_ERROR 39291 } 39292 return TCL_OK 39293 } 39294 39295 func pager_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39296 bp := tls.Alloc(64) 39297 defer tls.Free(64) 39298 39299 var pPager uintptr 39300 var rc int32 39301 if argc != 2 { 39302 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39303 ts+24430, 0)) 39304 return TCL_ERROR 39305 } 39306 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39307 rc = sqlite3.Xsqlite3PagerCommitPhaseOne(tls, pPager, uintptr(0), 0) 39308 if rc != SQLITE_OK { 39309 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39310 return TCL_ERROR 39311 } 39312 rc = sqlite3.Xsqlite3PagerCommitPhaseTwo(tls, pPager) 39313 if rc != SQLITE_OK { 39314 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39315 return TCL_ERROR 39316 } 39317 return TCL_OK 39318 } 39319 39320 func pager_stmt_begin(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39321 bp := tls.Alloc(48) 39322 defer tls.Free(48) 39323 39324 var pPager uintptr 39325 var rc int32 39326 if argc != 2 { 39327 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39328 ts+24430, 0)) 39329 return TCL_ERROR 39330 } 39331 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39332 rc = sqlite3.Xsqlite3PagerOpenSavepoint(tls, pPager, 1) 39333 if rc != SQLITE_OK { 39334 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39335 return TCL_ERROR 39336 } 39337 return TCL_OK 39338 } 39339 39340 func pager_stmt_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39341 bp := tls.Alloc(48) 39342 defer tls.Free(48) 39343 39344 var pPager uintptr 39345 var rc int32 39346 if argc != 2 { 39347 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39348 ts+24430, 0)) 39349 return TCL_ERROR 39350 } 39351 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39352 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_ROLLBACK, 0) 39353 sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 39354 if rc != SQLITE_OK { 39355 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39356 return TCL_ERROR 39357 } 39358 return TCL_OK 39359 } 39360 39361 func pager_stmt_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39362 bp := tls.Alloc(48) 39363 defer tls.Free(48) 39364 39365 var pPager uintptr 39366 var rc int32 39367 if argc != 2 { 39368 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39369 ts+24430, 0)) 39370 return TCL_ERROR 39371 } 39372 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39373 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 39374 if rc != SQLITE_OK { 39375 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39376 return TCL_ERROR 39377 } 39378 return TCL_OK 39379 } 39380 39381 func pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39382 bp := tls.Alloc(140) 39383 defer tls.Free(140) 39384 39385 var pPager uintptr 39386 var i int32 39387 var a uintptr 39388 if argc != 2 { 39389 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39390 ts+24430, 0)) 39391 return TCL_ERROR 39392 } 39393 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39394 a = sqlite3.Xsqlite3PagerStats(tls, pPager) 39395 for i = 0; i < 9; i++ { 39396 tcl.XTcl_AppendElement(tls, interp, zName[i]) 39397 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 39398 tcl.XTcl_AppendElement(tls, interp, bp+40) 39399 } 39400 return TCL_OK 39401 } 39402 39403 var zName = [9]uintptr{ 39404 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 39405 ts + 24448, ts + 24452, ts + 24457, 39406 } 39407 39408 func pager_pagecount(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39409 bp := tls.Alloc(160) 39410 defer tls.Free(160) 39411 39412 var pPager uintptr 39413 39414 if argc != 2 { 39415 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39416 ts+24430, 0)) 39417 return TCL_ERROR 39418 } 39419 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39420 sqlite3.Xsqlite3PagerPagecount(tls, pPager, bp+56) 39421 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 56)))) 39422 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 39423 return TCL_OK 39424 } 39425 39426 func page_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39427 bp := tls.Alloc(180) 39428 defer tls.Free(180) 39429 39430 var pPager uintptr 39431 39432 *(*uintptr)(unsafe.Pointer(bp + 76)) = uintptr(0) 39433 39434 var rc int32 39435 if argc != 3 { 39436 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39437 ts+24462, 0)) 39438 return TCL_ERROR 39439 } 39440 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39441 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+72) != 0 { 39442 return TCL_ERROR 39443 } 39444 rc = sqlite3.Xsqlite3PagerSharedLock(tls, pPager) 39445 if rc == SQLITE_OK { 39446 rc = sqlite3.Xsqlite3PagerGet(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 72))), bp+76, 0) 39447 } 39448 if rc != SQLITE_OK { 39449 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39450 return TCL_ERROR 39451 } 39452 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+80, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 76)))) 39453 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 39454 return TCL_OK 39455 } 39456 39457 func page_lookup(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39458 bp := tls.Alloc(160) 39459 defer tls.Free(160) 39460 39461 var pPager uintptr 39462 39463 var pPage uintptr 39464 39465 if argc != 3 { 39466 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39467 ts+24462, 0)) 39468 return TCL_ERROR 39469 } 39470 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39471 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+56) != 0 { 39472 return TCL_ERROR 39473 } 39474 pPage = sqlite3.Xsqlite3PagerLookup(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 56)))) 39475 if pPage != 0 { 39476 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+9889, libc.VaList(bp+32, pPage)) 39477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 39478 } 39479 return TCL_OK 39480 } 39481 39482 func pager_truncate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39483 bp := tls.Alloc(36) 39484 defer tls.Free(36) 39485 39486 var pPager uintptr 39487 39488 if argc != 3 { 39489 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39490 ts+24462, 0)) 39491 return TCL_ERROR 39492 } 39493 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39494 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+32) != 0 { 39495 return TCL_ERROR 39496 } 39497 sqlite3.Xsqlite3PagerTruncateImage(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 32)))) 39498 return TCL_OK 39499 } 39500 39501 func page_unref(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39502 bp := tls.Alloc(32) 39503 defer tls.Free(32) 39504 39505 var pPage uintptr 39506 if argc != 2 { 39507 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39508 ts+24472, 0)) 39509 return TCL_ERROR 39510 } 39511 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39512 sqlite3.Xsqlite3PagerUnref(tls, pPage) 39513 return TCL_OK 39514 } 39515 39516 func page_read(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39517 bp := tls.Alloc(148) 39518 defer tls.Free(148) 39519 39520 var pPage uintptr 39521 if argc != 2 { 39522 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39523 ts+24472, 0)) 39524 return TCL_ERROR 39525 } 39526 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39527 libc.Xmemcpy(tls, bp+48, sqlite3.Xsqlite3PagerGetData(tls, pPage), uint32(unsafe.Sizeof([100]int8{}))) 39528 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 39529 return TCL_OK 39530 } 39531 39532 func page_number(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39533 bp := tls.Alloc(156) 39534 defer tls.Free(156) 39535 39536 var pPage uintptr 39537 if argc != 2 { 39538 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39539 ts+24472, 0)) 39540 return TCL_ERROR 39541 } 39542 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39543 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+56, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3PagerPagenumber(tls, pPage))) 39544 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 39545 return TCL_OK 39546 } 39547 39548 func page_write(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39549 bp := tls.Alloc(48) 39550 defer tls.Free(48) 39551 39552 var pPage uintptr 39553 var pData uintptr 39554 var rc int32 39555 if argc != 3 { 39556 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39557 ts+24479, 0)) 39558 return TCL_ERROR 39559 } 39560 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39561 rc = sqlite3.Xsqlite3PagerWrite(tls, pPage) 39562 if rc != SQLITE_OK { 39563 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39564 return TCL_ERROR 39565 } 39566 pData = sqlite3.Xsqlite3PagerGetData(tls, pPage) 39567 libc.Xstrncpy(tls, pData, *(*uintptr)(unsafe.Pointer(argv + 2*4)), uint32(test_pagesize-1)) 39568 *(*int8)(unsafe.Pointer(pData + uintptr(test_pagesize-1))) = int8(0) 39569 return TCL_OK 39570 } 39571 39572 func fake_big_file(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39573 bp := tls.Alloc(88) 39574 defer tls.Free(88) 39575 39576 var pVfs uintptr 39577 *(*uintptr)(unsafe.Pointer(bp + 84)) = uintptr(0) 39578 var rc int32 39579 39580 var offset i64 39581 var zFile uintptr 39582 var nFile int32 39583 if argc != 3 { 39584 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39585 ts+24491, 0)) 39586 return TCL_ERROR 39587 } 39588 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+80) != 0 { 39589 return TCL_ERROR 39590 } 39591 39592 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39593 nFile = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 39594 zFile = sqlite3.Xsqlite3_malloc(tls, nFile+2) 39595 if zFile == uintptr(0) { 39596 return TCL_ERROR 39597 } 39598 libc.Xmemcpy(tls, zFile, *(*uintptr)(unsafe.Pointer(argv + 2*4)), uint32(nFile+1)) 39599 *(*int8)(unsafe.Pointer(zFile + uintptr(nFile+1))) = int8(0) 39600 rc = sqlite3.Xsqlite3OsOpenMalloc(tls, pVfs, zFile, bp+84, 39601 SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB, uintptr(0)) 39602 if rc != 0 { 39603 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+24510, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39604 sqlite3.Xsqlite3_free(tls, zFile) 39605 return TCL_ERROR 39606 } 39607 offset = i64(*(*int32)(unsafe.Pointer(bp + 80))) 39608 offset = offset * int64(1024*1024) 39609 rc = sqlite3.Xsqlite3OsWrite(tls, *(*uintptr)(unsafe.Pointer(bp + 84)), ts+24524, 14, offset) 39610 sqlite3.Xsqlite3OsCloseFree(tls, *(*uintptr)(unsafe.Pointer(bp + 84))) 39611 sqlite3.Xsqlite3_free(tls, zFile) 39612 if rc != 0 { 39613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, ts+24538, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39614 return TCL_ERROR 39615 } 39616 return TCL_OK 39617 } 39618 39619 func testPendingByte(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39620 bp := tls.Alloc(44) 39621 defer tls.Free(44) 39622 39623 var rc int32 39624 if argc != 2 { 39625 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39626 ts+24553, uintptr(0))) 39627 return TCL_ERROR 39628 } 39629 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+40) != 0 { 39630 return TCL_ERROR 39631 } 39632 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PENDING_BYTE, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 40)))) 39633 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39634 return TCL_OK 39635 } 39636 39637 var faultSimInterp uintptr = uintptr(0) 39638 var faultSimScriptSize int32 = 0 39639 var faultSimScript uintptr 39640 39641 func faultSimCallback(tls *libc.TLS, x int32) int32 { 39642 bp := tls.Alloc(38) 39643 defer tls.Free(38) 39644 39645 var i int32 39646 var isNeg int32 39647 var rc int32 39648 if x == 0 { 39649 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), ts+14193, uint32(2)) 39650 } else { 39651 if x < 0 { 39652 isNeg = 1 39653 x = -x 39654 } else { 39655 isNeg = 0 39656 } 39657 *(*int8)(unsafe.Pointer(bp + 8 + 29)) = int8(0) 39658 i = int32(uint32(unsafe.Sizeof([30]int8{})) - uint32(2)) 39659 __1: 39660 if !(i > 0 && x > 0) { 39661 goto __3 39662 } 39663 { 39664 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8(x%10 + '0') 39665 39666 } 39667 goto __2 39668 __2: 39669 i-- 39670 x = x / 10 39671 goto __1 39672 goto __3 39673 __3: 39674 ; 39675 if isNeg != 0 { 39676 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(libc.PostDecInt32(&i, 1)))) = int8('-') 39677 } 39678 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), bp+8+uintptr(i)+uintptr(1), uint32(unsafe.Sizeof([30]int8{}))-uint32(i)) 39679 } 39680 rc = tcl.XTcl_Eval(tls, faultSimInterp, faultSimScript) 39681 if rc != 0 { 39682 libc.Xfprintf(tls, libc.Xstderr, ts+24568, libc.VaList(bp, faultSimScript)) 39683 rc = SQLITE_ERROR 39684 } else { 39685 rc = libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, faultSimInterp)) 39686 } 39687 tcl.XTcl_ResetResult(tls, faultSimInterp) 39688 return rc 39689 } 39690 39691 func faultInstallCmd(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39692 bp := tls.Alloc(64) 39693 defer tls.Free(64) 39694 39695 var zScript uintptr 39696 var nScript int32 39697 var rc int32 39698 if argc != 1 && argc != 2 { 39699 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39700 ts+24604, uintptr(0))) 39701 } 39702 if argc == 2 { 39703 zScript = *(*uintptr)(unsafe.Pointer(argv + 1*4)) 39704 } else { 39705 zScript = ts + 584 39706 } 39707 nScript = int32(libc.Xstrlen(tls, zScript)) 39708 if faultSimScript != 0 { 39709 libc.Xfree(tls, faultSimScript) 39710 faultSimScript = uintptr(0) 39711 } 39712 if nScript == 0 { 39713 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_FAULT_INSTALL, libc.VaList(bp+32, 0)) 39714 } else { 39715 faultSimScript = libc.Xmalloc(tls, uint32(nScript+100)) 39716 if faultSimScript == uintptr(0) { 39717 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2069, uintptr(0))) 39718 return SQLITE_ERROR 39719 } 39720 libc.Xmemcpy(tls, faultSimScript, zScript, uint32(nScript)) 39721 *(*int8)(unsafe.Pointer(faultSimScript + uintptr(nScript))) = int8(' ') 39722 faultSimScriptSize = nScript + 1 39723 faultSimInterp = interp 39724 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})))) 39725 } 39726 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39727 return SQLITE_OK 39728 } 39729 39730 func testBitvecBuiltinTest(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39731 bp := tls.Alloc(452) 39732 defer tls.Free(452) 39733 39734 var rc int32 39735 var nProg int32 = 0 39736 39737 var z uintptr 39738 if argc != 3 { 39739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39740 ts+24613, uintptr(0))) 39741 } 39742 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+48) != 0 { 39743 return TCL_ERROR 39744 } 39745 z = *(*uintptr)(unsafe.Pointer(argv + 2*4)) 39746 for nProg < 99 && *(*int8)(unsafe.Pointer(z)) != 0 { 39747 for *(*int8)(unsafe.Pointer(z)) != 0 && !(int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0) { 39748 z++ 39749 } 39750 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 39751 break 39752 } 39753 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(libc.PostIncInt32(&nProg, 1))*4)) = libc.Xatoi(tls, z) 39754 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 39755 z++ 39756 } 39757 } 39758 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(nProg)*4)) = 0 39759 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BITVEC_TEST, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 48)), bp+52)) 39760 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39761 return TCL_OK 39762 } 39763 39764 func Sqlitetest2_Init(tls *libc.TLS, interp uintptr) int32 { 39765 var i int32 39766 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd2))/uint32(unsafe.Sizeof(struct { 39767 FzName uintptr 39768 FxProc uintptr 39769 }{})); i++ { 39770 tcl.XTcl_CreateCommand(tls, interp, aCmd2[i].FzName, aCmd2[i].FxProc, uintptr(0), uintptr(0)) 39771 } 39772 tcl.XTcl_LinkVar(tls, interp, ts+24628, 39773 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_pending)), TCL_LINK_INT) 39774 tcl.XTcl_LinkVar(tls, interp, ts+24652, 39775 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_persist)), TCL_LINK_INT) 39776 tcl.XTcl_LinkVar(tls, interp, ts+24676, 39777 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hit)), TCL_LINK_INT) 39778 tcl.XTcl_LinkVar(tls, interp, ts+24696, 39779 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hardhit)), TCL_LINK_INT) 39780 tcl.XTcl_LinkVar(tls, interp, ts+24720, 39781 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull_pending)), TCL_LINK_INT) 39782 tcl.XTcl_LinkVar(tls, interp, ts+24744, 39783 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull)), TCL_LINK_INT) 39784 tcl.XTcl_LinkVar(tls, interp, ts+24760, 39785 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3PendingByte)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39786 return TCL_OK 39787 } 39788 39789 var aCmd2 = [20]struct { 39790 FzName uintptr 39791 FxProc uintptr 39792 }{ 39793 {FzName: ts + 24780, FxProc: 0}, 39794 {FzName: ts + 24791, FxProc: 0}, 39795 {FzName: ts + 24803, FxProc: 0}, 39796 {FzName: ts + 24816, FxProc: 0}, 39797 {FzName: ts + 24831, FxProc: 0}, 39798 {FzName: ts + 24848, FxProc: 0}, 39799 {FzName: ts + 24866, FxProc: 0}, 39800 {FzName: ts + 24886, FxProc: 0}, 39801 {FzName: ts + 24898, FxProc: 0}, 39802 {FzName: ts + 24914, FxProc: 0}, 39803 {FzName: ts + 24923, FxProc: 0}, 39804 {FzName: ts + 24935, FxProc: 0}, 39805 {FzName: ts + 24946, FxProc: 0}, 39806 {FzName: ts + 24956, FxProc: 0}, 39807 {FzName: ts + 24967, FxProc: 0}, 39808 {FzName: ts + 24979, FxProc: 0}, 39809 {FzName: ts + 24994, FxProc: 0}, 39810 {FzName: ts + 25008, FxProc: 0}, 39811 {FzName: ts + 25033, FxProc: 0}, 39812 {FzName: ts + 25067, FxProc: 0}, 39813 } 39814 39815 type Btree = Btree1 39816 type BtCursor = BtCursor1 39817 type BtShared = BtShared1 39818 39819 type MemPage1 = struct { 39820 FisInit u8 39821 FintKey u8 39822 FintKeyLeaf u8 39823 F__ccgo_pad1 [1]byte 39824 Fpgno Pgno 39825 Fleaf u8 39826 FhdrOffset u8 39827 FchildPtrSize u8 39828 Fmax1bytePayload u8 39829 FnOverflow u8 39830 F__ccgo_pad2 [1]byte 39831 FmaxLocal u16 39832 FminLocal u16 39833 FcellOffset u16 39834 FnFree int32 39835 FnCell u16 39836 FmaskPage u16 39837 FaiOvfl [4]u16 39838 FapOvfl [4]uintptr 39839 FpBt uintptr 39840 FaData uintptr 39841 FaDataEnd uintptr 39842 FaCellIdx uintptr 39843 FaDataOfst uintptr 39844 FpDbPage uintptr 39845 FxCellSize uintptr 39846 FxParseCell uintptr 39847 } 39848 39849 type MemPage = MemPage1 39850 type BtLock1 = struct { 39851 FpBtree uintptr 39852 FiTable Pgno 39853 FeLock u8 39854 F__ccgo_pad1 [3]byte 39855 FpNext uintptr 39856 } 39857 39858 type BtLock = BtLock1 39859 type CellInfo1 = struct { 39860 FnKey i64 39861 FpPayload uintptr 39862 FnPayload u32 39863 FnLocal u16 39864 FnSize u16 39865 } 39866 39867 type CellInfo = CellInfo1 39868 39869 type IntegrityCk1 = struct { 39870 FpBt uintptr 39871 FpPager uintptr 39872 FaPgRef uintptr 39873 FnPage Pgno 39874 FmxErr int32 39875 FnErr int32 39876 FbOomFault int32 39877 FzPfx uintptr 39878 Fv1 Pgno 39879 Fv2 int32 39880 FerrMsg StrAccum 39881 Fheap uintptr 39882 Fdb uintptr 39883 } 39884 39885 type IntegrityCk = IntegrityCk1 39886 39887 var sDb sqlite31 39888 var nRefSqlite3 int32 = 0 39889 39890 func btree_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39891 bp := tls.Alloc(180) 39892 defer tls.Free(180) 39893 39894 var rc int32 39895 39896 var n int32 39897 var zFilename uintptr 39898 if argc != 3 { 39899 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39900 ts+25102, 0)) 39901 return TCL_ERROR 39902 } 39903 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+72) != 0 { 39904 return TCL_ERROR 39905 } 39906 nRefSqlite3++ 39907 if nRefSqlite3 == 1 { 39908 sDb.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39909 sDb.Fmutex = sqlite3.Xsqlite3MutexAlloc(tls, SQLITE_MUTEX_RECURSIVE) 39910 sqlite3.Xsqlite3_mutex_enter(tls, sDb.Fmutex) 39911 } 39912 n = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)))) 39913 zFilename = sqlite3.Xsqlite3_malloc(tls, n+2) 39914 if zFilename == uintptr(0) { 39915 return TCL_ERROR 39916 } 39917 libc.Xmemcpy(tls, zFilename, *(*uintptr)(unsafe.Pointer(argv + 1*4)), uint32(n+1)) 39918 *(*int8)(unsafe.Pointer(zFilename + uintptr(n+1))) = int8(0) 39919 rc = sqlite3.Xsqlite3BtreeOpen(tls, sDb.FpVfs, zFilename, uintptr(unsafe.Pointer(&sDb)), bp+76, 0, 39920 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB) 39921 sqlite3.Xsqlite3_free(tls, zFilename) 39922 if rc != SQLITE_OK { 39923 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39924 return TCL_ERROR 39925 } 39926 sqlite3.Xsqlite3BtreeSetCacheSize(tls, *(*uintptr)(unsafe.Pointer(bp + 76)), *(*int32)(unsafe.Pointer(bp + 72))) 39927 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+80, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 76)))) 39928 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 39929 return TCL_OK 39930 } 39931 39932 func btree_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39933 bp := tls.Alloc(48) 39934 defer tls.Free(48) 39935 39936 var pBt uintptr 39937 var rc int32 39938 if argc != 2 { 39939 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39940 ts+24430, 0)) 39941 return TCL_ERROR 39942 } 39943 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39944 rc = sqlite3.Xsqlite3BtreeClose(tls, pBt) 39945 if rc != SQLITE_OK { 39946 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39947 return TCL_ERROR 39948 } 39949 nRefSqlite3-- 39950 if nRefSqlite3 == 0 { 39951 sqlite3.Xsqlite3_mutex_leave(tls, sDb.Fmutex) 39952 sqlite3.Xsqlite3_mutex_free(tls, sDb.Fmutex) 39953 sDb.Fmutex = uintptr(0) 39954 sDb.FpVfs = uintptr(0) 39955 } 39956 return TCL_OK 39957 } 39958 39959 func btree_begin_transaction(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39960 bp := tls.Alloc(48) 39961 defer tls.Free(48) 39962 39963 var pBt uintptr 39964 var rc int32 39965 if argc != 2 { 39966 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39967 ts+24430, 0)) 39968 return TCL_ERROR 39969 } 39970 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39971 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39972 rc = sqlite3.Xsqlite3BtreeBeginTrans(tls, pBt, 1, uintptr(0)) 39973 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 39974 if rc != SQLITE_OK { 39975 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39976 return TCL_ERROR 39977 } 39978 return TCL_OK 39979 } 39980 39981 func btree_pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39982 bp := tls.Alloc(140) 39983 defer tls.Free(140) 39984 39985 var pBt uintptr 39986 var i int32 39987 var a uintptr 39988 39989 if argc != 2 { 39990 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39991 ts+24430, 0)) 39992 return TCL_ERROR 39993 } 39994 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 39995 39996 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 39997 39998 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 39999 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 40000 for i = 0; i < 11; i++ { 40001 tcl.XTcl_AppendElement(tls, interp, zName1[i]) 40002 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 40003 tcl.XTcl_AppendElement(tls, interp, bp+40) 40004 } 40005 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40006 40007 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40008 return TCL_OK 40009 } 40010 40011 var zName1 = [11]uintptr{ 40012 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 40013 ts + 24448, ts + 24452, ts + 24457, ts + 25126, ts + 25131, 40014 } 40015 40016 func btree_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40017 bp := tls.Alloc(110) 40018 defer tls.Free(110) 40019 40020 var pBt uintptr 40021 40022 var pCur uintptr 40023 var rc int32 = SQLITE_OK 40024 40025 if argc != 4 { 40026 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40027 ts+25137, 0)) 40028 return TCL_ERROR 40029 } 40030 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40031 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+72) != 0 { 40032 return TCL_ERROR 40033 } 40034 if tcl.XTcl_GetBoolean(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*4)), bp+76) != 0 { 40035 return TCL_ERROR 40036 } 40037 if *(*int32)(unsafe.Pointer(bp + 76)) != 0 { 40038 *(*int32)(unsafe.Pointer(bp + 76)) = BTREE_WRCSR 40039 } 40040 pCur = tcl.XTcl_Alloc(tls, uint32(sqlite3.Xsqlite3BtreeCursorSize(tls))) 40041 libc.Xmemset(tls, pCur, 0, uint32(sqlite3.Xsqlite3BtreeCursorSize(tls))) 40042 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40043 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40044 rc = sqlite3.Xsqlite3BtreeLockTable(tls, pBt, *(*int32)(unsafe.Pointer(bp + 72)), libc.BoolUint8(!!(*(*int32)(unsafe.Pointer(bp + 76)) != 0))) 40045 if rc == SQLITE_OK { 40046 rc = sqlite3.Xsqlite3BtreeCursor(tls, pBt, uint32(*(*int32)(unsafe.Pointer(bp + 72))), *(*int32)(unsafe.Pointer(bp + 76)), uintptr(0), pCur) 40047 } 40048 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40049 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40050 if rc != 0 { 40051 tcl.XTcl_Free(tls, pCur) 40052 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40053 return TCL_ERROR 40054 } 40055 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+80, ts+9889, libc.VaList(bp+48, pCur)) 40056 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 40057 return SQLITE_OK 40058 } 40059 40060 func btree_close_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40061 bp := tls.Alloc(48) 40062 defer tls.Free(48) 40063 40064 var pCur uintptr 40065 var rc int32 40066 40067 if argc != 2 { 40068 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40069 ts+24430, 0)) 40070 return TCL_ERROR 40071 } 40072 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40073 { 40074 var pBt uintptr = (*BtCursor)(unsafe.Pointer(pCur)).FpBtree 40075 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40076 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40077 rc = sqlite3.Xsqlite3BtreeCloseCursor(tls, pCur) 40078 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40079 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40080 40081 } 40082 tcl.XTcl_Free(tls, pCur) 40083 if rc != 0 { 40084 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40085 return TCL_ERROR 40086 } 40087 return SQLITE_OK 40088 } 40089 40090 func btree_next(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40091 bp := tls.Alloc(172) 40092 defer tls.Free(172) 40093 40094 var pCur uintptr 40095 var rc int32 40096 var res int32 = 0 40097 40098 if argc != 2 { 40099 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40100 ts+24430, 0)) 40101 return TCL_ERROR 40102 } 40103 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40104 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40105 rc = sqlite3.Xsqlite3BtreeNext(tls, pCur, 0) 40106 if rc == SQLITE_DONE { 40107 res = 1 40108 rc = SQLITE_OK 40109 } 40110 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40111 if rc != 0 { 40112 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40113 return TCL_ERROR 40114 } 40115 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, res)) 40116 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40117 return SQLITE_OK 40118 } 40119 40120 func btree_first(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40121 bp := tls.Alloc(176) 40122 defer tls.Free(176) 40123 40124 var pCur uintptr 40125 var rc int32 40126 *(*int32)(unsafe.Pointer(bp + 72)) = 0 40127 40128 if argc != 2 { 40129 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40130 ts+24430, 0)) 40131 return TCL_ERROR 40132 } 40133 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40134 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40135 rc = sqlite3.Xsqlite3BtreeFirst(tls, pCur, bp+72) 40136 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40137 if rc != 0 { 40138 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40139 return TCL_ERROR 40140 } 40141 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 72)))) 40142 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+76, 0)) 40143 return SQLITE_OK 40144 } 40145 40146 func btree_eof(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40147 bp := tls.Alloc(106) 40148 defer tls.Free(106) 40149 40150 var pCur uintptr 40151 var rc int32 40152 40153 if argc != 2 { 40154 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40155 ts+24430, 0)) 40156 return TCL_ERROR 40157 } 40158 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40159 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40160 rc = sqlite3.Xsqlite3BtreeEof(tls, pCur) 40161 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40162 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+1333, libc.VaList(bp+32, rc)) 40163 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40164 return SQLITE_OK 40165 } 40166 40167 func btree_payload_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40168 bp := tls.Alloc(106) 40169 defer tls.Free(106) 40170 40171 var pCur uintptr 40172 var n u32 40173 40174 if argc != 2 { 40175 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40176 ts+24430, 0)) 40177 return TCL_ERROR 40178 } 40179 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40180 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40181 n = sqlite3.Xsqlite3BtreePayloadSize(tls, pCur) 40182 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40183 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+17791, libc.VaList(bp+32, n)) 40184 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40185 return SQLITE_OK 40186 } 40187 40188 func btree_varint_test(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40189 bp := tls.Alloc(512) 40190 defer tls.Free(512) 40191 40192 var in u64 40193 40194 var n1 int32 40195 var n2 int32 40196 var i int32 40197 var j int32 40198 40199 if argc != 5 { 40200 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40201 ts+25161, 0)) 40202 return TCL_ERROR 40203 } 40204 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+184) != 0 { 40205 return TCL_ERROR 40206 } 40207 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+188) != 0 { 40208 return TCL_ERROR 40209 } 40210 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*4)), bp+192) != 0 { 40211 return TCL_ERROR 40212 } 40213 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*4)), bp+196) != 0 { 40214 return TCL_ERROR 40215 } 40216 in = u64(*(*u32)(unsafe.Pointer(bp + 184))) 40217 in = in * u64(*(*u32)(unsafe.Pointer(bp + 188))) 40218 for i = 0; i < int32(*(*u32)(unsafe.Pointer(bp + 192))); i++ { 40219 n1 = sqlite3.Xsqlite3PutVarint(tls, bp+200, in) 40220 if n1 > 9 || n1 < 1 { 40221 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40222 ts+25196, libc.VaList(bp+32, n1)) 40223 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+300, 0)) 40224 return TCL_ERROR 40225 } 40226 n2 = int32(sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+500)) 40227 if n1 != n2 { 40228 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40229 ts+25246, libc.VaList(bp+56, n1, n2)) 40230 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, bp+300, 0)) 40231 return TCL_ERROR 40232 } 40233 if in != *(*u64)(unsafe.Pointer(bp + 500)) { 40234 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40235 ts+25294, libc.VaList(bp+88, in, *(*u64)(unsafe.Pointer(bp + 500)))) 40236 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, bp+300, 0)) 40237 return TCL_ERROR 40238 } 40239 if in&uint64(0xffffffff) == in { 40240 n2 = int32(func() uint8 { 40241 if int32(*(*uint8)(unsafe.Pointer(bp + 200))) < int32(u8(0x80)) { 40242 return uint8(func() int32 { *(*u32)(unsafe.Pointer(bp + 508)) = u32(*(*uint8)(unsafe.Pointer(bp + 200))); return 1 }()) 40243 } 40244 return sqlite3.Xsqlite3GetVarint32(tls, bp+200, bp+508) 40245 }()) 40246 *(*u64)(unsafe.Pointer(bp + 500)) = u64(*(*u32)(unsafe.Pointer(bp + 508))) 40247 if n1 != n2 { 40248 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40249 ts+25333, 40250 libc.VaList(bp+120, n1, n2)) 40251 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+136, bp+300, 0)) 40252 return TCL_ERROR 40253 } 40254 if in != *(*u64)(unsafe.Pointer(bp + 500)) { 40255 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 40256 ts+25383, 40257 libc.VaList(bp+152, in, *(*u64)(unsafe.Pointer(bp + 500)))) 40258 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+168, bp+300, 0)) 40259 return TCL_ERROR 40260 } 40261 } 40262 40263 for j = 0; j < 19; j++ { 40264 sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+500) 40265 } 40266 in = in + u64(*(*u32)(unsafe.Pointer(bp + 196))) 40267 } 40268 return TCL_OK 40269 } 40270 40271 func btree_from_db(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40272 bp := tls.Alloc(204) 40273 defer tls.Free(204) 40274 40275 var db uintptr 40276 var pBt uintptr 40277 var iDb int32 = 0 40278 40279 if argc != 2 && argc != 3 { 40280 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40281 ts+25439, 0)) 40282 return TCL_ERROR 40283 } 40284 40285 if 1 != tcl.XTcl_GetCommandInfo(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4)), bp+72) { 40286 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25455, *(*uintptr)(unsafe.Pointer(argv + 1*4)), ts+11945, 0)) 40287 return TCL_ERROR 40288 } 40289 if argc == 3 { 40290 iDb = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 40291 } 40292 40293 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 72)).FobjClientData)) 40294 40295 pBt = (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(db)).FaDb + uintptr(iDb)*16)).FpBt 40296 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+104, ts+9889, libc.VaList(bp+64, pBt)) 40297 tcl.XTcl_SetResult(tls, interp, bp+104, uintptr(1)) 40298 return TCL_OK 40299 } 40300 40301 func btree_ismemdb(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40302 bp := tls.Alloc(32) 40303 defer tls.Free(32) 40304 40305 var pBt uintptr 40306 var res int32 40307 var pFile uintptr 40308 40309 if argc != 2 { 40310 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40311 ts+24430, 0)) 40312 return TCL_ERROR 40313 } 40314 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40315 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40316 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40317 pFile = sqlite3.Xsqlite3PagerFile(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 40318 res = libc.Bool32((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods == uintptr(0)) 40319 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40320 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40321 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(res != 0))) 40322 return SQLITE_OK 40323 } 40324 40325 func btree_set_cache_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40326 bp := tls.Alloc(36) 40327 defer tls.Free(36) 40328 40329 var pBt uintptr 40330 40331 if argc != 3 { 40332 tcl.XTcl_AppendResult(tls, 40333 interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+25476, 0)) 40334 return TCL_ERROR 40335 } 40336 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40337 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+32) != 0 { 40338 return TCL_ERROR 40339 } 40340 40341 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40342 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40343 sqlite3.Xsqlite3BtreeSetCacheSize(tls, pBt, *(*int32)(unsafe.Pointer(bp + 32))) 40344 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40345 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40346 return TCL_OK 40347 } 40348 40349 func btree_insert(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40350 bp := tls.Alloc(52) 40351 defer tls.Free(52) 40352 40353 var pCur uintptr 40354 40355 if objc != 4 && objc != 3 { 40356 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+25488) 40357 return TCL_ERROR 40358 } 40359 40360 libc.Xmemset(tls, bp+16, 0, uint32(unsafe.Sizeof(BtreePayload{}))) 40361 if objc == 4 { 40362 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+48) != 0 { 40363 return TCL_ERROR 40364 } 40365 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 48))) 40366 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+16+24) 40367 } else { 40368 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpKey = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+48) 40369 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 48))) 40370 } 40371 pCur = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 40372 40373 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 40374 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40375 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3BtreeInsert(tls, pCur, bp+16, 0, 0) 40376 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40377 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 40378 40379 tcl.XTcl_ResetResult(tls, interp) 40380 if *(*int32)(unsafe.Pointer(bp + 48)) != 0 { 40381 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, *(*int32)(unsafe.Pointer(bp + 48))), 0)) 40382 return TCL_ERROR 40383 } 40384 return TCL_OK 40385 } 40386 40387 func Sqlitetest3_Init(tls *libc.TLS, interp uintptr) int32 { 40388 var i int32 40389 40390 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd3))/uint32(unsafe.Sizeof(struct { 40391 FzName uintptr 40392 FxProc uintptr 40393 }{})); i++ { 40394 tcl.XTcl_CreateCommand(tls, interp, aCmd3[i].FzName, aCmd3[i].FxProc, uintptr(0), uintptr(0)) 40395 } 40396 40397 tcl.XTcl_CreateObjCommand(tls, interp, ts+25512, *(*uintptr)(unsafe.Pointer(&struct { 40398 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 40399 }{btree_insert})), uintptr(0), uintptr(0)) 40400 40401 return TCL_OK 40402 } 40403 40404 var aCmd3 = [14]struct { 40405 FzName uintptr 40406 FxProc uintptr 40407 }{ 40408 {FzName: ts + 25525, FxProc: 0}, 40409 {FzName: ts + 25536, FxProc: 0}, 40410 {FzName: ts + 25548, FxProc: 0}, 40411 {FzName: ts + 25572, FxProc: 0}, 40412 {FzName: ts + 25590, FxProc: 0}, 40413 {FzName: ts + 25603, FxProc: 0}, 40414 {FzName: ts + 25622, FxProc: 0}, 40415 {FzName: ts + 25633, FxProc: 0}, 40416 {FzName: ts + 25643, FxProc: 0}, 40417 {FzName: ts + 25662, FxProc: 0}, 40418 {FzName: ts + 25674, FxProc: 0}, 40419 {FzName: ts + 25692, FxProc: 0}, 40420 {FzName: ts + 25706, FxProc: 0}, 40421 {FzName: ts + 25720, FxProc: 0}, 40422 } 40423 40424 type sched_param = struct{ Fsched_priority int32 } 40425 40426 type cpu_set_t = struct{ F__bits [32]uint32 } 40427 40428 type _pthread_cleanup_buffer = struct { 40429 F__routine uintptr 40430 F__arg uintptr 40431 F__canceltype int32 40432 F__prev uintptr 40433 } 40434 40435 type __pthread_cleanup_frame = struct { 40436 F__cancel_routine uintptr 40437 F__cancel_arg uintptr 40438 F__do_it int32 40439 F__cancel_type int32 40440 } 40441 40442 type Thread = struct { 40443 FzFilename uintptr 40444 FxOp uintptr 40445 FzArg uintptr 40446 Fopnum int32 40447 Fbusy int32 40448 Fcompleted int32 40449 Fdb uintptr 40450 FpStmt uintptr 40451 FzErr uintptr 40452 FzStaticErr uintptr 40453 Frc int32 40454 Fargc int32 40455 Fargv [100]uintptr 40456 Fcolv [100]uintptr 40457 } 40458 40459 var threadset [26]Thread 40460 40461 func test_barrier(tls *libc.TLS) { 40462 var pMutex uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_APP1) 40463 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 40464 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 40465 } 40466 40467 func test_thread_main(tls *libc.TLS, pArg uintptr) uintptr { 40468 var p uintptr = pArg 40469 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 40470 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40471 } 40472 sqlite3.Xsqlite3_open(tls, (*Thread)(unsafe.Pointer(p)).FzFilename, p+24) 40473 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread)(unsafe.Pointer(p)).Fdb) { 40474 (*Thread)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread)(unsafe.Pointer(p)).Fdb)) 40475 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40476 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 40477 } 40478 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40479 test_barrier(tls) 40480 (*Thread)(unsafe.Pointer(p)).Fcompleted = 1 40481 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 40482 libc.Xsched_yield(tls) 40483 } 40484 test_barrier(tls) 40485 for (*Thread)(unsafe.Pointer(p)).FxOp != 0 { 40486 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 40487 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 40488 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 40489 } 40490 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread)(unsafe.Pointer(p)).FxOp})).f(tls, p) 40491 test_barrier(tls) 40492 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 40493 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 40494 libc.Xsched_yield(tls) 40495 } 40496 test_barrier(tls) 40497 } 40498 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 40499 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40500 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40501 } 40502 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 40503 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40504 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 40505 } 40506 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 40507 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 40508 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 40509 } 40510 test_barrier(tls) 40511 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 40512 sqlite3.Xsqlite3_thread_cleanup(tls) 40513 return uintptr(0) 40514 } 40515 40516 func parse_thread_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 40517 bp := tls.Alloc(16) 40518 defer tls.Free(16) 40519 40520 if zArg == uintptr(0) || int32(*(*int8)(unsafe.Pointer(zArg))) == 0 || int32(*(*int8)(unsafe.Pointer(zArg + 1))) != 0 || !(int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zArg)))))*2)))&int32(_ISupper) != 0) { 40521 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 40522 return -1 40523 } 40524 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 40525 } 40526 40527 func tcl_thread_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40528 bp := tls.Alloc(92) 40529 defer tls.Free(92) 40530 40531 var i int32 40532 40533 var rc int32 40534 40535 if argc != 3 { 40536 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40537 ts+25780, 0)) 40538 return TCL_ERROR 40539 } 40540 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40541 if i < 0 { 40542 return TCL_ERROR 40543 } 40544 if threadset[i].Fbusy != 0 { 40545 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*4)), ts+25801, 0)) 40546 return TCL_ERROR 40547 } 40548 threadset[i].Fbusy = 1 40549 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 40550 threadset[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 40551 threadset[i].Fopnum = 1 40552 threadset[i].Fcompleted = 0 40553 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 40554 f func(*libc.TLS, uintptr) uintptr 40555 }{test_thread_main})), uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40556 if rc != 0 { 40557 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 40558 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 40559 threadset[i].Fbusy = 0 40560 return TCL_ERROR 40561 } 40562 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 40563 return TCL_OK 40564 } 40565 40566 func test_thread_wait(tls *libc.TLS, p uintptr) { 40567 test_barrier(tls) 40568 for (*Thread)(unsafe.Pointer(p)).Fopnum > (*Thread)(unsafe.Pointer(p)).Fcompleted { 40569 libc.Xsched_yield(tls) 40570 } 40571 test_barrier(tls) 40572 } 40573 40574 func tcl_thread_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40575 bp := tls.Alloc(48) 40576 defer tls.Free(48) 40577 40578 var i int32 40579 40580 if argc != 2 { 40581 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40582 ts+25849, 0)) 40583 return TCL_ERROR 40584 } 40585 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40586 if i < 0 { 40587 return TCL_ERROR 40588 } 40589 if !(threadset[i].Fbusy != 0) { 40590 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40591 return TCL_ERROR 40592 } 40593 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40594 return TCL_OK 40595 } 40596 40597 func test_stop_thread(tls *libc.TLS, p uintptr) { 40598 test_thread_wait(tls, p) 40599 (*Thread)(unsafe.Pointer(p)).FxOp = uintptr(0) 40600 (*Thread)(unsafe.Pointer(p)).Fopnum++ 40601 test_thread_wait(tls, p) 40602 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzArg) 40603 (*Thread)(unsafe.Pointer(p)).FzArg = uintptr(0) 40604 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzFilename) 40605 (*Thread)(unsafe.Pointer(p)).FzFilename = uintptr(0) 40606 (*Thread)(unsafe.Pointer(p)).Fbusy = 0 40607 } 40608 40609 func tcl_thread_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40610 bp := tls.Alloc(48) 40611 defer tls.Free(48) 40612 40613 var i int32 40614 40615 if argc != 2 { 40616 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40617 ts+25849, 0)) 40618 return TCL_ERROR 40619 } 40620 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*4))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*4)) + 1))) == 0 { 40621 for i = 0; i < N_THREAD; i++ { 40622 if threadset[i].Fbusy != 0 { 40623 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40624 } 40625 } 40626 } else { 40627 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40628 if i < 0 { 40629 return TCL_ERROR 40630 } 40631 if !(threadset[i].Fbusy != 0) { 40632 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40633 return TCL_ERROR 40634 } 40635 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40636 } 40637 return TCL_OK 40638 } 40639 40640 func tcl_thread_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40641 bp := tls.Alloc(172) 40642 defer tls.Free(172) 40643 40644 var i int32 40645 40646 if argc != 2 { 40647 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40648 ts+25849, 0)) 40649 return TCL_ERROR 40650 } 40651 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40652 if i < 0 { 40653 return TCL_ERROR 40654 } 40655 if !(threadset[i].Fbusy != 0) { 40656 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40657 return TCL_ERROR 40658 } 40659 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40660 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset[i].Fargc)) 40661 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40662 return TCL_OK 40663 } 40664 40665 func tcl_thread_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40666 bp := tls.Alloc(84) 40667 defer tls.Free(84) 40668 40669 var i int32 40670 40671 if argc != 3 { 40672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40673 ts+25868, 0)) 40674 return TCL_ERROR 40675 } 40676 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40677 if i < 0 { 40678 return TCL_ERROR 40679 } 40680 if !(threadset[i].Fbusy != 0) { 40681 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40682 return TCL_ERROR 40683 } 40684 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+80) != 0 { 40685 return TCL_ERROR 40686 } 40687 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40688 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40689 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40690 return TCL_ERROR 40691 } 40692 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset)) + uintptr(i)*848 + 48 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*4)), 0)) 40693 return TCL_OK 40694 } 40695 40696 func tcl_thread_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40697 bp := tls.Alloc(84) 40698 defer tls.Free(84) 40699 40700 var i int32 40701 40702 if argc != 3 { 40703 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40704 ts+25868, 0)) 40705 return TCL_ERROR 40706 } 40707 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40708 if i < 0 { 40709 return TCL_ERROR 40710 } 40711 if !(threadset[i].Fbusy != 0) { 40712 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40713 return TCL_ERROR 40714 } 40715 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+80) != 0 { 40716 return TCL_ERROR 40717 } 40718 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40719 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40720 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40721 return TCL_ERROR 40722 } 40723 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset)) + uintptr(i)*848 + 448 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*4)), 0)) 40724 return TCL_OK 40725 } 40726 40727 func tcl_thread_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40728 bp := tls.Alloc(64) 40729 defer tls.Free(64) 40730 40731 var i int32 40732 var zName uintptr 40733 40734 if argc != 2 { 40735 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40736 ts+25849, 0)) 40737 return TCL_ERROR 40738 } 40739 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40740 if i < 0 { 40741 return TCL_ERROR 40742 } 40743 if !(threadset[i].Fbusy != 0) { 40744 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40745 return TCL_ERROR 40746 } 40747 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40748 zName = sqlite3.Xsqlite3ErrName(tls, threadset[i].Frc) 40749 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 40750 return TCL_OK 40751 } 40752 40753 func tcl_thread_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40754 bp := tls.Alloc(64) 40755 defer tls.Free(64) 40756 40757 var i int32 40758 40759 if argc != 2 { 40760 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40761 ts+25849, 0)) 40762 return TCL_ERROR 40763 } 40764 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40765 if i < 0 { 40766 return TCL_ERROR 40767 } 40768 if !(threadset[i].Fbusy != 0) { 40769 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40770 return TCL_ERROR 40771 } 40772 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40773 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset[i].FzErr, 0)) 40774 return TCL_OK 40775 } 40776 40777 func do_compile(tls *libc.TLS, p uintptr) { 40778 if (*Thread)(unsafe.Pointer(p)).Fdb == uintptr(0) { 40779 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+36, ts+25901) 40780 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40781 return 40782 } 40783 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 40784 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40785 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40786 } 40787 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_prepare(tls, (*Thread)(unsafe.Pointer(p)).Fdb, (*Thread)(unsafe.Pointer(p)).FzArg, -1, p+28, uintptr(0)) 40788 } 40789 40790 func tcl_thread_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40791 bp := tls.Alloc(56) 40792 defer tls.Free(56) 40793 40794 var i int32 40795 if argc != 3 { 40796 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40797 ts+25921, 0)) 40798 return TCL_ERROR 40799 } 40800 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40801 if i < 0 { 40802 return TCL_ERROR 40803 } 40804 if !(threadset[i].Fbusy != 0) { 40805 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40806 return TCL_ERROR 40807 } 40808 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40809 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile})) 40810 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 40811 threadset[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 40812 test_barrier(tls) 40813 threadset[i].Fopnum++ 40814 return TCL_OK 40815 } 40816 40817 func do_step(tls *libc.TLS, p uintptr) { 40818 var i int32 40819 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 40820 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+36, ts+25929) 40821 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40822 return 40823 } 40824 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_step(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40825 if (*Thread)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 40826 (*Thread)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40827 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt); i++ { 40828 *(*uintptr)(unsafe.Pointer(p + 48 + uintptr(i)*4)) = sqlite3.Xsqlite3_column_text(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 40829 } 40830 for i = 0; i < (*Thread)(unsafe.Pointer(p)).Fargc; i++ { 40831 *(*uintptr)(unsafe.Pointer(p + 448 + uintptr(i)*4)) = sqlite3.Xsqlite3_column_name(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 40832 } 40833 } 40834 } 40835 40836 func tcl_thread_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40837 bp := tls.Alloc(48) 40838 defer tls.Free(48) 40839 40840 var i int32 40841 if argc != 2 { 40842 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40843 ts+25958, 0)) 40844 return TCL_ERROR 40845 } 40846 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40847 if i < 0 { 40848 return TCL_ERROR 40849 } 40850 if !(threadset[i].Fbusy != 0) { 40851 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40852 return TCL_ERROR 40853 } 40854 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40855 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step})) 40856 test_barrier(tls) 40857 threadset[i].Fopnum++ 40858 return TCL_OK 40859 } 40860 40861 func do_finalize(tls *libc.TLS, p uintptr) { 40862 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 40863 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+36, ts+25929) 40864 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40865 return 40866 } 40867 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40868 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40869 } 40870 40871 func tcl_thread_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40872 bp := tls.Alloc(48) 40873 defer tls.Free(48) 40874 40875 var i int32 40876 if argc != 2 { 40877 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40878 ts+25958, 0)) 40879 return TCL_ERROR 40880 } 40881 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40882 if i < 0 { 40883 return TCL_ERROR 40884 } 40885 if !(threadset[i].Fbusy != 0) { 40886 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40887 return TCL_ERROR 40888 } 40889 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40890 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize})) 40891 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 40892 threadset[i].FzArg = uintptr(0) 40893 test_barrier(tls) 40894 threadset[i].Fopnum++ 40895 return TCL_OK 40896 } 40897 40898 func tcl_thread_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40899 bp := tls.Alloc(64) 40900 defer tls.Free(64) 40901 40902 var i int32 40903 var j int32 40904 var temp uintptr 40905 if argc != 3 { 40906 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40907 ts+25963, 0)) 40908 return TCL_ERROR 40909 } 40910 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40911 if i < 0 { 40912 return TCL_ERROR 40913 } 40914 if !(threadset[i].Fbusy != 0) { 40915 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40916 return TCL_ERROR 40917 } 40918 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40919 j = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 40920 if j < 0 { 40921 return TCL_ERROR 40922 } 40923 if !(threadset[j].Fbusy != 0) { 40924 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 40925 return TCL_ERROR 40926 } 40927 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(j)*848) 40928 temp = threadset[i].Fdb 40929 threadset[i].Fdb = threadset[j].Fdb 40930 threadset[j].Fdb = temp 40931 return TCL_OK 40932 } 40933 40934 func tcl_thread_db_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40935 bp := tls.Alloc(164) 40936 defer tls.Free(164) 40937 40938 var i int32 40939 40940 if argc != 2 { 40941 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40942 ts+25849, 0)) 40943 return TCL_ERROR 40944 } 40945 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40946 if i < 0 { 40947 return TCL_ERROR 40948 } 40949 if !(threadset[i].Fbusy != 0) { 40950 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40951 return TCL_ERROR 40952 } 40953 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40954 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].Fdb) 40955 threadset[i].Fdb = uintptr(0) 40956 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 40957 return TCL_OK 40958 } 40959 40960 func tcl_thread_db_put(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40961 bp := tls.Alloc(48) 40962 defer tls.Free(48) 40963 40964 var i int32 40965 if argc != 3 { 40966 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40967 ts+25972, 0)) 40968 return TCL_ERROR 40969 } 40970 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40971 if i < 0 { 40972 return TCL_ERROR 40973 } 40974 if !(threadset[i].Fbusy != 0) { 40975 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40976 return TCL_ERROR 40977 } 40978 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 40979 40980 threadset[i].Fdb = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 40981 return TCL_OK 40982 } 40983 40984 func tcl_thread_stmt_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40985 bp := tls.Alloc(164) 40986 defer tls.Free(164) 40987 40988 var i int32 40989 40990 if argc != 2 { 40991 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40992 ts+25849, 0)) 40993 return TCL_ERROR 40994 } 40995 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 40996 if i < 0 { 40997 return TCL_ERROR 40998 } 40999 if !(threadset[i].Fbusy != 0) { 41000 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41001 return TCL_ERROR 41002 } 41003 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*848) 41004 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].FpStmt) 41005 threadset[i].FpStmt = uintptr(0) 41006 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 41007 return TCL_OK 41008 } 41009 41010 func Sqlitetest4_Init(tls *libc.TLS, interp uintptr) int32 { 41011 var i int32 41012 41013 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd4))/uint32(unsafe.Sizeof(struct { 41014 FzName uintptr 41015 FxProc uintptr 41016 }{})); i++ { 41017 tcl.XTcl_CreateCommand(tls, interp, aCmd4[i].FzName, aCmd4[i].FxProc, uintptr(0), uintptr(0)) 41018 } 41019 return TCL_OK 41020 } 41021 41022 var aCmd4 = [15]struct { 41023 FzName uintptr 41024 FxProc uintptr 41025 }{ 41026 {FzName: ts + 25979, FxProc: 0}, 41027 {FzName: ts + 25993, FxProc: 0}, 41028 {FzName: ts + 26005, FxProc: 0}, 41029 {FzName: ts + 26017, FxProc: 0}, 41030 {FzName: ts + 26029, FxProc: 0}, 41031 {FzName: ts + 26041, FxProc: 0}, 41032 {FzName: ts + 26056, FxProc: 0}, 41033 {FzName: ts + 26070, FxProc: 0}, 41034 {FzName: ts + 26083, FxProc: 0}, 41035 {FzName: ts + 26098, FxProc: 0}, 41036 {FzName: ts + 26110, FxProc: 0}, 41037 {FzName: ts + 26126, FxProc: 0}, 41038 {FzName: ts + 26138, FxProc: 0}, 41039 {FzName: ts + 26152, FxProc: 0}, 41040 {FzName: ts + 26166, FxProc: 0}, 41041 } 41042 41043 func binarize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41044 bp := tls.Alloc(4) 41045 defer tls.Free(4) 41046 41047 var bytes uintptr 41048 var pRet uintptr 41049 41050 bytes = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) 41051 pRet = tcl.XTcl_NewByteArrayObj(tls, bytes, *(*int32)(unsafe.Pointer(bp))+1) 41052 tcl.XTcl_SetObjResult(tls, interp, pRet) 41053 return TCL_OK 41054 } 41055 41056 func test_value_overhead(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41057 bp := tls.Alloc(80) 41058 defer tls.Free(80) 41059 41060 var i int32 41061 41062 if objc != 3 { 41063 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 41064 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+26182, 0)) 41065 return TCL_ERROR 41066 } 41067 41068 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+32) != 0 { 41069 return TCL_ERROR 41070 } 41071 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+36) != 0 { 41072 return TCL_ERROR 41073 } 41074 41075 (*Mem)(unsafe.Pointer(bp + 40)).Fflags = u16(MEM_Str | MEM_Term | MEM_Static) 41076 (*Mem)(unsafe.Pointer(bp + 40)).Fz = ts + 26209 41077 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = u8(SQLITE_UTF8) 41078 41079 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 41080 if *(*int32)(unsafe.Pointer(bp + 36)) != 0 { 41081 sqlite3.Xsqlite3_value_text(tls, bp+40) 41082 } 41083 } 41084 41085 return TCL_OK 41086 } 41087 41088 func name_to_enc(tls *libc.TLS, interp uintptr, pObj uintptr) u8 { 41089 bp := tls.Alloc(64) 41090 defer tls.Free(64) 41091 41092 *(*[5]EncName)(unsafe.Pointer(bp + 24)) = [5]EncName{ 41093 {FzName: ts + 26221, Fenc: u8(SQLITE_UTF8)}, 41094 {FzName: ts + 26226, Fenc: u8(SQLITE_UTF16LE)}, 41095 {FzName: ts + 26234, Fenc: u8(SQLITE_UTF16BE)}, 41096 {FzName: ts + 26242, Fenc: u8(SQLITE_UTF16)}, 41097 {}, 41098 } 41099 var pEnc uintptr 41100 var z uintptr = tcl.XTcl_GetString(tls, pObj) 41101 for pEnc = bp + 24; (*EncName)(unsafe.Pointer(pEnc)).FzName != 0; pEnc += 8 { 41102 if 0 == sqlite3.Xsqlite3StrICmp(tls, z, (*EncName)(unsafe.Pointer(pEnc)).FzName) { 41103 break 41104 } 41105 } 41106 if !(int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) != 0) { 41107 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26248, z, 0)) 41108 } 41109 if int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) == SQLITE_UTF16 { 41110 return u8(SQLITE_UTF16LE) 41111 } 41112 return (*EncName)(unsafe.Pointer(pEnc)).Fenc 41113 } 41114 41115 type EncName = struct { 41116 FzName uintptr 41117 Fenc u8 41118 F__ccgo_pad1 [3]byte 41119 } 41120 41121 func test_translate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41122 bp := tls.Alloc(44) 41123 defer tls.Free(44) 41124 41125 var enc_from u8 41126 var enc_to u8 41127 var pVal uintptr 41128 var z uintptr 41129 41130 var xDel uintptr = uintptr(0) 41131 41132 if objc != 4 && objc != 5 { 41133 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 41134 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), 41135 ts+26267, 0)) 41136 return TCL_ERROR 41137 } 41138 if objc == 5 { 41139 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 41140 } 41141 41142 enc_from = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 41143 if !(enc_from != 0) { 41144 return TCL_ERROR 41145 } 41146 enc_to = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 41147 if !(enc_to != 0) { 41148 return TCL_ERROR 41149 } 41150 41151 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 41152 41153 if int32(enc_from) == SQLITE_UTF8 { 41154 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 41155 if objc == 5 { 41156 z = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, z)) 41157 } 41158 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 41159 } else { 41160 z = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+40) 41161 if objc == 5 { 41162 var zTmp uintptr = z 41163 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 40))) 41164 libc.Xmemcpy(tls, z, zTmp, uint32(*(*int32)(unsafe.Pointer(bp + 40)))) 41165 } 41166 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 41167 } 41168 41169 z = sqlite3.Xsqlite3ValueText(tls, pVal, enc_to) 41170 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3ValueBytes(tls, pVal, enc_to) + func() int32 { 41171 if int32(enc_to) == SQLITE_UTF8 { 41172 return 1 41173 } 41174 return 2 41175 }() 41176 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, z, *(*int32)(unsafe.Pointer(bp + 40)))) 41177 41178 sqlite3.Xsqlite3ValueFree(tls, pVal) 41179 41180 return TCL_OK 41181 } 41182 41183 func test_translate_selftest(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41184 sqlite3.Xsqlite3UtfSelfTest(tls) 41185 return SQLITE_OK 41186 } 41187 41188 func Sqlitetest5_Init(tls *libc.TLS, interp uintptr) int32 { 41189 var i int32 41190 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd5))/uint32(unsafe.Sizeof(struct { 41191 FzName uintptr 41192 FxProc uintptr 41193 }{})); i++ { 41194 tcl.XTcl_CreateObjCommand(tls, interp, aCmd5[i].FzName, aCmd5[i].FxProc, uintptr(0), uintptr(0)) 41195 } 41196 return SQLITE_OK 41197 } 41198 41199 var aCmd5 = [4]struct { 41200 FzName uintptr 41201 FxProc uintptr 41202 }{ 41203 {FzName: ts + 26302, FxProc: 0}, 41204 {FzName: ts + 26311, FxProc: 0}, 41205 {FzName: ts + 26331, FxProc: 0}, 41206 {FzName: ts + 26346, FxProc: 0}, 41207 } 41208 41209 type CrashFile1 = struct { 41210 FpMethod uintptr 41211 FpRealFile uintptr 41212 FzName uintptr 41213 Fflags int32 41214 FzData uintptr 41215 FnData int32 41216 FiSize i64 41217 } 41218 41219 type CrashFile = CrashFile1 41220 type CrashGlobal1 = struct { 41221 FpWriteList uintptr 41222 FpWriteListEnd uintptr 41223 FiSectorSize int32 41224 FiDeviceCharacteristics int32 41225 FiCrash int32 41226 FzCrashFile [500]int8 41227 } 41228 41229 type CrashGlobal = CrashGlobal1 41230 type WriteBuffer1 = struct { 41231 FiOffset i64 41232 FnBuf int32 41233 FzBuf uintptr 41234 FpFile uintptr 41235 FpNext uintptr 41236 } 41237 41238 type WriteBuffer = WriteBuffer1 41239 41240 var g = CrashGlobal{FiSectorSize: SQLITE_DEFAULT_SECTOR_SIZE} 41241 41242 var sqlite3CrashTestEnable int32 = 0 41243 41244 func crash_malloc(tls *libc.TLS, nByte int32) uintptr { 41245 return tcl.XTcl_AttemptAlloc(tls, size_t(nByte)) 41246 } 41247 41248 func crash_free(tls *libc.TLS, p uintptr) { 41249 tcl.XTcl_Free(tls, p) 41250 } 41251 41252 func crash_realloc(tls *libc.TLS, p uintptr, n int32) uintptr { 41253 return tcl.XTcl_AttemptRealloc(tls, p, size_t(n)) 41254 } 41255 41256 func writeDbFile(tls *libc.TLS, p uintptr, z uintptr, iAmt i64, iOff i64) int32 { 41257 var rc int32 = SQLITE_OK 41258 var iSkip int32 = 0 41259 if iAmt-i64(iSkip) > int64(0) { 41260 rc = sqlite3.Xsqlite3OsWrite(tls, (*CrashFile)(unsafe.Pointer(p)).FpRealFile, z+uintptr(iSkip), int32(iAmt-i64(iSkip)), iOff+i64(iSkip)) 41261 } 41262 return rc 41263 } 41264 41265 func writeListSync(tls *libc.TLS, pFile uintptr, isCrash int32) int32 { 41266 bp := tls.Alloc(16) 41267 defer tls.Free(16) 41268 41269 var rc int32 = SQLITE_OK 41270 var iDc int32 = g.FiDeviceCharacteristics 41271 var pWrite uintptr 41272 var ppPtr uintptr 41273 41274 var pFinal uintptr = uintptr(0) 41275 if !(isCrash != 0) { 41276 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41277 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile { 41278 pFinal = pWrite 41279 } 41280 } 41281 } else if iDc&(SQLITE_IOCAP_SEQUENTIAL|SQLITE_IOCAP_SAFE_APPEND) != 0 { 41282 var nWrite int32 = 0 41283 41284 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41285 nWrite++ 41286 } 41287 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 41288 *(*int32)(unsafe.Pointer(bp)) = func() int32 { 41289 if *(*int32)(unsafe.Pointer(bp)) < 0 { 41290 return -1 * *(*int32)(unsafe.Pointer(bp)) 41291 } 41292 return *(*int32)(unsafe.Pointer(bp)) 41293 }() % nWrite 41294 for pWrite = g.FpWriteList; *(*int32)(unsafe.Pointer(bp)) > 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41295 *(*int32)(unsafe.Pointer(bp))-- 41296 } 41297 pFinal = pWrite 41298 } 41299 41300 ppPtr = uintptr(unsafe.Pointer(&g)) 41301 for pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)); rc == SQLITE_OK && pWrite != 0; pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)) { 41302 var pRealFile uintptr = (*CrashFile)(unsafe.Pointer((*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile)).FpRealFile 41303 41304 var eAction int32 = 0 41305 if !(isCrash != 0) { 41306 eAction = 2 41307 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile || iDc&SQLITE_IOCAP_SEQUENTIAL != 0 { 41308 eAction = 1 41309 } 41310 } else { 41311 sqlite3.Xsqlite3_randomness(tls, 1, bp+4) 41312 41313 if iDc&SQLITE_IOCAP_ATOMIC != 0 || (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf == uintptr(0) { 41314 *(*int8)(unsafe.Pointer(bp + 4)) &= int8(0x01) 41315 } 41316 41317 if iDc&SQLITE_IOCAP_SEQUENTIAL != 0 && pWrite != pFinal { 41318 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 41319 } 41320 41321 if iDc&SQLITE_IOCAP_SAFE_APPEND != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 41322 sqlite3.Xsqlite3OsFileSize(tls, pRealFile, bp+8) 41323 if *(*i64)(unsafe.Pointer(bp + 8)) == (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset { 41324 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 41325 } 41326 } 41327 41328 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x06 == 0x06 { 41329 eAction = 3 41330 } else { 41331 eAction = func() int32 { 41332 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x01 != 0 { 41333 return 2 41334 } 41335 return 1 41336 }() 41337 } 41338 } 41339 41340 switch eAction { 41341 case 1: 41342 { 41343 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 41344 rc = writeDbFile(tls, 41345 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf, int64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf), (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 41346 } else { 41347 rc = sqlite3.Xsqlite3OsTruncate(tls, pRealFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 41348 } 41349 *(*uintptr)(unsafe.Pointer(ppPtr)) = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext 41350 crash_free(tls, pWrite) 41351 break 41352 41353 } 41354 case 2: 41355 { 41356 ppPtr = pWrite + 20 41357 break 41358 41359 } 41360 case 3: 41361 { 41362 var zGarbage uintptr 41363 var iFirst int32 = int32((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset / i64(g.FiSectorSize)) 41364 var iLast int32 = int32(((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset + i64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf) - int64(1)) / i64(g.FiSectorSize)) 41365 41366 zGarbage = crash_malloc(tls, g.FiSectorSize) 41367 if zGarbage != 0 { 41368 var i sqlite3_int64 41369 for i = sqlite3_int64(iFirst); rc == SQLITE_OK && i <= sqlite3_int64(iLast); i++ { 41370 sqlite3.Xsqlite3_randomness(tls, g.FiSectorSize, zGarbage) 41371 rc = writeDbFile(tls, 41372 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, zGarbage, int64(g.FiSectorSize), i*sqlite3_int64(g.FiSectorSize)) 41373 } 41374 crash_free(tls, zGarbage) 41375 } else { 41376 rc = SQLITE_NOMEM 41377 } 41378 41379 ppPtr = pWrite + 20 41380 break 41381 41382 } 41383 41384 default: 41385 } 41386 41387 if pWrite == pFinal { 41388 break 41389 } 41390 } 41391 41392 if rc == SQLITE_OK && isCrash != 0 { 41393 libc.Xexit(tls, -1) 41394 } 41395 41396 for pWrite = g.FpWriteList; pWrite != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41397 } 41398 g.FpWriteListEnd = pWrite 41399 41400 return rc 41401 } 41402 41403 func writeListAppend(tls *libc.TLS, pFile uintptr, iOffset sqlite3_int64, zBuf uintptr, nBuf int32) int32 { 41404 var pNew uintptr 41405 41406 pNew = crash_malloc(tls, int32(uint32(unsafe.Sizeof(WriteBuffer{}))+uint32(nBuf))) 41407 if pNew == uintptr(0) { 41408 libc.Xfprintf(tls, libc.Xstderr, ts+26365, 0) 41409 } 41410 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(WriteBuffer{}))+uint32(nBuf)) 41411 (*WriteBuffer)(unsafe.Pointer(pNew)).FiOffset = iOffset 41412 (*WriteBuffer)(unsafe.Pointer(pNew)).FnBuf = nBuf 41413 (*WriteBuffer)(unsafe.Pointer(pNew)).FpFile = pFile 41414 if zBuf != 0 { 41415 (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf = pNew + 1*24 41416 libc.Xmemcpy(tls, (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf, zBuf, uint32(nBuf)) 41417 } 41418 41419 if g.FpWriteList != 0 { 41420 (*WriteBuffer)(unsafe.Pointer(g.FpWriteListEnd)).FpNext = pNew 41421 } else { 41422 g.FpWriteList = pNew 41423 } 41424 g.FpWriteListEnd = pNew 41425 41426 return SQLITE_OK 41427 } 41428 41429 func cfClose(tls *libc.TLS, pFile uintptr) int32 { 41430 var pCrash uintptr = pFile 41431 writeListSync(tls, pCrash, 0) 41432 sqlite3.Xsqlite3OsClose(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FpRealFile) 41433 return SQLITE_OK 41434 } 41435 41436 func cfRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 41437 var pCrash uintptr = pFile 41438 var nCopy int32 = func() int32 { 41439 if i64(iAmt) < (*CrashFile)(unsafe.Pointer(pCrash)).FiSize-iOfst { 41440 return int32(i64(iAmt)) 41441 } 41442 return int32((*CrashFile)(unsafe.Pointer(pCrash)).FiSize - iOfst) 41443 }() 41444 41445 if nCopy > 0 { 41446 libc.Xmemcpy(tls, zBuf, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), uint32(nCopy)) 41447 } 41448 41449 if nCopy < iAmt { 41450 return SQLITE_IOERR | int32(2)<<8 41451 } 41452 41453 return SQLITE_OK 41454 } 41455 41456 func cfWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 41457 var pCrash uintptr = pFile 41458 if sqlite_int64(iAmt)+iOfst > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 41459 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(sqlite_int64(iAmt) + iOfst)) 41460 } 41461 for (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > i64((*CrashFile)(unsafe.Pointer(pCrash)).FnData) { 41462 var zNew uintptr 41463 var nNew int32 = (*CrashFile)(unsafe.Pointer(pCrash)).FnData*2 + 4096 41464 zNew = crash_realloc(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData, nNew) 41465 if !(zNew != 0) { 41466 return SQLITE_NOMEM 41467 } 41468 libc.Xmemset(tls, zNew+uintptr((*CrashFile)(unsafe.Pointer(pCrash)).FnData), 0, uint32(nNew-(*CrashFile)(unsafe.Pointer(pCrash)).FnData)) 41469 (*CrashFile)(unsafe.Pointer(pCrash)).FnData = nNew 41470 (*CrashFile)(unsafe.Pointer(pCrash)).FzData = zNew 41471 } 41472 libc.Xmemcpy(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), zBuf, uint32(iAmt)) 41473 return writeListAppend(tls, pFile, iOfst, zBuf, iAmt) 41474 } 41475 41476 func cfTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 41477 var pCrash uintptr = pFile 41478 41479 if (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > size { 41480 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(size)) 41481 } 41482 return writeListAppend(tls, pFile, size, uintptr(0), 0) 41483 } 41484 41485 func cfSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 41486 var pCrash uintptr = pFile 41487 var isCrash int32 = 0 41488 41489 var zName uintptr = (*CrashFile)(unsafe.Pointer(pCrash)).FzName 41490 var zCrashFile uintptr = uintptr(unsafe.Pointer(&g)) + 20 41491 var nName int32 = int32(libc.Xstrlen(tls, zName)) 41492 var nCrashFile int32 = int32(libc.Xstrlen(tls, zCrashFile)) 41493 41494 if nCrashFile > 0 && int32(*(*int8)(unsafe.Pointer(zCrashFile + uintptr(nCrashFile-1)))) == '*' { 41495 nCrashFile-- 41496 if nName > nCrashFile { 41497 nName = nCrashFile 41498 } 41499 } 41500 41501 if nName == nCrashFile && 0 == libc.Xmemcmp(tls, zName, zCrashFile, uint32(nName)) { 41502 if libc.PreDecInt32(&g.FiCrash, 1) == 0 { 41503 isCrash = 1 41504 } 41505 } 41506 41507 return writeListSync(tls, pCrash, isCrash) 41508 } 41509 41510 func cfFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 41511 var pCrash uintptr = pFile 41512 *(*sqlite_int64)(unsafe.Pointer(pSize)) = (*CrashFile)(unsafe.Pointer(pCrash)).FiSize 41513 return SQLITE_OK 41514 } 41515 41516 func cfLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 41517 return sqlite3.Xsqlite3OsLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 41518 } 41519 41520 func cfUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 41521 return sqlite3.Xsqlite3OsUnlock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 41522 } 41523 41524 func cfCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 41525 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, pResOut) 41526 } 41527 41528 func cfFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 41529 if op == SQLITE_FCNTL_SIZE_HINT { 41530 var pCrash uintptr = pFile 41531 var nByte i64 = *(*i64)(unsafe.Pointer(pArg)) 41532 if nByte > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 41533 if SQLITE_OK == writeListAppend(tls, pFile, nByte, uintptr(0), 0) { 41534 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(nByte)) 41535 } 41536 } 41537 return SQLITE_OK 41538 } 41539 return sqlite3.Xsqlite3OsFileControl(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, op, pArg) 41540 } 41541 41542 func cfSectorSize(tls *libc.TLS, pFile uintptr) int32 { 41543 return g.FiSectorSize 41544 } 41545 41546 func cfDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 41547 return g.FiDeviceCharacteristics 41548 } 41549 41550 func cfShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 41551 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41552 return (*struct { 41553 f func(*libc.TLS, uintptr, int32, int32, int32) int32 41554 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 41555 } 41556 41557 func cfShmBarrier(tls *libc.TLS, pFile uintptr) { 41558 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41559 (*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) 41560 } 41561 41562 func cfShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 41563 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41564 return (*struct { 41565 f func(*libc.TLS, uintptr, int32) int32 41566 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, delFlag) 41567 } 41568 41569 func cfShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, sz int32, w int32, pp uintptr) int32 { 41570 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41571 return (*struct { 41572 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 41573 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iRegion, sz, w, pp) 41574 } 41575 41576 var CrashFileVtab = sqlite3_io_methods{ 41577 FiVersion: 2, 41578 FxClose: 0, 41579 FxRead: 0, 41580 FxWrite: 0, 41581 FxTruncate: 0, 41582 FxSync: 0, 41583 FxFileSize: 0, 41584 FxLock: 0, 41585 FxUnlock: 0, 41586 FxCheckReservedLock: 0, 41587 FxFileControl: 0, 41588 FxSectorSize: 0, 41589 FxDeviceCharacteristics: 0, 41590 FxShmMap: 0, 41591 FxShmLock: 0, 41592 FxShmBarrier: 0, 41593 FxShmUnmap: 0, 41594 } 41595 41596 type crashAppData = struct{ FpOrig uintptr } 41597 41598 func cfOpen(tls *libc.TLS, pCfVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 41599 bp := tls.Alloc(8) 41600 defer tls.Free(8) 41601 41602 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41603 var rc int32 41604 var pWrapper uintptr = pFile 41605 var pReal uintptr = pWrapper + 1*32 41606 41607 libc.Xmemset(tls, pWrapper, 0, uint32(unsafe.Sizeof(CrashFile{}))) 41608 rc = sqlite3.Xsqlite3OsOpen(tls, pVfs, zName, pReal, flags, pOutFlags) 41609 41610 if rc == SQLITE_OK { 41611 (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod = uintptr(unsafe.Pointer(&CrashFileVtab)) 41612 (*CrashFile)(unsafe.Pointer(pWrapper)).FzName = zName 41613 (*CrashFile)(unsafe.Pointer(pWrapper)).FpRealFile = pReal 41614 rc = sqlite3.Xsqlite3OsFileSize(tls, pReal, bp) 41615 (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize = i64(int32(*(*i64)(unsafe.Pointer(bp)))) 41616 (*CrashFile)(unsafe.Pointer(pWrapper)).Fflags = flags 41617 } 41618 if rc == SQLITE_OK { 41619 (*CrashFile)(unsafe.Pointer(pWrapper)).FnData = int32(int64(4096) + (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize) 41620 (*CrashFile)(unsafe.Pointer(pWrapper)).FzData = crash_malloc(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FnData) 41621 if (*CrashFile)(unsafe.Pointer(pWrapper)).FzData != 0 { 41622 var iOff i64 41623 41624 libc.Xmemset(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData, 0, uint32((*CrashFile)(unsafe.Pointer(pWrapper)).FnData)) 41625 for iOff = int64(0); iOff < (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize; iOff = iOff + int64(512) { 41626 var nRead int32 = int32((*CrashFile)(unsafe.Pointer(pWrapper)).FiSize - iOff) 41627 if nRead > 512 { 41628 nRead = 512 41629 } 41630 rc = sqlite3.Xsqlite3OsRead(tls, pReal, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData+uintptr(iOff), nRead, iOff) 41631 } 41632 } else { 41633 rc = SQLITE_NOMEM 41634 } 41635 } 41636 if rc != SQLITE_OK && (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod != 0 { 41637 sqlite3.Xsqlite3OsClose(tls, pFile) 41638 } 41639 return rc 41640 } 41641 41642 func cfDelete(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, dirSync int32) int32 { 41643 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41644 return (*struct { 41645 f func(*libc.TLS, uintptr, uintptr, int32) int32 41646 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDelete})).f(tls, pVfs, zPath, dirSync) 41647 } 41648 41649 func cfAccess(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 41650 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41651 return (*struct { 41652 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41653 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxAccess})).f(tls, pVfs, zPath, flags, pResOut) 41654 } 41655 41656 func cfFullPathname(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) int32 { 41657 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41658 return (*struct { 41659 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41660 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})).f(tls, pVfs, zPath, nPathOut, zPathOut) 41661 } 41662 41663 func cfDlOpen(tls *libc.TLS, pCfVfs uintptr, zPath uintptr) uintptr { 41664 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41665 return (*struct { 41666 f func(*libc.TLS, uintptr, uintptr) uintptr 41667 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlOpen})).f(tls, pVfs, zPath) 41668 } 41669 41670 func cfDlError(tls *libc.TLS, pCfVfs uintptr, nByte int32, zErrMsg uintptr) { 41671 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41672 (*struct { 41673 f func(*libc.TLS, uintptr, int32, uintptr) 41674 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlError})).f(tls, pVfs, nByte, zErrMsg) 41675 } 41676 41677 func cfDlSym(tls *libc.TLS, pCfVfs uintptr, pH uintptr, zSym uintptr) uintptr { 41678 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41679 return (*struct { 41680 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 41681 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlSym})).f(tls, pVfs, pH, zSym) 41682 } 41683 41684 func cfDlClose(tls *libc.TLS, pCfVfs uintptr, pHandle uintptr) { 41685 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41686 (*struct { 41687 f func(*libc.TLS, uintptr, uintptr) 41688 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlClose})).f(tls, pVfs, pHandle) 41689 } 41690 41691 func cfRandomness(tls *libc.TLS, pCfVfs uintptr, nByte int32, zBufOut uintptr) int32 { 41692 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41693 return (*struct { 41694 f func(*libc.TLS, uintptr, int32, uintptr) int32 41695 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxRandomness})).f(tls, pVfs, nByte, zBufOut) 41696 } 41697 41698 func cfSleep(tls *libc.TLS, pCfVfs uintptr, nMicro int32) int32 { 41699 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41700 return (*struct { 41701 f func(*libc.TLS, uintptr, int32) int32 41702 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSleep})).f(tls, pVfs, nMicro) 41703 } 41704 41705 func cfCurrentTime(tls *libc.TLS, pCfVfs uintptr, pTimeOut uintptr) int32 { 41706 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41707 return (*struct { 41708 f func(*libc.TLS, uintptr, uintptr) int32 41709 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTime})).f(tls, pVfs, pTimeOut) 41710 } 41711 41712 func cfGetLastError(tls *libc.TLS, pCfVfs uintptr, n int32, z uintptr) int32 { 41713 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41714 return (*struct { 41715 f func(*libc.TLS, uintptr, int32, uintptr) int32 41716 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetLastError})).f(tls, pVfs, n, z) 41717 } 41718 41719 func processDevSymArgs(tls *libc.TLS, interp uintptr, objc int32, objv uintptr, piDeviceChar uintptr, piSectorSize uintptr) int32 { 41720 bp := tls.Alloc(196) 41721 defer tls.Free(196) 41722 41723 *(*[14]DeviceFlag)(unsafe.Pointer(bp + 80)) = [14]DeviceFlag{ 41724 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 41725 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 41726 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 41727 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 41728 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 41729 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 41730 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 41731 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 41732 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 41733 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 41734 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 41735 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 41736 {FzName: ts + 26529, FiValue: SQLITE_IOCAP_BATCH_ATOMIC}, 41737 {}, 41738 } 41739 var i int32 41740 var iDc int32 = 0 41741 *(*int32)(unsafe.Pointer(bp + 68)) = 0 41742 var setSectorsize int32 = 0 41743 var setDeviceChar int32 = 0 41744 41745 for i = 0; i < objc; i = i + 2 { 41746 var zOpt uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp+64) 41747 41748 if (*(*int32)(unsafe.Pointer(bp + 64)) > 11 || *(*int32)(unsafe.Pointer(bp + 64)) < 2 || libc.Xstrncmp(tls, ts+26542, zOpt, uint32(*(*int32)(unsafe.Pointer(bp + 64)))) != 0) && 41749 (*(*int32)(unsafe.Pointer(bp + 64)) > 16 || *(*int32)(unsafe.Pointer(bp + 64)) < 2 || libc.Xstrncmp(tls, ts+26554, zOpt, uint32(*(*int32)(unsafe.Pointer(bp + 64)))) != 0) { 41750 tcl.XTcl_AppendResult(tls, interp, 41751 libc.VaList(bp, ts+26571, zOpt, 41752 ts+26585, 0)) 41753 return TCL_ERROR 41754 } 41755 if i == objc-1 { 41756 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26633, zOpt, ts+11945, 0)) 41757 return TCL_ERROR 41758 } 41759 41760 if int32(*(*int8)(unsafe.Pointer(zOpt + 1))) == 's' { 41761 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)), bp+68) != 0 { 41762 return TCL_ERROR 41763 } 41764 setSectorsize = 1 41765 } else { 41766 var j int32 41767 41768 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)), bp+72, bp+76) != 0 { 41769 return TCL_ERROR 41770 } 41771 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 72)); j++ { 41772 var rc int32 41773 41774 var pFlag uintptr = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 76)) + uintptr(j)*4))) 41775 (*Tcl_Obj)(unsafe.Pointer(pFlag)).FrefCount++ 41776 tcl.XTcl_UtfToLower(tls, tcl.XTcl_GetString(tls, pFlag)) 41777 41778 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 41779 interp, pFlag, bp+80, int32(unsafe.Sizeof(DeviceFlag{})), ts+26664, 0, bp+192) 41780 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 41781 var _objPtr uintptr = pFlag 41782 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 41783 tcl.XTclFreeObj(tls, _objPtr) 41784 } 41785 } 41786 if rc != 0 { 41787 return TCL_ERROR 41788 } 41789 41790 iDc = iDc | (*DeviceFlag)(unsafe.Pointer(bp+80+uintptr(*(*int32)(unsafe.Pointer(bp + 192)))*8)).FiValue 41791 } 41792 setDeviceChar = 1 41793 } 41794 } 41795 41796 if setDeviceChar != 0 { 41797 *(*int32)(unsafe.Pointer(piDeviceChar)) = iDc 41798 } 41799 if setSectorsize != 0 { 41800 *(*int32)(unsafe.Pointer(piSectorSize)) = *(*int32)(unsafe.Pointer(bp + 68)) 41801 } 41802 41803 return TCL_OK 41804 } 41805 41806 type DeviceFlag = struct { 41807 FzName uintptr 41808 FiValue int32 41809 } 41810 41811 func crashNowCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41812 if objc != 1 { 41813 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41814 return TCL_ERROR 41815 } 41816 writeListSync(tls, uintptr(0), 1) 41817 41818 return TCL_OK 41819 } 41820 41821 func crashEnableCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41822 bp := tls.Alloc(8) 41823 defer tls.Free(8) 41824 41825 *(*int32)(unsafe.Pointer(bp + 4)) = 0 41826 41827 if objc != 2 && objc != 3 { 41828 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26677) 41829 return TCL_ERROR 41830 } 41831 41832 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 41833 return TCL_ERROR 41834 } 41835 if objc == 3 && tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 41836 return TCL_ERROR 41837 } 41838 41839 if *(*int32)(unsafe.Pointer(bp)) != 0 && crashVfs.FpAppData != 0 || !(*(*int32)(unsafe.Pointer(bp)) != 0) && !(int32(crashVfs.FpAppData) != 0) { 41840 return TCL_OK 41841 } 41842 41843 if crashVfs.FpAppData == uintptr(0) { 41844 var pOriginalVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 41845 crashVfs.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FmxPathname 41846 crashVfs.FpAppData = pOriginalVfs 41847 crashVfs.FszOsFile = int32(uint32(unsafe.Sizeof(CrashFile{})) + uint32((*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FszOsFile)) 41848 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&crashVfs)), *(*int32)(unsafe.Pointer(bp + 4))) 41849 } else { 41850 crashVfs.FpAppData = uintptr(0) 41851 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&crashVfs))) 41852 } 41853 41854 return TCL_OK 41855 } 41856 41857 var crashVfs = sqlite3_vfs{ 41858 FiVersion: 2, 41859 FzName: ts + 26694, 41860 FxOpen: 0, 41861 FxDelete: 0, 41862 FxAccess: 0, 41863 FxFullPathname: 0, 41864 FxDlOpen: 0, 41865 FxDlError: 0, 41866 FxDlSym: 0, 41867 FxDlClose: 0, 41868 FxRandomness: 0, 41869 FxSleep: 0, 41870 FxCurrentTime: 0, 41871 FxGetLastError: 0, 41872 } 41873 41874 func crashParamsObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41875 bp := tls.Alloc(48) 41876 defer tls.Free(48) 41877 41878 var zCrashFile uintptr 41879 41880 *(*int32)(unsafe.Pointer(bp + 40)) = -1 41881 *(*int32)(unsafe.Pointer(bp + 44)) = -1 41882 41883 if !(objc < 3) { 41884 goto __1 41885 } 41886 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26700) 41887 goto error 41888 __1: 41889 ; 41890 zCrashFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*4)), bp+32) 41891 if !(uint32(*(*int32)(unsafe.Pointer(bp + 32))) >= uint32(unsafe.Sizeof([500]int8{}))) { 41892 goto __2 41893 } 41894 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26726, zCrashFile, ts+11945, 0)) 41895 goto error 41896 __2: 41897 ; 41898 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*4)), bp+36) != 0) { 41899 goto __3 41900 } 41901 goto error 41902 __3: 41903 ; 41904 if !(processDevSymArgs(tls, interp, objc-3, objv+1*4, bp+40, bp+44) != 0) { 41905 goto __4 41906 } 41907 return TCL_ERROR 41908 __4: 41909 ; 41910 if !(*(*int32)(unsafe.Pointer(bp + 40)) >= 0) { 41911 goto __5 41912 } 41913 g.FiDeviceCharacteristics = *(*int32)(unsafe.Pointer(bp + 40)) 41914 __5: 41915 ; 41916 if !(*(*int32)(unsafe.Pointer(bp + 44)) >= 0) { 41917 goto __6 41918 } 41919 g.FiSectorSize = *(*int32)(unsafe.Pointer(bp + 44)) 41920 __6: 41921 ; 41922 g.FiCrash = *(*int32)(unsafe.Pointer(bp + 36)) 41923 libc.Xmemcpy(tls, uintptr(unsafe.Pointer(&g))+20, zCrashFile, uint32(*(*int32)(unsafe.Pointer(bp + 32))+1)) 41924 sqlite3CrashTestEnable = 1 41925 return TCL_OK 41926 41927 error: 41928 return TCL_ERROR 41929 } 41930 41931 func devSymObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41932 bp := tls.Alloc(8) 41933 defer tls.Free(8) 41934 41935 *(*int32)(unsafe.Pointer(bp)) = -1 41936 *(*int32)(unsafe.Pointer(bp + 4)) = -1 41937 41938 if processDevSymArgs(tls, interp, objc-1, objv+1*4, bp, bp+4) != 0 { 41939 return TCL_ERROR 41940 } 41941 devsym_register(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 41942 41943 return TCL_OK 41944 } 41945 41946 func writeCrashObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41947 bp := tls.Alloc(4) 41948 defer tls.Free(4) 41949 41950 *(*int32)(unsafe.Pointer(bp)) = 0 41951 41952 if objc != 2 { 41953 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26750) 41954 return TCL_ERROR 41955 } 41956 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 41957 return TCL_ERROR 41958 } 41959 41960 devsym_crash_on_write(tls, *(*int32)(unsafe.Pointer(bp))) 41961 return TCL_OK 41962 } 41963 41964 func dsUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41965 if objc != 1 { 41966 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41967 return TCL_ERROR 41968 } 41969 41970 devsym_unregister(tls) 41971 return TCL_OK 41972 } 41973 41974 func jtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41975 bp := tls.Alloc(48) 41976 defer tls.Free(48) 41977 41978 var zParent uintptr = uintptr(0) 41979 41980 if objc != 2 && objc != 3 { 41981 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26757) 41982 return TCL_ERROR 41983 } 41984 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 41985 if objc == 3 { 41986 if libc.Xstrcmp(tls, zParent, ts+26779) != 0 { 41987 tcl.XTcl_AppendResult(tls, interp, 41988 libc.VaList(bp, ts+11851, zParent, ts+26788, 0)) 41989 return TCL_ERROR 41990 } 41991 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 41992 } 41993 41994 if !(int32(*(*int8)(unsafe.Pointer(zParent))) != 0) { 41995 zParent = uintptr(0) 41996 } 41997 if jt_register(tls, zParent, libc.Bool32(objc == 3)) != 0 { 41998 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26808, 0)) 41999 return TCL_ERROR 42000 } 42001 42002 return TCL_OK 42003 } 42004 42005 func jtUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42006 if objc != 1 { 42007 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 42008 return TCL_ERROR 42009 } 42010 42011 jt_unregister(tls) 42012 return TCL_OK 42013 } 42014 42015 func Sqlitetest6_Init(tls *libc.TLS, interp uintptr) int32 { 42016 tcl.XTcl_CreateObjCommand(tls, interp, ts+26829, *(*uintptr)(unsafe.Pointer(&struct { 42017 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42018 }{crashEnableCmd})), uintptr(0), uintptr(0)) 42019 tcl.XTcl_CreateObjCommand(tls, interp, ts+26850, *(*uintptr)(unsafe.Pointer(&struct { 42020 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42021 }{crashParamsObjCmd})), uintptr(0), uintptr(0)) 42022 tcl.XTcl_CreateObjCommand(tls, interp, ts+26870, *(*uintptr)(unsafe.Pointer(&struct { 42023 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42024 }{crashNowCmd})), uintptr(0), uintptr(0)) 42025 tcl.XTcl_CreateObjCommand(tls, interp, ts+26888, *(*uintptr)(unsafe.Pointer(&struct { 42026 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42027 }{devSymObjCmd})), uintptr(0), uintptr(0)) 42028 tcl.XTcl_CreateObjCommand(tls, interp, ts+26912, *(*uintptr)(unsafe.Pointer(&struct { 42029 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42030 }{writeCrashObjCmd})), uintptr(0), uintptr(0)) 42031 tcl.XTcl_CreateObjCommand(tls, interp, ts+26935, *(*uintptr)(unsafe.Pointer(&struct { 42032 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42033 }{dsUnregisterObjCmd})), uintptr(0), uintptr(0)) 42034 tcl.XTcl_CreateObjCommand(tls, interp, ts+26953, *(*uintptr)(unsafe.Pointer(&struct { 42035 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42036 }{jtObjCmd})), uintptr(0), uintptr(0)) 42037 tcl.XTcl_CreateObjCommand(tls, interp, ts+26969, *(*uintptr)(unsafe.Pointer(&struct { 42038 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42039 }{jtUnregisterObjCmd})), uintptr(0), uintptr(0)) 42040 return TCL_OK 42041 } 42042 42043 type Thread1 = struct { 42044 FzFilename uintptr 42045 FxOp uintptr 42046 FzArg uintptr 42047 Fopnum int32 42048 Fbusy int32 42049 Fcompleted int32 42050 Fdb uintptr 42051 FpStmt uintptr 42052 FzErr uintptr 42053 FzStaticErr uintptr 42054 Frc int32 42055 Fargc int32 42056 Fargv [100]uintptr 42057 Fcolv [100]uintptr 42058 FnServer int32 42059 } 42060 42061 var threadset1 [26]Thread1 42062 42063 func client_main(tls *libc.TLS, pArg uintptr) uintptr { 42064 var p uintptr = pArg 42065 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 42066 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42067 } 42068 sqlite3_client_open(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename, p+24) 42069 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) { 42070 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread1)(unsafe.Pointer(p)).Fdb)) 42071 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42072 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 42073 } 42074 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42075 (*Thread1)(unsafe.Pointer(p)).Fcompleted = 1 42076 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42077 libc.Xsched_yield(tls) 42078 } 42079 for (*Thread1)(unsafe.Pointer(p)).FxOp != 0 { 42080 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 42081 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 42082 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 42083 } 42084 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread1)(unsafe.Pointer(p)).FxOp})).f(tls, p) 42085 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 42086 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42087 libc.Xsched_yield(tls) 42088 } 42089 } 42090 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 42091 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42092 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42093 } 42094 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 42095 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42096 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 42097 } 42098 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 42099 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 42100 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 42101 } 42102 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 42103 sqlite3.Xsqlite3_thread_cleanup(tls) 42104 return uintptr(0) 42105 } 42106 42107 func parse_client_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 42108 bp := tls.Alloc(16) 42109 defer tls.Free(16) 42110 42111 if zArg == uintptr(0) || int32(*(*int8)(unsafe.Pointer(zArg))) == 0 || int32(*(*int8)(unsafe.Pointer(zArg + 1))) != 0 || !(int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zArg)))))*2)))&int32(_ISupper) != 0) { 42112 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 42113 return -1 42114 } 42115 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 42116 } 42117 42118 func tcl_client_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42119 bp := tls.Alloc(92) 42120 defer tls.Free(92) 42121 42122 var i int32 42123 42124 var rc int32 42125 42126 if argc != 3 { 42127 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42128 ts+25780, 0)) 42129 return TCL_ERROR 42130 } 42131 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42132 if i < 0 { 42133 return TCL_ERROR 42134 } 42135 if threadset1[i].Fbusy != 0 { 42136 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*4)), ts+25801, 0)) 42137 return TCL_ERROR 42138 } 42139 threadset1[i].Fbusy = 1 42140 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 42141 threadset1[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 42142 threadset1[i].Fopnum = 1 42143 threadset1[i].Fcompleted = 0 42144 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 42145 f func(*libc.TLS, uintptr) uintptr 42146 }{client_main})), uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42147 if rc != 0 { 42148 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 42149 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 42150 threadset1[i].Fbusy = 0 42151 return TCL_ERROR 42152 } 42153 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 42154 if threadset1[i].FnServer == 0 { 42155 threadset1[i].FnServer = 1 42156 sqlite3_server_start2(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852+848) 42157 } 42158 return TCL_OK 42159 } 42160 42161 func client_wait(tls *libc.TLS, p uintptr) { 42162 for (*Thread1)(unsafe.Pointer(p)).Fopnum > (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42163 libc.Xsched_yield(tls) 42164 } 42165 } 42166 42167 func tcl_client_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42168 bp := tls.Alloc(48) 42169 defer tls.Free(48) 42170 42171 var i int32 42172 42173 if argc != 2 { 42174 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42175 ts+25849, 0)) 42176 return TCL_ERROR 42177 } 42178 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42179 if i < 0 { 42180 return TCL_ERROR 42181 } 42182 if !(threadset1[i].Fbusy != 0) { 42183 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42184 return TCL_ERROR 42185 } 42186 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42187 return TCL_OK 42188 } 42189 42190 func stop_thread(tls *libc.TLS, p uintptr) { 42191 client_wait(tls, p) 42192 (*Thread1)(unsafe.Pointer(p)).FxOp = uintptr(0) 42193 (*Thread1)(unsafe.Pointer(p)).Fopnum++ 42194 client_wait(tls, p) 42195 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzArg) 42196 (*Thread1)(unsafe.Pointer(p)).FzArg = uintptr(0) 42197 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename) 42198 (*Thread1)(unsafe.Pointer(p)).FzFilename = uintptr(0) 42199 (*Thread1)(unsafe.Pointer(p)).Fbusy = 0 42200 } 42201 42202 func tcl_client_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42203 bp := tls.Alloc(48) 42204 defer tls.Free(48) 42205 42206 var i int32 42207 42208 if argc != 2 { 42209 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42210 ts+25849, 0)) 42211 return TCL_ERROR 42212 } 42213 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*4))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*4)) + 1))) == 0 { 42214 for i = 0; i < N_THREAD; i++ { 42215 if threadset1[i].Fbusy != 0 { 42216 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42217 } 42218 } 42219 } else { 42220 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42221 if i < 0 { 42222 return TCL_ERROR 42223 } 42224 if !(threadset1[i].Fbusy != 0) { 42225 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42226 return TCL_ERROR 42227 } 42228 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42229 } 42230 42231 for i = 0; i < N_THREAD && threadset1[i].Fbusy == 0; i++ { 42232 } 42233 if i >= N_THREAD { 42234 sqlite3_server_stop(tls) 42235 for 1 != 0 { 42236 for i = 0; i < N_THREAD && threadset1[i].FnServer == 0; i++ { 42237 } 42238 if i == N_THREAD { 42239 break 42240 } 42241 libc.Xsched_yield(tls) 42242 } 42243 } 42244 return TCL_OK 42245 } 42246 42247 func tcl_client_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42248 bp := tls.Alloc(172) 42249 defer tls.Free(172) 42250 42251 var i int32 42252 42253 if argc != 2 { 42254 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42255 ts+25849, 0)) 42256 return TCL_ERROR 42257 } 42258 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42259 if i < 0 { 42260 return TCL_ERROR 42261 } 42262 if !(threadset1[i].Fbusy != 0) { 42263 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42264 return TCL_ERROR 42265 } 42266 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42267 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset1[i].Fargc)) 42268 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 42269 return TCL_OK 42270 } 42271 42272 func tcl_client_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42273 bp := tls.Alloc(84) 42274 defer tls.Free(84) 42275 42276 var i int32 42277 42278 if argc != 3 { 42279 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42280 ts+25868, 0)) 42281 return TCL_ERROR 42282 } 42283 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42284 if i < 0 { 42285 return TCL_ERROR 42286 } 42287 if !(threadset1[i].Fbusy != 0) { 42288 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42289 return TCL_ERROR 42290 } 42291 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+80) != 0 { 42292 return TCL_ERROR 42293 } 42294 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42295 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 42296 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 42297 return TCL_ERROR 42298 } 42299 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset1)) + uintptr(i)*852 + 48 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*4)), 0)) 42300 return TCL_OK 42301 } 42302 42303 func tcl_client_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42304 bp := tls.Alloc(84) 42305 defer tls.Free(84) 42306 42307 var i int32 42308 42309 if argc != 3 { 42310 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42311 ts+25868, 0)) 42312 return TCL_ERROR 42313 } 42314 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42315 if i < 0 { 42316 return TCL_ERROR 42317 } 42318 if !(threadset1[i].Fbusy != 0) { 42319 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42320 return TCL_ERROR 42321 } 42322 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4)), bp+80) != 0 { 42323 return TCL_ERROR 42324 } 42325 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42326 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 42327 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 42328 return TCL_ERROR 42329 } 42330 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset1)) + uintptr(i)*852 + 448 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*4)), 0)) 42331 return TCL_OK 42332 } 42333 42334 func tcl_client_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42335 bp := tls.Alloc(64) 42336 defer tls.Free(64) 42337 42338 var i int32 42339 var zName uintptr 42340 42341 if argc != 2 { 42342 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42343 ts+25849, 0)) 42344 return TCL_ERROR 42345 } 42346 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42347 if i < 0 { 42348 return TCL_ERROR 42349 } 42350 if !(threadset1[i].Fbusy != 0) { 42351 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42352 return TCL_ERROR 42353 } 42354 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42355 zName = sqlite3.Xsqlite3ErrName(tls, threadset1[i].Frc) 42356 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 42357 return TCL_OK 42358 } 42359 42360 func tcl_client_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42361 bp := tls.Alloc(64) 42362 defer tls.Free(64) 42363 42364 var i int32 42365 42366 if argc != 2 { 42367 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42368 ts+25849, 0)) 42369 return TCL_ERROR 42370 } 42371 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42372 if i < 0 { 42373 return TCL_ERROR 42374 } 42375 if !(threadset1[i].Fbusy != 0) { 42376 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42377 return TCL_ERROR 42378 } 42379 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42380 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset1[i].FzErr, 0)) 42381 return TCL_OK 42382 } 42383 42384 func do_compile1(tls *libc.TLS, p uintptr) { 42385 if (*Thread1)(unsafe.Pointer(p)).Fdb == uintptr(0) { 42386 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+36, ts+25901) 42387 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42388 return 42389 } 42390 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 42391 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42392 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42393 } 42394 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_prepare(tls, (*Thread1)(unsafe.Pointer(p)).Fdb, (*Thread1)(unsafe.Pointer(p)).FzArg, -1, p+28, uintptr(0)) 42395 } 42396 42397 func tcl_client_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42398 bp := tls.Alloc(56) 42399 defer tls.Free(56) 42400 42401 var i int32 42402 if argc != 3 { 42403 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42404 ts+25921, 0)) 42405 return TCL_ERROR 42406 } 42407 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42408 if i < 0 { 42409 return TCL_ERROR 42410 } 42411 if !(threadset1[i].Fbusy != 0) { 42412 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42413 return TCL_ERROR 42414 } 42415 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42416 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile1})) 42417 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42418 threadset1[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 42419 threadset1[i].Fopnum++ 42420 return TCL_OK 42421 } 42422 42423 func do_step1(tls *libc.TLS, p uintptr) { 42424 var i int32 42425 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42426 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+36, ts+25929) 42427 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42428 return 42429 } 42430 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_step(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42431 if (*Thread1)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 42432 (*Thread1)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42433 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt); i++ { 42434 *(*uintptr)(unsafe.Pointer(p + 48 + uintptr(i)*4)) = sqlite3.Xsqlite3_column_text(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 42435 } 42436 for i = 0; i < (*Thread1)(unsafe.Pointer(p)).Fargc; i++ { 42437 *(*uintptr)(unsafe.Pointer(p + 448 + uintptr(i)*4)) = sqlite3.Xsqlite3_column_name(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 42438 } 42439 } 42440 } 42441 42442 func tcl_client_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42443 bp := tls.Alloc(48) 42444 defer tls.Free(48) 42445 42446 var i int32 42447 if argc != 2 { 42448 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42449 ts+25958, 0)) 42450 return TCL_ERROR 42451 } 42452 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42453 if i < 0 { 42454 return TCL_ERROR 42455 } 42456 if !(threadset1[i].Fbusy != 0) { 42457 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42458 return TCL_ERROR 42459 } 42460 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42461 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step1})) 42462 threadset1[i].Fopnum++ 42463 return TCL_OK 42464 } 42465 42466 func do_finalize1(tls *libc.TLS, p uintptr) { 42467 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42468 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+36, ts+25929) 42469 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42470 return 42471 } 42472 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42473 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42474 } 42475 42476 func tcl_client_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42477 bp := tls.Alloc(48) 42478 defer tls.Free(48) 42479 42480 var i int32 42481 if argc != 2 { 42482 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42483 ts+25958, 0)) 42484 return TCL_ERROR 42485 } 42486 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42487 if i < 0 { 42488 return TCL_ERROR 42489 } 42490 if !(threadset1[i].Fbusy != 0) { 42491 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42492 return TCL_ERROR 42493 } 42494 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42495 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize1})) 42496 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42497 threadset1[i].FzArg = uintptr(0) 42498 threadset1[i].Fopnum++ 42499 return TCL_OK 42500 } 42501 42502 func do_reset(tls *libc.TLS, p uintptr) { 42503 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42504 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+36, ts+25929) 42505 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42506 return 42507 } 42508 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_reset(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42509 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42510 } 42511 42512 func tcl_client_reset(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42513 bp := tls.Alloc(48) 42514 defer tls.Free(48) 42515 42516 var i int32 42517 if argc != 2 { 42518 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42519 ts+25958, 0)) 42520 return TCL_ERROR 42521 } 42522 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42523 if i < 0 { 42524 return TCL_ERROR 42525 } 42526 if !(threadset1[i].Fbusy != 0) { 42527 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42528 return TCL_ERROR 42529 } 42530 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42531 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_reset})) 42532 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42533 threadset1[i].FzArg = uintptr(0) 42534 threadset1[i].Fopnum++ 42535 return TCL_OK 42536 } 42537 42538 func tcl_client_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42539 bp := tls.Alloc(64) 42540 defer tls.Free(64) 42541 42542 var i int32 42543 var j int32 42544 var temp uintptr 42545 if argc != 3 { 42546 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42547 ts+25963, 0)) 42548 return TCL_ERROR 42549 } 42550 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 42551 if i < 0 { 42552 return TCL_ERROR 42553 } 42554 if !(threadset1[i].Fbusy != 0) { 42555 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42556 return TCL_ERROR 42557 } 42558 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*852) 42559 j = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 42560 if j < 0 { 42561 return TCL_ERROR 42562 } 42563 if !(threadset1[j].Fbusy != 0) { 42564 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 42565 return TCL_ERROR 42566 } 42567 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(j)*852) 42568 temp = threadset1[i].Fdb 42569 threadset1[i].Fdb = threadset1[j].Fdb 42570 threadset1[j].Fdb = temp 42571 return TCL_OK 42572 } 42573 42574 func Sqlitetest7_Init(tls *libc.TLS, interp uintptr) int32 { 42575 var i int32 42576 42577 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd6))/uint32(unsafe.Sizeof(struct { 42578 FzName uintptr 42579 FxProc uintptr 42580 }{})); i++ { 42581 tcl.XTcl_CreateCommand(tls, interp, aCmd6[i].FzName, aCmd6[i].FxProc, uintptr(0), uintptr(0)) 42582 } 42583 return TCL_OK 42584 } 42585 42586 var aCmd6 = [13]struct { 42587 FzName uintptr 42588 FxProc uintptr 42589 }{ 42590 {FzName: ts + 26987, FxProc: 0}, 42591 {FzName: ts + 27001, FxProc: 0}, 42592 {FzName: ts + 27013, FxProc: 0}, 42593 {FzName: ts + 27025, FxProc: 0}, 42594 {FzName: ts + 27037, FxProc: 0}, 42595 {FzName: ts + 27049, FxProc: 0}, 42596 {FzName: ts + 27064, FxProc: 0}, 42597 {FzName: ts + 27078, FxProc: 0}, 42598 {FzName: ts + 27091, FxProc: 0}, 42599 {FzName: ts + 27106, FxProc: 0}, 42600 {FzName: ts + 27118, FxProc: 0}, 42601 {FzName: ts + 27131, FxProc: 0}, 42602 {FzName: ts + 27147, FxProc: 0}, 42603 } 42604 42605 type echo_vtab1 = struct { 42606 Fbase sqlite3_vtab 42607 Finterp uintptr 42608 Fdb uintptr 42609 FisPattern int32 42610 FinTransaction int32 42611 FzThis uintptr 42612 FzTableName uintptr 42613 FzLogName uintptr 42614 FnCol int32 42615 FaIndex uintptr 42616 FaCol uintptr 42617 } 42618 42619 type echo_vtab = echo_vtab1 42620 type echo_cursor1 = struct { 42621 Fbase sqlite3_vtab_cursor 42622 FpStmt uintptr 42623 } 42624 42625 type echo_cursor = echo_cursor1 42626 42627 func simulateVtabError(tls *libc.TLS, p uintptr, zMethod uintptr) int32 { 42628 bp := tls.Alloc(152) 42629 defer tls.Free(152) 42630 42631 var zErr uintptr 42632 42633 *(*int8)(unsafe.Pointer(bp + 24 + 127)) = int8(0) 42634 sqlite3.Xsqlite3_snprintf(tls, 127, bp+24, ts+27159, libc.VaList(bp, zMethod, (*echo_vtab)(unsafe.Pointer(p)).FzTableName)) 42635 zErr = tcl.XTcl_GetVar2(tls, (*echo_vtab)(unsafe.Pointer(p)).Finterp, bp+24, uintptr(0), TCL_GLOBAL_ONLY) 42636 if zErr != 0 { 42637 (*echo_vtab)(unsafe.Pointer(p)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+16, zErr)) 42638 } 42639 return libc.Bool32(zErr != uintptr(0)) 42640 } 42641 42642 func dequoteString(tls *libc.TLS, z uintptr) { 42643 var quote int32 42644 var i int32 42645 var j int32 42646 if z == uintptr(0) { 42647 return 42648 } 42649 quote = int32(*(*int8)(unsafe.Pointer(z))) 42650 switch quote { 42651 case '\'': 42652 break 42653 case '"': 42654 break 42655 case '`': 42656 break 42657 case '[': 42658 quote = ']' 42659 break 42660 default: 42661 return 42662 } 42663 i = 1 42664 j = 0 42665 for ; *(*int8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 42666 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == quote { 42667 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i+1)))) == quote { 42668 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(quote) 42669 i++ 42670 } else { 42671 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(0) 42672 break 42673 } 42674 } else { 42675 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 42676 } 42677 } 42678 } 42679 42680 func getColumnNames(tls *libc.TLS, db uintptr, zTab uintptr, paCol uintptr, pnCol uintptr) int32 { 42681 bp := tls.Alloc(20) 42682 defer tls.Free(20) 42683 42684 var aCol uintptr 42685 var zSql uintptr 42686 42687 var rc int32 42688 var nCol int32 42689 var zName uintptr 42690 var ii int32 42691 var nBytes int32 42692 var zSpace uintptr 42693 aCol = uintptr(0) 42694 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42695 rc = SQLITE_OK 42696 nCol = 0 42697 42698 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27203, libc.VaList(bp, zTab)) 42699 if !!(zSql != 0) { 42700 goto __1 42701 } 42702 rc = SQLITE_NOMEM 42703 goto out 42704 __1: 42705 ; 42706 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42707 sqlite3.Xsqlite3_free(tls, zSql) 42708 42709 if !(rc == SQLITE_OK) { 42710 goto __2 42711 } 42712 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42713 42714 nBytes = int32(uint32(unsafe.Sizeof(uintptr(0))) * uint32(nCol)) 42715 ii = 0 42716 __3: 42717 if !(ii < nCol) { 42718 goto __5 42719 } 42720 zName = sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii) 42721 if !!(zName != 0) { 42722 goto __6 42723 } 42724 rc = SQLITE_NOMEM 42725 goto out 42726 __6: 42727 ; 42728 nBytes = nBytes + (int32(libc.Xstrlen(tls, zName)) + 1) 42729 goto __4 42730 __4: 42731 ii++ 42732 goto __3 42733 goto __5 42734 __5: 42735 ; 42736 aCol = sqlite3.Xsqlite3MallocZero(tls, uint64(nBytes)) 42737 if !!(aCol != 0) { 42738 goto __7 42739 } 42740 rc = SQLITE_NOMEM 42741 goto out 42742 __7: 42743 ; 42744 zSpace = aCol + uintptr(nCol)*4 42745 ii = 0 42746 __8: 42747 if !(ii < nCol) { 42748 goto __10 42749 } 42750 *(*uintptr)(unsafe.Pointer(aCol + uintptr(ii)*4)) = zSpace 42751 sqlite3.Xsqlite3_snprintf(tls, nBytes, zSpace, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii))) 42752 zSpace += uintptr(int32(libc.Xstrlen(tls, zSpace)) + 1) 42753 goto __9 42754 __9: 42755 ii++ 42756 goto __8 42757 goto __10 42758 __10: 42759 ; 42760 __2: 42761 ; 42762 *(*uintptr)(unsafe.Pointer(paCol)) = aCol 42763 *(*int32)(unsafe.Pointer(pnCol)) = nCol 42764 42765 out: 42766 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42767 return rc 42768 } 42769 42770 func getIndexArray(tls *libc.TLS, db uintptr, zTab uintptr, nCol int32, paIndex uintptr) int32 { 42771 bp := tls.Alloc(24) 42772 defer tls.Free(24) 42773 42774 var aIndex uintptr 42775 var rc int32 42776 var zSql uintptr 42777 var cid int32 42778 var zIdx uintptr 42779 42780 var rc2 int32 42781 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42782 aIndex = uintptr(0) 42783 42784 aIndex = sqlite3.Xsqlite3MallocZero(tls, uint64(uint32(unsafe.Sizeof(int32(0)))*uint32(nCol))) 42785 if !!(aIndex != 0) { 42786 goto __1 42787 } 42788 rc = SQLITE_NOMEM 42789 goto get_index_array_out 42790 __1: 42791 ; 42792 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27220, libc.VaList(bp, zTab)) 42793 if !!(zSql != 0) { 42794 goto __2 42795 } 42796 rc = SQLITE_NOMEM 42797 goto get_index_array_out 42798 __2: 42799 ; 42800 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42801 sqlite3.Xsqlite3_free(tls, zSql) 42802 42803 __3: 42804 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW) { 42805 goto __4 42806 } 42807 zIdx = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 42808 *(*uintptr)(unsafe.Pointer(bp + 20)) = uintptr(0) 42809 if !(zIdx == uintptr(0)) { 42810 goto __5 42811 } 42812 goto __3 42813 __5: 42814 ; 42815 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27242, libc.VaList(bp+8, zIdx)) 42816 if !!(zSql != 0) { 42817 goto __6 42818 } 42819 rc = SQLITE_NOMEM 42820 goto get_index_array_out 42821 __6: 42822 ; 42823 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+20, uintptr(0)) 42824 sqlite3.Xsqlite3_free(tls, zSql) 42825 if !(*(*uintptr)(unsafe.Pointer(bp + 20)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) == SQLITE_ROW) { 42826 goto __7 42827 } 42828 cid = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 20)), 1) 42829 42830 *(*int32)(unsafe.Pointer(aIndex + uintptr(cid)*4)) = 1 42831 __7: 42832 ; 42833 if !(*(*uintptr)(unsafe.Pointer(bp + 20)) != 0) { 42834 goto __8 42835 } 42836 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) 42837 __8: 42838 ; 42839 if !(rc != SQLITE_OK) { 42840 goto __9 42841 } 42842 goto get_index_array_out 42843 __9: 42844 ; 42845 goto __3 42846 __4: 42847 ; 42848 get_index_array_out: 42849 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { 42850 goto __10 42851 } 42852 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42853 if !(rc == SQLITE_OK) { 42854 goto __11 42855 } 42856 rc = rc2 42857 __11: 42858 ; 42859 __10: 42860 ; 42861 if !(rc != SQLITE_OK) { 42862 goto __12 42863 } 42864 sqlite3.Xsqlite3_free(tls, aIndex) 42865 aIndex = uintptr(0) 42866 __12: 42867 ; 42868 *(*uintptr)(unsafe.Pointer(paIndex)) = aIndex 42869 return rc 42870 } 42871 42872 func appendToEchoModule(tls *libc.TLS, interp uintptr, zArg uintptr) { 42873 var flags int32 = TCL_APPEND_VALUE | TCL_LIST_ELEMENT | TCL_GLOBAL_ONLY 42874 tcl.XTcl_SetVar2(tls, interp, ts+27264, uintptr(0), func() uintptr { 42875 if zArg != 0 { 42876 return zArg 42877 } 42878 return ts + 584 42879 }(), flags) 42880 } 42881 42882 func echoDeclareVtab(tls *libc.TLS, pVtab uintptr, db uintptr) int32 { 42883 bp := tls.Alloc(4) 42884 defer tls.Free(4) 42885 42886 var rc int32 = SQLITE_OK 42887 42888 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 { 42889 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 42890 rc = sqlite3.Xsqlite3_prepare(tls, db, 42891 ts+27276, 42892 -1, bp, uintptr(0)) 42893 if rc == SQLITE_OK { 42894 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, -1, uintptr(0)) 42895 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) == SQLITE_ROW { 42896 var rc2 int32 42897 var zCreateTable uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 42898 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 42899 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 42900 if rc == SQLITE_OK { 42901 rc = rc2 42902 } 42903 } else { 42904 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 42905 if rc == SQLITE_OK { 42906 rc = SQLITE_ERROR 42907 } 42908 } 42909 if rc == SQLITE_OK { 42910 rc = getColumnNames(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, pVtab+48, pVtab+40) 42911 } 42912 if rc == SQLITE_OK { 42913 rc = getIndexArray(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, (*echo_vtab)(unsafe.Pointer(pVtab)).FnCol, pVtab+44) 42914 } 42915 } 42916 } 42917 42918 return rc 42919 } 42920 42921 func echoDestructor(tls *libc.TLS, pVtab uintptr) int32 { 42922 var p uintptr = pVtab 42923 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaIndex) 42924 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaCol) 42925 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis) 42926 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzTableName) 42927 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzLogName) 42928 sqlite3.Xsqlite3_free(tls, p) 42929 return 0 42930 } 42931 42932 type EchoModule1 = struct { 42933 Finterp uintptr 42934 Fdb uintptr 42935 } 42936 42937 type EchoModule = EchoModule1 42938 42939 func echoConstructor(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42940 bp := tls.Alloc(32) 42941 defer tls.Free(32) 42942 42943 var rc int32 42944 var i int32 42945 var pVtab uintptr 42946 42947 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_vtab{}))) 42948 if !(pVtab != 0) { 42949 return SQLITE_NOMEM 42950 } 42951 (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp = (*EchoModule)(unsafe.Pointer(pAux)).Finterp 42952 (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb = db 42953 42954 (*echo_vtab)(unsafe.Pointer(pVtab)).FzThis = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 2*4)))) 42955 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzThis) != 0) { 42956 echoDestructor(tls, pVtab) 42957 return SQLITE_NOMEM 42958 } 42959 42960 if argc > 3 { 42961 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 3*4)))) 42962 dequoteString(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 42963 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 && int32(*(*int8)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName))) == '*' { 42964 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*4)), (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName+1)) 42965 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 42966 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = z 42967 (*echo_vtab)(unsafe.Pointer(pVtab)).FisPattern = 1 42968 } 42969 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) != 0) { 42970 echoDestructor(tls, pVtab) 42971 return SQLITE_NOMEM 42972 } 42973 } 42974 42975 for i = 0; i < argc; i++ { 42976 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 42977 } 42978 42979 rc = echoDeclareVtab(tls, pVtab, db) 42980 if rc != SQLITE_OK { 42981 echoDestructor(tls, pVtab) 42982 return rc 42983 } 42984 42985 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 42986 return SQLITE_OK 42987 } 42988 42989 func echoCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 42990 bp := tls.Alloc(24) 42991 defer tls.Free(24) 42992 42993 var rc int32 = SQLITE_OK 42994 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27345) 42995 rc = echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 42996 42997 if rc == SQLITE_OK && argc == 5 { 42998 var zSql uintptr 42999 var pVtab uintptr = *(*uintptr)(unsafe.Pointer(ppVtab)) 43000 (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 4*4)))) 43001 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27353, libc.VaList(bp+8, (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName)) 43002 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 43003 sqlite3.Xsqlite3_free(tls, zSql) 43004 if rc != SQLITE_OK { 43005 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, sqlite3.Xsqlite3_errmsg(tls, db))) 43006 } 43007 } 43008 43009 if *(*uintptr)(unsafe.Pointer(ppVtab)) != 0 && rc != SQLITE_OK { 43010 echoDestructor(tls, *(*uintptr)(unsafe.Pointer(ppVtab))) 43011 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 43012 } 43013 43014 if rc == SQLITE_OK { 43015 (*echo_vtab)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppVtab)))).FinTransaction = 1 43016 } 43017 43018 return rc 43019 } 43020 43021 func echoConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43022 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27377) 43023 return echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 43024 } 43025 43026 func echoDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 43027 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27386) 43028 return echoDestructor(tls, pVtab) 43029 } 43030 43031 func echoDestroy(tls *libc.TLS, pVtab uintptr) int32 { 43032 bp := tls.Alloc(8) 43033 defer tls.Free(8) 43034 43035 var rc int32 = SQLITE_OK 43036 var p uintptr = pVtab 43037 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27398) 43038 43039 if p != 0 && (*echo_vtab)(unsafe.Pointer(p)).FzLogName != 0 { 43040 var zSql uintptr 43041 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27407, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzLogName)) 43042 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 43043 sqlite3.Xsqlite3_free(tls, zSql) 43044 } 43045 43046 if rc == SQLITE_OK { 43047 rc = echoDestructor(tls, pVtab) 43048 } 43049 return rc 43050 } 43051 43052 func echoOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 43053 var pCur uintptr 43054 if simulateVtabError(tls, pVTab, ts+27421) != 0 { 43055 return SQLITE_ERROR 43056 } 43057 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_cursor{}))) 43058 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 43059 return func() int32 { 43060 if pCur != 0 { 43061 return SQLITE_OK 43062 } 43063 return SQLITE_NOMEM 43064 }() 43065 } 43066 43067 func echoClose(tls *libc.TLS, cur uintptr) int32 { 43068 var rc int32 43069 var pCur uintptr = cur 43070 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt 43071 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43072 sqlite3.Xsqlite3_free(tls, pCur) 43073 rc = sqlite3.Xsqlite3_finalize(tls, pStmt) 43074 return rc 43075 } 43076 43077 func echoEof(tls *libc.TLS, cur uintptr) int32 { 43078 return func() int32 { 43079 if (*echo_cursor)(unsafe.Pointer(cur)).FpStmt != 0 { 43080 return 0 43081 } 43082 return 1 43083 }() 43084 } 43085 43086 func echoNext(tls *libc.TLS, cur uintptr) int32 { 43087 var rc int32 = SQLITE_OK 43088 var pCur uintptr = cur 43089 43090 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27427) != 0 { 43091 return SQLITE_ERROR 43092 } 43093 43094 if (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt != 0 { 43095 rc = sqlite3.Xsqlite3_step(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43096 if rc == SQLITE_ROW { 43097 rc = SQLITE_OK 43098 } else { 43099 rc = sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43100 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43101 } 43102 } 43103 43104 return rc 43105 } 43106 43107 func echoColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 43108 var iCol int32 = i + 1 43109 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 43110 43111 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27433) != 0 { 43112 return SQLITE_ERROR 43113 } 43114 43115 if !(pStmt != 0) { 43116 sqlite3.Xsqlite3_result_null(tls, ctx) 43117 } else { 43118 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, pStmt, iCol)) 43119 } 43120 return SQLITE_OK 43121 } 43122 43123 func echoRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 43124 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 43125 43126 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+2304) != 0 { 43127 return SQLITE_ERROR 43128 } 43129 43130 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 43131 return SQLITE_OK 43132 } 43133 43134 func hashString(tls *libc.TLS, zString uintptr) int32 { 43135 var val u32 = u32(0) 43136 var ii int32 43137 for ii = 0; *(*int8)(unsafe.Pointer(zString + uintptr(ii))) != 0; ii++ { 43138 val = val<<3 + u32(int32(*(*int8)(unsafe.Pointer(zString + uintptr(ii))))) 43139 } 43140 return int32(val & u32(0x7fffffff)) 43141 } 43142 43143 func echoFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 43144 var rc int32 43145 var i int32 43146 43147 var pCur uintptr = pVtabCursor 43148 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 43149 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 43150 43151 if simulateVtabError(tls, pVtab, ts+27441) != 0 { 43152 return SQLITE_ERROR 43153 } 43154 43155 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27441) 43156 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, idxStr) 43157 for i = 0; i < argc; i++ { 43158 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)))) 43159 } 43160 43161 sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43162 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43163 43164 rc = sqlite3.Xsqlite3_prepare(tls, db, idxStr, -1, pCur+4, uintptr(0)) 43165 43166 for i = 0; rc == SQLITE_OK && i < argc; i++ { 43167 rc = sqlite3.Xsqlite3_bind_value(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt, i+1, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 43168 } 43169 43170 if rc == SQLITE_OK { 43171 rc = echoNext(tls, pVtabCursor) 43172 } 43173 43174 return rc 43175 } 43176 43177 func string_concat(tls *libc.TLS, pzStr uintptr, zAppend uintptr, doFree int32, pRc uintptr) { 43178 bp := tls.Alloc(24) 43179 defer tls.Free(24) 43180 43181 var zIn uintptr = *(*uintptr)(unsafe.Pointer(pzStr)) 43182 if !(zAppend != 0) && doFree != 0 && *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 43183 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 43184 } 43185 if *(*int32)(unsafe.Pointer(pRc)) != SQLITE_OK { 43186 sqlite3.Xsqlite3_free(tls, zIn) 43187 zIn = uintptr(0) 43188 } else { 43189 if zIn != 0 { 43190 var zTemp uintptr = zIn 43191 zIn = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp, zIn, zAppend)) 43192 sqlite3.Xsqlite3_free(tls, zTemp) 43193 } else { 43194 zIn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zAppend)) 43195 } 43196 if !(zIn != 0) { 43197 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 43198 } 43199 } 43200 *(*uintptr)(unsafe.Pointer(pzStr)) = zIn 43201 if doFree != 0 { 43202 sqlite3.Xsqlite3_free(tls, zAppend) 43203 } 43204 } 43205 43206 func echoSelectList(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) uintptr { 43207 bp := tls.Alloc(24) 43208 defer tls.Free(24) 43209 43210 var zRet uintptr = uintptr(0) 43211 if sqlite3.Xsqlite3_libversion_number(tls) < 3010000 { 43212 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27449, 0) 43213 } else { 43214 var i int32 43215 for i = 0; i < (*echo_vtab)(unsafe.Pointer(pTab)).FnCol; i++ { 43216 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed&(uint64(1)<<func() int32 { 43217 if i >= 63 { 43218 return 63 43219 } 43220 return i 43221 }()) != 0 { 43222 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27453, libc.VaList(bp, zRet, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pTab)).FaCol + uintptr(i)*4)))) 43223 } else { 43224 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27460, libc.VaList(bp+16, zRet)) 43225 } 43226 if !(zRet != 0) { 43227 break 43228 } 43229 } 43230 } 43231 return zRet 43232 } 43233 43234 func echoBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 43235 bp := tls.Alloc(92) 43236 defer tls.Free(92) 43237 43238 var ii int32 43239 *(*uintptr)(unsafe.Pointer(bp + 84)) = uintptr(0) 43240 var zCol uintptr = uintptr(0) 43241 var zNew uintptr 43242 var nArg int32 = 0 43243 var zSep uintptr = ts + 9392 43244 var pVtab uintptr = tab 43245 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 43246 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43247 43248 var nRow int32 = 0 43249 var useIdx int32 = 0 43250 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_OK 43251 var useCost int32 = 0 43252 var cost float64 = float64(0) 43253 var isIgnoreUsable int32 = 0 43254 if tcl.XTcl_GetVar2(tls, interp, ts+27469, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 43255 isIgnoreUsable = 1 43256 } 43257 43258 if simulateVtabError(tls, pVtab, ts+27495) != 0 { 43259 return SQLITE_ERROR 43260 } 43261 43262 if tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 43263 cost = libc.Xatof(tls, tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY)) 43264 useCost = 1 43265 } else { 43266 *(*uintptr)(unsafe.Pointer(bp + 84)) = sqlite3.Xsqlite3_mprintf(tls, ts+27523, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43267 if !(*(*uintptr)(unsafe.Pointer(bp + 84)) != 0) { 43268 return SQLITE_NOMEM 43269 } 43270 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_prepare(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb, *(*uintptr)(unsafe.Pointer(bp + 84)), -1, bp+80, uintptr(0)) 43271 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 84))) 43272 if *(*int32)(unsafe.Pointer(bp + 88)) != SQLITE_OK { 43273 return *(*int32)(unsafe.Pointer(bp + 88)) 43274 } 43275 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 43276 nRow = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 43277 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 43278 if *(*int32)(unsafe.Pointer(bp + 88)) != SQLITE_OK { 43279 return *(*int32)(unsafe.Pointer(bp + 88)) 43280 } 43281 } 43282 43283 zCol = echoSelectList(tls, pVtab, pIdxInfo) 43284 if !(zCol != 0) { 43285 return SQLITE_NOMEM 43286 } 43287 *(*uintptr)(unsafe.Pointer(bp + 84)) = sqlite3.Xsqlite3_mprintf(tls, ts+27547, libc.VaList(bp+8, zCol, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43288 if !(*(*uintptr)(unsafe.Pointer(bp + 84)) != 0) { 43289 return SQLITE_NOMEM 43290 } 43291 43292 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 43293 var pConstraint uintptr 43294 var pUsage uintptr 43295 var iCol int32 43296 43297 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 43298 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 43299 43300 if !(isIgnoreUsable != 0) && !(int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) != 0) { 43301 continue 43302 } 43303 43304 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn 43305 if iCol < 0 || *(*int32)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaIndex + uintptr(iCol)*4)) != 0 { 43306 var zNewCol uintptr 43307 if iCol >= 0 { 43308 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*4)) 43309 } else { 43310 zNewCol = ts + 6427 43311 } 43312 var zOp uintptr = uintptr(0) 43313 useIdx = 1 43314 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) { 43315 case SQLITE_INDEX_CONSTRAINT_EQ: 43316 zOp = ts + 27570 43317 break 43318 fallthrough 43319 case SQLITE_INDEX_CONSTRAINT_LT: 43320 zOp = ts + 27572 43321 break 43322 fallthrough 43323 case SQLITE_INDEX_CONSTRAINT_GT: 43324 zOp = ts + 27574 43325 break 43326 fallthrough 43327 case SQLITE_INDEX_CONSTRAINT_LE: 43328 zOp = ts + 27576 43329 break 43330 fallthrough 43331 case SQLITE_INDEX_CONSTRAINT_GE: 43332 zOp = ts + 27579 43333 break 43334 fallthrough 43335 case SQLITE_INDEX_CONSTRAINT_MATCH: 43336 zOp = ts + 27582 43337 break 43338 fallthrough 43339 case SQLITE_INDEX_CONSTRAINT_LIKE: 43340 zOp = ts + 27587 43341 break 43342 fallthrough 43343 case SQLITE_INDEX_CONSTRAINT_GLOB: 43344 zOp = ts + 27592 43345 break 43346 fallthrough 43347 case SQLITE_INDEX_CONSTRAINT_REGEXP: 43348 zOp = ts + 6831 43349 break 43350 } 43351 if zOp != 0 { 43352 if int32(*(*int8)(unsafe.Pointer(zOp))) == 'L' { 43353 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27597, 43354 libc.VaList(bp+24, zSep, zNewCol)) 43355 } else { 43356 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27632, libc.VaList(bp+40, zSep, zNewCol, zOp)) 43357 } 43358 string_concat(tls, bp+84, zNew, 1, bp+88) 43359 zSep = ts + 9419 43360 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&nArg, 1) 43361 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 43362 } 43363 } 43364 } 43365 43366 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) { 43367 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn 43368 var zNewCol uintptr 43369 if iCol >= 0 { 43370 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*4)) 43371 } else { 43372 zNewCol = ts + 6427 43373 } 43374 var zDir uintptr 43375 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 43376 zDir = ts + 27644 43377 } else { 43378 zDir = ts + 27649 43379 } 43380 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27653, libc.VaList(bp+64, zNewCol, zDir)) 43381 string_concat(tls, bp+84, zNew, 1, bp+88) 43382 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 43383 } 43384 43385 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27495) 43386 43387 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(bp + 84))) 43388 43389 if !(*(*uintptr)(unsafe.Pointer(bp + 84)) != 0) { 43390 return *(*int32)(unsafe.Pointer(bp + 88)) 43391 } 43392 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = hashString(tls, *(*uintptr)(unsafe.Pointer(bp + 84))) 43393 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = *(*uintptr)(unsafe.Pointer(bp + 84)) 43394 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 43395 if useCost != 0 { 43396 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = cost 43397 } else if useIdx != 0 { 43398 for ii = 0; uint32(ii) < uint32(unsafe.Sizeof(int32(0)))*uint32(8)-uint32(1); ii++ { 43399 if nRow&(int32(1)<<ii) != 0 { 43400 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(ii) 43401 } 43402 } 43403 } else { 43404 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(nRow) 43405 } 43406 return *(*int32)(unsafe.Pointer(bp + 88)) 43407 } 43408 43409 func echoUpdate(tls *libc.TLS, tab uintptr, nData int32, apData uintptr, pRowid uintptr) int32 { 43410 bp := tls.Alloc(116) 43411 defer tls.Free(116) 43412 43413 var pVtab uintptr = tab 43414 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 43415 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_OK 43416 43417 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 43418 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 43419 var bindArgZero int32 = 0 43420 var bindArgOne int32 = 0 43421 var i int32 43422 43423 if simulateVtabError(tls, pVtab, ts+27669) != 0 { 43424 return SQLITE_ERROR 43425 } 43426 43427 if nData > 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 43428 var zSep uintptr = ts + 27677 43429 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27682, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43430 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 43431 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_NOMEM 43432 } 43433 43434 bindArgOne = libc.Bool32(*(*uintptr)(unsafe.Pointer(apData + 1*4)) != 0 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*4))) == SQLITE_INTEGER) 43435 bindArgZero = 1 43436 43437 if bindArgOne != 0 { 43438 string_concat(tls, bp+96, ts+27692, 0, bp+100) 43439 zSep = ts + 4758 43440 } 43441 for i = 2; i < nData; i++ { 43442 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*4)) == uintptr(0) { 43443 continue 43444 } 43445 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, 43446 ts+27707, libc.VaList(bp+8, zSep, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(i-2)*4)), i)), 1, bp+100) 43447 zSep = ts + 4758 43448 } 43449 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, ts+27717, libc.VaList(bp+32, nData)), 1, bp+100) 43450 } else if nData == 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 43451 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27734, libc.VaList(bp+40, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43452 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 43453 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_NOMEM 43454 } 43455 bindArgZero = 1 43456 } else if nData > 2 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_NULL { 43457 var ii int32 43458 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 43459 *(*uintptr)(unsafe.Pointer(bp + 108)) = uintptr(0) 43460 43461 *(*uintptr)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_mprintf(tls, ts+27766, libc.VaList(bp+48, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43462 if !(*(*uintptr)(unsafe.Pointer(bp + 104)) != 0) { 43463 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_NOMEM 43464 } 43465 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*4))) == SQLITE_INTEGER { 43466 bindArgOne = 1 43467 *(*uintptr)(unsafe.Pointer(bp + 108)) = sqlite3.Xsqlite3_mprintf(tls, ts+3405, 0) 43468 string_concat(tls, bp+104, ts+6427, 0, bp+100) 43469 } 43470 43471 for ii = 2; ii < nData; ii++ { 43472 string_concat(tls, bp+104, 43473 sqlite3.Xsqlite3_mprintf(tls, ts+27783, libc.VaList(bp+56, func() uintptr { 43474 if *(*uintptr)(unsafe.Pointer(bp + 108)) != 0 { 43475 return ts + 97 43476 } 43477 return ts + 584 43478 }(), *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(ii-2)*4)))), 1, bp+100) 43479 string_concat(tls, bp+108, 43480 sqlite3.Xsqlite3_mprintf(tls, ts+27788, libc.VaList(bp+72, func() uintptr { 43481 if *(*uintptr)(unsafe.Pointer(bp + 108)) != 0 { 43482 return ts + 97 43483 } 43484 return ts + 584 43485 }(), ii)), 1, bp+100) 43486 } 43487 43488 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 104)), 1, bp+100) 43489 string_concat(tls, bp+96, ts+27794, 0, bp+100) 43490 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 108)), 1, bp+100) 43491 string_concat(tls, bp+96, ts+585, 0, bp+100) 43492 } else { 43493 return SQLITE_ERROR 43494 } 43495 43496 if *(*int32)(unsafe.Pointer(bp + 100)) == SQLITE_OK { 43497 *(*int32)(unsafe.Pointer(bp + 100)) = sqlite3.Xsqlite3_prepare(tls, db, *(*uintptr)(unsafe.Pointer(bp + 96)), -1, bp+112, uintptr(0)) 43498 } 43499 43500 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 96))) 43501 if *(*int32)(unsafe.Pointer(bp + 100)) == SQLITE_OK { 43502 if bindArgZero != 0 { 43503 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 112)), nData, *(*uintptr)(unsafe.Pointer(apData))) 43504 } 43505 if bindArgOne != 0 { 43506 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 112)), 1, *(*uintptr)(unsafe.Pointer(apData + 1*4))) 43507 } 43508 for i = 2; i < nData && *(*int32)(unsafe.Pointer(bp + 100)) == SQLITE_OK; i++ { 43509 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*4)) != 0 { 43510 *(*int32)(unsafe.Pointer(bp + 100)) = sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 112)), i, *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*4))) 43511 } 43512 } 43513 if *(*int32)(unsafe.Pointer(bp + 100)) == SQLITE_OK { 43514 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 43515 *(*int32)(unsafe.Pointer(bp + 100)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 43516 } else { 43517 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 43518 } 43519 } 43520 43521 if pRowid != 0 && *(*int32)(unsafe.Pointer(bp + 100)) == SQLITE_OK { 43522 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 43523 } 43524 if *(*int32)(unsafe.Pointer(bp + 100)) != SQLITE_OK { 43525 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+88, sqlite3.Xsqlite3_errmsg(tls, db))) 43526 } 43527 43528 return *(*int32)(unsafe.Pointer(bp + 100)) 43529 } 43530 43531 func echoTransactionCall(tls *libc.TLS, tab uintptr, zCall uintptr) int32 { 43532 bp := tls.Alloc(8) 43533 defer tls.Free(8) 43534 43535 var z uintptr 43536 var pVtab uintptr = tab 43537 z = sqlite3.Xsqlite3_mprintf(tls, ts+27804, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43538 if z == uintptr(0) { 43539 return SQLITE_NOMEM 43540 } 43541 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, zCall) 43542 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, z) 43543 sqlite3.Xsqlite3_free(tls, z) 43544 return SQLITE_OK 43545 } 43546 43547 func echoBegin(tls *libc.TLS, tab uintptr) int32 { 43548 var rc int32 43549 var pVtab uintptr = tab 43550 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43551 var zVal uintptr 43552 43553 if simulateVtabError(tls, pVtab, ts+27813) != 0 { 43554 return SQLITE_ERROR 43555 } 43556 43557 rc = echoTransactionCall(tls, tab, ts+27813) 43558 43559 if rc == SQLITE_OK { 43560 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27820, uintptr(0), TCL_GLOBAL_ONLY) 43561 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 43562 rc = SQLITE_ERROR 43563 } 43564 } 43565 if rc == SQLITE_OK { 43566 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 1 43567 } 43568 return rc 43569 } 43570 43571 func echoSync(tls *libc.TLS, tab uintptr) int32 { 43572 var rc int32 43573 var pVtab uintptr = tab 43574 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43575 var zVal uintptr 43576 43577 if simulateVtabError(tls, pVtab, ts+27843) != 0 { 43578 return SQLITE_ERROR 43579 } 43580 43581 rc = echoTransactionCall(tls, tab, ts+27843) 43582 43583 if rc == SQLITE_OK { 43584 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27849, uintptr(0), TCL_GLOBAL_ONLY) 43585 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 43586 rc = -1 43587 } 43588 } 43589 return rc 43590 } 43591 43592 func echoCommit(tls *libc.TLS, tab uintptr) int32 { 43593 var pVtab uintptr = tab 43594 var rc int32 43595 43596 if simulateVtabError(tls, pVtab, ts+27871) != 0 { 43597 return SQLITE_ERROR 43598 } 43599 43600 sqlite3.Xsqlite3BeginBenignMalloc(tls) 43601 rc = echoTransactionCall(tls, tab, ts+27871) 43602 sqlite3.Xsqlite3EndBenignMalloc(tls) 43603 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 43604 return rc 43605 } 43606 43607 func echoRollback(tls *libc.TLS, tab uintptr) int32 { 43608 var rc int32 43609 var pVtab uintptr = tab 43610 43611 rc = echoTransactionCall(tls, tab, ts+27879) 43612 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 43613 return rc 43614 } 43615 43616 func overloadedGlobFunction(tls *libc.TLS, pContext uintptr, nArg int32, apArg uintptr) { 43617 bp := tls.Alloc(212) 43618 defer tls.Free(212) 43619 43620 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pContext) 43621 43622 var i int32 43623 var rc int32 43624 tcl.XTcl_DStringInit(tls, bp) 43625 tcl.XTcl_DStringAppendElement(tls, bp, ts+27889) 43626 for i = 0; i < nArg; i++ { 43627 tcl.XTcl_DStringAppendElement(tls, bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*4)))) 43628 } 43629 rc = tcl.XTcl_Eval(tls, interp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 43630 tcl.XTcl_DStringFree(tls, bp) 43631 if rc != 0 { 43632 sqlite3.Xsqlite3_result_error(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), -1) 43633 } else { 43634 sqlite3.Xsqlite3_result_text(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), 43635 -1, libc.UintptrFromInt32(-1)) 43636 } 43637 tcl.XTcl_ResetResult(tls, interp) 43638 } 43639 43640 func echoFindFunction(tls *libc.TLS, vtab uintptr, nArg int32, zFuncName uintptr, pxFunc uintptr, ppArg uintptr) int32 { 43641 bp := tls.Alloc(32) 43642 defer tls.Free(32) 43643 43644 var pVtab uintptr = vtab 43645 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43646 43647 if libc.Xstrcmp(tls, zFuncName, ts+27592) != 0 { 43648 return 0 43649 } 43650 if tcl.XTcl_GetCommandInfo(tls, interp, ts+27889, bp) == 0 { 43651 return 0 43652 } 43653 *(*uintptr)(unsafe.Pointer(pxFunc)) = *(*uintptr)(unsafe.Pointer(&struct { 43654 f func(*libc.TLS, uintptr, int32, uintptr) 43655 }{overloadedGlobFunction})) 43656 *(*uintptr)(unsafe.Pointer(ppArg)) = interp 43657 return 1 43658 } 43659 43660 func echoRename(tls *libc.TLS, vtab uintptr, zNewName uintptr) int32 { 43661 bp := tls.Alloc(24) 43662 defer tls.Free(24) 43663 43664 var rc int32 = SQLITE_OK 43665 var p uintptr = vtab 43666 43667 if simulateVtabError(tls, p, ts+27910) != 0 { 43668 return SQLITE_ERROR 43669 } 43670 43671 if (*echo_vtab)(unsafe.Pointer(p)).FisPattern != 0 { 43672 var nThis int32 = int32(libc.Xstrlen(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis)) 43673 var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27918, 43674 libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzTableName, zNewName, (*echo_vtab)(unsafe.Pointer(p)).FzTableName+uintptr(nThis))) 43675 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 43676 sqlite3.Xsqlite3_free(tls, zSql) 43677 } 43678 43679 return rc 43680 } 43681 43682 func echoSavepoint(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43683 return SQLITE_OK 43684 } 43685 43686 func echoRelease(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43687 return SQLITE_OK 43688 } 43689 43690 func echoRollbackTo(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43691 return SQLITE_OK 43692 } 43693 43694 var echoModule = sqlite3_module{ 43695 FiVersion: 1, 43696 FxCreate: 0, 43697 FxConnect: 0, 43698 FxBestIndex: 0, 43699 FxDisconnect: 0, 43700 FxDestroy: 0, 43701 FxOpen: 0, 43702 FxClose: 0, 43703 FxFilter: 0, 43704 FxNext: 0, 43705 FxEof: 0, 43706 FxColumn: 0, 43707 FxRowid: 0, 43708 FxUpdate: 0, 43709 FxBegin: 0, 43710 FxSync: 0, 43711 FxCommit: 0, 43712 FxRollback: 0, 43713 FxFindFunction: 0, 43714 FxRename: 0, 43715 } 43716 43717 var echoModuleV2 = sqlite3_module{ 43718 FiVersion: 2, 43719 FxCreate: 0, 43720 FxConnect: 0, 43721 FxBestIndex: 0, 43722 FxDisconnect: 0, 43723 FxDestroy: 0, 43724 FxOpen: 0, 43725 FxClose: 0, 43726 FxFilter: 0, 43727 FxNext: 0, 43728 FxEof: 0, 43729 FxColumn: 0, 43730 FxRowid: 0, 43731 FxUpdate: 0, 43732 FxBegin: 0, 43733 FxSync: 0, 43734 FxCommit: 0, 43735 FxRollback: 0, 43736 FxFindFunction: 0, 43737 FxRename: 0, 43738 FxSavepoint: 0, 43739 FxRelease: 0, 43740 FxRollbackTo: 0, 43741 } 43742 43743 func moduleDestroy(tls *libc.TLS, p uintptr) { 43744 var pMod uintptr = p 43745 sqlite3.Xsqlite3_create_function(tls, (*EchoModule)(unsafe.Pointer(pMod)).Fdb, ts+27948, 43746 SQLITE_ANY, 1, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 43747 sqlite3.Xsqlite3_free(tls, p) 43748 } 43749 43750 func register_echo_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43751 bp := tls.Alloc(4) 43752 defer tls.Free(4) 43753 43754 var rc int32 43755 43756 var pMod uintptr 43757 if objc != 2 { 43758 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 43759 return TCL_ERROR 43760 } 43761 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 43762 return TCL_ERROR 43763 } 43764 43765 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43766 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43767 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43768 rc = sqlite3.Xsqlite3_create_module_v2(tls, 43769 *(*uintptr)(unsafe.Pointer(bp)), ts+27986, uintptr(unsafe.Pointer(&echoModule)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43770 43771 if rc == SQLITE_OK { 43772 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43773 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43774 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43775 rc = sqlite3.Xsqlite3_create_module_v2(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+27991, 43776 uintptr(unsafe.Pointer(&echoModuleV2)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43777 } 43778 43779 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43780 return TCL_OK 43781 } 43782 43783 func declare_vtab(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43784 bp := tls.Alloc(4) 43785 defer tls.Free(4) 43786 43787 var rc int32 43788 if objc != 3 { 43789 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 43790 return TCL_ERROR 43791 } 43792 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 43793 return TCL_ERROR 43794 } 43795 rc = sqlite3.Xsqlite3_declare_vtab(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)))) 43796 if rc != SQLITE_OK { 43797 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 43798 return TCL_ERROR 43799 } 43800 return TCL_OK 43801 } 43802 43803 func Sqlitetest8_Init(tls *libc.TLS, interp uintptr) int32 { 43804 var i int32 43805 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd2))/uint32(unsafe.Sizeof(struct { 43806 FzName uintptr 43807 FxProc uintptr 43808 FclientData uintptr 43809 }{})); i++ { 43810 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd2[i].FzName, 43811 aObjCmd2[i].FxProc, aObjCmd2[i].FclientData, uintptr(0)) 43812 } 43813 return TCL_OK 43814 } 43815 43816 var aObjCmd2 = [2]struct { 43817 FzName uintptr 43818 FxProc uintptr 43819 FclientData uintptr 43820 }{ 43821 {FzName: ts + 27999, FxProc: 0}, 43822 {FzName: ts + 28020, FxProc: 0}, 43823 } 43824 43825 func c_collation_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43826 bp := tls.Alloc(28) 43827 defer tls.Free(28) 43828 43829 var zErrFunction uintptr 43830 43831 var rc int32 43832 zErrFunction = ts + 28041 43833 if !(objc != 1) { 43834 goto __1 43835 } 43836 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43837 return TCL_ERROR 43838 __1: 43839 ; 43840 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 43841 if !(rc != SQLITE_OK) { 43842 goto __2 43843 } 43844 zErrFunction = ts + 21460 43845 goto error_out 43846 __2: 43847 ; 43848 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), ts+13402, 456, uintptr(0), uintptr(0)) 43849 if !(rc != SQLITE_MISUSE) { 43850 goto __3 43851 } 43852 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43853 zErrFunction = ts + 28045 43854 goto error_out 43855 __3: 43856 ; 43857 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43858 return TCL_OK 43859 43860 error_out: 43861 tcl.XTcl_ResetResult(tls, interp) 43862 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43863 return TCL_ERROR 43864 } 43865 43866 func c_realloc_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43867 bp := tls.Alloc(24) 43868 defer tls.Free(24) 43869 43870 var p uintptr 43871 var zErrFunction uintptr 43872 zErrFunction = ts + 28041 43873 43874 if !(objc != 1) { 43875 goto __1 43876 } 43877 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43878 return TCL_ERROR 43879 __1: 43880 ; 43881 p = sqlite3.Xsqlite3_malloc(tls, 5) 43882 if !!(p != 0) { 43883 goto __2 43884 } 43885 zErrFunction = ts + 28095 43886 goto error_out 43887 __2: 43888 ; 43889 p = sqlite3.Xsqlite3_realloc(tls, p, -1) 43890 if !(p != 0) { 43891 goto __3 43892 } 43893 zErrFunction = ts + 28110 43894 goto error_out 43895 __3: 43896 ; 43897 return TCL_OK 43898 43899 error_out: 43900 tcl.XTcl_ResetResult(tls, interp) 43901 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43902 return TCL_ERROR 43903 } 43904 43905 func c_misuse_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43906 bp := tls.Alloc(32) 43907 defer tls.Free(32) 43908 43909 var zErrFunction uintptr 43910 43911 var rc int32 43912 zErrFunction = ts + 28041 43913 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 43914 43915 if !(objc != 1) { 43916 goto __1 43917 } 43918 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 43919 return TCL_ERROR 43920 __1: 43921 ; 43922 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 43923 if !(rc != SQLITE_OK) { 43924 goto __2 43925 } 43926 zErrFunction = ts + 21460 43927 goto error_out 43928 __2: 43929 ; 43930 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43931 43932 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43933 if !(rc != SQLITE_MISUSE) { 43934 goto __3 43935 } 43936 zErrFunction = ts + 21366 43937 goto error_out 43938 __3: 43939 ; 43940 *(*uintptr)(unsafe.Pointer(bp + 28)) = uintptr(1234) 43941 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+28, uintptr(0)) 43942 if !(rc != SQLITE_MISUSE) { 43943 goto __4 43944 } 43945 zErrFunction = ts + 21541 43946 goto error_out 43947 __4: 43948 ; 43949 *(*uintptr)(unsafe.Pointer(bp + 28)) = uintptr(1234) 43950 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+28, uintptr(0)) 43951 if !(rc != SQLITE_MISUSE) { 43952 goto __5 43953 } 43954 zErrFunction = ts + 21575 43955 goto error_out 43956 __5: 43957 ; 43958 *(*uintptr)(unsafe.Pointer(bp + 28)) = uintptr(1234) 43959 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+28, uintptr(0)) 43960 if !(rc != SQLITE_MISUSE) { 43961 goto __6 43962 } 43963 zErrFunction = ts + 21557 43964 goto error_out 43965 __6: 43966 ; 43967 *(*uintptr)(unsafe.Pointer(bp + 28)) = uintptr(1234) 43968 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+28, uintptr(0)) 43969 if !(rc != SQLITE_MISUSE) { 43970 goto __7 43971 } 43972 zErrFunction = ts + 21637 43973 goto error_out 43974 __7: 43975 ; 43976 return TCL_OK 43977 43978 error_out: 43979 tcl.XTcl_ResetResult(tls, interp) 43980 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 43981 return TCL_ERROR 43982 } 43983 43984 func Sqlitetest9_Init(tls *libc.TLS, interp uintptr) int32 { 43985 var i int32 43986 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd3))/uint32(unsafe.Sizeof(struct { 43987 FzName uintptr 43988 FxProc uintptr 43989 FclientData uintptr 43990 }{})); i++ { 43991 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd3[i].FzName, 43992 aObjCmd3[i].FxProc, aObjCmd3[i].FclientData, uintptr(0)) 43993 } 43994 return TCL_OK 43995 } 43996 43997 var aObjCmd3 = [3]struct { 43998 FzName uintptr 43999 FxProc uintptr 44000 FclientData uintptr 44001 }{ 44002 {FzName: ts + 28126, FxProc: 0}, 44003 {FzName: ts + 28140, FxProc: 0}, 44004 {FzName: ts + 28155, FxProc: 0}, 44005 } 44006 44007 func Sqlitetestasync_Init(tls *libc.TLS, interp uintptr) int32 { 44008 return TCL_OK 44009 } 44010 44011 func resetAutoExtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44012 sqlite3.Xsqlite3_reset_auto_extension(tls) 44013 return SQLITE_OK 44014 } 44015 44016 func Sqlitetest_autoext_Init(tls *libc.TLS, interp uintptr) int32 { 44017 tcl.XTcl_CreateObjCommand(tls, interp, ts+28172, 44018 *(*uintptr)(unsafe.Pointer(&struct { 44019 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44020 }{resetAutoExtObjCmd})), uintptr(0), uintptr(0)) 44021 return TCL_OK 44022 } 44023 44024 func backupTestCmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44025 bp := tls.Alloc(120) 44026 defer tls.Free(120) 44027 44028 *(*[5]BackupSubCommand)(unsafe.Pointer(bp)) = [5]BackupSubCommand{ 44029 {FzCmd: ts + 9485, FnArg: 1, FzArg: ts + 28201}, 44030 {FzCmd: ts + 28207, FeCmd: uint32(1), FzArg: ts + 584}, 44031 {FzCmd: ts + 28214, FeCmd: uint32(2), FzArg: ts + 584}, 44032 {FzCmd: ts + 28224, FeCmd: uint32(3), FzArg: ts + 584}, 44033 {}, 44034 } 44035 44036 var p uintptr = clientData 44037 44038 var rc int32 44039 44040 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 44041 interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp, int32(unsafe.Sizeof(BackupSubCommand{})), ts+11691, 0, bp+80) 44042 if rc != TCL_OK { 44043 return rc 44044 } 44045 if objc != 2+(*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*16)).FnArg { 44046 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*16)).FzArg) 44047 return TCL_ERROR 44048 } 44049 44050 switch (*BackupSubCommand)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*16)).FeCmd { 44051 case uint32(1): 44052 { 44053 var zCmdName uintptr 44054 44055 zCmdName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))) 44056 tcl.XTcl_GetCommandInfo(tls, interp, zCmdName, bp+84) 44057 (*Tcl_CmdInfo)(unsafe.Pointer(bp + 84)).FdeleteProc = uintptr(0) 44058 tcl.XTcl_SetCommandInfo(tls, interp, zCmdName, bp+84) 44059 tcl.XTcl_DeleteCommand(tls, interp, zCmdName) 44060 44061 rc = sqlite3.Xsqlite3_backup_finish(tls, p) 44062 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44063 break 44064 44065 } 44066 44067 case uint32(0): 44068 { 44069 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+116) { 44070 return TCL_ERROR 44071 } 44072 rc = sqlite3.Xsqlite3_backup_step(tls, p, *(*int32)(unsafe.Pointer(bp + 116))) 44073 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44074 break 44075 44076 } 44077 44078 case uint32(2): 44079 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_remaining(tls, p))) 44080 break 44081 44082 case uint32(3): 44083 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_pagecount(tls, p))) 44084 break 44085 } 44086 44087 return TCL_OK 44088 } 44089 44090 type BackupSubCommand = struct { 44091 FzCmd uintptr 44092 FeCmd uint32 44093 FnArg int32 44094 FzArg uintptr 44095 } 44096 44097 func backupTestFinish(tls *libc.TLS, clientData ClientData) { 44098 var pBackup uintptr = clientData 44099 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 44100 } 44101 44102 func backupTestInit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44103 bp := tls.Alloc(24) 44104 defer tls.Free(24) 44105 44106 var pBackup uintptr 44107 44108 var zDestName uintptr 44109 var zSrcName uintptr 44110 var zCmd uintptr 44111 44112 if objc != 6 { 44113 tcl.XTcl_WrongNumArgs(tls, 44114 interp, 1, objv, ts+28234) 44115 return TCL_ERROR 44116 } 44117 44118 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 44119 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), bp+16) 44120 zDestName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 44121 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))), bp+20) 44122 zSrcName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 5*4))) 44123 44124 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDestName, *(*uintptr)(unsafe.Pointer(bp + 20)), zSrcName) 44125 if !(pBackup != 0) { 44126 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28280, 0)) 44127 return TCL_ERROR 44128 } 44129 44130 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 44131 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44132 }{backupTestCmd})), pBackup, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{backupTestFinish}))) 44133 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 44134 return TCL_OK 44135 } 44136 44137 func Sqlitetestbackup_Init(tls *libc.TLS, interp uintptr) int32 { 44138 tcl.XTcl_CreateObjCommand(tls, interp, ts+28309, *(*uintptr)(unsafe.Pointer(&struct { 44139 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44140 }{backupTestInit})), uintptr(0), uintptr(0)) 44141 return TCL_OK 44142 } 44143 44144 type tcl_vtab1 = struct { 44145 Fbase sqlite3_vtab 44146 Finterp uintptr 44147 FpCmd uintptr 44148 Fdb uintptr 44149 } 44150 44151 type tcl_vtab = tcl_vtab1 44152 type tcl_cursor1 = struct { 44153 Fbase sqlite3_vtab_cursor 44154 FpStmt uintptr 44155 } 44156 44157 type tcl_cursor = tcl_cursor1 44158 44159 func tclDequote(tls *libc.TLS, z uintptr) { 44160 var q int8 = *(*int8)(unsafe.Pointer(z)) 44161 44162 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 44163 var iIn int32 = 1 44164 var iOut int32 = 0 44165 if int32(q) == '[' { 44166 q = int8(']') 44167 } 44168 44169 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 44170 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 44171 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 44172 iIn++ 44173 break 44174 } else { 44175 iIn = iIn + 2 44176 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 44177 } 44178 } else { 44179 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 44180 } 44181 } 44182 44183 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 44184 } 44185 } 44186 44187 func tclConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 44188 bp := tls.Alloc(8) 44189 defer tls.Free(8) 44190 44191 var interp uintptr = pAux 44192 var pTab uintptr = uintptr(0) 44193 var zCmd uintptr = uintptr(0) 44194 var pScript uintptr = uintptr(0) 44195 var rc int32 = SQLITE_OK 44196 44197 if argc != 4 { 44198 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 44199 return SQLITE_ERROR 44200 } 44201 44202 zCmd = sqlite3.Xsqlite3_malloc64(tls, uint64(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4)))+size_t(1))) 44203 pTab = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(tcl_vtab{}))) 44204 if zCmd != 0 && pTab != 0 { 44205 libc.Xmemcpy(tls, zCmd, *(*uintptr)(unsafe.Pointer(argv + 3*4)), libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4)))+size_t(1)) 44206 tclDequote(tls, zCmd) 44207 libc.Xmemset(tls, pTab, 0, uint32(unsafe.Sizeof(tcl_vtab{}))) 44208 44209 (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd = tcl.XTcl_NewStringObj(tls, zCmd, -1) 44210 (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp = interp 44211 (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb = db 44212 (*Tcl_Obj)(unsafe.Pointer((*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd)).FrefCount++ 44213 44214 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44215 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44216 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27377, -1)) 44217 44218 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44219 if rc != TCL_OK { 44220 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetStringResult(tls, interp))) 44221 rc = SQLITE_ERROR 44222 } else { 44223 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, tcl.XTcl_GetStringResult(tls, interp)) 44224 } 44225 44226 if rc != SQLITE_OK { 44227 sqlite3.Xsqlite3_free(tls, pTab) 44228 pTab = uintptr(0) 44229 } 44230 } else { 44231 rc = SQLITE_NOMEM 44232 } 44233 44234 sqlite3.Xsqlite3_free(tls, zCmd) 44235 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 44236 return rc 44237 } 44238 44239 func tclDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 44240 var pTab uintptr = pVtab 44241 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44242 var _objPtr uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd 44243 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44244 tcl.XTclFreeObj(tls, _objPtr) 44245 } 44246 } 44247 sqlite3.Xsqlite3_free(tls, pTab) 44248 return SQLITE_OK 44249 } 44250 44251 func tclOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 44252 var pCur uintptr 44253 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(tcl_cursor{}))) 44254 if pCur == uintptr(0) { 44255 return SQLITE_NOMEM 44256 } 44257 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(tcl_cursor{}))) 44258 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 44259 return SQLITE_OK 44260 } 44261 44262 func tclClose(tls *libc.TLS, cur uintptr) int32 { 44263 var pCur uintptr = cur 44264 if pCur != 0 { 44265 sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCur)).FpStmt) 44266 sqlite3.Xsqlite3_free(tls, pCur) 44267 } 44268 return SQLITE_OK 44269 } 44270 44271 func tclNext(tls *libc.TLS, pVtabCursor uintptr) int32 { 44272 bp := tls.Alloc(8) 44273 defer tls.Free(8) 44274 44275 var pCsr uintptr = pVtabCursor 44276 if (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt != 0 { 44277 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 44278 var rc int32 = sqlite3.Xsqlite3_step(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 44279 if rc != SQLITE_ROW { 44280 var zErr uintptr 44281 rc = sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 44282 (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 44283 if rc != SQLITE_OK { 44284 zErr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 44285 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 44286 } 44287 } 44288 } 44289 return SQLITE_OK 44290 } 44291 44292 func tclFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 44293 bp := tls.Alloc(44) 44294 defer tls.Free(44) 44295 44296 var pCsr uintptr = pVtabCursor 44297 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 44298 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 44299 var pScript uintptr 44300 var pArg uintptr 44301 var ii int32 44302 var rc int32 44303 44304 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44305 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44306 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27441, -1)) 44307 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewIntObj(tls, idxNum)) 44308 if idxStr != 0 { 44309 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, idxStr, -1)) 44310 } else { 44311 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 44312 } 44313 44314 pArg = tcl.XTcl_NewObj(tls) 44315 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 44316 for ii = 0; ii < argc; ii++ { 44317 var zVal uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*4))) 44318 var pVal uintptr 44319 if zVal == uintptr(0) { 44320 pVal = tcl.XTcl_NewObj(tls) 44321 for rc = sqlite3.Xsqlite3_vtab_in_first(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*4)), bp+32); rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 32)) != 0; rc = sqlite3.Xsqlite3_vtab_in_next(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*4)), bp+32) { 44322 var pVal2 uintptr = uintptr(0) 44323 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 44324 if zVal != 0 { 44325 pVal2 = tcl.XTcl_NewStringObj(tls, zVal, -1) 44326 } else { 44327 pVal2 = tcl.XTcl_NewObj(tls) 44328 } 44329 tcl.XTcl_ListObjAppendElement(tls, interp, pVal, pVal2) 44330 } 44331 } else { 44332 pVal = tcl.XTcl_NewStringObj(tls, zVal, -1) 44333 } 44334 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pVal) 44335 } 44336 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pArg) 44337 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44338 var _objPtr uintptr = pArg 44339 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44340 tcl.XTclFreeObj(tls, _objPtr) 44341 } 44342 } 44343 44344 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44345 if rc != TCL_OK { 44346 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44347 rc = SQLITE_ERROR 44348 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 44349 } else { 44350 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44351 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 44352 44353 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+36, bp+40) 44354 if rc != TCL_OK { 44355 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44356 rc = SQLITE_ERROR 44357 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44358 } else { 44359 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 36)); ii = ii + 2 { 44360 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)) + uintptr(ii)*4))) 44361 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)) + uintptr(ii+1)*4)) 44362 if sqlite3.Xsqlite3_stricmp(tls, ts+1947, zCmd) == 0 { 44363 var zSql uintptr = tcl.XTcl_GetString(tls, p) 44364 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+4, uintptr(0)) 44365 if rc != SQLITE_OK { 44366 var zErr uintptr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 44367 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+16, zErr)) 44368 } 44369 } else { 44370 rc = SQLITE_ERROR 44371 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+24, zCmd)) 44372 } 44373 } 44374 } 44375 } 44376 44377 if rc == SQLITE_OK { 44378 rc = tclNext(tls, pVtabCursor) 44379 } 44380 return rc 44381 } 44382 44383 func tclColumn(tls *libc.TLS, pVtabCursor uintptr, ctx uintptr, i int32) int32 { 44384 var pCsr uintptr = pVtabCursor 44385 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 44386 return SQLITE_OK 44387 } 44388 44389 func tclRowid(tls *libc.TLS, pVtabCursor uintptr, pRowid uintptr) int32 { 44390 var pCsr uintptr = pVtabCursor 44391 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, 0) 44392 return SQLITE_OK 44393 } 44394 44395 func tclEof(tls *libc.TLS, pVtabCursor uintptr) int32 { 44396 var pCsr uintptr = pVtabCursor 44397 return libc.Bool32((*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 44398 } 44399 44400 func testBestIndexObjConstraints(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 44401 var ii int32 44402 var pRes uintptr = tcl.XTcl_NewObj(tls) 44403 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 44404 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 44405 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 44406 var pElem uintptr = tcl.XTcl_NewObj(tls) 44407 var zOp uintptr = ts + 3405 44408 44409 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 44410 44411 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) { 44412 case SQLITE_INDEX_CONSTRAINT_EQ: 44413 zOp = ts + 28365 44414 break 44415 case SQLITE_INDEX_CONSTRAINT_GT: 44416 zOp = ts + 28368 44417 break 44418 case SQLITE_INDEX_CONSTRAINT_LE: 44419 zOp = ts + 28371 44420 break 44421 case SQLITE_INDEX_CONSTRAINT_LT: 44422 zOp = ts + 28374 44423 break 44424 case SQLITE_INDEX_CONSTRAINT_GE: 44425 zOp = ts + 28377 44426 break 44427 case SQLITE_INDEX_CONSTRAINT_MATCH: 44428 zOp = ts + 28380 44429 break 44430 case SQLITE_INDEX_CONSTRAINT_LIKE: 44431 zOp = ts + 27587 44432 break 44433 case SQLITE_INDEX_CONSTRAINT_GLOB: 44434 zOp = ts + 27592 44435 break 44436 case SQLITE_INDEX_CONSTRAINT_REGEXP: 44437 zOp = ts + 6831 44438 break 44439 case SQLITE_INDEX_CONSTRAINT_NE: 44440 zOp = ts + 28386 44441 break 44442 case SQLITE_INDEX_CONSTRAINT_ISNOT: 44443 zOp = ts + 28389 44444 break 44445 case SQLITE_INDEX_CONSTRAINT_ISNOTNULL: 44446 zOp = ts + 28395 44447 break 44448 case SQLITE_INDEX_CONSTRAINT_ISNULL: 44449 zOp = ts + 28405 44450 break 44451 case SQLITE_INDEX_CONSTRAINT_IS: 44452 zOp = ts + 5851 44453 break 44454 case SQLITE_INDEX_CONSTRAINT_LIMIT: 44455 zOp = ts + 28412 44456 break 44457 case SQLITE_INDEX_CONSTRAINT_OFFSET: 44458 zOp = ts + 28418 44459 break 44460 } 44461 44462 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+6194, -1)) 44463 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, zOp, -1)) 44464 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 44465 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)) 44466 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28432, -1)) 44467 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable))) 44468 44469 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 44470 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44471 var _objPtr uintptr = pElem 44472 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44473 tcl.XTclFreeObj(tls, _objPtr) 44474 } 44475 } 44476 } 44477 44478 tcl.XTcl_SetObjResult(tls, interp, pRes) 44479 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 44480 var _objPtr uintptr = pRes 44481 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44482 tcl.XTclFreeObj(tls, _objPtr) 44483 } 44484 } 44485 } 44486 44487 func testBestIndexObjOrderby(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 44488 var ii int32 44489 var pRes uintptr = tcl.XTcl_NewObj(tls) 44490 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 44491 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; ii++ { 44492 var pOrder uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(ii)*8 44493 var pElem uintptr = tcl.XTcl_NewObj(tls) 44494 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 44495 44496 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 44497 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).FiColumn)) 44498 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28439, -1)) 44499 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).Fdesc))) 44500 44501 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 44502 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44503 var _objPtr uintptr = pElem 44504 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44505 tcl.XTclFreeObj(tls, _objPtr) 44506 } 44507 } 44508 } 44509 44510 tcl.XTcl_SetObjResult(tls, interp, pRes) 44511 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 44512 var _objPtr uintptr = pRes 44513 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44514 tcl.XTclFreeObj(tls, _objPtr) 44515 } 44516 } 44517 } 44518 44519 func testBestIndexObj(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44520 bp := tls.Alloc(48) 44521 defer tls.Free(48) 44522 44523 *(*[7]uintptr)(unsafe.Pointer(bp)) = [7]uintptr{ 44524 ts + 28444, 44525 ts + 28456, 44526 ts + 28464, 44527 ts + 28469, 44528 ts + 28478, 44529 ts + 28481, 44530 uintptr(0), 44531 } 44532 44533 var pIdxInfo uintptr = clientData 44534 44535 if objc < 2 { 44536 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 44537 return TCL_ERROR 44538 } 44539 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp, int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+28) != 0 { 44540 return TCL_ERROR 44541 } 44542 44543 if *(*int32)(unsafe.Pointer(bp + 28)) < 4 && objc != 2 { 44544 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 44545 return TCL_ERROR 44546 } 44547 if *(*int32)(unsafe.Pointer(bp + 28)) == 4 && objc != 4 { 44548 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28491) 44549 return TCL_ERROR 44550 } 44551 if *(*int32)(unsafe.Pointer(bp + 28)) == 5 && objc != 3 && objc != 4 { 44552 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28505) 44553 return TCL_ERROR 44554 } 44555 44556 switch *(*int32)(unsafe.Pointer(bp + 28)) { 44557 case 0: 44558 testBestIndexObjConstraints(tls, interp, pIdxInfo) 44559 break 44560 44561 case 1: 44562 testBestIndexObjOrderby(tls, interp, pIdxInfo) 44563 break 44564 44565 case 2: 44566 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 44567 break 44568 44569 case 3: 44570 { 44571 var bDistinct int32 = sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo) 44572 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bDistinct)) 44573 break 44574 44575 } 44576 44577 case 4: 44578 { 44579 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+32) != 0 || 44580 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+36) != 0 { 44581 return TCL_ERROR 44582 } 44583 tcl.XTcl_SetObjResult(tls, interp, 44584 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_vtab_in(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 36))))) 44585 break 44586 44587 } 44588 44589 case 5: 44590 { 44591 *(*int32)(unsafe.Pointer(bp + 40)) = 0 44592 var rc int32 44593 *(*uintptr)(unsafe.Pointer(bp + 44)) = uintptr(0) 44594 var zVal uintptr = ts + 584 44595 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+40) != 0 { 44596 return TCL_ERROR 44597 } 44598 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 40)), bp+44) 44599 if rc != SQLITE_OK && rc != SQLITE_NOTFOUND { 44600 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44601 return TCL_ERROR 44602 } 44603 if *(*uintptr)(unsafe.Pointer(bp + 44)) != 0 { 44604 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 44))) 44605 } else if objc == 4 { 44606 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 44607 } 44608 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zVal, -1)) 44609 break 44610 44611 } 44612 } 44613 44614 return TCL_OK 44615 } 44616 44617 func tclBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 44618 bp := tls.Alloc(100) 44619 defer tls.Free(100) 44620 44621 var pTab uintptr = tab 44622 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 44623 var rc int32 = SQLITE_OK 44624 44625 var pScript uintptr 44626 44627 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44628 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44629 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27495, -1)) 44630 44631 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([24]int8{})), bp+56, ts+28521, libc.VaList(bp, libc.PostIncInt32(&iNext, 1))) 44632 tcl.XTcl_CreateObjCommand(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(&struct { 44633 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44634 }{testBestIndexObj})), pIdxInfo, uintptr(0)) 44635 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+56, -1)) 44636 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44637 tcl.XTcl_DeleteCommand(tls, interp, bp+56) 44638 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44639 var _objPtr uintptr = pScript 44640 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44641 tcl.XTclFreeObj(tls, _objPtr) 44642 } 44643 } 44644 44645 if rc != TCL_OK { 44646 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44647 rc = SQLITE_ERROR 44648 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44649 } else { 44650 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44651 *(*uintptr)(unsafe.Pointer(bp + 84)) = uintptr(0) 44652 44653 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+84) 44654 if rc != TCL_OK { 44655 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44656 rc = SQLITE_ERROR 44657 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zErr)) 44658 } else { 44659 var ii int32 44660 var iArgv int32 = 1 44661 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 80)); ii = ii + 2 { 44662 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 84)) + uintptr(ii)*4))) 44663 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 84)) + uintptr(ii+1)*4)) 44664 if sqlite3.Xsqlite3_stricmp(tls, ts+28533, zCmd) == 0 { 44665 rc = tcl.XTcl_GetDoubleFromObj(tls, interp, p, pIdxInfo+36) 44666 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28456, zCmd) == 0 { 44667 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+32) 44668 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28538, zCmd) == 0 { 44669 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+20) 44670 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28545, zCmd) == 0 { 44671 sqlite3.Xsqlite3_free(tls, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr) 44672 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+24, tcl.XTcl_GetString(tls, p))) 44673 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 44674 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28552, zCmd) == 0 { 44675 *(*Tcl_WideInt)(unsafe.Pointer(bp + 88)) = int64(0) 44676 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, p, bp+88) 44677 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = sqlite3_int64(tRowcnt(*(*Tcl_WideInt)(unsafe.Pointer(bp + 88)))) 44678 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28557, zCmd) == 0 || 44679 sqlite3.Xsqlite3_stricmp(tls, ts+28561, zCmd) == 0 { 44680 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, bp+96) 44681 if rc == SQLITE_OK { 44682 if *(*int32)(unsafe.Pointer(bp + 96)) < 0 || *(*int32)(unsafe.Pointer(bp + 96)) >= (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint { 44683 rc = SQLITE_ERROR 44684 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28566, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 96)))) 44685 } else { 44686 var bOmit int32 = libc.Bool32(int32(*(*int8)(unsafe.Pointer(zCmd))) == 'o' || int32(*(*int8)(unsafe.Pointer(zCmd))) == 'O') 44687 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 96)))*8)).FargvIndex = libc.PostIncInt32(&iArgv, 1) 44688 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 96)))*8)).Fomit = uint8(bOmit) 44689 } 44690 } 44691 } else { 44692 rc = SQLITE_ERROR 44693 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+40, zCmd)) 44694 } 44695 if rc != SQLITE_OK && (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg == uintptr(0) { 44696 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44697 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, zErr)) 44698 } 44699 } 44700 } 44701 } 44702 44703 return rc 44704 } 44705 44706 var iNext int32 = 43 44707 44708 var tclModule = sqlite3_module{ 44709 FxCreate: 0, 44710 FxConnect: 0, 44711 FxBestIndex: 0, 44712 FxDisconnect: 0, 44713 FxDestroy: 0, 44714 FxOpen: 0, 44715 FxClose: 0, 44716 FxFilter: 0, 44717 FxNext: 0, 44718 FxEof: 0, 44719 FxColumn: 0, 44720 FxRowid: 0, 44721 } 44722 44723 func register_tcl_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44724 bp := tls.Alloc(4) 44725 defer tls.Free(4) 44726 44727 if objc != 2 { 44728 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 44729 return TCL_ERROR 44730 } 44731 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 44732 return TCL_ERROR 44733 } 44734 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+28581, uintptr(unsafe.Pointer(&tclModule)), interp) 44735 return TCL_OK 44736 } 44737 44738 func Sqlitetesttcl_Init(tls *libc.TLS, interp uintptr) int32 { 44739 var i int32 44740 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd4))/uint32(unsafe.Sizeof(struct { 44741 FzName uintptr 44742 FxProc uintptr 44743 FclientData uintptr 44744 }{})); i++ { 44745 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd4[i].FzName, 44746 aObjCmd4[i].FxProc, aObjCmd4[i].FclientData, uintptr(0)) 44747 } 44748 return TCL_OK 44749 } 44750 44751 var aObjCmd4 = [1]struct { 44752 FzName uintptr 44753 FxProc uintptr 44754 FclientData uintptr 44755 }{ 44756 {FzName: ts + 28585, FxProc: 0}, 44757 } 44758 44759 func ptrToText(tls *libc.TLS, p uintptr) uintptr { 44760 bp := tls.Alloc(8) 44761 defer tls.Free(8) 44762 44763 sqlite3.Xsqlite3_snprintf(tls, int32(uint32(unsafe.Sizeof(buf))-uint32(1)), uintptr(unsafe.Pointer(&buf)), ts+9889, libc.VaList(bp, p)) 44764 return uintptr(unsafe.Pointer(&buf)) 44765 } 44766 44767 var buf [100]int8 44768 44769 func blobHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 44770 bp := tls.Alloc(8) 44771 defer tls.Free(8) 44772 44773 var z uintptr 44774 44775 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44776 if *(*int32)(unsafe.Pointer(bp)) == 0 { 44777 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 44778 } else if *(*int32)(unsafe.Pointer(bp)) > 9 && 0 == libc.Xmemcmp(tls, ts+28605, z, uint32(9)) { 44779 var channel Tcl_Channel 44780 var instanceData ClientData 44781 44782 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 44783 if !(channel != 0) { 44784 return TCL_ERROR 44785 } 44786 44787 tcl.XTcl_Flush(tls, channel) 44788 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 44789 44790 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 44791 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 44792 } else { 44793 *(*uintptr)(unsafe.Pointer(ppBlob)) = sqlite3TestTextToPtr(tls, z) 44794 } 44795 44796 return TCL_OK 44797 } 44798 44799 func blobStringFromObj(tls *libc.TLS, pObj uintptr) uintptr { 44800 bp := tls.Alloc(4) 44801 defer tls.Free(4) 44802 44803 var z uintptr 44804 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44805 return func() uintptr { 44806 if *(*int32)(unsafe.Pointer(bp)) != 0 { 44807 return z 44808 } 44809 return uintptr(0) 44810 }() 44811 } 44812 44813 func test_blob_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44814 bp := tls.Alloc(24) 44815 defer tls.Free(24) 44816 44817 var zDb uintptr 44818 var zTable uintptr 44819 var zColumn uintptr 44820 44821 var zVarname uintptr 44822 44823 *(*uintptr)(unsafe.Pointer(bp + 20)) = bp 44824 var rc int32 44825 44826 if objc != 8 { 44827 var zUsage uintptr = ts + 28615 44828 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zUsage) 44829 return TCL_ERROR 44830 } 44831 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+4) != 0 { 44832 return TCL_ERROR 44833 } 44834 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 44835 zTable = blobStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 44836 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))) 44837 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*4)), bp+8) != 0 { 44838 return TCL_ERROR 44839 } 44840 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*4)), bp) != 0 { 44841 return TCL_ERROR 44842 } 44843 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 7*4)), bp+16) 44844 44845 if *(*int32)(unsafe.Pointer(bp + 16)) > 0 { 44846 rc = sqlite3.Xsqlite3_blob_open(tls, *(*uintptr)(unsafe.Pointer(bp + 4)), zDb, zTable, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp)), bp+20) 44847 tcl.XTcl_SetVar2(tls, interp, zVarname, uintptr(0), ptrToText(tls, *(*uintptr)(unsafe.Pointer(bp + 20))), 0) 44848 } else { 44849 rc = sqlite3.Xsqlite3_blob_open(tls, *(*uintptr)(unsafe.Pointer(bp + 4)), zDb, zTable, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp)), uintptr(0)) 44850 } 44851 44852 if rc == SQLITE_OK { 44853 tcl.XTcl_ResetResult(tls, interp) 44854 } else { 44855 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44856 return TCL_ERROR 44857 } 44858 return TCL_OK 44859 } 44860 44861 func test_blob_close(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44862 bp := tls.Alloc(4) 44863 defer tls.Free(4) 44864 44865 var rc int32 44866 44867 if objc != 2 { 44868 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 44869 return TCL_ERROR 44870 } 44871 44872 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 44873 return TCL_ERROR 44874 } 44875 rc = sqlite3.Xsqlite3_blob_close(tls, *(*uintptr)(unsafe.Pointer(bp))) 44876 44877 if rc != 0 { 44878 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44879 } else { 44880 tcl.XTcl_ResetResult(tls, interp) 44881 } 44882 return TCL_OK 44883 } 44884 44885 func test_blob_bytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44886 bp := tls.Alloc(4) 44887 defer tls.Free(4) 44888 44889 var nByte int32 44890 44891 if objc != 2 { 44892 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 44893 return TCL_ERROR 44894 } 44895 44896 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 44897 return TCL_ERROR 44898 } 44899 nByte = sqlite3.Xsqlite3_blob_bytes(tls, *(*uintptr)(unsafe.Pointer(bp))) 44900 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nByte)) 44901 44902 return TCL_OK 44903 } 44904 44905 func test_blob_read(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44906 bp := tls.Alloc(28) 44907 defer tls.Free(28) 44908 44909 var zBuf uintptr = uintptr(0) 44910 var rc int32 44911 44912 if objc != 4 { 44913 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28667) 44914 return TCL_ERROR 44915 } 44916 44917 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16) != 0 { 44918 return TCL_ERROR 44919 } 44920 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+20) || 44921 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+24) { 44922 return TCL_ERROR 44923 } 44924 44925 if *(*int32)(unsafe.Pointer(bp + 24)) > 0 { 44926 zBuf = tcl.XTcl_AttemptAlloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 24)))) 44927 if zBuf == uintptr(0) { 44928 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28684, 0)) 44929 return TCL_ERROR 44930 } 44931 } 44932 rc = sqlite3.Xsqlite3_blob_read(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zBuf, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 20))) 44933 if rc == SQLITE_OK { 44934 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zBuf, *(*int32)(unsafe.Pointer(bp + 24)))) 44935 } else { 44936 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44937 } 44938 tcl.XTcl_Free(tls, zBuf) 44939 44940 return func() int32 { 44941 if rc == SQLITE_OK { 44942 return TCL_OK 44943 } 44944 return TCL_ERROR 44945 }() 44946 } 44947 44948 func test_blob_write(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44949 bp := tls.Alloc(12) 44950 defer tls.Free(12) 44951 44952 var rc int32 44953 var zBuf uintptr 44954 44955 if objc != 4 && objc != 5 { 44956 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28745) 44957 return TCL_ERROR 44958 } 44959 44960 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 44961 return TCL_ERROR 44962 } 44963 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) { 44964 return TCL_ERROR 44965 } 44966 44967 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+8) 44968 if objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+8) != 0 { 44969 return TCL_ERROR 44970 } 44971 rc = sqlite3.Xsqlite3_blob_write(tls, *(*uintptr)(unsafe.Pointer(bp)), zBuf, *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 4))) 44972 if rc != SQLITE_OK { 44973 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44974 } 44975 44976 return func() int32 { 44977 if rc == SQLITE_OK { 44978 return TCL_OK 44979 } 44980 return TCL_ERROR 44981 }() 44982 } 44983 44984 func Sqlitetest_blob_Init(tls *libc.TLS, interp uintptr) int32 { 44985 var i int32 44986 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd5))/uint32(unsafe.Sizeof(struct { 44987 FzName uintptr 44988 FxProc uintptr 44989 }{})); i++ { 44990 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd5[i].FzName, aObjCmd5[i].FxProc, uintptr(0), uintptr(0)) 44991 } 44992 return TCL_OK 44993 } 44994 44995 var aObjCmd5 = [5]struct { 44996 FzName uintptr 44997 FxProc uintptr 44998 }{ 44999 {FzName: ts + 28772, FxProc: 0}, 45000 {FzName: ts + 28790, FxProc: 0}, 45001 {FzName: ts + 28809, FxProc: 0}, 45002 {FzName: ts + 28828, FxProc: 0}, 45003 {FzName: ts + 28846, FxProc: 0}, 45004 } 45005 45006 func sqlite3BtreeSharedCacheReport(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 45007 var pBt uintptr 45008 var pRet uintptr = tcl.XTcl_NewObj(tls) 45009 for pBt = sqlite3.Xsqlite3SharedCacheList; pBt != 0; pBt = (*BtShared)(unsafe.Pointer(pBt)).FpNext { 45010 var zFile uintptr = sqlite3.Xsqlite3PagerFilename(tls, (*BtShared)(unsafe.Pointer(pBt)).FpPager, 1) 45011 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, zFile, -1)) 45012 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, (*BtShared)(unsafe.Pointer(pBt)).FnRef)) 45013 } 45014 tcl.XTcl_SetObjResult(tls, interp, pRet) 45015 return TCL_OK 45016 } 45017 45018 func sqlite3BtreeCursorList(tls *libc.TLS, p uintptr) { 45019 } 45020 45021 func set_options(tls *libc.TLS, interp uintptr) { 45022 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28880, ts+28899, 45023 TCL_GLOBAL_ONLY) 45024 45025 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28901, ts+14193, TCL_GLOBAL_ONLY) 45026 45027 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28909, ts+14193, TCL_GLOBAL_ONLY) 45028 45029 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28927, ts+28940, TCL_GLOBAL_ONLY) 45030 45031 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28944, ts+28899, TCL_GLOBAL_ONLY) 45032 45033 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28951, ts+14193, TCL_GLOBAL_ONLY) 45034 45035 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28963, ts+14193, TCL_GLOBAL_ONLY) 45036 45037 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28969, ts+14193, TCL_GLOBAL_ONLY) 45038 45039 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28991, ts+14193, TCL_GLOBAL_ONLY) 45040 45041 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29003, ts+28899, TCL_GLOBAL_ONLY) 45042 45043 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29011, ts+28899, TCL_GLOBAL_ONLY) 45044 45045 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29015, ts+28899, TCL_GLOBAL_ONLY) 45046 45047 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29040, ts+28899, TCL_GLOBAL_ONLY) 45048 45049 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29045, 45050 ts+29060, TCL_GLOBAL_ONLY) 45051 45052 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29062, ts+14193, TCL_GLOBAL_ONLY) 45053 45054 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29071, ts+14193, TCL_GLOBAL_ONLY) 45055 45056 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29081, ts+14193, TCL_GLOBAL_ONLY) 45057 45058 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29093, ts+14193, TCL_GLOBAL_ONLY) 45059 45060 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13460, ts+28899, TCL_GLOBAL_ONLY) 45061 45062 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29107, ts+28899, TCL_GLOBAL_ONLY) 45063 45064 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29115, ts+14193, TCL_GLOBAL_ONLY) 45065 45066 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29120, ts+14193, TCL_GLOBAL_ONLY) 45067 45068 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29125, ts+28899, TCL_GLOBAL_ONLY) 45069 45070 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13580, ts+28899, TCL_GLOBAL_ONLY) 45071 45072 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29141, ts+28899, TCL_GLOBAL_ONLY) 45073 45074 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29150, ts+28899, TCL_GLOBAL_ONLY) 45075 45076 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29156, ts+28899, TCL_GLOBAL_ONLY) 45077 45078 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29167, ts+28899, TCL_GLOBAL_ONLY) 45079 45080 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+1957, ts+28899, TCL_GLOBAL_ONLY) 45081 45082 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29178, ts+14193, TCL_GLOBAL_ONLY) 45083 45084 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29188, ts+14193, TCL_GLOBAL_ONLY) 45085 45086 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29200, ts+28899, TCL_GLOBAL_ONLY) 45087 45088 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29208, ts+28899, TCL_GLOBAL_ONLY) 45089 45090 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29214, ts+14193, TCL_GLOBAL_ONLY) 45091 45092 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29224, ts+14193, TCL_GLOBAL_ONLY) 45093 45094 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10121, ts+28899, TCL_GLOBAL_ONLY) 45095 45096 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29241, ts+28899, TCL_GLOBAL_ONLY) 45097 45098 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29246, ts+28899, TCL_GLOBAL_ONLY) 45099 45100 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13044, ts+28899, TCL_GLOBAL_ONLY) 45101 45102 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29254, ts+28899, TCL_GLOBAL_ONLY) 45103 45104 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29264, ts+28899, TCL_GLOBAL_ONLY) 45105 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29275, 45106 ts+14193, TCL_GLOBAL_ONLY) 45107 45108 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29294, ts+28899, TCL_GLOBAL_ONLY) 45109 45110 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29306, ts+28899, TCL_GLOBAL_ONLY) 45111 45112 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29319, ts+28899, TCL_GLOBAL_ONLY) 45113 45114 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29327, ts+28899, TCL_GLOBAL_ONLY) 45115 45116 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29332, ts+28899, TCL_GLOBAL_ONLY) 45117 45118 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29338, ts+28899, TCL_GLOBAL_ONLY) 45119 45120 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29342, ts+28899, TCL_GLOBAL_ONLY) 45121 45122 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29357, ts+14193, 45123 TCL_GLOBAL_ONLY) 45124 45125 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29377, ts+28899, TCL_GLOBAL_ONLY) 45126 45127 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13439, ts+28899, TCL_GLOBAL_ONLY) 45128 45129 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29397, ts+28899, TCL_GLOBAL_ONLY) 45130 45131 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29406, ts+28899, TCL_GLOBAL_ONLY) 45132 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29415, ts+28899, TCL_GLOBAL_ONLY) 45133 45134 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29425, ts+28899, TCL_GLOBAL_ONLY) 45135 45136 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29434, ts+28899, TCL_GLOBAL_ONLY) 45137 45138 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29443, ts+28899, TCL_GLOBAL_ONLY) 45139 45140 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29454, ts+28899, TCL_GLOBAL_ONLY) 45141 45142 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+4974, ts+28899, TCL_GLOBAL_ONLY) 45143 45144 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29461, ts+28899, TCL_GLOBAL_ONLY) 45145 45146 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29475, ts+28899, TCL_GLOBAL_ONLY) 45147 45148 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29486, ts+14193, TCL_GLOBAL_ONLY) 45149 45150 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29491, ts+14193, TCL_GLOBAL_ONLY) 45151 45152 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29496, ts+14193, TCL_GLOBAL_ONLY) 45153 45154 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29501, ts+28899, TCL_GLOBAL_ONLY) 45155 45156 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29506, ts+14193, TCL_GLOBAL_ONLY) 45157 45158 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29519, ts+28899, TCL_GLOBAL_ONLY) 45159 45160 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29533, ts+28899, TCL_GLOBAL_ONLY) 45161 45162 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29542, ts+14193, TCL_GLOBAL_ONLY) 45163 45164 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29546, ts+14193, TCL_GLOBAL_ONLY) 45165 45166 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10868, ts+28899, TCL_GLOBAL_ONLY) 45167 45168 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29561, ts+28899, TCL_GLOBAL_ONLY) 45169 45170 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29573, ts+14193, TCL_GLOBAL_ONLY) 45171 45172 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29586, ts+28899, TCL_GLOBAL_ONLY) 45173 45174 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29595, ts+14193, TCL_GLOBAL_ONLY) 45175 45176 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29604, ts+28899, TCL_GLOBAL_ONLY) 45177 45178 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29614, ts+28899, TCL_GLOBAL_ONLY) 45179 45180 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29624, 45181 func() uintptr { 45182 if uint32(unsafe.Sizeof(float64(0))) > uint32(unsafe.Sizeof(float64(0))) { 45183 return ts + 28899 45184 } 45185 return ts + 14193 45186 }(), 45187 TCL_GLOBAL_ONLY) 45188 45189 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29636, ts+28899, TCL_GLOBAL_ONLY) 45190 45191 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29645, ts+28899, TCL_GLOBAL_ONLY) 45192 45193 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29658, ts+28899, TCL_GLOBAL_ONLY) 45194 45195 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29668, ts+14193, TCL_GLOBAL_ONLY) 45196 45197 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29678, ts+28899, TCL_GLOBAL_ONLY) 45198 45199 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29685, ts+28899, TCL_GLOBAL_ONLY) 45200 45201 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29689, ts+28899, TCL_GLOBAL_ONLY) 45202 45203 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29703, ts+28899, TCL_GLOBAL_ONLY) 45204 45205 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+9564, ts+28899, TCL_GLOBAL_ONLY) 45206 45207 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29710, ts+28899, TCL_GLOBAL_ONLY) 45208 45209 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29718, ts+28899, TCL_GLOBAL_ONLY) 45210 45211 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29724, ts+14193, TCL_GLOBAL_ONLY) 45212 45213 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29739, ts+28899, TCL_GLOBAL_ONLY) 45214 45215 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29754, ts+28899, TCL_GLOBAL_ONLY) 45216 45217 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29769, ts+28899, TCL_GLOBAL_ONLY) 45218 45219 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+18810, ts+28899, TCL_GLOBAL_ONLY) 45220 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29777, ts+28899, TCL_GLOBAL_ONLY) 45221 45222 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29786, ts+14193, TCL_GLOBAL_ONLY) 45223 45224 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29797, ts+14193, TCL_GLOBAL_ONLY) 45225 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29816, ts+14193, TCL_GLOBAL_ONLY) 45226 45227 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29837, ts+28899, TCL_GLOBAL_ONLY) 45228 45229 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29850, ts+28899, TCL_GLOBAL_ONLY) 45230 45231 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29859, ts+28899, TCL_GLOBAL_ONLY) 45232 45233 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29866, 45234 func() uintptr { 45235 if 1 != 0 { 45236 return ts + 28899 45237 } 45238 return ts + 14193 45239 }(), TCL_GLOBAL_ONLY) 45240 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29877, 45241 func() uintptr { 45242 if SQLITE_THREADSAFE == 1 { 45243 return ts + 28899 45244 } 45245 return ts + 14193 45246 }(), TCL_GLOBAL_ONLY) 45247 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29889, 45248 func() uintptr { 45249 if SQLITE_THREADSAFE == 2 { 45250 return ts + 28899 45251 } 45252 return ts + 14193 45253 }(), TCL_GLOBAL_ONLY) 45254 45255 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29901, ts+28899, TCL_GLOBAL_ONLY) 45256 45257 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13665, ts+28899, TCL_GLOBAL_ONLY) 45258 45259 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29908, ts+28899, TCL_GLOBAL_ONLY) 45260 45261 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29916, ts+28899, TCL_GLOBAL_ONLY) 45262 45263 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+15733, ts+28899, TCL_GLOBAL_ONLY) 45264 45265 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29929, ts+28899, TCL_GLOBAL_ONLY) 45266 45267 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29936, ts+28899, TCL_GLOBAL_ONLY) 45268 45269 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29941, ts+28899, TCL_GLOBAL_ONLY) 45270 45271 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29946, ts+28899, TCL_GLOBAL_ONLY) 45272 45273 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29950, ts+28899, TCL_GLOBAL_ONLY) 45274 45275 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29954, ts+14193, TCL_GLOBAL_ONLY) 45276 45277 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13692, ts+28899, TCL_GLOBAL_ONLY) 45278 45279 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29974, ts+14193, TCL_GLOBAL_ONLY) 45280 45281 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29993, ts+14193, TCL_GLOBAL_ONLY) 45282 45283 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30007, ts+14193, TCL_GLOBAL_ONLY) 45284 45285 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30016, ts+14193, TCL_GLOBAL_ONLY) 45286 45287 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30040, ts+14193, TCL_GLOBAL_ONLY) 45288 45289 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30061, ts+14193, TCL_GLOBAL_ONLY) 45290 45291 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30068, ts+14193, TCL_GLOBAL_ONLY) 45292 45293 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30081, ts+14193, TCL_GLOBAL_ONLY) 45294 45295 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30091, ts+28899, TCL_GLOBAL_ONLY) 45296 45297 { 45298 tcl.XTcl_LinkVar(tls, interp, ts+30102, uintptr(unsafe.Pointer(&cv_MAX_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45299 } 45300 45301 { 45302 tcl.XTcl_LinkVar(tls, interp, ts+30120, uintptr(unsafe.Pointer(&cv_MAX_COLUMN)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45303 } 45304 45305 { 45306 tcl.XTcl_LinkVar(tls, interp, ts+30138, uintptr(unsafe.Pointer(&cv_MAX_SQL_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45307 } 45308 45309 { 45310 tcl.XTcl_LinkVar(tls, interp, ts+30160, uintptr(unsafe.Pointer(&cv_MAX_EXPR_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45311 } 45312 45313 { 45314 tcl.XTcl_LinkVar(tls, interp, ts+30182, uintptr(unsafe.Pointer(&cv_MAX_COMPOUND_SELECT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45315 } 45316 45317 { 45318 tcl.XTcl_LinkVar(tls, interp, ts+30209, uintptr(unsafe.Pointer(&cv_MAX_VDBE_OP)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45319 } 45320 45321 { 45322 tcl.XTcl_LinkVar(tls, interp, ts+30228, uintptr(unsafe.Pointer(&cv_MAX_FUNCTION_ARG)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45323 } 45324 45325 { 45326 tcl.XTcl_LinkVar(tls, interp, ts+30252, uintptr(unsafe.Pointer(&cv_MAX_VARIABLE_NUMBER)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45327 } 45328 45329 { 45330 tcl.XTcl_LinkVar(tls, interp, ts+30279, uintptr(unsafe.Pointer(&cv_MAX_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45331 } 45332 45333 { 45334 tcl.XTcl_LinkVar(tls, interp, ts+30300, uintptr(unsafe.Pointer(&cv_MAX_PAGE_COUNT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45335 } 45336 45337 { 45338 tcl.XTcl_LinkVar(tls, interp, ts+30322, uintptr(unsafe.Pointer(&cv_MAX_LIKE_PATTERN_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45339 } 45340 45341 { 45342 tcl.XTcl_LinkVar(tls, interp, ts+30353, uintptr(unsafe.Pointer(&cv_MAX_TRIGGER_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45343 } 45344 45345 { 45346 tcl.XTcl_LinkVar(tls, interp, ts+30378, uintptr(unsafe.Pointer(&cv_DEFAULT_CACHE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45347 } 45348 45349 { 45350 tcl.XTcl_LinkVar(tls, interp, ts+30404, uintptr(unsafe.Pointer(&cv_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45351 } 45352 45353 { 45354 tcl.XTcl_LinkVar(tls, interp, ts+30429, uintptr(unsafe.Pointer(&cv_DEFAULT_FILE_FORMAT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45355 } 45356 45357 { 45358 tcl.XTcl_LinkVar(tls, interp, ts+30456, uintptr(unsafe.Pointer(&cv_DEFAULT_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45359 } 45360 45361 { 45362 tcl.XTcl_LinkVar(tls, interp, ts+30483, uintptr(unsafe.Pointer(&cv_DEFAULT_WAL_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45363 } 45364 45365 { 45366 tcl.XTcl_LinkVar(tls, interp, ts+30514, uintptr(unsafe.Pointer(&cv_MAX_ATTACHED)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45367 } 45368 45369 { 45370 tcl.XTcl_LinkVar(tls, interp, ts+30534, uintptr(unsafe.Pointer(&cv_MAX_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45371 } 45372 45373 { 45374 tcl.XTcl_LinkVar(tls, interp, ts+30563, uintptr(unsafe.Pointer(&cv_MAX_WORKER_THREADS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45375 } 45376 45377 { 45378 tcl.XTcl_LinkVar(tls, interp, ts+30589, uintptr(unsafe.Pointer(&cv_TEMP_STORE)), 45379 TCL_LINK_INT|TCL_LINK_READ_ONLY) 45380 45381 } 45382 45383 { 45384 tcl.XTcl_LinkVar(tls, interp, ts+30600, uintptr(unsafe.Pointer(&cv___GNUC__)), 45385 TCL_LINK_INT|TCL_LINK_READ_ONLY) 45386 45387 } 45388 } 45389 45390 var cv_MAX_LENGTH int32 = SQLITE_MAX_LENGTH 45391 var cv_MAX_COLUMN int32 = SQLITE_MAX_COLUMN 45392 var cv_MAX_SQL_LENGTH int32 = SQLITE_MAX_SQL_LENGTH 45393 var cv_MAX_EXPR_DEPTH int32 = SQLITE_MAX_EXPR_DEPTH 45394 var cv_MAX_COMPOUND_SELECT int32 = SQLITE_MAX_COMPOUND_SELECT 45395 var cv_MAX_VDBE_OP int32 = SQLITE_MAX_VDBE_OP 45396 var cv_MAX_FUNCTION_ARG int32 = SQLITE_MAX_FUNCTION_ARG 45397 var cv_MAX_VARIABLE_NUMBER int32 = SQLITE_MAX_VARIABLE_NUMBER 45398 var cv_MAX_PAGE_SIZE int32 = SQLITE_MAX_PAGE_SIZE 45399 var cv_MAX_PAGE_COUNT int32 = SQLITE_MAX_PAGE_COUNT 45400 var cv_MAX_LIKE_PATTERN_LENGTH int32 = SQLITE_MAX_LIKE_PATTERN_LENGTH 45401 var cv_MAX_TRIGGER_DEPTH int32 = SQLITE_MAX_TRIGGER_DEPTH 45402 var cv_DEFAULT_CACHE_SIZE int32 = -2000 45403 var cv_DEFAULT_PAGE_SIZE int32 = SQLITE_DEFAULT_PAGE_SIZE 45404 var cv_DEFAULT_FILE_FORMAT int32 = SQLITE_DEFAULT_FILE_FORMAT 45405 var cv_DEFAULT_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 45406 var cv_DEFAULT_WAL_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 45407 var cv_MAX_ATTACHED int32 = SQLITE_MAX_ATTACHED 45408 var cv_MAX_DEFAULT_PAGE_SIZE int32 = SQLITE_MAX_DEFAULT_PAGE_SIZE 45409 var cv_MAX_WORKER_THREADS int32 = SQLITE_MAX_WORKER_THREADS 45410 var cv_TEMP_STORE int32 = SQLITE_TEMP_STORE 45411 var cv___GNUC__ int32 = 1 45412 45413 func Sqliteconfig_Init(tls *libc.TLS, interp uintptr) int32 { 45414 set_options(tls, interp) 45415 return TCL_OK 45416 } 45417 45418 func sqlite3Delete83Name(tls *libc.TLS, z uintptr) { 45419 var i int32 45420 var sz int32 45421 sz = int32(libc.Xstrlen(tls, z)) 45422 for i = sz - 1; i > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '/' && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '.'; i-- { 45423 } 45424 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == '.' && sz > i+4 { 45425 libc.Xmemmove(tls, z+uintptr(i+1), z+uintptr(sz-3), uint32(4)) 45426 } 45427 } 45428 45429 func sqlite3DeleteUnlinkIfExists(tls *libc.TLS, pVfs uintptr, zFile uintptr, pbExists uintptr) int32 { 45430 var rc int32 = SQLITE_ERROR 45431 45432 rc = libc.Xaccess(tls, zFile, F_OK) 45433 if rc != 0 { 45434 if *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) == ENOENT { 45435 if pbExists != 0 { 45436 *(*int32)(unsafe.Pointer(pbExists)) = 0 45437 } 45438 rc = SQLITE_OK 45439 } 45440 } else { 45441 if pbExists != 0 { 45442 *(*int32)(unsafe.Pointer(pbExists)) = 1 45443 } 45444 rc = libc.Xunlink(tls, zFile) 45445 } 45446 return rc 45447 } 45448 45449 func sqlite3_delete_database(tls *libc.TLS, zFile uintptr) int32 { 45450 bp := tls.Alloc(116) 45451 defer tls.Free(116) 45452 45453 var zBuf uintptr 45454 var nBuf int32 45455 var rc int32 = 0 45456 var i int32 45457 45458 *(*[4]uintptr)(unsafe.Pointer(bp + 24)) = [4]uintptr{ts, ts + 30609, ts + 30620, ts + 30627} 45459 45460 *(*[6]MFile)(unsafe.Pointer(bp + 40)) = [6]MFile{ 45461 {FzFmt: ts + 30634}, 45462 {FzFmt: ts + 30641}, 45463 {FzFmt: ts + 30656}, 45464 {FzFmt: ts + 30634, Fb83: 1}, 45465 {FzFmt: ts + 30641, FiOffset: SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET, Fb83: 1}, 45466 {FzFmt: ts + 30656, FiOffset: SQLITE_MULTIPLEX_WAL_8_3_OFFSET, Fb83: 1}, 45467 } 45468 45469 var pVfs uintptr = uintptr(0) 45470 45471 nBuf = int32(libc.Xstrlen(tls, zFile)) + 100 45472 zBuf = sqlite3.Xsqlite3_malloc(tls, nBuf) 45473 if zBuf == uintptr(0) { 45474 return SQLITE_NOMEM 45475 } 45476 45477 for i = 0; rc == 0 && uint32(i) < uint32(unsafe.Sizeof([4]uintptr{}))/uint32(unsafe.Sizeof(uintptr(0))); i++ { 45478 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, *(*uintptr)(unsafe.Pointer(bp + 24 + uintptr(i)*4)), libc.VaList(bp, zFile)) 45479 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 45480 if rc == 0 && i != 0 { 45481 sqlite3Delete83Name(tls, zBuf) 45482 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 45483 } 45484 } 45485 45486 for i = 0; rc == 0 && uint32(i) < uint32(unsafe.Sizeof([6]MFile{}))/uint32(unsafe.Sizeof(MFile{})); i++ { 45487 var p uintptr = bp + 40 + uintptr(i)*12 45488 var iChunk int32 45489 for iChunk = 1; iChunk <= MX_CHUNK_NUMBER; iChunk++ { 45490 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, (*MFile)(unsafe.Pointer(p)).FzFmt, libc.VaList(bp+8, zFile, iChunk+(*MFile)(unsafe.Pointer(p)).FiOffset)) 45491 if (*MFile)(unsafe.Pointer(p)).Fb83 != 0 { 45492 sqlite3Delete83Name(tls, zBuf) 45493 } 45494 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, bp+112) 45495 if *(*int32)(unsafe.Pointer(bp + 112)) == 0 || rc != 0 { 45496 break 45497 } 45498 } 45499 } 45500 45501 sqlite3.Xsqlite3_free(tls, zBuf) 45502 return func() int32 { 45503 if rc != 0 { 45504 return SQLITE_ERROR 45505 } 45506 return SQLITE_OK 45507 }() 45508 } 45509 45510 type MFile = struct { 45511 FzFmt uintptr 45512 FiOffset int32 45513 Fb83 int32 45514 } 45515 45516 func Sqlitetest_demovfs_Init(tls *libc.TLS, interp uintptr) int32 { 45517 return TCL_OK 45518 } 45519 45520 type devsym_file1 = struct { 45521 Fbase sqlite3_file 45522 FpReal uintptr 45523 } 45524 45525 type devsym_file = devsym_file1 45526 45527 type DevsymGlobal = struct { 45528 FpVfs uintptr 45529 FiDeviceChar int32 45530 FiSectorSize int32 45531 FnWriteCrash int32 45532 } 45533 45534 var g1 = DevsymGlobal{FiSectorSize: 512} 45535 45536 func devsymClose(tls *libc.TLS, pFile uintptr) int32 { 45537 var p uintptr = pFile 45538 sqlite3.Xsqlite3OsClose(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45539 return SQLITE_OK 45540 } 45541 45542 func devsymRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45543 var p uintptr = pFile 45544 return sqlite3.Xsqlite3OsRead(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45545 } 45546 45547 func devsymWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45548 var p uintptr = pFile 45549 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45550 } 45551 45552 func devsymTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 45553 var p uintptr = pFile 45554 return sqlite3.Xsqlite3OsTruncate(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, size) 45555 } 45556 45557 func devsymSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 45558 var p uintptr = pFile 45559 return sqlite3.Xsqlite3OsSync(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags) 45560 } 45561 45562 func devsymFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 45563 var p uintptr = pFile 45564 return sqlite3.Xsqlite3OsFileSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pSize) 45565 } 45566 45567 func devsymLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 45568 var p uintptr = pFile 45569 return sqlite3.Xsqlite3OsLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 45570 } 45571 45572 func devsymUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 45573 var p uintptr = pFile 45574 return sqlite3.Xsqlite3OsUnlock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 45575 } 45576 45577 func devsymCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 45578 var p uintptr = pFile 45579 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pResOut) 45580 } 45581 45582 func devsymFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 45583 var p uintptr = pFile 45584 return sqlite3.Xsqlite3OsFileControl(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, op, pArg) 45585 } 45586 45587 func devsymSectorSize(tls *libc.TLS, pFile uintptr) int32 { 45588 return g1.FiSectorSize 45589 } 45590 45591 func devsymDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 45592 return g1.FiDeviceChar 45593 } 45594 45595 func devsymShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 45596 var p uintptr = pFile 45597 return (*struct { 45598 f func(*libc.TLS, uintptr, int32, int32, int32) int32 45599 })(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) 45600 } 45601 45602 func devsymShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 45603 var p uintptr = pFile 45604 return (*struct { 45605 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 45606 })(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) 45607 } 45608 45609 func devsymShmBarrier(tls *libc.TLS, pFile uintptr) { 45610 var p uintptr = pFile 45611 (*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) 45612 } 45613 45614 func devsymShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 45615 var p uintptr = pFile 45616 return (*struct { 45617 f func(*libc.TLS, uintptr, int32) int32 45618 })(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) 45619 } 45620 45621 func devsymOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45622 var rc int32 45623 var p uintptr = pFile 45624 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*8 45625 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45626 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45627 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&devsym_io_methods)) 45628 } 45629 return rc 45630 } 45631 45632 var devsym_io_methods = sqlite3_io_methods{ 45633 FiVersion: 2, 45634 FxClose: 0, 45635 FxRead: 0, 45636 FxWrite: 0, 45637 FxTruncate: 0, 45638 FxSync: 0, 45639 FxFileSize: 0, 45640 FxLock: 0, 45641 FxUnlock: 0, 45642 FxCheckReservedLock: 0, 45643 FxFileControl: 0, 45644 FxSectorSize: 0, 45645 FxDeviceCharacteristics: 0, 45646 FxShmMap: 0, 45647 FxShmLock: 0, 45648 FxShmBarrier: 0, 45649 FxShmUnmap: 0, 45650 } 45651 45652 func devsymDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 45653 return sqlite3.Xsqlite3OsDelete(tls, g1.FpVfs, zPath, dirSync) 45654 } 45655 45656 func devsymAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 45657 return sqlite3.Xsqlite3OsAccess(tls, g1.FpVfs, zPath, flags, pResOut) 45658 } 45659 45660 func devsymFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 45661 return sqlite3.Xsqlite3OsFullPathname(tls, g1.FpVfs, zPath, nOut, zOut) 45662 } 45663 45664 func devsymRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 45665 return sqlite3.Xsqlite3OsRandomness(tls, g1.FpVfs, nByte, zBufOut) 45666 } 45667 45668 func devsymSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 45669 return sqlite3.Xsqlite3OsSleep(tls, g1.FpVfs, nMicro) 45670 } 45671 45672 func devsymCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 45673 return (*struct { 45674 f func(*libc.TLS, uintptr, uintptr) int32 45675 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FxCurrentTime})).f(tls, g1.FpVfs, pTimeOut) 45676 } 45677 45678 func writecrashSectorSize(tls *libc.TLS, pFile uintptr) int32 { 45679 var p uintptr = pFile 45680 return sqlite3.Xsqlite3OsSectorSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45681 } 45682 45683 func writecrashDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 45684 var p uintptr = pFile 45685 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45686 } 45687 45688 func writecrashWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45689 var p uintptr = pFile 45690 if g1.FnWriteCrash > 0 { 45691 g1.FnWriteCrash-- 45692 if g1.FnWriteCrash == 0 { 45693 libc.Xabort(tls) 45694 } 45695 } 45696 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45697 } 45698 45699 func writecrashOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45700 var rc int32 45701 var p uintptr = pFile 45702 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*8 45703 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45704 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45705 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&writecrash_io_methods)) 45706 } 45707 return rc 45708 } 45709 45710 var writecrash_io_methods = sqlite3_io_methods{ 45711 FiVersion: 2, 45712 FxClose: 0, 45713 FxRead: 0, 45714 FxWrite: 0, 45715 FxTruncate: 0, 45716 FxSync: 0, 45717 FxFileSize: 0, 45718 FxLock: 0, 45719 FxUnlock: 0, 45720 FxCheckReservedLock: 0, 45721 FxFileControl: 0, 45722 FxSectorSize: 0, 45723 FxDeviceCharacteristics: 0, 45724 FxShmMap: 0, 45725 FxShmLock: 0, 45726 FxShmBarrier: 0, 45727 FxShmUnmap: 0, 45728 } 45729 45730 var devsym_vfs = sqlite3_vfs{ 45731 FiVersion: 2, 45732 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45733 FmxPathname: DEVSYM_MAX_PATHNAME, 45734 FzName: ts + 30667, 45735 FxOpen: 0, 45736 FxDelete: 0, 45737 FxAccess: 0, 45738 FxFullPathname: 0, 45739 FxRandomness: 0, 45740 FxSleep: 0, 45741 FxCurrentTime: 0, 45742 } 45743 45744 var writecrash_vfs = sqlite3_vfs{ 45745 FiVersion: 2, 45746 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45747 FmxPathname: DEVSYM_MAX_PATHNAME, 45748 FzName: ts + 30674, 45749 FxOpen: 0, 45750 FxDelete: 0, 45751 FxAccess: 0, 45752 FxFullPathname: 0, 45753 FxRandomness: 0, 45754 FxSleep: 0, 45755 FxCurrentTime: 0, 45756 } 45757 45758 func devsym_register(tls *libc.TLS, iDeviceChar int32, iSectorSize int32) { 45759 if g1.FpVfs == uintptr(0) { 45760 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45761 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45762 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45763 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45764 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45765 } 45766 if iDeviceChar >= 0 { 45767 g1.FiDeviceChar = iDeviceChar 45768 } else { 45769 g1.FiDeviceChar = 0 45770 } 45771 if iSectorSize >= 0 { 45772 g1.FiSectorSize = iSectorSize 45773 } else { 45774 g1.FiSectorSize = 512 45775 } 45776 } 45777 45778 func devsym_unregister(tls *libc.TLS) { 45779 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&devsym_vfs))) 45780 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&writecrash_vfs))) 45781 g1.FpVfs = uintptr(0) 45782 g1.FiDeviceChar = 0 45783 g1.FiSectorSize = 0 45784 } 45785 45786 func devsym_crash_on_write(tls *libc.TLS, nWrite int32) { 45787 if g1.FpVfs == uintptr(0) { 45788 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45789 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45790 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45791 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45792 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45793 } 45794 g1.FnWriteCrash = nWrite 45795 } 45796 45797 type Tcl_StatBuf = stat 45798 45799 type stat64 = struct { 45800 Fst_dev uint64 45801 F__pad1 uint32 45802 F__st_ino uint32 45803 Fst_mode uint32 45804 Fst_nlink uint32 45805 Fst_uid uint32 45806 Fst_gid uint32 45807 Fst_rdev uint64 45808 F__pad2 uint32 45809 Fst_size int64 45810 Fst_blksize int32 45811 Fst_blocks int64 45812 Fst_atim struct { 45813 Ftv_sec int32 45814 Ftv_nsec int32 45815 } 45816 Fst_mtim struct { 45817 Ftv_sec int32 45818 Ftv_nsec int32 45819 } 45820 Fst_ctim struct { 45821 Ftv_sec int32 45822 Ftv_nsec int32 45823 } 45824 Fst_ino uint64 45825 } 45826 45827 type statx_timestamp = struct { 45828 Ftv_sec int64 45829 Ftv_nsec uint32 45830 F__reserved int32 45831 } 45832 45833 type statx = struct { 45834 Fstx_mask uint32 45835 Fstx_blksize uint32 45836 Fstx_attributes uint64 45837 Fstx_nlink uint32 45838 Fstx_uid uint32 45839 Fstx_gid uint32 45840 Fstx_mode uint16 45841 F__spare0 [1]uint16 45842 Fstx_ino uint64 45843 Fstx_size uint64 45844 Fstx_blocks uint64 45845 Fstx_attributes_mask uint64 45846 Fstx_atime struct { 45847 Ftv_sec int64 45848 Ftv_nsec uint32 45849 F__reserved int32 45850 } 45851 Fstx_btime struct { 45852 Ftv_sec int64 45853 Ftv_nsec uint32 45854 F__reserved int32 45855 } 45856 Fstx_ctime struct { 45857 Ftv_sec int64 45858 Ftv_nsec uint32 45859 F__reserved int32 45860 } 45861 Fstx_mtime struct { 45862 Ftv_sec int64 45863 Ftv_nsec uint32 45864 F__reserved int32 45865 } 45866 Fstx_rdev_major uint32 45867 Fstx_rdev_minor uint32 45868 Fstx_dev_major uint32 45869 Fstx_dev_minor uint32 45870 Fstx_mnt_id uint64 45871 F__spare2 uint64 45872 F__spare3 [12]uint64 45873 } 45874 45875 type flock64 = struct { 45876 Fl_type int16 45877 Fl_whence int16 45878 Fl_start int64 45879 Fl_len int64 45880 Fl_pid int32 45881 } 45882 45883 type iovec = struct { 45884 Fiov_base uintptr 45885 Fiov_len size_t 45886 } 45887 45888 type f_owner_ex = struct { 45889 Ftype uint32 45890 Fpid int32 45891 } 45892 45893 type file_handle = struct { 45894 F__ccgo_pad1 [0]uint32 45895 Fhandle_bytes uint32 45896 Fhandle_type int32 45897 } 45898 45899 type dirent64 = struct { 45900 Fd_ino uint64 45901 Fd_off int64 45902 Fd_reclen uint16 45903 Fd_type uint8 45904 Fd_name [256]int8 45905 F__ccgo_pad1 [1]byte 45906 } 45907 45908 type fs_vtab1 = struct { 45909 Fbase sqlite3_vtab 45910 Fdb uintptr 45911 FzDb uintptr 45912 FzTbl uintptr 45913 } 45914 45915 type fs_vtab = fs_vtab1 45916 type fs_cursor1 = struct { 45917 Fbase sqlite3_vtab_cursor 45918 FpStmt uintptr 45919 FzBuf uintptr 45920 FnBuf int32 45921 FnAlloc int32 45922 } 45923 45924 type fs_cursor = fs_cursor1 45925 45926 type FsdirVtab1 = struct{ Fbase sqlite3_vtab } 45927 45928 type FsdirVtab = FsdirVtab1 45929 type FsdirCsr1 = struct { 45930 Fbase sqlite3_vtab_cursor 45931 FzDir uintptr 45932 FpDir uintptr 45933 FiRowid sqlite3_int64 45934 FpEntry uintptr 45935 } 45936 45937 type FsdirCsr = FsdirCsr1 45938 45939 func fsdirConnect1(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45940 var pTab uintptr 45941 45942 if argc != 3 { 45943 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 45944 return SQLITE_ERROR 45945 } 45946 45947 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FsdirVtab{}))) 45948 if !(pTab != 0) { 45949 return SQLITE_NOMEM 45950 } 45951 libc.Xmemset(tls, pTab, 0, uint32(unsafe.Sizeof(FsdirVtab{}))) 45952 45953 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 45954 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30685) 45955 45956 return SQLITE_OK 45957 } 45958 45959 func fsdirDisconnect1(tls *libc.TLS, pVtab uintptr) int32 { 45960 sqlite3.Xsqlite3_free(tls, pVtab) 45961 return SQLITE_OK 45962 } 45963 45964 func fsdirBestIndex1(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45965 var ii int32 45966 45967 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 45968 45969 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45970 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45971 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 { 45972 var pUsage uintptr 45973 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45974 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 45975 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 45976 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 45977 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 45978 break 45979 } 45980 } 45981 45982 return SQLITE_OK 45983 } 45984 45985 func fsdirOpen1(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45986 var pCur uintptr 45987 45988 pCur = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(FsdirCsr{}))+uint32(256))) 45989 if pCur == uintptr(0) { 45990 return SQLITE_NOMEM 45991 } 45992 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(FsdirCsr{}))) 45993 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45994 return SQLITE_OK 45995 } 45996 45997 func fsdirClose1(tls *libc.TLS, cur uintptr) int32 { 45998 var pCur uintptr = cur 45999 if (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir != 0 { 46000 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir) 46001 } 46002 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FzDir) 46003 sqlite3.Xsqlite3_free(tls, pCur) 46004 return SQLITE_OK 46005 } 46006 46007 func fsdirNext1(tls *libc.TLS, cur uintptr) int32 { 46008 var pCsr uintptr = cur 46009 46010 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 46011 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry = libc.Xreaddir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46012 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry == uintptr(0) { 46013 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46014 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 46015 } 46016 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid++ 46017 } 46018 46019 return SQLITE_OK 46020 } 46021 46022 func fsdirFilter1(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46023 var pCsr uintptr = pVtabCursor 46024 var zDir uintptr 46025 var nDir int32 46026 46027 if idxNum != 1 || argc != 1 { 46028 return SQLITE_ERROR 46029 } 46030 46031 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 46032 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 46033 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 46034 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46035 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 46036 } 46037 46038 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46039 nDir = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46040 (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir = sqlite3.Xsqlite3_malloc(tls, nDir+1) 46041 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir == uintptr(0) { 46042 return SQLITE_NOMEM 46043 } 46044 libc.Xmemcpy(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, zDir, uint32(nDir+1)) 46045 46046 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = libc.Xopendir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 46047 return fsdirNext1(tls, pVtabCursor) 46048 } 46049 46050 func fsdirEof1(tls *libc.TLS, cur uintptr) int32 { 46051 var pCsr uintptr = cur 46052 return libc.Bool32((*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir == uintptr(0)) 46053 } 46054 46055 func fsdirColumn1(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46056 var pCsr uintptr = cur 46057 switch i { 46058 case 0: 46059 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, -1, uintptr(0)) 46060 break 46061 46062 case 1: 46063 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry+19, -1, libc.UintptrFromInt32(-1)) 46064 break 46065 46066 default: 46067 } 46068 46069 return SQLITE_OK 46070 } 46071 46072 func fsdirRowid1(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46073 var pCsr uintptr = cur 46074 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid 46075 return SQLITE_OK 46076 } 46077 46078 type FstreeVtab1 = struct { 46079 Fbase sqlite3_vtab 46080 Fdb uintptr 46081 } 46082 46083 type FstreeVtab = FstreeVtab1 46084 type FstreeCsr1 = struct { 46085 Fbase sqlite3_vtab_cursor 46086 FpStmt uintptr 46087 Ffd int32 46088 } 46089 46090 type FstreeCsr = FstreeCsr1 46091 46092 func fstreeConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46093 var pTab uintptr 46094 46095 if argc != 3 { 46096 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46097 return SQLITE_ERROR 46098 } 46099 46100 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeVtab{}))) 46101 if !(pTab != 0) { 46102 return SQLITE_NOMEM 46103 } 46104 libc.Xmemset(tls, pTab, 0, uint32(unsafe.Sizeof(FstreeVtab{}))) 46105 (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb = db 46106 46107 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 46108 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30714) 46109 46110 return SQLITE_OK 46111 } 46112 46113 func fstreeDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 46114 sqlite3.Xsqlite3_free(tls, pVtab) 46115 return SQLITE_OK 46116 } 46117 46118 func fstreeBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46119 var ii int32 46120 46121 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46122 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46123 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 || 46124 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE || 46125 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 46126 var pUsage uintptr 46127 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46128 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) 46129 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46130 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100000.0 46131 return SQLITE_OK 46132 } 46133 } 46134 46135 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 46136 return SQLITE_OK 46137 } 46138 46139 func fstreeOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46140 var pCur uintptr 46141 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeCsr{}))) 46142 if pCur == uintptr(0) { 46143 return SQLITE_NOMEM 46144 } 46145 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(FstreeCsr{}))) 46146 (*FstreeCsr)(unsafe.Pointer(pCur)).Ffd = -1 46147 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46148 return SQLITE_OK 46149 } 46150 46151 func fstreeCloseFd(tls *libc.TLS, pCsr uintptr) { 46152 if (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd >= 0 { 46153 libc.Xclose(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd) 46154 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = -1 46155 } 46156 } 46157 46158 func fstreeClose(tls *libc.TLS, cur uintptr) int32 { 46159 var pCsr uintptr = cur 46160 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46161 fstreeCloseFd(tls, pCsr) 46162 sqlite3.Xsqlite3_free(tls, pCsr) 46163 return SQLITE_OK 46164 } 46165 46166 func fstreeNext(tls *libc.TLS, cur uintptr) int32 { 46167 var pCsr uintptr = cur 46168 var rc int32 46169 46170 fstreeCloseFd(tls, pCsr) 46171 rc = sqlite3.Xsqlite3_step(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46172 if rc != SQLITE_ROW { 46173 rc = sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46174 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46175 } else { 46176 rc = SQLITE_OK 46177 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = libc.Xopen(tls, sqlite3.Xsqlite3_column_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0), O_RDONLY, 0) 46178 } 46179 46180 return rc 46181 } 46182 46183 func fstreeFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46184 bp := tls.Alloc(2) 46185 defer tls.Free(2) 46186 46187 var pCsr uintptr = pVtabCursor 46188 var pTab uintptr = (*FstreeCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 46189 var rc int32 46190 var zSql uintptr = ts + 30750 46191 var zRoot uintptr 46192 var nRoot int32 46193 var zPrefix uintptr 46194 var nPrefix int32 46195 var zDir uintptr 46196 var nDir int32 46197 *(*[2]int8)(unsafe.Pointer(bp)) = [2]int8{int8(0), int8(0)} 46198 46199 zRoot = ts + 30982 46200 nRoot = 1 46201 zPrefix = ts + 584 46202 nPrefix = 0 46203 46204 zDir = zRoot 46205 nDir = nRoot 46206 46207 fstreeCloseFd(tls, pCsr) 46208 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46209 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46210 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+4, uintptr(0)) 46211 if rc != SQLITE_OK { 46212 return rc 46213 } 46214 46215 if idxNum != 0 { 46216 var zQuery uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46217 switch idxNum { 46218 case SQLITE_INDEX_CONSTRAINT_GLOB: 46219 *(*int8)(unsafe.Pointer(bp)) = int8('*') 46220 *(*int8)(unsafe.Pointer(bp + 1)) = int8('?') 46221 break 46222 fallthrough 46223 case SQLITE_INDEX_CONSTRAINT_LIKE: 46224 *(*int8)(unsafe.Pointer(bp)) = int8('_') 46225 *(*int8)(unsafe.Pointer(bp + 1)) = int8('%') 46226 break 46227 } 46228 46229 if sqlite3.Xsqlite3_strnicmp(tls, zQuery, zPrefix, nPrefix) == 0 { 46230 var i int32 46231 for i = nPrefix; *(*int8)(unsafe.Pointer(zQuery + uintptr(i))) != 0; i++ { 46232 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))) { 46233 break 46234 } 46235 if int32(*(*int8)(unsafe.Pointer(zQuery + uintptr(i)))) == '/' { 46236 nDir = i 46237 } 46238 } 46239 zDir = zQuery 46240 } 46241 } 46242 if nDir == 0 { 46243 nDir = 1 46244 } 46245 46246 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 1, zDir, nDir, libc.UintptrFromInt32(-1)) 46247 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 2, zRoot, nRoot, libc.UintptrFromInt32(-1)) 46248 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 3, zPrefix, nPrefix, libc.UintptrFromInt32(-1)) 46249 46250 return fstreeNext(tls, pVtabCursor) 46251 } 46252 46253 func fstreeEof(tls *libc.TLS, cur uintptr) int32 { 46254 var pCsr uintptr = cur 46255 return libc.Bool32((*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 46256 } 46257 46258 func fstreeColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46259 bp := tls.Alloc(96) 46260 defer tls.Free(96) 46261 46262 var pCsr uintptr = cur 46263 if i == 0 { 46264 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0)) 46265 } else { 46266 libc.Xfstat(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, bp) 46267 46268 if (*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0170000) == uint32(0100000) { 46269 if i == 1 { 46270 sqlite3.Xsqlite3_result_int64(tls, ctx, (*stat)(unsafe.Pointer(bp)).Fst_size) 46271 } else { 46272 var nRead int32 46273 var aBuf uintptr = sqlite3.Xsqlite3_malloc(tls, int32((*stat)(unsafe.Pointer(bp)).Fst_mode+uint32(1))) 46274 if !(aBuf != 0) { 46275 return SQLITE_NOMEM 46276 } 46277 nRead = libc.Xread(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, aBuf, (*stat)(unsafe.Pointer(bp)).Fst_mode) 46278 if uint32(nRead) != (*stat)(unsafe.Pointer(bp)).Fst_mode { 46279 return SQLITE_IOERR 46280 } 46281 sqlite3.Xsqlite3_result_blob(tls, ctx, aBuf, nRead, libc.UintptrFromInt32(-1)) 46282 sqlite3.Xsqlite3_free(tls, aBuf) 46283 } 46284 } 46285 } 46286 46287 return SQLITE_OK 46288 } 46289 46290 func fstreeRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46291 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 46292 return SQLITE_OK 46293 } 46294 46295 func fsConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46296 var pVtab uintptr 46297 var nByte int32 46298 var zTbl uintptr 46299 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*4)) 46300 46301 if argc != 4 { 46302 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46303 return SQLITE_ERROR 46304 } 46305 zTbl = *(*uintptr)(unsafe.Pointer(argv + 3*4)) 46306 46307 nByte = int32(uint32(unsafe.Sizeof(fs_vtab{})) + uint32(int32(libc.Xstrlen(tls, zTbl))) + uint32(1) + uint32(int32(libc.Xstrlen(tls, zDb))) + uint32(1)) 46308 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(nByte)) 46309 if !(pVtab != 0) { 46310 return SQLITE_NOMEM 46311 } 46312 46313 (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl = pVtab + 1*24 46314 (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb = (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl + uintptr(libc.Xstrlen(tls, zTbl)+size_t(1)) 46315 (*fs_vtab)(unsafe.Pointer(pVtab)).Fdb = db 46316 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl, zTbl, libc.Xstrlen(tls, zTbl)) 46317 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb, zDb, libc.Xstrlen(tls, zDb)) 46318 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 46319 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30984) 46320 46321 return SQLITE_OK 46322 } 46323 46324 func fsDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 46325 sqlite3.Xsqlite3_free(tls, pVtab) 46326 return SQLITE_OK 46327 } 46328 46329 func fsOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46330 var pCur uintptr 46331 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(fs_cursor{}))) 46332 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46333 return SQLITE_OK 46334 } 46335 46336 func fsClose(tls *libc.TLS, cur uintptr) int32 { 46337 var pCur uintptr = cur 46338 sqlite3.Xsqlite3_finalize(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 46339 sqlite3.Xsqlite3_free(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf) 46340 sqlite3.Xsqlite3_free(tls, pCur) 46341 return SQLITE_OK 46342 } 46343 46344 func fsNext(tls *libc.TLS, cur uintptr) int32 { 46345 var pCur uintptr = cur 46346 var rc int32 46347 46348 rc = sqlite3.Xsqlite3_step(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 46349 if rc == SQLITE_ROW || rc == SQLITE_DONE { 46350 rc = SQLITE_OK 46351 } 46352 46353 return rc 46354 } 46355 46356 func fsFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46357 bp := tls.Alloc(32) 46358 defer tls.Free(32) 46359 46360 var rc int32 46361 var pCur uintptr = pVtabCursor 46362 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 46363 46364 if idxNum == 1 { 46365 var zStmt uintptr = sqlite3.Xsqlite3_mprintf(tls, 46366 ts+31021, libc.VaList(bp, (*fs_vtab)(unsafe.Pointer(p)).FzDb, (*fs_vtab)(unsafe.Pointer(p)).FzTbl)) 46367 if !(zStmt != 0) { 46368 return SQLITE_NOMEM 46369 } 46370 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+4, uintptr(0)) 46371 sqlite3.Xsqlite3_free(tls, zStmt) 46372 if rc == SQLITE_OK { 46373 sqlite3.Xsqlite3_bind_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1, *(*uintptr)(unsafe.Pointer(argv))) 46374 } 46375 } else { 46376 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)) 46377 if !(zStmt != 0) { 46378 return SQLITE_NOMEM 46379 } 46380 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+4, uintptr(0)) 46381 sqlite3.Xsqlite3_free(tls, zStmt) 46382 } 46383 46384 if rc == SQLITE_OK { 46385 rc = fsNext(tls, pVtabCursor) 46386 } 46387 return rc 46388 } 46389 46390 func fsColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46391 bp := tls.Alloc(96) 46392 defer tls.Free(96) 46393 46394 var pCur uintptr = cur 46395 46396 if i == 0 { 46397 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0)) 46398 } else { 46399 var zFile uintptr = sqlite3.Xsqlite3_column_text(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1) 46400 46401 var fd int32 46402 var n int32 46403 fd = libc.Xopen(tls, zFile, O_RDONLY, 0) 46404 if fd < 0 { 46405 return SQLITE_IOERR 46406 } 46407 libc.Xfstat(tls, fd, bp) 46408 46409 if (*stat)(unsafe.Pointer(bp)).Fst_size >= int64((*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc) { 46410 var nNew sqlite3_int64 = (*stat)(unsafe.Pointer(bp)).Fst_size * int64(2) 46411 var zNew uintptr 46412 if nNew < int64(1024) { 46413 nNew = int64(1024) 46414 } 46415 46416 zNew = sqlite3.Xsqlite3Realloc(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64(nNew)) 46417 if zNew == uintptr(0) { 46418 libc.Xclose(tls, fd) 46419 return SQLITE_NOMEM 46420 } 46421 (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf = zNew 46422 (*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc = int32(nNew) 46423 } 46424 46425 n = libc.Xread(tls, fd, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint32((*stat)(unsafe.Pointer(bp)).Fst_size)) 46426 libc.Xclose(tls, fd) 46427 if int64(n) != (*stat)(unsafe.Pointer(bp)).Fst_size { 46428 return SQLITE_ERROR 46429 } 46430 (*fs_cursor)(unsafe.Pointer(pCur)).FnBuf = int32((*stat)(unsafe.Pointer(bp)).Fst_size) 46431 *(*int8)(unsafe.Pointer((*fs_cursor)(unsafe.Pointer(pCur)).FzBuf + uintptr((*fs_cursor)(unsafe.Pointer(pCur)).FnBuf))) = int8(0) 46432 46433 sqlite3.Xsqlite3_result_text(tls, ctx, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 46434 } 46435 return SQLITE_OK 46436 } 46437 46438 func fsRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46439 var pCur uintptr = cur 46440 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0) 46441 return SQLITE_OK 46442 } 46443 46444 func fsEof(tls *libc.TLS, cur uintptr) int32 { 46445 var pCur uintptr = cur 46446 return libc.Bool32(sqlite3.Xsqlite3_data_count(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) == 0) 46447 } 46448 46449 func fsBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46450 var ii int32 46451 46452 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46453 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46454 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn < 0 && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 46455 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 46456 var pUsage uintptr 46457 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46458 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 46459 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46460 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 46461 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 46462 break 46463 } 46464 } 46465 46466 return SQLITE_OK 46467 } 46468 46469 var fsModule = sqlite3_module{ 46470 FxCreate: 0, 46471 FxConnect: 0, 46472 FxBestIndex: 0, 46473 FxDisconnect: 0, 46474 FxDestroy: 0, 46475 FxOpen: 0, 46476 FxClose: 0, 46477 FxFilter: 0, 46478 FxNext: 0, 46479 FxEof: 0, 46480 FxColumn: 0, 46481 FxRowid: 0, 46482 } 46483 46484 var fsdirModule = sqlite3_module{ 46485 FxCreate: 0, 46486 FxConnect: 0, 46487 FxBestIndex: 0, 46488 FxDisconnect: 0, 46489 FxDestroy: 0, 46490 FxOpen: 0, 46491 FxClose: 0, 46492 FxFilter: 0, 46493 FxNext: 0, 46494 FxEof: 0, 46495 FxColumn: 0, 46496 FxRowid: 0, 46497 } 46498 46499 var fstreeModule = sqlite3_module{ 46500 FxCreate: 0, 46501 FxConnect: 0, 46502 FxBestIndex: 0, 46503 FxDisconnect: 0, 46504 FxDestroy: 0, 46505 FxOpen: 0, 46506 FxClose: 0, 46507 FxFilter: 0, 46508 FxNext: 0, 46509 FxEof: 0, 46510 FxColumn: 0, 46511 FxRowid: 0, 46512 } 46513 46514 func register_fs_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46515 bp := tls.Alloc(4) 46516 defer tls.Free(4) 46517 46518 if objc != 2 { 46519 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 46520 return TCL_ERROR 46521 } 46522 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 46523 return TCL_ERROR 46524 } 46525 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31055, uintptr(unsafe.Pointer(&fsModule)), interp) 46526 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+5325, uintptr(unsafe.Pointer(&fsdirModule)), uintptr(0)) 46527 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31058, uintptr(unsafe.Pointer(&fstreeModule)), uintptr(0)) 46528 return TCL_OK 46529 } 46530 46531 func Sqlitetestfs_Init(tls *libc.TLS, interp uintptr) int32 { 46532 var i int32 46533 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd6))/uint32(unsafe.Sizeof(struct { 46534 FzName uintptr 46535 FxProc uintptr 46536 FclientData uintptr 46537 }{})); i++ { 46538 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd6[i].FzName, 46539 aObjCmd6[i].FxProc, aObjCmd6[i].FclientData, uintptr(0)) 46540 } 46541 return TCL_OK 46542 } 46543 46544 var aObjCmd6 = [1]struct { 46545 FzName uintptr 46546 FxProc uintptr 46547 FclientData uintptr 46548 }{ 46549 {FzName: ts + 31065, FxProc: 0}, 46550 } 46551 46552 type fd_set2 = struct{ F__fds_bits [32]int32 } 46553 46554 func testContextMalloc(tls *libc.TLS, context uintptr, nByte int32) uintptr { 46555 var z uintptr = sqlite3.Xsqlite3_malloc(tls, nByte) 46556 if !(z != 0) && nByte > 0 { 46557 sqlite3.Xsqlite3_result_error_nomem(tls, context) 46558 } 46559 return z 46560 } 46561 46562 func randStr(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46563 bp := tls.Alloc(1004) 46564 defer tls.Free(1004) 46565 46566 var iMin int32 46567 var iMax int32 46568 var n int32 46569 46570 var i int32 46571 46572 iMin = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46573 if iMin < 0 { 46574 iMin = 0 46575 } 46576 if uint32(iMin) >= uint32(unsafe.Sizeof([1000]uint8{})) { 46577 iMin = int32(uint32(unsafe.Sizeof([1000]uint8{})) - uint32(1)) 46578 } 46579 iMax = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 46580 if iMax < iMin { 46581 iMax = iMin 46582 } 46583 if uint32(iMax) >= uint32(unsafe.Sizeof([1000]uint8{})) { 46584 iMax = int32(uint32(unsafe.Sizeof([1000]uint8{})) - uint32(1)) 46585 } 46586 n = iMin 46587 if iMax > iMin { 46588 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 46589 *(*int32)(unsafe.Pointer(bp)) &= 0x7fffffff 46590 n = n + *(*int32)(unsafe.Pointer(bp))%(iMax+1-iMin) 46591 } 46592 46593 sqlite3.Xsqlite3_randomness(tls, n, bp+4) 46594 for i = 0; i < n; i++ { 46595 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))) = zSrc[uint32(*(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))))%(uint32(unsafe.Sizeof(zSrc))-uint32(1))] 46596 } 46597 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(n))) = uint8(0) 46598 sqlite3.Xsqlite3_result_text(tls, context, bp+4, n, libc.UintptrFromInt32(-1)) 46599 } 46600 46601 var zSrc = *(*[79]uint8)(unsafe.Pointer(ts + 31084)) 46602 46603 var test_destructor_count_var int32 = 0 46604 46605 func destructor(tls *libc.TLS, p uintptr) { 46606 var zVal uintptr = p 46607 46608 zVal-- 46609 sqlite3.Xsqlite3_free(tls, zVal) 46610 test_destructor_count_var-- 46611 } 46612 46613 func test_destructor(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46614 var zVal uintptr 46615 var len int32 46616 46617 test_destructor_count_var++ 46618 46619 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 46620 return 46621 } 46622 len = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46623 zVal = testContextMalloc(tls, pCtx, len+3) 46624 if !(zVal != 0) { 46625 return 46626 } 46627 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 46628 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 46629 zVal++ 46630 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), uint32(len)) 46631 sqlite3.Xsqlite3_result_text(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 46632 } 46633 46634 func test_destructor16(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46635 var zVal uintptr 46636 var len int32 46637 46638 test_destructor_count_var++ 46639 46640 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 46641 return 46642 } 46643 len = sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46644 zVal = testContextMalloc(tls, pCtx, len+3) 46645 if !(zVal != 0) { 46646 return 46647 } 46648 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 46649 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 46650 zVal++ 46651 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))), uint32(len)) 46652 sqlite3.Xsqlite3_result_text16(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 46653 } 46654 46655 func test_destructor_count(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46656 sqlite3.Xsqlite3_result_int(tls, pCtx, test_destructor_count_var) 46657 } 46658 46659 func test_agg_errmsg16_step(tls *libc.TLS, a uintptr, b int32, c uintptr) { 46660 } 46661 46662 func test_agg_errmsg16_final(tls *libc.TLS, ctx uintptr) { 46663 var z uintptr 46664 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 46665 sqlite3.Xsqlite3_aggregate_context(tls, ctx, 2048) 46666 z = sqlite3.Xsqlite3_errmsg16(tls, db) 46667 sqlite3.Xsqlite3_result_text16(tls, ctx, z, -1, libc.UintptrFromInt32(-1)) 46668 } 46669 46670 func free_test_auxdata(tls *libc.TLS, p uintptr) { 46671 sqlite3.Xsqlite3_free(tls, p) 46672 } 46673 46674 func test_auxdata(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46675 var i int32 46676 var zRet uintptr = testContextMalloc(tls, pCtx, nArg*2) 46677 if !(zRet != 0) { 46678 return 46679 } 46680 libc.Xmemset(tls, zRet, 0, uint32(nArg*2)) 46681 for i = 0; i < nArg; i++ { 46682 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 46683 if z != 0 { 46684 var n int32 46685 var zAux uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, i) 46686 if zAux != 0 { 46687 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('1') 46688 46689 } else { 46690 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('0') 46691 } 46692 n = int32(libc.Xstrlen(tls, z)) + 1 46693 zAux = testContextMalloc(tls, pCtx, n) 46694 if zAux != 0 { 46695 libc.Xmemcpy(tls, zAux, z, uint32(n)) 46696 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, i, zAux, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 46697 } 46698 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2+1))) = int8(' ') 46699 } 46700 } 46701 sqlite3.Xsqlite3_result_text(tls, pCtx, zRet, 2*nArg-1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 46702 } 46703 46704 func test_error(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46705 sqlite3.Xsqlite3_result_error(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1) 46706 if nArg == 2 { 46707 sqlite3.Xsqlite3_result_error_code(tls, pCtx, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)))) 46708 } 46709 } 46710 46711 func counterFunc(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46712 var pCounter uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, 0) 46713 if pCounter == uintptr(0) { 46714 pCounter = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(int32(0)))) 46715 if pCounter == uintptr(0) { 46716 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46717 return 46718 } 46719 *(*int32)(unsafe.Pointer(pCounter)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46720 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, 0, pCounter, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46721 } else { 46722 *(*int32)(unsafe.Pointer(pCounter))++ 46723 } 46724 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(pCounter))) 46725 } 46726 46727 func test_isolation(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46728 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46729 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46730 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46731 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46732 sqlite3.Xsqlite3_result_value(tls, pCtx, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 46733 } 46734 46735 func test_eval(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46736 bp := tls.Alloc(12) 46737 defer tls.Free(12) 46738 46739 var rc int32 46740 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, pCtx) 46741 var zSql uintptr 46742 46743 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46744 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 46745 if rc == SQLITE_OK { 46746 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46747 if rc == SQLITE_ROW { 46748 sqlite3.Xsqlite3_result_value(tls, pCtx, sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0)) 46749 } 46750 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46751 } 46752 if rc != 0 { 46753 var zErr uintptr 46754 46755 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+31163, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 46756 sqlite3.Xsqlite3_result_text(tls, pCtx, zErr, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46757 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 46758 } 46759 } 46760 46761 func testHexChar(tls *libc.TLS, c int8) int32 { 46762 if int32(c) >= '0' && int32(c) <= '9' { 46763 return int32(c) - '0' 46764 } else if int32(c) >= 'a' && int32(c) <= 'f' { 46765 return int32(c) - 'a' + 10 46766 } else if int32(c) >= 'A' && int32(c) <= 'F' { 46767 return int32(c) - 'A' + 10 46768 } 46769 return 0 46770 } 46771 46772 func testHexToBin(tls *libc.TLS, zIn uintptr, zOut uintptr) { 46773 for *(*int8)(unsafe.Pointer(zIn)) != 0 && *(*int8)(unsafe.Pointer(zIn + 1)) != 0 { 46774 *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zOut, 1))) = int8(testHexChar(tls, *(*int8)(unsafe.Pointer(zIn)))<<4 + testHexChar(tls, *(*int8)(unsafe.Pointer(zIn + 1)))) 46775 zIn += uintptr(2) 46776 } 46777 } 46778 46779 func testHexToUtf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46780 var n int32 46781 var zIn uintptr 46782 var zOut uintptr 46783 46784 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46785 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46786 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46787 if zOut == uintptr(0) { 46788 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46789 } else { 46790 testHexToBin(tls, zIn, zOut) 46791 sqlite3.Xsqlite3_result_text16be(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46792 } 46793 } 46794 46795 func testHexToUtf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46796 var n int32 46797 var zIn uintptr 46798 var zOut uintptr 46799 46800 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46801 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46802 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46803 if zOut == uintptr(0) { 46804 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46805 } else { 46806 testHexToBin(tls, zIn, zOut) 46807 sqlite3.Xsqlite3_result_text(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46808 } 46809 } 46810 46811 func testHexToUtf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46812 var n int32 46813 var zIn uintptr 46814 var zOut uintptr 46815 46816 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46817 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46818 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 46819 if zOut == uintptr(0) { 46820 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46821 } else { 46822 testHexToBin(tls, zIn, zOut) 46823 sqlite3.Xsqlite3_result_text16le(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46824 } 46825 } 46826 46827 func real2hex(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46828 bp := tls.Alloc(28) 46829 defer tls.Free(28) 46830 46831 var i int32 46832 var bigEndian int32 46833 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(1) 46834 bigEndian = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(bp))) == 0) 46835 *(*float64)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 46836 for i = 0; i < 8; i++ { 46837 if bigEndian != 0 { 46838 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 46839 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 46840 } else { 46841 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 46842 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 46843 } 46844 } 46845 *(*int8)(unsafe.Pointer(bp + 8 + 16)) = int8(0) 46846 sqlite3.Xsqlite3_result_text(tls, context, bp+8, -1, libc.UintptrFromInt32(-1)) 46847 } 46848 46849 func test_extract(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46850 bp := tls.Alloc(56) 46851 defer tls.Free(56) 46852 46853 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 46854 var pRec uintptr 46855 var pEndHdr uintptr 46856 var pHdr uintptr 46857 var pBody uintptr 46858 46859 var iIdx int32 46860 var iCurrent int32 = 0 46861 46862 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 46863 iIdx = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 46864 46865 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp)) 46866 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp)))) 46867 46868 for iCurrent = 0; pHdr < pEndHdr && iCurrent <= iIdx; iCurrent++ { 46869 libc.Xmemset(tls, bp+8, 0, uint32(unsafe.Sizeof(Mem{}))) 46870 (*Mem)(unsafe.Pointer(bp + 8)).Fdb = db 46871 (*Mem)(unsafe.Pointer(bp + 8)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 46872 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+48)) 46873 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 48))), bp+8) 46874 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 48))))) 46875 46876 if iCurrent == iIdx { 46877 sqlite3.Xsqlite3_result_value(tls, context, bp+8) 46878 } 46879 46880 if (*Mem)(unsafe.Pointer(bp+8)).FszMalloc != 0 { 46881 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+8)).FzMalloc) 46882 } 46883 } 46884 } 46885 46886 func test_decode(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46887 bp := tls.Alloc(107) 46888 defer tls.Free(107) 46889 46890 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 46891 var pRec uintptr 46892 var pEndHdr uintptr 46893 var pHdr uintptr 46894 var pBody uintptr 46895 46896 var pRet uintptr 46897 46898 pRet = tcl.XTcl_NewObj(tls) 46899 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 46900 46901 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 46902 46903 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp+32)) 46904 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp + 32)))) 46905 for pHdr < pEndHdr { 46906 var pVal uintptr = uintptr(0) 46907 46908 libc.Xmemset(tls, bp+40, 0, uint32(unsafe.Sizeof(Mem{}))) 46909 (*Mem)(unsafe.Pointer(bp + 40)).Fdb = db 46910 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 46911 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+80)) 46912 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 80))), bp+40) 46913 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 80))))) 46914 46915 switch sqlite3.Xsqlite3_value_type(tls, bp+40) { 46916 case SQLITE_TEXT: 46917 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, bp+40), -1) 46918 break 46919 46920 case SQLITE_BLOB: 46921 { 46922 *(*[16]int8)(unsafe.Pointer(bp + 91)) = [16]int8{ 46923 int8('0'), int8('1'), int8('2'), int8('3'), int8('4'), int8('5'), int8('6'), int8('7'), 46924 int8('8'), int8('9'), int8('a'), int8('b'), int8('c'), int8('d'), int8('e'), int8('f'), 46925 } 46926 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, bp+40) 46927 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, bp+40) 46928 var i int32 46929 pVal = tcl.XTcl_NewStringObj(tls, ts+6334, -1) 46930 for i = 0; i < n; i++ { 46931 *(*int8)(unsafe.Pointer(bp + 88)) = *(*int8)(unsafe.Pointer(bp + 91 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))>>4&0x0F))) 46932 *(*int8)(unsafe.Pointer(bp + 88 + 1)) = *(*int8)(unsafe.Pointer(bp + 91 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))&0x0F))) 46933 *(*int8)(unsafe.Pointer(bp + 88 + 2)) = int8(0) 46934 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp, bp+88, 0)) 46935 } 46936 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp+16, ts+5624, 0)) 46937 break 46938 46939 } 46940 46941 case SQLITE_FLOAT: 46942 pVal = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, bp+40)) 46943 break 46944 46945 case SQLITE_INTEGER: 46946 pVal = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, bp+40)) 46947 break 46948 46949 case SQLITE_NULL: 46950 pVal = tcl.XTcl_NewStringObj(tls, ts+5846, -1) 46951 break 46952 46953 default: 46954 } 46955 46956 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, pVal) 46957 46958 if (*Mem)(unsafe.Pointer(bp+40)).FszMalloc != 0 { 46959 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+40)).FzMalloc) 46960 } 46961 } 46962 46963 sqlite3.Xsqlite3_result_text(tls, context, tcl.XTcl_GetString(tls, pRet), -1, libc.UintptrFromInt32(-1)) 46964 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 46965 var _objPtr uintptr = pRet 46966 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 46967 tcl.XTclFreeObj(tls, _objPtr) 46968 } 46969 } 46970 } 46971 46972 func test_zeroblob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46973 var nZero int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46974 sqlite3.Xsqlite3_result_zeroblob(tls, context, nZero) 46975 } 46976 46977 func test_getsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46978 sqlite3.Xsqlite3_result_int(tls, context, int32(sqlite3.Xsqlite3_value_subtype(tls, *(*uintptr)(unsafe.Pointer(argv))))) 46979 } 46980 46981 func test_frombind(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46982 var m sqlite3_uint64 = uint64(0) 46983 var i int32 46984 for i = 0; i < argc && i < 63; i++ { 46985 if sqlite3.Xsqlite3_value_frombind(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) != 0 { 46986 m = m | uint64(1)<<i 46987 } 46988 } 46989 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3_int64(m)) 46990 } 46991 46992 func test_setsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46993 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv))) 46994 sqlite3.Xsqlite3_result_subtype(tls, context, uint32(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))))) 46995 } 46996 46997 func registerTestFunctions(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 46998 var i int32 46999 47000 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aFuncs))/uint32(unsafe.Sizeof(struct { 47001 FzName uintptr 47002 FnArg int8 47003 F__ccgo_pad1 [3]byte 47004 FeTextRep uint32 47005 FxFunc uintptr 47006 }{})); i++ { 47007 sqlite3.Xsqlite3_create_function(tls, db, aFuncs[i].FzName, int32(aFuncs[i].FnArg), 47008 int32(aFuncs[i].FeTextRep), uintptr(0), aFuncs[i].FxFunc, uintptr(0), uintptr(0)) 47009 } 47010 47011 sqlite3.Xsqlite3_create_function(tls, db, ts+31211, 0, SQLITE_ANY, uintptr(0), uintptr(0), 47012 *(*uintptr)(unsafe.Pointer(&struct { 47013 f func(*libc.TLS, uintptr, int32, uintptr) 47014 }{test_agg_errmsg16_step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_agg_errmsg16_final}))) 47015 47016 return SQLITE_OK 47017 } 47018 47019 var aFuncs = [20]struct { 47020 FzName uintptr 47021 FnArg int8 47022 F__ccgo_pad1 [3]byte 47023 FeTextRep uint32 47024 FxFunc uintptr 47025 }{ 47026 {FzName: ts + 31229, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47027 {FzName: ts + 31237, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47028 {FzName: ts + 31253, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47029 {FzName: ts + 31271, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47030 {FzName: ts + 31286, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47031 {FzName: ts + 31301, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47032 {FzName: ts + 31313, FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47033 {FzName: ts + 31335, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47034 {FzName: ts + 31348, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47035 {FzName: ts + 31348, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47036 {FzName: ts + 31359, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47037 {FzName: ts + 31369, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47038 {FzName: ts + 31384, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47039 {FzName: ts + 31397, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47040 {FzName: ts + 31406, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47041 {FzName: ts + 31418, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47042 {FzName: ts + 31431, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8 | SQLITE_DETERMINISTIC), FxFunc: 0}, 47043 {FzName: ts + 31445, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47044 {FzName: ts + 31461, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47045 {FzName: ts + 31477, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47046 } 47047 47048 func autoinstall_test_funcs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47049 var rc int32 = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47050 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47051 }{registerTestFunctions}))) 47052 if rc == SQLITE_OK { 47053 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47054 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47055 }{Md5_Register}))) 47056 } 47057 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 47058 return TCL_OK 47059 } 47060 47061 func tStep(tls *libc.TLS, a uintptr, b int32, c uintptr) { 47062 } 47063 47064 func tFinal(tls *libc.TLS, a uintptr) { 47065 } 47066 47067 func abuse_create_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47068 bp := tls.Alloc(20) 47069 defer tls.Free(20) 47070 47071 var rc int32 47072 var mxArg int32 47073 47074 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0) { 47075 goto __1 47076 } 47077 return TCL_ERROR 47078 __1: 47079 ; 47080 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47081 f func(*libc.TLS, uintptr, int32, uintptr) 47082 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 47083 f func(*libc.TLS, uintptr, int32, uintptr) 47084 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 47085 if !(rc != SQLITE_MISUSE) { 47086 goto __2 47087 } 47088 goto abuse_err 47089 __2: 47090 ; 47091 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47092 f func(*libc.TLS, uintptr, int32, uintptr) 47093 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 47094 f func(*libc.TLS, uintptr, int32, uintptr) 47095 }{tStep})), uintptr(0)) 47096 if !(rc != SQLITE_MISUSE) { 47097 goto __3 47098 } 47099 goto abuse_err 47100 __3: 47101 ; 47102 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47103 f func(*libc.TLS, uintptr, int32, uintptr) 47104 }{tStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 47105 if !(rc != SQLITE_MISUSE) { 47106 goto __4 47107 } 47108 goto abuse_err 47109 __4: 47110 ; 47111 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}))) 47112 if !(rc != SQLITE_MISUSE) { 47113 goto __5 47114 } 47115 goto abuse_err 47116 __5: 47117 ; 47118 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47119 f func(*libc.TLS, uintptr, int32, uintptr) 47120 }{tStep})), uintptr(0)) 47121 if !(rc != SQLITE_MISUSE) { 47122 goto __6 47123 } 47124 goto abuse_err 47125 __6: 47126 ; 47127 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, -2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47128 f func(*libc.TLS, uintptr, int32, uintptr) 47129 }{tStep})), uintptr(0), uintptr(0)) 47130 if !(rc != SQLITE_MISUSE) { 47131 goto __7 47132 } 47133 goto abuse_err 47134 __7: 47135 ; 47136 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 128, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47137 f func(*libc.TLS, uintptr, int32, uintptr) 47138 }{tStep})), uintptr(0), uintptr(0)) 47139 if !(rc != SQLITE_MISUSE) { 47140 goto __8 47141 } 47142 goto abuse_err 47143 __8: 47144 ; 47145 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 47146 ts+31494, 47147 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47148 f func(*libc.TLS, uintptr, int32, uintptr) 47149 }{tStep})), uintptr(0), uintptr(0)) 47150 if !(rc != SQLITE_MISUSE) { 47151 goto __9 47152 } 47153 goto abuse_err 47154 __9: 47155 ; 47156 sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, 10000) 47157 mxArg = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, -1) 47158 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 47159 ts+31751, 47160 mxArg, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47161 f func(*libc.TLS, uintptr, int32, uintptr) 47162 }{tStep})), uintptr(0), uintptr(0)) 47163 if !(rc != SQLITE_OK) { 47164 goto __10 47165 } 47166 goto abuse_err 47167 __10: 47168 ; 47169 return TCL_OK 47170 47171 abuse_err: 47172 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32007, 47173 uintptr(0))) 47174 return TCL_ERROR 47175 } 47176 47177 func rankfunc(tls *libc.TLS, pCtx uintptr, nVal int32, apVal uintptr) { 47178 var aMatchinfo uintptr 47179 var nMatchinfo int32 47180 var nCol int32 47181 var nPhrase int32 47182 var iPhrase int32 47183 var score float64 47184 var nHitCount int32 47185 var nGlobalHitCount int32 47186 var weight float64 47187 var iCol int32 47188 47189 var aPhraseinfo uintptr 47190 nCol = 0 47191 nPhrase = 0 47192 score = 0.0 47193 47194 if !(nVal < 1) { 47195 goto __1 47196 } 47197 goto wrong_number_args 47198 __1: 47199 ; 47200 aMatchinfo = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal))) 47201 nMatchinfo = int32(uint32(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal)))) / uint32(unsafe.Sizeof(int32(0)))) 47202 if !(nMatchinfo >= 2) { 47203 goto __2 47204 } 47205 nPhrase = *(*int32)(unsafe.Pointer(aMatchinfo)) 47206 nCol = *(*int32)(unsafe.Pointer(aMatchinfo + 1*4)) 47207 __2: 47208 ; 47209 if !(nMatchinfo != 2+3*nCol*nPhrase) { 47210 goto __3 47211 } 47212 sqlite3.Xsqlite3_result_error(tls, pCtx, 47213 ts+32050, -1) 47214 return 47215 __3: 47216 ; 47217 if !(nVal != 1+nCol) { 47218 goto __4 47219 } 47220 goto wrong_number_args 47221 __4: 47222 ; 47223 iPhrase = 0 47224 __5: 47225 if !(iPhrase < nPhrase) { 47226 goto __7 47227 } 47228 47229 aPhraseinfo = aMatchinfo + uintptr(2+iPhrase*nCol*3)*4 47230 iCol = 0 47231 __8: 47232 if !(iCol < nCol) { 47233 goto __10 47234 } 47235 nHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol)*4)) 47236 nGlobalHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol+1)*4)) 47237 weight = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(iCol+1)*4))) 47238 if !(nHitCount > 0) { 47239 goto __11 47240 } 47241 score = score + float64(nHitCount)/float64(nGlobalHitCount)*weight 47242 __11: 47243 ; 47244 goto __9 47245 __9: 47246 iCol++ 47247 goto __8 47248 goto __10 47249 __10: 47250 ; 47251 goto __6 47252 __6: 47253 iPhrase++ 47254 goto __5 47255 goto __7 47256 __7: 47257 ; 47258 sqlite3.Xsqlite3_result_double(tls, pCtx, score) 47259 return 47260 47261 wrong_number_args: 47262 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+32099, -1) 47263 } 47264 47265 func install_fts3_rank_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47266 bp := tls.Alloc(4) 47267 defer tls.Free(4) 47268 47269 if objc != 2 { 47270 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 47271 return TCL_ERROR 47272 } 47273 47274 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 47275 return TCL_ERROR 47276 } 47277 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+32144, -1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47278 f func(*libc.TLS, uintptr, int32, uintptr) 47279 }{rankfunc})), uintptr(0), uintptr(0)) 47280 return TCL_OK 47281 } 47282 47283 func Sqlitetest_func_Init(tls *libc.TLS, interp uintptr) int32 { 47284 var i int32 47285 47286 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd7))/uint32(unsafe.Sizeof(struct { 47287 FzName uintptr 47288 FxProc uintptr 47289 }{})); i++ { 47290 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd7[i].FzName, aObjCmd7[i].FxProc, uintptr(0), uintptr(0)) 47291 } 47292 sqlite3.Xsqlite3_initialize(tls) 47293 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47294 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47295 }{registerTestFunctions}))) 47296 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47297 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47298 }{Md5_Register}))) 47299 return TCL_OK 47300 } 47301 47302 var aObjCmd7 = [3]struct { 47303 FzName uintptr 47304 FxProc uintptr 47305 }{ 47306 {FzName: ts + 32149, FxProc: 0}, 47307 {FzName: ts + 32176, FxProc: 0}, 47308 {FzName: ts + 32198, FxProc: 0}, 47309 } 47310 47311 type fd_set3 = struct{ Ffds_bits [32]int32 } 47312 47313 func sqlite3TestBinToHex(tls *libc.TLS, zBuf uintptr, N int32) { 47314 bp := tls.Alloc(17) 47315 defer tls.Free(17) 47316 47317 *(*[17]uint8)(unsafe.Pointer(bp)) = *(*[17]uint8)(unsafe.Pointer(ts + 32225)) 47318 var i int32 47319 var j int32 47320 var c uint8 47321 i = N * 2 47322 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = uint8(0) 47323 for j = N - 1; j >= 0; j-- { 47324 c = *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) 47325 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)&0xf))) 47326 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)>>4))) 47327 } 47328 47329 } 47330 47331 func sqlite3TestHexToBin(tls *libc.TLS, zIn uintptr, N int32, aOut uintptr) int32 { 47332 bp := tls.Alloc(256) 47333 defer tls.Free(256) 47334 47335 *(*[256]uint8)(unsafe.Pointer(bp)) = [256]uint8{ 47336 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), 47337 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), 47338 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), 47339 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), 47340 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), 47341 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), 47342 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), 47343 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), 47344 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), 47345 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), 47346 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), 47347 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), 47348 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), 47349 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), 47350 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), 47351 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), 47352 } 47353 var i int32 47354 var j int32 47355 var hi int32 = 1 47356 var c uint8 47357 47358 for i = libc.AssignInt32(&j, 0); i < N; i++ { 47359 c = *(*uint8)(unsafe.Pointer(bp + uintptr(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))))) 47360 if int32(c) == 0 { 47361 continue 47362 } 47363 if hi != 0 { 47364 *(*uint8)(unsafe.Pointer(aOut + uintptr(j))) = uint8((int32(c) - 1) << 4) 47365 hi = 0 47366 } else { 47367 *(*uint8)(unsafe.Pointer(aOut + uintptr(libc.PostIncInt32(&j, 1)))) |= uint8(int32(c) - 1) 47368 hi = 1 47369 } 47370 } 47371 return j 47372 } 47373 47374 func hexio_read(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47375 bp := tls.Alloc(48) 47376 defer tls.Free(48) 47377 47378 var got int32 47379 var zFile uintptr 47380 var zBuf uintptr 47381 var in uintptr 47382 47383 if objc != 4 { 47384 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32242) 47385 return TCL_ERROR 47386 } 47387 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+40) != 0 { 47388 return TCL_ERROR 47389 } 47390 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+44) != 0 { 47391 return TCL_ERROR 47392 } 47393 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 47394 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 44))*2+1) 47395 if zBuf == uintptr(0) { 47396 return TCL_ERROR 47397 } 47398 in = libc.Xfopen(tls, zFile, ts+4402) 47399 if in == uintptr(0) { 47400 in = libc.Xfopen(tls, zFile, ts+32262) 47401 } 47402 if in == uintptr(0) { 47403 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32264, zFile, 0)) 47404 return TCL_ERROR 47405 } 47406 libc.Xfseek(tls, in, *(*int32)(unsafe.Pointer(bp + 40)), SEEK_SET) 47407 got = int32(libc.Xfread(tls, zBuf, uint32(1), uint32(*(*int32)(unsafe.Pointer(bp + 44))), in)) 47408 libc.Xfclose(tls, in) 47409 if got < 0 { 47410 got = 0 47411 } 47412 sqlite3TestBinToHex(tls, zBuf, got) 47413 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zBuf, 0)) 47414 sqlite3.Xsqlite3_free(tls, zBuf) 47415 return TCL_OK 47416 } 47417 47418 func hexio_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47419 bp := tls.Alloc(32) 47420 defer tls.Free(32) 47421 47422 var nOut int32 47423 var written int32 47424 var zFile uintptr 47425 var zIn uintptr 47426 var aOut uintptr 47427 var out uintptr 47428 47429 if objc != 4 { 47430 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32288) 47431 return TCL_ERROR 47432 } 47433 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+24) != 0 { 47434 return TCL_ERROR 47435 } 47436 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 47437 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+28) 47438 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp + 28))/2) 47439 if aOut == uintptr(0) { 47440 return TCL_ERROR 47441 } 47442 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp + 28)), aOut) 47443 out = libc.Xfopen(tls, zFile, ts+32312) 47444 if out == uintptr(0) { 47445 out = libc.Xfopen(tls, zFile, ts+32316) 47446 } 47447 if out == uintptr(0) { 47448 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32319, zFile, 0)) 47449 return TCL_ERROR 47450 } 47451 libc.Xfseek(tls, out, *(*int32)(unsafe.Pointer(bp + 24)), SEEK_SET) 47452 written = int32(libc.Xfwrite(tls, aOut, uint32(1), uint32(nOut), out)) 47453 sqlite3.Xsqlite3_free(tls, aOut) 47454 libc.Xfclose(tls, out) 47455 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, written)) 47456 return TCL_OK 47457 } 47458 47459 func hexio_get_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47460 bp := tls.Alloc(8) 47461 defer tls.Free(8) 47462 47463 var val int32 47464 47465 var nOut int32 47466 var zIn uintptr 47467 var aOut uintptr 47468 47469 if objc != 2 { 47470 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32344) 47471 return TCL_ERROR 47472 } 47473 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) 47474 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp))/2) 47475 if aOut == uintptr(0) { 47476 return TCL_ERROR 47477 } 47478 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp)), aOut) 47479 if nOut >= 4 { 47480 libc.Xmemcpy(tls, bp+4, aOut, uint32(4)) 47481 } else { 47482 libc.Xmemset(tls, bp+4, 0, uint32(unsafe.Sizeof([4]uint8{}))) 47483 libc.Xmemcpy(tls, bp+4+uintptr(4-nOut), aOut, uint32(nOut)) 47484 } 47485 sqlite3.Xsqlite3_free(tls, aOut) 47486 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))) 47487 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, val)) 47488 return TCL_OK 47489 } 47490 47491 func hexio_render_int16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47492 bp := tls.Alloc(14) 47493 defer tls.Free(14) 47494 47495 if objc != 2 { 47496 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 47497 return TCL_ERROR 47498 } 47499 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 47500 return TCL_ERROR 47501 } 47502 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 47503 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp))) 47504 sqlite3TestBinToHex(tls, bp+4, 2) 47505 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 4)) 47506 return TCL_OK 47507 } 47508 47509 func hexio_render_int32(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47510 bp := tls.Alloc(14) 47511 defer tls.Free(14) 47512 47513 if objc != 2 { 47514 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 47515 return TCL_ERROR 47516 } 47517 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 47518 return TCL_ERROR 47519 } 47520 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 24) 47521 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 16) 47522 *(*uint8)(unsafe.Pointer(bp + 4 + 2)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 47523 *(*uint8)(unsafe.Pointer(bp + 4 + 3)) = uint8(*(*int32)(unsafe.Pointer(bp))) 47524 sqlite3TestBinToHex(tls, bp+4, 4) 47525 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 8)) 47526 return TCL_OK 47527 } 47528 47529 func utf8_to_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47530 bp := tls.Alloc(16) 47531 defer tls.Free(16) 47532 47533 tcl.XTcl_AppendResult(tls, interp, 47534 libc.VaList(bp, ts+32352, 0)) 47535 return TCL_ERROR 47536 } 47537 47538 func getFts3Varint(tls *libc.TLS, p uintptr, v uintptr) int32 { 47539 var q uintptr = p 47540 var x sqlite_uint64 = uint64(0) 47541 var y sqlite_uint64 = uint64(1) 47542 for int32(*(*uint8)(unsafe.Pointer(q)))&0x80 == 0x80 { 47543 x = x + y*sqlite_uint64(int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))))&0x7f) 47544 y <<= 7 47545 } 47546 x = x + y*sqlite_uint64(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1)))) 47547 *(*sqlite_int64)(unsafe.Pointer(v)) = sqlite_int64(x) 47548 return (int32(q) - int32(p)) / 1 47549 } 47550 47551 func putFts3Varint(tls *libc.TLS, p uintptr, v sqlite_int64) int32 { 47552 var q uintptr = p 47553 var vu sqlite_uint64 = sqlite_uint64(v) 47554 for __ccgo := true; __ccgo; __ccgo = vu != uint64(0) { 47555 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))) = uint8(vu&uint64(0x7f) | uint64(0x80)) 47556 vu >>= 7 47557 } 47558 *(*uint8)(unsafe.Pointer(q + libc.UintptrFromInt32(-1))) &= uint8(0x7f) 47559 47560 return (int32(q) - int32(p)) / 1 47561 } 47562 47563 func read_fts3varint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47564 bp := tls.Alloc(12) 47565 defer tls.Free(12) 47566 47567 var zBlob uintptr 47568 47569 var nVal int32 47570 47571 if objc != 3 { 47572 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32406) 47573 return TCL_ERROR 47574 } 47575 zBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) 47576 47577 nVal = getFts3Varint(tls, zBlob, bp+4) 47578 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 4))), 0) 47579 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nVal)) 47580 return TCL_OK 47581 } 47582 47583 func make_fts3record(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47584 bp := tls.Alloc(20) 47585 defer tls.Free(20) 47586 47587 *(*uintptr)(unsafe.Pointer(bp + 4)) = uintptr(0) 47588 *(*int32)(unsafe.Pointer(bp)) = 0 47589 var aOut uintptr = uintptr(0) 47590 var nOut int32 = 0 47591 var nAlloc int32 = 0 47592 var i int32 47593 47594 if objc != 2 { 47595 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32419) 47596 return TCL_ERROR 47597 } 47598 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp, bp+4) != 0 { 47599 return TCL_ERROR 47600 } 47601 47602 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 47603 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(i)*4)), bp+8) { 47604 if nOut+10 > nAlloc { 47605 var nNew int32 47606 if nAlloc != 0 { 47607 nNew = nAlloc * 2 47608 } else { 47609 nNew = 128 47610 } 47611 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 47612 if aNew == uintptr(0) { 47613 sqlite3.Xsqlite3_free(tls, aOut) 47614 return TCL_ERROR 47615 } 47616 aOut = aNew 47617 nAlloc = nNew 47618 } 47619 nOut = nOut + putFts3Varint(tls, aOut+uintptr(nOut), *(*sqlite3_int64)(unsafe.Pointer(bp + 8))) 47620 } else { 47621 *(*int32)(unsafe.Pointer(bp + 16)) = 0 47622 var zVal uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(i)*4)), bp+16) 47623 for nOut+*(*int32)(unsafe.Pointer(bp + 16)) > nAlloc { 47624 var nNew int32 47625 if nAlloc != 0 { 47626 nNew = nAlloc * 2 47627 } else { 47628 nNew = 128 47629 } 47630 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 47631 if aNew == uintptr(0) { 47632 sqlite3.Xsqlite3_free(tls, aOut) 47633 return TCL_ERROR 47634 } 47635 aOut = aNew 47636 nAlloc = nNew 47637 } 47638 libc.Xmemcpy(tls, aOut+uintptr(nOut), zVal, uint32(*(*int32)(unsafe.Pointer(bp + 16)))) 47639 nOut = nOut + *(*int32)(unsafe.Pointer(bp + 16)) 47640 } 47641 } 47642 47643 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, aOut, nOut)) 47644 sqlite3.Xsqlite3_free(tls, aOut) 47645 return TCL_OK 47646 } 47647 47648 func Sqlitetest_hexio_Init(tls *libc.TLS, interp uintptr) int32 { 47649 var i int32 47650 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd8))/uint32(unsafe.Sizeof(struct { 47651 FzName uintptr 47652 FxProc uintptr 47653 }{})); i++ { 47654 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd8[i].FzName, aObjCmd8[i].FxProc, uintptr(0), uintptr(0)) 47655 } 47656 return TCL_OK 47657 } 47658 47659 var aObjCmd8 = [8]struct { 47660 FzName uintptr 47661 FxProc uintptr 47662 }{ 47663 {FzName: ts + 32424, FxProc: 0}, 47664 {FzName: ts + 32435, FxProc: 0}, 47665 {FzName: ts + 32447, FxProc: 0}, 47666 {FzName: ts + 32461, FxProc: 0}, 47667 {FzName: ts + 32480, FxProc: 0}, 47668 {FzName: ts + 32499, FxProc: 0}, 47669 {FzName: ts + 32512, FxProc: 0}, 47670 {FzName: ts + 32528, FxProc: 0}, 47671 } 47672 47673 type Wrapped = struct { 47674 Fpcache sqlite3_pcache_methods2 47675 Fmem sqlite3_mem_methods 47676 Fmutex sqlite3_mutex_methods 47677 Fmem_init int32 47678 Fmem_fail int32 47679 Fmutex_init int32 47680 Fmutex_fail int32 47681 Fpcache_init int32 47682 Fpcache_fail int32 47683 } 47684 47685 var wrapped Wrapped 47686 47687 func wrMemInit(tls *libc.TLS, pAppData uintptr) int32 { 47688 var rc int32 47689 if wrapped.Fmem_fail != 0 { 47690 rc = SQLITE_ERROR 47691 } else { 47692 rc = (*struct { 47693 f func(*libc.TLS, uintptr) int32 47694 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxInit})).f(tls, wrapped.Fmem.FpAppData) 47695 } 47696 if rc == SQLITE_OK { 47697 wrapped.Fmem_init = 1 47698 } 47699 return rc 47700 } 47701 47702 func wrMemShutdown(tls *libc.TLS, pAppData uintptr) { 47703 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxShutdown})).f(tls, wrapped.Fmem.FpAppData) 47704 wrapped.Fmem_init = 0 47705 } 47706 47707 func wrMemMalloc(tls *libc.TLS, n int32) uintptr { 47708 return (*struct { 47709 f func(*libc.TLS, int32) uintptr 47710 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxMalloc})).f(tls, n) 47711 } 47712 47713 func wrMemFree(tls *libc.TLS, p uintptr) { 47714 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxFree})).f(tls, p) 47715 } 47716 47717 func wrMemRealloc(tls *libc.TLS, p uintptr, n int32) uintptr { 47718 return (*struct { 47719 f func(*libc.TLS, uintptr, int32) uintptr 47720 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRealloc})).f(tls, p, n) 47721 } 47722 47723 func wrMemSize(tls *libc.TLS, p uintptr) int32 { 47724 return (*struct { 47725 f func(*libc.TLS, uintptr) int32 47726 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxSize})).f(tls, p) 47727 } 47728 47729 func wrMemRoundup(tls *libc.TLS, n int32) int32 { 47730 return (*struct{ f func(*libc.TLS, int32) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRoundup})).f(tls, n) 47731 } 47732 47733 func wrMutexInit(tls *libc.TLS) int32 { 47734 var rc int32 47735 if wrapped.Fmutex_fail != 0 { 47736 rc = SQLITE_ERROR 47737 } else { 47738 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexInit})).f(tls) 47739 } 47740 if rc == SQLITE_OK { 47741 wrapped.Fmutex_init = 1 47742 } 47743 return rc 47744 } 47745 47746 func wrMutexEnd(tls *libc.TLS) int32 { 47747 (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnd})).f(tls) 47748 wrapped.Fmutex_init = 0 47749 return SQLITE_OK 47750 } 47751 47752 func wrMutexAlloc(tls *libc.TLS, e int32) uintptr { 47753 return (*struct { 47754 f func(*libc.TLS, int32) uintptr 47755 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexAlloc})).f(tls, e) 47756 } 47757 47758 func wrMutexFree(tls *libc.TLS, p uintptr) { 47759 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexFree})).f(tls, p) 47760 } 47761 47762 func wrMutexEnter(tls *libc.TLS, p uintptr) { 47763 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnter})).f(tls, p) 47764 } 47765 47766 func wrMutexTry(tls *libc.TLS, p uintptr) int32 { 47767 return (*struct { 47768 f func(*libc.TLS, uintptr) int32 47769 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexTry})).f(tls, p) 47770 } 47771 47772 func wrMutexLeave(tls *libc.TLS, p uintptr) { 47773 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexLeave})).f(tls, p) 47774 } 47775 47776 func wrMutexHeld(tls *libc.TLS, p uintptr) int32 { 47777 return (*struct { 47778 f func(*libc.TLS, uintptr) int32 47779 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexHeld})).f(tls, p) 47780 } 47781 47782 func wrMutexNotheld(tls *libc.TLS, p uintptr) int32 { 47783 return (*struct { 47784 f func(*libc.TLS, uintptr) int32 47785 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexNotheld})).f(tls, p) 47786 } 47787 47788 func wrPCacheInit(tls *libc.TLS, pArg uintptr) int32 { 47789 var rc int32 47790 if wrapped.Fpcache_fail != 0 { 47791 rc = SQLITE_ERROR 47792 } else { 47793 rc = (*struct { 47794 f func(*libc.TLS, uintptr) int32 47795 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxInit})).f(tls, wrapped.Fpcache.FpArg) 47796 } 47797 if rc == SQLITE_OK { 47798 wrapped.Fpcache_init = 1 47799 } 47800 return rc 47801 } 47802 47803 func wrPCacheShutdown(tls *libc.TLS, pArg uintptr) { 47804 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxShutdown})).f(tls, wrapped.Fpcache.FpArg) 47805 wrapped.Fpcache_init = 0 47806 } 47807 47808 func wrPCacheCreate(tls *libc.TLS, a int32, b int32, c int32) uintptr { 47809 return (*struct { 47810 f func(*libc.TLS, int32, int32, int32) uintptr 47811 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCreate})).f(tls, a, b, c) 47812 } 47813 47814 func wrPCacheCachesize(tls *libc.TLS, p uintptr, n int32) { 47815 (*struct { 47816 f func(*libc.TLS, uintptr, int32) 47817 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCachesize})).f(tls, p, n) 47818 } 47819 47820 func wrPCachePagecount(tls *libc.TLS, p uintptr) int32 { 47821 return (*struct { 47822 f func(*libc.TLS, uintptr) int32 47823 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxPagecount})).f(tls, p) 47824 } 47825 47826 func wrPCacheFetch(tls *libc.TLS, p uintptr, a uint32, b int32) uintptr { 47827 return (*struct { 47828 f func(*libc.TLS, uintptr, uint32, int32) uintptr 47829 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxFetch})).f(tls, p, a, b) 47830 } 47831 47832 func wrPCacheUnpin(tls *libc.TLS, p uintptr, a uintptr, b int32) { 47833 (*struct { 47834 f func(*libc.TLS, uintptr, uintptr, int32) 47835 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxUnpin})).f(tls, p, a, b) 47836 } 47837 47838 func wrPCacheRekey(tls *libc.TLS, p uintptr, a uintptr, b uint32, c uint32) { 47839 (*struct { 47840 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 47841 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxRekey})).f(tls, p, a, b, c) 47842 } 47843 47844 func wrPCacheTruncate(tls *libc.TLS, p uintptr, a uint32) { 47845 (*struct { 47846 f func(*libc.TLS, uintptr, uint32) 47847 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxTruncate})).f(tls, p, a) 47848 } 47849 47850 func wrPCacheDestroy(tls *libc.TLS, p uintptr) { 47851 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxDestroy})).f(tls, p) 47852 } 47853 47854 func installInitWrappers(tls *libc.TLS) { 47855 bp := tls.Alloc(168) 47856 defer tls.Free(168) 47857 47858 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 48)) = sqlite3_mutex_methods{ 47859 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 { 47860 f func(*libc.TLS, int32) uintptr 47861 }{wrMutexAlloc})), 47862 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 { 47863 f func(*libc.TLS, uintptr) int32 47864 }{wrMutexTry})), 47865 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexLeave})), FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 47866 f func(*libc.TLS, uintptr) int32 47867 }{wrMutexHeld})), FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 47868 f func(*libc.TLS, uintptr) int32 47869 }{wrMutexNotheld})), 47870 } 47871 *(*sqlite3_pcache_methods2)(unsafe.Pointer(bp + 116)) = sqlite3_pcache_methods2{ 47872 FiVersion: 1, 47873 FxInit: *(*uintptr)(unsafe.Pointer(&struct { 47874 f func(*libc.TLS, uintptr) int32 47875 }{wrPCacheInit})), FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheShutdown})), FxCreate: *(*uintptr)(unsafe.Pointer(&struct { 47876 f func(*libc.TLS, int32, int32, int32) uintptr 47877 }{wrPCacheCreate})), 47878 FxCachesize: *(*uintptr)(unsafe.Pointer(&struct { 47879 f func(*libc.TLS, uintptr, int32) 47880 }{wrPCacheCachesize})), FxPagecount: *(*uintptr)(unsafe.Pointer(&struct { 47881 f func(*libc.TLS, uintptr) int32 47882 }{wrPCachePagecount})), FxFetch: *(*uintptr)(unsafe.Pointer(&struct { 47883 f func(*libc.TLS, uintptr, uint32, int32) uintptr 47884 }{wrPCacheFetch})), 47885 FxUnpin: *(*uintptr)(unsafe.Pointer(&struct { 47886 f func(*libc.TLS, uintptr, uintptr, int32) 47887 }{wrPCacheUnpin})), FxRekey: *(*uintptr)(unsafe.Pointer(&struct { 47888 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 47889 }{wrPCacheRekey})), FxTruncate: *(*uintptr)(unsafe.Pointer(&struct { 47890 f func(*libc.TLS, uintptr, uint32) 47891 }{wrPCacheTruncate})), 47892 FxDestroy: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheDestroy})), 47893 } 47894 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 84)) = sqlite3_mem_methods{ 47895 FxMalloc: *(*uintptr)(unsafe.Pointer(&struct { 47896 f func(*libc.TLS, int32) uintptr 47897 }{wrMemMalloc})), FxFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemFree})), FxRealloc: *(*uintptr)(unsafe.Pointer(&struct { 47898 f func(*libc.TLS, uintptr, int32) uintptr 47899 }{wrMemRealloc})), 47900 FxSize: *(*uintptr)(unsafe.Pointer(&struct { 47901 f func(*libc.TLS, uintptr) int32 47902 }{wrMemSize})), FxRoundup: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{wrMemRoundup})), FxInit: *(*uintptr)(unsafe.Pointer(&struct { 47903 f func(*libc.TLS, uintptr) int32 47904 }{wrMemInit})), 47905 FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemShutdown})), 47906 } 47907 47908 libc.Xmemset(tls, uintptr(unsafe.Pointer(&wrapped)), 0, uint32(unsafe.Sizeof(wrapped))) 47909 47910 sqlite3.Xsqlite3_shutdown(tls) 47911 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+84)) 47912 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+52)) 47913 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 47914 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+24, bp+48)) 47915 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+84)) 47916 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+40, bp+116)) 47917 } 47918 47919 func init_wrapper_install(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47920 bp := tls.Alloc(24) 47921 defer tls.Free(24) 47922 47923 var i int32 47924 installInitWrappers(tls) 47925 for i = 1; i < objc; i++ { 47926 var z uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4))) 47927 if libc.Xstrcmp(tls, z, ts+32544) == 0 { 47928 wrapped.Fmem_fail = 1 47929 } else if libc.Xstrcmp(tls, z, ts+29150) == 0 { 47930 wrapped.Fmutex_fail = 1 47931 } else if libc.Xstrcmp(tls, z, ts+32548) == 0 { 47932 wrapped.Fpcache_fail = 1 47933 } else { 47934 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32555, z, ts+11945)) 47935 return TCL_ERROR 47936 } 47937 } 47938 return TCL_OK 47939 } 47940 47941 func init_wrapper_uninstall(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47942 bp := tls.Alloc(24) 47943 defer tls.Free(24) 47944 47945 if objc != 1 { 47946 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47947 return TCL_ERROR 47948 } 47949 47950 sqlite3.Xsqlite3_shutdown(tls) 47951 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+84)) 47952 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+52)) 47953 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 47954 return TCL_OK 47955 } 47956 47957 func init_wrapper_clear(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47958 if objc != 1 { 47959 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47960 return TCL_ERROR 47961 } 47962 47963 wrapped.Fmem_fail = 0 47964 wrapped.Fmutex_fail = 0 47965 wrapped.Fpcache_fail = 0 47966 return TCL_OK 47967 } 47968 47969 func init_wrapper_query(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47970 var pRet uintptr 47971 47972 if objc != 1 { 47973 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 47974 return TCL_ERROR 47975 } 47976 47977 pRet = tcl.XTcl_NewObj(tls) 47978 if wrapped.Fmutex_init != 0 { 47979 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+29150, -1)) 47980 } 47981 if wrapped.Fmem_init != 0 { 47982 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32544, -1)) 47983 } 47984 if wrapped.Fpcache_init != 0 { 47985 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32548, -1)) 47986 } 47987 47988 tcl.XTcl_SetObjResult(tls, interp, pRet) 47989 return TCL_OK 47990 } 47991 47992 func Sqlitetest_init_Init(tls *libc.TLS, interp uintptr) int32 { 47993 var i int32 47994 47995 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd9))/uint32(unsafe.Sizeof(struct { 47996 FzName uintptr 47997 FxProc uintptr 47998 }{})); i++ { 47999 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd9[i].FzName, aObjCmd9[i].FxProc, uintptr(0), uintptr(0)) 48000 } 48001 48002 return TCL_OK 48003 } 48004 48005 var aObjCmd9 = [4]struct { 48006 FzName uintptr 48007 FxProc uintptr 48008 }{ 48009 {FzName: ts + 32575, FxProc: 0}, 48010 {FzName: ts + 32596, FxProc: 0}, 48011 {FzName: ts + 32615, FxProc: 0}, 48012 {FzName: ts + 32638, FxProc: 0}, 48013 } 48014 48015 type sqlite3_intarray1 = struct { 48016 Fn int32 48017 Fa uintptr 48018 FxFree uintptr 48019 } 48020 48021 type sqlite3_intarray = sqlite3_intarray1 48022 48023 type intarray_vtab1 = struct { 48024 Fbase sqlite3_vtab 48025 FpContent uintptr 48026 } 48027 48028 type intarray_vtab = intarray_vtab1 48029 type intarray_cursor1 = struct { 48030 Fbase sqlite3_vtab_cursor 48031 Fi int32 48032 } 48033 48034 type intarray_cursor = intarray_cursor1 48035 48036 func intarrayFree(tls *libc.TLS, p uintptr) { 48037 if (*sqlite3_intarray)(unsafe.Pointer(p)).FxFree != 0 { 48038 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(p)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(p)).Fa) 48039 } 48040 sqlite3.Xsqlite3_free(tls, p) 48041 } 48042 48043 func intarrayDestroy(tls *libc.TLS, p uintptr) int32 { 48044 var pVtab uintptr = p 48045 sqlite3.Xsqlite3_free(tls, pVtab) 48046 return 0 48047 } 48048 48049 func intarrayCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 48050 var rc int32 = SQLITE_NOMEM 48051 var pVtab uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_vtab{}))) 48052 48053 if pVtab != 0 { 48054 libc.Xmemset(tls, pVtab, 0, uint32(unsafe.Sizeof(intarray_vtab{}))) 48055 (*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent = pAux 48056 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+32657) 48057 } 48058 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 48059 return rc 48060 } 48061 48062 func intarrayOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 48063 var rc int32 = SQLITE_NOMEM 48064 var pCur uintptr 48065 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_cursor{}))) 48066 if pCur != 0 { 48067 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(intarray_cursor{}))) 48068 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 48069 rc = SQLITE_OK 48070 } 48071 return rc 48072 } 48073 48074 func intarrayClose(tls *libc.TLS, cur uintptr) int32 { 48075 var pCur uintptr = cur 48076 sqlite3.Xsqlite3_free(tls, pCur) 48077 return SQLITE_OK 48078 } 48079 48080 func intarrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 48081 var pCur uintptr = cur 48082 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 48083 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 { 48084 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))) 48085 } 48086 return SQLITE_OK 48087 } 48088 48089 func intarrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 48090 var pCur uintptr = cur 48091 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*intarray_cursor)(unsafe.Pointer(pCur)).Fi) 48092 return SQLITE_OK 48093 } 48094 48095 func intarrayEof(tls *libc.TLS, cur uintptr) int32 { 48096 var pCur uintptr = cur 48097 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 48098 return libc.Bool32((*intarray_cursor)(unsafe.Pointer(pCur)).Fi >= (*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fn) 48099 } 48100 48101 func intarrayNext(tls *libc.TLS, cur uintptr) int32 { 48102 var pCur uintptr = cur 48103 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi++ 48104 return SQLITE_OK 48105 } 48106 48107 func intarrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 48108 var pCur uintptr = pVtabCursor 48109 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi = 0 48110 return SQLITE_OK 48111 } 48112 48113 func intarrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 48114 return SQLITE_OK 48115 } 48116 48117 var intarrayModule = sqlite3_module{ 48118 FxCreate: 0, 48119 FxConnect: 0, 48120 FxBestIndex: 0, 48121 FxDisconnect: 0, 48122 FxDestroy: 0, 48123 FxOpen: 0, 48124 FxClose: 0, 48125 FxFilter: 0, 48126 FxNext: 0, 48127 FxEof: 0, 48128 FxColumn: 0, 48129 FxRowid: 0, 48130 } 48131 48132 func sqlite3_intarray_create(tls *libc.TLS, db uintptr, zName uintptr, ppReturn uintptr) int32 { 48133 bp := tls.Alloc(16) 48134 defer tls.Free(16) 48135 48136 var rc int32 = SQLITE_OK 48137 var p uintptr 48138 48139 *(*uintptr)(unsafe.Pointer(ppReturn)) = libc.AssignUintptr(&p, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_intarray{})))) 48140 if p == uintptr(0) { 48141 return SQLITE_NOMEM 48142 } 48143 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(sqlite3_intarray{}))) 48144 rc = sqlite3.Xsqlite3_create_module_v2(tls, db, zName, uintptr(unsafe.Pointer(&intarrayModule)), p, 48145 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{intarrayFree}))) 48146 if rc == SQLITE_OK { 48147 var zSql uintptr 48148 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+32699, 48149 libc.VaList(bp, zName, zName)) 48150 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 48151 sqlite3.Xsqlite3_free(tls, zSql) 48152 } 48153 return rc 48154 } 48155 48156 func sqlite3_intarray_bind(tls *libc.TLS, pIntArray uintptr, nElements int32, aElements uintptr, xFree uintptr) int32 { 48157 if (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree != 0 { 48158 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa) 48159 } 48160 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fn = nElements 48161 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa = aElements 48162 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree = xFree 48163 return SQLITE_OK 48164 } 48165 48166 func test_intarray_create(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48167 bp := tls.Alloc(140) 48168 defer tls.Free(140) 48169 48170 var zName uintptr 48171 48172 var rc int32 = SQLITE_OK 48173 48174 if objc != 3 { 48175 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 48176 return TCL_ERROR 48177 } 48178 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 48179 return TCL_ERROR 48180 } 48181 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 48182 rc = sqlite3_intarray_create(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, bp+36) 48183 if rc != SQLITE_OK { 48184 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 48185 return TCL_ERROR 48186 } 48187 sqlite3TestMakePointerStr(tls, interp, bp+40, *(*uintptr)(unsafe.Pointer(bp + 36))) 48188 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, bp+40, uintptr(0))) 48189 return TCL_OK 48190 } 48191 48192 func test_intarray_bind(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48193 bp := tls.Alloc(40) 48194 defer tls.Free(40) 48195 48196 var pArray uintptr 48197 var rc int32 = SQLITE_OK 48198 var i int32 48199 var n int32 48200 var a uintptr 48201 48202 if objc < 2 { 48203 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32737) 48204 return TCL_ERROR 48205 } 48206 pArray = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 48207 n = objc - 2 48208 a = sqlite3.Xsqlite3_malloc64(tls, uint64(uint32(unsafe.Sizeof(sqlite3_int64(0)))*uint32(n))) 48209 if a == uintptr(0) { 48210 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32746, uintptr(0))) 48211 return TCL_ERROR 48212 } 48213 for i = 0; i < n; i++ { 48214 *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) = int64(0) 48215 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + uintptr(i+2)*4)), bp+32) 48216 *(*sqlite3_int64)(unsafe.Pointer(a + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) 48217 } 48218 rc = sqlite3_intarray_bind(tls, pArray, n, a, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 48219 if rc != SQLITE_OK { 48220 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 48221 return TCL_ERROR 48222 } 48223 return TCL_OK 48224 } 48225 48226 func Sqlitetestintarray_Init(tls *libc.TLS, interp uintptr) int32 { 48227 var i int32 48228 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd10))/uint32(unsafe.Sizeof(struct { 48229 FzName uintptr 48230 FxProc uintptr 48231 FclientData uintptr 48232 }{})); i++ { 48233 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd10[i].FzName, 48234 aObjCmd10[i].FxProc, aObjCmd10[i].FclientData, uintptr(0)) 48235 } 48236 return TCL_OK 48237 } 48238 48239 var aObjCmd10 = [2]struct { 48240 FzName uintptr 48241 FxProc uintptr 48242 FclientData uintptr 48243 }{ 48244 {FzName: ts + 32759, FxProc: 0}, 48245 {FzName: ts + 32783, FxProc: 0}, 48246 } 48247 48248 type jt_file1 = struct { 48249 Fbase sqlite3_file 48250 FzName uintptr 48251 Fflags int32 48252 FeLock int32 48253 FnPage u32 48254 FnPagesize u32 48255 FpWritable uintptr 48256 FaCksum uintptr 48257 FnSync int32 48258 FiMaxOff sqlite3_int64 48259 FpNext uintptr 48260 FpReal uintptr 48261 } 48262 48263 type jt_file = jt_file1 48264 48265 var jt_vfs = sqlite3_vfs{ 48266 FiVersion: 2, 48267 FszOsFile: int32(unsafe.Sizeof(jt_file{})), 48268 FmxPathname: JT_MAX_PATHNAME, 48269 FzName: ts + 32805, 48270 FxOpen: 0, 48271 FxDelete: 0, 48272 FxAccess: 0, 48273 FxFullPathname: 0, 48274 FxDlOpen: 0, 48275 FxDlError: 0, 48276 FxDlSym: 0, 48277 FxDlClose: 0, 48278 FxRandomness: 0, 48279 FxSleep: 0, 48280 FxCurrentTime: 0, 48281 FxGetLastError: 0, 48282 FxCurrentTimeInt64: 0, 48283 } 48284 48285 var jt_io_methods = sqlite3_io_methods{ 48286 FiVersion: 1, 48287 FxClose: 0, 48288 FxRead: 0, 48289 FxWrite: 0, 48290 FxTruncate: 0, 48291 FxSync: 0, 48292 FxFileSize: 0, 48293 FxLock: 0, 48294 FxUnlock: 0, 48295 FxCheckReservedLock: 0, 48296 FxFileControl: 0, 48297 FxSectorSize: 0, 48298 FxDeviceCharacteristics: 0, 48299 } 48300 48301 type JtGlobal = struct { 48302 FpVfs uintptr 48303 FpList uintptr 48304 } 48305 48306 var g2 = JtGlobal{} 48307 48308 func enterJtMutex(tls *libc.TLS) { 48309 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 48310 } 48311 48312 func leaveJtMutex(tls *libc.TLS) { 48313 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 48314 } 48315 48316 func stop_ioerr_simulation(tls *libc.TLS, piSave uintptr, piSave2 uintptr) { 48317 *(*int32)(unsafe.Pointer(piSave)) = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 48318 *(*int32)(unsafe.Pointer(piSave2)) = sqlite3.Xsqlite3_io_error_hit 48319 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(-1)) 48320 sqlite3.Xsqlite3_io_error_hit = 0 48321 } 48322 48323 func start_ioerr_simulation(tls *libc.TLS, iSave int32, iSave2 int32) { 48324 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, iSave) 48325 sqlite3.Xsqlite3_io_error_hit = iSave2 48326 } 48327 48328 func closeTransaction(tls *libc.TLS, p uintptr) { 48329 sqlite3.Xsqlite3BitvecDestroy(tls, (*jt_file)(unsafe.Pointer(p)).FpWritable) 48330 sqlite3.Xsqlite3_free(tls, (*jt_file)(unsafe.Pointer(p)).FaCksum) 48331 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 48332 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 48333 (*jt_file)(unsafe.Pointer(p)).FnSync = 0 48334 } 48335 48336 func jtClose(tls *libc.TLS, pFile uintptr) int32 { 48337 var pp uintptr 48338 var p uintptr = pFile 48339 48340 closeTransaction(tls, p) 48341 enterJtMutex(tls) 48342 if (*jt_file)(unsafe.Pointer(p)).FzName != 0 { 48343 for pp = uintptr(unsafe.Pointer(&g2)) + 4; *(*uintptr)(unsafe.Pointer(pp)) != p; pp = *(*uintptr)(unsafe.Pointer(pp)) + 44 { 48344 } 48345 *(*uintptr)(unsafe.Pointer(pp)) = (*jt_file)(unsafe.Pointer(p)).FpNext 48346 } 48347 leaveJtMutex(tls) 48348 sqlite3.Xsqlite3OsClose(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48349 return SQLITE_OK 48350 } 48351 48352 func jtRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48353 var p uintptr = pFile 48354 return sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48355 } 48356 48357 func locateDatabaseHandle(tls *libc.TLS, zJournal uintptr, noLock int32) uintptr { 48358 var pMain uintptr = uintptr(0) 48359 enterJtMutex(tls) 48360 for pMain = g2.FpList; pMain != 0; pMain = (*jt_file)(unsafe.Pointer(pMain)).FpNext { 48361 var nName int32 = int32(libc.Xstrlen(tls, zJournal) - libc.Xstrlen(tls, ts+32808)) 48362 if (*jt_file)(unsafe.Pointer(pMain)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && 48363 int32(libc.Xstrlen(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName)) == nName && 48364 0 == libc.Xmemcmp(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName, zJournal, uint32(nName)) && 48365 ((*jt_file)(unsafe.Pointer(pMain)).FeLock >= SQLITE_LOCK_RESERVED || noLock != 0) { 48366 break 48367 } 48368 } 48369 leaveJtMutex(tls) 48370 return pMain 48371 } 48372 48373 func decodeUint32(tls *libc.TLS, z uintptr) u32 { 48374 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)))) 48375 } 48376 48377 func genCksum(tls *libc.TLS, z uintptr, n int32) u32 { 48378 var i int32 48379 var cksum u32 = u32(0) 48380 for i = 0; i < n; i++ { 48381 cksum = cksum + u32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) + cksum<<3 48382 } 48383 return cksum 48384 } 48385 48386 func decodeJournalHdr(tls *libc.TLS, zBuf uintptr, pnRec uintptr, pnPage uintptr, pnSector uintptr, pnPagesize uintptr) int32 { 48387 bp := tls.Alloc(8) 48388 defer tls.Free(8) 48389 48390 *(*[8]uint8)(unsafe.Pointer(bp)) = [8]uint8{uint8(0xd9), uint8(0xd5), uint8(0x05), uint8(0xf9), uint8(0x20), uint8(0xa1), uint8(0x63), uint8(0xd7)} 48391 if libc.Xmemcmp(tls, bp, zBuf, uint32(8)) != 0 { 48392 return SQLITE_ERROR 48393 } 48394 if pnRec != 0 { 48395 *(*u32)(unsafe.Pointer(pnRec)) = decodeUint32(tls, zBuf+8) 48396 } 48397 if pnPage != 0 { 48398 *(*u32)(unsafe.Pointer(pnPage)) = decodeUint32(tls, zBuf+16) 48399 } 48400 if pnSector != 0 { 48401 *(*u32)(unsafe.Pointer(pnSector)) = decodeUint32(tls, zBuf+20) 48402 } 48403 if pnPagesize != 0 { 48404 *(*u32)(unsafe.Pointer(pnPagesize)) = decodeUint32(tls, zBuf+24) 48405 } 48406 return SQLITE_OK 48407 } 48408 48409 func openTransaction(tls *libc.TLS, pMain uintptr, pJournal uintptr) int32 { 48410 bp := tls.Alloc(8) 48411 defer tls.Free(8) 48412 48413 var aData uintptr 48414 var p uintptr = (*jt_file)(unsafe.Pointer(pMain)).FpReal 48415 var rc int32 = SQLITE_OK 48416 48417 closeTransaction(tls, pMain) 48418 aData = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48419 (*jt_file)(unsafe.Pointer(pMain)).FpWritable = sqlite3.Xsqlite3BitvecCreate(tls, (*jt_file)(unsafe.Pointer(pMain)).FnPage) 48420 (*jt_file)(unsafe.Pointer(pMain)).FaCksum = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(u32(0)))*((*jt_file)(unsafe.Pointer(pMain)).FnPage+u32(1)))) 48421 (*jt_file)(unsafe.Pointer(pJournal)).FiMaxOff = int64(0) 48422 48423 if !(int32((*jt_file)(unsafe.Pointer(pMain)).FpWritable) != 0) || !(int32((*jt_file)(unsafe.Pointer(pMain)).FaCksum) != 0) || !(aData != 0) { 48424 rc = SQLITE_IOERR | int32(12)<<8 48425 } else if (*jt_file)(unsafe.Pointer(pMain)).FnPage > u32(0) { 48426 var iTrunk u32 48427 48428 stop_ioerr_simulation(tls, bp, bp+4) 48429 48430 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), int64(0)) 48431 if rc == SQLITE_OK { 48432 var nDbsize u32 = decodeUint32(tls, aData+28) 48433 if nDbsize > u32(0) && libc.Xmemcmp(tls, aData+24, aData+92, uint32(4)) == 0 { 48434 var iPg u32 48435 for iPg = nDbsize + u32(1); iPg <= (*jt_file)(unsafe.Pointer(pMain)).FnPage; iPg++ { 48436 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, iPg) 48437 } 48438 } 48439 } 48440 iTrunk = decodeUint32(tls, aData+32) 48441 for rc == SQLITE_OK && iTrunk > u32(0) { 48442 var nLeaf u32 48443 var iLeaf u32 48444 var iOff sqlite3_int64 = i64(iTrunk-u32(1)) * i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 48445 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 48446 nLeaf = decodeUint32(tls, aData+4) 48447 for iLeaf = u32(0); rc == SQLITE_OK && iLeaf < nLeaf; iLeaf++ { 48448 var pgno u32 = decodeUint32(tls, aData+uintptr(u32(8)+u32(4)*iLeaf)) 48449 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 48450 } 48451 iTrunk = decodeUint32(tls, aData) 48452 } 48453 48454 if rc == SQLITE_OK { 48455 var ii int32 48456 for ii = 0; rc == SQLITE_OK && ii < int32((*jt_file)(unsafe.Pointer(pMain)).FnPage); ii++ { 48457 var iOff i64 = i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) * i64(ii) 48458 if iOff == i64(sqlite3.Xsqlite3PendingByte) { 48459 continue 48460 } 48461 rc = sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(pMain)).FpReal, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 48462 *(*u32)(unsafe.Pointer((*jt_file)(unsafe.Pointer(pMain)).FaCksum + uintptr(ii)*4)) = genCksum(tls, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48463 if ii+1 == int32((*jt_file)(unsafe.Pointer(pMain)).FnPage) && rc == SQLITE_IOERR|int32(2)<<8 { 48464 rc = SQLITE_OK 48465 } 48466 } 48467 } 48468 48469 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 48470 } 48471 48472 sqlite3.Xsqlite3_free(tls, aData) 48473 return rc 48474 } 48475 48476 func readJournalFile(tls *libc.TLS, p uintptr, pMain uintptr) int32 { 48477 bp := tls.Alloc(52) 48478 defer tls.Free(52) 48479 48480 var rc int32 48481 48482 var pReal uintptr 48483 var iOff sqlite3_int64 48484 var iSize sqlite3_int64 48485 var aPage uintptr 48486 48487 var cksum u32 48488 _ = cksum 48489 var pgno u32 48490 48491 var ii u32 48492 rc = SQLITE_OK 48493 pReal = (*jt_file)(unsafe.Pointer(p)).FpReal 48494 iOff = int64(0) 48495 iSize = (*jt_file)(unsafe.Pointer(p)).FiMaxOff 48496 48497 aPage = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48498 if !!(aPage != 0) { 48499 goto __1 48500 } 48501 return SQLITE_IOERR | int32(12)<<8 48502 __1: 48503 ; 48504 stop_ioerr_simulation(tls, bp, bp+4) 48505 48506 __2: 48507 if !(rc == SQLITE_OK && iOff < iSize) { 48508 goto __3 48509 } 48510 48511 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 48512 if !(rc != SQLITE_OK || 48513 decodeJournalHdr(tls, bp+8, bp+36, bp+40, bp+44, bp+48) != 0) { 48514 goto __4 48515 } 48516 goto finish_rjf 48517 __4: 48518 ; 48519 iOff = iOff + sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) 48520 48521 if !(*(*u32)(unsafe.Pointer(bp + 36)) == u32(0)) { 48522 goto __5 48523 } 48524 48525 if !(iSize >= iOff+sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44)))) { 48526 goto __6 48527 } 48528 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 48529 if !(rc != SQLITE_OK || 0 == decodeJournalHdr(tls, bp+8, uintptr(0), uintptr(0), uintptr(0), uintptr(0))) { 48530 goto __7 48531 } 48532 goto __2 48533 __7: 48534 ; 48535 __6: 48536 ; 48537 *(*u32)(unsafe.Pointer(bp + 36)) = u32((iSize - iOff) / sqlite3_int64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize+u32(8))) 48538 __5: 48539 ; 48540 ii = u32(0) 48541 __8: 48542 if !(rc == SQLITE_OK && ii < *(*u32)(unsafe.Pointer(bp + 36)) && iOff < iSize) { 48543 goto __10 48544 } 48545 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 4, iOff) 48546 if !(rc == SQLITE_OK) { 48547 goto __11 48548 } 48549 pgno = decodeUint32(tls, bp+8) 48550 if !(pgno > u32(0) && pgno <= (*jt_file)(unsafe.Pointer(pMain)).FnPage) { 48551 goto __12 48552 } 48553 if !(0 == sqlite3.Xsqlite3BitvecTest(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno)) { 48554 goto __13 48555 } 48556 rc = sqlite3.Xsqlite3OsRead(tls, pReal, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff+int64(4)) 48557 if !(rc == SQLITE_OK) { 48558 goto __14 48559 } 48560 cksum = genCksum(tls, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48561 48562 __14: 48563 ; 48564 __13: 48565 ; 48566 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 48567 __12: 48568 ; 48569 iOff = iOff + sqlite3_int64(u32(8)+(*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 48570 __11: 48571 ; 48572 goto __9 48573 __9: 48574 ii++ 48575 goto __8 48576 goto __10 48577 __10: 48578 ; 48579 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))) 48580 goto __2 48581 __3: 48582 ; 48583 finish_rjf: 48584 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 48585 sqlite3.Xsqlite3_free(tls, aPage) 48586 if !(rc == SQLITE_IOERR|int32(2)<<8) { 48587 goto __15 48588 } 48589 rc = SQLITE_OK 48590 __15: 48591 ; 48592 return rc 48593 } 48594 48595 func jtWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48596 var rc int32 48597 var p uintptr = pFile 48598 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 48599 if iOfst == int64(0) { 48600 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48601 48602 if iAmt == 28 { 48603 closeTransaction(tls, pMain) 48604 } else if iAmt != 12 { 48605 var z uintptr = zBuf 48606 (*jt_file)(unsafe.Pointer(pMain)).FnPage = decodeUint32(tls, z+16) 48607 (*jt_file)(unsafe.Pointer(pMain)).FnPagesize = decodeUint32(tls, z+24) 48608 if SQLITE_OK != libc.AssignInt32(&rc, openTransaction(tls, pMain, p)) { 48609 return rc 48610 } 48611 } 48612 } 48613 if (*jt_file)(unsafe.Pointer(p)).FiMaxOff < iOfst+sqlite_int64(iAmt) { 48614 (*jt_file)(unsafe.Pointer(p)).FiMaxOff = iOfst + sqlite_int64(iAmt) 48615 } 48616 } 48617 48618 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 48619 if iAmt < int32((*jt_file)(unsafe.Pointer(p)).FnPagesize) && 48620 (*jt_file)(unsafe.Pointer(p)).FnPagesize%u32(iAmt) == u32(0) && 48621 iOfst >= sqlite_int64(sqlite3.Xsqlite3PendingByte+512) && 48622 iOfst+sqlite_int64(iAmt) <= sqlite_int64(u32(sqlite3.Xsqlite3PendingByte)+(*jt_file)(unsafe.Pointer(p)).FnPagesize) { 48623 } else { 48624 var pgno u32 = u32(iOfst/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)) 48625 _ = pgno 48626 48627 } 48628 } 48629 48630 rc = sqlite3.Xsqlite3OsWrite(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48631 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && iAmt == 12 { 48632 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48633 var rc2 int32 = readJournalFile(tls, p, pMain) 48634 if rc == SQLITE_OK { 48635 rc = rc2 48636 } 48637 } 48638 return rc 48639 } 48640 48641 func jtTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 48642 var p uintptr = pFile 48643 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && size == int64(0) { 48644 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48645 closeTransaction(tls, pMain) 48646 } 48647 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 48648 var pgno u32 48649 var locking_page u32 = u32(sqlite3.Xsqlite3PendingByte)/(*jt_file)(unsafe.Pointer(p)).FnPagesize + u32(1) 48650 _ = locking_page 48651 for pgno = u32(size/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)); pgno <= (*jt_file)(unsafe.Pointer(p)).FnPage; pgno++ { 48652 } 48653 } 48654 return sqlite3.Xsqlite3OsTruncate(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, size) 48655 } 48656 48657 func jtSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 48658 var p uintptr = pFile 48659 48660 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 48661 var rc int32 48662 var pMain uintptr 48663 48664 pMain = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48665 48666 if pMain != 0 && (*jt_file)(unsafe.Pointer(pMain)).FpWritable != 0 { 48667 (*jt_file)(unsafe.Pointer(pMain)).FnSync++ 48668 rc = readJournalFile(tls, p, pMain) 48669 if rc != SQLITE_OK { 48670 return rc 48671 } 48672 } 48673 } 48674 48675 return sqlite3.Xsqlite3OsSync(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, flags) 48676 } 48677 48678 func jtFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 48679 var p uintptr = pFile 48680 return sqlite3.Xsqlite3OsFileSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pSize) 48681 } 48682 48683 func jtLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48684 var rc int32 48685 var p uintptr = pFile 48686 rc = sqlite3.Xsqlite3OsLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 48687 if rc == SQLITE_OK && eLock > (*jt_file)(unsafe.Pointer(p)).FeLock { 48688 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 48689 } 48690 return rc 48691 } 48692 48693 func jtUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48694 var rc int32 48695 var p uintptr = pFile 48696 rc = sqlite3.Xsqlite3OsUnlock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 48697 if rc == SQLITE_OK && eLock < (*jt_file)(unsafe.Pointer(p)).FeLock { 48698 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 48699 } 48700 return rc 48701 } 48702 48703 func jtCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 48704 var p uintptr = pFile 48705 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pResOut) 48706 } 48707 48708 func jtFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 48709 var p uintptr = pFile 48710 return (*struct { 48711 f func(*libc.TLS, uintptr, int32, uintptr) int32 48712 })(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) 48713 } 48714 48715 func jtSectorSize(tls *libc.TLS, pFile uintptr) int32 { 48716 var p uintptr = pFile 48717 return sqlite3.Xsqlite3OsSectorSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48718 } 48719 48720 func jtDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 48721 var p uintptr = pFile 48722 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48723 } 48724 48725 func jtOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 48726 var rc int32 48727 var p uintptr = pFile 48728 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 48729 (*jt_file)(unsafe.Pointer(p)).FpReal = p + 1*52 48730 (*sqlite3_file)(unsafe.Pointer((*jt_file)(unsafe.Pointer(p)).FpReal)).FpMethods = uintptr(0) 48731 rc = sqlite3.Xsqlite3OsOpen(tls, g2.FpVfs, zName, (*jt_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 48732 48733 if rc == SQLITE_OK { 48734 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&jt_io_methods)) 48735 (*jt_file)(unsafe.Pointer(p)).FeLock = 0 48736 (*jt_file)(unsafe.Pointer(p)).FzName = zName 48737 (*jt_file)(unsafe.Pointer(p)).Fflags = flags 48738 (*jt_file)(unsafe.Pointer(p)).FpNext = uintptr(0) 48739 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 48740 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 48741 enterJtMutex(tls) 48742 if zName != 0 { 48743 (*jt_file)(unsafe.Pointer(p)).FpNext = g2.FpList 48744 g2.FpList = p 48745 } 48746 leaveJtMutex(tls) 48747 } 48748 return rc 48749 } 48750 48751 func jtDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 48752 var nPath int32 = int32(libc.Xstrlen(tls, zPath)) 48753 if nPath > 8 && 0 == libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nPath-8)) { 48754 var pMain uintptr = locateDatabaseHandle(tls, zPath, 0) 48755 if pMain != 0 { 48756 closeTransaction(tls, pMain) 48757 } 48758 } 48759 48760 return sqlite3.Xsqlite3OsDelete(tls, g2.FpVfs, zPath, dirSync) 48761 } 48762 48763 func jtAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 48764 return sqlite3.Xsqlite3OsAccess(tls, g2.FpVfs, zPath, flags, pResOut) 48765 } 48766 48767 func jtFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 48768 return sqlite3.Xsqlite3OsFullPathname(tls, g2.FpVfs, zPath, nOut, zOut) 48769 } 48770 48771 func jtDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 48772 return (*struct { 48773 f func(*libc.TLS, uintptr, uintptr) uintptr 48774 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlOpen})).f(tls, g2.FpVfs, zPath) 48775 } 48776 48777 func jtDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 48778 (*struct { 48779 f func(*libc.TLS, uintptr, int32, uintptr) 48780 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlError})).f(tls, g2.FpVfs, nByte, zErrMsg) 48781 } 48782 48783 func jtDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 48784 return (*struct { 48785 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 48786 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlSym})).f(tls, g2.FpVfs, p, zSym) 48787 } 48788 48789 func jtDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 48790 (*struct { 48791 f func(*libc.TLS, uintptr, uintptr) 48792 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlClose})).f(tls, g2.FpVfs, pHandle) 48793 } 48794 48795 func jtRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 48796 return sqlite3.Xsqlite3OsRandomness(tls, g2.FpVfs, nByte, zBufOut) 48797 } 48798 48799 func jtSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 48800 return sqlite3.Xsqlite3OsSleep(tls, g2.FpVfs, nMicro) 48801 } 48802 48803 func jtCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48804 return (*struct { 48805 f func(*libc.TLS, uintptr, uintptr) int32 48806 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTime})).f(tls, g2.FpVfs, pTimeOut) 48807 } 48808 48809 func jtCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48810 return (*struct { 48811 f func(*libc.TLS, uintptr, uintptr) int32 48812 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64})).f(tls, g2.FpVfs, pTimeOut) 48813 } 48814 48815 func jtGetLastError(tls *libc.TLS, pVfs uintptr, n int32, z uintptr) int32 { 48816 return (*struct { 48817 f func(*libc.TLS, uintptr, int32, uintptr) int32 48818 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxGetLastError})).f(tls, g2.FpVfs, n, z) 48819 } 48820 48821 func jt_register(tls *libc.TLS, zWrap uintptr, isDefault int32) int32 { 48822 g2.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, zWrap) 48823 if g2.FpVfs == uintptr(0) { 48824 return SQLITE_ERROR 48825 } 48826 jt_vfs.FszOsFile = int32(uint32(unsafe.Sizeof(jt_file{})) + uint32((*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FszOsFile)) 48827 if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FiVersion == 1 { 48828 jt_vfs.FiVersion = 1 48829 } else if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64 == uintptr(0) { 48830 jt_vfs.FxCurrentTimeInt64 = uintptr(0) 48831 } 48832 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&jt_vfs)), isDefault) 48833 return SQLITE_OK 48834 } 48835 48836 func jt_unregister(tls *libc.TLS) { 48837 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&jt_vfs))) 48838 } 48839 48840 type MemFault = struct { 48841 FiCountdown int32 48842 FnRepeat int32 48843 FnBenign int32 48844 FnFail int32 48845 FnOkBefore int32 48846 FnOkAfter int32 48847 Fenable u8 48848 F__ccgo_pad1 [3]byte 48849 FisInstalled int32 48850 FisBenignMode int32 48851 Fm sqlite3_mem_methods 48852 } 48853 48854 var memfault MemFault 48855 48856 func sqlite3Fault(tls *libc.TLS) { 48857 cnt1++ 48858 } 48859 48860 var cnt1 int32 = 0 48861 48862 func sqlite3FirstFault(tls *libc.TLS) { 48863 cnt2++ 48864 } 48865 48866 var cnt2 int32 = 0 48867 48868 func faultsimStep(tls *libc.TLS) int32 { 48869 if !(int32(memfault.Fenable) != 0) { 48870 memfault.FnOkAfter++ 48871 return 0 48872 } 48873 if memfault.FiCountdown > 0 { 48874 memfault.FiCountdown-- 48875 memfault.FnOkBefore++ 48876 return 0 48877 } 48878 if memfault.FnFail == 0 { 48879 sqlite3FirstFault(tls) 48880 } 48881 sqlite3Fault(tls) 48882 memfault.FnFail++ 48883 if memfault.FisBenignMode > 0 { 48884 memfault.FnBenign++ 48885 } 48886 memfault.FnRepeat-- 48887 if memfault.FnRepeat <= 0 { 48888 memfault.Fenable = u8(0) 48889 } 48890 return 1 48891 } 48892 48893 func faultsimMalloc(tls *libc.TLS, n int32) uintptr { 48894 var p uintptr = uintptr(0) 48895 if !(faultsimStep(tls) != 0) { 48896 p = (*struct { 48897 f func(*libc.TLS, int32) uintptr 48898 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxMalloc})).f(tls, n) 48899 } 48900 return p 48901 } 48902 48903 func faultsimRealloc(tls *libc.TLS, pOld uintptr, n int32) uintptr { 48904 var p uintptr = uintptr(0) 48905 if !(faultsimStep(tls) != 0) { 48906 p = (*struct { 48907 f func(*libc.TLS, uintptr, int32) uintptr 48908 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxRealloc})).f(tls, pOld, n) 48909 } 48910 return p 48911 } 48912 48913 func faultsimConfig(tls *libc.TLS, nDelay int32, nRepeat int32) { 48914 memfault.FiCountdown = nDelay 48915 memfault.FnRepeat = nRepeat 48916 memfault.FnBenign = 0 48917 memfault.FnFail = 0 48918 memfault.FnOkBefore = 0 48919 memfault.FnOkAfter = 0 48920 memfault.Fenable = u8(libc.Bool32(nDelay >= 0)) 48921 48922 memfault.FisBenignMode = 0 48923 } 48924 48925 func faultsimFailures(tls *libc.TLS) int32 { 48926 return memfault.FnFail 48927 } 48928 48929 func faultsimBenignFailures(tls *libc.TLS) int32 { 48930 return memfault.FnBenign 48931 } 48932 48933 func faultsimPending(tls *libc.TLS) int32 { 48934 if memfault.Fenable != 0 { 48935 return memfault.FiCountdown 48936 } else { 48937 return -1 48938 } 48939 return int32(0) 48940 } 48941 48942 func faultsimBeginBenign(tls *libc.TLS) { 48943 memfault.FisBenignMode++ 48944 } 48945 48946 func faultsimEndBenign(tls *libc.TLS) { 48947 memfault.FisBenignMode-- 48948 } 48949 48950 func faultsimInstall(tls *libc.TLS, install int32) int32 { 48951 bp := tls.Alloc(136) 48952 defer tls.Free(136) 48953 48954 var rc int32 48955 48956 install = func() int32 { 48957 if install != 0 { 48958 return 1 48959 } 48960 return 0 48961 }() 48962 48963 if install == memfault.FisInstalled { 48964 return SQLITE_ERROR 48965 } 48966 48967 if install != 0 { 48968 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp, uintptr(unsafe.Pointer(&memfault))+36)) 48969 48970 if rc == SQLITE_OK { 48971 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)) = memfault.Fm 48972 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxMalloc = *(*uintptr)(unsafe.Pointer(&struct { 48973 f func(*libc.TLS, int32) uintptr 48974 }{faultsimMalloc})) 48975 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxRealloc = *(*uintptr)(unsafe.Pointer(&struct { 48976 f func(*libc.TLS, uintptr, int32) uintptr 48977 }{faultsimRealloc})) 48978 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, bp+72)) 48979 } 48980 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 48981 libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimBeginBenign})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimEndBenign})))) 48982 } else { 48983 libc.Xmemset(tls, bp+104, 0, uint32(unsafe.Sizeof(sqlite3_mem_methods{}))) 48984 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+104)) 48985 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+40, bp+104)) 48986 48987 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+48, uintptr(unsafe.Pointer(&memfault))+36)) 48988 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 48989 libc.VaList(bp+56, uintptr(0), uintptr(0))) 48990 } 48991 48992 if rc == SQLITE_OK { 48993 memfault.FisInstalled = 1 48994 } 48995 return rc 48996 } 48997 48998 func pointerToText(tls *libc.TLS, p uintptr, z uintptr) { 48999 bp := tls.Alloc(16) 49000 defer tls.Free(16) 49001 *(*uintptr)(unsafe.Pointer(bp + 8)) = p 49002 49003 var i int32 49004 var k int32 49005 49006 if *(*uintptr)(unsafe.Pointer(bp + 8)) == uintptr(0) { 49007 libc.Xstrcpy(tls, z, ts+14193) 49008 return 49009 } 49010 if uint32(unsafe.Sizeof(sqlite3_uint64(0))) == uint32(unsafe.Sizeof(uintptr(0))) { 49011 libc.Xmemcpy(tls, bp, bp+8, uint32(unsafe.Sizeof(uintptr(0)))) 49012 } else if uint32(unsafe.Sizeof(uint32(0))) == uint32(unsafe.Sizeof(uintptr(0))) { 49013 libc.Xmemcpy(tls, bp+12, bp+8, uint32(unsafe.Sizeof(uint32(0)))) 49014 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = sqlite3_uint64(*(*uint32)(unsafe.Pointer(bp + 12))) 49015 } else { 49016 } 49017 i = 0 49018 k = int32(uint32(unsafe.Sizeof(uintptr(0)))*uint32(2) - uint32(1)) 49019 __1: 49020 if !(uint32(i) < uint32(unsafe.Sizeof(uintptr(0)))*uint32(2)) { 49021 goto __3 49022 } 49023 { 49024 *(*int8)(unsafe.Pointer(z + uintptr(k))) = zHex[*(*sqlite3_uint64)(unsafe.Pointer(bp))&uint64(0xf)] 49025 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 4 49026 49027 } 49028 goto __2 49029 __2: 49030 i++ 49031 k-- 49032 goto __1 49033 goto __3 49034 __3: 49035 ; 49036 *(*int8)(unsafe.Pointer(z + 8)) = int8(0) 49037 } 49038 49039 var zHex = *(*[17]int8)(unsafe.Pointer(ts + 31194)) 49040 49041 func hexToInt(tls *libc.TLS, h int32) int32 { 49042 if h >= '0' && h <= '9' { 49043 return h - '0' 49044 } else if h >= 'a' && h <= 'f' { 49045 return h - 'a' + 10 49046 } else { 49047 return -1 49048 } 49049 return int32(0) 49050 } 49051 49052 func textToPointer(tls *libc.TLS, z uintptr, pp uintptr) int32 { 49053 bp := tls.Alloc(12) 49054 defer tls.Free(12) 49055 49056 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(0) 49057 var i int32 49058 49059 for i = 0; uint32(i) < uint32(unsafe.Sizeof(uintptr(0)))*uint32(2) && *(*int8)(unsafe.Pointer(z)) != 0; i++ { 49060 var v int32 49061 v = hexToInt(tls, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) 49062 if v < 0 { 49063 return TCL_ERROR 49064 } 49065 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = *(*sqlite3_uint64)(unsafe.Pointer(bp))*uint64(16) + sqlite3_uint64(v) 49066 } 49067 if int32(*(*int8)(unsafe.Pointer(z))) != 0 { 49068 return TCL_ERROR 49069 } 49070 if uint32(unsafe.Sizeof(sqlite3_uint64(0))) == uint32(unsafe.Sizeof(uintptr(0))) { 49071 libc.Xmemcpy(tls, pp, bp, uint32(unsafe.Sizeof(sqlite3_uint64(0)))) 49072 } else if uint32(unsafe.Sizeof(uint32(0))) == uint32(unsafe.Sizeof(uintptr(0))) { 49073 *(*uint32)(unsafe.Pointer(bp + 8)) = uint32(*(*sqlite3_uint64)(unsafe.Pointer(bp))) 49074 libc.Xmemcpy(tls, pp, bp+8, uint32(unsafe.Sizeof(uint32(0)))) 49075 } else { 49076 } 49077 return TCL_OK 49078 } 49079 49080 func test_malloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49081 bp := tls.Alloc(120) 49082 defer tls.Free(120) 49083 49084 var p uintptr 49085 49086 if objc != 2 { 49087 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32817) 49088 return TCL_ERROR 49089 } 49090 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16) != 0 { 49091 return TCL_ERROR 49092 } 49093 p = sqlite3.Xsqlite3_malloc(tls, int32(uint32(*(*int32)(unsafe.Pointer(bp + 16))))) 49094 pointerToText(tls, p, bp+20) 49095 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+20, uintptr(0))) 49096 return TCL_OK 49097 } 49098 49099 func test_realloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49100 bp := tls.Alloc(148) 49101 defer tls.Free(148) 49102 49103 var p uintptr 49104 49105 if objc != 3 { 49106 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32824) 49107 return TCL_ERROR 49108 } 49109 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+40) != 0 { 49110 return TCL_ERROR 49111 } 49112 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+44) != 0 { 49113 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), uintptr(0))) 49114 return TCL_ERROR 49115 } 49116 p = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(bp + 44)), int32(uint32(*(*int32)(unsafe.Pointer(bp + 40))))) 49117 pointerToText(tls, p, bp+48) 49118 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+48, uintptr(0))) 49119 return TCL_OK 49120 } 49121 49122 func test_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49123 bp := tls.Alloc(28) 49124 defer tls.Free(28) 49125 49126 if objc != 2 { 49127 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32851) 49128 return TCL_ERROR 49129 } 49130 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+24) != 0 { 49131 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), uintptr(0))) 49132 return TCL_ERROR 49133 } 49134 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 49135 return TCL_OK 49136 } 49137 49138 func test_memset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49139 bp := tls.Alloc(168) 49140 defer tls.Free(168) 49141 49142 var i int32 49143 var zHex uintptr 49144 var zOut uintptr 49145 49146 if objc != 4 { 49147 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32857) 49148 return TCL_ERROR 49149 } 49150 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+56) != 0 { 49151 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), uintptr(0))) 49152 return TCL_ERROR 49153 } 49154 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+60) != 0 { 49155 return TCL_ERROR 49156 } 49157 if *(*int32)(unsafe.Pointer(bp + 60)) <= 0 { 49158 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 49159 return TCL_ERROR 49160 } 49161 zHex = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+64) 49162 if uint32(*(*int32)(unsafe.Pointer(bp + 64))) > uint32(unsafe.Sizeof([100]int8{}))*uint32(2) { 49163 *(*int32)(unsafe.Pointer(bp + 64)) = int32(uint32(unsafe.Sizeof([100]int8{})) * uint32(2)) 49164 } 49165 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3TestHexToBin(tls, zHex, *(*int32)(unsafe.Pointer(bp + 64)), bp+68) 49166 if *(*int32)(unsafe.Pointer(bp + 64)) == 0 { 49167 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+32896, uintptr(0))) 49168 return TCL_ERROR 49169 } 49170 zOut = *(*uintptr)(unsafe.Pointer(bp + 56)) 49171 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 60)); i++ { 49172 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = *(*int8)(unsafe.Pointer(bp + 68 + uintptr(i%*(*int32)(unsafe.Pointer(bp + 64))))) 49173 } 49174 return TCL_OK 49175 } 49176 49177 func test_memget(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49178 bp := tls.Alloc(164) 49179 defer tls.Free(164) 49180 49181 var n int32 49182 var zBin uintptr 49183 49184 if objc != 3 { 49185 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32904) 49186 return TCL_ERROR 49187 } 49188 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+56) != 0 { 49189 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), uintptr(0))) 49190 return TCL_ERROR 49191 } 49192 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+60) != 0 { 49193 return TCL_ERROR 49194 } 49195 if *(*int32)(unsafe.Pointer(bp + 60)) <= 0 { 49196 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 49197 return TCL_ERROR 49198 } 49199 zBin = *(*uintptr)(unsafe.Pointer(bp + 56)) 49200 for *(*int32)(unsafe.Pointer(bp + 60)) > 0 { 49201 if uint32(*(*int32)(unsafe.Pointer(bp + 60))) > (uint32(unsafe.Sizeof([100]int8{}))-uint32(1))/uint32(2) { 49202 n = int32((uint32(unsafe.Sizeof([100]int8{})) - uint32(1)) / uint32(2)) 49203 } else { 49204 n = *(*int32)(unsafe.Pointer(bp + 60)) 49205 } 49206 libc.Xmemcpy(tls, bp+64, zBin, uint32(n)) 49207 zBin += uintptr(n) 49208 *(*int32)(unsafe.Pointer(bp + 60)) -= n 49209 sqlite3TestBinToHex(tls, bp+64, n) 49210 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, uintptr(0))) 49211 } 49212 return TCL_OK 49213 } 49214 49215 func test_memory_used(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49216 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_used(tls))) 49217 return TCL_OK 49218 } 49219 49220 func test_memory_highwater(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49221 bp := tls.Alloc(4) 49222 defer tls.Free(4) 49223 49224 *(*int32)(unsafe.Pointer(bp)) = 0 49225 if objc != 1 && objc != 2 { 49226 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32917) 49227 return TCL_ERROR 49228 } 49229 if objc == 2 { 49230 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 49231 return TCL_ERROR 49232 } 49233 } 49234 tcl.XTcl_SetObjResult(tls, interp, 49235 tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_highwater(tls, *(*int32)(unsafe.Pointer(bp))))) 49236 return TCL_OK 49237 } 49238 49239 func test_memdebug_backtrace(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49240 bp := tls.Alloc(4) 49241 defer tls.Free(4) 49242 49243 if objc != 2 { 49244 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32925) 49245 return TCL_ERROR 49246 } 49247 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 49248 return TCL_ERROR 49249 } 49250 return TCL_OK 49251 } 49252 49253 func test_memdebug_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49254 if objc != 2 { 49255 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49256 return TCL_ERROR 49257 } 49258 return TCL_OK 49259 } 49260 49261 func test_memdebug_malloc_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49262 var nMalloc int32 = -1 49263 if objc != 1 { 49264 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 49265 return TCL_ERROR 49266 } 49267 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nMalloc)) 49268 return TCL_OK 49269 } 49270 49271 func test_memdebug_fail(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49272 bp := tls.Alloc(36) 49273 defer tls.Free(36) 49274 49275 var ii int32 49276 49277 *(*int32)(unsafe.Pointer(bp + 32)) = 1 49278 var pBenignCnt uintptr = uintptr(0) 49279 var nBenign int32 49280 var nFail int32 = 0 49281 49282 if objc < 2 { 49283 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32939) 49284 return TCL_ERROR 49285 } 49286 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+24) != 0 { 49287 return TCL_ERROR 49288 } 49289 49290 for ii = 2; ii < objc; ii = ii + 2 { 49291 var zOption uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii)*4)), bp+28) 49292 var zErr uintptr = uintptr(0) 49293 49294 if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32957, uint32(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 49295 if ii == objc-1 { 49296 zErr = ts + 12638 49297 } else { 49298 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*4)), bp+32) != 0 { 49299 return TCL_ERROR 49300 } 49301 } 49302 } else if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32965, uint32(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 49303 if ii == objc-1 { 49304 zErr = ts + 12638 49305 } else { 49306 pBenignCnt = *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*4)) 49307 } 49308 } else { 49309 zErr = ts + 12444 49310 } 49311 49312 if zErr != 0 { 49313 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErr, zOption, 0)) 49314 return TCL_ERROR 49315 } 49316 } 49317 49318 nBenign = faultsimBenignFailures(tls) 49319 nFail = faultsimFailures(tls) 49320 faultsimConfig(tls, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32))) 49321 49322 if pBenignCnt != 0 { 49323 tcl.XTcl_ObjSetVar2(tls, interp, pBenignCnt, uintptr(0), tcl.XTcl_NewIntObj(tls, nBenign), 0) 49324 } 49325 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nFail)) 49326 return TCL_OK 49327 } 49328 49329 func test_memdebug_pending(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49330 var nPending int32 49331 if objc != 1 { 49332 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 49333 return TCL_ERROR 49334 } 49335 nPending = faultsimPending(tls) 49336 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPending)) 49337 return TCL_OK 49338 } 49339 49340 var sqlite3_memdebug_title_count int32 = 0 49341 49342 func test_memdebug_settitle(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49343 sqlite3_memdebug_title_count++ 49344 if objc != 2 { 49345 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32976) 49346 return TCL_ERROR 49347 } 49348 return TCL_OK 49349 } 49350 49351 var aMallocLog Tcl_HashTable 49352 var mallocLogEnabled int32 = 0 49353 49354 type MallocLog1 = struct { 49355 FnCall int32 49356 FnByte int32 49357 } 49358 49359 type MallocLog = MallocLog1 49360 49361 func test_memdebug_log_clear(tls *libc.TLS) { 49362 bp := tls.Alloc(12) 49363 defer tls.Free(12) 49364 49365 var pEntry uintptr 49366 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp) { 49367 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 49368 tcl.XTcl_Free(tls, pLog) 49369 } 49370 tcl.XTcl_DeleteHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog))) 49371 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint32(10)*func() uint32 { 49372 if uint32(unsafe.Sizeof(int32(0))) >= uint32(unsafe.Sizeof(uintptr(0))) { 49373 return uint32(1) 49374 } 49375 return uint32(unsafe.Sizeof(uintptr(0))) / uint32(unsafe.Sizeof(int32(0))) 49376 }())) 49377 } 49378 49379 func test_memdebug_log(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49380 bp := tls.Alloc(64) 49381 defer tls.Free(64) 49382 49383 if !(isInit != 0) { 49384 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint32(10)*func() uint32 { 49385 if uint32(unsafe.Sizeof(int32(0))) >= uint32(unsafe.Sizeof(uintptr(0))) { 49386 return uint32(1) 49387 } 49388 return uint32(unsafe.Sizeof(uintptr(0))) / uint32(unsafe.Sizeof(int32(0))) 49389 }())) 49390 isInit = 1 49391 } 49392 49393 if objc < 2 { 49394 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 49395 } 49396 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(unsafe.Pointer(&MB_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp) != 0 { 49397 return TCL_ERROR 49398 } 49399 49400 switch uint32(*(*int32)(unsafe.Pointer(bp))) { 49401 case uint32(0): 49402 mallocLogEnabled = 1 49403 break 49404 case uint32(1): 49405 mallocLogEnabled = 0 49406 break 49407 case uint32(2): 49408 { 49409 var pEntry uintptr 49410 var pRet uintptr = tcl.XTcl_NewObj(tls) 49411 49412 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp+4); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp+4) { 49413 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 49414 var aKey uintptr = func() uintptr { 49415 if (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == 1 || (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == -1 { 49416 return *(*uintptr)(unsafe.Pointer(pEntry + 16)) 49417 } 49418 return pEntry + 16 49419 }() 49420 var ii int32 49421 49422 *(*uintptr)(unsafe.Pointer(bp + 16)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnCall) 49423 *(*uintptr)(unsafe.Pointer(bp + 16 + 1*4)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnByte) 49424 for ii = 0; ii < MALLOC_LOG_FRAMES; ii++ { 49425 *(*uintptr)(unsafe.Pointer(bp + 16 + uintptr(ii+2)*4)) = tcl.XTcl_NewWideIntObj(tls, *(*Tcl_WideInt)(unsafe.Pointer(aKey + uintptr(ii)*8))) 49426 } 49427 49428 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, 49429 tcl.XTcl_NewListObj(tls, MALLOC_LOG_FRAMES+2, bp+16)) 49430 } 49431 49432 tcl.XTcl_SetObjResult(tls, interp, pRet) 49433 break 49434 49435 } 49436 case uint32(3): 49437 { 49438 test_memdebug_log_clear(tls) 49439 break 49440 49441 } 49442 49443 case uint32(4): 49444 { 49445 break 49446 49447 } 49448 } 49449 49450 return TCL_OK 49451 } 49452 49453 var isInit int32 = 0 49454 var MB_strs = [5]uintptr{ts + 32998, ts + 33004, ts + 33009, ts + 33014, ts + 33020} 49455 49456 func test_config_pagecache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49457 bp := tls.Alloc(56) 49458 defer tls.Free(56) 49459 49460 var pRes uintptr 49461 if objc != 3 { 49462 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33025) 49463 return TCL_ERROR 49464 } 49465 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+48) != 0 { 49466 return TCL_ERROR 49467 } 49468 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+52) != 0 { 49469 return TCL_ERROR 49470 } 49471 libc.Xfree(tls, buf1) 49472 buf1 = uintptr(0) 49473 49474 pRes = tcl.XTcl_NewObj(tls) 49475 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszPage)) 49476 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnPage)) 49477 tcl.XTcl_SetObjResult(tls, interp, pRes) 49478 49479 if *(*int32)(unsafe.Pointer(bp + 48)) < 0 { 49480 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp, uintptr(0), 0, 0)) 49481 } else { 49482 buf1 = libc.Xmalloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 48))**(*int32)(unsafe.Pointer(bp + 52)))) 49483 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp+24, buf1, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 49484 } 49485 return TCL_OK 49486 } 49487 49488 var buf1 uintptr = uintptr(0) 49489 49490 func test_alt_pcache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49491 bp := tls.Alloc(32) 49492 defer tls.Free(32) 49493 49494 *(*int32)(unsafe.Pointer(bp + 20)) = 0 49495 *(*int32)(unsafe.Pointer(bp + 24)) = 0 49496 *(*int32)(unsafe.Pointer(bp + 28)) = 0 49497 if objc < 2 || objc > 5 { 49498 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 49499 ts+33032) 49500 return TCL_ERROR 49501 } 49502 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16) != 0 { 49503 return TCL_ERROR 49504 } 49505 if objc >= 3 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+20) != 0 { 49506 return TCL_ERROR 49507 } 49508 if objc >= 4 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+24) != 0 { 49509 return TCL_ERROR 49510 } 49511 if objc >= 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+28) != 0 { 49512 return TCL_ERROR 49513 } 49514 if *(*int32)(unsafe.Pointer(bp + 20)) < 0 || *(*int32)(unsafe.Pointer(bp + 20)) > 100 { 49515 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33079, 49516 uintptr(0))) 49517 return TCL_ERROR 49518 } 49519 installTestPCache(tls, *(*int32)(unsafe.Pointer(bp + 16)), uint32(*(*int32)(unsafe.Pointer(bp + 20))), uint32(*(*int32)(unsafe.Pointer(bp + 24))), 49520 uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 49521 return TCL_OK 49522 } 49523 49524 func test_config_memstatus(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49525 bp := tls.Alloc(12) 49526 defer tls.Free(12) 49527 49528 var rc int32 49529 if objc != 2 { 49530 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 49531 return TCL_ERROR 49532 } 49533 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+8) != 0 { 49534 return TCL_ERROR 49535 } 49536 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MEMSTATUS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49537 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 49538 return TCL_OK 49539 } 49540 49541 func test_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49542 bp := tls.Alloc(24) 49543 defer tls.Free(24) 49544 49545 var pRet uintptr 49546 if objc != 3 { 49547 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33122) 49548 return TCL_ERROR 49549 } 49550 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16) != 0 { 49551 return TCL_ERROR 49552 } 49553 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+20) != 0 { 49554 return TCL_ERROR 49555 } 49556 pRet = tcl.XTcl_NewObj(tls) 49557 tcl.XTcl_ListObjAppendElement(tls, 49558 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszLookaside)) 49559 tcl.XTcl_ListObjAppendElement(tls, 49560 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnLookaside)) 49561 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOOKASIDE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 20)))) 49562 tcl.XTcl_SetObjResult(tls, interp, pRet) 49563 return TCL_OK 49564 } 49565 49566 func test_db_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49567 bp := tls.Alloc(80) 49568 defer tls.Free(80) 49569 49570 var rc int32 49571 49572 if objc != 5 { 49573 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33133) 49574 return TCL_ERROR 49575 } 49576 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+64) != 0 { 49577 return TCL_ERROR 49578 } 49579 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+68) != 0 { 49580 return TCL_ERROR 49581 } 49582 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+72) != 0 { 49583 return TCL_ERROR 49584 } 49585 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+76) != 0 { 49586 return TCL_ERROR 49587 } 49588 if *(*int32)(unsafe.Pointer(bp + 68)) == 0 { 49589 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), SQLITE_DBCONFIG_LOOKASIDE, libc.VaList(bp, uintptr(0), *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 76)))) 49590 } else if *(*int32)(unsafe.Pointer(bp + 68)) >= 1 && *(*int32)(unsafe.Pointer(bp + 68)) <= 2 && uint32(*(*int32)(unsafe.Pointer(bp + 72))**(*int32)(unsafe.Pointer(bp + 76))) <= uint32(unsafe.Sizeof([10000]int8{})) { 49591 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 + 68)))*10000, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 76)))) 49592 } else { 49593 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+33150, uintptr(0))) 49594 return TCL_ERROR 49595 } 49596 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 49597 return TCL_OK 49598 } 49599 49600 var azBuf [2][10000]int8 49601 49602 func test_config_heap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49603 bp := tls.Alloc(56) 49604 defer tls.Free(56) 49605 49606 var rc int32 49607 49608 var aArg uintptr = objv + 1*4 49609 var nArg int32 = objc - 1 49610 49611 if nArg != 2 { 49612 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33188) 49613 return TCL_ERROR 49614 } 49615 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+48) != 0 { 49616 return TCL_ERROR 49617 } 49618 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg + 1*4)), bp+52) != 0 { 49619 return TCL_ERROR 49620 } 49621 49622 if *(*int32)(unsafe.Pointer(bp + 48)) == 0 { 49623 libc.Xfree(tls, zBuf) 49624 zBuf = uintptr(0) 49625 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp, uintptr(0), 0, 0)) 49626 } else { 49627 zBuf = libc.Xrealloc(tls, zBuf, uint32(*(*int32)(unsafe.Pointer(bp + 48)))) 49628 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp+24, zBuf, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 49629 } 49630 49631 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49632 return TCL_OK 49633 } 49634 49635 var zBuf uintptr 49636 49637 func test_config_heap_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49638 bp := tls.Alloc(12) 49639 defer tls.Free(12) 49640 49641 var rc int32 49642 49643 var aArg uintptr = objv + 1*4 49644 var nArg int32 = objc - 1 49645 49646 if nArg != 1 { 49647 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 49648 return TCL_ERROR 49649 } 49650 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+8) != 0 { 49651 return TCL_ERROR 49652 } 49653 49654 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_WIN32_HEAPSIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49655 49656 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49657 return TCL_OK 49658 } 49659 49660 func test_config_error(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49661 bp := tls.Alloc(36) 49662 defer tls.Free(36) 49663 49664 if objc != 2 && objc != 1 { 49665 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33204) 49666 return TCL_ERROR 49667 } 49668 if objc == 2 { 49669 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+32) != 0 { 49670 return TCL_ERROR 49671 } 49672 if sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 99999, 0) != SQLITE_ERROR { 49673 tcl.XTcl_AppendResult(tls, interp, 49674 libc.VaList(bp, ts+33209, 49675 uintptr(0))) 49676 return TCL_ERROR 49677 } 49678 } else { 49679 if sqlite3.Xsqlite3_config(tls, 99999, 0) != SQLITE_ERROR { 49680 tcl.XTcl_AppendResult(tls, interp, 49681 libc.VaList(bp+16, ts+33267, 49682 uintptr(0))) 49683 return TCL_ERROR 49684 } 49685 } 49686 return TCL_OK 49687 } 49688 49689 func test_config_uri(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49690 bp := tls.Alloc(12) 49691 defer tls.Free(12) 49692 49693 var rc int32 49694 49695 if objc != 2 { 49696 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49697 return TCL_ERROR 49698 } 49699 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+8) != 0 { 49700 return TCL_ERROR 49701 } 49702 49703 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_URI, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49704 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49705 49706 return TCL_OK 49707 } 49708 49709 func test_config_cis(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49710 bp := tls.Alloc(12) 49711 defer tls.Free(12) 49712 49713 var rc int32 49714 49715 if objc != 2 { 49716 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49717 return TCL_ERROR 49718 } 49719 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+8) != 0 { 49720 return TCL_ERROR 49721 } 49722 49723 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_COVERING_INDEX_SCAN, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49724 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49725 49726 return TCL_OK 49727 } 49728 49729 func test_config_pmasz(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49730 bp := tls.Alloc(12) 49731 defer tls.Free(12) 49732 49733 var rc int32 49734 49735 if objc != 2 { 49736 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49737 return TCL_ERROR 49738 } 49739 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+8) != 0 { 49740 return TCL_ERROR 49741 } 49742 49743 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PMASZ, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49744 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49745 49746 return TCL_OK 49747 } 49748 49749 func test_dump_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49750 if objc != 2 { 49751 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49752 return TCL_ERROR 49753 } 49754 49755 switch int32(clientData) { 49756 case 3: 49757 { 49758 } 49759 fallthrough 49760 case 5: 49761 { 49762 } 49763 } 49764 return TCL_OK 49765 } 49766 49767 func test_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49768 bp := tls.Alloc(16) 49769 defer tls.Free(16) 49770 49771 var rc int32 49772 49773 var i int32 49774 *(*int32)(unsafe.Pointer(bp)) = 0 49775 49776 var zOpName uintptr 49777 var pResult uintptr 49778 if objc != 3 { 49779 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33318) 49780 return TCL_ERROR 49781 } 49782 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 49783 for i = 0; i < int32(uint32(unsafe.Sizeof(aOp1))/uint32(unsafe.Sizeof(struct { 49784 FzName uintptr 49785 Fop int32 49786 }{}))); i++ { 49787 if libc.Xstrcmp(tls, aOp1[i].FzName, zOpName) == 0 { 49788 *(*int32)(unsafe.Pointer(bp)) = aOp1[i].Fop 49789 break 49790 } 49791 } 49792 if i >= int32(uint32(unsafe.Sizeof(aOp1))/uint32(unsafe.Sizeof(struct { 49793 FzName uintptr 49794 Fop int32 49795 }{}))) { 49796 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 49797 return TCL_ERROR 49798 } 49799 } 49800 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 49801 return TCL_ERROR 49802 } 49803 *(*int32)(unsafe.Pointer(bp + 8)) = 0 49804 *(*int32)(unsafe.Pointer(bp + 12)) = 0 49805 rc = sqlite3.Xsqlite3_status(tls, *(*int32)(unsafe.Pointer(bp)), bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 4))) 49806 pResult = tcl.XTcl_NewObj(tls) 49807 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 49808 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 49809 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 49810 tcl.XTcl_SetObjResult(tls, interp, pResult) 49811 return TCL_OK 49812 } 49813 49814 var aOp1 = [10]struct { 49815 FzName uintptr 49816 Fop int32 49817 }{ 49818 {FzName: ts + 33338}, 49819 {FzName: ts + 33364, Fop: SQLITE_STATUS_MALLOC_SIZE}, 49820 {FzName: ts + 33390, Fop: SQLITE_STATUS_PAGECACHE_USED}, 49821 {FzName: ts + 33419, Fop: SQLITE_STATUS_PAGECACHE_OVERFLOW}, 49822 {FzName: ts + 33452, Fop: SQLITE_STATUS_PAGECACHE_SIZE}, 49823 {FzName: ts + 33481, Fop: SQLITE_STATUS_SCRATCH_USED}, 49824 {FzName: ts + 33508, Fop: SQLITE_STATUS_SCRATCH_OVERFLOW}, 49825 {FzName: ts + 33539, Fop: SQLITE_STATUS_SCRATCH_SIZE}, 49826 {FzName: ts + 33566, Fop: SQLITE_STATUS_PARSER_STACK}, 49827 {FzName: ts + 33593, Fop: SQLITE_STATUS_MALLOC_COUNT}, 49828 } 49829 49830 func test_db_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49831 bp := tls.Alloc(20) 49832 defer tls.Free(20) 49833 49834 var rc int32 49835 49836 var i int32 49837 *(*int32)(unsafe.Pointer(bp + 4)) = 0 49838 49839 var zOpName uintptr 49840 49841 var pResult uintptr 49842 if objc != 4 { 49843 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33620) 49844 return TCL_ERROR 49845 } 49846 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 49847 return TCL_ERROR 49848 } 49849 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 49850 if libc.Xmemcmp(tls, zOpName, ts+33643, uint32(7)) == 0 { 49851 zOpName += uintptr(7) 49852 } 49853 if libc.Xmemcmp(tls, zOpName, ts+33651, uint32(9)) == 0 { 49854 zOpName += uintptr(9) 49855 } 49856 for i = 0; i < int32(uint32(unsafe.Sizeof(aOp2))/uint32(unsafe.Sizeof(struct { 49857 FzName uintptr 49858 Fop int32 49859 }{}))); i++ { 49860 if libc.Xstrcmp(tls, aOp2[i].FzName, zOpName) == 0 { 49861 *(*int32)(unsafe.Pointer(bp + 4)) = aOp2[i].Fop 49862 break 49863 } 49864 } 49865 if i >= int32(uint32(unsafe.Sizeof(aOp2))/uint32(unsafe.Sizeof(struct { 49866 FzName uintptr 49867 Fop int32 49868 }{}))) { 49869 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+4) != 0 { 49870 return TCL_ERROR 49871 } 49872 } 49873 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+8) != 0 { 49874 return TCL_ERROR 49875 } 49876 *(*int32)(unsafe.Pointer(bp + 12)) = 0 49877 *(*int32)(unsafe.Pointer(bp + 16)) = 0 49878 rc = sqlite3.Xsqlite3_db_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), bp+12, bp+16, *(*int32)(unsafe.Pointer(bp + 8))) 49879 pResult = tcl.XTcl_NewObj(tls) 49880 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 49881 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 49882 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 49883 tcl.XTcl_SetObjResult(tls, interp, pResult) 49884 return TCL_OK 49885 } 49886 49887 var aOp2 = [13]struct { 49888 FzName uintptr 49889 Fop int32 49890 }{ 49891 {FzName: ts + 33661}, 49892 {FzName: ts + 33676, Fop: SQLITE_DBSTATUS_CACHE_USED}, 49893 {FzName: ts + 33687, Fop: SQLITE_DBSTATUS_SCHEMA_USED}, 49894 {FzName: ts + 33699, Fop: SQLITE_DBSTATUS_STMT_USED}, 49895 {FzName: ts + 33709, Fop: SQLITE_DBSTATUS_LOOKASIDE_HIT}, 49896 {FzName: ts + 33723, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE}, 49897 {FzName: ts + 33743, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL}, 49898 {FzName: ts + 33763, Fop: SQLITE_DBSTATUS_CACHE_HIT}, 49899 {FzName: ts + 33773, Fop: SQLITE_DBSTATUS_CACHE_MISS}, 49900 {FzName: ts + 33784, Fop: SQLITE_DBSTATUS_CACHE_WRITE}, 49901 {FzName: ts + 33796, Fop: SQLITE_DBSTATUS_DEFERRED_FKS}, 49902 {FzName: ts + 33809, Fop: SQLITE_DBSTATUS_CACHE_USED_SHARED}, 49903 {FzName: ts + 33827, Fop: SQLITE_DBSTATUS_CACHE_SPILL}, 49904 } 49905 49906 func test_install_malloc_faultsim(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49907 bp := tls.Alloc(4) 49908 defer tls.Free(4) 49909 49910 var rc int32 49911 49912 if objc != 2 { 49913 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 49914 return TCL_ERROR 49915 } 49916 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) { 49917 return TCL_ERROR 49918 } 49919 rc = faultsimInstall(tls, *(*int32)(unsafe.Pointer(bp))) 49920 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49921 return TCL_OK 49922 } 49923 49924 func test_install_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49925 var rc int32 = SQLITE_MISUSE 49926 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49927 return TCL_OK 49928 } 49929 49930 func test_vfs_oom_test(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49931 bp := tls.Alloc(4) 49932 defer tls.Free(4) 49933 49934 if objc > 2 { 49935 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33839) 49936 return TCL_ERROR 49937 } else if objc == 2 { 49938 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp) != 0 { 49939 return TCL_ERROR 49940 } 49941 sqlite3.Xsqlite3_memdebug_vfs_oom_test = *(*int32)(unsafe.Pointer(bp)) 49942 } 49943 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_memdebug_vfs_oom_test)) 49944 return TCL_OK 49945 } 49946 49947 func Sqlitetest_malloc_Init(tls *libc.TLS, interp uintptr) int32 { 49948 var i int32 49949 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd11))/uint32(unsafe.Sizeof(struct { 49950 FzName uintptr 49951 FxProc uintptr 49952 FclientData int32 49953 }{})); i++ { 49954 var c ClientData = uintptr(aObjCmd11[i].FclientData) 49955 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd11[i].FzName, aObjCmd11[i].FxProc, c, uintptr(0)) 49956 } 49957 return TCL_OK 49958 } 49959 49960 var aObjCmd11 = [32]struct { 49961 FzName uintptr 49962 FxProc uintptr 49963 FclientData int32 49964 }{ 49965 {FzName: ts + 28095, FxProc: 0}, 49966 {FzName: ts + 28110, FxProc: 0}, 49967 {FzName: ts + 33849, FxProc: 0}, 49968 {FzName: ts + 33862, FxProc: 0}, 49969 {FzName: ts + 33869, FxProc: 0}, 49970 {FzName: ts + 33876, FxProc: 0}, 49971 {FzName: ts + 33896, FxProc: 0}, 49972 {FzName: ts + 33921, FxProc: 0}, 49973 {FzName: ts + 33948, FxProc: 0}, 49974 {FzName: ts + 33970, FxProc: 0}, 49975 {FzName: ts + 33992, FxProc: 0}, 49976 {FzName: ts + 34017, FxProc: 0}, 49977 {FzName: ts + 34043, FxProc: 0}, 49978 {FzName: ts + 34073, FxProc: 0}, 49979 {FzName: ts + 34094, FxProc: 0}, 49980 {FzName: ts + 34119, FxProc: 0}, 49981 {FzName: ts + 34145, FxProc: 0}, 49982 {FzName: ts + 34160, FxProc: 0}, 49983 {FzName: ts + 34178, FxProc: 0}, 49984 {FzName: ts + 34202, FxProc: 0}, 49985 {FzName: ts + 34222, FxProc: 0}, 49986 {FzName: ts + 34247, FxProc: 0}, 49987 {FzName: ts + 34272, FxProc: 0}, 49988 {FzName: ts + 34297, FxProc: 0}, 49989 {FzName: ts + 34318, FxProc: 0}, 49990 {FzName: ts + 34337, FxProc: 0}, 49991 {FzName: ts + 34356, FxProc: 0}, 49992 {FzName: ts + 34377, FxProc: 0}, 49993 {FzName: ts + 34405, FxProc: 0, FclientData: 3}, 49994 {FzName: ts + 34426, FxProc: 0, FclientData: 5}, 49995 {FzName: ts + 34447, FxProc: 0}, 49996 {FzName: ts + 34471, FxProc: 0}, 49997 } 49998 49999 type fd_set4 = struct{ F__fds_bits [32]int32 } 50000 50001 type MD5Context1 = struct { 50002 FisInit int32 50003 Fbuf [4]uint32 50004 Fbits [2]uint32 50005 Fin [64]uint8 50006 } 50007 50008 type MD5Context = MD5Context1 50009 50010 func byteReverse(tls *libc.TLS, buf uintptr, longs uint32) { 50011 var t uint32 50012 for __ccgo := true; __ccgo; __ccgo = libc.PreDecUint32(&longs, 1) != 0 { 50013 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)))) 50014 *(*uint32)(unsafe.Pointer(buf)) = t 50015 buf += uintptr(4) 50016 } 50017 } 50018 50019 func MD5Transform(tls *libc.TLS, buf uintptr, in uintptr) { 50020 var a uint32 50021 var b uint32 50022 var c uint32 50023 var d uint32 50024 50025 a = *(*uint32)(unsafe.Pointer(buf)) 50026 b = *(*uint32)(unsafe.Pointer(buf + 1*4)) 50027 c = *(*uint32)(unsafe.Pointer(buf + 2*4)) 50028 d = *(*uint32)(unsafe.Pointer(buf + 3*4)) 50029 50030 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xd76aa478) 50031 a = a<<7 | a>>(32-7) 50032 a = a + b 50033 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xe8c7b756) 50034 d = d<<12 | d>>(32-12) 50035 d = d + a 50036 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x242070db)) 50037 c = c<<17 | c>>(32-17) 50038 c = c + d 50039 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xc1bdceee) 50040 b = b<<22 | b>>(32-22) 50041 b = b + c 50042 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf57c0faf) 50043 a = a<<7 | a>>(32-7) 50044 a = a + b 50045 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + uint32(0x4787c62a)) 50046 d = d<<12 | d>>(32-12) 50047 d = d + a 50048 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa8304613) 50049 c = c<<17 | c>>(32-17) 50050 c = c + d 50051 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xfd469501) 50052 b = b<<22 | b>>(32-22) 50053 b = b + c 50054 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x698098d8)) 50055 a = a<<7 | a>>(32-7) 50056 a = a + b 50057 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0x8b44f7af) 50058 d = d<<12 | d>>(32-12) 50059 d = d + a 50060 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffff5bb1) 50061 c = c<<17 | c>>(32-17) 50062 c = c + d 50063 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0x895cd7be) 50064 b = b<<22 | b>>(32-22) 50065 b = b + c 50066 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x6b901122)) 50067 a = a<<7 | a>>(32-7) 50068 a = a + b 50069 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xfd987193) 50070 d = d<<12 | d>>(32-12) 50071 d = d + a 50072 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xa679438e) 50073 c = c<<17 | c>>(32-17) 50074 c = c + d 50075 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x49b40821)) 50076 b = b<<22 | b>>(32-22) 50077 b = b + c 50078 50079 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xf61e2562) 50080 a = a<<5 | a>>(32-5) 50081 a = a + b 50082 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xc040b340) 50083 d = d<<9 | d>>(32-9) 50084 d = d + a 50085 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x265e5a51)) 50086 c = c<<14 | c>>(32-14) 50087 c = c + d 50088 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xe9b6c7aa) 50089 b = b<<20 | b>>(32-20) 50090 b = b + c 50091 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xd62f105d) 50092 a = a<<5 | a>>(32-5) 50093 a = a + b 50094 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + uint32(0x02441453)) 50095 d = d<<9 | d>>(32-9) 50096 d = d + a 50097 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xd8a1e681) 50098 c = c<<14 | c>>(32-14) 50099 c = c + d 50100 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xe7d3fbc8) 50101 b = b<<20 | b>>(32-20) 50102 b = b + c 50103 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + uint32(0x21e1cde6)) 50104 a = a<<5 | a>>(32-5) 50105 a = a + b 50106 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xc33707d6) 50107 d = d<<9 | d>>(32-9) 50108 d = d + a 50109 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xf4d50d87) 50110 c = c<<14 | c>>(32-14) 50111 c = c + d 50112 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x455a14ed)) 50113 b = b<<20 | b>>(32-20) 50114 b = b + c 50115 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xa9e3e905) 50116 a = a<<5 | a>>(32-5) 50117 a = a + b 50118 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xfcefa3f8) 50119 d = d<<9 | d>>(32-9) 50120 d = d + a 50121 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x676f02d9)) 50122 c = c<<14 | c>>(32-14) 50123 c = c + d 50124 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0x8d2a4c8a) 50125 b = b<<20 | b>>(32-20) 50126 b = b + c 50127 50128 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfffa3942) 50129 a = a<<4 | a>>(32-4) 50130 a = a + b 50131 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 8*4)) + 0x8771f681) 50132 d = d<<11 | d>>(32-11) 50133 d = d + a 50134 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x6d9d6122)) 50135 c = c<<16 | c>>(32-16) 50136 c = c + d 50137 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xfde5380c) 50138 b = b<<23 | b>>(32-23) 50139 b = b + c 50140 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xa4beea44) 50141 a = a<<4 | a>>(32-4) 50142 a = a + b 50143 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 4*4)) + uint32(0x4bdecfa9)) 50144 d = d<<11 | d>>(32-11) 50145 d = d + a 50146 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xf6bb4b60) 50147 c = c<<16 | c>>(32-16) 50148 c = c + d 50149 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xbebfbc70) 50150 b = b<<23 | b>>(32-23) 50151 b = b + c 50152 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x289b7ec6)) 50153 a = a<<4 | a>>(32-4) 50154 a = a + b 50155 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in)) + 0xeaa127fa) 50156 d = d<<11 | d>>(32-11) 50157 d = d + a 50158 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xd4ef3085) 50159 c = c<<16 | c>>(32-16) 50160 c = c + d 50161 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 6*4)) + uint32(0x04881d05)) 50162 b = b<<23 | b>>(32-23) 50163 b = b + c 50164 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xd9d4d039) 50165 a = a<<4 | a>>(32-4) 50166 a = a + b 50167 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0xe6db99e5) 50168 d = d<<11 | d>>(32-11) 50169 d = d + a 50170 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x1fa27cf8)) 50171 c = c<<16 | c>>(32-16) 50172 c = c + d 50173 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xc4ac5665) 50174 b = b<<23 | b>>(32-23) 50175 b = b + c 50176 50177 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in)) + 0xf4292244) 50178 a = a<<6 | a>>(32-6) 50179 a = a + b 50180 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x432aff97)) 50181 d = d<<10 | d>>(32-10) 50182 d = d + a 50183 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xab9423a7) 50184 c = c<<15 | c>>(32-15) 50185 c = c + d 50186 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfc93a039) 50187 b = b<<21 | b>>(32-21) 50188 b = b + c 50189 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x655b59c3)) 50190 a = a<<6 | a>>(32-6) 50191 a = a + b 50192 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0x8f0ccc92) 50193 d = d<<10 | d>>(32-10) 50194 d = d + a 50195 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffeff47d) 50196 c = c<<15 | c>>(32-15) 50197 c = c + d 50198 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0x85845dd1) 50199 b = b<<21 | b>>(32-21) 50200 b = b + c 50201 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x6fa87e4f)) 50202 a = a<<6 | a>>(32-6) 50203 a = a + b 50204 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xfe2ce6e0) 50205 d = d<<10 | d>>(32-10) 50206 d = d + a 50207 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa3014314) 50208 c = c<<15 | c>>(32-15) 50209 c = c + d 50210 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x4e0811a1)) 50211 b = b<<21 | b>>(32-21) 50212 b = b + c 50213 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf7537e82) 50214 a = a<<6 | a>>(32-6) 50215 a = a + b 50216 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0xbd3af235) 50217 d = d<<10 | d>>(32-10) 50218 d = d + a 50219 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x2ad7d2bb)) 50220 c = c<<15 | c>>(32-15) 50221 c = c + d 50222 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xeb86d391) 50223 b = b<<21 | b>>(32-21) 50224 b = b + c 50225 50226 *(*uint32)(unsafe.Pointer(buf)) += a 50227 *(*uint32)(unsafe.Pointer(buf + 1*4)) += b 50228 *(*uint32)(unsafe.Pointer(buf + 2*4)) += c 50229 *(*uint32)(unsafe.Pointer(buf + 3*4)) += d 50230 } 50231 50232 func MD5Init(tls *libc.TLS, ctx uintptr) { 50233 (*MD5Context)(unsafe.Pointer(ctx)).FisInit = 1 50234 *(*uint32)(unsafe.Pointer(ctx + 4)) = uint32(0x67452301) 50235 *(*uint32)(unsafe.Pointer(ctx + 4 + 1*4)) = 0xefcdab89 50236 *(*uint32)(unsafe.Pointer(ctx + 4 + 2*4)) = 0x98badcfe 50237 *(*uint32)(unsafe.Pointer(ctx + 4 + 3*4)) = uint32(0x10325476) 50238 *(*uint32)(unsafe.Pointer(ctx + 20)) = uint32(0) 50239 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) = uint32(0) 50240 } 50241 50242 func MD5Update(tls *libc.TLS, ctx uintptr, buf uintptr, len uint32) { 50243 var t uint32 50244 50245 t = *(*uint32)(unsafe.Pointer(ctx + 20)) 50246 if libc.AssignPtrUint32(ctx+20, t+len<<3) < t { 50247 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4))++ 50248 } 50249 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) += len >> 29 50250 50251 t = t >> 3 & uint32(0x3f) 50252 50253 if t != 0 { 50254 var p uintptr = ctx + 28 + uintptr(t) 50255 50256 t = uint32(64) - t 50257 if len < t { 50258 libc.Xmemcpy(tls, p, buf, len) 50259 return 50260 } 50261 libc.Xmemcpy(tls, p, buf, t) 50262 byteReverse(tls, ctx+28, uint32(16)) 50263 MD5Transform(tls, ctx+4, ctx+28) 50264 buf += uintptr(t) 50265 len = len - t 50266 } 50267 50268 for len >= uint32(64) { 50269 libc.Xmemcpy(tls, ctx+28, buf, uint32(64)) 50270 byteReverse(tls, ctx+28, uint32(16)) 50271 MD5Transform(tls, ctx+4, ctx+28) 50272 buf += uintptr(64) 50273 len = len - uint32(64) 50274 } 50275 50276 libc.Xmemcpy(tls, ctx+28, buf, len) 50277 } 50278 50279 func MD5Final(tls *libc.TLS, digest uintptr, ctx uintptr) { 50280 var count uint32 50281 var p uintptr 50282 50283 count = *(*uint32)(unsafe.Pointer(ctx + 20)) >> 3 & uint32(0x3F) 50284 50285 p = ctx + 28 + uintptr(count) 50286 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&p, 1))) = uint8(0x80) 50287 50288 count = uint32(64-1) - count 50289 50290 if count < uint32(8) { 50291 libc.Xmemset(tls, p, 0, count) 50292 byteReverse(tls, ctx+28, uint32(16)) 50293 MD5Transform(tls, ctx+4, ctx+28) 50294 50295 libc.Xmemset(tls, ctx+28, 0, uint32(56)) 50296 } else { 50297 libc.Xmemset(tls, p, 0, count-uint32(8)) 50298 } 50299 byteReverse(tls, ctx+28, uint32(14)) 50300 50301 libc.Xmemcpy(tls, ctx+28+uintptr(14*4), ctx+20, uint32(8)) 50302 50303 MD5Transform(tls, ctx+4, ctx+28) 50304 byteReverse(tls, ctx+4, uint32(4)) 50305 libc.Xmemcpy(tls, digest, ctx+4, uint32(16)) 50306 } 50307 50308 func MD5DigestToBase16(tls *libc.TLS, digest uintptr, zBuf uintptr) { 50309 var i int32 50310 var j int32 50311 50312 for j = libc.AssignInt32(&i, 0); i < 16; i++ { 50313 var a int32 = int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i)))) 50314 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a>>4&0xf] 50315 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a&0xf] 50316 } 50317 *(*int8)(unsafe.Pointer(zBuf + uintptr(j))) = int8(0) 50318 } 50319 50320 var zEncode = *(*[17]int8)(unsafe.Pointer(ts + 31194)) 50321 50322 func MD5DigestToBase10x8(tls *libc.TLS, digest uintptr, zDigest uintptr) { 50323 bp := tls.Alloc(8) 50324 defer tls.Free(8) 50325 50326 var i int32 50327 var j int32 50328 var x uint32 50329 for i = libc.AssignInt32(&j, 0); i < 16; i = i + 2 { 50330 x = uint32(int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i))))*256 + int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i+1))))) 50331 if i > 0 { 50332 *(*int8)(unsafe.Pointer(zDigest + uintptr(libc.PostIncInt32(&j, 1)))) = int8('-') 50333 } 50334 sqlite3.Xsqlite3_snprintf(tls, 50-j, zDigest+uintptr(j), ts+34501, libc.VaList(bp, x)) 50335 j = j + 5 50336 } 50337 *(*int8)(unsafe.Pointer(zDigest + uintptr(j))) = int8(0) 50338 } 50339 50340 func md5_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 50341 bp := tls.Alloc(206) 50342 defer tls.Free(206) 50343 50344 var converter uintptr 50345 50346 if argc != 2 { 50347 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 50348 ts+15307, uintptr(0))) 50349 return TCL_ERROR 50350 } 50351 MD5Init(tls, bp+48) 50352 MD5Update(tls, bp+48, *(*uintptr)(unsafe.Pointer(argv + 1*4)), libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)))) 50353 MD5Final(tls, bp+140, bp+48) 50354 converter = cd 50355 (*struct { 50356 f func(*libc.TLS, uintptr, uintptr) 50357 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+140, bp+156) 50358 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+156, uintptr(0))) 50359 return TCL_OK 50360 } 50361 50362 func md5file_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 50363 bp := tls.Alloc(10428) 50364 defer tls.Free(10428) 50365 50366 var in uintptr 50367 var ofst int32 50368 var amt int32 50369 50370 var converter uintptr 50371 50372 if argc != 2 && argc != 4 { 50373 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 50374 ts+34506, uintptr(0))) 50375 return TCL_ERROR 50376 } 50377 if argc == 4 { 50378 ofst = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*4))) 50379 amt = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*4))) 50380 } else { 50381 ofst = 0 50382 amt = 2147483647 50383 } 50384 in = libc.Xfopen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), ts+4402) 50385 if in == uintptr(0) { 50386 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+34530, *(*uintptr)(unsafe.Pointer(argv + 1*4)), 50387 ts+34552, uintptr(0))) 50388 return TCL_ERROR 50389 } 50390 libc.Xfseek(tls, in, ofst, SEEK_SET) 50391 MD5Init(tls, bp+80) 50392 for amt > 0 { 50393 var n int32 50394 n = int32(libc.Xfread(tls, bp+172, uint32(1), func() uint32 { 50395 if uint32(unsafe.Sizeof([10240]int8{})) <= uint32(amt) { 50396 return uint32(unsafe.Sizeof([10240]int8{})) 50397 } 50398 return uint32(amt) 50399 }(), in)) 50400 if n <= 0 { 50401 break 50402 } 50403 MD5Update(tls, bp+80, bp+172, uint32(n)) 50404 amt = amt - n 50405 } 50406 libc.Xfclose(tls, in) 50407 MD5Final(tls, bp+10412, bp+80) 50408 converter = cd 50409 (*struct { 50410 f func(*libc.TLS, uintptr, uintptr) 50411 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+10412, bp+172) 50412 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+172, uintptr(0))) 50413 return TCL_OK 50414 } 50415 50416 func Md5_Init(tls *libc.TLS, interp uintptr) int32 { 50417 tcl.XTcl_CreateCommand(tls, interp, ts+34566, *(*uintptr)(unsafe.Pointer(&struct { 50418 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50419 }{md5_cmd})), 50420 *(*uintptr)(unsafe.Pointer(&struct { 50421 f func(*libc.TLS, uintptr, uintptr) 50422 }{MD5DigestToBase16})), uintptr(0)) 50423 tcl.XTcl_CreateCommand(tls, interp, ts+34570, *(*uintptr)(unsafe.Pointer(&struct { 50424 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50425 }{md5_cmd})), 50426 *(*uintptr)(unsafe.Pointer(&struct { 50427 f func(*libc.TLS, uintptr, uintptr) 50428 }{MD5DigestToBase10x8})), uintptr(0)) 50429 tcl.XTcl_CreateCommand(tls, interp, ts+34579, *(*uintptr)(unsafe.Pointer(&struct { 50430 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50431 }{md5file_cmd})), 50432 *(*uintptr)(unsafe.Pointer(&struct { 50433 f func(*libc.TLS, uintptr, uintptr) 50434 }{MD5DigestToBase16})), uintptr(0)) 50435 tcl.XTcl_CreateCommand(tls, interp, ts+34587, *(*uintptr)(unsafe.Pointer(&struct { 50436 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50437 }{md5file_cmd})), 50438 *(*uintptr)(unsafe.Pointer(&struct { 50439 f func(*libc.TLS, uintptr, uintptr) 50440 }{MD5DigestToBase10x8})), uintptr(0)) 50441 return TCL_OK 50442 } 50443 50444 func md5step(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 50445 var p uintptr 50446 var i int32 50447 if argc < 1 { 50448 return 50449 } 50450 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 50451 if p == uintptr(0) { 50452 return 50453 } 50454 if !((*MD5Context)(unsafe.Pointer(p)).FisInit != 0) { 50455 MD5Init(tls, p) 50456 } 50457 for i = 0; i < argc; i++ { 50458 var zData uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 50459 if zData != 0 { 50460 MD5Update(tls, p, zData, uint32(int32(libc.Xstrlen(tls, zData)))) 50461 } 50462 } 50463 } 50464 50465 func md5finalize(tls *libc.TLS, context uintptr) { 50466 bp := tls.Alloc(49) 50467 defer tls.Free(49) 50468 50469 var p uintptr 50470 50471 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 50472 MD5Final(tls, bp, p) 50473 MD5DigestToBase16(tls, bp, bp+16) 50474 sqlite3.Xsqlite3_result_text(tls, context, bp+16, -1, libc.UintptrFromInt32(-1)) 50475 } 50476 50477 func Md5_Register(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 50478 var rc int32 = sqlite3.Xsqlite3_create_function(tls, db, ts+34600, -1, SQLITE_UTF8, uintptr(0), uintptr(0), 50479 *(*uintptr)(unsafe.Pointer(&struct { 50480 f func(*libc.TLS, uintptr, int32, uintptr) 50481 }{md5step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{md5finalize}))) 50482 sqlite3.Xsqlite3_overload_function(tls, db, ts+34600, -1) 50483 return rc 50484 } 50485 50486 type multiplexGroup1 = struct { 50487 FaReal uintptr 50488 FnReal int32 50489 FzName uintptr 50490 FnName int32 50491 Fflags int32 50492 FszChunk uint32 50493 FbEnabled uint8 50494 FbTruncate uint8 50495 F__ccgo_pad1 [2]byte 50496 } 50497 50498 type multiplexGroup = multiplexGroup1 50499 type multiplexConn1 = struct { 50500 Fbase sqlite3_file 50501 FpGroup uintptr 50502 } 50503 50504 type multiplexConn = multiplexConn1 50505 50506 type multiplexReal = struct { 50507 Fp uintptr 50508 Fz uintptr 50509 } 50510 50511 var gMultiplex struct { 50512 FpOrigVfs uintptr 50513 FsThisVfs sqlite3_vfs 50514 FsIoMethodsV1 sqlite3_io_methods 50515 FsIoMethodsV2 sqlite3_io_methods 50516 FisInitialized int32 50517 } 50518 50519 func multiplexStrlen30(tls *libc.TLS, z uintptr) int32 { 50520 var z2 uintptr = z 50521 if z == uintptr(0) { 50522 return 0 50523 } 50524 for *(*int8)(unsafe.Pointer(z2)) != 0 { 50525 z2++ 50526 } 50527 return 0x3fffffff & ((int32(z2) - int32(z)) / 1) 50528 } 50529 50530 func multiplexFilename(tls *libc.TLS, zBase uintptr, nBase int32, flags int32, iChunk int32, zOut uintptr) { 50531 bp := tls.Alloc(8) 50532 defer tls.Free(8) 50533 50534 var n int32 = nBase 50535 libc.Xmemcpy(tls, zOut, zBase, uint32(n+1)) 50536 if iChunk != 0 && iChunk <= MX_CHUNK_NUMBER { 50537 sqlite3.Xsqlite3_snprintf(tls, 4, zOut+uintptr(n), ts+34607, libc.VaList(bp, iChunk)) 50538 n = n + 3 50539 } 50540 50541 *(*int8)(unsafe.Pointer(zOut + uintptr(n+1))) = int8(0) 50542 } 50543 50544 func multiplexSubFilename(tls *libc.TLS, pGroup uintptr, iChunk int32) int32 { 50545 if iChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal { 50546 var p uintptr 50547 p = sqlite3.Xsqlite3_realloc64(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal, uint64(uint32(iChunk+1)*uint32(unsafe.Sizeof(multiplexReal{})))) 50548 if p == uintptr(0) { 50549 return SQLITE_NOMEM 50550 } 50551 libc.Xmemset(tls, p+uintptr((*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)*8, 0, uint32(unsafe.Sizeof(multiplexReal{}))*uint32(iChunk+1-(*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)) 50552 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = p 50553 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = iChunk + 1 50554 } 50555 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz == uintptr(0) { 50556 var z uintptr 50557 var n int32 = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName 50558 z = sqlite3.Xsqlite3_malloc64(tls, uint64(n+5)) 50559 if z == uintptr(0) { 50560 return SQLITE_NOMEM 50561 } 50562 multiplexFilename(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName, (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags, iChunk, z) 50563 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*8)).Fz = sqlite3.Xsqlite3_create_filename(tls, z, ts+584, ts+584, 0, uintptr(0)) 50564 sqlite3.Xsqlite3_free(tls, z) 50565 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz == uintptr(0) { 50566 return SQLITE_NOMEM 50567 } 50568 } 50569 return SQLITE_OK 50570 } 50571 50572 func multiplexSubOpen(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr, pOutFlags uintptr, createFlag int32) uintptr { 50573 bp := tls.Alloc(20) 50574 defer tls.Free(20) 50575 50576 var pSubOpen uintptr = uintptr(0) 50577 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50578 50579 *(*int32)(unsafe.Pointer(rc)) = multiplexSubFilename(tls, pGroup, iChunk) 50580 if *(*int32)(unsafe.Pointer(rc)) == SQLITE_OK && libc.AssignUintptr(&pSubOpen, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fp) == uintptr(0) { 50581 var flags int32 50582 50583 flags = (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags 50584 if createFlag != 0 { 50585 flags = flags | SQLITE_OPEN_CREATE 50586 } else if iChunk == 0 { 50587 } else if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz == uintptr(0) { 50588 return uintptr(0) 50589 } else { 50590 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50591 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50592 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz, 50593 SQLITE_ACCESS_EXISTS, bp+16) 50594 if *(*int32)(unsafe.Pointer(rc)) != 0 || !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) { 50595 if *(*int32)(unsafe.Pointer(rc)) != 0 { 50596 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34612, 50597 libc.VaList(bp, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz)) 50598 } 50599 return uintptr(0) 50600 } 50601 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 50602 } 50603 pSubOpen = sqlite3.Xsqlite3_malloc64(tls, uint64((*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FszOsFile)) 50604 if pSubOpen == uintptr(0) { 50605 *(*int32)(unsafe.Pointer(rc)) = SQLITE_IOERR | int32(12)<<8 50606 return uintptr(0) 50607 } 50608 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*8)).Fp = pSubOpen 50609 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50610 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 50611 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz, pSubOpen, 50612 flags, pOutFlags) 50613 if *(*int32)(unsafe.Pointer(rc)) != SQLITE_OK { 50614 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34646, 50615 libc.VaList(bp+8, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz)) 50616 sqlite3.Xsqlite3_free(tls, pSubOpen) 50617 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*8)).Fp = uintptr(0) 50618 return uintptr(0) 50619 } 50620 } 50621 return pSubOpen 50622 } 50623 50624 func multiplexSubSize(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr) sqlite3_int64 { 50625 bp := tls.Alloc(8) 50626 defer tls.Free(8) 50627 50628 var pSub uintptr 50629 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 50630 50631 if *(*int32)(unsafe.Pointer(rc)) != 0 { 50632 return int64(0) 50633 } 50634 pSub = multiplexSubOpen(tls, pGroup, iChunk, rc, uintptr(0), 0) 50635 if pSub == uintptr(0) { 50636 return int64(0) 50637 } 50638 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50639 f func(*libc.TLS, uintptr, uintptr) int32 50640 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSub)).FpMethods)).FxFileSize})).f(tls, pSub, bp) 50641 return *(*sqlite3_int64)(unsafe.Pointer(bp)) 50642 } 50643 50644 func multiplexControlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 50645 bp := tls.Alloc(4) 50646 defer tls.Free(4) 50647 50648 var rc int32 = SQLITE_OK 50649 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 50650 var op int32 = 0 50651 50652 if !(db != 0) || argc != 2 { 50653 rc = SQLITE_ERROR 50654 } else { 50655 op = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 50656 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 50657 50658 switch op { 50659 case 1: 50660 op = MULTIPLEX_CTRL_ENABLE 50661 break 50662 fallthrough 50663 case 2: 50664 op = MULTIPLEX_CTRL_SET_CHUNK_SIZE 50665 break 50666 fallthrough 50667 case 3: 50668 op = MULTIPLEX_CTRL_SET_MAX_CHUNKS 50669 break 50670 fallthrough 50671 default: 50672 rc = SQLITE_NOTFOUND 50673 break 50674 } 50675 } 50676 if rc == SQLITE_OK { 50677 rc = sqlite3.Xsqlite3_file_control(tls, db, uintptr(0), op, bp) 50678 } 50679 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 50680 } 50681 50682 func multiplexFuncInit(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 50683 var rc int32 50684 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+34678, 2, SQLITE_ANY, 50685 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 50686 f func(*libc.TLS, uintptr, int32, uintptr) 50687 }{multiplexControlFunc})), uintptr(0), uintptr(0)) 50688 return rc 50689 } 50690 50691 func multiplexSubClose(tls *libc.TLS, pGroup uintptr, iChunk int32, pOrigVfs uintptr) { 50692 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*8)).Fp 50693 if pSubOpen != 0 { 50694 (*struct { 50695 f func(*libc.TLS, uintptr) int32 50696 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 50697 if pOrigVfs != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz != 0 { 50698 (*struct { 50699 f func(*libc.TLS, uintptr, uintptr, int32) int32 50700 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz, 0) 50701 } 50702 sqlite3.Xsqlite3_free(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fp) 50703 } 50704 sqlite3.Xsqlite3_free_filename(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz) 50705 libc.Xmemset(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8, 0, uint32(unsafe.Sizeof(multiplexReal{}))) 50706 } 50707 50708 func multiplexFreeComponents(tls *libc.TLS, pGroup uintptr) { 50709 var i int32 50710 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 50711 multiplexSubClose(tls, pGroup, i, uintptr(0)) 50712 } 50713 sqlite3.Xsqlite3_free(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal) 50714 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = uintptr(0) 50715 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = 0 50716 } 50717 50718 func multiplexOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 50719 bp := tls.Alloc(16) 50720 defer tls.Free(16) 50721 50722 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50723 var pMultiplexOpen uintptr 50724 var pGroup uintptr = uintptr(0) 50725 var pSubOpen uintptr = uintptr(0) 50726 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50727 var nName int32 = 0 50728 var sz int32 = 0 50729 var zToFree uintptr = uintptr(0) 50730 50731 _ = pVfs 50732 libc.Xmemset(tls, pConn, 0, uint32((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile)) 50733 50734 pMultiplexOpen = pConn 50735 50736 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50737 if zName != 0 { 50738 nName = multiplexStrlen30(tls, zName) 50739 } else { 50740 nName = 0 50741 } 50742 sz = int32(uint32(unsafe.Sizeof(multiplexGroup{})) + 50743 uint32(nName) + uint32(1)) 50744 pGroup = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 50745 if pGroup == uintptr(0) { 50746 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 50747 } 50748 } 50749 50750 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50751 var zUri uintptr 50752 if flags&SQLITE_OPEN_URI != 0 { 50753 zUri = zName 50754 } else { 50755 zUri = uintptr(0) 50756 } 50757 50758 libc.Xmemset(tls, pGroup, 0, uint32(sz)) 50759 (*multiplexConn)(unsafe.Pointer(pMultiplexOpen)).FpGroup = pGroup 50760 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = libc.Uint8(libc.Uint8FromInt32(-1)) 50761 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(sqlite3.Xsqlite3_uri_boolean(tls, zUri, ts+18304, 50762 libc.Bool32(flags&SQLITE_OPEN_MAIN_DB == 0))) 50763 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(sqlite3.Xsqlite3_uri_int64(tls, zUri, ts+34696, 50764 int64(SQLITE_MULTIPLEX_CHUNK_SIZE)))) 50765 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = ((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk + uint32(0xffff)) & libc.Uint32FromInt32(libc.CplInt32(0xffff)) 50766 if zName != 0 { 50767 var p uintptr = pGroup + 1*28 50768 (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName = p 50769 libc.Xmemcpy(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, zName, uint32(nName+1)) 50770 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName = nName 50771 } 50772 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 50773 for uint32(sqlite3.Xsqlite3PendingByte)%(*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk-uint32(65536) { 50774 *(*uint32)(unsafe.Pointer(pGroup + 20)) += uint32(65536) 50775 } 50776 } 50777 (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags = flags & libc.CplInt32(SQLITE_OPEN_URI) 50778 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, 1) 50779 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50780 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp, pOutFlags, 0) 50781 if pSubOpen == uintptr(0) && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50782 *(*int32)(unsafe.Pointer(bp)) = SQLITE_CANTOPEN 50783 } 50784 } 50785 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50786 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50787 f func(*libc.TLS, uintptr, uintptr) int32 50788 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp+4) 50789 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && zName != 0 { 50790 if flags&SQLITE_OPEN_SUPER_JOURNAL != 0 { 50791 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 50792 } else if *(*sqlite3_int64)(unsafe.Pointer(bp + 4)) == int64(0) { 50793 if flags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 50794 var iChunk int32 = 1 50795 for __ccgo := true; __ccgo; __ccgo = *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 12)) != 0 { 50796 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50797 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50798 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, 50799 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz, SQLITE_ACCESS_EXISTS, bp+12) 50800 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 12)) != 0 { 50801 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50802 f func(*libc.TLS, uintptr, uintptr, int32) int32 50803 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*8)).Fz, 0) 50804 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50805 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, libc.PreIncInt32(&iChunk, 1)) 50806 } 50807 } 50808 } 50809 } 50810 } else { 50811 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50812 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50813 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+1*8)).Fz, 50814 SQLITE_ACCESS_EXISTS, bp+12) 50815 *(*int32)(unsafe.Pointer(bp + 12)) = libc.Bool32(multiplexSubSize(tls, pGroup, 1, bp) > int64(0)) 50816 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 12)) != 0 && *(*sqlite3_int64)(unsafe.Pointer(bp + 4)) == *(*sqlite3_int64)(unsafe.Pointer(bp + 4))&int64(0xffff0000) && *(*sqlite3_int64)(unsafe.Pointer(bp + 4)) > int64(0) && 50817 *(*sqlite3_int64)(unsafe.Pointer(bp + 4)) != sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 50818 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 4)))) 50819 } else if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && !(*(*int32)(unsafe.Pointer(bp + 12)) != 0) && *(*sqlite3_int64)(unsafe.Pointer(bp + 4)) > sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 50820 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 50821 } 50822 } 50823 } 50824 } 50825 50826 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50827 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 50828 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 92 50829 } else { 50830 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 168 50831 } 50832 } else { 50833 multiplexFreeComponents(tls, pGroup) 50834 sqlite3.Xsqlite3_free(tls, pGroup) 50835 } 50836 } 50837 sqlite3.Xsqlite3_free(tls, zToFree) 50838 return *(*int32)(unsafe.Pointer(bp)) 50839 } 50840 50841 func multiplexDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 50842 bp := tls.Alloc(4) 50843 defer tls.Free(4) 50844 50845 var rc int32 50846 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50847 rc = (*struct { 50848 f func(*libc.TLS, uintptr, uintptr, int32) int32 50849 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 50850 if rc == SQLITE_OK { 50851 var nName int32 = int32(libc.Xstrlen(tls, zName)) 50852 var z uintptr 50853 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nName+5)) 50854 if z == uintptr(0) { 50855 rc = SQLITE_IOERR | int32(12)<<8 50856 } else { 50857 var iChunk int32 = 0 50858 50859 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 50860 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreIncInt32(&iChunk, 1), z) 50861 rc = (*struct { 50862 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50863 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 50864 } 50865 for rc == SQLITE_OK && iChunk > 1 { 50866 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreDecInt32(&iChunk, 1), z) 50867 rc = (*struct { 50868 f func(*libc.TLS, uintptr, uintptr, int32) int32 50869 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 50870 } 50871 if rc == SQLITE_OK { 50872 iChunk = 0 50873 for __ccgo1 := true; __ccgo1; __ccgo1 = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 50874 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreIncInt32(&iChunk, 1), z) 50875 rc = (*struct { 50876 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50877 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 50878 } 50879 for rc == SQLITE_OK && iChunk > 1 { 50880 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreDecInt32(&iChunk, 1), z) 50881 rc = (*struct { 50882 f func(*libc.TLS, uintptr, uintptr, int32) int32 50883 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 50884 } 50885 } 50886 } 50887 sqlite3.Xsqlite3_free(tls, z) 50888 } 50889 return rc 50890 } 50891 50892 func multiplexAccess(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 50893 return (*struct { 50894 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50895 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxAccess})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 50896 } 50897 50898 func multiplexFullPathname(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 50899 return (*struct { 50900 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50901 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxFullPathname})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 50902 } 50903 50904 func multiplexDlOpen(tls *libc.TLS, a uintptr, b uintptr) uintptr { 50905 return (*struct { 50906 f func(*libc.TLS, uintptr, uintptr) uintptr 50907 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlOpen})).f(tls, gMultiplex.FpOrigVfs, b) 50908 } 50909 50910 func multiplexDlError(tls *libc.TLS, a uintptr, b int32, c uintptr) { 50911 (*struct { 50912 f func(*libc.TLS, uintptr, int32, uintptr) 50913 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlError})).f(tls, gMultiplex.FpOrigVfs, b, c) 50914 } 50915 50916 func multiplexDlSym(tls *libc.TLS, a uintptr, b uintptr, c uintptr) uintptr { 50917 return (*struct { 50918 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 50919 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlSym})).f(tls, gMultiplex.FpOrigVfs, b, c) 50920 } 50921 50922 func multiplexDlClose(tls *libc.TLS, a uintptr, b uintptr) { 50923 (*struct { 50924 f func(*libc.TLS, uintptr, uintptr) 50925 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlClose})).f(tls, gMultiplex.FpOrigVfs, b) 50926 } 50927 50928 func multiplexRandomness(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 50929 return (*struct { 50930 f func(*libc.TLS, uintptr, int32, uintptr) int32 50931 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxRandomness})).f(tls, gMultiplex.FpOrigVfs, b, c) 50932 } 50933 50934 func multiplexSleep(tls *libc.TLS, a uintptr, b int32) int32 { 50935 return (*struct { 50936 f func(*libc.TLS, uintptr, int32) int32 50937 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxSleep})).f(tls, gMultiplex.FpOrigVfs, b) 50938 } 50939 50940 func multiplexCurrentTime(tls *libc.TLS, a uintptr, b uintptr) int32 { 50941 return (*struct { 50942 f func(*libc.TLS, uintptr, uintptr) int32 50943 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTime})).f(tls, gMultiplex.FpOrigVfs, b) 50944 } 50945 50946 func multiplexGetLastError(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 50947 if (*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError != 0 { 50948 return (*struct { 50949 f func(*libc.TLS, uintptr, int32, uintptr) int32 50950 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError})).f(tls, gMultiplex.FpOrigVfs, b, c) 50951 } else { 50952 return 0 50953 } 50954 return int32(0) 50955 } 50956 50957 func multiplexCurrentTimeInt64(tls *libc.TLS, a uintptr, b uintptr) int32 { 50958 return (*struct { 50959 f func(*libc.TLS, uintptr, uintptr) int32 50960 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTimeInt64})).f(tls, gMultiplex.FpOrigVfs, b) 50961 } 50962 50963 func multiplexClose(tls *libc.TLS, pConn uintptr) int32 { 50964 var p uintptr = pConn 50965 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50966 var rc int32 = SQLITE_OK 50967 multiplexFreeComponents(tls, pGroup) 50968 sqlite3.Xsqlite3_free(tls, pGroup) 50969 return rc 50970 } 50971 50972 func multiplexRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 50973 bp := tls.Alloc(4) 50974 defer tls.Free(4) 50975 50976 var p uintptr = pConn 50977 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 50978 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50979 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 50980 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 50981 if pSubOpen == uintptr(0) { 50982 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 50983 } else { 50984 *(*int32)(unsafe.Pointer(bp)) = (*struct { 50985 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 50986 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 50987 } 50988 } else { 50989 for iAmt > 0 { 50990 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 50991 var pSubOpen uintptr 50992 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 50993 if pSubOpen != 0 { 50994 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 50995 if extra < 0 { 50996 extra = 0 50997 } 50998 iAmt = iAmt - extra 50999 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51000 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51001 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, 51002 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51003 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 51004 break 51005 } 51006 pBuf = pBuf + uintptr(iAmt) 51007 iOfst = iOfst + sqlite3_int64(iAmt) 51008 iAmt = extra 51009 } else { 51010 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 51011 break 51012 } 51013 } 51014 } 51015 51016 return *(*int32)(unsafe.Pointer(bp)) 51017 } 51018 51019 func multiplexWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 51020 bp := tls.Alloc(4) 51021 defer tls.Free(4) 51022 51023 var p uintptr = pConn 51024 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51025 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51026 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51027 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51028 if pSubOpen == uintptr(0) { 51029 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(3)<<8 51030 } else { 51031 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51032 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51033 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 51034 } 51035 } else { 51036 for *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && iAmt > 0 { 51037 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51038 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 51039 if pSubOpen != 0 { 51040 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 51041 if extra < 0 { 51042 extra = 0 51043 } 51044 iAmt = iAmt - extra 51045 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51046 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51047 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, 51048 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51049 pBuf = pBuf + uintptr(iAmt) 51050 iOfst = iOfst + sqlite3_int64(iAmt) 51051 iAmt = extra 51052 } 51053 } 51054 } 51055 return *(*int32)(unsafe.Pointer(bp)) 51056 } 51057 51058 func multiplexTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 51059 bp := tls.Alloc(4) 51060 defer tls.Free(4) 51061 51062 var p uintptr = pConn 51063 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51064 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51065 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51066 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51067 if pSubOpen == uintptr(0) { 51068 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 51069 } else { 51070 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51071 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51072 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 51073 } 51074 } else { 51075 var i int32 51076 var iBaseGroup int32 = int32(size / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51077 var pSubOpen uintptr 51078 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 51079 51080 for i = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal - 1; i > iBaseGroup && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i-- { 51081 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 51082 multiplexSubClose(tls, pGroup, i, pOrigVfs) 51083 } else { 51084 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 0) 51085 if pSubOpen != 0 { 51086 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51087 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51088 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, int64(0)) 51089 } 51090 } 51091 } 51092 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51093 pSubOpen = multiplexSubOpen(tls, pGroup, iBaseGroup, bp, uintptr(0), 0) 51094 if pSubOpen != 0 { 51095 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51096 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51097 })(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)) 51098 } 51099 } 51100 if *(*int32)(unsafe.Pointer(bp)) != 0 { 51101 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 51102 } 51103 } 51104 return *(*int32)(unsafe.Pointer(bp)) 51105 } 51106 51107 func multiplexSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 51108 var p uintptr = pConn 51109 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51110 var rc int32 = SQLITE_OK 51111 var i int32 51112 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 51113 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(i)*8)).Fp 51114 if pSubOpen != 0 { 51115 var rc2 int32 = (*struct { 51116 f func(*libc.TLS, uintptr, int32) int32 51117 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 51118 if rc2 != SQLITE_OK { 51119 rc = rc2 51120 } 51121 } 51122 } 51123 return rc 51124 } 51125 51126 func multiplexFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 51127 bp := tls.Alloc(4) 51128 defer tls.Free(4) 51129 51130 var p uintptr = pConn 51131 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51132 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51133 var i int32 51134 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51135 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51136 if pSubOpen == uintptr(0) { 51137 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(7)<<8 51138 } else { 51139 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51140 f func(*libc.TLS, uintptr, uintptr) int32 51141 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, pSize) 51142 } 51143 } else { 51144 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = int64(0) 51145 for i = 0; *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i++ { 51146 var sz sqlite3_int64 = multiplexSubSize(tls, pGroup, i, bp) 51147 if sz == int64(0) { 51148 break 51149 } 51150 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = sqlite3_int64(i)*sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) + sz 51151 } 51152 } 51153 return *(*int32)(unsafe.Pointer(bp)) 51154 } 51155 51156 func multiplexLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 51157 bp := tls.Alloc(4) 51158 defer tls.Free(4) 51159 51160 var p uintptr = pConn 51161 51162 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51163 if pSubOpen != 0 { 51164 return (*struct { 51165 f func(*libc.TLS, uintptr, int32) int32 51166 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 51167 } 51168 return SQLITE_BUSY 51169 } 51170 51171 func multiplexUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 51172 bp := tls.Alloc(4) 51173 defer tls.Free(4) 51174 51175 var p uintptr = pConn 51176 51177 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51178 if pSubOpen != 0 { 51179 return (*struct { 51180 f func(*libc.TLS, uintptr, int32) int32 51181 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 51182 } 51183 return SQLITE_IOERR | int32(8)<<8 51184 } 51185 51186 func multiplexCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 51187 bp := tls.Alloc(4) 51188 defer tls.Free(4) 51189 51190 var p uintptr = pConn 51191 51192 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51193 if pSubOpen != 0 { 51194 return (*struct { 51195 f func(*libc.TLS, uintptr, uintptr) int32 51196 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 51197 } 51198 return SQLITE_IOERR | int32(14)<<8 51199 } 51200 51201 func multiplexFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 51202 bp := tls.Alloc(44) 51203 defer tls.Free(44) 51204 51205 var p uintptr = pConn 51206 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51207 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 51208 var pSubOpen uintptr 51209 51210 if !(gMultiplex.FisInitialized != 0) { 51211 return SQLITE_MISUSE 51212 } 51213 switch op { 51214 case MULTIPLEX_CTRL_ENABLE: 51215 if pArg != 0 { 51216 var bEnabled int32 = *(*int32)(unsafe.Pointer(pArg)) 51217 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(bEnabled) 51218 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51219 } 51220 break 51221 case MULTIPLEX_CTRL_SET_CHUNK_SIZE: 51222 if pArg != 0 { 51223 var szChunk uint32 = *(*uint32)(unsafe.Pointer(pArg)) 51224 if szChunk < uint32(1) { 51225 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_MISUSE 51226 } else { 51227 szChunk = szChunk + uint32(MAX_PAGE_SIZE-1) 51228 szChunk = szChunk & libc.Uint32FromInt32(libc.CplInt32(MAX_PAGE_SIZE-1)) 51229 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = szChunk 51230 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51231 } 51232 } 51233 break 51234 case MULTIPLEX_CTRL_SET_MAX_CHUNKS: 51235 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51236 break 51237 case SQLITE_FCNTL_SIZE_HINT: 51238 fallthrough 51239 case SQLITE_FCNTL_CHUNK_SIZE: 51240 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51241 break 51242 case SQLITE_FCNTL_PRAGMA: 51243 { 51244 var aFcntl uintptr = pArg 51245 51246 if *(*uintptr)(unsafe.Pointer(aFcntl + 1*4)) != 0 && sqlite3.Xsqlite3_strnicmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*4)), ts+34706, 10) == 0 { 51247 *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) = int64(0) 51248 multiplexFileSize(tls, pConn, bp+32) 51249 51250 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*4)), ts+34717) == 0 { 51251 if *(*uintptr)(unsafe.Pointer(aFcntl + 2*4)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(aFcntl + 2*4)))) != 0 { 51252 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*4)), ts+4178) == 0 || 51253 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*4)), ts+28899) == 0 { 51254 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(1) 51255 } else if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*4)), ts+4542) == 0 || 51256 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*4)), ts+14193) == 0 { 51257 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(0) 51258 } 51259 } 51260 51261 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, func() uintptr { 51262 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 51263 return ts + 4178 51264 } 51265 return ts + 4542 51266 }(), 0) 51267 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51268 break 51269 } 51270 51271 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*4)), ts+34736) == 0 { 51272 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, libc.Bool32(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0))) 51273 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51274 break 51275 } 51276 51277 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*4)), ts+34754) == 0 && 51278 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 51279 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+17791, libc.VaList(bp+8, (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51280 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51281 break 51282 } 51283 51284 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*4)), ts+34774) == 0 { 51285 var n int32 = 0 51286 var ii int32 51287 for ii = 0; ii < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; ii++ { 51288 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(ii)*8)).Fp != uintptr(0) { 51289 n++ 51290 } 51291 } 51292 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+16, n)) 51293 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51294 break 51295 } 51296 } 51297 51298 } 51299 fallthrough 51300 default: 51301 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp+40, uintptr(0), 0) 51302 if pSubOpen != 0 { 51303 *(*int32)(unsafe.Pointer(bp + 40)) = (*struct { 51304 f func(*libc.TLS, uintptr, int32, uintptr) int32 51305 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 51306 if op == SQLITE_FCNTL_VFSNAME && *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 51307 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+34794, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(pArg)))) 51308 } 51309 } 51310 break 51311 } 51312 return *(*int32)(unsafe.Pointer(bp + 40)) 51313 } 51314 51315 func multiplexSectorSize(tls *libc.TLS, pConn uintptr) int32 { 51316 bp := tls.Alloc(4) 51317 defer tls.Free(4) 51318 51319 var p uintptr = pConn 51320 51321 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51322 if pSubOpen != 0 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize != 0 { 51323 return (*struct { 51324 f func(*libc.TLS, uintptr) int32 51325 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 51326 } 51327 return DEFAULT_SECTOR_SIZE 51328 } 51329 51330 func multiplexDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 51331 bp := tls.Alloc(4) 51332 defer tls.Free(4) 51333 51334 var p uintptr = pConn 51335 51336 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51337 if pSubOpen != 0 { 51338 return (*struct { 51339 f func(*libc.TLS, uintptr) int32 51340 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 51341 } 51342 return 0 51343 } 51344 51345 func multiplexShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 51346 bp := tls.Alloc(4) 51347 defer tls.Free(4) 51348 51349 var p uintptr = pConn 51350 51351 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51352 if pSubOpen != 0 { 51353 return (*struct { 51354 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 51355 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 51356 } 51357 return SQLITE_IOERR 51358 } 51359 51360 func multiplexShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 51361 bp := tls.Alloc(4) 51362 defer tls.Free(4) 51363 51364 var p uintptr = pConn 51365 51366 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51367 if pSubOpen != 0 { 51368 return (*struct { 51369 f func(*libc.TLS, uintptr, int32, int32, int32) int32 51370 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 51371 } 51372 return SQLITE_BUSY 51373 } 51374 51375 func multiplexShmBarrier(tls *libc.TLS, pConn uintptr) { 51376 bp := tls.Alloc(4) 51377 defer tls.Free(4) 51378 51379 var p uintptr = pConn 51380 51381 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51382 if pSubOpen != 0 { 51383 (*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) 51384 } 51385 } 51386 51387 func multiplexShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 51388 bp := tls.Alloc(4) 51389 defer tls.Free(4) 51390 51391 var p uintptr = pConn 51392 51393 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51394 if pSubOpen != 0 { 51395 return (*struct { 51396 f func(*libc.TLS, uintptr, int32) int32 51397 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 51398 } 51399 return SQLITE_OK 51400 } 51401 51402 func sqlite3_multiplex_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 51403 var pOrigVfs uintptr 51404 if gMultiplex.FisInitialized != 0 { 51405 return SQLITE_MISUSE 51406 } 51407 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 51408 if pOrigVfs == uintptr(0) { 51409 return SQLITE_ERROR 51410 } 51411 51412 gMultiplex.FisInitialized = 1 51413 gMultiplex.FpOrigVfs = pOrigVfs 51414 gMultiplex.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 51415 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gMultiplex)) + 4 + 4)) += int32(uint32(unsafe.Sizeof(multiplexConn{}))) 51416 gMultiplex.FsThisVfs.FzName = ts + 34807 51417 gMultiplex.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 51418 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 51419 }{multiplexOpen})) 51420 gMultiplex.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 51421 f func(*libc.TLS, uintptr, uintptr, int32) int32 51422 }{multiplexDelete})) 51423 gMultiplex.FsThisVfs.FxAccess = *(*uintptr)(unsafe.Pointer(&struct { 51424 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51425 }{multiplexAccess})) 51426 gMultiplex.FsThisVfs.FxFullPathname = *(*uintptr)(unsafe.Pointer(&struct { 51427 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51428 }{multiplexFullPathname})) 51429 gMultiplex.FsThisVfs.FxDlOpen = *(*uintptr)(unsafe.Pointer(&struct { 51430 f func(*libc.TLS, uintptr, uintptr) uintptr 51431 }{multiplexDlOpen})) 51432 gMultiplex.FsThisVfs.FxDlError = *(*uintptr)(unsafe.Pointer(&struct { 51433 f func(*libc.TLS, uintptr, int32, uintptr) 51434 }{multiplexDlError})) 51435 gMultiplex.FsThisVfs.FxDlSym = *(*uintptr)(unsafe.Pointer(&struct { 51436 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51437 }{multiplexDlSym})) 51438 gMultiplex.FsThisVfs.FxDlClose = *(*uintptr)(unsafe.Pointer(&struct { 51439 f func(*libc.TLS, uintptr, uintptr) 51440 }{multiplexDlClose})) 51441 gMultiplex.FsThisVfs.FxRandomness = *(*uintptr)(unsafe.Pointer(&struct { 51442 f func(*libc.TLS, uintptr, int32, uintptr) int32 51443 }{multiplexRandomness})) 51444 gMultiplex.FsThisVfs.FxSleep = *(*uintptr)(unsafe.Pointer(&struct { 51445 f func(*libc.TLS, uintptr, int32) int32 51446 }{multiplexSleep})) 51447 gMultiplex.FsThisVfs.FxCurrentTime = *(*uintptr)(unsafe.Pointer(&struct { 51448 f func(*libc.TLS, uintptr, uintptr) int32 51449 }{multiplexCurrentTime})) 51450 gMultiplex.FsThisVfs.FxGetLastError = *(*uintptr)(unsafe.Pointer(&struct { 51451 f func(*libc.TLS, uintptr, int32, uintptr) int32 51452 }{multiplexGetLastError})) 51453 gMultiplex.FsThisVfs.FxCurrentTimeInt64 = *(*uintptr)(unsafe.Pointer(&struct { 51454 f func(*libc.TLS, uintptr, uintptr) int32 51455 }{multiplexCurrentTimeInt64})) 51456 51457 gMultiplex.FsIoMethodsV1.FiVersion = 1 51458 gMultiplex.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 51459 f func(*libc.TLS, uintptr) int32 51460 }{multiplexClose})) 51461 gMultiplex.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 51462 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51463 }{multiplexRead})) 51464 gMultiplex.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 51465 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51466 }{multiplexWrite})) 51467 gMultiplex.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 51468 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51469 }{multiplexTruncate})) 51470 gMultiplex.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 51471 f func(*libc.TLS, uintptr, int32) int32 51472 }{multiplexSync})) 51473 gMultiplex.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 51474 f func(*libc.TLS, uintptr, uintptr) int32 51475 }{multiplexFileSize})) 51476 gMultiplex.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 51477 f func(*libc.TLS, uintptr, int32) int32 51478 }{multiplexLock})) 51479 gMultiplex.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 51480 f func(*libc.TLS, uintptr, int32) int32 51481 }{multiplexUnlock})) 51482 gMultiplex.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 51483 f func(*libc.TLS, uintptr, uintptr) int32 51484 }{multiplexCheckReservedLock})) 51485 gMultiplex.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 51486 f func(*libc.TLS, uintptr, int32, uintptr) int32 51487 }{multiplexFileControl})) 51488 gMultiplex.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 51489 f func(*libc.TLS, uintptr) int32 51490 }{multiplexSectorSize})) 51491 gMultiplex.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 51492 f func(*libc.TLS, uintptr) int32 51493 }{multiplexDeviceCharacteristics})) 51494 gMultiplex.FsIoMethodsV2 = gMultiplex.FsIoMethodsV1 51495 gMultiplex.FsIoMethodsV2.FiVersion = 2 51496 gMultiplex.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 51497 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 51498 }{multiplexShmMap})) 51499 gMultiplex.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 51500 f func(*libc.TLS, uintptr, int32, int32, int32) int32 51501 }{multiplexShmLock})) 51502 gMultiplex.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{multiplexShmBarrier})) 51503 gMultiplex.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 51504 f func(*libc.TLS, uintptr, int32) int32 51505 }{multiplexShmUnmap})) 51506 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gMultiplex))+4, makeDefault) 51507 51508 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 51509 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 51510 }{multiplexFuncInit}))) 51511 51512 return SQLITE_OK 51513 } 51514 51515 func sqlite3_multiplex_shutdown(tls *libc.TLS, eForce int32) int32 { 51516 var rc int32 = SQLITE_OK 51517 if gMultiplex.FisInitialized == 0 { 51518 return SQLITE_MISUSE 51519 } 51520 gMultiplex.FisInitialized = 0 51521 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gMultiplex))+4) 51522 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gMultiplex)), 0, uint32(unsafe.Sizeof(gMultiplex))) 51523 return rc 51524 } 51525 51526 func test_multiplex_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51527 bp := tls.Alloc(4) 51528 defer tls.Free(4) 51529 51530 var zName uintptr 51531 51532 var rc int32 51533 51534 _ = clientData 51535 51536 if objc != 3 { 51537 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 51538 return TCL_ERROR 51539 } 51540 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 51541 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) != 0 { 51542 return TCL_ERROR 51543 } 51544 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 51545 zName = uintptr(0) 51546 } 51547 51548 rc = sqlite3_multiplex_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 51549 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51550 51551 return TCL_OK 51552 } 51553 51554 func test_multiplex_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51555 var rc int32 51556 51557 _ = clientData 51558 51559 if objc == 2 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), ts+34834) != 0 { 51560 objc = 3 51561 } 51562 if objc != 1 && objc != 2 { 51563 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34841) 51564 return TCL_ERROR 51565 } 51566 51567 rc = sqlite3_multiplex_shutdown(tls, libc.Bool32(objc == 2)) 51568 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51569 51570 return TCL_OK 51571 } 51572 51573 func test_multiplex_control(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 51574 bp := tls.Alloc(128) 51575 defer tls.Free(128) 51576 51577 var rc int32 51578 51579 var db uintptr 51580 *(*int32)(unsafe.Pointer(bp + 124)) = 0 51581 var pArg uintptr = uintptr(0) 51582 51583 *(*[4]struct { 51584 FzName uintptr 51585 Fop int32 51586 Fargtype int32 51587 })(unsafe.Pointer(bp + 72)) = [4]struct { 51588 FzName uintptr 51589 Fop int32 51590 Fargtype int32 51591 }{ 51592 {FzName: ts + 10145, Fop: MULTIPLEX_CTRL_ENABLE, Fargtype: 1}, 51593 {FzName: ts + 34850, Fop: MULTIPLEX_CTRL_SET_CHUNK_SIZE, Fargtype: 1}, 51594 {FzName: ts + 34861, Fop: MULTIPLEX_CTRL_SET_MAX_CHUNKS, Fargtype: 1}, 51595 {}, 51596 } 51597 51598 if objc != 5 { 51599 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34872) 51600 return TCL_ERROR 51601 } 51602 51603 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+40) { 51604 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+34908, 0)) 51605 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), ts+11945, 0)) 51606 return TCL_ERROR 51607 } else { 51608 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 40)).FobjClientData)) 51609 } 51610 51611 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 51612 interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+72, int32(unsafe.Sizeof(struct { 51613 FzName uintptr 51614 Fop int32 51615 Fargtype int32 51616 }{})), ts+2014, 0, bp+120) 51617 if rc != TCL_OK { 51618 return rc 51619 } 51620 51621 switch (*struct { 51622 FzName uintptr 51623 Fop int32 51624 Fargtype int32 51625 })(unsafe.Pointer(bp + 72 + uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*12)).Fargtype { 51626 case 1: 51627 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+124) != 0 { 51628 return TCL_ERROR 51629 } 51630 pArg = bp + 124 51631 break 51632 default: 51633 tcl.XTcl_WrongNumArgs(tls, interp, 4, objv, ts+2523) 51634 return TCL_ERROR 51635 } 51636 51637 rc = sqlite3.Xsqlite3_file_control(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), (*struct { 51638 FzName uintptr 51639 Fop int32 51640 Fargtype int32 51641 })(unsafe.Pointer(bp+72+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*12)).Fop, pArg) 51642 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51643 if rc == SQLITE_OK { 51644 return TCL_OK 51645 } 51646 return TCL_ERROR 51647 } 51648 51649 func Sqlitemultiplex_Init(tls *libc.TLS, interp uintptr) int32 { 51650 var i int32 51651 51652 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd7))/uint32(unsafe.Sizeof(struct { 51653 FzName uintptr 51654 FxProc uintptr 51655 }{})); i++ { 51656 tcl.XTcl_CreateObjCommand(tls, interp, aCmd7[i].FzName, aCmd7[i].FxProc, uintptr(0), uintptr(0)) 51657 } 51658 51659 return TCL_OK 51660 } 51661 51662 var aCmd7 = [3]struct { 51663 FzName uintptr 51664 FxProc uintptr 51665 }{ 51666 {FzName: ts + 34940, FxProc: 0}, 51667 {FzName: ts + 34969, FxProc: 0}, 51668 {FzName: ts + 34996, FxProc: 0}, 51669 } 51670 51671 type sqlite3_mutex = sqlite3_mutex1 51672 51673 var aName = [15]uintptr{ 51674 ts + 35022, ts + 35027, ts + 35037, ts + 35049, 51675 ts + 35060, ts + 35072, ts + 35084, ts + 35095, 51676 ts + 35107, ts + 35119, ts + 35131, ts + 35143, 51677 ts + 35155, ts + 35167, uintptr(0), 51678 } 51679 51680 type test_mutex_globals = struct { 51681 FisInstalled int32 51682 FdisableInit int32 51683 FdisableTry int32 51684 FisInit int32 51685 Fm sqlite3_mutex_methods 51686 FaCounter [14]int32 51687 FaStatic [12]sqlite3_mutex 51688 } 51689 51690 var g3 = test_mutex_globals{} 51691 51692 func counterMutexHeld(tls *libc.TLS, p uintptr) int32 { 51693 return (*struct { 51694 f func(*libc.TLS, uintptr) int32 51695 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexHeld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51696 } 51697 51698 func counterMutexNotheld(tls *libc.TLS, p uintptr) int32 { 51699 return (*struct { 51700 f func(*libc.TLS, uintptr) int32 51701 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexNotheld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51702 } 51703 51704 func counterMutexInit(tls *libc.TLS) int32 { 51705 var rc int32 51706 if g3.FdisableInit != 0 { 51707 return g3.FdisableInit 51708 } 51709 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexInit})).f(tls) 51710 g3.FisInit = 1 51711 return rc 51712 } 51713 51714 func counterMutexEnd(tls *libc.TLS) int32 { 51715 g3.FisInit = 0 51716 return (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnd})).f(tls) 51717 } 51718 51719 func counterMutexAlloc(tls *libc.TLS, eType int32) uintptr { 51720 var pReal uintptr 51721 var pRet uintptr = uintptr(0) 51722 51723 pReal = (*struct { 51724 f func(*libc.TLS, int32) uintptr 51725 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexAlloc})).f(tls, eType) 51726 if !(pReal != 0) { 51727 return uintptr(0) 51728 } 51729 51730 if eType == SQLITE_MUTEX_FAST || eType == SQLITE_MUTEX_RECURSIVE { 51731 pRet = libc.Xmalloc(tls, uint32(unsafe.Sizeof(sqlite3_mutex{}))) 51732 } else { 51733 var eStaticType int32 = eType - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_RECURSIVE + 1))) 51734 51735 pRet = uintptr(unsafe.Pointer(&g3)) + 108 + uintptr(eStaticType)*8 51736 } 51737 51738 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FeType = eType 51739 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FpReal = pReal 51740 return pRet 51741 } 51742 51743 func counterMutexFree(tls *libc.TLS, p uintptr) { 51744 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexFree})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51745 if (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_FAST || (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_RECURSIVE { 51746 libc.Xfree(tls, p) 51747 } 51748 } 51749 51750 func counterMutexEnter(tls *libc.TLS, p uintptr) { 51751 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 52 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51752 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnter})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51753 } 51754 51755 func counterMutexTry(tls *libc.TLS, p uintptr) int32 { 51756 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 52 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51757 if g3.FdisableTry != 0 { 51758 return SQLITE_BUSY 51759 } 51760 return (*struct { 51761 f func(*libc.TLS, uintptr) int32 51762 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexTry})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51763 } 51764 51765 func counterMutexLeave(tls *libc.TLS, p uintptr) { 51766 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexLeave})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51767 } 51768 51769 func test_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51770 var rc int32 51771 51772 if objc != 1 { 51773 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51774 return TCL_ERROR 51775 } 51776 51777 rc = sqlite3.Xsqlite3_shutdown(tls) 51778 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51779 return TCL_OK 51780 } 51781 51782 func test_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51783 var rc int32 51784 51785 if objc != 1 { 51786 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51787 return TCL_ERROR 51788 } 51789 51790 rc = sqlite3.Xsqlite3_initialize(tls) 51791 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51792 return TCL_OK 51793 } 51794 51795 func test_install_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51796 bp := tls.Alloc(96) 51797 defer tls.Free(96) 51798 51799 var rc int32 = SQLITE_OK 51800 51801 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 60)) = sqlite3_mutex_methods{ 51802 FxMutexInit: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexInit})), 51803 FxMutexEnd: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexEnd})), 51804 FxMutexAlloc: *(*uintptr)(unsafe.Pointer(&struct { 51805 f func(*libc.TLS, int32) uintptr 51806 }{counterMutexAlloc})), 51807 FxMutexFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexFree})), 51808 FxMutexEnter: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexEnter})), 51809 FxMutexTry: *(*uintptr)(unsafe.Pointer(&struct { 51810 f func(*libc.TLS, uintptr) int32 51811 }{counterMutexTry})), 51812 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexLeave})), 51813 FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 51814 f func(*libc.TLS, uintptr) int32 51815 }{counterMutexHeld})), 51816 FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 51817 f func(*libc.TLS, uintptr) int32 51818 }{counterMutexNotheld})), 51819 } 51820 51821 if objc != 2 { 51822 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 51823 return TCL_ERROR 51824 } 51825 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+56) { 51826 return TCL_ERROR 51827 } 51828 51829 if *(*int32)(unsafe.Pointer(bp + 56)) == g3.FisInstalled { 51830 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35179, 0)) 51831 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, func() uintptr { 51832 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 51833 return ts + 35199 51834 } 51835 return ts + 35217 51836 }(), 0)) 51837 return TCL_ERROR 51838 } 51839 51840 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 51841 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp+32, uintptr(unsafe.Pointer(&g3))+16)) 51842 if rc == SQLITE_OK { 51843 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+40, bp+60)) 51844 } 51845 g3.FdisableTry = 0 51846 } else { 51847 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+48, uintptr(unsafe.Pointer(&g3))+16)) 51848 libc.Xmemset(tls, uintptr(unsafe.Pointer(&g3))+16, 0, uint32(unsafe.Sizeof(sqlite3_mutex_methods{}))) 51849 } 51850 51851 if rc == SQLITE_OK { 51852 g3.FisInstalled = *(*int32)(unsafe.Pointer(bp + 56)) 51853 } 51854 51855 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51856 return TCL_OK 51857 } 51858 51859 func test_read_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51860 var pRet uintptr 51861 var ii int32 51862 51863 if objc != 1 { 51864 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51865 return TCL_ERROR 51866 } 51867 51868 pRet = tcl.XTcl_NewObj(tls) 51869 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 51870 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 51871 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, aName[ii], -1)) 51872 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 52 + uintptr(ii)*4)))) 51873 } 51874 tcl.XTcl_SetObjResult(tls, interp, pRet) 51875 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 51876 var _objPtr uintptr = pRet 51877 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 51878 tcl.XTclFreeObj(tls, _objPtr) 51879 } 51880 } 51881 51882 return TCL_OK 51883 } 51884 51885 func test_clear_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51886 var ii int32 51887 51888 if objc != 1 { 51889 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51890 return TCL_ERROR 51891 } 51892 51893 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 51894 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 52 + uintptr(ii)*4)) = 0 51895 } 51896 return TCL_OK 51897 } 51898 51899 func test_alloc_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51900 bp := tls.Alloc(124) 51901 defer tls.Free(124) 51902 51903 var p uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 51904 51905 sqlite3.Xsqlite3_mutex_free(tls, p) 51906 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+9889, libc.VaList(bp, p)) 51907 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, uintptr(0))) 51908 return TCL_OK 51909 } 51910 51911 func test_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51912 bp := tls.Alloc(36) 51913 defer tls.Free(36) 51914 51915 *(*[4]ConfigOption)(unsafe.Pointer(bp)) = [4]ConfigOption{ 51916 {FzName: ts + 35231, FiValue: SQLITE_CONFIG_SINGLETHREAD}, 51917 {FzName: ts + 35244, FiValue: SQLITE_CONFIG_MULTITHREAD}, 51918 {FzName: ts + 35256, FiValue: SQLITE_CONFIG_SERIALIZED}, 51919 {}, 51920 } 51921 var s int32 = int32(unsafe.Sizeof(ConfigOption{})) 51922 51923 var rc int32 51924 51925 if objc != 2 { 51926 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51927 return TCL_ERROR 51928 } 51929 51930 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp, s, ts+17631, 0, bp+32) != 0 { 51931 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+32) != 0 { 51932 return TCL_ERROR 51933 } 51934 } else { 51935 *(*int32)(unsafe.Pointer(bp + 32)) = (*ConfigOption)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 32)))*8)).FiValue 51936 } 51937 51938 rc = sqlite3.Xsqlite3_config(tls, *(*int32)(unsafe.Pointer(bp + 32)), 0) 51939 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 51940 return TCL_OK 51941 } 51942 51943 type ConfigOption = struct { 51944 FzName uintptr 51945 FiValue int32 51946 } 51947 51948 func getDbPointer1(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 51949 bp := tls.Alloc(32) 51950 defer tls.Free(32) 51951 51952 var db uintptr 51953 51954 var zCmd uintptr = tcl.XTcl_GetString(tls, pObj) 51955 if tcl.XTcl_GetCommandInfo(tls, pInterp, zCmd, bp) != 0 { 51956 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)) 51957 } else { 51958 db = sqlite3TestTextToPtr(tls, zCmd) 51959 } 51960 51961 return db 51962 } 51963 51964 func getStaticMutexPointer(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 51965 bp := tls.Alloc(4) 51966 defer tls.Free(4) 51967 51968 if tcl.XTcl_GetIndexFromObjStruct(tls, pInterp, pObj, uintptr(unsafe.Pointer(&aName)), int32(unsafe.Sizeof(uintptr(0))), ts+35267, 0, bp) != 0 { 51969 return uintptr(0) 51970 } 51971 51972 return counterMutexAlloc(tls, *(*int32)(unsafe.Pointer(bp))) 51973 } 51974 51975 func test_enter_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51976 var pMutex uintptr 51977 if objc != 2 { 51978 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 51979 return TCL_ERROR 51980 } 51981 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 51982 if !(pMutex != 0) { 51983 return TCL_ERROR 51984 } 51985 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 51986 return TCL_OK 51987 } 51988 51989 func test_leave_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51990 var pMutex uintptr 51991 if objc != 2 { 51992 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 51993 return TCL_ERROR 51994 } 51995 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 51996 if !(pMutex != 0) { 51997 return TCL_ERROR 51998 } 51999 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 52000 return TCL_OK 52001 } 52002 52003 func test_enter_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52004 var db uintptr 52005 if objc != 2 { 52006 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 52007 return TCL_ERROR 52008 } 52009 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 52010 if !(db != 0) { 52011 return TCL_ERROR 52012 } 52013 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 52014 return TCL_OK 52015 } 52016 52017 func test_leave_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52018 var db uintptr 52019 if objc != 2 { 52020 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 52021 return TCL_ERROR 52022 } 52023 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 52024 if !(db != 0) { 52025 return TCL_ERROR 52026 } 52027 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 52028 return TCL_OK 52029 } 52030 52031 func Sqlitetest_mutex_Init(tls *libc.TLS, interp uintptr) int32 { 52032 var i int32 52033 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd8))/uint32(unsafe.Sizeof(struct { 52034 FzName uintptr 52035 FxProc uintptr 52036 }{})); i++ { 52037 tcl.XTcl_CreateObjCommand(tls, interp, aCmd8[i].FzName, aCmd8[i].FxProc, uintptr(0), uintptr(0)) 52038 } 52039 52040 tcl.XTcl_LinkVar(tls, interp, ts+35278, 52041 uintptr(unsafe.Pointer(&g3))+4, TCL_LINK_INT) 52042 tcl.XTcl_LinkVar(tls, interp, ts+35297, 52043 uintptr(unsafe.Pointer(&g3))+8, TCL_LINK_INT) 52044 return SQLITE_OK 52045 } 52046 52047 var aCmd8 = [11]struct { 52048 FzName uintptr 52049 FxProc uintptr 52050 }{ 52051 {FzName: ts + 35315, FxProc: 0}, 52052 {FzName: ts + 35332, FxProc: 0}, 52053 {FzName: ts + 35351, FxProc: 0}, 52054 {FzName: ts + 35366, FxProc: 0}, 52055 {FzName: ts + 35385, FxProc: 0}, 52056 {FzName: ts + 35404, FxProc: 0}, 52057 {FzName: ts + 35419, FxProc: 0}, 52058 {FzName: ts + 35434, FxProc: 0}, 52059 {FzName: ts + 35454, FxProc: 0}, 52060 {FzName: ts + 35477, FxProc: 0}, 52061 {FzName: ts + 35497, FxProc: 0}, 52062 } 52063 52064 type fs_real_file1 = struct { 52065 FpFile uintptr 52066 FzName uintptr 52067 FnDatabase int32 52068 FnJournal int32 52069 FnBlob int32 52070 FnRef int32 52071 FpNext uintptr 52072 FppThis uintptr 52073 } 52074 52075 type fs_real_file = fs_real_file1 52076 52077 type fs_file1 = struct { 52078 Fbase sqlite3_file 52079 FeType int32 52080 FpReal uintptr 52081 } 52082 52083 type fs_file = fs_file1 52084 52085 type tmp_file1 = struct { 52086 Fbase sqlite3_file 52087 FnSize int32 52088 FnAlloc int32 52089 FzAlloc uintptr 52090 } 52091 52092 type tmp_file = tmp_file1 52093 52094 type fs_vfs_t1 = struct { 52095 Fbase sqlite3_vfs 52096 FpFileList uintptr 52097 FpParent uintptr 52098 } 52099 52100 type fs_vfs_t = fs_vfs_t1 52101 52102 var fs_vfs = fs_vfs_t{ 52103 Fbase: sqlite3_vfs{ 52104 FiVersion: 1, 52105 FzName: ts + 31055, 52106 FxOpen: 0, 52107 FxDelete: 0, 52108 FxAccess: 0, 52109 FxFullPathname: 0, 52110 FxDlOpen: 0, 52111 FxDlError: 0, 52112 FxDlSym: 0, 52113 FxDlClose: 0, 52114 FxRandomness: 0, 52115 FxSleep: 0, 52116 FxCurrentTime: 0, 52117 }, 52118 } 52119 52120 var fs_io_methods = sqlite3_io_methods{ 52121 FiVersion: 1, 52122 FxClose: 0, 52123 FxRead: 0, 52124 FxWrite: 0, 52125 FxTruncate: 0, 52126 FxSync: 0, 52127 FxFileSize: 0, 52128 FxLock: 0, 52129 FxUnlock: 0, 52130 FxCheckReservedLock: 0, 52131 FxFileControl: 0, 52132 FxSectorSize: 0, 52133 FxDeviceCharacteristics: 0, 52134 } 52135 52136 var tmp_io_methods = sqlite3_io_methods{ 52137 FiVersion: 1, 52138 FxClose: 0, 52139 FxRead: 0, 52140 FxWrite: 0, 52141 FxTruncate: 0, 52142 FxSync: 0, 52143 FxFileSize: 0, 52144 FxLock: 0, 52145 FxUnlock: 0, 52146 FxCheckReservedLock: 0, 52147 FxFileControl: 0, 52148 FxSectorSize: 0, 52149 FxDeviceCharacteristics: 0, 52150 } 52151 52152 func tmpClose(tls *libc.TLS, pFile uintptr) int32 { 52153 var pTmp uintptr = pFile 52154 sqlite3.Xsqlite3_free(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc) 52155 return SQLITE_OK 52156 } 52157 52158 func tmpRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52159 var pTmp uintptr = pFile 52160 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) { 52161 return SQLITE_IOERR | int32(2)<<8 52162 } 52163 libc.Xmemcpy(tls, zBuf, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), uint32(iAmt)) 52164 return SQLITE_OK 52165 } 52166 52167 func tmpWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52168 var pTmp uintptr = pFile 52169 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc) { 52170 var nNew int32 = int32(int64(2) * (sqlite_int64(iAmt) + iOfst + sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc))) 52171 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc, nNew) 52172 if !(zNew != 0) { 52173 return SQLITE_NOMEM 52174 } 52175 (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc = zNew 52176 (*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc = nNew 52177 } 52178 libc.Xmemcpy(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), zBuf, uint32(iAmt)) 52179 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 52180 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) > iOfst+sqlite_int64(iAmt) { 52181 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 52182 } 52183 return int32(iOfst + sqlite_int64(iAmt)) 52184 }() 52185 return SQLITE_OK 52186 } 52187 52188 func tmpTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52189 var pTmp uintptr = pFile 52190 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 52191 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) < size { 52192 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 52193 } 52194 return int32(size) 52195 }() 52196 return SQLITE_OK 52197 } 52198 52199 func tmpSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52200 return SQLITE_OK 52201 } 52202 52203 func tmpFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52204 var pTmp uintptr = pFile 52205 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) 52206 return SQLITE_OK 52207 } 52208 52209 func tmpLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52210 return SQLITE_OK 52211 } 52212 52213 func tmpUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52214 return SQLITE_OK 52215 } 52216 52217 func tmpCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52218 *(*int32)(unsafe.Pointer(pResOut)) = 0 52219 return SQLITE_OK 52220 } 52221 52222 func tmpFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52223 return SQLITE_OK 52224 } 52225 52226 func tmpSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52227 return 0 52228 } 52229 52230 func tmpDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52231 return 0 52232 } 52233 52234 func fsClose1(tls *libc.TLS, pFile uintptr) int32 { 52235 var rc int32 = SQLITE_OK 52236 var p uintptr = pFile 52237 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52238 52239 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef-- 52240 52241 if (*fs_real_file)(unsafe.Pointer(pReal)).FnRef == 0 { 52242 *(*uintptr)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FppThis)) = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 52243 if (*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0 { 52244 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = (*fs_real_file)(unsafe.Pointer(pReal)).FppThis 52245 } 52246 rc = (*struct { 52247 f func(*libc.TLS, uintptr) int32 52248 })(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) 52249 sqlite3.Xsqlite3_free(tls, pReal) 52250 } 52251 52252 return rc 52253 } 52254 52255 func fsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52256 var rc int32 = SQLITE_OK 52257 var p uintptr = pFile 52258 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52259 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52260 52261 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) || 52262 (*fs_file)(unsafe.Pointer(p)).FeType == JOURNAL_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 52263 rc = SQLITE_IOERR | int32(2)<<8 52264 } else if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52265 rc = (*struct { 52266 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52267 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxRead})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 52268 } else { 52269 var iRem int32 = iAmt 52270 var iBuf int32 = 0 52271 var ii int32 = int32(iOfst) 52272 for iRem > 0 && rc == SQLITE_OK { 52273 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 52274 var iRealAmt int32 = func() int32 { 52275 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 52276 return iRem 52277 } 52278 return BLOCKSIZE - iRealOff%BLOCKSIZE 52279 }() 52280 52281 rc = (*struct { 52282 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52283 })(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)) 52284 ii = ii + iRealAmt 52285 iBuf = iBuf + iRealAmt 52286 iRem = iRem - iRealAmt 52287 } 52288 } 52289 52290 return rc 52291 } 52292 52293 func fsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52294 var rc int32 = SQLITE_OK 52295 var p uintptr = pFile 52296 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52297 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52298 52299 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52300 if sqlite_int64(iAmt)+iOfst+int64(BLOCKSIZE) > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-(*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 52301 rc = SQLITE_FULL 52302 } else { 52303 rc = (*struct { 52304 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52305 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 52306 if rc == SQLITE_OK { 52307 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 52308 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) > sqlite_int64(iAmt)+iOfst { 52309 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 52310 } 52311 return int32(sqlite_int64(iAmt) + iOfst) 52312 }() 52313 } 52314 } 52315 } else { 52316 var iRem int32 = iAmt 52317 var iBuf int32 = 0 52318 var ii int32 = int32(iOfst) 52319 for iRem > 0 && rc == SQLITE_OK { 52320 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 52321 var iRealAmt int32 = func() int32 { 52322 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 52323 return iRem 52324 } 52325 return BLOCKSIZE - iRealOff%BLOCKSIZE 52326 }() 52327 52328 if iRealOff < (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase+BLOCKSIZE { 52329 rc = SQLITE_FULL 52330 } else { 52331 rc = (*struct { 52332 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52333 })(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)) 52334 ii = ii + iRealAmt 52335 iBuf = iBuf + iRealAmt 52336 iRem = iRem - iRealAmt 52337 } 52338 } 52339 if rc == SQLITE_OK { 52340 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 52341 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) > sqlite_int64(iAmt)+iOfst { 52342 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 52343 } 52344 return int32(sqlite_int64(iAmt) + iOfst) 52345 }() 52346 } 52347 } 52348 52349 return rc 52350 } 52351 52352 func fsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52353 var p uintptr = pFile 52354 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52355 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52356 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 52357 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) < size { 52358 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 52359 } 52360 return int32(size) 52361 }() 52362 } else { 52363 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 52364 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) < size { 52365 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 52366 } 52367 return int32(size) 52368 }() 52369 } 52370 return SQLITE_OK 52371 } 52372 52373 func fsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52374 bp := tls.Alloc(4) 52375 defer tls.Free(4) 52376 52377 var p uintptr = pFile 52378 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52379 var pRealFile uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52380 var rc int32 = SQLITE_OK 52381 52382 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52383 *(*uint8)(unsafe.Pointer(bp)) = uint8(uint32((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) & 0xFF000000 >> 24) 52384 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x00FF0000 >> 16) 52385 *(*uint8)(unsafe.Pointer(bp + 2)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x0000FF00 >> 8) 52386 *(*uint8)(unsafe.Pointer(bp + 3)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x000000FF) 52387 rc = (*struct { 52388 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52389 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, bp, 4, int64(0)) 52390 } 52391 if rc == SQLITE_OK { 52392 rc = (*struct { 52393 f func(*libc.TLS, uintptr, int32) int32 52394 })(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)) 52395 } 52396 52397 return rc 52398 } 52399 52400 func fsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52401 var p uintptr = pFile 52402 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52403 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52404 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) 52405 } else { 52406 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) 52407 } 52408 return SQLITE_OK 52409 } 52410 52411 func fsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52412 return SQLITE_OK 52413 } 52414 52415 func fsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52416 return SQLITE_OK 52417 } 52418 52419 func fsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52420 *(*int32)(unsafe.Pointer(pResOut)) = 0 52421 return SQLITE_OK 52422 } 52423 52424 func fsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52425 if op == SQLITE_FCNTL_PRAGMA { 52426 return SQLITE_NOTFOUND 52427 } 52428 return SQLITE_OK 52429 } 52430 52431 func fsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52432 return BLOCKSIZE 52433 } 52434 52435 func fsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52436 return 0 52437 } 52438 52439 func fsOpen1(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 52440 bp := tls.Alloc(12) 52441 defer tls.Free(12) 52442 52443 var pFsVfs uintptr 52444 var p uintptr 52445 var pReal uintptr 52446 var eType int32 52447 var nName int32 52448 var rc int32 52449 var p2 uintptr 52450 52451 var real_flags int32 52452 52453 var pRealFile uintptr 52454 var pParent uintptr 52455 pFsVfs = pVfs 52456 p = pFile 52457 pReal = uintptr(0) 52458 rc = SQLITE_OK 52459 52460 if !(0 == flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL)) { 52461 goto __1 52462 } 52463 p2 = pFile 52464 libc.Xmemset(tls, p2, 0, uint32(unsafe.Sizeof(tmp_file{}))) 52465 (*tmp_file)(unsafe.Pointer(p2)).Fbase.FpMethods = uintptr(unsafe.Pointer(&tmp_io_methods)) 52466 return SQLITE_OK 52467 __1: 52468 ; 52469 eType = func() int32 { 52470 if flags&SQLITE_OPEN_MAIN_DB != 0 { 52471 return DATABASE_FILE 52472 } 52473 return JOURNAL_FILE 52474 }() 52475 (*fs_file)(unsafe.Pointer(p)).Fbase.FpMethods = uintptr(unsafe.Pointer(&fs_io_methods)) 52476 (*fs_file)(unsafe.Pointer(p)).FeType = eType 52477 52478 nName = int32(libc.Xstrlen(tls, zName)) - func() int32 { 52479 if eType == JOURNAL_FILE { 52480 return 8 52481 } 52482 return 0 52483 }() 52484 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52485 __2: 52486 if !(pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zName, uint32(nName)) != 0) { 52487 goto __4 52488 } 52489 goto __3 52490 __3: 52491 pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 52492 goto __2 52493 goto __4 52494 __4: 52495 ; 52496 if !!(pReal != 0) { 52497 goto __5 52498 } 52499 real_flags = flags&libc.CplInt32(SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB 52500 pParent = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpParent 52501 52502 pReal = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(fs_real_file{}))+uint32((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile))) 52503 if !!(pReal != 0) { 52504 goto __6 52505 } 52506 rc = SQLITE_NOMEM 52507 goto open_out 52508 __6: 52509 ; 52510 libc.Xmemset(tls, pReal, 0, uint32(unsafe.Sizeof(fs_real_file{}))+uint32((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile)) 52511 (*fs_real_file)(unsafe.Pointer(pReal)).FzName = zName 52512 (*fs_real_file)(unsafe.Pointer(pReal)).FpFile = pReal + 1*32 52513 52514 rc = (*struct { 52515 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52516 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zName, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile, real_flags, pOutFlags) 52517 if !(rc != SQLITE_OK) { 52518 goto __7 52519 } 52520 goto open_out 52521 __7: 52522 ; 52523 pRealFile = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52524 52525 rc = (*struct { 52526 f func(*libc.TLS, uintptr, uintptr) int32 52527 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxFileSize})).f(tls, pRealFile, bp) 52528 if !(rc != SQLITE_OK) { 52529 goto __8 52530 } 52531 goto open_out 52532 __8: 52533 ; 52534 if !(*(*sqlite3_int64)(unsafe.Pointer(bp)) == int64(0)) { 52535 goto __9 52536 } 52537 rc = (*struct { 52538 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52539 })(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)) 52540 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = BLOBSIZE 52541 goto __10 52542 __9: 52543 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = int32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 52544 rc = (*struct { 52545 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52546 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxRead})).f(tls, pRealFile, bp+8, 4, int64(0)) 52547 (*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))) 52548 if !(rc == SQLITE_OK) { 52549 goto __11 52550 } 52551 rc = (*struct { 52552 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52553 })(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)) 52554 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) { 52555 goto __12 52556 } 52557 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob 52558 __12: 52559 ; 52560 __11: 52561 ; 52562 __10: 52563 ; 52564 if !(rc == SQLITE_OK) { 52565 goto __13 52566 } 52567 (*fs_real_file)(unsafe.Pointer(pReal)).FpNext = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52568 if !((*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0) { 52569 goto __14 52570 } 52571 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = pReal + 24 52572 __14: 52573 ; 52574 (*fs_real_file)(unsafe.Pointer(pReal)).FppThis = pFsVfs + 88 52575 (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList = pReal 52576 __13: 52577 ; 52578 __5: 52579 ; 52580 open_out: 52581 if !(pReal != 0) { 52582 goto __15 52583 } 52584 if !(rc == SQLITE_OK) { 52585 goto __16 52586 } 52587 (*fs_file)(unsafe.Pointer(p)).FpReal = pReal 52588 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef++ 52589 goto __17 52590 __16: 52591 if !((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods != 0) { 52592 goto __18 52593 } 52594 (*struct { 52595 f func(*libc.TLS, uintptr) int32 52596 })(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) 52597 __18: 52598 ; 52599 sqlite3.Xsqlite3_free(tls, pReal) 52600 __17: 52601 ; 52602 __15: 52603 ; 52604 return rc 52605 } 52606 52607 func fsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 52608 var rc int32 = SQLITE_OK 52609 var pFsVfs uintptr = pVfs 52610 var pReal uintptr 52611 var pF uintptr 52612 var nName int32 = int32(libc.Xstrlen(tls, zPath)) - 8 52613 52614 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52615 for ; pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zPath, uint32(nName)) != 0; pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext { 52616 } 52617 if pReal != 0 { 52618 pF = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52619 rc = (*struct { 52620 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52621 })(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)) 52622 if rc == SQLITE_OK { 52623 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = 0 52624 } 52625 } 52626 return rc 52627 } 52628 52629 func fsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 52630 var pFsVfs uintptr = pVfs 52631 var pReal uintptr 52632 var isJournal int32 = 0 52633 var nName int32 = int32(libc.Xstrlen(tls, zPath)) 52634 52635 if flags != SQLITE_ACCESS_EXISTS { 52636 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52637 return (*struct { 52638 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52639 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxAccess})).f(tls, pParent, zPath, flags, pResOut) 52640 } 52641 52642 if nName > 8 && libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nName-8)) == 0 { 52643 nName = nName - 8 52644 isJournal = 1 52645 } 52646 52647 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52648 for ; pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zPath, uint32(nName)) != 0; pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext { 52649 } 52650 52651 *(*int32)(unsafe.Pointer(pResOut)) = libc.Bool32(pReal != 0 && (!(isJournal != 0) || (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal > 0)) 52652 return SQLITE_OK 52653 } 52654 52655 func fsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 52656 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52657 return (*struct { 52658 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52659 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zPath, nOut, zOut) 52660 } 52661 52662 func fsDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 52663 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52664 return (*struct { 52665 f func(*libc.TLS, uintptr, uintptr) uintptr 52666 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlOpen})).f(tls, pParent, zPath) 52667 } 52668 52669 func fsDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 52670 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52671 (*struct { 52672 f func(*libc.TLS, uintptr, int32, uintptr) 52673 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlError})).f(tls, pParent, nByte, zErrMsg) 52674 } 52675 52676 func fsDlSym(tls *libc.TLS, pVfs uintptr, pH uintptr, zSym uintptr) uintptr { 52677 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52678 return (*struct { 52679 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 52680 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlSym})).f(tls, pParent, pH, zSym) 52681 } 52682 52683 func fsDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 52684 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52685 (*struct { 52686 f func(*libc.TLS, uintptr, uintptr) 52687 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlClose})).f(tls, pParent, pHandle) 52688 } 52689 52690 func fsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 52691 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52692 return (*struct { 52693 f func(*libc.TLS, uintptr, int32, uintptr) int32 52694 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxRandomness})).f(tls, pParent, nByte, zBufOut) 52695 } 52696 52697 func fsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 52698 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52699 return (*struct { 52700 f func(*libc.TLS, uintptr, int32) int32 52701 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxSleep})).f(tls, pParent, nMicro) 52702 } 52703 52704 func fsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 52705 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52706 return (*struct { 52707 f func(*libc.TLS, uintptr, uintptr) int32 52708 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxCurrentTime})).f(tls, pParent, pTimeOut) 52709 } 52710 52711 func fs_register(tls *libc.TLS) int32 { 52712 if fs_vfs.FpParent != 0 { 52713 return SQLITE_OK 52714 } 52715 fs_vfs.FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 52716 fs_vfs.Fbase.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(fs_vfs.FpParent)).FmxPathname 52717 fs_vfs.Fbase.FszOsFile = func() int32 { 52718 if uint32(unsafe.Sizeof(tmp_file{})) > uint32(unsafe.Sizeof(fs_file{})) { 52719 return int32(unsafe.Sizeof(tmp_file{})) 52720 } 52721 return int32(unsafe.Sizeof(fs_file{})) 52722 }() 52723 return sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&fs_vfs)), 0) 52724 } 52725 52726 func SqlitetestOnefile_Init(tls *libc.TLS) int32 { 52727 return fs_register(tls) 52728 } 52729 52730 type VfslogVfs1 = struct { 52731 Fbase sqlite3_vfs 52732 FpVfs uintptr 52733 FiNextFileId int32 52734 FpLog uintptr 52735 FiOffset sqlite3_int64 52736 FnBuf int32 52737 FaBuf [8192]int8 52738 } 52739 52740 type VfslogVfs = VfslogVfs1 52741 type VfslogFile1 = struct { 52742 Fbase sqlite3_file 52743 FpReal uintptr 52744 FpVfslog uintptr 52745 FiFileId int32 52746 } 52747 52748 type VfslogFile = VfslogFile1 52749 52750 var vfslog_vfs = sqlite3_vfs{ 52751 FiVersion: 1, 52752 FszOsFile: int32(unsafe.Sizeof(VfslogFile{})), 52753 FmxPathname: INST_MAX_PATHNAME, 52754 FxOpen: 0, 52755 FxDelete: 0, 52756 FxAccess: 0, 52757 FxFullPathname: 0, 52758 FxDlOpen: 0, 52759 FxDlError: 0, 52760 FxDlSym: 0, 52761 FxDlClose: 0, 52762 FxRandomness: 0, 52763 FxSleep: 0, 52764 FxCurrentTime: 0, 52765 FxGetLastError: 0, 52766 FxCurrentTimeInt64: 0, 52767 } 52768 52769 var vfslog_io_methods = sqlite3_io_methods{ 52770 FiVersion: 2, 52771 FxClose: 0, 52772 FxRead: 0, 52773 FxWrite: 0, 52774 FxTruncate: 0, 52775 FxSync: 0, 52776 FxFileSize: 0, 52777 FxLock: 0, 52778 FxUnlock: 0, 52779 FxCheckReservedLock: 0, 52780 FxFileControl: 0, 52781 FxSectorSize: 0, 52782 FxDeviceCharacteristics: 0, 52783 FxShmMap: 0, 52784 FxShmLock: 0, 52785 FxShmBarrier: 0, 52786 FxShmUnmap: 0, 52787 } 52788 52789 func vfslog_time(tls *libc.TLS) sqlite3_uint64 { 52790 bp := tls.Alloc(8) 52791 defer tls.Free(8) 52792 52793 libc.Xgettimeofday(tls, bp, uintptr(0)) 52794 return sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_usec) + sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_sec)*uint64(1000000) 52795 } 52796 52797 func vfslogClose(tls *libc.TLS, pFile uintptr) int32 { 52798 var t sqlite3_uint64 52799 var rc int32 = SQLITE_OK 52800 var p uintptr = pFile 52801 52802 t = vfslog_time(tls) 52803 if (*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 52804 rc = (*struct { 52805 f func(*libc.TLS, uintptr) int32 52806 })(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) 52807 } 52808 t = vfslog_time(tls) - t 52809 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CLOSE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52810 return rc 52811 } 52812 52813 func vfslogRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52814 var rc int32 52815 var t sqlite3_uint64 52816 var p uintptr = pFile 52817 t = vfslog_time(tls) 52818 rc = (*struct { 52819 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52820 })(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) 52821 t = vfslog_time(tls) - t 52822 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_READ, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 52823 return rc 52824 } 52825 52826 func vfslogWrite(tls *libc.TLS, pFile uintptr, z uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52827 var rc int32 52828 var t sqlite3_uint64 52829 var p uintptr = pFile 52830 t = vfslog_time(tls) 52831 rc = (*struct { 52832 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52833 })(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) 52834 t = vfslog_time(tls) - t 52835 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_WRITE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 52836 return rc 52837 } 52838 52839 func vfslogTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52840 var rc int32 52841 var t sqlite3_uint64 52842 var p uintptr = pFile 52843 t = vfslog_time(tls) 52844 rc = (*struct { 52845 f func(*libc.TLS, uintptr, sqlite3_int64) int32 52846 })(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) 52847 t = vfslog_time(tls) - t 52848 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_TRUNCATE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, int32(size)) 52849 return rc 52850 } 52851 52852 func vfslogSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52853 var rc int32 52854 var t sqlite3_uint64 52855 var p uintptr = pFile 52856 t = vfslog_time(tls) 52857 rc = (*struct { 52858 f func(*libc.TLS, uintptr, int32) int32 52859 })(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) 52860 t = vfslog_time(tls) - t 52861 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SYNC, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, flags, 0) 52862 return rc 52863 } 52864 52865 func vfslogFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52866 var rc int32 52867 var t sqlite3_uint64 52868 var p uintptr = pFile 52869 t = vfslog_time(tls) 52870 rc = (*struct { 52871 f func(*libc.TLS, uintptr, uintptr) int32 52872 })(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) 52873 t = vfslog_time(tls) - t 52874 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)))) 52875 return rc 52876 } 52877 52878 func vfslogLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52879 var rc int32 52880 var t sqlite3_uint64 52881 var p uintptr = pFile 52882 t = vfslog_time(tls) 52883 rc = (*struct { 52884 f func(*libc.TLS, uintptr, int32) int32 52885 })(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) 52886 t = vfslog_time(tls) - t 52887 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_LOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 52888 return rc 52889 } 52890 52891 func vfslogUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52892 var rc int32 52893 var t sqlite3_uint64 52894 var p uintptr = pFile 52895 t = vfslog_time(tls) 52896 rc = (*struct { 52897 f func(*libc.TLS, uintptr, int32) int32 52898 })(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) 52899 t = vfslog_time(tls) - t 52900 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_UNLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 52901 return rc 52902 } 52903 52904 func vfslogCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52905 var rc int32 52906 var t sqlite3_uint64 52907 var p uintptr = pFile 52908 t = vfslog_time(tls) 52909 rc = (*struct { 52910 f func(*libc.TLS, uintptr, uintptr) int32 52911 })(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) 52912 t = vfslog_time(tls) - t 52913 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CHECKRESERVEDLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, *(*int32)(unsafe.Pointer(pResOut)), 0) 52914 return rc 52915 } 52916 52917 func vfslogFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52918 bp := tls.Alloc(8) 52919 defer tls.Free(8) 52920 52921 var p uintptr = pFile 52922 var rc int32 = (*struct { 52923 f func(*libc.TLS, uintptr, int32, uintptr) int32 52924 })(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) 52925 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 52926 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35525, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 52927 } 52928 return rc 52929 } 52930 52931 func vfslogSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52932 var rc int32 52933 var t sqlite3_uint64 52934 var p uintptr = pFile 52935 t = vfslog_time(tls) 52936 rc = (*struct { 52937 f func(*libc.TLS, uintptr) int32 52938 })(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) 52939 t = vfslog_time(tls) - t 52940 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SECTORSIZE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52941 return rc 52942 } 52943 52944 func vfslogDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52945 var rc int32 52946 var t sqlite3_uint64 52947 var p uintptr = pFile 52948 t = vfslog_time(tls) 52949 rc = (*struct { 52950 f func(*libc.TLS, uintptr) int32 52951 })(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) 52952 t = vfslog_time(tls) - t 52953 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_DEVCHAR, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52954 return rc 52955 } 52956 52957 func vfslogShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 52958 var rc int32 52959 var t sqlite3_uint64 52960 var p uintptr = pFile 52961 t = vfslog_time(tls) 52962 rc = (*struct { 52963 f func(*libc.TLS, uintptr, int32, int32, int32) int32 52964 })(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) 52965 t = vfslog_time(tls) - t 52966 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52967 return rc 52968 } 52969 52970 func vfslogShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 52971 var rc int32 52972 var t sqlite3_uint64 52973 var p uintptr = pFile 52974 t = vfslog_time(tls) 52975 rc = (*struct { 52976 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 52977 })(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) 52978 t = vfslog_time(tls) - t 52979 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 52980 return rc 52981 } 52982 52983 func vfslogShmBarrier(tls *libc.TLS, pFile uintptr) { 52984 var t sqlite3_uint64 52985 var p uintptr = pFile 52986 t = vfslog_time(tls) 52987 (*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) 52988 t = vfslog_time(tls) - t 52989 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMBARRIER, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), SQLITE_OK, 0, 0) 52990 } 52991 52992 func vfslogShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 52993 var rc int32 52994 var t sqlite3_uint64 52995 var p uintptr = pFile 52996 t = vfslog_time(tls) 52997 rc = (*struct { 52998 f func(*libc.TLS, uintptr, int32) int32 52999 })(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) 53000 t = vfslog_time(tls) - t 53001 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMUNMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53002 return rc 53003 } 53004 53005 func vfslogOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 53006 var rc int32 53007 var t sqlite3_uint64 53008 var p uintptr = pFile 53009 var pLog uintptr = pVfs 53010 53011 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&vfslog_io_methods)) 53012 (*VfslogFile)(unsafe.Pointer(p)).FpReal = p + 1*16 53013 (*VfslogFile)(unsafe.Pointer(p)).FpVfslog = pVfs 53014 (*VfslogFile)(unsafe.Pointer(p)).FiFileId = libc.PreIncInt32(&(*VfslogVfs)(unsafe.Pointer(pLog)).FiNextFileId, 1) 53015 53016 t = vfslog_time(tls) 53017 rc = (*struct { 53018 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53019 })(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) 53020 t = vfslog_time(tls) - t 53021 53022 vfslog_call(tls, pVfs, OS_OPEN, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53023 vfslog_string(tls, pVfs, zName) 53024 return rc 53025 } 53026 53027 func vfslogDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 53028 var rc int32 53029 var t sqlite3_uint64 53030 t = vfslog_time(tls) 53031 rc = (*struct { 53032 f func(*libc.TLS, uintptr, uintptr, int32) int32 53033 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDelete})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, dirSync) 53034 t = vfslog_time(tls) - t 53035 vfslog_call(tls, pVfs, OS_DELETE, 0, int64(t), rc, dirSync, 0) 53036 vfslog_string(tls, pVfs, zPath) 53037 return rc 53038 } 53039 53040 func vfslogAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 53041 var rc int32 53042 var t sqlite3_uint64 53043 t = vfslog_time(tls) 53044 rc = (*struct { 53045 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53046 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxAccess})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, flags, pResOut) 53047 t = vfslog_time(tls) - t 53048 vfslog_call(tls, pVfs, OS_ACCESS, 0, int64(t), rc, flags, *(*int32)(unsafe.Pointer(pResOut))) 53049 vfslog_string(tls, pVfs, zPath) 53050 return rc 53051 } 53052 53053 func vfslogFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 53054 return (*struct { 53055 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53056 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxFullPathname})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, nOut, zOut) 53057 } 53058 53059 func vfslogDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 53060 return (*struct { 53061 f func(*libc.TLS, uintptr, uintptr) uintptr 53062 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlOpen})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath) 53063 } 53064 53065 func vfslogDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 53066 (*struct { 53067 f func(*libc.TLS, uintptr, int32, uintptr) 53068 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zErrMsg) 53069 } 53070 53071 func vfslogDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 53072 return (*struct { 53073 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 53074 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlSym})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p, zSym) 53075 } 53076 53077 func vfslogDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 53078 (*struct { 53079 f func(*libc.TLS, uintptr, uintptr) 53080 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlClose})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pHandle) 53081 } 53082 53083 func vfslogRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 53084 return (*struct { 53085 f func(*libc.TLS, uintptr, int32, uintptr) int32 53086 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxRandomness})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zBufOut) 53087 } 53088 53089 func vfslogSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 53090 return (*struct { 53091 f func(*libc.TLS, uintptr, int32) int32 53092 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxSleep})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nMicro) 53093 } 53094 53095 func vfslogCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 53096 return (*struct { 53097 f func(*libc.TLS, uintptr, uintptr) int32 53098 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTime})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pTimeOut) 53099 } 53100 53101 func vfslogGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 53102 return (*struct { 53103 f func(*libc.TLS, uintptr, int32, uintptr) int32 53104 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxGetLastError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, a, b) 53105 } 53106 53107 func vfslogCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 53108 return (*struct { 53109 f func(*libc.TLS, uintptr, uintptr) int32 53110 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTimeInt64})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p) 53111 } 53112 53113 func vfslog_flush(tls *libc.TLS, p uintptr) { 53114 var pending int32 = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 53115 var persist int32 = sqlite3.Xsqlite3_io_error_persist 53116 var diskfull int32 = sqlite3.Xsqlite3_diskfull_pending 53117 53118 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(0)) 53119 sqlite3.Xsqlite3_io_error_persist = 0 53120 sqlite3.Xsqlite3_diskfull_pending = 0 53121 53122 if (*VfslogVfs)(unsafe.Pointer(p)).FnBuf != 0 { 53123 (*struct { 53124 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53125 })(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+112, (*VfslogVfs)(unsafe.Pointer(p)).FnBuf, (*VfslogVfs)(unsafe.Pointer(p)).FiOffset) 53126 *(*sqlite3_int64)(unsafe.Pointer(p + 100)) += sqlite3_int64((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53127 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 0 53128 } 53129 53130 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, pending) 53131 sqlite3.Xsqlite3_io_error_persist = persist 53132 sqlite3.Xsqlite3_diskfull_pending = diskfull 53133 } 53134 53135 func put32bits(tls *libc.TLS, p uintptr, v uint32) { 53136 *(*uint8)(unsafe.Pointer(p)) = uint8(v >> 24) 53137 *(*uint8)(unsafe.Pointer(p + 1)) = uint8(v >> 16) 53138 *(*uint8)(unsafe.Pointer(p + 2)) = uint8(v >> 8) 53139 *(*uint8)(unsafe.Pointer(p + 3)) = uint8(v) 53140 } 53141 53142 func vfslog_call(tls *libc.TLS, pVfs uintptr, eEvent int32, iFileid int32, nClick sqlite3_int64, return_code int32, size int32, offset int32) { 53143 var p uintptr = pVfs 53144 var zRec uintptr 53145 if uint32(24+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint32(unsafe.Sizeof([8192]int8{})) { 53146 vfslog_flush(tls, p) 53147 } 53148 zRec = p + 112 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53149 put32bits(tls, zRec, uint32(eEvent)) 53150 put32bits(tls, zRec+4, uint32(iFileid)) 53151 put32bits(tls, zRec+8, uint32(nClick&int64(0xffff))) 53152 put32bits(tls, zRec+12, uint32(return_code)) 53153 put32bits(tls, zRec+16, uint32(size)) 53154 put32bits(tls, zRec+20, uint32(offset)) 53155 *(*int32)(unsafe.Pointer(p + 108)) += 24 53156 } 53157 53158 func vfslog_string(tls *libc.TLS, pVfs uintptr, zStr uintptr) { 53159 var p uintptr = pVfs 53160 var zRec uintptr 53161 var nStr int32 53162 if zStr != 0 { 53163 nStr = int32(libc.Xstrlen(tls, zStr)) 53164 } else { 53165 nStr = 0 53166 } 53167 if uint32(4+nStr+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint32(unsafe.Sizeof([8192]int8{})) { 53168 vfslog_flush(tls, p) 53169 } 53170 zRec = p + 112 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53171 put32bits(tls, zRec, uint32(nStr)) 53172 if zStr != 0 { 53173 libc.Xmemcpy(tls, zRec+4, zStr, uint32(nStr)) 53174 } 53175 *(*int32)(unsafe.Pointer(p + 108)) += 4 + nStr 53176 } 53177 53178 func vfslog_finalize(tls *libc.TLS, p uintptr) { 53179 if (*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods != 0 { 53180 vfslog_flush(tls, p) 53181 (*struct { 53182 f func(*libc.TLS, uintptr) int32 53183 })(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) 53184 } 53185 sqlite3.Xsqlite3_free(tls, p) 53186 } 53187 53188 func sqlite3_vfslog_finalize(tls *libc.TLS, zVfs uintptr) int32 { 53189 var pVfs uintptr 53190 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 53191 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 53192 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53193 }{vfslogOpen})) { 53194 return SQLITE_ERROR 53195 } 53196 sqlite3.Xsqlite3_vfs_unregister(tls, pVfs) 53197 vfslog_finalize(tls, pVfs) 53198 return SQLITE_OK 53199 } 53200 53201 func sqlite3_vfslog_new(tls *libc.TLS, zVfs uintptr, zParentVfs uintptr, zLog uintptr) int32 { 53202 bp := tls.Alloc(4) 53203 defer tls.Free(4) 53204 53205 var p uintptr 53206 var pParent uintptr 53207 var nByte int32 53208 53209 var rc int32 53210 var zFile uintptr 53211 var nVfs int32 53212 53213 pParent = sqlite3.Xsqlite3_vfs_find(tls, zParentVfs) 53214 if !(pParent != 0) { 53215 return SQLITE_ERROR 53216 } 53217 53218 nVfs = int32(libc.Xstrlen(tls, zVfs)) 53219 nByte = int32(uint32(unsafe.Sizeof(VfslogVfs{})) + uint32((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) + uint32(nVfs) + uint32(1) + uint32((*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname) + uint32(1)) 53220 p = sqlite3.Xsqlite3_malloc(tls, nByte) 53221 libc.Xmemset(tls, p, 0, uint32(nByte)) 53222 53223 (*VfslogVfs)(unsafe.Pointer(p)).FpVfs = pParent 53224 (*VfslogVfs)(unsafe.Pointer(p)).FpLog = p + 1*8304 53225 libc.Xmemcpy(tls, p, uintptr(unsafe.Pointer(&vfslog_vfs)), uint32(unsafe.Sizeof(sqlite3_vfs{}))) 53226 (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName = (*VfslogVfs)(unsafe.Pointer(p)).FpLog + uintptr((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) 53227 *(*int32)(unsafe.Pointer(p + 4)) += (*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile 53228 libc.Xmemcpy(tls, (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName, zVfs, uint32(nVfs)) 53229 53230 zFile = (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName + uintptr(nVfs+1) 53231 (*struct { 53232 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53233 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zLog, (*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname, zFile) 53234 53235 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SUPER_JOURNAL 53236 (*struct { 53237 f func(*libc.TLS, uintptr, uintptr, int32) int32 53238 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDelete})).f(tls, pParent, zFile, 0) 53239 rc = (*struct { 53240 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53241 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zFile, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, *(*int32)(unsafe.Pointer(bp)), bp) 53242 if rc == SQLITE_OK { 53243 libc.Xmemcpy(tls, p+112, ts+35535, uint32(20)) 53244 (*VfslogVfs)(unsafe.Pointer(p)).FiOffset = int64(0) 53245 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 20 53246 rc = sqlite3.Xsqlite3_vfs_register(tls, p, 1) 53247 } 53248 if rc != 0 { 53249 vfslog_finalize(tls, p) 53250 } 53251 return rc 53252 } 53253 53254 func sqlite3_vfslog_annotate(tls *libc.TLS, zVfs uintptr, zMsg uintptr) int32 { 53255 var pVfs uintptr 53256 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 53257 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 53258 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53259 }{vfslogOpen})) { 53260 return SQLITE_ERROR 53261 } 53262 vfslog_call(tls, pVfs, OS_ANNOTATE, 0, int64(0), 0, 0, 0) 53263 vfslog_string(tls, pVfs, zMsg) 53264 return SQLITE_OK 53265 } 53266 53267 func vfslog_eventname(tls *libc.TLS, eEvent int32) uintptr { 53268 var zEvent uintptr = uintptr(0) 53269 53270 switch eEvent { 53271 case OS_CLOSE: 53272 zEvent = ts + 35556 53273 break 53274 case OS_READ: 53275 zEvent = ts + 35563 53276 break 53277 case OS_WRITE: 53278 zEvent = ts + 35569 53279 break 53280 case OS_TRUNCATE: 53281 zEvent = ts + 35576 53282 break 53283 case OS_SYNC: 53284 zEvent = ts + 27843 53285 break 53286 case OS_FILESIZE: 53287 zEvent = ts + 35586 53288 break 53289 case OS_LOCK: 53290 zEvent = ts + 35596 53291 break 53292 case OS_UNLOCK: 53293 zEvent = ts + 35602 53294 break 53295 case OS_CHECKRESERVEDLOCK: 53296 zEvent = ts + 35610 53297 break 53298 case OS_FILECONTROL: 53299 zEvent = ts + 35624 53300 break 53301 case OS_SECTORSIZE: 53302 zEvent = ts + 35637 53303 break 53304 case OS_DEVCHAR: 53305 zEvent = ts + 35649 53306 break 53307 case OS_OPEN: 53308 zEvent = ts + 27421 53309 break 53310 case OS_DELETE: 53311 zEvent = ts + 35661 53312 break 53313 case OS_ACCESS: 53314 zEvent = ts + 35669 53315 break 53316 case OS_FULLPATHNAME: 53317 zEvent = ts + 35677 53318 break 53319 case OS_RANDOMNESS: 53320 zEvent = ts + 35691 53321 break 53322 case OS_SLEEP: 53323 zEvent = ts + 35703 53324 break 53325 case OS_CURRENTTIME: 53326 zEvent = ts + 35710 53327 break 53328 53329 case OS_SHMUNMAP: 53330 zEvent = ts + 35723 53331 break 53332 case OS_SHMLOCK: 53333 zEvent = ts + 35733 53334 break 53335 case OS_SHMBARRIER: 53336 zEvent = ts + 35742 53337 break 53338 case OS_SHMMAP: 53339 zEvent = ts + 35754 53340 break 53341 53342 case OS_ANNOTATE: 53343 zEvent = ts + 35762 53344 break 53345 } 53346 53347 return zEvent 53348 } 53349 53350 type VfslogVtab1 = struct { 53351 Fbase sqlite3_vtab 53352 FpFd uintptr 53353 FnByte sqlite3_int64 53354 FzFile uintptr 53355 } 53356 53357 type VfslogVtab = VfslogVtab1 53358 type VfslogCsr1 = struct { 53359 Fbase sqlite3_vtab_cursor 53360 FiRowid sqlite3_int64 53361 FiOffset sqlite3_int64 53362 FzTransient uintptr 53363 FnFile int32 53364 FazFile uintptr 53365 FaBuf [1024]uint8 53366 } 53367 53368 type VfslogCsr = VfslogCsr1 53369 53370 func get32bits(tls *libc.TLS, p uintptr) uint32 { 53371 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)))) 53372 } 53373 53374 func dequote(tls *libc.TLS, z uintptr) { 53375 var quote int8 53376 quote = *(*int8)(unsafe.Pointer(z)) 53377 if int32(quote) == '[' || int32(quote) == '\'' || int32(quote) == '"' || int32(quote) == '`' { 53378 var iIn int32 = 1 53379 var iOut int32 = 0 53380 if int32(quote) == '[' { 53381 quote = int8(']') 53382 } 53383 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 53384 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(quote) { 53385 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(quote) { 53386 break 53387 } 53388 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = quote 53389 iIn = iIn + 2 53390 } else { 53391 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 53392 } 53393 } 53394 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 53395 } 53396 } 53397 53398 func vlogConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 53399 bp := tls.Alloc(12) 53400 defer tls.Free(12) 53401 53402 var pVfs uintptr 53403 53404 var p uintptr 53405 var rc int32 53406 var nByte int32 53407 var zFile uintptr 53408 53409 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 53410 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 53411 nByte = int32(uint32(unsafe.Sizeof(VfslogVtab{})) + uint32((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) + uint32((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname)) 53412 p = sqlite3.Xsqlite3_malloc(tls, nByte) 53413 if p == uintptr(0) { 53414 return SQLITE_NOMEM 53415 } 53416 libc.Xmemset(tls, p, 0, uint32(nByte)) 53417 53418 (*VfslogVtab)(unsafe.Pointer(p)).FpFd = p + 1*28 53419 (*VfslogVtab)(unsafe.Pointer(p)).FzFile = (*VfslogVtab)(unsafe.Pointer(p)).FpFd + uintptr((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) 53420 53421 zFile = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 3*4)))) 53422 if !(zFile != 0) { 53423 sqlite3.Xsqlite3_free(tls, p) 53424 return SQLITE_NOMEM 53425 } 53426 dequote(tls, zFile) 53427 (*struct { 53428 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53429 })(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) 53430 sqlite3.Xsqlite3_free(tls, zFile) 53431 53432 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL 53433 rc = (*struct { 53434 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53435 })(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) 53436 53437 if rc == SQLITE_OK { 53438 (*struct { 53439 f func(*libc.TLS, uintptr, uintptr) int32 53440 })(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+16) 53441 sqlite3.Xsqlite3_declare_vtab(tls, db, 53442 ts+35773) 53443 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 53444 } else { 53445 sqlite3.Xsqlite3_free(tls, p) 53446 } 53447 53448 return rc 53449 } 53450 53451 func vlogBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 53452 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 53453 return SQLITE_OK 53454 } 53455 53456 func vlogDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 53457 var p uintptr = pVtab 53458 if (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods != 0 { 53459 (*struct { 53460 f func(*libc.TLS, uintptr) int32 53461 })(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) 53462 (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods = uintptr(0) 53463 } 53464 sqlite3.Xsqlite3_free(tls, p) 53465 return SQLITE_OK 53466 } 53467 53468 func vlogOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 53469 var pCsr uintptr 53470 53471 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(VfslogCsr{}))) 53472 if !(pCsr != 0) { 53473 return SQLITE_NOMEM 53474 } 53475 libc.Xmemset(tls, pCsr, 0, uint32(unsafe.Sizeof(VfslogCsr{}))) 53476 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 53477 return SQLITE_OK 53478 } 53479 53480 func vlogClose(tls *libc.TLS, pCursor uintptr) int32 { 53481 var p uintptr = pCursor 53482 var i int32 53483 for i = 0; i < (*VfslogCsr)(unsafe.Pointer(p)).FnFile; i++ { 53484 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(p)).FazFile + uintptr(i)*4))) 53485 } 53486 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FazFile) 53487 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FzTransient) 53488 sqlite3.Xsqlite3_free(tls, p) 53489 return SQLITE_OK 53490 } 53491 53492 func vlogNext(tls *libc.TLS, pCursor uintptr) int32 { 53493 bp := tls.Alloc(4) 53494 defer tls.Free(4) 53495 53496 var pCsr uintptr = pCursor 53497 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 53498 var rc int32 = SQLITE_OK 53499 var nRead int32 53500 53501 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient) 53502 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = uintptr(0) 53503 53504 nRead = 24 53505 if (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead) <= (*VfslogVtab)(unsafe.Pointer(p)).FnByte { 53506 var eEvent int32 53507 rc = (*struct { 53508 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53509 })(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+32, nRead, (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset) 53510 53511 eEvent = int32(get32bits(tls, pCsr+32)) 53512 if rc == SQLITE_OK && 53513 (eEvent == OS_OPEN || eEvent == OS_DELETE || eEvent == OS_ACCESS) { 53514 rc = (*struct { 53515 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53516 })(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)) 53517 nRead = nRead + 4 53518 if rc == SQLITE_OK { 53519 var nStr int32 = int32(get32bits(tls, bp)) 53520 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, nStr+1) 53521 rc = (*struct { 53522 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53523 })(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)) 53524 *(*int8)(unsafe.Pointer(zStr + uintptr(nStr))) = int8(0) 53525 nRead = nRead + nStr 53526 53527 if eEvent == OS_OPEN { 53528 var iFileid int32 = int32(get32bits(tls, pCsr+32+4)) 53529 if iFileid >= (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile { 53530 var nNew int32 = int32(uint32(unsafe.Sizeof(uintptr(0))) * uint32(iFileid+1)) 53531 (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile = sqlite3.Xsqlite3_realloc(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile, nNew) 53532 nNew = int32(uint32(nNew) - uint32(unsafe.Sizeof(uintptr(0)))*uint32((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)) 53533 libc.Xmemset(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile+uintptr((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)*4, 0, uint32(nNew)) 53534 (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile = iFileid + 1 53535 } 53536 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*4))) 53537 *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*4)) = zStr 53538 } else { 53539 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = zStr 53540 } 53541 } 53542 } 53543 } 53544 53545 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 4)) += int64(1) 53546 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 12)) += sqlite3_int64(nRead) 53547 return rc 53548 } 53549 53550 func vlogEof(tls *libc.TLS, pCursor uintptr) int32 { 53551 var pCsr uintptr = pCursor 53552 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 53553 return libc.Bool32((*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset >= (*VfslogVtab)(unsafe.Pointer(p)).FnByte) 53554 } 53555 53556 func vlogFilter(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 53557 var pCsr uintptr = pCursor 53558 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 53559 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset = int64(20) 53560 return vlogNext(tls, pCursor) 53561 } 53562 53563 func vlogColumn(tls *libc.TLS, pCursor uintptr, ctx uintptr, i int32) int32 { 53564 var val uint32 53565 var pCsr uintptr = pCursor 53566 53567 val = get32bits(tls, pCsr+32+uintptr(4*i)) 53568 53569 switch i { 53570 case 0: 53571 { 53572 sqlite3.Xsqlite3_result_text(tls, ctx, vfslog_eventname(tls, int32(val)), -1, uintptr(0)) 53573 break 53574 53575 } 53576 case 1: 53577 { 53578 var zStr uintptr = (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient 53579 if val != uint32(0) && val < uint32((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile) { 53580 zStr = *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(val)*4)) 53581 } 53582 sqlite3.Xsqlite3_result_text(tls, ctx, zStr, -1, libc.UintptrFromInt32(-1)) 53583 break 53584 53585 } 53586 default: 53587 sqlite3.Xsqlite3_result_int(tls, ctx, int32(val)) 53588 break 53589 } 53590 53591 return SQLITE_OK 53592 } 53593 53594 func vlogRowid(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 53595 var pCsr uintptr = pCursor 53596 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid 53597 return SQLITE_OK 53598 } 53599 53600 func sqlite3_vfslog_register(tls *libc.TLS, db uintptr) int32 { 53601 sqlite3.Xsqlite3_create_module(tls, db, ts+35828, uintptr(unsafe.Pointer(&vfslog_module)), uintptr(0)) 53602 return SQLITE_OK 53603 } 53604 53605 var vfslog_module = sqlite3_module{ 53606 FxCreate: 0, 53607 FxConnect: 0, 53608 FxBestIndex: 0, 53609 FxDisconnect: 0, 53610 FxDestroy: 0, 53611 FxOpen: 0, 53612 FxClose: 0, 53613 FxFilter: 0, 53614 FxNext: 0, 53615 FxEof: 0, 53616 FxColumn: 0, 53617 FxRowid: 0, 53618 } 53619 53620 func test_vfslog(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 53621 bp := tls.Alloc(108) 53622 defer tls.Free(108) 53623 53624 var db uintptr 53625 53626 var rc int32 = SQLITE_ERROR 53627 53628 if objc < 2 { 53629 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 53630 return TCL_ERROR 53631 } 53632 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), uintptr(unsafe.Pointer(&strs)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+72) != 0 { 53633 return TCL_ERROR 53634 } 53635 53636 switch uint32(*(*int32)(unsafe.Pointer(bp + 72))) { 53637 case uint32(0): 53638 { 53639 var zVfs uintptr 53640 var zMsg uintptr 53641 if objc != 4 { 53642 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+35835) 53643 return TCL_ERROR 53644 } 53645 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 53646 zMsg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 53647 rc = sqlite3_vfslog_annotate(tls, zVfs, zMsg) 53648 if rc != SQLITE_OK { 53649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35839, 0)) 53650 return TCL_ERROR 53651 } 53652 break 53653 53654 } 53655 case uint32(1): 53656 { 53657 var zVfs uintptr 53658 if objc != 3 { 53659 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35835) 53660 return TCL_ERROR 53661 } 53662 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 53663 rc = sqlite3_vfslog_finalize(tls, zVfs) 53664 if rc != SQLITE_OK { 53665 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+35839, 0)) 53666 return TCL_ERROR 53667 } 53668 break 53669 53670 } 53671 53672 case uint32(2): 53673 { 53674 var zVfs uintptr 53675 var zParent uintptr 53676 var zLog uintptr 53677 if objc != 5 { 53678 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35846) 53679 return TCL_ERROR 53680 } 53681 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 53682 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 53683 zLog = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))) 53684 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 53685 zParent = uintptr(0) 53686 } 53687 rc = sqlite3_vfslog_new(tls, zVfs, zParent, zLog) 53688 if rc != SQLITE_OK { 53689 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+35839, 0)) 53690 return TCL_ERROR 53691 } 53692 break 53693 53694 } 53695 53696 case uint32(3): 53697 { 53698 var zDb uintptr 53699 if objc != 3 { 53700 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 53701 return TCL_ERROR 53702 } 53703 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 53704 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+76) != 0 { 53705 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 76)).FobjClientData)).Fdb 53706 rc = sqlite3_vfslog_register(tls, db) 53707 } 53708 if rc != SQLITE_OK { 53709 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+35865, zDb, uintptr(0))) 53710 return TCL_ERROR 53711 } 53712 break 53713 53714 } 53715 } 53716 53717 return TCL_OK 53718 } 53719 53720 var strs = [5]uintptr{ts + 35886, ts + 35895, ts + 14009, ts + 35904, uintptr(0)} 53721 53722 func SqlitetestOsinst_Init(tls *libc.TLS, interp uintptr) int32 { 53723 tcl.XTcl_CreateObjCommand(tls, interp, ts+35828, *(*uintptr)(unsafe.Pointer(&struct { 53724 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53725 }{test_vfslog})), uintptr(0), uintptr(0)) 53726 return TCL_OK 53727 } 53728 53729 type testpcacheGlobalType1 = struct { 53730 FpDummy uintptr 53731 FnInstance int32 53732 FdiscardChance uint32 53733 FprngSeed uint32 53734 FhighStress uint32 53735 } 53736 53737 type testpcacheGlobalType = testpcacheGlobalType1 53738 53739 var testpcacheGlobal testpcacheGlobalType 53740 53741 func testpcacheInit(tls *libc.TLS, pArg uintptr) int32 { 53742 testpcacheGlobal.FpDummy = sqlite3.Xsqlite3_malloc(tls, 10) 53743 if testpcacheGlobal.FpDummy == uintptr(0) { 53744 return SQLITE_NOMEM 53745 } 53746 return SQLITE_OK 53747 } 53748 53749 func testpcacheShutdown(tls *libc.TLS, pArg uintptr) { 53750 sqlite3.Xsqlite3_free(tls, testpcacheGlobal.FpDummy) 53751 testpcacheGlobal.FpDummy = uintptr(0) 53752 } 53753 53754 type testpcache1 = struct { 53755 FszPage int32 53756 FszExtra int32 53757 FbPurgeable int32 53758 FnFree int32 53759 FnPinned int32 53760 FiRand uint32 53761 FiMagic uint32 53762 Fa [217]struct { 53763 Fpage sqlite3_pcache_page 53764 Fkey uint32 53765 FisPinned int32 53766 } 53767 } 53768 53769 type testpcache = testpcache1 53770 type testpcachePage = struct { 53771 Fpage sqlite3_pcache_page 53772 Fkey uint32 53773 FisPinned int32 53774 } 53775 53776 func testpcacheRandom(tls *libc.TLS, p uintptr) uint32 { 53777 var x uint32 = uint32(0) 53778 var i int32 53779 for i = 0; i < 4; i++ { 53780 (*testpcache)(unsafe.Pointer(p)).FiRand = (*testpcache)(unsafe.Pointer(p)).FiRand*uint32(69069) + uint32(5) 53781 x = x<<8 | (*testpcache)(unsafe.Pointer(p)).FiRand>>16&uint32(0xff) 53782 } 53783 return x 53784 } 53785 53786 func testpcacheCreate(tls *libc.TLS, szPage int32, szExtra int32, bPurgeable int32) uintptr { 53787 var nMem int32 53788 var x uintptr 53789 var p uintptr 53790 var i int32 53791 53792 szPage = (szPage + 7) & libc.CplInt32(7) 53793 nMem = int32(uint32(unsafe.Sizeof(testpcache{})) + uint32(TESTPCACHE_NPAGE*(szPage+szExtra))) 53794 p = sqlite3.Xsqlite3_malloc(tls, nMem) 53795 if p == uintptr(0) { 53796 return uintptr(0) 53797 } 53798 x = p + 1*3500 53799 (*testpcache)(unsafe.Pointer(p)).FszPage = szPage 53800 (*testpcache)(unsafe.Pointer(p)).FszExtra = szExtra 53801 (*testpcache)(unsafe.Pointer(p)).FnFree = TESTPCACHE_NPAGE 53802 (*testpcache)(unsafe.Pointer(p)).FnPinned = 0 53803 (*testpcache)(unsafe.Pointer(p)).FiRand = testpcacheGlobal.FprngSeed 53804 (*testpcache)(unsafe.Pointer(p)).FbPurgeable = bPurgeable 53805 (*testpcache)(unsafe.Pointer(p)).FiMagic = uint32(TESTPCACHE_VALID) 53806 i = 0 53807 __1: 53808 if !(i < TESTPCACHE_NPAGE) { 53809 goto __3 53810 } 53811 { 53812 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).Fkey = uint32(0) 53813 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).FisPinned = 0 53814 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).Fpage.FpBuf = x 53815 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).Fpage.FpExtra = x + uintptr(szPage) 53816 53817 } 53818 goto __2 53819 __2: 53820 i++ 53821 x += uintptr(szPage + szExtra) 53822 goto __1 53823 goto __3 53824 __3: 53825 ; 53826 testpcacheGlobal.FnInstance++ 53827 return p 53828 } 53829 53830 func testpcacheCachesize(tls *libc.TLS, pCache uintptr, newSize int32) { 53831 var p uintptr = pCache 53832 _ = p 53833 53834 } 53835 53836 func testpcachePagecount(tls *libc.TLS, pCache uintptr) int32 { 53837 var p uintptr = pCache 53838 53839 return TESTPCACHE_NPAGE - (*testpcache)(unsafe.Pointer(p)).FnFree 53840 } 53841 53842 func testpcacheFetch(tls *libc.TLS, pCache uintptr, key uint32, createFlag int32) uintptr { 53843 var p uintptr = pCache 53844 var i int32 53845 var j int32 53846 53847 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53848 if (*testpcachePage)(unsafe.Pointer(p+28+uintptr(i)*16)).Fkey == key { 53849 if !((*testpcachePage)(unsafe.Pointer(p+28+uintptr(i)*16)).FisPinned != 0) { 53850 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53851 53852 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).FisPinned = 1 53853 } 53854 return p + 28 + uintptr(i)*16 53855 } 53856 } 53857 53858 if createFlag == 0 { 53859 return uintptr(0) 53860 } 53861 53862 if (*testpcache)(unsafe.Pointer(p)).FnPinned == TESTPCACHE_NPAGE { 53863 return uintptr(0) 53864 } 53865 53866 if (*testpcache)(unsafe.Pointer(p)).FnPinned >= TESTPCACHE_NPAGE-TESTPCACHE_RESERVE && createFlag < 2 { 53867 return uintptr(0) 53868 } 53869 53870 if testpcacheGlobal.FhighStress != 0 && createFlag < 2 { 53871 return uintptr(0) 53872 } 53873 53874 if (*testpcache)(unsafe.Pointer(p)).FnFree > TESTPCACHE_RESERVE || createFlag == 2 && (*testpcache)(unsafe.Pointer(p)).FnFree > 0 { 53875 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 53876 i = 0 53877 __1: 53878 if !(i < TESTPCACHE_NPAGE) { 53879 goto __3 53880 } 53881 { 53882 if (*testpcachePage)(unsafe.Pointer(p+28+uintptr(j)*16)).Fkey == uint32(0) { 53883 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(j)*16)).Fkey = key 53884 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(j)*16)).FisPinned = 1 53885 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+28+uintptr(j)*16)).Fpage.FpBuf, 0, uint32((*testpcache)(unsafe.Pointer(p)).FszPage)) 53886 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+28+uintptr(j)*16)).Fpage.FpExtra, 0, uint32((*testpcache)(unsafe.Pointer(p)).FszExtra)) 53887 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53888 (*testpcache)(unsafe.Pointer(p)).FnFree-- 53889 53890 return p + 28 + uintptr(j)*16 53891 } 53892 53893 } 53894 goto __2 53895 __2: 53896 i++ 53897 j = (j + 1) % TESTPCACHE_NPAGE 53898 goto __1 53899 goto __3 53900 __3: 53901 } 53902 53903 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable == 0 { 53904 return uintptr(0) 53905 } 53906 53907 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 53908 i = 0 53909 __4: 53910 if !(i < TESTPCACHE_NPAGE) { 53911 goto __6 53912 } 53913 { 53914 if (*testpcachePage)(unsafe.Pointer(p+28+uintptr(j)*16)).Fkey > uint32(0) && (*testpcachePage)(unsafe.Pointer(p+28+uintptr(j)*16)).FisPinned == 0 { 53915 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(j)*16)).Fkey = key 53916 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(j)*16)).FisPinned = 1 53917 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+28+uintptr(j)*16)).Fpage.FpBuf, 0, uint32((*testpcache)(unsafe.Pointer(p)).FszPage)) 53918 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+28+uintptr(j)*16)).Fpage.FpExtra, 0, uint32((*testpcache)(unsafe.Pointer(p)).FszExtra)) 53919 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 53920 53921 return p + 28 + uintptr(j)*16 53922 } 53923 53924 } 53925 goto __5 53926 __5: 53927 i++ 53928 j = (j + 1) % TESTPCACHE_NPAGE 53929 goto __4 53930 goto __6 53931 __6: 53932 ; 53933 return uintptr(0) 53934 } 53935 53936 func testpcacheUnpin(tls *libc.TLS, pCache uintptr, pOldPage uintptr, discard int32) { 53937 var p uintptr = pCache 53938 var i int32 53939 53940 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable != 0 && 53941 uint32(100)-testpcacheGlobal.FdiscardChance <= testpcacheRandom(tls, p)%uint32(100) { 53942 discard = 1 53943 } 53944 53945 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53946 if p+28+uintptr(i)*16 == pOldPage { 53947 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).FisPinned = 0 53948 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 53949 53950 if discard != 0 { 53951 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).Fkey = uint32(0) 53952 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53953 53954 } 53955 return 53956 } 53957 } 53958 53959 } 53960 53961 func testpcacheRekey(tls *libc.TLS, pCache uintptr, pOldPage uintptr, oldKey uint32, newKey uint32) { 53962 var p uintptr = pCache 53963 var i int32 53964 53965 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53966 if (*testpcachePage)(unsafe.Pointer(p+28+uintptr(i)*16)).Fkey == newKey { 53967 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).Fkey = uint32(0) 53968 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53969 53970 break 53971 } 53972 } 53973 53974 for i = 0; i < TESTPCACHE_NPAGE; i++ { 53975 if (*testpcachePage)(unsafe.Pointer(p+28+uintptr(i)*16)).Fkey == oldKey { 53976 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).Fkey = newKey 53977 return 53978 } 53979 } 53980 53981 } 53982 53983 func testpcacheTruncate(tls *libc.TLS, pCache uintptr, iLimit uint32) { 53984 var p uintptr = pCache 53985 var i uint32 53986 53987 for i = uint32(0); i < uint32(TESTPCACHE_NPAGE); i++ { 53988 if (*testpcachePage)(unsafe.Pointer(p+28+uintptr(i)*16)).Fkey >= iLimit { 53989 (*testpcachePage)(unsafe.Pointer(p + 28 + uintptr(i)*16)).Fkey = uint32(0) 53990 if (*testpcachePage)(unsafe.Pointer(p+28+uintptr(i)*16)).FisPinned != 0 { 53991 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 53992 53993 } 53994 (*testpcache)(unsafe.Pointer(p)).FnFree++ 53995 53996 } 53997 } 53998 } 53999 54000 func testpcacheDestroy(tls *libc.TLS, pCache uintptr) { 54001 var p uintptr = pCache 54002 54003 (*testpcache)(unsafe.Pointer(p)).FiMagic = TESTPCACHE_CLEAR 54004 sqlite3.Xsqlite3_free(tls, p) 54005 testpcacheGlobal.FnInstance-- 54006 } 54007 54008 func installTestPCache(tls *libc.TLS, installFlag int32, discardChance uint32, prngSeed uint32, highStress uint32) { 54009 bp := tls.Alloc(24) 54010 defer tls.Free(24) 54011 54012 testpcacheGlobal.FdiscardChance = discardChance 54013 testpcacheGlobal.FprngSeed = prngSeed ^ prngSeed<<16 54014 testpcacheGlobal.FhighStress = highStress 54015 if installFlag != isInstalled { 54016 if installFlag != 0 { 54017 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp, uintptr(unsafe.Pointer(&defaultPcache)))) 54018 54019 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+8, uintptr(unsafe.Pointer(&testPcache)))) 54020 } else { 54021 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&defaultPcache)))) 54022 } 54023 isInstalled = installFlag 54024 } 54025 } 54026 54027 var testPcache = sqlite3_pcache_methods2{ 54028 FiVersion: 1, 54029 FpArg: 0, 54030 FxInit: 0, 54031 FxShutdown: 0, 54032 FxCreate: 0, 54033 FxCachesize: 0, 54034 FxPagecount: 0, 54035 FxFetch: 0, 54036 FxUnpin: 0, 54037 FxRekey: 0, 54038 FxTruncate: 0, 54039 FxDestroy: 0, 54040 } 54041 var defaultPcache sqlite3_pcache_methods2 54042 var isInstalled int32 = 0 54043 54044 type quota_FILE1 = struct { 54045 Ff uintptr 54046 FiOfst sqlite3_int64 54047 FpFile uintptr 54048 } 54049 54050 type quota_FILE = quota_FILE1 54051 54052 type quotaGroup1 = struct { 54053 FzPattern uintptr 54054 FiLimit sqlite3_int64 54055 FiSize sqlite3_int64 54056 FxCallback uintptr 54057 FpArg uintptr 54058 FxDestroy uintptr 54059 FpNext uintptr 54060 FppPrev uintptr 54061 FpFiles uintptr 54062 } 54063 54064 type quotaGroup = quotaGroup1 54065 type quotaConn1 = struct { 54066 Fbase sqlite3_file 54067 FpFile uintptr 54068 } 54069 54070 type quotaConn = quotaConn1 54071 type quotaFile1 = struct { 54072 FzFilename uintptr 54073 FpGroup uintptr 54074 FiSize sqlite3_int64 54075 FnRef int32 54076 FdeleteOnClose int32 54077 FpNext uintptr 54078 FppPrev uintptr 54079 } 54080 54081 type quotaFile = quotaFile1 54082 54083 var gQuota struct { 54084 FpOrigVfs uintptr 54085 FsThisVfs sqlite3_vfs 54086 FsIoMethodsV1 sqlite3_io_methods 54087 FsIoMethodsV2 sqlite3_io_methods 54088 FisInitialized int32 54089 FpMutex uintptr 54090 FpGroup uintptr 54091 } 54092 54093 func quotaEnter(tls *libc.TLS) { 54094 sqlite3.Xsqlite3_mutex_enter(tls, gQuota.FpMutex) 54095 } 54096 54097 func quotaLeave(tls *libc.TLS) { 54098 sqlite3.Xsqlite3_mutex_leave(tls, gQuota.FpMutex) 54099 } 54100 54101 func quotaGroupOpenFileCount(tls *libc.TLS, pGroup uintptr) int32 { 54102 var N int32 = 0 54103 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54104 for pFile != 0 { 54105 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54106 N++ 54107 } 54108 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54109 } 54110 return N 54111 } 54112 54113 func quotaRemoveFile(tls *libc.TLS, pFile uintptr) { 54114 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54115 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 12)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54116 *(*uintptr)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FppPrev)) = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54117 if (*quotaFile)(unsafe.Pointer(pFile)).FpNext != 0 { 54118 (*quotaFile)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpNext)).FppPrev = (*quotaFile)(unsafe.Pointer(pFile)).FppPrev 54119 } 54120 sqlite3.Xsqlite3_free(tls, pFile) 54121 } 54122 54123 func quotaRemoveAllFiles(tls *libc.TLS, pGroup uintptr) { 54124 for (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 54125 quotaRemoveFile(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles) 54126 } 54127 } 54128 54129 func quotaGroupDeref(tls *libc.TLS, pGroup uintptr) { 54130 if (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit == int64(0) && quotaGroupOpenFileCount(tls, pGroup) == 0 { 54131 quotaRemoveAllFiles(tls, pGroup) 54132 *(*uintptr)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev)) = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54133 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext != 0 { 54134 (*quotaGroup)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpNext)).FppPrev = (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev 54135 } 54136 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 { 54137 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54138 } 54139 sqlite3.Xsqlite3_free(tls, pGroup) 54140 } 54141 } 54142 54143 func quotaStrglob(tls *libc.TLS, zGlob uintptr, z uintptr) int32 { 54144 var c int32 54145 var c2 int32 54146 var cx int32 54147 var invert int32 54148 var seen int32 54149 54150 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) != 0 { 54151 if c == '*' { 54152 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) == '*' || c == '?' { 54153 if c == '?' && int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 54154 return 0 54155 } 54156 } 54157 if c == 0 { 54158 return 1 54159 } else if c == '[' { 54160 for *(*int8)(unsafe.Pointer(z)) != 0 && quotaStrglob(tls, zGlob-uintptr(1), z) == 0 { 54161 z++ 54162 } 54163 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) != 0) 54164 } 54165 if c == '/' { 54166 cx = '\\' 54167 } else { 54168 cx = c 54169 } 54170 for libc.AssignInt32(&c2, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) != 0 { 54171 for c2 != c && c2 != cx { 54172 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 54173 if c2 == 0 { 54174 return 0 54175 } 54176 } 54177 if quotaStrglob(tls, zGlob, z) != 0 { 54178 return 1 54179 } 54180 } 54181 return 0 54182 } else if c == '?' { 54183 if int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 54184 return 0 54185 } 54186 } else if c == '[' { 54187 var prior_c int32 = 0 54188 seen = 0 54189 invert = 0 54190 c = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 54191 if c == 0 { 54192 return 0 54193 } 54194 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54195 if c2 == '^' { 54196 invert = 1 54197 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54198 } 54199 if c2 == ']' { 54200 if c == ']' { 54201 seen = 1 54202 } 54203 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54204 } 54205 for c2 != 0 && c2 != ']' { 54206 if c2 == '-' && int32(*(*int8)(unsafe.Pointer(zGlob))) != ']' && int32(*(*int8)(unsafe.Pointer(zGlob))) != 0 && prior_c > 0 { 54207 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54208 if c >= prior_c && c <= c2 { 54209 seen = 1 54210 } 54211 prior_c = 0 54212 } else { 54213 if c == c2 { 54214 seen = 1 54215 } 54216 prior_c = c2 54217 } 54218 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54219 } 54220 if c2 == 0 || seen^invert == 0 { 54221 return 0 54222 } 54223 } else if c == '/' { 54224 if int32(*(*int8)(unsafe.Pointer(z))) != '/' && int32(*(*int8)(unsafe.Pointer(z))) != '\\' { 54225 return 0 54226 } 54227 z++ 54228 } else { 54229 if c != int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) { 54230 return 0 54231 } 54232 } 54233 } 54234 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) == 0) 54235 } 54236 54237 func quotaGroupFind(tls *libc.TLS, zFilename uintptr) uintptr { 54238 var p uintptr 54239 for p = gQuota.FpGroup; p != 0 && quotaStrglob(tls, (*quotaGroup)(unsafe.Pointer(p)).FzPattern, zFilename) == 0; p = (*quotaGroup)(unsafe.Pointer(p)).FpNext { 54240 } 54241 return p 54242 } 54243 54244 func quotaSubOpen(tls *libc.TLS, pConn uintptr) uintptr { 54245 var p uintptr = pConn 54246 return p + 1*8 54247 } 54248 54249 func quotaFindFile(tls *libc.TLS, pGroup uintptr, zName uintptr, createFlag int32) uintptr { 54250 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54251 for pFile != 0 && libc.Xstrcmp(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName) != 0 { 54252 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54253 } 54254 if pFile == uintptr(0) && createFlag != 0 { 54255 var nName int32 = int32(libc.Xstrlen(tls, zName) & size_t(0x3fffffff)) 54256 pFile = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(quotaFile{}))+uint32(nName)+uint32(1))) 54257 if pFile != 0 { 54258 libc.Xmemset(tls, pFile, 0, uint32(unsafe.Sizeof(quotaFile{}))) 54259 (*quotaFile)(unsafe.Pointer(pFile)).FzFilename = pFile + 1*32 54260 libc.Xmemcpy(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName, uint32(nName+1)) 54261 (*quotaFile)(unsafe.Pointer(pFile)).FpNext = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54262 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 54263 (*quotaFile)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles)).FppPrev = pFile + 24 54264 } 54265 (*quotaFile)(unsafe.Pointer(pFile)).FppPrev = pGroup + 40 54266 (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles = pFile 54267 (*quotaFile)(unsafe.Pointer(pFile)).FpGroup = pGroup 54268 } 54269 } 54270 return pFile 54271 } 54272 54273 func quota_utf8_to_mbcs(tls *libc.TLS, zUtf8 uintptr) uintptr { 54274 return zUtf8 54275 } 54276 54277 func quota_mbcs_free(tls *libc.TLS, zOld uintptr) { 54278 } 54279 54280 func quotaOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 54281 var rc int32 54282 var pQuotaOpen uintptr 54283 var pFile uintptr 54284 var pGroup uintptr 54285 var pSubOpen uintptr 54286 var pOrigVfs uintptr = gQuota.FpOrigVfs 54287 54288 if flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0 { 54289 return (*struct { 54290 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54291 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 54292 } 54293 54294 quotaEnter(tls) 54295 pGroup = quotaGroupFind(tls, zName) 54296 if pGroup == uintptr(0) { 54297 rc = (*struct { 54298 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54299 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 54300 } else { 54301 pQuotaOpen = pConn 54302 pSubOpen = quotaSubOpen(tls, pConn) 54303 rc = (*struct { 54304 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54305 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pSubOpen, flags, pOutFlags) 54306 if rc == SQLITE_OK { 54307 pFile = quotaFindFile(tls, pGroup, zName, 1) 54308 if pFile == uintptr(0) { 54309 quotaLeave(tls) 54310 (*struct { 54311 f func(*libc.TLS, uintptr) int32 54312 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 54313 return SQLITE_NOMEM 54314 } 54315 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = libc.Bool32(flags&SQLITE_OPEN_DELETEONCLOSE != 0) 54316 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 54317 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).FpFile = pFile 54318 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 54319 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 92 54320 } else { 54321 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 168 54322 } 54323 } 54324 } 54325 quotaLeave(tls) 54326 return rc 54327 } 54328 54329 func quotaDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 54330 var rc int32 54331 var pFile uintptr 54332 var pGroup uintptr 54333 var pOrigVfs uintptr = gQuota.FpOrigVfs 54334 54335 rc = (*struct { 54336 f func(*libc.TLS, uintptr, uintptr, int32) int32 54337 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 54338 54339 if rc == SQLITE_OK { 54340 quotaEnter(tls) 54341 pGroup = quotaGroupFind(tls, zName) 54342 if pGroup != 0 { 54343 pFile = quotaFindFile(tls, pGroup, zName, 0) 54344 if pFile != 0 { 54345 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54346 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 54347 } else { 54348 quotaRemoveFile(tls, pFile) 54349 quotaGroupDeref(tls, pGroup) 54350 } 54351 } 54352 } 54353 quotaLeave(tls) 54354 } 54355 return rc 54356 } 54357 54358 func quotaClose(tls *libc.TLS, pConn uintptr) int32 { 54359 var p uintptr = pConn 54360 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54361 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54362 var rc int32 54363 rc = (*struct { 54364 f func(*libc.TLS, uintptr) int32 54365 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 54366 quotaEnter(tls) 54367 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 54368 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 54369 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54370 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 54371 (*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 } 54376 quotaGroupDeref(tls, pGroup) 54377 } 54378 quotaLeave(tls) 54379 return rc 54380 } 54381 54382 func quotaRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 54383 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54384 return (*struct { 54385 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54386 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 54387 } 54388 54389 func quotaWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 54390 var p uintptr = pConn 54391 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54392 var iEnd sqlite3_int64 = iOfst + sqlite3_int64(iAmt) 54393 var pGroup uintptr 54394 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54395 var szNew sqlite3_int64 54396 54397 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 54398 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54399 quotaEnter(tls) 54400 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54401 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54402 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 54403 (*struct { 54404 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54405 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+4, szNew, 54406 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54407 } 54408 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54409 quotaLeave(tls) 54410 return SQLITE_FULL 54411 } 54412 } 54413 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 54414 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 54415 quotaLeave(tls) 54416 } 54417 return (*struct { 54418 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54419 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 54420 } 54421 54422 func quotaTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 54423 var p uintptr = pConn 54424 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54425 var rc int32 = (*struct { 54426 f func(*libc.TLS, uintptr, sqlite3_int64) int32 54427 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 54428 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54429 var pGroup uintptr 54430 if rc == SQLITE_OK { 54431 quotaEnter(tls) 54432 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54433 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 12)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54434 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = size 54435 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 12)) += size 54436 quotaLeave(tls) 54437 } 54438 return rc 54439 } 54440 54441 func quotaSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 54442 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54443 return (*struct { 54444 f func(*libc.TLS, uintptr, int32) int32 54445 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 54446 } 54447 54448 func quotaFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 54449 bp := tls.Alloc(8) 54450 defer tls.Free(8) 54451 54452 var p uintptr = pConn 54453 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54454 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54455 var pGroup uintptr 54456 54457 var rc int32 54458 54459 rc = (*struct { 54460 f func(*libc.TLS, uintptr, uintptr) int32 54461 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp) 54462 if rc == SQLITE_OK { 54463 quotaEnter(tls) 54464 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54465 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 12)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54466 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = *(*sqlite3_int64)(unsafe.Pointer(bp)) 54467 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 12)) += *(*sqlite3_int64)(unsafe.Pointer(bp)) 54468 quotaLeave(tls) 54469 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = *(*sqlite3_int64)(unsafe.Pointer(bp)) 54470 } 54471 return rc 54472 } 54473 54474 func quotaLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 54475 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54476 return (*struct { 54477 f func(*libc.TLS, uintptr, int32) int32 54478 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 54479 } 54480 54481 func quotaUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 54482 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54483 return (*struct { 54484 f func(*libc.TLS, uintptr, int32) int32 54485 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 54486 } 54487 54488 func quotaCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 54489 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54490 return (*struct { 54491 f func(*libc.TLS, uintptr, uintptr) int32 54492 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 54493 } 54494 54495 func quotaFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 54496 bp := tls.Alloc(8) 54497 defer tls.Free(8) 54498 54499 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54500 var rc int32 = (*struct { 54501 f func(*libc.TLS, uintptr, int32, uintptr) int32 54502 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 54503 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 54504 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35913, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 54505 } 54506 return rc 54507 } 54508 54509 func quotaSectorSize(tls *libc.TLS, pConn uintptr) int32 { 54510 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54511 return (*struct { 54512 f func(*libc.TLS, uintptr) int32 54513 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 54514 } 54515 54516 func quotaDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 54517 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54518 return (*struct { 54519 f func(*libc.TLS, uintptr) int32 54520 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 54521 } 54522 54523 func quotaShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 54524 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54525 return (*struct { 54526 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 54527 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 54528 } 54529 54530 func quotaShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 54531 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54532 return (*struct { 54533 f func(*libc.TLS, uintptr, int32, int32, int32) int32 54534 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 54535 } 54536 54537 func quotaShmBarrier(tls *libc.TLS, pConn uintptr) { 54538 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54539 (*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) 54540 } 54541 54542 func quotaShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 54543 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54544 return (*struct { 54545 f func(*libc.TLS, uintptr, int32) int32 54546 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 54547 } 54548 54549 func sqlite3_quota_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 54550 var pOrigVfs uintptr 54551 if gQuota.FisInitialized != 0 { 54552 return SQLITE_MISUSE 54553 } 54554 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 54555 if pOrigVfs == uintptr(0) { 54556 return SQLITE_ERROR 54557 } 54558 54559 gQuota.FpMutex = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 54560 if !(int32(gQuota.FpMutex) != 0) { 54561 return SQLITE_NOMEM 54562 } 54563 gQuota.FisInitialized = 1 54564 gQuota.FpOrigVfs = pOrigVfs 54565 gQuota.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 54566 gQuota.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 54567 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54568 }{quotaOpen})) 54569 gQuota.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 54570 f func(*libc.TLS, uintptr, uintptr, int32) int32 54571 }{quotaDelete})) 54572 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gQuota)) + 4 + 4)) += int32(uint32(unsafe.Sizeof(quotaConn{}))) 54573 gQuota.FsThisVfs.FzName = ts + 35922 54574 gQuota.FsIoMethodsV1.FiVersion = 1 54575 gQuota.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 54576 f func(*libc.TLS, uintptr) int32 54577 }{quotaClose})) 54578 gQuota.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 54579 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54580 }{quotaRead})) 54581 gQuota.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 54582 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54583 }{quotaWrite})) 54584 gQuota.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 54585 f func(*libc.TLS, uintptr, sqlite3_int64) int32 54586 }{quotaTruncate})) 54587 gQuota.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 54588 f func(*libc.TLS, uintptr, int32) int32 54589 }{quotaSync})) 54590 gQuota.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 54591 f func(*libc.TLS, uintptr, uintptr) int32 54592 }{quotaFileSize})) 54593 gQuota.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 54594 f func(*libc.TLS, uintptr, int32) int32 54595 }{quotaLock})) 54596 gQuota.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 54597 f func(*libc.TLS, uintptr, int32) int32 54598 }{quotaUnlock})) 54599 gQuota.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 54600 f func(*libc.TLS, uintptr, uintptr) int32 54601 }{quotaCheckReservedLock})) 54602 gQuota.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 54603 f func(*libc.TLS, uintptr, int32, uintptr) int32 54604 }{quotaFileControl})) 54605 gQuota.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 54606 f func(*libc.TLS, uintptr) int32 54607 }{quotaSectorSize})) 54608 gQuota.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 54609 f func(*libc.TLS, uintptr) int32 54610 }{quotaDeviceCharacteristics})) 54611 gQuota.FsIoMethodsV2 = gQuota.FsIoMethodsV1 54612 gQuota.FsIoMethodsV2.FiVersion = 2 54613 gQuota.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 54614 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 54615 }{quotaShmMap})) 54616 gQuota.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 54617 f func(*libc.TLS, uintptr, int32, int32, int32) int32 54618 }{quotaShmLock})) 54619 gQuota.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{quotaShmBarrier})) 54620 gQuota.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 54621 f func(*libc.TLS, uintptr, int32) int32 54622 }{quotaShmUnmap})) 54623 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gQuota))+4, makeDefault) 54624 return SQLITE_OK 54625 } 54626 54627 func sqlite3_quota_shutdown(tls *libc.TLS) int32 { 54628 var pGroup uintptr 54629 if gQuota.FisInitialized == 0 { 54630 return SQLITE_MISUSE 54631 } 54632 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 54633 if quotaGroupOpenFileCount(tls, pGroup) > 0 { 54634 return SQLITE_MISUSE 54635 } 54636 } 54637 for gQuota.FpGroup != 0 { 54638 pGroup = gQuota.FpGroup 54639 gQuota.FpGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54640 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = int64(0) 54641 54642 quotaGroupDeref(tls, pGroup) 54643 } 54644 gQuota.FisInitialized = 0 54645 sqlite3.Xsqlite3_mutex_free(tls, gQuota.FpMutex) 54646 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gQuota))+4) 54647 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gQuota)), 0, uint32(unsafe.Sizeof(gQuota))) 54648 return SQLITE_OK 54649 } 54650 54651 func sqlite3_quota_set(tls *libc.TLS, zPattern uintptr, iLimit sqlite3_int64, xCallback uintptr, pArg uintptr, xDestroy uintptr) int32 { 54652 var pGroup uintptr 54653 quotaEnter(tls) 54654 pGroup = gQuota.FpGroup 54655 for pGroup != 0 && libc.Xstrcmp(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern) != 0 { 54656 pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54657 } 54658 if pGroup == uintptr(0) { 54659 var nPattern int32 = int32(libc.Xstrlen(tls, zPattern) & size_t(0x3fffffff)) 54660 if iLimit <= int64(0) { 54661 quotaLeave(tls) 54662 return SQLITE_OK 54663 } 54664 pGroup = sqlite3.Xsqlite3_malloc(tls, int32(uint32(unsafe.Sizeof(quotaGroup{}))+uint32(nPattern)+uint32(1))) 54665 if pGroup == uintptr(0) { 54666 quotaLeave(tls) 54667 return SQLITE_NOMEM 54668 } 54669 libc.Xmemset(tls, pGroup, 0, uint32(unsafe.Sizeof(quotaGroup{}))) 54670 (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern = pGroup + 1*44 54671 libc.Xmemcpy(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern, uint32(nPattern+1)) 54672 if gQuota.FpGroup != 0 { 54673 (*quotaGroup)(unsafe.Pointer(gQuota.FpGroup)).FppPrev = pGroup + 32 54674 } 54675 (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext = gQuota.FpGroup 54676 (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev = uintptr(unsafe.Pointer(&gQuota)) + 252 54677 gQuota.FpGroup = pGroup 54678 } 54679 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = iLimit 54680 (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback = xCallback 54681 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 && (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg != pArg { 54682 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54683 } 54684 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg = pArg 54685 (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy = xDestroy 54686 quotaGroupDeref(tls, pGroup) 54687 quotaLeave(tls) 54688 return SQLITE_OK 54689 } 54690 54691 func sqlite3_quota_file(tls *libc.TLS, zFilename uintptr) int32 { 54692 bp := tls.Alloc(12) 54693 defer tls.Free(12) 54694 54695 var zFull uintptr = uintptr(0) 54696 var fd uintptr 54697 var rc int32 54698 *(*int32)(unsafe.Pointer(bp)) = 0 54699 54700 var nAlloc int32 = gQuota.FsThisVfs.FszOsFile + gQuota.FsThisVfs.FmxPathname + 2 54701 54702 fd = sqlite3.Xsqlite3_malloc(tls, nAlloc) 54703 if fd == uintptr(0) { 54704 rc = SQLITE_NOMEM 54705 } else { 54706 zFull = fd + uintptr(gQuota.FsThisVfs.FszOsFile) 54707 rc = (*struct { 54708 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54709 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54710 gQuota.FsThisVfs.FmxPathname+1, zFull) 54711 } 54712 54713 if rc == SQLITE_OK { 54714 *(*int8)(unsafe.Pointer(zFull + uintptr(libc.Xstrlen(tls, zFull)+size_t(1)))) = int8(0) 54715 rc = quotaOpen(tls, uintptr(unsafe.Pointer(&gQuota))+4, zFull, fd, 54716 SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_DB, bp) 54717 if rc == SQLITE_OK { 54718 (*struct { 54719 f func(*libc.TLS, uintptr, uintptr) int32 54720 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxFileSize})).f(tls, fd, bp+4) 54721 (*struct { 54722 f func(*libc.TLS, uintptr) int32 54723 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxClose})).f(tls, fd) 54724 } else if rc == SQLITE_CANTOPEN { 54725 var pGroup uintptr 54726 var pFile uintptr 54727 quotaEnter(tls) 54728 pGroup = quotaGroupFind(tls, zFull) 54729 if pGroup != 0 { 54730 pFile = quotaFindFile(tls, pGroup, zFull, 0) 54731 if pFile != 0 { 54732 quotaRemoveFile(tls, pFile) 54733 } 54734 } 54735 quotaLeave(tls) 54736 } 54737 } 54738 54739 sqlite3.Xsqlite3_free(tls, fd) 54740 return rc 54741 } 54742 54743 func sqlite3_quota_fopen(tls *libc.TLS, zFilename uintptr, zMode uintptr) uintptr { 54744 var p uintptr 54745 var zFull uintptr 54746 var zFullTranslated uintptr 54747 var rc int32 54748 var pGroup uintptr 54749 var pFile uintptr 54750 p = uintptr(0) 54751 zFull = uintptr(0) 54752 zFullTranslated = uintptr(0) 54753 54754 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 54755 if !(zFull == uintptr(0)) { 54756 goto __1 54757 } 54758 return uintptr(0) 54759 __1: 54760 ; 54761 rc = (*struct { 54762 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54763 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54764 gQuota.FsThisVfs.FmxPathname+1, zFull) 54765 if !(rc != 0) { 54766 goto __2 54767 } 54768 goto quota_fopen_error 54769 __2: 54770 ; 54771 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(quota_FILE{}))) 54772 if !(p == uintptr(0)) { 54773 goto __3 54774 } 54775 goto quota_fopen_error 54776 __3: 54777 ; 54778 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(quota_FILE{}))) 54779 zFullTranslated = quota_utf8_to_mbcs(tls, zFull) 54780 if !(zFullTranslated == uintptr(0)) { 54781 goto __4 54782 } 54783 goto quota_fopen_error 54784 __4: 54785 ; 54786 (*quota_FILE)(unsafe.Pointer(p)).Ff = libc.Xfopen(tls, zFullTranslated, zMode) 54787 if !((*quota_FILE)(unsafe.Pointer(p)).Ff == uintptr(0)) { 54788 goto __5 54789 } 54790 goto quota_fopen_error 54791 __5: 54792 ; 54793 quotaEnter(tls) 54794 pGroup = quotaGroupFind(tls, zFull) 54795 if !(pGroup != 0) { 54796 goto __6 54797 } 54798 pFile = quotaFindFile(tls, pGroup, zFull, 1) 54799 if !(pFile == uintptr(0)) { 54800 goto __7 54801 } 54802 quotaLeave(tls) 54803 goto quota_fopen_error 54804 __7: 54805 ; 54806 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 54807 (*quota_FILE)(unsafe.Pointer(p)).FpFile = pFile 54808 __6: 54809 ; 54810 quotaLeave(tls) 54811 sqlite3.Xsqlite3_free(tls, zFull) 54812 return p 54813 54814 quota_fopen_error: 54815 quota_mbcs_free(tls, zFullTranslated) 54816 sqlite3.Xsqlite3_free(tls, zFull) 54817 if !(p != 0 && (*quota_FILE)(unsafe.Pointer(p)).Ff != 0) { 54818 goto __8 54819 } 54820 libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54821 __8: 54822 ; 54823 sqlite3.Xsqlite3_free(tls, p) 54824 return uintptr(0) 54825 } 54826 54827 func sqlite3_quota_fread(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 54828 return libc.Xfread(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54829 } 54830 54831 func sqlite3_quota_fwrite(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 54832 var iOfst sqlite3_int64 54833 var iEnd sqlite3_int64 54834 var szNew sqlite3_int64 54835 var pFile uintptr 54836 var rc size_t 54837 54838 iOfst = sqlite3_int64(libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff)) 54839 iEnd = iOfst + sqlite3_int64(size*nmemb) 54840 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54841 if pFile != 0 && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 54842 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54843 quotaEnter(tls) 54844 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54845 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54846 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 54847 (*struct { 54848 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54849 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+4, szNew, 54850 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54851 } 54852 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54853 iEnd = (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit - (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize + (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54854 nmemb = size_t((iEnd - iOfst) / sqlite3_int64(size)) 54855 iEnd = iOfst + sqlite3_int64(size*nmemb) 54856 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54857 } 54858 } 54859 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 54860 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 54861 quotaLeave(tls) 54862 } else { 54863 pFile = uintptr(0) 54864 } 54865 rc = libc.Xfwrite(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54866 54867 if rc < nmemb && pFile != 0 { 54868 var nWritten size_t = rc 54869 var iNewEnd sqlite3_int64 = iOfst + sqlite3_int64(size*nWritten) 54870 if iNewEnd < iEnd { 54871 iNewEnd = iEnd 54872 } 54873 quotaEnter(tls) 54874 *(*sqlite3_int64)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpGroup + 12)) += iNewEnd - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54875 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iNewEnd 54876 quotaLeave(tls) 54877 } 54878 return rc 54879 } 54880 54881 func sqlite3_quota_fclose(tls *libc.TLS, p uintptr) int32 { 54882 var rc int32 54883 var pFile uintptr 54884 rc = libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54885 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54886 if pFile != 0 { 54887 quotaEnter(tls) 54888 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 54889 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 54890 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54891 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 54892 (*struct { 54893 f func(*libc.TLS, uintptr, uintptr, int32) int32 54894 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54895 quotaRemoveFile(tls, pFile) 54896 } 54897 quotaGroupDeref(tls, pGroup) 54898 } 54899 quotaLeave(tls) 54900 } 54901 sqlite3.Xsqlite3_free(tls, p) 54902 return rc 54903 } 54904 54905 func sqlite3_quota_fflush(tls *libc.TLS, p uintptr, doFsync int32) int32 { 54906 var rc int32 54907 rc = libc.Xfflush(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54908 if rc == 0 && doFsync != 0 { 54909 rc = libc.Xfsync(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff)) 54910 } 54911 return libc.Bool32(rc != 0) 54912 } 54913 54914 func sqlite3_quota_fseek(tls *libc.TLS, p uintptr, offset int32, whence int32) int32 { 54915 return libc.Xfseek(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff, offset, whence) 54916 } 54917 54918 func sqlite3_quota_rewind(tls *libc.TLS, p uintptr) { 54919 libc.Xrewind(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54920 } 54921 54922 func sqlite3_quota_ftell(tls *libc.TLS, p uintptr) int32 { 54923 return libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54924 } 54925 54926 func sqlite3_quota_ferror(tls *libc.TLS, p uintptr) int32 { 54927 return libc.Xferror(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 54928 } 54929 54930 func sqlite3_quota_ftruncate(tls *libc.TLS, p uintptr, szNew sqlite3_int64) int32 { 54931 var pFile uintptr = (*quota_FILE)(unsafe.Pointer(p)).FpFile 54932 var rc int32 54933 if libc.AssignUintptr(&pFile, (*quota_FILE)(unsafe.Pointer(p)).FpFile) != uintptr(0) && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 54934 var pGroup uintptr 54935 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 54936 return -1 54937 } 54938 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54939 quotaEnter(tls) 54940 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 12)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54941 quotaLeave(tls) 54942 } 54943 rc = libc.Xftruncate(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), szNew) 54944 if pFile != 0 && rc == 0 { 54945 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54946 quotaEnter(tls) 54947 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 12)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54948 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = szNew 54949 quotaLeave(tls) 54950 } 54951 return rc 54952 } 54953 54954 func sqlite3_quota_file_mtime(tls *libc.TLS, p uintptr, pTime uintptr) int32 { 54955 bp := tls.Alloc(96) 54956 defer tls.Free(96) 54957 54958 var rc int32 54959 54960 rc = libc.Xfstat(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), bp) 54961 if rc == 0 { 54962 *(*time_t)(unsafe.Pointer(pTime)) = (*stat)(unsafe.Pointer(bp)).Fst_mtim.Ftv_sec 54963 } 54964 return rc 54965 } 54966 54967 func sqlite3_quota_file_truesize(tls *libc.TLS, p uintptr) sqlite3_int64 { 54968 bp := tls.Alloc(96) 54969 defer tls.Free(96) 54970 54971 var rc int32 54972 54973 rc = libc.Xfstat(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), bp) 54974 if rc == 0 { 54975 return (*stat)(unsafe.Pointer(bp)).Fst_size 54976 } 54977 return int64(-1) 54978 } 54979 54980 func sqlite3_quota_file_size(tls *libc.TLS, p uintptr) sqlite3_int64 { 54981 if (*quota_FILE)(unsafe.Pointer(p)).FpFile != 0 { 54982 return (*quotaFile)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).FpFile)).FiSize 54983 } 54984 return int64(-1) 54985 } 54986 54987 func sqlite3_quota_file_available(tls *libc.TLS, p uintptr) int32 { 54988 var f uintptr = (*quota_FILE)(unsafe.Pointer(p)).Ff 54989 var pos1 int32 54990 var pos2 int32 54991 var rc int32 54992 pos1 = libc.Xftell(tls, f) 54993 if pos1 < 0 { 54994 return -1 54995 } 54996 rc = libc.Xfseek(tls, f, 0, SEEK_END) 54997 if rc != 0 { 54998 return -1 54999 } 55000 pos2 = libc.Xftell(tls, f) 55001 if pos2 < 0 { 55002 return -1 55003 } 55004 rc = libc.Xfseek(tls, f, pos1, SEEK_SET) 55005 if rc != 0 { 55006 return -1 55007 } 55008 return pos2 - pos1 55009 } 55010 55011 func sqlite3_quota_remove(tls *libc.TLS, zFilename uintptr) int32 { 55012 var zFull uintptr 55013 var nFull size_t 55014 var rc int32 55015 var pGroup uintptr 55016 var pFile uintptr 55017 var pNextFile uintptr 55018 var diff int32 55019 var c int8 55020 55021 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 55022 if zFull == uintptr(0) { 55023 return SQLITE_NOMEM 55024 } 55025 rc = (*struct { 55026 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55027 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 55028 gQuota.FsThisVfs.FmxPathname+1, zFull) 55029 if rc != 0 { 55030 sqlite3.Xsqlite3_free(tls, zFull) 55031 return rc 55032 } 55033 55034 nFull = libc.Xstrlen(tls, zFull) 55035 if nFull > size_t(0) && (int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-size_t(1))))) == '/' || int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-size_t(1))))) == '\\') { 55036 nFull-- 55037 *(*int8)(unsafe.Pointer(zFull + uintptr(nFull))) = int8(0) 55038 } 55039 55040 quotaEnter(tls) 55041 pGroup = quotaGroupFind(tls, zFull) 55042 if pGroup != 0 { 55043 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0 && rc == SQLITE_OK; pFile = pNextFile { 55044 pNextFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 55045 diff = libc.Xstrncmp(tls, zFull, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, nFull) 55046 if diff == 0 && (int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FzFilename + uintptr(nFull))))) == 0 || int32(c) == '/' || int32(c) == '\\') { 55047 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 55048 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 55049 } else { 55050 rc = (*struct { 55051 f func(*libc.TLS, uintptr, uintptr, int32) int32 55052 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 55053 quotaRemoveFile(tls, pFile) 55054 quotaGroupDeref(tls, pGroup) 55055 } 55056 } 55057 } 55058 } 55059 quotaLeave(tls) 55060 sqlite3.Xsqlite3_free(tls, zFull) 55061 return rc 55062 } 55063 55064 type TclQuotaCallback1 = struct { 55065 Finterp uintptr 55066 FpScript uintptr 55067 } 55068 55069 type TclQuotaCallback = TclQuotaCallback1 55070 55071 func tclQuotaCallback(tls *libc.TLS, zFilename uintptr, piLimit uintptr, iSize sqlite3_int64, pArg uintptr) { 55072 bp := tls.Alloc(12) 55073 defer tls.Free(12) 55074 55075 var p uintptr 55076 var pEval uintptr 55077 var pVarname uintptr 55078 55079 var rc int32 55080 55081 p = pArg 55082 if p == uintptr(0) { 55083 return 55084 } 55085 55086 pVarname = tcl.XTcl_NewStringObj(tls, ts+35928, -1) 55087 (*Tcl_Obj)(unsafe.Pointer(pVarname)).FrefCount++ 55088 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(uint32(0))), bp) 55089 tcl.XTcl_AppendObjToObj(tls, pVarname, tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer(bp))&uint32(0x7FFFFFFF)))) 55090 tcl.XTcl_ObjSetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(piLimit))), 0) 55091 55092 pEval = tcl.XTcl_DuplicateObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript) 55093 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 55094 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zFilename, -1)) 55095 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pVarname) 55096 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewWideIntObj(tls, iSize)) 55097 rc = tcl.XTcl_EvalObjEx(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 55098 55099 if rc == TCL_OK { 55100 var pLimit uintptr = tcl.XTcl_ObjGetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), 0) 55101 rc = tcl.XTcl_GetWideIntFromObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pLimit, bp+4) 55102 *(*sqlite3_int64)(unsafe.Pointer(piLimit)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 4)) 55103 tcl.XTcl_UnsetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetString(tls, pVarname), uintptr(0), 0) 55104 } 55105 55106 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 55107 var _objPtr uintptr = pEval 55108 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55109 tcl.XTclFreeObj(tls, _objPtr) 55110 } 55111 } 55112 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 55113 var _objPtr uintptr = pVarname 55114 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55115 tcl.XTclFreeObj(tls, _objPtr) 55116 } 55117 } 55118 if rc != TCL_OK { 55119 tcl.XTcl_BackgroundError(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp) 55120 } 55121 } 55122 55123 func tclCallbackDestructor(tls *libc.TLS, pObj uintptr) { 55124 var p uintptr = pObj 55125 if p != 0 { 55126 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 55127 var _objPtr uintptr = (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript 55128 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55129 tcl.XTclFreeObj(tls, _objPtr) 55130 } 55131 } 55132 sqlite3.Xsqlite3_free(tls, p) 55133 } 55134 } 55135 55136 func test_quota_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55137 bp := tls.Alloc(4) 55138 defer tls.Free(4) 55139 55140 var zName uintptr 55141 55142 var rc int32 55143 55144 if objc != 3 { 55145 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 55146 return TCL_ERROR 55147 } 55148 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 55149 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) != 0 { 55150 return TCL_ERROR 55151 } 55152 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 55153 zName = uintptr(0) 55154 } 55155 55156 rc = sqlite3_quota_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 55157 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55158 55159 return TCL_OK 55160 } 55161 55162 func test_quota_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55163 var rc int32 55164 55165 if objc != 1 { 55166 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 55167 return TCL_ERROR 55168 } 55169 55170 rc = sqlite3_quota_shutdown(tls) 55171 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55172 55173 return TCL_OK 55174 } 55175 55176 func test_quota_set(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55177 bp := tls.Alloc(12) 55178 defer tls.Free(12) 55179 55180 var zPattern uintptr 55181 55182 var pScript uintptr 55183 var rc int32 55184 var p uintptr 55185 55186 var xDestroy uintptr 55187 var xCallback uintptr 55188 55189 if objc != 4 { 55190 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35939) 55191 return TCL_ERROR 55192 } 55193 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 55194 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) != 0 { 55195 return TCL_ERROR 55196 } 55197 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*4)) 55198 tcl.XTcl_GetStringFromObj(tls, pScript, bp+8) 55199 55200 if *(*int32)(unsafe.Pointer(bp + 8)) > 0 { 55201 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TclQuotaCallback{}))) 55202 if !(p != 0) { 55203 tcl.XTcl_SetResult(tls, interp, ts+32746, uintptr(0)) 55204 return TCL_OK 55205 } 55206 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(TclQuotaCallback{}))) 55207 (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp = interp 55208 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 55209 (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript = pScript 55210 xDestroy = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tclCallbackDestructor})) 55211 xCallback = *(*uintptr)(unsafe.Pointer(&struct { 55212 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 55213 }{tclQuotaCallback})) 55214 } else { 55215 p = uintptr(0) 55216 xDestroy = uintptr(0) 55217 xCallback = uintptr(0) 55218 } 55219 55220 rc = sqlite3_quota_set(tls, zPattern, *(*Tcl_WideInt)(unsafe.Pointer(bp)), xCallback, p, xDestroy) 55221 55222 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55223 return TCL_OK 55224 } 55225 55226 func test_quota_file(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55227 var zFilename uintptr 55228 var rc int32 55229 55230 if objc != 2 { 55231 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 55232 return TCL_ERROR 55233 } 55234 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 55235 55236 rc = sqlite3_quota_file(tls, zFilename) 55237 55238 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55239 return TCL_OK 55240 } 55241 55242 func test_quota_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55243 bp := tls.Alloc(1008) 55244 defer tls.Free(1008) 55245 55246 var pResult uintptr 55247 var pGroupTerm uintptr 55248 var pFileTerm uintptr 55249 var pGroup uintptr 55250 var pFile uintptr 55251 55252 pResult = tcl.XTcl_NewObj(tls) 55253 quotaEnter(tls) 55254 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 55255 pGroupTerm = tcl.XTcl_NewObj(tls) 55256 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55257 tcl.XTcl_NewStringObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, -1)) 55258 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55259 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit)) 55260 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55261 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize)) 55262 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0; pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext { 55263 var i int32 55264 55265 pFileTerm = tcl.XTcl_NewObj(tls) 55266 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+8, ts, libc.VaList(bp, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename)) 55267 for i = 0; *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) != 0; i++ { 55268 if int32(*(*int8)(unsafe.Pointer(bp + 8 + uintptr(i)))) == '\\' { 55269 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8('/') 55270 } 55271 } 55272 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55273 tcl.XTcl_NewStringObj(tls, bp+8, -1)) 55274 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55275 tcl.XTcl_NewWideIntObj(tls, (*quotaFile)(unsafe.Pointer(pFile)).FiSize)) 55276 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55277 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FnRef))) 55278 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55279 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose))) 55280 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, pFileTerm) 55281 } 55282 tcl.XTcl_ListObjAppendElement(tls, interp, pResult, pGroupTerm) 55283 } 55284 quotaLeave(tls) 55285 tcl.XTcl_SetObjResult(tls, interp, pResult) 55286 return TCL_OK 55287 } 55288 55289 func test_quota_fopen(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55290 bp := tls.Alloc(58) 55291 defer tls.Free(58) 55292 55293 var zFilename uintptr 55294 var zMode uintptr 55295 var p uintptr 55296 55297 if objc != 3 { 55298 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35960) 55299 return TCL_ERROR 55300 } 55301 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 55302 zMode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 55303 p = sqlite3_quota_fopen(tls, zFilename, zMode) 55304 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+8, ts+9889, libc.VaList(bp, p)) 55305 tcl.XTcl_SetResult(tls, interp, bp+8, uintptr(1)) 55306 return TCL_OK 55307 } 55308 55309 func test_quota_fread(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55310 bp := tls.Alloc(8) 55311 defer tls.Free(8) 55312 55313 var p uintptr 55314 var zBuf uintptr 55315 55316 var got size_t 55317 55318 if objc != 4 { 55319 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35974) 55320 return TCL_ERROR 55321 } 55322 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55323 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) != 0 { 55324 return TCL_ERROR 55325 } 55326 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+4) != 0 { 55327 return TCL_ERROR 55328 } 55329 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp))**(*int32)(unsafe.Pointer(bp + 4))+1) 55330 if zBuf == uintptr(0) { 55331 tcl.XTcl_SetResult(tls, interp, ts+2069, uintptr(0)) 55332 return TCL_ERROR 55333 } 55334 got = sqlite3_quota_fread(tls, zBuf, uint32(*(*int32)(unsafe.Pointer(bp))), uint32(*(*int32)(unsafe.Pointer(bp + 4))), p) 55335 *(*int8)(unsafe.Pointer(zBuf + uintptr(got*size_t(*(*int32)(unsafe.Pointer(bp)))))) = int8(0) 55336 tcl.XTcl_SetResult(tls, interp, zBuf, uintptr(1)) 55337 sqlite3.Xsqlite3_free(tls, zBuf) 55338 return TCL_OK 55339 } 55340 55341 func test_quota_fwrite(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55342 bp := tls.Alloc(8) 55343 defer tls.Free(8) 55344 55345 var p uintptr 55346 var zBuf uintptr 55347 55348 var got size_t 55349 55350 if objc != 5 { 55351 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35992) 55352 return TCL_ERROR 55353 } 55354 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55355 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) != 0 { 55356 return TCL_ERROR 55357 } 55358 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+4) != 0 { 55359 return TCL_ERROR 55360 } 55361 zBuf = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))) 55362 got = sqlite3_quota_fwrite(tls, zBuf, uint32(*(*int32)(unsafe.Pointer(bp))), uint32(*(*int32)(unsafe.Pointer(bp + 4))), p) 55363 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(got))) 55364 return TCL_OK 55365 } 55366 55367 func test_quota_fclose(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55368 var p uintptr 55369 var rc int32 55370 55371 if objc != 2 { 55372 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55373 return TCL_ERROR 55374 } 55375 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55376 rc = sqlite3_quota_fclose(tls, p) 55377 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55378 return TCL_OK 55379 } 55380 55381 func test_quota_fflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55382 bp := tls.Alloc(4) 55383 defer tls.Free(4) 55384 55385 var p uintptr 55386 var rc int32 55387 *(*int32)(unsafe.Pointer(bp)) = 0 55388 55389 if objc != 2 && objc != 3 { 55390 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36018) 55391 return TCL_ERROR 55392 } 55393 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55394 if objc == 3 { 55395 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) != 0 { 55396 return TCL_ERROR 55397 } 55398 } 55399 rc = sqlite3_quota_fflush(tls, p, *(*int32)(unsafe.Pointer(bp))) 55400 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55401 return TCL_OK 55402 } 55403 55404 func test_quota_fseek(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55405 bp := tls.Alloc(20) 55406 defer tls.Free(20) 55407 55408 var p uintptr 55409 55410 var zWhence uintptr 55411 var whence int32 55412 var rc int32 55413 55414 if objc != 4 { 55415 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36036) 55416 return TCL_ERROR 55417 } 55418 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55419 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+16) != 0 { 55420 return TCL_ERROR 55421 } 55422 zWhence = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 55423 if libc.Xstrcmp(tls, zWhence, ts+36057) == 0 { 55424 whence = SEEK_SET 55425 } else if libc.Xstrcmp(tls, zWhence, ts+36066) == 0 { 55426 whence = SEEK_CUR 55427 } else if libc.Xstrcmp(tls, zWhence, ts+36075) == 0 { 55428 whence = SEEK_END 55429 } else { 55430 tcl.XTcl_AppendResult(tls, interp, 55431 libc.VaList(bp, ts+36084, uintptr(0))) 55432 return TCL_ERROR 55433 } 55434 rc = sqlite3_quota_fseek(tls, p, *(*int32)(unsafe.Pointer(bp + 16)), whence) 55435 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55436 return TCL_OK 55437 } 55438 55439 func test_quota_rewind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55440 var p uintptr 55441 if objc != 2 { 55442 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55443 return TCL_ERROR 55444 } 55445 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55446 sqlite3_quota_rewind(tls, p) 55447 return TCL_OK 55448 } 55449 55450 func test_quota_ftell(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55451 var p uintptr 55452 var x sqlite3_int64 55453 if objc != 2 { 55454 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55455 return TCL_ERROR 55456 } 55457 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55458 x = sqlite3_int64(sqlite3_quota_ftell(tls, p)) 55459 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55460 return TCL_OK 55461 } 55462 55463 func test_quota_ftruncate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55464 bp := tls.Alloc(8) 55465 defer tls.Free(8) 55466 55467 var p uintptr 55468 var x sqlite3_int64 55469 55470 var rc int32 55471 if objc != 3 { 55472 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36133) 55473 return TCL_ERROR 55474 } 55475 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55476 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) != 0 { 55477 return TCL_ERROR 55478 } 55479 x = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 55480 rc = sqlite3_quota_ftruncate(tls, p, x) 55481 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55482 return TCL_OK 55483 } 55484 55485 func test_quota_file_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55486 var p uintptr 55487 var x sqlite3_int64 55488 if objc != 2 { 55489 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55490 return TCL_ERROR 55491 } 55492 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55493 x = sqlite3_quota_file_size(tls, p) 55494 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55495 return TCL_OK 55496 } 55497 55498 func test_quota_file_truesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55499 var p uintptr 55500 var x sqlite3_int64 55501 if objc != 2 { 55502 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55503 return TCL_ERROR 55504 } 55505 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55506 x = sqlite3_quota_file_truesize(tls, p) 55507 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55508 return TCL_OK 55509 } 55510 55511 func test_quota_file_mtime(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55512 bp := tls.Alloc(4) 55513 defer tls.Free(4) 55514 55515 var p uintptr 55516 55517 if objc != 2 { 55518 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55519 return TCL_ERROR 55520 } 55521 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55522 *(*time_t)(unsafe.Pointer(bp)) = 0 55523 sqlite3_quota_file_mtime(tls, p, bp) 55524 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(*(*time_t)(unsafe.Pointer(bp))))) 55525 return TCL_OK 55526 } 55527 55528 func test_quota_remove(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55529 var zFilename uintptr 55530 var rc int32 55531 if objc != 2 { 55532 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 55533 return TCL_ERROR 55534 } 55535 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 55536 rc = sqlite3_quota_remove(tls, zFilename) 55537 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55538 return TCL_OK 55539 } 55540 55541 func test_quota_glob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55542 var zPattern uintptr 55543 var zText uintptr 55544 var rc int32 55545 if objc != 3 { 55546 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36145) 55547 return TCL_ERROR 55548 } 55549 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 55550 zText = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 55551 rc = quotaStrglob(tls, zPattern, zText) 55552 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55553 return TCL_OK 55554 } 55555 55556 func test_quota_file_available(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55557 var p uintptr 55558 var x sqlite3_int64 55559 if objc != 2 { 55560 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55561 return TCL_ERROR 55562 } 55563 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55564 x = sqlite3_int64(sqlite3_quota_file_available(tls, p)) 55565 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55566 return TCL_OK 55567 } 55568 55569 func test_quota_ferror(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55570 var p uintptr 55571 var x int32 55572 if objc != 2 { 55573 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55574 return TCL_ERROR 55575 } 55576 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 55577 x = sqlite3_quota_ferror(tls, p) 55578 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, x)) 55579 return TCL_OK 55580 } 55581 55582 func Sqlitequota_Init(tls *libc.TLS, interp uintptr) int32 { 55583 var i int32 55584 55585 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aCmd9))/uint32(unsafe.Sizeof(struct { 55586 FzName uintptr 55587 FxProc uintptr 55588 }{})); i++ { 55589 tcl.XTcl_CreateObjCommand(tls, interp, aCmd9[i].FzName, aCmd9[i].FxProc, uintptr(0), uintptr(0)) 55590 } 55591 55592 return TCL_OK 55593 } 55594 55595 var aCmd9 = [21]struct { 55596 FzName uintptr 55597 FxProc uintptr 55598 }{ 55599 {FzName: ts + 36158, FxProc: 0}, 55600 {FzName: ts + 36183, FxProc: 0}, 55601 {FzName: ts + 36206, FxProc: 0}, 55602 {FzName: ts + 36224, FxProc: 0}, 55603 {FzName: ts + 36243, FxProc: 0}, 55604 {FzName: ts + 36262, FxProc: 0}, 55605 {FzName: ts + 36282, FxProc: 0}, 55606 {FzName: ts + 36302, FxProc: 0}, 55607 {FzName: ts + 36323, FxProc: 0}, 55608 {FzName: ts + 36344, FxProc: 0}, 55609 {FzName: ts + 36365, FxProc: 0}, 55610 {FzName: ts + 36385, FxProc: 0}, 55611 {FzName: ts + 36406, FxProc: 0}, 55612 {FzName: ts + 36426, FxProc: 0}, 55613 {FzName: ts + 36450, FxProc: 0}, 55614 {FzName: ts + 36474, FxProc: 0}, 55615 {FzName: ts + 36502, FxProc: 0}, 55616 {FzName: ts + 36527, FxProc: 0}, 55617 {FzName: ts + 36548, FxProc: 0}, 55618 {FzName: ts + 36567, FxProc: 0}, 55619 {FzName: ts + 36596, FxProc: 0}, 55620 } 55621 55622 type Circle1 = struct { 55623 FaBox [2]struct { 55624 Fxmin float64 55625 Fxmax float64 55626 Fymin float64 55627 Fymax float64 55628 } 55629 Fcenterx float64 55630 Fcentery float64 55631 Fradius float64 55632 FmxArea float64 55633 FeScoreType int32 55634 } 55635 55636 type Circle = Circle1 55637 type Box = struct { 55638 Fxmin float64 55639 Fxmax float64 55640 Fymin float64 55641 Fymax float64 55642 } 55643 55644 func circle_del(tls *libc.TLS, p uintptr) { 55645 sqlite3.Xsqlite3_free(tls, p) 55646 } 55647 55648 func circle_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 55649 var i int32 55650 var pCircle uintptr 55651 var xmin float64 55652 var xmax float64 55653 var ymin float64 55654 var ymax float64 55655 55656 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) 55657 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) 55658 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) 55659 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) 55660 pCircle = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 55661 if pCircle == uintptr(0) { 55662 if nCoord != 4 { 55663 return SQLITE_ERROR 55664 } 55665 55666 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 { 55667 return SQLITE_ERROR 55668 } 55669 55670 pCircle = libc.AssignPtrUintptr(p+12, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 55671 if !(pCircle != 0) { 55672 return SQLITE_NOMEM 55673 } 55674 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 55675 55676 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 55677 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 55678 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 55679 55680 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55681 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55682 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55683 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55684 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55685 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55686 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55687 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55688 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = (xmax-xmin)*(ymax-ymin) + 1.0 55689 } 55690 55691 for i = 0; i < 4; i++ { 55692 var x float64 55693 if i&0x01 != 0 { 55694 x = xmax 55695 } else { 55696 x = xmin 55697 } 55698 var y float64 55699 if i&0x02 != 0 { 55700 y = ymax 55701 } else { 55702 y = ymin 55703 } 55704 var d2 float64 55705 55706 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55707 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55708 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55709 *(*int32)(unsafe.Pointer(pRes)) = 1 55710 return SQLITE_OK 55711 } 55712 } 55713 55714 for i = 0; i < 2; i++ { 55715 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55716 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55717 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55718 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55719 *(*int32)(unsafe.Pointer(pRes)) = 1 55720 return SQLITE_OK 55721 } 55722 } 55723 55724 *(*int32)(unsafe.Pointer(pRes)) = 0 55725 return SQLITE_OK 55726 } 55727 55728 func circle_query_func(tls *libc.TLS, p uintptr) int32 { 55729 var i int32 55730 var pCircle uintptr 55731 var xmin float64 55732 var xmax float64 55733 var ymin float64 55734 var ymax float64 55735 var nWithin int32 = 0 55736 55737 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55738 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55739 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55740 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55741 pCircle = (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FpUser 55742 if pCircle == uintptr(0) { 55743 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnCoord != 4 { 55744 return SQLITE_ERROR 55745 } 55746 55747 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 && (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 1 { 55748 return SQLITE_ERROR 55749 } 55750 55751 pCircle = libc.AssignPtrUintptr(p+12, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 55752 if !(pCircle != 0) { 55753 return SQLITE_NOMEM 55754 } 55755 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 55756 55757 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam == 4 { 55758 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55759 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55760 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55761 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(*(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8))) 55762 } else { 55763 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FapSqlParam))) 55764 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = 0.0 55765 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = 0.0 55766 (*Circle)(unsafe.Pointer(pCircle)).Fradius = 0.0 55767 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = 0 55768 for z != 0 && *(*int8)(unsafe.Pointer(z)) != 0 { 55769 if int32(*(*int8)(unsafe.Pointer(z))) == 'r' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55770 (*Circle)(unsafe.Pointer(pCircle)).Fradius = libc.Xatof(tls, z+2) 55771 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'x' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55772 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = libc.Xatof(tls, z+2) 55773 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'y' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55774 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = libc.Xatof(tls, z+2) 55775 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'e' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 55776 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(libc.Xatof(tls, z+2)) 55777 } else if int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 55778 z++ 55779 continue 55780 } 55781 for int32(*(*int8)(unsafe.Pointer(z))) != 0 && int32(*(*int8)(unsafe.Pointer(z))) != ' ' { 55782 z++ 55783 } 55784 for int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 55785 z++ 55786 } 55787 } 55788 } 55789 if (*Circle)(unsafe.Pointer(pCircle)).Fradius < 0.0 { 55790 sqlite3.Xsqlite3_free(tls, pCircle) 55791 return SQLITE_NOMEM 55792 } 55793 55794 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55795 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55796 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55797 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55798 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55799 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55800 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55801 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55802 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = float64(200.0) * 200.0 55803 } 55804 55805 for i = 0; i < 4; i++ { 55806 var x float64 55807 if i&0x01 != 0 { 55808 x = xmax 55809 } else { 55810 x = xmin 55811 } 55812 var y float64 55813 if i&0x02 != 0 { 55814 y = ymax 55815 } else { 55816 y = ymin 55817 } 55818 var d2 float64 55819 55820 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55821 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55822 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55823 nWithin++ 55824 } 55825 } 55826 55827 if nWithin == 0 { 55828 for i = 0; i < 2; i++ { 55829 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55830 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55831 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55832 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55833 nWithin = 1 55834 break 55835 } 55836 } 55837 } 55838 55839 if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 1 { 55840 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55841 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 2 { 55842 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55843 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 3 { 55844 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel == 1 { 55845 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 1.0 - (xmax-xmin)*(ymax-ymin)/(*Circle)(unsafe.Pointer(pCircle)).FmxArea 55846 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore < 0.01 { 55847 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.01 55848 } 55849 } else { 55850 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.0 55851 } 55852 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 4 { 55853 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55854 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 55855 nWithin = 0 55856 } 55857 } else { 55858 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55859 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 55860 nWithin = 0 55861 } 55862 } 55863 if nWithin == 0 { 55864 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 55865 } else if nWithin >= 4 { 55866 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55867 } else { 55868 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 55869 } 55870 return SQLITE_OK 55871 } 55872 55873 func bfs_query_func(tls *libc.TLS, p uintptr) int32 { 55874 var x0 float64 55875 var x1 float64 55876 var y0 float64 55877 var y1 float64 55878 var bx0 float64 55879 var bx1 float64 55880 var by0 float64 55881 var by1 float64 55882 55883 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 { 55884 return SQLITE_ERROR 55885 } 55886 x0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55887 x1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55888 y0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55889 y1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55890 bx0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55891 bx1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55892 by0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55893 by1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8)) 55894 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 55895 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeParentWithin == FULLY_WITHIN { 55896 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55897 } else if x0 >= bx0 && x1 <= bx1 && y0 >= by0 && y1 <= by1 { 55898 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 55899 } else if x1 >= bx0 && x0 <= bx1 && y1 >= by0 && y0 <= by1 { 55900 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 55901 } else { 55902 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 55903 } 55904 return SQLITE_OK 55905 } 55906 55907 type Cube1 = struct { 55908 Fx float64 55909 Fy float64 55910 Fz float64 55911 Fwidth float64 55912 Fheight float64 55913 Fdepth float64 55914 } 55915 55916 type Cube = Cube1 55917 55918 func cube_context_free(tls *libc.TLS, p uintptr) { 55919 sqlite3.Xsqlite3_free(tls, p) 55920 } 55921 55922 var gHere int32 = 42 55923 55924 func cube_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, piRes uintptr) int32 { 55925 var pCube uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 55926 55927 if pCube == uintptr(0) { 55928 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != 6 || nCoord != 6 || 55929 *(*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 { 55930 return SQLITE_ERROR 55931 } 55932 pCube = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Cube{}))) 55933 if !(pCube != 0) { 55934 return SQLITE_NOMEM 55935 } 55936 (*Cube)(unsafe.Pointer(pCube)).Fx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 55937 (*Cube)(unsafe.Pointer(pCube)).Fy = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 55938 (*Cube)(unsafe.Pointer(pCube)).Fz = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 55939 (*Cube)(unsafe.Pointer(pCube)).Fwidth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 3*8)) 55940 (*Cube)(unsafe.Pointer(pCube)).Fheight = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 4*8)) 55941 (*Cube)(unsafe.Pointer(pCube)).Fdepth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 5*8)) 55942 55943 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pCube 55944 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cube_context_free})) 55945 } 55946 55947 *(*int32)(unsafe.Pointer(piRes)) = 0 55948 if *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) <= (*Cube)(unsafe.Pointer(pCube)).Fx+(*Cube)(unsafe.Pointer(pCube)).Fwidth && 55949 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fx && 55950 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fy+(*Cube)(unsafe.Pointer(pCube)).Fheight && 55951 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fy && 55952 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 4*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fz+(*Cube)(unsafe.Pointer(pCube)).Fdepth && 55953 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 5*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fz { 55954 *(*int32)(unsafe.Pointer(piRes)) = 1 55955 } 55956 55957 return SQLITE_OK 55958 } 55959 55960 func register_cube_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55961 bp := tls.Alloc(4) 55962 defer tls.Free(4) 55963 55964 var rc int32 55965 55966 if objc != 2 { 55967 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55968 return TCL_ERROR 55969 } 55970 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 55971 return TCL_ERROR 55972 } 55973 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36617, *(*uintptr)(unsafe.Pointer(&struct { 55974 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 55975 }{cube_geom})), uintptr(unsafe.Pointer(&gHere))) 55976 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55977 return TCL_OK 55978 } 55979 55980 func register_circle_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55981 bp := tls.Alloc(4) 55982 defer tls.Free(4) 55983 55984 var rc int32 55985 55986 if objc != 2 { 55987 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 55988 return TCL_ERROR 55989 } 55990 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 55991 return TCL_ERROR 55992 } 55993 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36622, *(*uintptr)(unsafe.Pointer(&struct { 55994 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 55995 }{circle_geom})), uintptr(0)) 55996 if rc == SQLITE_OK { 55997 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36629, 55998 *(*uintptr)(unsafe.Pointer(&struct { 55999 f func(*libc.TLS, uintptr) int32 56000 }{circle_query_func})), uintptr(0), uintptr(0)) 56001 } 56002 if rc == SQLITE_OK { 56003 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36637, 56004 *(*uintptr)(unsafe.Pointer(&struct { 56005 f func(*libc.TLS, uintptr) int32 56006 }{bfs_query_func})), uintptr(0), uintptr(0)) 56007 } 56008 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 56009 return TCL_OK 56010 } 56011 56012 func Sqlitetestrtree_Init(tls *libc.TLS, interp uintptr) int32 { 56013 tcl.XTcl_CreateObjCommand(tls, interp, ts+36656, *(*uintptr)(unsafe.Pointer(&struct { 56014 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56015 }{register_cube_geom})), uintptr(0), uintptr(0)) 56016 tcl.XTcl_CreateObjCommand(tls, interp, ts+36675, *(*uintptr)(unsafe.Pointer(&struct { 56017 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56018 }{register_circle_geom})), uintptr(0), uintptr(0)) 56019 return TCL_OK 56020 } 56021 56022 type fd_set5 = struct{ Ffds_bits [32]int32 } 56023 56024 type schema_vtab1 = struct { 56025 Fbase sqlite3_vtab 56026 Fdb uintptr 56027 } 56028 56029 type schema_vtab = schema_vtab1 56030 type schema_cursor1 = struct { 56031 Fbase sqlite3_vtab_cursor 56032 FpDbList uintptr 56033 FpTableList uintptr 56034 FpColumnList uintptr 56035 Frowid int32 56036 } 56037 56038 type schema_cursor = schema_cursor1 56039 56040 func schemaDestroy(tls *libc.TLS, pVtab uintptr) int32 { 56041 sqlite3.Xsqlite3_free(tls, pVtab) 56042 return 0 56043 } 56044 56045 func schemaCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 56046 var rc int32 = SQLITE_NOMEM 56047 var pVtab uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_vtab{}))) 56048 if pVtab != 0 { 56049 libc.Xmemset(tls, pVtab, 0, uint32(unsafe.Sizeof(schema_vtab{}))) 56050 (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb = db 56051 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+36696) 56052 } 56053 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 56054 return rc 56055 } 56056 56057 func schemaOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 56058 var rc int32 = SQLITE_NOMEM 56059 var pCur uintptr 56060 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_cursor{}))) 56061 if pCur != 0 { 56062 libc.Xmemset(tls, pCur, 0, uint32(unsafe.Sizeof(schema_cursor{}))) 56063 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 56064 rc = SQLITE_OK 56065 } 56066 return rc 56067 } 56068 56069 func schemaClose(tls *libc.TLS, cur uintptr) int32 { 56070 var pCur uintptr = cur 56071 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList) 56072 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) 56073 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) 56074 sqlite3.Xsqlite3_free(tls, pCur) 56075 return SQLITE_OK 56076 } 56077 56078 func schemaColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 56079 var pCur uintptr = cur 56080 switch i { 56081 case 0: 56082 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1)) 56083 break 56084 case 1: 56085 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0)) 56086 break 56087 default: 56088 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList, i-2)) 56089 break 56090 } 56091 return SQLITE_OK 56092 } 56093 56094 func schemaRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 56095 var pCur uintptr = cur 56096 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*schema_cursor)(unsafe.Pointer(pCur)).Frowid) 56097 return SQLITE_OK 56098 } 56099 56100 func finalize(tls *libc.TLS, ppStmt uintptr) int32 { 56101 var rc int32 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(ppStmt))) 56102 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 56103 return rc 56104 } 56105 56106 func schemaEof(tls *libc.TLS, cur uintptr) int32 { 56107 var pCur uintptr = cur 56108 return func() int32 { 56109 if (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList != 0 { 56110 return 0 56111 } 56112 return 1 56113 }() 56114 } 56115 56116 func schemaNext(tls *libc.TLS, cur uintptr) int32 { 56117 bp := tls.Alloc(24) 56118 defer tls.Free(24) 56119 56120 var rc int32 56121 var pCur uintptr 56122 var pVtab uintptr 56123 var zSql uintptr 56124 var pDbList uintptr 56125 rc = SQLITE_OK 56126 pCur = cur 56127 pVtab = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 56128 zSql = uintptr(0) 56129 56130 __1: 56131 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList)) { 56132 goto __2 56133 } 56134 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+12))) { 56135 goto __3 56136 } 56137 goto next_exit 56138 __3: 56139 ; 56140 __4: 56141 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList)) { 56142 goto __5 56143 } 56144 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+8))) { 56145 goto __6 56146 } 56147 goto next_exit 56148 __6: 56149 ; 56150 __7: 56151 if !(SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList)) { 56152 goto __8 56153 } 56154 rc = finalize(tls, pCur+4) 56155 goto next_exit 56156 goto __7 56157 __8: 56158 ; 56159 if !(sqlite3.Xsqlite3_column_int(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 0) == 1) { 56160 goto __9 56161 } 56162 zSql = sqlite3.Xsqlite3_mprintf(tls, 56163 ts+36768, 0) 56164 goto __10 56165 __9: 56166 pDbList = (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList 56167 zSql = sqlite3.Xsqlite3_mprintf(tls, 56168 ts+36823, 56169 libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pDbList, 1))) 56170 __10: 56171 ; 56172 if !!(zSql != 0) { 56173 goto __11 56174 } 56175 rc = SQLITE_NOMEM 56176 goto next_exit 56177 __11: 56178 ; 56179 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+8, uintptr(0)) 56180 sqlite3.Xsqlite3_free(tls, zSql) 56181 if !(rc != SQLITE_OK) { 56182 goto __12 56183 } 56184 goto next_exit 56185 __12: 56186 ; 56187 goto __4 56188 __5: 56189 ; 56190 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+36876, 56191 libc.VaList(bp+8, sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1), 56192 sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0))) 56193 56194 if !!(zSql != 0) { 56195 goto __13 56196 } 56197 rc = SQLITE_NOMEM 56198 goto next_exit 56199 __13: 56200 ; 56201 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+12, uintptr(0)) 56202 sqlite3.Xsqlite3_free(tls, zSql) 56203 if !(rc != SQLITE_OK) { 56204 goto __14 56205 } 56206 goto next_exit 56207 __14: 56208 ; 56209 goto __1 56210 __2: 56211 ; 56212 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid++ 56213 56214 next_exit: 56215 return rc 56216 } 56217 56218 func schemaFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 56219 var rc int32 56220 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 56221 var pCur uintptr = pVtabCursor 56222 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid = 0 56223 finalize(tls, pCur+8) 56224 finalize(tls, pCur+12) 56225 finalize(tls, pCur+4) 56226 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, ts+36901, -1, pCur+4, uintptr(0)) 56227 return func() int32 { 56228 if rc == SQLITE_OK { 56229 return schemaNext(tls, pVtabCursor) 56230 } 56231 return rc 56232 }() 56233 } 56234 56235 func schemaBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 56236 return SQLITE_OK 56237 } 56238 56239 var schemaModule = sqlite3_module{ 56240 FxCreate: 0, 56241 FxConnect: 0, 56242 FxBestIndex: 0, 56243 FxDisconnect: 0, 56244 FxDestroy: 0, 56245 FxOpen: 0, 56246 FxClose: 0, 56247 FxFilter: 0, 56248 FxNext: 0, 56249 FxEof: 0, 56250 FxColumn: 0, 56251 FxRowid: 0, 56252 } 56253 56254 func register_schema_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56255 bp := tls.Alloc(4) 56256 defer tls.Free(4) 56257 56258 if objc != 2 { 56259 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 56260 return TCL_ERROR 56261 } 56262 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 56263 return TCL_ERROR 56264 } 56265 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+4808, uintptr(unsafe.Pointer(&schemaModule)), uintptr(0)) 56266 return TCL_OK 56267 } 56268 56269 func Sqlitetestschema_Init(tls *libc.TLS, interp uintptr) int32 { 56270 var i int32 56271 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd12))/uint32(unsafe.Sizeof(struct { 56272 FzName uintptr 56273 FxProc uintptr 56274 FclientData uintptr 56275 }{})); i++ { 56276 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd12[i].FzName, 56277 aObjCmd12[i].FxProc, aObjCmd12[i].FclientData, uintptr(0)) 56278 } 56279 return TCL_OK 56280 } 56281 56282 var aObjCmd12 = [1]struct { 56283 FzName uintptr 56284 FxProc uintptr 56285 FclientData uintptr 56286 }{ 56287 {FzName: ts + 36922, FxProc: 0}, 56288 } 56289 56290 type SqlMessage1 = struct { 56291 Fop int32 56292 FpDb uintptr 56293 FpStmt uintptr 56294 FerrCode int32 56295 FzIn uintptr 56296 FnByte int32 56297 FzOut uintptr 56298 FpNext uintptr 56299 FpPrev uintptr 56300 FclientMutex pthread_mutex_t 56301 FclientWakeup pthread_cond_t 56302 } 56303 56304 type SqlMessage = SqlMessage1 56305 56306 type ServerState = struct { 56307 FqueueMutex pthread_mutex_t 56308 FserverMutex pthread_mutex_t 56309 FserverWakeup pthread_cond_t 56310 FserverHalt int32 56311 FpQueueHead uintptr 56312 FpQueueTail uintptr 56313 } 56314 56315 var g4 = ServerState{} 56316 56317 func sendToServer(tls *libc.TLS, pMsg uintptr) { 56318 libc.Xpthread_mutex_init(tls, pMsg+36, uintptr(0)) 56319 libc.Xpthread_cond_init(tls, pMsg+60, uintptr(0)) 56320 56321 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 56322 (*SqlMessage)(unsafe.Pointer(pMsg)).FpNext = g4.FpQueueHead 56323 if g4.FpQueueHead == uintptr(0) { 56324 g4.FpQueueTail = pMsg 56325 } else { 56326 (*SqlMessage)(unsafe.Pointer(g4.FpQueueHead)).FpPrev = pMsg 56327 } 56328 (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev = uintptr(0) 56329 g4.FpQueueHead = pMsg 56330 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 56331 56332 libc.Xpthread_mutex_lock(tls, pMsg+36) 56333 libc.Xpthread_cond_signal(tls, uintptr(unsafe.Pointer(&g4))+48) 56334 for (*SqlMessage)(unsafe.Pointer(pMsg)).Fop != MSG_Done { 56335 libc.Xpthread_cond_wait(tls, pMsg+60, pMsg+36) 56336 } 56337 libc.Xpthread_mutex_unlock(tls, pMsg+36) 56338 56339 libc.Xpthread_mutex_destroy(tls, pMsg+36) 56340 libc.Xpthread_cond_destroy(tls, pMsg+60) 56341 } 56342 56343 func sqlite3_client_open(tls *libc.TLS, zDatabaseName uintptr, ppDb uintptr) int32 { 56344 bp := tls.Alloc(108) 56345 defer tls.Free(108) 56346 56347 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Open 56348 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zDatabaseName 56349 sendToServer(tls, bp) 56350 *(*uintptr)(unsafe.Pointer(ppDb)) = (*SqlMessage)(unsafe.Pointer(bp)).FpDb 56351 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56352 } 56353 56354 func sqlite3_client_prepare(tls *libc.TLS, pDb uintptr, zSql uintptr, nByte int32, ppStmt uintptr, pzTail uintptr) int32 { 56355 bp := tls.Alloc(108) 56356 defer tls.Free(108) 56357 56358 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Prepare 56359 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 56360 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zSql 56361 (*SqlMessage)(unsafe.Pointer(bp)).FnByte = nByte 56362 sendToServer(tls, bp) 56363 *(*uintptr)(unsafe.Pointer(ppStmt)) = (*SqlMessage)(unsafe.Pointer(bp)).FpStmt 56364 if pzTail != 0 { 56365 *(*uintptr)(unsafe.Pointer(pzTail)) = (*SqlMessage)(unsafe.Pointer(bp)).FzOut 56366 } 56367 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56368 } 56369 56370 func sqlite3_client_step(tls *libc.TLS, pStmt uintptr) int32 { 56371 bp := tls.Alloc(108) 56372 defer tls.Free(108) 56373 56374 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Step 56375 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56376 sendToServer(tls, bp) 56377 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56378 } 56379 56380 func sqlite3_client_reset(tls *libc.TLS, pStmt uintptr) int32 { 56381 bp := tls.Alloc(108) 56382 defer tls.Free(108) 56383 56384 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Reset 56385 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56386 sendToServer(tls, bp) 56387 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56388 } 56389 56390 func sqlite3_client_finalize(tls *libc.TLS, pStmt uintptr) int32 { 56391 bp := tls.Alloc(108) 56392 defer tls.Free(108) 56393 56394 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Finalize 56395 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56396 sendToServer(tls, bp) 56397 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56398 } 56399 56400 func sqlite3_client_close(tls *libc.TLS, pDb uintptr) int32 { 56401 bp := tls.Alloc(108) 56402 defer tls.Free(108) 56403 56404 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Close 56405 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 56406 sendToServer(tls, bp) 56407 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56408 } 56409 56410 func sqlite3_server(tls *libc.TLS, NotUsed uintptr) uintptr { 56411 if libc.Xpthread_mutex_trylock(tls, uintptr(unsafe.Pointer(&g4))+24) != 0 { 56412 return uintptr(0) 56413 } 56414 sqlite3.Xsqlite3_enable_shared_cache(tls, 1) 56415 for !(g4.FserverHalt != 0) { 56416 var pMsg uintptr 56417 56418 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 56419 for g4.FpQueueTail == uintptr(0) && g4.FserverHalt == 0 { 56420 libc.Xpthread_cond_wait(tls, uintptr(unsafe.Pointer(&g4))+48, uintptr(unsafe.Pointer(&g4))) 56421 } 56422 pMsg = g4.FpQueueTail 56423 if pMsg != 0 { 56424 if (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev != 0 { 56425 (*SqlMessage)(unsafe.Pointer((*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev)).FpNext = uintptr(0) 56426 } else { 56427 g4.FpQueueHead = uintptr(0) 56428 } 56429 g4.FpQueueTail = (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev 56430 } 56431 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 56432 if pMsg == uintptr(0) { 56433 break 56434 } 56435 56436 libc.Xpthread_mutex_lock(tls, pMsg+36) 56437 switch (*SqlMessage)(unsafe.Pointer(pMsg)).Fop { 56438 case MSG_Open: 56439 { 56440 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_open(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, pMsg+4) 56441 break 56442 56443 } 56444 case MSG_Prepare: 56445 { 56446 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_prepare(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, (*SqlMessage)(unsafe.Pointer(pMsg)).FnByte, 56447 pMsg+8, pMsg+24) 56448 break 56449 56450 } 56451 case MSG_Step: 56452 { 56453 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_step(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56454 break 56455 56456 } 56457 case MSG_Reset: 56458 { 56459 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_reset(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56460 break 56461 56462 } 56463 case MSG_Finalize: 56464 { 56465 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_finalize(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56466 break 56467 56468 } 56469 case MSG_Close: 56470 { 56471 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_close(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb) 56472 break 56473 56474 } 56475 } 56476 56477 (*SqlMessage)(unsafe.Pointer(pMsg)).Fop = MSG_Done 56478 libc.Xpthread_mutex_unlock(tls, pMsg+36) 56479 libc.Xpthread_cond_signal(tls, pMsg+60) 56480 } 56481 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+24) 56482 return uintptr(0) 56483 } 56484 56485 func sqlite3_server_start(tls *libc.TLS) { 56486 bp := tls.Alloc(4) 56487 defer tls.Free(4) 56488 56489 var rc int32 56490 g4.FserverHalt = 0 56491 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 56492 f func(*libc.TLS, uintptr) uintptr 56493 }{sqlite3_server})), uintptr(0)) 56494 if rc == 0 { 56495 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 56496 } 56497 } 56498 56499 func serverWrapper(tls *libc.TLS, pnDecr uintptr) uintptr { 56500 var p uintptr = sqlite3_server(tls, uintptr(0)) 56501 *(*int32)(unsafe.Pointer(pnDecr))-- 56502 return p 56503 } 56504 56505 func sqlite3_server_start2(tls *libc.TLS, pnDecr uintptr) { 56506 bp := tls.Alloc(4) 56507 defer tls.Free(4) 56508 56509 var rc int32 56510 g4.FserverHalt = 0 56511 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 56512 f func(*libc.TLS, uintptr) uintptr 56513 }{serverWrapper})), pnDecr) 56514 if rc == 0 { 56515 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 56516 } 56517 } 56518 56519 func sqlite3_server_stop(tls *libc.TLS) { 56520 g4.FserverHalt = 1 56521 libc.Xpthread_cond_broadcast(tls, uintptr(unsafe.Pointer(&g4))+48) 56522 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))+24) 56523 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+24) 56524 } 56525 56526 type SuperlockBusy1 = struct { 56527 FxBusy uintptr 56528 FpBusyArg uintptr 56529 FnBusy int32 56530 } 56531 56532 type SuperlockBusy = SuperlockBusy1 56533 56534 type Superlock1 = struct { 56535 Fdb uintptr 56536 FbWal int32 56537 } 56538 56539 type Superlock = Superlock1 56540 56541 func superlockBusyHandler(tls *libc.TLS, pCtx uintptr, UNUSED int32) int32 { 56542 var pBusy uintptr = pCtx 56543 if (*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy == uintptr(0) { 56544 return 0 56545 } 56546 return (*struct { 56547 f func(*libc.TLS, uintptr, int32) int32 56548 })(unsafe.Pointer(&struct{ uintptr }{(*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy})).f(tls, (*SuperlockBusy)(unsafe.Pointer(pBusy)).FpBusyArg, libc.PostIncInt32(&(*SuperlockBusy)(unsafe.Pointer(pBusy)).FnBusy, 1)) 56549 } 56550 56551 func superlockIsWal(tls *libc.TLS, pLock uintptr) int32 { 56552 bp := tls.Alloc(4) 56553 defer tls.Free(4) 56554 56555 var rc int32 56556 56557 rc = sqlite3.Xsqlite3_prepare(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+36945, -1, bp, uintptr(0)) 56558 if rc != SQLITE_OK { 56559 return rc 56560 } 56561 56562 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 0 56563 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 56564 var zMode uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 56565 if zMode != 0 && libc.Xstrlen(tls, zMode) == size_t(3) && sqlite3.Xsqlite3_strnicmp(tls, ts+29946, zMode, 3) == 0 { 56566 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 1 56567 } 56568 } 56569 56570 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 56571 } 56572 56573 func superlockShmLock(tls *libc.TLS, fd uintptr, idx int32, nByte int32, pBusy uintptr) int32 { 56574 var rc int32 56575 var xShmLock uintptr = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxShmLock 56576 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_BUSY && superlockBusyHandler(tls, pBusy, 0) != 0 { 56577 rc = (*struct { 56578 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56579 })(unsafe.Pointer(&struct{ uintptr }{xShmLock})).f(tls, fd, idx, nByte, SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) 56580 } 56581 return rc 56582 } 56583 56584 func superlockWalLock(tls *libc.TLS, db uintptr, pBusy uintptr) int32 { 56585 bp := tls.Alloc(8) 56586 defer tls.Free(8) 56587 56588 var rc int32 56589 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 56590 *(*uintptr)(unsafe.Pointer(bp + 4)) = uintptr(0) 56591 56592 rc = sqlite3.Xsqlite3_file_control(tls, db, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 56593 if rc != SQLITE_OK { 56594 return rc 56595 } 56596 56597 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 2, 1, pBusy) 56598 if rc != SQLITE_OK { 56599 return rc 56600 } 56601 56602 rc = (*struct { 56603 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 56604 })(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+4) 56605 if rc != SQLITE_OK { 56606 return rc 56607 } 56608 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(bp + 4)), 0, uint32(32)) 56609 56610 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 3, SQLITE_SHM_NLOCK-3, pBusy) 56611 return rc 56612 } 56613 56614 func sqlite3demo_superunlock(tls *libc.TLS, pLock uintptr) { 56615 bp := tls.Alloc(4) 56616 defer tls.Free(4) 56617 56618 var p uintptr = pLock 56619 if (*Superlock)(unsafe.Pointer(p)).FbWal != 0 { 56620 var rc int32 56621 var flags int32 = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE 56622 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 56623 rc = sqlite3.Xsqlite3_file_control(tls, (*Superlock)(unsafe.Pointer(p)).Fdb, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 56624 if rc == SQLITE_OK { 56625 (*struct { 56626 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56627 })(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) 56628 (*struct { 56629 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56630 })(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) 56631 } 56632 } 56633 sqlite3.Xsqlite3_close(tls, (*Superlock)(unsafe.Pointer(p)).Fdb) 56634 sqlite3.Xsqlite3_free(tls, p) 56635 } 56636 56637 func sqlite3demo_superlock(tls *libc.TLS, zPath uintptr, zVfs uintptr, xBusy uintptr, pBusyArg uintptr, ppLock uintptr) int32 { 56638 bp := tls.Alloc(12) 56639 defer tls.Free(12) 56640 56641 *(*SuperlockBusy)(unsafe.Pointer(bp)) = SuperlockBusy{} 56642 var rc int32 56643 var pLock uintptr 56644 56645 pLock = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Superlock{}))) 56646 if !(pLock != 0) { 56647 return SQLITE_NOMEM 56648 } 56649 libc.Xmemset(tls, pLock, 0, uint32(unsafe.Sizeof(Superlock{}))) 56650 56651 rc = sqlite3.Xsqlite3_open_v2(tls, 56652 zPath, pLock, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs) 56653 56654 if rc == SQLITE_OK { 56655 (*SuperlockBusy)(unsafe.Pointer(bp)).FxBusy = xBusy 56656 (*SuperlockBusy)(unsafe.Pointer(bp)).FpBusyArg = pBusyArg 56657 sqlite3.Xsqlite3_busy_handler(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 56658 f func(*libc.TLS, uintptr, int32) int32 56659 }{superlockBusyHandler})), bp) 56660 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+13217, uintptr(0), uintptr(0), uintptr(0)) 56661 } 56662 56663 if rc == SQLITE_OK { 56664 if SQLITE_OK == libc.AssignInt32(&rc, superlockIsWal(tls, pLock)) && (*Superlock)(unsafe.Pointer(pLock)).FbWal != 0 { 56665 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+11628, uintptr(0), uintptr(0), uintptr(0)) 56666 if rc == SQLITE_OK { 56667 rc = superlockWalLock(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, bp) 56668 } 56669 } 56670 } 56671 56672 if rc != SQLITE_OK { 56673 sqlite3demo_superunlock(tls, pLock) 56674 *(*uintptr)(unsafe.Pointer(ppLock)) = uintptr(0) 56675 } else { 56676 *(*uintptr)(unsafe.Pointer(ppLock)) = pLock 56677 } 56678 56679 return rc 56680 } 56681 56682 type InterpAndScript1 = struct { 56683 Finterp uintptr 56684 FpScript uintptr 56685 } 56686 56687 type InterpAndScript = InterpAndScript1 56688 56689 func superunlock_del(tls *libc.TLS, cd ClientData) { 56690 sqlite3demo_superunlock(tls, cd) 56691 } 56692 56693 func superunlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56694 if objc != 1 { 56695 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 56696 return TCL_ERROR 56697 } 56698 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 56699 return TCL_OK 56700 } 56701 56702 func superlock_busy(tls *libc.TLS, pCtx uintptr, nBusy int32) int32 { 56703 bp := tls.Alloc(4) 56704 defer tls.Free(4) 56705 56706 var p uintptr = pCtx 56707 var pEval uintptr 56708 *(*int32)(unsafe.Pointer(bp)) = 0 56709 56710 pEval = tcl.XTcl_DuplicateObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).FpScript) 56711 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 56712 tcl.XTcl_ListObjAppendElement(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, nBusy)) 56713 tcl.XTcl_EvalObjEx(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 56714 tcl.XTcl_GetIntFromObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp), bp) 56715 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56716 var _objPtr uintptr = pEval 56717 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56718 tcl.XTclFreeObj(tls, _objPtr) 56719 } 56720 } 56721 56722 return *(*int32)(unsafe.Pointer(bp)) 56723 } 56724 56725 func superlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56726 bp := tls.Alloc(28) 56727 defer tls.Free(28) 56728 56729 var zPath uintptr 56730 var zVfs uintptr = uintptr(0) 56731 *(*InterpAndScript)(unsafe.Pointer(bp + 16)) = InterpAndScript{} 56732 var xBusy uintptr = uintptr(0) 56733 var rc int32 56734 56735 if objc < 3 || objc > 5 { 56736 tcl.XTcl_WrongNumArgs(tls, 56737 interp, 1, objv, ts+36970) 56738 return TCL_ERROR 56739 } 56740 56741 zPath = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 56742 56743 if objc > 3 { 56744 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 56745 if libc.Xstrlen(tls, zVfs) == size_t(0) { 56746 zVfs = uintptr(0) 56747 } 56748 } 56749 if objc > 4 { 56750 (*InterpAndScript)(unsafe.Pointer(bp + 16)).Finterp = interp 56751 (*InterpAndScript)(unsafe.Pointer(bp + 16)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 4*4)) 56752 xBusy = *(*uintptr)(unsafe.Pointer(&struct { 56753 f func(*libc.TLS, uintptr, int32) int32 56754 }{superlock_busy})) 56755 } 56756 56757 rc = sqlite3demo_superlock(tls, zPath, zVfs, xBusy, bp+16, bp+24) 56758 56759 if rc != SQLITE_OK { 56760 tcl.XTcl_ResetResult(tls, interp) 56761 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 56762 return TCL_ERROR 56763 } 56764 56765 tcl.XTcl_CreateObjCommand(tls, 56766 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), *(*uintptr)(unsafe.Pointer(&struct { 56767 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56768 }{superunlock_cmd})), *(*uintptr)(unsafe.Pointer(bp + 24)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{superunlock_del}))) 56769 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 56770 return TCL_OK 56771 } 56772 56773 func SqliteSuperlock_Init(tls *libc.TLS, interp uintptr) int32 { 56774 tcl.XTcl_CreateObjCommand(tls, interp, ts+37011, *(*uintptr)(unsafe.Pointer(&struct { 56775 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 56776 }{superlock_cmd})), uintptr(0), uintptr(0)) 56777 return TCL_OK 56778 } 56779 56780 type error_t = int32 56781 56782 type TestSyscallGlobal = struct { 56783 FbPersist int32 56784 FnCount int32 56785 FnFail int32 56786 Fpgsz int32 56787 Forig_getpagesize sqlite3_syscall_ptr 56788 } 56789 56790 var gSyscall = TestSyscallGlobal{} 56791 56792 type TestSyscallArray = struct { 56793 FzName uintptr 56794 FxTest sqlite3_syscall_ptr 56795 FxOrig sqlite3_syscall_ptr 56796 Fdefault_errno int32 56797 Fcustom_errno int32 56798 } 56799 56800 var aSyscall = [19]TestSyscallArray{ 56801 {FzName: ts + 37033, FxTest: 0, Fdefault_errno: EACCES}, 56802 {FzName: ts + 9490, FxTest: 0}, 56803 {FzName: ts + 37038, FxTest: 0}, 56804 {FzName: ts + 37045, FxTest: 0}, 56805 {FzName: ts + 37052, FxTest: 0}, 56806 {FzName: ts + 37057, FxTest: 0}, 56807 {FzName: ts + 37063, FxTest: 0, Fdefault_errno: EIO}, 56808 {FzName: ts + 37073, FxTest: 0, Fdefault_errno: EACCES}, 56809 {FzName: ts + 25126, FxTest: 0}, 56810 {FzName: ts + 37079, FxTest: 0}, 56811 {FzName: ts + 37085, FxTest: 0}, 56812 {FzName: ts + 25131, FxTest: 0}, 56813 {FzName: ts + 37093, FxTest: 0}, 56814 {FzName: ts + 37100, FxTest: 0}, 56815 {FzName: ts + 37109, FxTest: 0}, 56816 {FzName: ts + 37116, FxTest: 0}, 56817 {FzName: ts + 29040, FxTest: 0}, 56818 {FzName: ts + 37126, FxTest: 0}, 56819 {}, 56820 } 56821 56822 func tsIsFail(tls *libc.TLS) int32 { 56823 gSyscall.FnCount-- 56824 if gSyscall.FnCount == 0 || gSyscall.FnFail != 0 && gSyscall.FbPersist != 0 { 56825 gSyscall.FnFail++ 56826 return 1 56827 } 56828 return 0 56829 } 56830 56831 func tsErrno(tls *libc.TLS, zFunc uintptr) int32 { 56832 var i int32 56833 var nFunc int32 = int32(libc.Xstrlen(tls, zFunc)) 56834 for i = 0; aSyscall[i].FzName != 0; i++ { 56835 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(nFunc) { 56836 continue 56837 } 56838 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint32(nFunc)) != 0 { 56839 continue 56840 } 56841 return aSyscall[i].Fcustom_errno 56842 } 56843 56844 return 0 56845 } 56846 56847 func tsIsFailErrno(tls *libc.TLS, zFunc uintptr) int32 { 56848 if tsIsFail(tls) != 0 { 56849 *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) = tsErrno(tls, zFunc) 56850 return 1 56851 } 56852 return 0 56853 } 56854 56855 func ts_open(tls *libc.TLS, zFile uintptr, flags int32, mode int32) int32 { 56856 if tsIsFailErrno(tls, ts+37033) != 0 { 56857 return -1 56858 } 56859 return (*(*func(*libc.TLS, uintptr, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8)))(tls, zFile, flags, mode) 56860 } 56861 56862 func ts_close(tls *libc.TLS, fd int32) int32 { 56863 if tsIsFail(tls) != 0 { 56864 (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*20 + 8)))(tls, fd) 56865 return -1 56866 } 56867 return (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*20 + 8)))(tls, fd) 56868 } 56869 56870 func ts_access(tls *libc.TLS, zPath uintptr, mode int32) int32 { 56871 if tsIsFail(tls) != 0 { 56872 return -1 56873 } 56874 return (*(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 2*20 + 8)))(tls, zPath, mode) 56875 } 56876 56877 func ts_getcwd(tls *libc.TLS, zPath uintptr, nPath size_t) uintptr { 56878 if tsIsFail(tls) != 0 { 56879 return uintptr(0) 56880 } 56881 return (*(*func(*libc.TLS, uintptr, size_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 3*20 + 8)))(tls, zPath, nPath) 56882 } 56883 56884 func ts_stat(tls *libc.TLS, zPath uintptr, p uintptr) int32 { 56885 if tsIsFail(tls) != 0 { 56886 return -1 56887 } 56888 return (*(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 4*20 + 8)))(tls, zPath, p) 56889 } 56890 56891 func ts_fstat(tls *libc.TLS, fd int32, p uintptr) int32 { 56892 if tsIsFailErrno(tls, ts+37057) != 0 { 56893 return -1 56894 } 56895 return (*(*func(*libc.TLS, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 5*20 + 8)))(tls, fd, p) 56896 } 56897 56898 func ts_ftruncate(tls *libc.TLS, fd int32, n off_t) int32 { 56899 if tsIsFailErrno(tls, ts+37063) != 0 { 56900 return -1 56901 } 56902 return (*(*func(*libc.TLS, int32, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 6*20 + 8)))(tls, fd, n) 56903 } 56904 56905 func ts_fcntl(tls *libc.TLS, fd int32, cmd int32, va uintptr) int32 { 56906 bp := tls.Alloc(8) 56907 defer tls.Free(8) 56908 56909 var ap va_list 56910 _ = ap 56911 var pArg uintptr 56912 if tsIsFailErrno(tls, ts+37073) != 0 { 56913 return -1 56914 } 56915 ap = va 56916 pArg = libc.VaUintptr(&ap) 56917 return (*(*func(*libc.TLS, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 7*20 + 8)))(tls, fd, cmd, libc.VaList(bp, pArg)) 56918 } 56919 56920 func ts_read(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 56921 if tsIsFailErrno(tls, ts+25126) != 0 { 56922 return -1 56923 } 56924 return (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8*20 + 8)))(tls, fd, aBuf, nBuf) 56925 } 56926 56927 func ts_pread(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 56928 if tsIsFailErrno(tls, ts+37079) != 0 { 56929 return -1 56930 } 56931 return (*(*func(*libc.TLS, int32, uintptr, size_t, off_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 9*20 + 8)))(tls, fd, aBuf, nBuf, off) 56932 } 56933 56934 func ts_pread64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 56935 if tsIsFailErrno(tls, ts+37085) != 0 { 56936 return -1 56937 } 56938 return (*(*func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 10*20 + 8)))(tls, fd, aBuf, nBuf, off) 56939 } 56940 56941 func ts_write(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 56942 if tsIsFailErrno(tls, ts+25131) != 0 { 56943 if tsErrno(tls, ts+25131) == EINTR { 56944 (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*20 + 8)))(tls, fd, aBuf, nBuf/size_t(2)) 56945 } 56946 return -1 56947 } 56948 return (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*20 + 8)))(tls, fd, aBuf, nBuf) 56949 } 56950 56951 func ts_pwrite(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 56952 if tsIsFailErrno(tls, ts+37093) != 0 { 56953 return -1 56954 } 56955 return (*(*func(*libc.TLS, int32, uintptr, size_t, off_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 12*20 + 8)))(tls, fd, aBuf, nBuf, off) 56956 } 56957 56958 func ts_pwrite64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 56959 if tsIsFailErrno(tls, ts+37100) != 0 { 56960 return -1 56961 } 56962 return (*(*func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 13*20 + 8)))(tls, fd, aBuf, nBuf, off) 56963 } 56964 56965 func ts_fchmod(tls *libc.TLS, fd int32, mode mode_t) int32 { 56966 if tsIsFail(tls) != 0 { 56967 return -1 56968 } 56969 return (*(*func(*libc.TLS, int32, mode_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 14*20 + 8)))(tls, fd, mode) 56970 } 56971 56972 func ts_fallocate(tls *libc.TLS, fd int32, off off_t, len off_t) int32 { 56973 if tsIsFail(tls) != 0 { 56974 return tsErrno(tls, ts+37116) 56975 } 56976 return (*(*func(*libc.TLS, int32, off_t, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 15*20 + 8)))(tls, fd, off, len) 56977 } 56978 56979 func ts_mmap(tls *libc.TLS, pAddr uintptr, nByte size_t, prot int32, flags int32, fd int32, iOff off_t) uintptr { 56980 if tsIsFailErrno(tls, ts+29040) != 0 { 56981 return libc.UintptrFromInt32(-1) 56982 } 56983 return (*(*func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16*20 + 8)))(tls, pAddr, nByte, prot, flags, fd, iOff) 56984 } 56985 56986 func ts_mremap(tls *libc.TLS, a uintptr, b size_t, c size_t, d int32, va uintptr) uintptr { 56987 bp := tls.Alloc(8) 56988 defer tls.Free(8) 56989 56990 var ap va_list 56991 _ = ap 56992 var pArg uintptr 56993 if tsIsFailErrno(tls, ts+37126) != 0 { 56994 return libc.UintptrFromInt32(-1) 56995 } 56996 ap = va 56997 pArg = libc.VaUintptr(&ap) 56998 return (*(*func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 17*20 + 8)))(tls, a, b, c, d, libc.VaList(bp, pArg)) 56999 } 57000 57001 func test_syscall_install(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57002 bp := tls.Alloc(12) 57003 defer tls.Free(12) 57004 57005 var pVfs uintptr 57006 57007 var i int32 57008 57009 if objc != 3 { 57010 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37133) 57011 return TCL_ERROR 57012 } 57013 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp, bp+4) != 0 { 57014 return TCL_ERROR 57015 } 57016 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57017 57018 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 57019 var rc int32 = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57020 *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(i)*4)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp+8) 57021 if rc != 0 { 57022 return rc 57023 } 57024 if aSyscall[*(*int32)(unsafe.Pointer(bp + 8))].FxOrig == uintptr(0) { 57025 aSyscall[*(*int32)(unsafe.Pointer(bp + 8))].FxOrig = (*struct { 57026 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57027 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 8))].FzName) 57028 (*struct { 57029 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57030 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 8))].FzName, aSyscall[*(*int32)(unsafe.Pointer(bp + 8))].FxTest) 57031 } 57032 aSyscall[*(*int32)(unsafe.Pointer(bp + 8))].Fcustom_errno = aSyscall[*(*int32)(unsafe.Pointer(bp + 8))].Fdefault_errno 57033 } 57034 57035 return TCL_OK 57036 } 57037 57038 func test_syscall_uninstall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57039 var pVfs uintptr 57040 var i int32 57041 57042 if objc != 2 { 57043 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57044 return TCL_ERROR 57045 } 57046 57047 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57048 for i = 0; aSyscall[i].FzName != 0; i++ { 57049 if aSyscall[i].FxOrig != 0 { 57050 (*struct { 57051 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57052 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[i].FzName, uintptr(0)) 57053 aSyscall[i].FxOrig = uintptr(0) 57054 } 57055 } 57056 return TCL_OK 57057 } 57058 57059 func test_syscall_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57060 bp := tls.Alloc(4) 57061 defer tls.Free(4) 57062 57063 var pVfs uintptr 57064 var i int32 57065 var rc int32 57066 57067 if objc != 2 && objc != 3 { 57068 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57069 return TCL_ERROR 57070 } 57071 57072 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57073 if objc == 2 { 57074 rc = (*struct { 57075 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57076 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, uintptr(0), uintptr(0)) 57077 for i = 0; aSyscall[i].FzName != 0; i++ { 57078 aSyscall[i].FxOrig = uintptr(0) 57079 } 57080 } else { 57081 var zFunc uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) 57082 rc = (*struct { 57083 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57084 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), uintptr(0)) 57085 for i = 0; rc == SQLITE_OK && aSyscall[i].FzName != 0; i++ { 57086 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(*(*int32)(unsafe.Pointer(bp))) { 57087 continue 57088 } 57089 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint32(*(*int32)(unsafe.Pointer(bp)))) != 0 { 57090 continue 57091 } 57092 aSyscall[i].FxOrig = uintptr(0) 57093 } 57094 } 57095 if rc != SQLITE_OK { 57096 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 57097 return TCL_ERROR 57098 } 57099 57100 tcl.XTcl_ResetResult(tls, interp) 57101 return TCL_OK 57102 } 57103 57104 func test_syscall_exists(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57105 var pVfs uintptr 57106 var x sqlite3_syscall_ptr 57107 57108 if objc != 3 { 57109 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57110 return TCL_ERROR 57111 } 57112 57113 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57114 x = (*struct { 57115 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57116 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)))) 57117 57118 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(x != uintptr(0)) != 0))) 57119 return TCL_OK 57120 } 57121 57122 func test_syscall_fault(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57123 bp := tls.Alloc(8) 57124 defer tls.Free(8) 57125 57126 *(*int32)(unsafe.Pointer(bp)) = 0 57127 *(*int32)(unsafe.Pointer(bp + 4)) = 0 57128 57129 if objc != 2 && objc != 4 { 57130 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37158) 57131 return TCL_ERROR 57132 } 57133 57134 if objc == 4 { 57135 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp) != 0 || 57136 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+4) != 0 { 57137 return TCL_ERROR 57138 } 57139 } 57140 57141 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, gSyscall.FnFail)) 57142 gSyscall.FnCount = *(*int32)(unsafe.Pointer(bp)) 57143 gSyscall.FbPersist = *(*int32)(unsafe.Pointer(bp + 4)) 57144 gSyscall.FnFail = 0 57145 return TCL_OK 57146 } 57147 57148 func test_syscall_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57149 bp := tls.Alloc(104) 57150 defer tls.Free(104) 57151 57152 var rc int32 57153 57154 *(*[12]Errno)(unsafe.Pointer(bp + 4)) = [12]Errno{ 57155 {Fz: ts + 37174, Fi: EACCES}, 57156 {Fz: ts + 37181, Fi: EINTR}, 57157 {Fz: ts + 37187, Fi: EIO}, 57158 {Fz: ts + 37191, Fi: EOVERFLOW}, 57159 {Fz: ts + 37201, Fi: ENOMEM}, 57160 {Fz: ts + 37208, Fi: EAGAIN}, 57161 {Fz: ts + 37215, Fi: ETIMEDOUT}, 57162 {Fz: ts + 37225, Fi: EBUSY}, 57163 {Fz: ts + 37231, Fi: EPERM}, 57164 {Fz: ts + 37237, Fi: EDEADLK}, 57165 {Fz: ts + 37245, Fi: ENOLCK}, 57166 {}, 57167 } 57168 57169 if objc != 4 { 57170 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37252) 57171 return TCL_ERROR 57172 } 57173 57174 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57175 *(*uintptr)(unsafe.Pointer(objv + 2*4)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp) 57176 if rc != TCL_OK { 57177 return rc 57178 } 57179 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57180 *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+4, int32(unsafe.Sizeof(Errno{})), ts+37266, 0, bp+100) 57181 if rc != TCL_OK { 57182 return rc 57183 } 57184 57185 aSyscall[*(*int32)(unsafe.Pointer(bp))].Fcustom_errno = (*Errno)(unsafe.Pointer(bp + 4 + uintptr(*(*int32)(unsafe.Pointer(bp + 100)))*8)).Fi 57186 return TCL_OK 57187 } 57188 57189 type Errno = struct { 57190 Fz uintptr 57191 Fi int32 57192 } 57193 57194 func test_syscall_list(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57195 var zSys uintptr 57196 var pVfs uintptr 57197 var pList uintptr 57198 57199 if objc != 2 { 57200 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57201 return TCL_ERROR 57202 } 57203 57204 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57205 pList = tcl.XTcl_NewObj(tls) 57206 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 57207 for zSys = (*struct { 57208 f func(*libc.TLS, uintptr, uintptr) uintptr 57209 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, uintptr(0)); zSys != uintptr(0); zSys = (*struct { 57210 f func(*libc.TLS, uintptr, uintptr) uintptr 57211 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, zSys) { 57212 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, zSys, -1)) 57213 } 57214 57215 tcl.XTcl_SetObjResult(tls, interp, pList) 57216 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57217 var _objPtr uintptr = pList 57218 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57219 tcl.XTclFreeObj(tls, _objPtr) 57220 } 57221 } 57222 return TCL_OK 57223 } 57224 57225 func test_syscall_defaultvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57226 var pVfs uintptr 57227 57228 if objc != 2 { 57229 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57230 return TCL_ERROR 57231 } 57232 57233 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57234 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 57235 return TCL_OK 57236 } 57237 57238 func ts_getpagesize(tls *libc.TLS) int32 { 57239 return gSyscall.Fpgsz 57240 } 57241 57242 func test_syscall_pagesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57243 bp := tls.Alloc(20) 57244 defer tls.Free(20) 57245 57246 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57247 57248 if objc != 3 { 57249 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37272) 57250 return TCL_ERROR 57251 } 57252 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+16) != 0 { 57253 return TCL_ERROR 57254 } 57255 57256 if *(*int32)(unsafe.Pointer(bp + 16)) < 0 { 57257 if gSyscall.Forig_getpagesize != 0 { 57258 (*struct { 57259 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57260 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, ts+37277, gSyscall.Forig_getpagesize) 57261 } 57262 } else { 57263 if *(*int32)(unsafe.Pointer(bp + 16)) < 512 || *(*int32)(unsafe.Pointer(bp + 16))&(*(*int32)(unsafe.Pointer(bp + 16))-1) != 0 { 57264 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37289, 0)) 57265 return TCL_ERROR 57266 } 57267 gSyscall.Forig_getpagesize = (*struct { 57268 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57269 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, ts+37277) 57270 gSyscall.Fpgsz = *(*int32)(unsafe.Pointer(bp + 16)) 57271 (*struct { 57272 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57273 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, 57274 pVfs, ts+37277, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{ts_getpagesize}))) 57275 } 57276 57277 return TCL_OK 57278 } 57279 57280 func test_syscall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57281 bp := tls.Alloc(100) 57282 defer tls.Free(100) 57283 57284 *(*[10]SyscallCmd)(unsafe.Pointer(bp + 16)) = [10]SyscallCmd{ 57285 {FzName: ts + 37307, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57286 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57287 }{test_syscall_fault}))}, 57288 {FzName: ts + 37313, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57289 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57290 }{test_syscall_install}))}, 57291 {FzName: ts + 37321, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57292 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57293 }{test_syscall_uninstall}))}, 57294 {FzName: ts + 7933, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57295 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57296 }{test_syscall_reset}))}, 57297 {FzName: ts + 37266, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57298 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57299 }{test_syscall_errno}))}, 57300 {FzName: ts + 13516, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57301 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57302 }{test_syscall_exists}))}, 57303 {FzName: ts + 37331, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57304 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57305 }{test_syscall_list}))}, 57306 {FzName: ts + 37336, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57307 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57308 }{test_syscall_defaultvfs}))}, 57309 {FzName: ts + 37347, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57310 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57311 }{test_syscall_pagesize}))}, 57312 {}, 57313 } 57314 57315 var rc int32 57316 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57317 57318 if objc < 2 { 57319 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 57320 return TCL_ERROR 57321 } 57322 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion < 3 || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall == uintptr(0) { 57323 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37356, 0)) 57324 rc = TCL_ERROR 57325 } else { 57326 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57327 *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+16, int32(unsafe.Sizeof(SyscallCmd{})), ts+2014, 0, bp+96) 57328 } 57329 if rc != TCL_OK { 57330 return rc 57331 } 57332 return (*struct { 57333 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57334 })(unsafe.Pointer(&struct{ uintptr }{(*SyscallCmd)(unsafe.Pointer(bp + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 96)))*8)).FxCmd})).f(tls, clientData, interp, objc, objv) 57335 } 57336 57337 type SyscallCmd = struct { 57338 FzName uintptr 57339 FxCmd uintptr 57340 } 57341 57342 func SqlitetestSyscall_Init(tls *libc.TLS, interp uintptr) int32 { 57343 bp := tls.Alloc(8) 57344 defer tls.Free(8) 57345 57346 *(*[1]SyscallCmd)(unsafe.Pointer(bp)) = [1]SyscallCmd{ 57347 {FzName: ts + 37392, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57348 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57349 }{test_syscall}))}, 57350 } 57351 var i int32 57352 57353 for i = 0; uint32(i) < uint32(unsafe.Sizeof([1]SyscallCmd{}))/uint32(unsafe.Sizeof(SyscallCmd{})); i++ { 57354 tcl.XTcl_CreateObjCommand(tls, interp, (*SyscallCmd)(unsafe.Pointer(bp+uintptr(i)*8)).FzName, (*SyscallCmd)(unsafe.Pointer(bp+uintptr(i)*8)).FxCmd, uintptr(0), uintptr(0)) 57355 } 57356 return TCL_OK 57357 } 57358 57359 func sqlite3TestInit(tls *libc.TLS, interp uintptr) uintptr { 57360 bp := tls.Alloc(48) 57361 defer tls.Free(48) 57362 57363 { 57364 libc.Xgetrlimit(tls, RLIMIT_CORE, bp) 57365 (*rlimit)(unsafe.Pointer(bp)).Frlim_cur = (*rlimit)(unsafe.Pointer(bp)).Frlim_max 57366 libc.Xsetrlimit(tls, RLIMIT_CORE, bp) 57367 57368 } 57369 57370 if tcl.XTcl_GetCommandInfo(tls, interp, ts+14267, bp+16) == 0 { 57371 Sqlite3_Init(tls, interp) 57372 } 57373 Md5_Init(tls, interp) 57374 Sqliteconfig_Init(tls, interp) 57375 Sqlitetest1_Init(tls, interp) 57376 Sqlitetest2_Init(tls, interp) 57377 Sqlitetest3_Init(tls, interp) 57378 Sqlitetest4_Init(tls, interp) 57379 Sqlitetest5_Init(tls, interp) 57380 Sqlitetest6_Init(tls, interp) 57381 Sqlitetest7_Init(tls, interp) 57382 Sqlitetest8_Init(tls, interp) 57383 Sqlitetest9_Init(tls, interp) 57384 Sqlitetestasync_Init(tls, interp) 57385 Sqlitetest_autoext_Init(tls, interp) 57386 Sqlitetest_blob_Init(tls, interp) 57387 Sqlitetest_demovfs_Init(tls, interp) 57388 Sqlitetest_func_Init(tls, interp) 57389 Sqlitetest_hexio_Init(tls, interp) 57390 Sqlitetest_init_Init(tls, interp) 57391 Sqlitetest_malloc_Init(tls, interp) 57392 Sqlitetest_mutex_Init(tls, interp) 57393 Sqlitetestschema_Init(tls, interp) 57394 Sqlitetesttclvar_Init(tls, interp) 57395 Sqlitetestfs_Init(tls, interp) 57396 SqlitetestThread_Init(tls, interp) 57397 SqlitetestOnefile_Init(tls) 57398 SqlitetestOsinst_Init(tls, interp) 57399 Sqlitetestbackup_Init(tls, interp) 57400 Sqlitetestintarray_Init(tls, interp) 57401 Sqlitetestvfs_Init(tls, interp) 57402 Sqlitetestrtree_Init(tls, interp) 57403 Sqlitetestrtreedoc_Init(tls, interp) 57404 Sqlitequota_Init(tls, interp) 57405 Sqlitemultiplex_Init(tls, interp) 57406 SqliteSuperlock_Init(tls, interp) 57407 SqlitetestSyscall_Init(tls, interp) 57408 TestSession_Init(tls, interp) 57409 Fts5tcl_Init(tls, interp) 57410 SqliteRbu_Init(tls, interp) 57411 Sqlitetesttcl_Init(tls, interp) 57412 57413 TestExpert_Init(tls, interp) 57414 Sqlitetest_window_Init(tls, interp) 57415 Sqlitetestvdbecov_Init(tls, interp) 57416 57417 tcl.XTcl_CreateObjCommand(tls, 57418 interp, ts+37405, *(*uintptr)(unsafe.Pointer(&struct { 57419 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57420 }{load_testfixture_extensions})), uintptr(0), uintptr(0)) 57421 return uintptr(0) 57422 } 57423 57424 func load_testfixture_extensions(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57425 var slave uintptr 57426 if objc != 2 { 57427 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+37433) 57428 return TCL_ERROR 57429 } 57430 57431 slave = tcl.XTcl_GetSlave(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 57432 if !(slave != 0) { 57433 return TCL_ERROR 57434 } 57435 57436 sqlite3TestInit(tls, slave) 57437 return TCL_OK 57438 } 57439 57440 type tclvar_vtab1 = struct { 57441 Fbase sqlite3_vtab 57442 Finterp uintptr 57443 } 57444 57445 type tclvar_vtab = tclvar_vtab1 57446 type tclvar_cursor1 = struct { 57447 Fbase sqlite3_vtab_cursor 57448 FpList1 uintptr 57449 FpList2 uintptr 57450 Fi1 int32 57451 Fi2 int32 57452 } 57453 57454 type tclvar_cursor = tclvar_cursor1 57455 57456 func tclvarConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 57457 var pVtab uintptr 57458 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_vtab{}))) 57459 if pVtab == uintptr(0) { 57460 return SQLITE_NOMEM 57461 } 57462 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 57463 (*tclvar_vtab)(unsafe.Pointer(pVtab)).Finterp = pAux 57464 sqlite3.Xsqlite3_declare_vtab(tls, db, uintptr(unsafe.Pointer(&zSchema))) 57465 return SQLITE_OK 57466 } 57467 57468 var zSchema = *(*[100]int8)(unsafe.Pointer(ts + 37439)) 57469 57470 func tclvarDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 57471 sqlite3.Xsqlite3_free(tls, pVtab) 57472 return SQLITE_OK 57473 } 57474 57475 func tclvarOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 57476 var pCur uintptr 57477 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_cursor{}))) 57478 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 57479 return SQLITE_OK 57480 } 57481 57482 func tclvarClose(tls *libc.TLS, cur uintptr) int32 { 57483 var pCur uintptr = cur 57484 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 57485 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57486 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 57487 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57488 tcl.XTclFreeObj(tls, _objPtr) 57489 } 57490 } 57491 } 57492 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57493 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57494 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57495 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57496 tcl.XTclFreeObj(tls, _objPtr) 57497 } 57498 } 57499 } 57500 sqlite3.Xsqlite3_free(tls, pCur) 57501 return SQLITE_OK 57502 } 57503 57504 func next2(tls *libc.TLS, interp uintptr, pCur uintptr, pObj uintptr) int32 { 57505 bp := tls.Alloc(4) 57506 defer tls.Free(4) 57507 57508 var p uintptr 57509 57510 if pObj != 0 { 57511 if !(int32((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) != 0) { 57512 p = tcl.XTcl_NewStringObj(tls, ts+37539, -1) 57513 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 57514 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, pObj) 57515 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 57516 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57517 var _objPtr uintptr = p 57518 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57519 tcl.XTclFreeObj(tls, _objPtr) 57520 } 57521 } 57522 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = tcl.XTcl_GetObjResult(tls, interp) 57523 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount++ 57524 57525 } else { 57526 *(*int32)(unsafe.Pointer(bp)) = 0 57527 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2++ 57528 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, bp) 57529 if (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 >= *(*int32)(unsafe.Pointer(bp)) { 57530 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57531 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57532 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57533 tcl.XTclFreeObj(tls, _objPtr) 57534 } 57535 } 57536 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 57537 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 57538 return 0 57539 } 57540 } 57541 } 57542 57543 return 1 57544 } 57545 57546 func tclvarNext(tls *libc.TLS, cur uintptr) int32 { 57547 bp := tls.Alloc(8) 57548 defer tls.Free(8) 57549 57550 *(*int32)(unsafe.Pointer(bp)) = 0 57551 var ok int32 = 0 57552 57553 var pCur uintptr = cur 57554 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 57555 57556 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, bp) 57557 for !(ok != 0) && (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 < *(*int32)(unsafe.Pointer(bp)) { 57558 tcl.XTcl_ListObjIndex(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+4) 57559 ok = next2(tls, interp, pCur, *(*uintptr)(unsafe.Pointer(bp + 4))) 57560 if !(ok != 0) { 57561 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1++ 57562 } 57563 } 57564 57565 return 0 57566 } 57567 57568 func tclvarFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 57569 var pCur uintptr = pVtabCursor 57570 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).Finterp 57571 var p uintptr = tcl.XTcl_NewStringObj(tls, ts+37551, -1) 57572 57573 var zEq uintptr = ts + 584 57574 var zMatch uintptr = ts + 584 57575 var zGlob uintptr = ts + 584 57576 var zRegexp uintptr = ts + 584 57577 var zLike uintptr = ts + 584 57578 var i int32 57579 57580 for i = 0; *(*int8)(unsafe.Pointer(idxStr + uintptr(i))) != 0; i++ { 57581 switch int32(*(*int8)(unsafe.Pointer(idxStr + uintptr(i)))) { 57582 case 'e': 57583 zEq = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 57584 break 57585 case 'm': 57586 zMatch = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 57587 break 57588 case 'g': 57589 zGlob = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 57590 break 57591 case 'r': 57592 zRegexp = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 57593 break 57594 case 'l': 57595 zLike = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))) 57596 break 57597 default: 57598 } 57599 } 57600 57601 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 57602 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zEq, -1)) 57603 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zMatch, -1)) 57604 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zGlob, -1)) 57605 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zRegexp, -1)) 57606 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zLike, -1)) 57607 57608 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 57609 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 57610 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57611 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 57612 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57613 tcl.XTclFreeObj(tls, _objPtr) 57614 } 57615 } 57616 } 57617 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57618 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57619 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57620 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57621 tcl.XTclFreeObj(tls, _objPtr) 57622 } 57623 } 57624 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 57625 } 57626 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 = 0 57627 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 57628 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 = tcl.XTcl_GetObjResult(tls, interp) 57629 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount++ 57630 57631 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 57632 var _objPtr uintptr = p 57633 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57634 tcl.XTclFreeObj(tls, _objPtr) 57635 } 57636 } 57637 return tclvarNext(tls, pVtabCursor) 57638 } 57639 57640 func tclvarColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 57641 bp := tls.Alloc(24) 57642 defer tls.Free(24) 57643 57644 var z1 uintptr 57645 var z2 uintptr = ts + 584 57646 var pCur uintptr = cur 57647 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 57648 57649 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+16) 57650 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2, bp+20) 57651 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 57652 if *(*uintptr)(unsafe.Pointer(bp + 20)) != 0 { 57653 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 20))) 57654 } 57655 switch i { 57656 case 0: 57657 { 57658 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 57659 break 57660 57661 } 57662 case 1: 57663 { 57664 sqlite3.Xsqlite3_result_text(tls, ctx, z2, -1, libc.UintptrFromInt32(-1)) 57665 break 57666 57667 } 57668 case 2: 57669 { 57670 var pVal uintptr = tcl.XTcl_GetVar2Ex(tls, interp, z1, func() uintptr { 57671 if *(*int8)(unsafe.Pointer(z2)) != 0 { 57672 return z2 57673 } 57674 return uintptr(0) 57675 }(), TCL_GLOBAL_ONLY) 57676 sqlite3.Xsqlite3_result_text(tls, ctx, tcl.XTcl_GetString(tls, pVal), -1, libc.UintptrFromInt32(-1)) 57677 break 57678 57679 } 57680 case 3: 57681 { 57682 var z3 uintptr 57683 if *(*uintptr)(unsafe.Pointer(bp + 20)) != 0 { 57684 z3 = sqlite3.Xsqlite3_mprintf(tls, ts+37569, libc.VaList(bp, z1, z2)) 57685 sqlite3.Xsqlite3_result_text(tls, ctx, z3, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 57686 } else { 57687 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 57688 } 57689 break 57690 57691 } 57692 } 57693 return SQLITE_OK 57694 } 57695 57696 func tclvarRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 57697 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 57698 return SQLITE_OK 57699 } 57700 57701 func tclvarEof(tls *libc.TLS, cur uintptr) int32 { 57702 var pCur uintptr = cur 57703 return func() int32 { 57704 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57705 return 0 57706 } 57707 return 1 57708 }() 57709 } 57710 57711 func tclvarAddToIdxstr(tls *libc.TLS, zStr uintptr, x int8) int32 { 57712 var i int32 57713 for i = 0; *(*int8)(unsafe.Pointer(zStr + uintptr(i))) != 0; i++ { 57714 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) == int32(x) { 57715 return 1 57716 } 57717 } 57718 *(*int8)(unsafe.Pointer(zStr + uintptr(i))) = x 57719 *(*int8)(unsafe.Pointer(zStr + uintptr(i+1))) = int8(0) 57720 return 0 57721 } 57722 57723 func tclvarSetOmit(tls *libc.TLS, interp uintptr) int32 { 57724 bp := tls.Alloc(4) 57725 defer tls.Free(4) 57726 57727 var rc int32 57728 *(*int32)(unsafe.Pointer(bp)) = 0 57729 var pRes uintptr 57730 rc = tcl.XTcl_Eval(tls, interp, 57731 ts+37576) 57732 if rc == TCL_OK { 57733 pRes = tcl.XTcl_GetObjResult(tls, interp) 57734 rc = tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), pRes, bp) 57735 } 57736 return libc.Bool32(rc == TCL_OK && *(*int32)(unsafe.Pointer(bp)) != 0) 57737 } 57738 57739 func tclvarBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 57740 var pTab uintptr = tab 57741 var ii int32 57742 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, 32) 57743 var iStr int32 = 0 57744 57745 if zStr == uintptr(0) { 57746 return SQLITE_NOMEM 57747 } 57748 *(*int8)(unsafe.Pointer(zStr)) = int8(0) 57749 57750 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 57751 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 57752 var pUsage uintptr 57753 57754 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 57755 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 { 57756 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 57757 if 0 == tclvarAddToIdxstr(tls, zStr, int8('e')) { 57758 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57759 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 57760 } 57761 } 57762 57763 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 57764 if 0 == tclvarAddToIdxstr(tls, zStr, int8('m')) { 57765 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57766 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 57767 } 57768 } 57769 57770 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_GLOB && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57771 if 0 == tclvarAddToIdxstr(tls, zStr, int8('g')) { 57772 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57773 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57774 } 57775 } 57776 57777 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_REGEXP && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57778 if 0 == tclvarAddToIdxstr(tls, zStr, int8('r')) { 57779 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57780 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57781 } 57782 } 57783 57784 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 57785 if 0 == tclvarAddToIdxstr(tls, zStr, int8('l')) { 57786 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 57787 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 57788 } 57789 } 57790 } 57791 } 57792 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = zStr 57793 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 57794 57795 return SQLITE_OK 57796 } 57797 57798 func tclvarUpdate(tls *libc.TLS, tab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 57799 var pTab uintptr = tab 57800 if argc == 1 { 57801 var zVar uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 57802 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zVar, uintptr(0), TCL_GLOBAL_ONLY) 57803 return SQLITE_OK 57804 } 57805 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 57806 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4))) 57807 var zName uintptr 57808 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 5*4))) != SQLITE_TEXT { 57809 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37637, 0) 57810 return SQLITE_ERROR 57811 } 57812 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*4))) 57813 if zValue != 0 { 57814 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 57815 } else { 57816 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), TCL_GLOBAL_ONLY) 57817 } 57818 return SQLITE_OK 57819 } 57820 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_TEXT && 57821 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) == SQLITE_TEXT { 57822 var zOldName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 57823 var zNewName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4))) 57824 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*4))) 57825 57826 if libc.Xstrcmp(tls, zOldName, zNewName) != 0 || zValue == uintptr(0) { 57827 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zOldName, uintptr(0), TCL_GLOBAL_ONLY) 57828 } 57829 if zValue != uintptr(0) { 57830 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zNewName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 57831 } 57832 return SQLITE_OK 57833 } 57834 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37672, 0) 57835 return SQLITE_ERROR 57836 } 57837 57838 var tclvarModule = sqlite3_module{ 57839 FxCreate: 0, 57840 FxConnect: 0, 57841 FxBestIndex: 0, 57842 FxDisconnect: 0, 57843 FxDestroy: 0, 57844 FxOpen: 0, 57845 FxClose: 0, 57846 FxFilter: 0, 57847 FxNext: 0, 57848 FxEof: 0, 57849 FxColumn: 0, 57850 FxRowid: 0, 57851 FxUpdate: 0, 57852 } 57853 57854 func register_tclvar_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57855 bp := tls.Alloc(4) 57856 defer tls.Free(4) 57857 57858 var rc int32 = TCL_OK 57859 57860 if objc != 2 { 57861 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 57862 return TCL_ERROR 57863 } 57864 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 57865 return TCL_ERROR 57866 } 57867 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+29859, uintptr(unsafe.Pointer(&tclvarModule)), interp) 57868 rc = tcl.XTcl_Eval(tls, interp, 57869 ts+37703) 57870 return rc 57871 } 57872 57873 func Sqlitetesttclvar_Init(tls *libc.TLS, interp uintptr) int32 { 57874 var i int32 57875 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd13))/uint32(unsafe.Sizeof(struct { 57876 FzName uintptr 57877 FxProc uintptr 57878 FclientData uintptr 57879 }{})); i++ { 57880 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd13[i].FzName, 57881 aObjCmd13[i].FxProc, aObjCmd13[i].FclientData, uintptr(0)) 57882 } 57883 return TCL_OK 57884 } 57885 57886 var aObjCmd13 = [1]struct { 57887 FzName uintptr 57888 FxProc uintptr 57889 FclientData uintptr 57890 }{ 57891 {FzName: ts + 38239, FxProc: 0}, 57892 } 57893 57894 type SqlThread1 = struct { 57895 Fparent Tcl_ThreadId 57896 Finterp uintptr 57897 FzScript uintptr 57898 FzVarname uintptr 57899 } 57900 57901 type SqlThread = SqlThread1 57902 57903 type EvalEvent1 = struct { 57904 Fbase Tcl_Event 57905 FzScript uintptr 57906 Finterp uintptr 57907 } 57908 57909 type EvalEvent = EvalEvent1 57910 57911 func tclScriptEvent(tls *libc.TLS, evPtr uintptr, flags int32) int32 { 57912 var rc int32 57913 var p uintptr = evPtr 57914 rc = tcl.XTcl_Eval(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp, (*EvalEvent)(unsafe.Pointer(p)).FzScript) 57915 if rc != TCL_OK { 57916 tcl.XTcl_BackgroundError(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp) 57917 } 57918 _ = flags 57919 return 1 57920 } 57921 57922 func postToParent(tls *libc.TLS, p uintptr, pScript uintptr) { 57923 bp := tls.Alloc(4) 57924 defer tls.Free(4) 57925 57926 var pEvent uintptr 57927 var zMsg uintptr 57928 57929 zMsg = tcl.XTcl_GetStringFromObj(tls, pScript, bp) 57930 pEvent = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(EvalEvent{}))+uint32(*(*int32)(unsafe.Pointer(bp)))+uint32(1)) 57931 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 57932 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 57933 f func(*libc.TLS, uintptr, int32) int32 57934 }{tclScriptEvent})) 57935 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*16 57936 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint32(*(*int32)(unsafe.Pointer(bp))+1)) 57937 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 57938 57939 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 57940 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 57941 } 57942 57943 func tclScriptThread(tls *libc.TLS, pSqlThread ClientData) { 57944 var interp uintptr 57945 var pRes uintptr 57946 var pList uintptr 57947 var rc int32 57948 var p uintptr = pSqlThread 57949 57950 interp = tcl.XTcl_CreateInterp(tls) 57951 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 57952 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57953 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 57954 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 57955 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57956 }{sqlthread_proc})), pSqlThread, uintptr(0)) 57957 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 57958 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57959 }{blocking_step_proc})), uintptr(0), uintptr(0)) 57960 tcl.XTcl_CreateObjCommand(tls, interp, 57961 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 57962 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57963 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 57964 tcl.XTcl_CreateObjCommand(tls, interp, 57965 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 57966 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57967 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 57968 Sqlitetest1_Init(tls, interp) 57969 Sqlitetest_mutex_Init(tls, interp) 57970 Sqlite3_Init(tls, interp) 57971 57972 rc = tcl.XTcl_Eval(tls, interp, (*SqlThread)(unsafe.Pointer(p)).FzScript) 57973 pRes = tcl.XTcl_GetObjResult(tls, interp) 57974 pList = tcl.XTcl_NewObj(tls) 57975 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 57976 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 57977 57978 if rc != TCL_OK { 57979 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+9674, -1)) 57980 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 57981 postToParent(tls, p, pList) 57982 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57983 var _objPtr uintptr = pList 57984 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57985 tcl.XTclFreeObj(tls, _objPtr) 57986 } 57987 } 57988 pList = tcl.XTcl_NewObj(tls) 57989 } 57990 57991 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+38367, -1)) 57992 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, (*SqlThread)(unsafe.Pointer(p)).FzVarname, -1)) 57993 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 57994 postToParent(tls, p, pList) 57995 57996 tcl.XTcl_Free(tls, p) 57997 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57998 var _objPtr uintptr = pList 57999 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58000 tcl.XTclFreeObj(tls, _objPtr) 58001 } 58002 } 58003 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 58004 var _objPtr uintptr = pRes 58005 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58006 tcl.XTclFreeObj(tls, _objPtr) 58007 } 58008 } 58009 tcl.XTcl_DeleteInterp(tls, interp) 58010 for tcl.XTcl_DoOneEvent(tls, libc.CplInt32(int32(1)<<1)|int32(1)<<1) != 0 { 58011 } 58012 tcl.XTcl_ExitThread(tls, 0) 58013 58014 } 58015 58016 func sqlthread_spawn(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58017 bp := tls.Alloc(28) 58018 defer tls.Free(28) 58019 58020 var pNew uintptr 58021 var rc int32 58022 58023 var zVarname uintptr 58024 58025 var zScript uintptr 58026 58027 var nStack int32 = 0 58028 var flags int32 = 0000 58029 58030 _ = clientData 58031 _ = objc 58032 58033 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+16) 58034 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+20) 58035 58036 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqlThread{}))+uint32(*(*int32)(unsafe.Pointer(bp + 16)))+uint32(*(*int32)(unsafe.Pointer(bp + 20)))+uint32(2)) 58037 (*SqlThread)(unsafe.Pointer(pNew)).FzVarname = pNew + 1*16 58038 (*SqlThread)(unsafe.Pointer(pNew)).FzScript = (*SqlThread)(unsafe.Pointer(pNew)).FzVarname + uintptr(*(*int32)(unsafe.Pointer(bp + 16))+1) 58039 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzVarname, zVarname, uint32(*(*int32)(unsafe.Pointer(bp + 16))+1)) 58040 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzScript, zScript, uint32(*(*int32)(unsafe.Pointer(bp + 20))+1)) 58041 (*SqlThread)(unsafe.Pointer(pNew)).Fparent = tcl.XTcl_GetCurrentThread(tls) 58042 (*SqlThread)(unsafe.Pointer(pNew)).Finterp = interp 58043 58044 rc = tcl.XTcl_CreateThread(tls, bp+24, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{tclScriptThread})), pNew, nStack, flags) 58045 if rc != TCL_OK { 58046 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38371, 0)) 58047 tcl.XTcl_Free(tls, pNew) 58048 return TCL_ERROR 58049 } 58050 58051 return TCL_OK 58052 } 58053 58054 func sqlthread_parent(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58055 bp := tls.Alloc(20) 58056 defer tls.Free(20) 58057 58058 var pEvent uintptr 58059 var zMsg uintptr 58060 58061 var p uintptr = clientData 58062 58063 _ = objc 58064 58065 if p == uintptr(0) { 58066 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38399, 0)) 58067 return TCL_ERROR 58068 } 58069 58070 zMsg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+16) 58071 pEvent = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(EvalEvent{}))+uint32(*(*int32)(unsafe.Pointer(bp + 16)))+uint32(1)) 58072 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 58073 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 58074 f func(*libc.TLS, uintptr, int32) int32 58075 }{tclScriptEvent})) 58076 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*16 58077 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint32(*(*int32)(unsafe.Pointer(bp + 16))+1)) 58078 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 58079 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 58080 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 58081 58082 return TCL_OK 58083 } 58084 58085 func xBusy(tls *libc.TLS, pArg uintptr, nBusy int32) int32 { 58086 _ = pArg 58087 _ = nBusy 58088 sqlite3.Xsqlite3_sleep(tls, 50) 58089 return 1 58090 } 58091 58092 func sqlthread_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58093 bp := tls.Alloc(120) 58094 defer tls.Free(120) 58095 58096 var zFilename uintptr 58097 58098 _ = clientData 58099 _ = objc 58100 58101 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 58102 sqlite3.Xsqlite3_open(tls, zFilename, bp+16) 58103 Md5_Register(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), uintptr(0), uintptr(0)) 58104 sqlite3.Xsqlite3_busy_handler(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(&struct { 58105 f func(*libc.TLS, uintptr, int32) int32 58106 }{xBusy})), uintptr(0)) 58107 58108 if sqlite3TestMakePointerStr(tls, interp, bp+20, *(*uintptr)(unsafe.Pointer(bp + 16))) != 0 { 58109 return TCL_ERROR 58110 } 58111 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+20, 0)) 58112 58113 return TCL_OK 58114 } 58115 58116 func sqlthread_id(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58117 var id Tcl_ThreadId = tcl.XTcl_GetCurrentThread(tls) 58118 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(id))) 58119 _ = clientData 58120 _ = objc 58121 _ = objv 58122 return TCL_OK 58123 } 58124 58125 func sqlthread_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58126 bp := tls.Alloc(84) 58127 defer tls.Free(84) 58128 58129 *(*[5]struct { 58130 FzName uintptr 58131 FxProc uintptr 58132 FnArg int32 58133 FzUsage uintptr 58134 })(unsafe.Pointer(bp)) = [5]struct { 58135 FzName uintptr 58136 FxProc uintptr 58137 FnArg int32 58138 FzUsage uintptr 58139 }{ 58140 {FzName: ts + 38416, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58141 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58142 }{sqlthread_parent})), FnArg: 1, FzUsage: ts + 10187}, 58143 {FzName: ts + 38423, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58144 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58145 }{sqlthread_spawn})), FnArg: 2, FzUsage: ts + 38429}, 58146 {FzName: ts + 37033, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58147 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58148 }{sqlthread_open})), FnArg: 1, FzUsage: ts + 38444}, 58149 {FzName: ts + 38451, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58150 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58151 }{sqlthread_id})), FzUsage: ts + 584}, 58152 {}, 58153 } 58154 var pSub uintptr 58155 var rc int32 58156 58157 if objc < 2 { 58158 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 58159 return TCL_ERROR 58160 } 58161 58162 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 58163 interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp, int32(unsafe.Sizeof(struct { 58164 FzName uintptr 58165 FxProc uintptr 58166 FnArg int32 58167 FzUsage uintptr 58168 }{})), ts+2014, 0, bp+80) 58169 if rc != TCL_OK { 58170 return rc 58171 } 58172 pSub = bp + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*16 58173 58174 if objc < (*struct { 58175 FzName uintptr 58176 FxProc uintptr 58177 FnArg int32 58178 FzUsage uintptr 58179 })(unsafe.Pointer(pSub)).FnArg+2 { 58180 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*struct { 58181 FzName uintptr 58182 FxProc uintptr 58183 FnArg int32 58184 FzUsage uintptr 58185 })(unsafe.Pointer(pSub)).FzUsage) 58186 return TCL_ERROR 58187 } 58188 58189 return (*struct { 58190 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58191 })(unsafe.Pointer(&struct{ uintptr }{(*struct { 58192 FzName uintptr 58193 FxProc uintptr 58194 FnArg int32 58195 FzUsage uintptr 58196 })(unsafe.Pointer(pSub)).FxProc})).f(tls, clientData, interp, objc, objv) 58197 } 58198 58199 func clock_seconds_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58200 bp := tls.Alloc(8) 58201 defer tls.Free(8) 58202 58203 tcl.XTcl_GetTime(tls, bp) 58204 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*Tcl_Time)(unsafe.Pointer(bp)).Fsec)) 58205 _ = clientData 58206 _ = objc 58207 _ = objv 58208 return TCL_OK 58209 } 58210 58211 type UnlockNotification1 = struct { 58212 Ffired int32 58213 Fcond pthread_cond_t 58214 Fmutex pthread_mutex_t 58215 } 58216 58217 type UnlockNotification = UnlockNotification1 58218 58219 func unlock_notify_cb(tls *libc.TLS, apArg uintptr, nArg int32) { 58220 var i int32 58221 for i = 0; i < nArg; i++ { 58222 var p uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*4)) 58223 libc.Xpthread_mutex_lock(tls, p+52) 58224 (*UnlockNotification)(unsafe.Pointer(p)).Ffired = 1 58225 libc.Xpthread_cond_signal(tls, p+4) 58226 libc.Xpthread_mutex_unlock(tls, p+52) 58227 } 58228 } 58229 58230 func wait_for_unlock_notify(tls *libc.TLS, db uintptr) int32 { 58231 bp := tls.Alloc(76) 58232 defer tls.Free(76) 58233 58234 var rc int32 58235 58236 (*UnlockNotification)(unsafe.Pointer(bp)).Ffired = 0 58237 libc.Xpthread_mutex_init(tls, bp+52, uintptr(0)) 58238 libc.Xpthread_cond_init(tls, bp+4, uintptr(0)) 58239 58240 rc = sqlite3.Xsqlite3_unlock_notify(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 58241 f func(*libc.TLS, uintptr, int32) 58242 }{unlock_notify_cb})), bp) 58243 58244 if rc == SQLITE_OK { 58245 libc.Xpthread_mutex_lock(tls, bp+52) 58246 if !((*UnlockNotification)(unsafe.Pointer(bp)).Ffired != 0) { 58247 libc.Xpthread_cond_wait(tls, bp+4, bp+52) 58248 } 58249 libc.Xpthread_mutex_unlock(tls, bp+52) 58250 } 58251 58252 libc.Xpthread_cond_destroy(tls, bp+4) 58253 libc.Xpthread_mutex_destroy(tls, bp+52) 58254 58255 return rc 58256 } 58257 58258 func sqlite3_blocking_step(tls *libc.TLS, pStmt uintptr) int32 { 58259 var rc int32 58260 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt)) { 58261 rc = wait_for_unlock_notify(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt)) 58262 if rc != SQLITE_OK { 58263 break 58264 } 58265 sqlite3.Xsqlite3_reset(tls, pStmt) 58266 } 58267 return rc 58268 } 58269 58270 func sqlite3_blocking_prepare_v2(tls *libc.TLS, db uintptr, zSql uintptr, nSql int32, ppStmt uintptr, pz uintptr) int32 { 58271 var rc int32 58272 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, nSql, ppStmt, pz)) { 58273 rc = wait_for_unlock_notify(tls, db) 58274 if rc != SQLITE_OK { 58275 break 58276 } 58277 } 58278 return rc 58279 } 58280 58281 func blocking_step_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58282 var pStmt uintptr 58283 var rc int32 58284 58285 if objc != 2 { 58286 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 58287 return TCL_ERROR 58288 } 58289 58290 pStmt = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4)))) 58291 rc = sqlite3_blocking_step(tls, pStmt) 58292 58293 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 58294 return TCL_OK 58295 } 58296 58297 func blocking_prepare_v2_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58298 bp := tls.Alloc(146) 58299 defer tls.Free(146) 58300 58301 var zSql uintptr 58302 58303 *(*uintptr)(unsafe.Pointer(bp + 92)) = uintptr(0) 58304 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 58305 58306 var rc int32 58307 var isBlocking int32 = libc.BoolInt32(!(clientData == uintptr(0))) 58308 58309 if objc != 5 && objc != 4 { 58310 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 58311 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 58312 return TCL_ERROR 58313 } 58314 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+80) != 0 { 58315 return TCL_ERROR 58316 } 58317 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 58318 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+84) != 0 { 58319 return TCL_ERROR 58320 } 58321 58322 if isBlocking != 0 { 58323 rc = sqlite3_blocking_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 84)), bp+88, bp+92) 58324 } else { 58325 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 84)), bp+88, bp+92) 58326 } 58327 58328 if *(*uintptr)(unsafe.Pointer(bp + 92)) != 0 && objc >= 5 { 58329 if *(*int32)(unsafe.Pointer(bp + 84)) >= 0 { 58330 *(*int32)(unsafe.Pointer(bp + 84)) = *(*int32)(unsafe.Pointer(bp + 84)) - (int32(*(*uintptr)(unsafe.Pointer(bp + 92)))-int32(zSql))/1 58331 } 58332 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 92)), *(*int32)(unsafe.Pointer(bp + 84))), 0) 58333 } 58334 if rc != SQLITE_OK { 58335 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+96, ts+38454, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc))) 58336 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 58337 return TCL_ERROR 58338 } 58339 58340 if *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 58341 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 88))) != 0 { 58342 return TCL_ERROR 58343 } 58344 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 58345 } 58346 return TCL_OK 58347 } 58348 58349 func SqlitetestThread_Init(tls *libc.TLS, interp uintptr) int32 { 58350 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 58351 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58352 }{sqlthread_proc})), uintptr(0), uintptr(0)) 58353 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 58354 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58355 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 58356 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 58357 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58358 }{blocking_step_proc})), uintptr(0), uintptr(0)) 58359 tcl.XTcl_CreateObjCommand(tls, interp, 58360 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 58361 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58362 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 58363 tcl.XTcl_CreateObjCommand(tls, interp, 58364 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 58365 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58366 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 58367 return TCL_OK 58368 } 58369 58370 func Sqlitetestvdbecov_Init(tls *libc.TLS, interp uintptr) int32 { 58371 return TCL_OK 58372 } 58373 58374 type Testvfs1 = struct { 58375 FzName uintptr 58376 FpParent uintptr 58377 FpVfs uintptr 58378 Finterp uintptr 58379 FpScript uintptr 58380 FpBuffer uintptr 58381 FisNoshm int32 58382 FisFullshm int32 58383 Fmask int32 58384 Fioerr_err TestFaultInject 58385 Ffull_err TestFaultInject 58386 Fcantopen_err TestFaultInject 58387 FiDevchar int32 58388 FiSectorsize int32 58389 } 58390 58391 type Testvfs = Testvfs1 58392 type TestvfsBuffer1 = struct { 58393 FzFile uintptr 58394 Fpgsz int32 58395 FaPage [1024]uintptr 58396 FpFile uintptr 58397 FpNext uintptr 58398 } 58399 58400 type TestvfsBuffer = TestvfsBuffer1 58401 type TestvfsFile1 = struct { 58402 Fbase sqlite3_file 58403 FpFd uintptr 58404 } 58405 58406 type TestvfsFile = TestvfsFile1 58407 type TestvfsFd1 = struct { 58408 FpVfs uintptr 58409 FzFilename uintptr 58410 FpReal uintptr 58411 FpShmId uintptr 58412 FpShm uintptr 58413 Fexcllock u32 58414 Fsharedlock u32 58415 FpNext uintptr 58416 } 58417 58418 type TestvfsFd = TestvfsFd1 58419 58420 type TestFaultInject1 = struct { 58421 FiCnt int32 58422 FeFault int32 58423 FnFail int32 58424 } 58425 58426 type TestFaultInject = TestFaultInject1 58427 58428 var tvfs_io_methods = sqlite3_io_methods{ 58429 FiVersion: 3, 58430 FxClose: 0, 58431 FxRead: 0, 58432 FxWrite: 0, 58433 FxTruncate: 0, 58434 FxSync: 0, 58435 FxFileSize: 0, 58436 FxLock: 0, 58437 FxUnlock: 0, 58438 FxCheckReservedLock: 0, 58439 FxFileControl: 0, 58440 FxSectorSize: 0, 58441 FxDeviceCharacteristics: 0, 58442 FxShmMap: 0, 58443 FxShmLock: 0, 58444 FxShmBarrier: 0, 58445 FxShmUnmap: 0, 58446 FxFetch: 0, 58447 FxUnfetch: 0, 58448 } 58449 58450 func tvfsResultCode(tls *libc.TLS, p uintptr, pRc uintptr) int32 { 58451 bp := tls.Alloc(72) 58452 defer tls.Free(72) 58453 58454 *(*[9]errcode)(unsafe.Pointer(bp)) = [9]errcode{ 58455 {FzCode: ts + 2127}, 58456 {FeCode: SQLITE_ERROR, FzCode: ts + 2114}, 58457 {FeCode: SQLITE_IOERR, FzCode: ts + 38458}, 58458 {FeCode: SQLITE_LOCKED, FzCode: ts + 38471}, 58459 {FeCode: SQLITE_BUSY, FzCode: ts + 38485}, 58460 {FeCode: SQLITE_READONLY, FzCode: ts + 38497}, 58461 {FeCode: SQLITE_READONLY | int32(5)<<8, FzCode: ts + 38513}, 58462 {FeCode: SQLITE_NOTFOUND, FzCode: ts + 38538}, 58463 {FeCode: -1, FzCode: ts + 38554}, 58464 } 58465 var z uintptr 58466 var i int32 58467 58468 z = tcl.XTcl_GetStringResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58469 for i = 0; i < int32(uint32(unsafe.Sizeof([9]errcode{}))/uint32(unsafe.Sizeof(errcode{}))); i++ { 58470 if 0 == libc.Xstrcmp(tls, z, (*errcode)(unsafe.Pointer(bp+uintptr(i)*8)).FzCode) { 58471 *(*int32)(unsafe.Pointer(pRc)) = (*errcode)(unsafe.Pointer(bp + uintptr(i)*8)).FeCode 58472 return 1 58473 } 58474 } 58475 58476 return 0 58477 } 58478 58479 type errcode = struct { 58480 FeCode int32 58481 FzCode uintptr 58482 } 58483 58484 func tvfsInjectFault(tls *libc.TLS, p uintptr) int32 { 58485 var ret int32 = 0 58486 if (*TestFaultInject)(unsafe.Pointer(p)).FeFault != 0 { 58487 (*TestFaultInject)(unsafe.Pointer(p)).FiCnt-- 58488 if (*TestFaultInject)(unsafe.Pointer(p)).FiCnt == 0 || (*TestFaultInject)(unsafe.Pointer(p)).FiCnt < 0 && (*TestFaultInject)(unsafe.Pointer(p)).FeFault == FAULT_INJECT_PERSISTENT { 58489 ret = 1 58490 (*TestFaultInject)(unsafe.Pointer(p)).FnFail++ 58491 } 58492 } 58493 return ret 58494 } 58495 58496 func tvfsInjectIoerr(tls *libc.TLS, p uintptr) int32 { 58497 return tvfsInjectFault(tls, p+36) 58498 } 58499 58500 func tvfsInjectFullerr(tls *libc.TLS, p uintptr) int32 { 58501 return tvfsInjectFault(tls, p+48) 58502 } 58503 58504 func tvfsInjectCantopenerr(tls *libc.TLS, p uintptr) int32 { 58505 return tvfsInjectFault(tls, p+60) 58506 } 58507 58508 func tvfsExecTcl(tls *libc.TLS, p uintptr, zMethod uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr, arg4 uintptr) { 58509 var rc int32 58510 var pEval uintptr 58511 58512 pEval = tcl.XTcl_DuplicateObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 58513 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 58514 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zMethod, -1)) 58515 if arg1 != 0 { 58516 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg1) 58517 } 58518 if arg2 != 0 { 58519 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg2) 58520 } 58521 if arg3 != 0 { 58522 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg3) 58523 } 58524 if arg4 != 0 { 58525 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg4) 58526 } 58527 58528 rc = tcl.XTcl_EvalObjEx(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 58529 if rc != TCL_OK { 58530 tcl.XTcl_BackgroundError(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58531 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58532 } 58533 } 58534 58535 func tvfsClose(tls *libc.TLS, pFile uintptr) int32 { 58536 var pTestfile uintptr = pFile 58537 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd 58538 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58539 58540 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CLOSE_MASK != 0 { 58541 tvfsExecTcl(tls, p, ts+35556, 58542 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58543 } 58544 58545 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId != 0 { 58546 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58547 var _objPtr uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId 58548 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58549 tcl.XTclFreeObj(tls, _objPtr) 58550 } 58551 } 58552 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 58553 } 58554 if (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods != 0 { 58555 tcl.XTcl_Free(tls, (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods) 58556 } 58557 sqlite3.Xsqlite3OsClose(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58558 tcl.XTcl_Free(tls, pFd) 58559 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = uintptr(0) 58560 return SQLITE_OK 58561 } 58562 58563 func tvfsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 58564 bp := tls.Alloc(4) 58565 defer tls.Free(4) 58566 58567 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58568 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58569 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58570 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 { 58571 tvfsExecTcl(tls, p, ts+35563, 58572 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58573 tvfsResultCode(tls, p, bp) 58574 } 58575 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58576 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58577 } 58578 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58579 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsRead(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 58580 } 58581 return *(*int32)(unsafe.Pointer(bp)) 58582 } 58583 58584 func tvfsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 58585 bp := tls.Alloc(4) 58586 defer tls.Free(4) 58587 58588 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58589 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58590 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58591 58592 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 { 58593 tvfsExecTcl(tls, p, ts+35569, 58594 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58595 tcl.XTcl_NewWideIntObj(tls, iOfst), tcl.XTcl_NewIntObj(tls, iAmt)) 58596 tvfsResultCode(tls, p, bp) 58597 if *(*int32)(unsafe.Pointer(bp)) < 0 { 58598 return SQLITE_OK 58599 } 58600 } 58601 58602 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 58603 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 58604 } 58605 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58606 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58607 } 58608 58609 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58610 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsWrite(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 58611 } 58612 return *(*int32)(unsafe.Pointer(bp)) 58613 } 58614 58615 func tvfsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 58616 bp := tls.Alloc(4) 58617 defer tls.Free(4) 58618 58619 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58620 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58621 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58622 58623 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_TRUNCATE_MASK != 0 { 58624 tvfsExecTcl(tls, p, ts+35576, 58625 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58626 tvfsResultCode(tls, p, bp) 58627 } 58628 58629 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58630 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsTruncate(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, size) 58631 } 58632 return *(*int32)(unsafe.Pointer(bp)) 58633 } 58634 58635 func tvfsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 58636 bp := tls.Alloc(4) 58637 defer tls.Free(4) 58638 58639 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58640 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58641 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58642 58643 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SYNC_MASK != 0 { 58644 var zFlags uintptr = uintptr(0) 58645 58646 switch flags { 58647 case SQLITE_SYNC_NORMAL: 58648 zFlags = ts + 16397 58649 break 58650 fallthrough 58651 case SQLITE_SYNC_FULL: 58652 zFlags = ts + 18291 58653 break 58654 fallthrough 58655 case SQLITE_SYNC_NORMAL | SQLITE_SYNC_DATAONLY: 58656 zFlags = ts + 38566 58657 break 58658 fallthrough 58659 case SQLITE_SYNC_FULL | SQLITE_SYNC_DATAONLY: 58660 zFlags = ts + 38582 58661 break 58662 fallthrough 58663 default: 58664 } 58665 58666 tvfsExecTcl(tls, p, ts+27843, 58667 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58668 tcl.XTcl_NewStringObj(tls, zFlags, -1), uintptr(0)) 58669 tvfsResultCode(tls, p, bp) 58670 } 58671 58672 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 58673 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 58674 } 58675 58676 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58677 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsSync(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, flags) 58678 } 58679 58680 return *(*int32)(unsafe.Pointer(bp)) 58681 } 58682 58683 func tvfsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 58684 var p uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58685 return sqlite3.Xsqlite3OsFileSize(tls, (*TestvfsFd)(unsafe.Pointer(p)).FpReal, pSize) 58686 } 58687 58688 func tvfsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58689 bp := tls.Alloc(38) 58690 defer tls.Free(38) 58691 58692 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58693 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58694 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_LOCK_MASK != 0 { 58695 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58696 tvfsExecTcl(tls, p, ts+35596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58697 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58698 } 58699 return sqlite3.Xsqlite3OsLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58700 } 58701 58702 func tvfsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58703 bp := tls.Alloc(38) 58704 defer tls.Free(38) 58705 58706 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58707 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58708 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_UNLOCK_MASK != 0 { 58709 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58710 tvfsExecTcl(tls, p, ts+35602, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58711 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58712 } 58713 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58714 return SQLITE_IOERR | int32(8)<<8 58715 } 58716 return sqlite3.Xsqlite3OsUnlock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58717 } 58718 58719 func tvfsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 58720 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58721 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58722 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CKLOCK_MASK != 0 { 58723 tvfsExecTcl(tls, p, ts+38596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58724 uintptr(0), uintptr(0), uintptr(0)) 58725 } 58726 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, pResOut) 58727 } 58728 58729 func tvfsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 58730 bp := tls.Alloc(44) 58731 defer tls.Free(44) 58732 58733 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58734 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58735 if op == SQLITE_FCNTL_PRAGMA { 58736 var argv uintptr = pArg 58737 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), ts+9674) == 0 { 58738 var rc int32 = SQLITE_ERROR 58739 if *(*uintptr)(unsafe.Pointer(argv + 2*4)) != 0 { 58740 var z uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*4)) 58741 var x int32 = libc.Xatoi(tls, z) 58742 if x != 0 { 58743 rc = x 58744 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 58745 z++ 58746 } 58747 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x01 != 0 { 58748 z++ 58749 } 58750 } 58751 if *(*int8)(unsafe.Pointer(z)) != 0 { 58752 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, z)) 58753 } 58754 } 58755 return rc 58756 } 58757 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*4)), ts+4794) == 0 { 58758 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 58759 return SQLITE_OK 58760 } 58761 } 58762 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FCNTL_MASK != 0 { 58763 *(*[3]Fcntl)(unsafe.Pointer(bp + 16)) = [3]Fcntl{ 58764 {FiFnctl: SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, FzFnctl: ts + 38615}, 58765 {FiFnctl: SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, FzFnctl: ts + 38634}, 58766 {FiFnctl: SQLITE_FCNTL_ZIPVFS, FzFnctl: ts + 38654}, 58767 } 58768 var i int32 58769 for i = 0; uint32(i) < uint32(unsafe.Sizeof([3]Fcntl{}))/uint32(unsafe.Sizeof(Fcntl{})); i++ { 58770 if op == (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*8)).FiFnctl { 58771 break 58772 } 58773 } 58774 if uint32(i) < uint32(unsafe.Sizeof([3]Fcntl{}))/uint32(unsafe.Sizeof(Fcntl{})) { 58775 *(*int32)(unsafe.Pointer(bp + 40)) = 0 58776 tvfsExecTcl(tls, p, ts+35624, 58777 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58778 tcl.XTcl_NewStringObj(tls, (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*8)).FzFnctl, -1), 58779 uintptr(0), uintptr(0)) 58780 tvfsResultCode(tls, p, bp+40) 58781 if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { 58782 return func() int32 { 58783 if *(*int32)(unsafe.Pointer(bp + 40)) < 0 { 58784 return SQLITE_OK 58785 } 58786 return *(*int32)(unsafe.Pointer(bp + 40)) 58787 }() 58788 } 58789 } 58790 } 58791 return sqlite3.Xsqlite3OsFileControl(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, op, pArg) 58792 } 58793 58794 type Fcntl = struct { 58795 FiFnctl int32 58796 FzFnctl uintptr 58797 } 58798 58799 func tvfsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 58800 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58801 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58802 if (*Testvfs)(unsafe.Pointer(p)).FiSectorsize >= 0 { 58803 return (*Testvfs)(unsafe.Pointer(p)).FiSectorsize 58804 } 58805 return sqlite3.Xsqlite3OsSectorSize(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58806 } 58807 58808 func tvfsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 58809 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58810 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58811 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar >= 0 { 58812 return (*Testvfs)(unsafe.Pointer(p)).FiDevchar 58813 } 58814 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58815 } 58816 58817 func tvfsOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 58818 bp := tls.Alloc(4) 58819 defer tls.Free(4) 58820 58821 var pTestfile uintptr = pFile 58822 var pFd uintptr 58823 var pId uintptr = uintptr(0) 58824 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58825 58826 pFd = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestvfsFd{}))+uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent)).FszOsFile)) 58827 libc.Xmemset(tls, pFd, 0, uint32(unsafe.Sizeof(TestvfsFd{}))+uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent)).FszOsFile)) 58828 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 58829 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 58830 (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename = zName 58831 (*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs = pVfs 58832 (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal = pFd + 1*32 58833 libc.Xmemset(tls, pTestfile, 0, uint32(unsafe.Sizeof(TestvfsFile{}))) 58834 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = pFd 58835 58836 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58837 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 { 58838 var pArg uintptr = tcl.XTcl_NewObj(tls) 58839 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 58840 if flags&SQLITE_OPEN_MAIN_DB != 0 { 58841 var z uintptr = zName + uintptr(libc.Xstrlen(tls, zName)+size_t(1)) 58842 for *(*int8)(unsafe.Pointer(z)) != 0 { 58843 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 58844 z += uintptr(libc.Xstrlen(tls, z) + size_t(1)) 58845 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 58846 z += uintptr(libc.Xstrlen(tls, z) + size_t(1)) 58847 } 58848 } 58849 tvfsExecTcl(tls, p, ts+27421, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), pArg, uintptr(0), uintptr(0)) 58850 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58851 var _objPtr uintptr = pArg 58852 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58853 tcl.XTclFreeObj(tls, _objPtr) 58854 } 58855 } 58856 if tvfsResultCode(tls, p, bp) != 0 { 58857 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58858 return *(*int32)(unsafe.Pointer(bp)) 58859 } 58860 } else { 58861 pId = tcl.XTcl_GetObjResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58862 } 58863 } 58864 58865 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58866 return SQLITE_IOERR 58867 } 58868 if tvfsInjectCantopenerr(tls, p) != 0 { 58869 return SQLITE_CANTOPEN 58870 } 58871 if tvfsInjectFullerr(tls, p) != 0 { 58872 return SQLITE_FULL 58873 } 58874 58875 if !(pId != 0) { 58876 pId = tcl.XTcl_NewStringObj(tls, ts+38661, -1) 58877 } 58878 (*Tcl_Obj)(unsafe.Pointer(pId)).FrefCount++ 58879 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = pId 58880 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58881 58882 *(*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) 58883 if (*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods != 0 { 58884 var pMethods uintptr 58885 var nByte int32 58886 58887 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 { 58888 nByte = int32(unsafe.Sizeof(sqlite3_io_methods{})) 58889 } else { 58890 nByte = int32(uintptr(0) + 52) 58891 } 58892 58893 pMethods = tcl.XTcl_Alloc(tls, uint32(nByte)) 58894 libc.Xmemcpy(tls, pMethods, uintptr(unsafe.Pointer(&tvfs_io_methods)), uint32(nByte)) 58895 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods)).FiVersion 58896 if (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion > (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion { 58897 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion 58898 } 58899 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 && (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FisNoshm != 0 { 58900 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmUnmap = uintptr(0) 58901 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmLock = uintptr(0) 58902 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmBarrier = uintptr(0) 58903 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmMap = uintptr(0) 58904 } 58905 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = pMethods 58906 } 58907 58908 return *(*int32)(unsafe.Pointer(bp)) 58909 } 58910 58911 func tvfsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 58912 bp := tls.Alloc(4) 58913 defer tls.Free(4) 58914 58915 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58916 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58917 58918 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_DELETE_MASK != 0 { 58919 tvfsExecTcl(tls, p, ts+35661, 58920 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewIntObj(tls, dirSync), uintptr(0), uintptr(0)) 58921 tvfsResultCode(tls, p, bp) 58922 } 58923 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58924 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsDelete(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, dirSync) 58925 } 58926 return *(*int32)(unsafe.Pointer(bp)) 58927 } 58928 58929 func tvfsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 58930 bp := tls.Alloc(4) 58931 defer tls.Free(4) 58932 58933 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58934 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_ACCESS_MASK != 0 { 58935 var zArg uintptr = uintptr(0) 58936 if flags == SQLITE_ACCESS_EXISTS { 58937 zArg = ts + 38666 58938 } 58939 if flags == SQLITE_ACCESS_READWRITE { 58940 zArg = ts + 38687 58941 } 58942 if flags == SQLITE_ACCESS_READ { 58943 zArg = ts + 38711 58944 } 58945 tvfsExecTcl(tls, p, ts+35669, 58946 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewStringObj(tls, zArg, -1), uintptr(0), uintptr(0)) 58947 if tvfsResultCode(tls, p, bp) != 0 { 58948 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58949 return *(*int32)(unsafe.Pointer(bp)) 58950 } 58951 } else { 58952 var interp uintptr = (*Testvfs)(unsafe.Pointer(p)).Finterp 58953 if TCL_OK == tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, interp), pResOut) { 58954 return SQLITE_OK 58955 } 58956 } 58957 } 58958 return sqlite3.Xsqlite3OsAccess(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, flags, pResOut) 58959 } 58960 58961 func tvfsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 58962 bp := tls.Alloc(4) 58963 defer tls.Free(4) 58964 58965 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 58966 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FULLPATHNAME_MASK != 0 { 58967 tvfsExecTcl(tls, p, ts+35677, tcl.XTcl_NewStringObj(tls, zPath, -1), uintptr(0), uintptr(0), uintptr(0)) 58968 if tvfsResultCode(tls, p, bp) != 0 { 58969 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 58970 return *(*int32)(unsafe.Pointer(bp)) 58971 } 58972 } 58973 } 58974 return sqlite3.Xsqlite3OsFullPathname(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, nOut, zOut) 58975 } 58976 58977 func tvfsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 58978 return sqlite3.Xsqlite3OsRandomness(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nByte, zBufOut) 58979 } 58980 58981 func tvfsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 58982 return sqlite3.Xsqlite3OsSleep(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nMicro) 58983 } 58984 58985 func tvfsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 58986 return (*struct { 58987 f func(*libc.TLS, uintptr, uintptr) int32 58988 })(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) 58989 } 58990 58991 func tvfsShmOpen(tls *libc.TLS, pFile uintptr) int32 { 58992 bp := tls.Alloc(4) 58993 defer tls.Free(4) 58994 58995 var p uintptr 58996 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58997 var pBuffer uintptr 58998 var pFd uintptr 58999 59000 pFd = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59001 p = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59002 59003 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59004 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 { 59005 tvfsExecTcl(tls, p, ts+38730, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), uintptr(0), uintptr(0), uintptr(0)) 59006 if tvfsResultCode(tls, p, bp) != 0 { 59007 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59008 return *(*int32)(unsafe.Pointer(bp)) 59009 } 59010 } 59011 } 59012 59013 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59014 return SQLITE_IOERR 59015 } 59016 59017 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 59018 if 0 == libc.Xstrcmp(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile) { 59019 break 59020 } 59021 } 59022 if !(pBuffer != 0) { 59023 var szName int32 = int32(libc.Xstrlen(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 59024 var nByte int32 = int32(uint32(unsafe.Sizeof(TestvfsBuffer{})) + uint32(szName) + uint32(1)) 59025 pBuffer = tcl.XTcl_Alloc(tls, uint32(nByte)) 59026 libc.Xmemset(tls, pBuffer, 0, uint32(nByte)) 59027 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile = pBuffer + 1*4112 59028 libc.Xmemcpy(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, uint32(szName+1)) 59029 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext = (*Testvfs)(unsafe.Pointer(p)).FpBuffer 59030 (*Testvfs)(unsafe.Pointer(p)).FpBuffer = pBuffer 59031 } 59032 59033 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile 59034 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile = pFd 59035 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = pBuffer 59036 return *(*int32)(unsafe.Pointer(bp)) 59037 } 59038 59039 func tvfsAllocPage(tls *libc.TLS, p uintptr, iPage int32, pgsz int32) { 59040 if *(*uintptr)(unsafe.Pointer(p + 8 + uintptr(iPage)*4)) == uintptr(0) { 59041 *(*uintptr)(unsafe.Pointer(p + 8 + uintptr(iPage)*4)) = tcl.XTcl_Alloc(tls, uint32(pgsz)) 59042 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(p + 8 + uintptr(iPage)*4)), 0, uint32(pgsz)) 59043 (*TestvfsBuffer)(unsafe.Pointer(p)).Fpgsz = pgsz 59044 } 59045 } 59046 59047 func tvfsShmMap(tls *libc.TLS, pFile uintptr, iPage int32, pgsz int32, isWrite int32, pp uintptr) int32 { 59048 bp := tls.Alloc(4) 59049 defer tls.Free(4) 59050 59051 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59052 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59053 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59054 59055 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59056 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59057 return (*struct { 59058 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 59059 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iPage, pgsz, isWrite, pp) 59060 } 59061 59062 if uintptr(0) == (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm { 59063 *(*int32)(unsafe.Pointer(bp)) = tvfsShmOpen(tls, pFile) 59064 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59065 return *(*int32)(unsafe.Pointer(bp)) 59066 } 59067 } 59068 59069 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 { 59070 var pArg uintptr = tcl.XTcl_NewObj(tls) 59071 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 59072 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, iPage)) 59073 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, pgsz)) 59074 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, isWrite)) 59075 tvfsExecTcl(tls, p, ts+35754, 59076 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, pArg, uintptr(0)) 59077 tvfsResultCode(tls, p, bp) 59078 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59079 var _objPtr uintptr = pArg 59080 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59081 tcl.XTclFreeObj(tls, _objPtr) 59082 } 59083 } 59084 } 59085 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59086 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 59087 } 59088 59089 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && isWrite != 0 && !(int32(*(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 8 + uintptr(iPage)*4))) != 0) { 59090 tvfsAllocPage(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm, iPage, pgsz) 59091 } 59092 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK || *(*int32)(unsafe.Pointer(bp)) == SQLITE_READONLY { 59093 *(*uintptr)(unsafe.Pointer(pp)) = *(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 8 + uintptr(iPage)*4)) 59094 } 59095 59096 return *(*int32)(unsafe.Pointer(bp)) 59097 } 59098 59099 func tvfsShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 59100 bp := tls.Alloc(100) 59101 defer tls.Free(100) 59102 59103 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 59104 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59105 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59106 var nLock int32 59107 59108 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59109 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59110 return (*struct { 59111 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59112 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 59113 } 59114 59115 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 { 59116 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+16, ts+17826, libc.VaList(bp, ofst, n)) 59117 nLock = int32(libc.Xstrlen(tls, bp+16)) 59118 if flags&SQLITE_SHM_LOCK != 0 { 59119 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38739) 59120 } else { 59121 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38745) 59122 } 59123 nLock = nLock + int32(libc.Xstrlen(tls, bp+16+uintptr(nLock))) 59124 if flags&SQLITE_SHM_SHARED != 0 { 59125 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38753) 59126 } else { 59127 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38761) 59128 } 59129 tvfsExecTcl(tls, p, ts+35733, 59130 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 59131 tcl.XTcl_NewStringObj(tls, bp+16, -1), uintptr(0)) 59132 tvfsResultCode(tls, p, bp+96) 59133 } 59134 59135 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59136 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_IOERR 59137 } 59138 59139 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 59140 var isLock int32 = flags & SQLITE_SHM_LOCK 59141 var isExcl int32 = flags & SQLITE_SHM_EXCLUSIVE 59142 var mask u32 = u32((int32(1)<<n - 1) << ofst) 59143 if isLock != 0 { 59144 var p2 uintptr 59145 for p2 = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FpFile; p2 != 0; p2 = (*TestvfsFd)(unsafe.Pointer(p2)).FpNext { 59146 if p2 == pFd { 59147 continue 59148 } 59149 if (*TestvfsFd)(unsafe.Pointer(p2)).Fexcllock&mask != 0 || isExcl != 0 && (*TestvfsFd)(unsafe.Pointer(p2)).Fsharedlock&mask != 0 { 59150 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_BUSY 59151 break 59152 } 59153 } 59154 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 59155 if isExcl != 0 { 59156 *(*u32)(unsafe.Pointer(pFd + 20)) |= mask 59157 } 59158 if !(isExcl != 0) { 59159 *(*u32)(unsafe.Pointer(pFd + 24)) |= mask 59160 } 59161 } 59162 } else { 59163 if isExcl != 0 { 59164 *(*u32)(unsafe.Pointer(pFd + 20)) &= ^mask 59165 } 59166 if !(isExcl != 0) { 59167 *(*u32)(unsafe.Pointer(pFd + 24)) &= ^mask 59168 } 59169 } 59170 } 59171 59172 return *(*int32)(unsafe.Pointer(bp + 96)) 59173 } 59174 59175 func tvfsShmBarrier(tls *libc.TLS, pFile uintptr) { 59176 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59177 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59178 59179 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMBARRIER_MASK != 0 { 59180 var z uintptr 59181 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm != 0 { 59182 z = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile 59183 } else { 59184 z = ts + 584 59185 } 59186 tvfsExecTcl(tls, p, ts+35742, tcl.XTcl_NewStringObj(tls, z, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59187 } 59188 59189 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59190 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59191 (*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) 59192 return 59193 } 59194 } 59195 59196 func tvfsShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 59197 bp := tls.Alloc(4) 59198 defer tls.Free(4) 59199 59200 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59201 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59202 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59203 var pBuffer uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm 59204 var ppFd uintptr 59205 59206 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59207 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59208 return (*struct { 59209 f func(*libc.TLS, uintptr, int32) int32 59210 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, deleteFlag) 59211 } 59212 59213 if !(pBuffer != 0) { 59214 return SQLITE_OK 59215 } 59216 59217 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMCLOSE_MASK != 0 { 59218 tvfsExecTcl(tls, p, ts+35723, 59219 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59220 tvfsResultCode(tls, p, bp) 59221 } 59222 59223 for ppFd = pBuffer + 4104; *(*uintptr)(unsafe.Pointer(ppFd)) != pFd; ppFd = *(*uintptr)(unsafe.Pointer(ppFd)) + 28 { 59224 } 59225 59226 *(*uintptr)(unsafe.Pointer(ppFd)) = (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext 59227 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = uintptr(0) 59228 59229 if (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile == uintptr(0) { 59230 var i int32 59231 var pp uintptr 59232 for pp = p + 20; *(*uintptr)(unsafe.Pointer(pp)) != pBuffer; pp = *(*uintptr)(unsafe.Pointer(pp)) + 4108 { 59233 } 59234 *(*uintptr)(unsafe.Pointer(pp)) = (*TestvfsBuffer)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNext 59235 for i = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 8 + uintptr(i)*4)) != 0; i++ { 59236 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 8 + uintptr(i)*4))) 59237 } 59238 tcl.XTcl_Free(tls, pBuffer) 59239 } 59240 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 59241 59242 return *(*int32)(unsafe.Pointer(bp)) 59243 } 59244 59245 func tvfsFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 59246 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59247 return sqlite3.Xsqlite3OsFetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, iAmt, pp) 59248 } 59249 59250 func tvfsUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, p uintptr) int32 { 59251 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59252 return sqlite3.Xsqlite3OsUnfetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, p) 59253 } 59254 59255 func testvfs_obj_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59256 bp := tls.Alloc(348) 59257 defer tls.Free(348) 59258 59259 var p uintptr = cd 59260 *(*[10]TestvfsSubcmd)(unsafe.Pointer(bp + 96)) = [10]TestvfsSubcmd{ 59261 {FzName: ts + 38772}, 59262 {FzName: ts + 10138, FeCmd: uint32(1)}, 59263 {FzName: ts + 38776, FeCmd: uint32(2)}, 59264 {FzName: ts + 38783, FeCmd: uint32(3)}, 59265 {FzName: ts + 38789, FeCmd: uint32(7)}, 59266 {FzName: ts + 38797, FeCmd: uint32(8)}, 59267 {FzName: ts + 38809, FeCmd: uint32(4)}, 59268 {FzName: ts + 38816, FeCmd: uint32(5)}, 59269 {FzName: ts + 38824, FeCmd: uint32(6)}, 59270 {}, 59271 } 59272 59273 if objc < 2 { 59274 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 59275 return TCL_ERROR 59276 } 59277 if tcl.XTcl_GetIndexFromObjStruct(tls, 59278 interp, *(*uintptr)(unsafe.Pointer(objv + 1*4)), bp+96, int32(unsafe.Sizeof(TestvfsSubcmd{})), ts+38835, 0, bp+176) != 0 { 59279 return TCL_ERROR 59280 } 59281 tcl.XTcl_ResetResult(tls, interp) 59282 59283 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*8)).FeCmd { 59284 case uint32(0): 59285 { 59286 var pObj uintptr 59287 var rc int32 59288 var pBuffer uintptr 59289 var zName uintptr 59290 if objc != 3 && objc != 4 { 59291 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38846) 59292 return TCL_ERROR 59293 } 59294 zName = tcl.XTcl_Alloc(tls, uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname)) 59295 rc = (*struct { 59296 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59297 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FxFullPathname})).f(tls, 59298 (*Testvfs)(unsafe.Pointer(p)).FpParent, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), 59299 (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname, zName) 59300 if rc != SQLITE_OK { 59301 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38859, 59302 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), 0)) 59303 tcl.XTcl_Free(tls, zName) 59304 return TCL_ERROR 59305 } 59306 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 59307 if 0 == libc.Xstrcmp(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, zName) { 59308 break 59309 } 59310 } 59311 tcl.XTcl_Free(tls, zName) 59312 if !(pBuffer != 0) { 59313 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+38885, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), 0)) 59314 return TCL_ERROR 59315 } 59316 if objc == 4 { 59317 var a uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+180) 59318 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 59319 if pgsz == 0 { 59320 pgsz = 65536 59321 } 59322 for *(*int32)(unsafe.Pointer(bp + 176)) = 0; *(*int32)(unsafe.Pointer(bp + 176))*pgsz < *(*int32)(unsafe.Pointer(bp + 180)); *(*int32)(unsafe.Pointer(bp + 176))++ { 59323 var nByte int32 = pgsz 59324 tvfsAllocPage(tls, pBuffer, *(*int32)(unsafe.Pointer(bp + 176)), pgsz) 59325 if *(*int32)(unsafe.Pointer(bp + 180))-*(*int32)(unsafe.Pointer(bp + 176))*pgsz < pgsz { 59326 nByte = *(*int32)(unsafe.Pointer(bp + 180)) 59327 } 59328 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*4)), a+uintptr(*(*int32)(unsafe.Pointer(bp + 176))*pgsz), uint32(nByte)) 59329 } 59330 } 59331 59332 pObj = tcl.XTcl_NewObj(tls) 59333 for *(*int32)(unsafe.Pointer(bp + 176)) = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*4)) != 0; *(*int32)(unsafe.Pointer(bp + 176))++ { 59334 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 59335 if pgsz == 0 { 59336 pgsz = 65536 59337 } 59338 tcl.XTcl_AppendObjToObj(tls, pObj, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*4)), pgsz)) 59339 } 59340 tcl.XTcl_SetObjResult(tls, interp, pObj) 59341 break 59342 59343 } 59344 59345 case uint32(2): 59346 { 59347 *(*uintptr)(unsafe.Pointer(bp + 188)) = uintptr(0) 59348 *(*int32)(unsafe.Pointer(bp + 184)) = 0 59349 var mask int32 = 0 59350 if objc != 3 { 59351 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+32419) 59352 return TCL_ERROR 59353 } 59354 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+184, bp+188) != 0 { 59355 return TCL_ERROR 59356 } 59357 tcl.XTcl_ResetResult(tls, interp) 59358 for *(*int32)(unsafe.Pointer(bp + 176)) = 0; *(*int32)(unsafe.Pointer(bp + 176)) < *(*int32)(unsafe.Pointer(bp + 184)); *(*int32)(unsafe.Pointer(bp + 176))++ { 59359 var iMethod int32 59360 var zElem uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 188)) + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*4))) 59361 for iMethod = 0; iMethod < int32(uint32(unsafe.Sizeof(vfsmethod))/uint32(unsafe.Sizeof(VfsMethod{}))); iMethod++ { 59362 if libc.Xstrcmp(tls, zElem, vfsmethod[iMethod].FzName) == 0 { 59363 mask = mask | vfsmethod[iMethod].Fmask 59364 break 59365 } 59366 } 59367 if iMethod == int32(uint32(unsafe.Sizeof(vfsmethod))/uint32(unsafe.Sizeof(VfsMethod{}))) { 59368 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+38900, zElem, 0)) 59369 return TCL_ERROR 59370 } 59371 } 59372 (*Testvfs)(unsafe.Pointer(p)).Fmask = mask 59373 break 59374 59375 } 59376 59377 case uint32(4): 59378 { 59379 if objc == 3 { 59380 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59381 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59382 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 59383 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59384 tcl.XTclFreeObj(tls, _objPtr) 59385 } 59386 } 59387 (*Testvfs)(unsafe.Pointer(p)).FpScript = uintptr(0) 59388 } 59389 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+192) 59390 if *(*int32)(unsafe.Pointer(bp + 192)) > 0 { 59391 (*Testvfs)(unsafe.Pointer(p)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 59392 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 59393 } 59394 } else if objc != 2 { 59395 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 59396 return TCL_ERROR 59397 } 59398 59399 tcl.XTcl_ResetResult(tls, interp) 59400 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59401 tcl.XTcl_SetObjResult(tls, interp, (*Testvfs)(unsafe.Pointer(p)).FpScript) 59402 } 59403 59404 break 59405 59406 } 59407 59408 case uint32(8): 59409 fallthrough 59410 case uint32(3): 59411 fallthrough 59412 case uint32(7): 59413 { 59414 var pTest uintptr = uintptr(0) 59415 var iRet int32 59416 59417 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*8)).FeCmd { 59418 case uint32(3): 59419 pTest = p + 36 59420 break 59421 case uint32(7): 59422 pTest = p + 48 59423 break 59424 case uint32(8): 59425 pTest = p + 60 59426 break 59427 default: 59428 } 59429 iRet = (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail 59430 (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail = 0 59431 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = 0 59432 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = 0 59433 59434 if objc == 4 { 59435 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+196) || 59436 TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+200) { 59437 return TCL_ERROR 59438 } 59439 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = func() int32 { 59440 if *(*int32)(unsafe.Pointer(bp + 200)) != 0 { 59441 return FAULT_INJECT_PERSISTENT 59442 } 59443 return FAULT_INJECT_TRANSIENT 59444 }() 59445 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = *(*int32)(unsafe.Pointer(bp + 196)) 59446 } else if objc != 2 { 59447 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38917) 59448 return TCL_ERROR 59449 } 59450 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iRet)) 59451 break 59452 59453 } 59454 59455 case uint32(1): 59456 { 59457 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 59458 break 59459 59460 } 59461 59462 case uint32(5): 59463 { 59464 *(*[16]DeviceFlag)(unsafe.Pointer(bp + 212)) = [16]DeviceFlag{ 59465 {FzName: ts + 38931, FiValue: -1}, 59466 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 59467 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 59468 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 59469 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 59470 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 59471 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 59472 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 59473 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 59474 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 59475 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 59476 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 59477 {FzName: ts + 38939, FiValue: SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN}, 59478 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 59479 {FzName: ts + 38961, FiValue: SQLITE_IOCAP_IMMUTABLE}, 59480 {}, 59481 } 59482 var pRet uintptr 59483 var iFlag int32 59484 59485 if objc > 3 { 59486 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38971) 59487 return TCL_ERROR 59488 } 59489 if objc == 3 { 59490 var j int32 59491 var iNew int32 = 0 59492 *(*uintptr)(unsafe.Pointer(bp + 208)) = uintptr(0) 59493 *(*int32)(unsafe.Pointer(bp + 204)) = 0 59494 59495 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+204, bp+208) != 0 { 59496 return TCL_ERROR 59497 } 59498 59499 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 204)); j++ { 59500 *(*int32)(unsafe.Pointer(bp + 340)) = 0 59501 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 208)) + uintptr(j)*4)), bp+212, 59502 int32(unsafe.Sizeof(DeviceFlag{})), ts+17631, 0, bp+340) != 0 { 59503 return TCL_ERROR 59504 } 59505 if (*DeviceFlag)(unsafe.Pointer(bp+212+uintptr(*(*int32)(unsafe.Pointer(bp + 340)))*8)).FiValue < 0 && *(*int32)(unsafe.Pointer(bp + 204)) > 1 { 59506 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+38983, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))), 0)) 59507 return TCL_ERROR 59508 } 59509 iNew = iNew | (*DeviceFlag)(unsafe.Pointer(bp+212+uintptr(*(*int32)(unsafe.Pointer(bp + 340)))*8)).FiValue 59510 } 59511 59512 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = iNew | 0x10000000 59513 } 59514 59515 pRet = tcl.XTcl_NewObj(tls) 59516 for iFlag = 0; uint32(iFlag) < uint32(unsafe.Sizeof([16]DeviceFlag{}))/uint32(unsafe.Sizeof(DeviceFlag{})); iFlag++ { 59517 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar&(*DeviceFlag)(unsafe.Pointer(bp+212+uintptr(iFlag)*8)).FiValue != 0 { 59518 tcl.XTcl_ListObjAppendElement(tls, 59519 interp, pRet, tcl.XTcl_NewStringObj(tls, (*DeviceFlag)(unsafe.Pointer(bp+212+uintptr(iFlag)*8)).FzName, -1)) 59520 } 59521 } 59522 tcl.XTcl_SetObjResult(tls, interp, pRet) 59523 59524 break 59525 59526 } 59527 59528 case uint32(6): 59529 { 59530 if objc > 3 { 59531 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38995) 59532 return TCL_ERROR 59533 } 59534 if objc == 3 { 59535 *(*int32)(unsafe.Pointer(bp + 344)) = 0 59536 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*4)), bp+344) != 0 { 59537 return TCL_ERROR 59538 } 59539 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = *(*int32)(unsafe.Pointer(bp + 344)) 59540 } 59541 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*Testvfs)(unsafe.Pointer(p)).FiSectorsize)) 59542 break 59543 59544 } 59545 } 59546 59547 return TCL_OK 59548 } 59549 59550 type TestvfsSubcmd = struct { 59551 FzName uintptr 59552 FeCmd uint32 59553 } 59554 59555 type VfsMethod = struct { 59556 FzName uintptr 59557 Fmask int32 59558 } 59559 59560 var vfsmethod = [18]VfsMethod{ 59561 {FzName: ts + 38730, Fmask: TESTVFS_SHMOPEN_MASK}, 59562 {FzName: ts + 35733, Fmask: TESTVFS_SHMLOCK_MASK}, 59563 {FzName: ts + 35742, Fmask: TESTVFS_SHMBARRIER_MASK}, 59564 {FzName: ts + 35723, Fmask: TESTVFS_SHMCLOSE_MASK}, 59565 {FzName: ts + 35754, Fmask: TESTVFS_SHMMAP_MASK}, 59566 {FzName: ts + 27843, Fmask: TESTVFS_SYNC_MASK}, 59567 {FzName: ts + 35661, Fmask: TESTVFS_DELETE_MASK}, 59568 {FzName: ts + 35569, Fmask: TESTVFS_WRITE_MASK}, 59569 {FzName: ts + 35563, Fmask: TESTVFS_READ_MASK}, 59570 {FzName: ts + 35576, Fmask: TESTVFS_TRUNCATE_MASK}, 59571 {FzName: ts + 27421, Fmask: TESTVFS_OPEN_MASK}, 59572 {FzName: ts + 35556, Fmask: TESTVFS_CLOSE_MASK}, 59573 {FzName: ts + 35669, Fmask: TESTVFS_ACCESS_MASK}, 59574 {FzName: ts + 35677, Fmask: TESTVFS_FULLPATHNAME_MASK}, 59575 {FzName: ts + 35602, Fmask: TESTVFS_UNLOCK_MASK}, 59576 {FzName: ts + 35596, Fmask: TESTVFS_LOCK_MASK}, 59577 {FzName: ts + 38596, Fmask: TESTVFS_CKLOCK_MASK}, 59578 {FzName: ts + 35624, Fmask: TESTVFS_FCNTL_MASK}, 59579 } 59580 59581 func testvfs_obj_del(tls *libc.TLS, cd ClientData) { 59582 var p uintptr = cd 59583 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59584 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59585 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 59586 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59587 tcl.XTclFreeObj(tls, _objPtr) 59588 } 59589 } 59590 } 59591 sqlite3.Xsqlite3_vfs_unregister(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 59592 libc.Xmemset(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs, 0, uint32(unsafe.Sizeof(sqlite3_vfs{}))) 59593 tcl.XTcl_Free(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 59594 libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(Testvfs{}))) 59595 tcl.XTcl_Free(tls, p) 59596 } 59597 59598 func testvfs_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59599 bp := tls.Alloc(28) 59600 defer tls.Free(28) 59601 59602 var p uintptr 59603 var pVfs uintptr 59604 var zVfs uintptr 59605 var nByte int32 59606 59607 var i int32 59608 59609 var zSwitch uintptr 59610 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59611 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59612 *(*int32)(unsafe.Pointer(bp + 8)) = 0 59613 *(*int32)(unsafe.Pointer(bp + 12)) = 0 59614 *(*int32)(unsafe.Pointer(bp + 16)) = -1 59615 *(*int32)(unsafe.Pointer(bp + 20)) = 3 59616 59617 if !(objc < 2 || 0 != objc%2) { 59618 goto __1 59619 } 59620 goto bad_args 59621 __1: 59622 ; 59623 i = 2 59624 __2: 59625 if !(i < objc) { 59626 goto __4 59627 } 59628 zSwitch = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*4)), bp) 59629 59630 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39003, zSwitch, uint32(*(*int32)(unsafe.Pointer(bp))))) { 59631 goto __5 59632 } 59633 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)), bp+4) != 0) { 59634 goto __7 59635 } 59636 return TCL_ERROR 59637 __7: 59638 ; 59639 if !(*(*int32)(unsafe.Pointer(bp + 4)) != 0) { 59640 goto __8 59641 } 59642 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59643 __8: 59644 ; 59645 goto __6 59646 __5: 59647 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+26779, zSwitch, uint32(*(*int32)(unsafe.Pointer(bp))))) { 59648 goto __9 59649 } 59650 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)), bp+8) != 0) { 59651 goto __11 59652 } 59653 return TCL_ERROR 59654 __11: 59655 ; 59656 goto __10 59657 __9: 59658 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39010, zSwitch, uint32(*(*int32)(unsafe.Pointer(bp))))) { 59659 goto __12 59660 } 59661 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)), bp+12) != 0) { 59662 goto __14 59663 } 59664 return TCL_ERROR 59665 __14: 59666 ; 59667 goto __13 59668 __12: 59669 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39020, zSwitch, uint32(*(*int32)(unsafe.Pointer(bp))))) { 59670 goto __15 59671 } 59672 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)), bp+16) != 0) { 59673 goto __17 59674 } 59675 return TCL_ERROR 59676 __17: 59677 ; 59678 goto __16 59679 __15: 59680 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39032, zSwitch, uint32(*(*int32)(unsafe.Pointer(bp))))) { 59681 goto __18 59682 } 59683 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)), bp+20) != 0) { 59684 goto __20 59685 } 59686 return TCL_ERROR 59687 __20: 59688 ; 59689 goto __19 59690 __18: 59691 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39042, zSwitch, uint32(*(*int32)(unsafe.Pointer(bp))))) { 59692 goto __21 59693 } 59694 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*4)), bp+24) != 0) { 59695 goto __23 59696 } 59697 return TCL_ERROR 59698 __23: 59699 ; 59700 if !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { 59701 goto __24 59702 } 59703 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59704 __24: 59705 ; 59706 goto __22 59707 __21: 59708 goto bad_args 59709 __22: 59710 ; 59711 __19: 59712 ; 59713 __16: 59714 ; 59715 __13: 59716 ; 59717 __10: 59718 ; 59719 __6: 59720 ; 59721 goto __3 59722 __3: 59723 i = i + 2 59724 goto __2 59725 goto __4 59726 __4: 59727 ; 59728 if !(uint32(*(*int32)(unsafe.Pointer(bp + 12))) < uint32(unsafe.Sizeof(TestvfsFile{}))) { 59729 goto __25 59730 } 59731 *(*int32)(unsafe.Pointer(bp + 12)) = int32(unsafe.Sizeof(TestvfsFile{})) 59732 __25: 59733 ; 59734 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))) 59735 nByte = int32(uint32(unsafe.Sizeof(Testvfs{})) + uint32(int32(libc.Xstrlen(tls, zVfs))) + uint32(1)) 59736 p = tcl.XTcl_Alloc(tls, uint32(nByte)) 59737 libc.Xmemset(tls, p, 0, uint32(nByte)) 59738 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = -1 59739 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = -1 59740 59741 tcl.XTcl_CreateObjCommand(tls, interp, zVfs, *(*uintptr)(unsafe.Pointer(&struct { 59742 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59743 }{testvfs_obj_cmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{testvfs_obj_del}))) 59744 (*Testvfs)(unsafe.Pointer(p)).FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59745 (*Testvfs)(unsafe.Pointer(p)).Finterp = interp 59746 59747 (*Testvfs)(unsafe.Pointer(p)).FzName = p + 1*80 59748 libc.Xmemcpy(tls, (*Testvfs)(unsafe.Pointer(p)).FzName, zVfs, libc.Xstrlen(tls, zVfs)+size_t(1)) 59749 59750 pVfs = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(sqlite3_vfs{}))) 59751 libc.Xmemcpy(tls, pVfs, uintptr(unsafe.Pointer(&tvfs_vfs)), uint32(unsafe.Sizeof(sqlite3_vfs{}))) 59752 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData = p 59753 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion = *(*int32)(unsafe.Pointer(bp + 20)) 59754 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName = (*Testvfs)(unsafe.Pointer(p)).FzName 59755 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname 59756 if !(*(*int32)(unsafe.Pointer(bp + 16)) >= 0 && *(*int32)(unsafe.Pointer(bp + 16)) < (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname) { 59757 goto __26 59758 } 59759 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = *(*int32)(unsafe.Pointer(bp + 16)) 59760 __26: 59761 ; 59762 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile = *(*int32)(unsafe.Pointer(bp + 12)) 59763 (*Testvfs)(unsafe.Pointer(p)).FpVfs = pVfs 59764 (*Testvfs)(unsafe.Pointer(p)).FisNoshm = *(*int32)(unsafe.Pointer(bp + 4)) 59765 (*Testvfs)(unsafe.Pointer(p)).FisFullshm = *(*int32)(unsafe.Pointer(bp + 24)) 59766 (*Testvfs)(unsafe.Pointer(p)).Fmask = TESTVFS_ALL_MASK 59767 59768 sqlite3.Xsqlite3_vfs_register(tls, pVfs, *(*int32)(unsafe.Pointer(bp + 8))) 59769 59770 return TCL_OK 59771 59772 bad_args: 59773 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39051) 59774 return TCL_ERROR 59775 } 59776 59777 var tvfs_vfs = sqlite3_vfs{ 59778 FiVersion: 3, 59779 FxOpen: 0, 59780 FxDelete: 0, 59781 FxAccess: 0, 59782 FxFullPathname: 0, 59783 FxRandomness: 0, 59784 FxSleep: 0, 59785 FxCurrentTime: 0, 59786 } 59787 59788 func test_vfs_shmlock(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59789 bp := tls.Alloc(48) 59790 defer tls.Free(48) 59791 59792 *(*[3]uintptr)(unsafe.Pointer(bp + 4)) = [3]uintptr{ts + 39155, ts + 13978, uintptr(0)} 59793 *(*[3]uintptr)(unsafe.Pointer(bp + 20)) = [3]uintptr{ts + 39162, ts + 39167, uintptr(0)} 59794 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 59795 var rc int32 = SQLITE_OK 59796 var zDbname uintptr = uintptr(0) 59797 *(*int32)(unsafe.Pointer(bp + 16)) = 0 59798 *(*int32)(unsafe.Pointer(bp + 32)) = 0 59799 *(*int32)(unsafe.Pointer(bp + 36)) = 0 59800 *(*int32)(unsafe.Pointer(bp + 40)) = 0 59801 59802 if objc != 7 { 59803 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 59804 ts+39174) 59805 return TCL_ERROR 59806 } 59807 59808 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 59809 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 || 59810 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+4, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+16) != 0 || 59811 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+20, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+32) != 0 || 59812 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*4)), bp+36) != 0 || 59813 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*4)), bp+40) != 0 { 59814 return TCL_ERROR 59815 } 59816 59817 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+44) 59818 if *(*uintptr)(unsafe.Pointer(bp + 44)) == uintptr(0) { 59819 return TCL_ERROR 59820 } 59821 rc = (*struct { 59822 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59823 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 44)))).FpMethods)).FxShmLock})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 44)), *(*int32)(unsafe.Pointer(bp + 36)), *(*int32)(unsafe.Pointer(bp + 40)), 59824 func() int32 { 59825 if *(*int32)(unsafe.Pointer(bp + 16)) == 0 { 59826 return SQLITE_SHM_SHARED 59827 } 59828 return SQLITE_SHM_EXCLUSIVE 59829 }()| 59830 func() int32 { 59831 if *(*int32)(unsafe.Pointer(bp + 32)) == 0 { 59832 return SQLITE_SHM_LOCK 59833 } 59834 return SQLITE_SHM_UNLOCK 59835 }()) 59836 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59837 return TCL_OK 59838 } 59839 59840 func test_vfs_set_readmark(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59841 bp := tls.Alloc(36) 59842 defer tls.Free(36) 59843 59844 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 59845 var rc int32 = SQLITE_OK 59846 var zDbname uintptr = uintptr(0) 59847 *(*int32)(unsafe.Pointer(bp + 20)) = 0 59848 *(*int32)(unsafe.Pointer(bp + 24)) = -1 59849 59850 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 59851 var aShm uintptr 59852 var iOff int32 59853 59854 if objc != 4 && objc != 5 { 59855 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39230) 59856 return TCL_ERROR 59857 } 59858 59859 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 59860 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp+16) != 0 || 59861 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*4)), bp+20) != 0 || 59862 objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*4)), bp+24) != 0 { 59863 return TCL_ERROR 59864 } 59865 59866 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+28) 59867 if *(*uintptr)(unsafe.Pointer(bp + 28)) == uintptr(0) { 59868 return TCL_ERROR 59869 } 59870 rc = (*struct { 59871 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 59872 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 28)))).FpMethods)).FxShmMap})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 28)), 0, 32*1024, 0, bp+32) 59873 if rc != SQLITE_OK { 59874 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59875 return TCL_ERROR 59876 } 59877 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 59878 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+39253, 0)) 59879 return TCL_ERROR 59880 } 59881 aShm = *(*uintptr)(unsafe.Pointer(bp + 32)) 59882 iOff = 12*2 + 1 + *(*int32)(unsafe.Pointer(bp + 20)) 59883 59884 if objc == 5 { 59885 *(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 24))) 59886 } 59887 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(*(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4))))) 59888 59889 return TCL_OK 59890 } 59891 59892 func Sqlitetestvfs_Init(tls *libc.TLS, interp uintptr) int32 { 59893 tcl.XTcl_CreateObjCommand(tls, interp, ts+39277, *(*uintptr)(unsafe.Pointer(&struct { 59894 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59895 }{testvfs_cmd})), uintptr(0), uintptr(0)) 59896 tcl.XTcl_CreateObjCommand(tls, interp, ts+39285, *(*uintptr)(unsafe.Pointer(&struct { 59897 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59898 }{test_vfs_shmlock})), uintptr(0), uintptr(0)) 59899 tcl.XTcl_CreateObjCommand(tls, interp, ts+39297, *(*uintptr)(unsafe.Pointer(&struct { 59900 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59901 }{test_vfs_set_readmark})), uintptr(0), uintptr(0)) 59902 return TCL_OK 59903 } 59904 59905 type TestWindow1 = struct { 59906 FxStep uintptr 59907 FxFinal uintptr 59908 FxValue uintptr 59909 FxInverse uintptr 59910 Finterp uintptr 59911 } 59912 59913 type TestWindow = TestWindow1 59914 59915 type TestWindowCtx1 = struct{ FpVal uintptr } 59916 59917 type TestWindowCtx = TestWindowCtx1 59918 59919 func doTestWindowStep(tls *libc.TLS, bInverse int32, ctx uintptr, nArg int32, apArg uintptr) { 59920 var i int32 59921 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 59922 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 59923 if bInverse != 0 { 59924 return (*TestWindow)(unsafe.Pointer(p)).FxInverse 59925 } 59926 return (*TestWindow)(unsafe.Pointer(p)).FxStep 59927 }()) 59928 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 59929 59930 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59931 if pCtx != 0 { 59932 var zResult uintptr 59933 var rc int32 59934 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59935 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 59936 } else { 59937 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 59938 } 59939 for i = 0; i < nArg; i++ { 59940 var pArg uintptr 59941 pArg = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*4))), -1) 59942 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, pArg) 59943 } 59944 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59945 if rc != TCL_OK { 59946 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 59947 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 59948 } else { 59949 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59950 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59951 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 59952 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59953 tcl.XTclFreeObj(tls, _objPtr) 59954 } 59955 } 59956 } 59957 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp)) 59958 (*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount++ 59959 } 59960 } 59961 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 59962 var _objPtr uintptr = pEval 59963 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59964 tcl.XTclFreeObj(tls, _objPtr) 59965 } 59966 } 59967 } 59968 59969 func doTestWindowFinalize(tls *libc.TLS, bValue int32, ctx uintptr) { 59970 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 59971 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 59972 if bValue != 0 { 59973 return (*TestWindow)(unsafe.Pointer(p)).FxValue 59974 } 59975 return (*TestWindow)(unsafe.Pointer(p)).FxFinal 59976 }()) 59977 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 59978 59979 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59980 if pCtx != 0 { 59981 var zResult uintptr 59982 var rc int32 59983 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59984 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 59985 } else { 59986 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 59987 } 59988 59989 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59990 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 59991 if rc != TCL_OK { 59992 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 59993 } else { 59994 sqlite3.Xsqlite3_result_text(tls, ctx, zResult, -1, libc.UintptrFromInt32(-1)) 59995 } 59996 59997 if bValue == 0 { 59998 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 59999 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60000 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 60001 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60002 tcl.XTclFreeObj(tls, _objPtr) 60003 } 60004 } 60005 } 60006 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = uintptr(0) 60007 } 60008 } 60009 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60010 var _objPtr uintptr = pEval 60011 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60012 tcl.XTclFreeObj(tls, _objPtr) 60013 } 60014 } 60015 } 60016 60017 func testWindowStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60018 doTestWindowStep(tls, 0, ctx, nArg, apArg) 60019 } 60020 60021 func testWindowInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60022 doTestWindowStep(tls, 1, ctx, nArg, apArg) 60023 } 60024 60025 func testWindowFinal(tls *libc.TLS, ctx uintptr) { 60026 doTestWindowFinalize(tls, 0, ctx) 60027 } 60028 60029 func testWindowValue(tls *libc.TLS, ctx uintptr) { 60030 doTestWindowFinalize(tls, 1, ctx) 60031 } 60032 60033 func testWindowDestroy(tls *libc.TLS, pCtx uintptr) { 60034 tcl.XTcl_Free(tls, pCtx) 60035 } 60036 60037 func test_create_window(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60038 bp := tls.Alloc(4) 60039 defer tls.Free(4) 60040 60041 var pNew uintptr 60042 60043 var zName uintptr 60044 var rc int32 60045 60046 if objc != 7 { 60047 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39314) 60048 return TCL_ERROR 60049 } 60050 60051 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 60052 return TCL_ERROR 60053 } 60054 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*4))) 60055 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestWindow{}))) 60056 libc.Xmemset(tls, pNew, 0, uint32(unsafe.Sizeof(TestWindow{}))) 60057 (*TestWindow)(unsafe.Pointer(pNew)).FxStep = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*4))) 60058 (*TestWindow)(unsafe.Pointer(pNew)).FxFinal = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*4))) 60059 (*TestWindow)(unsafe.Pointer(pNew)).FxValue = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*4))) 60060 (*TestWindow)(unsafe.Pointer(pNew)).FxInverse = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*4))) 60061 (*TestWindow)(unsafe.Pointer(pNew)).Finterp = interp 60062 60063 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxStep)).FrefCount++ 60064 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxFinal)).FrefCount++ 60065 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxValue)).FrefCount++ 60066 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxInverse)).FrefCount++ 60067 60068 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, -1, SQLITE_UTF8, pNew, 60069 *(*uintptr)(unsafe.Pointer(&struct { 60070 f func(*libc.TLS, uintptr, int32, uintptr) 60071 }{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 { 60072 f func(*libc.TLS, uintptr, int32, uintptr) 60073 }{testWindowInverse})), 60074 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowDestroy}))) 60075 if rc != SQLITE_OK { 60076 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60077 return TCL_ERROR 60078 } 60079 60080 return TCL_OK 60081 } 60082 60083 func test_create_window_misuse(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60084 bp := tls.Alloc(4) 60085 defer tls.Free(4) 60086 60087 var rc int32 60088 60089 if !(objc != 2) { 60090 goto __1 60091 } 60092 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60093 return TCL_ERROR 60094 __1: 60095 ; 60096 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0) { 60097 goto __2 60098 } 60099 return TCL_ERROR 60100 __2: 60101 ; 60102 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60103 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 { 60104 f func(*libc.TLS, uintptr, int32, uintptr) 60105 }{testWindowInverse})), 60106 uintptr(0)) 60107 if !(rc != SQLITE_MISUSE) { 60108 goto __3 60109 } 60110 goto error 60111 __3: 60112 ; 60113 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60114 *(*uintptr)(unsafe.Pointer(&struct { 60115 f func(*libc.TLS, uintptr, int32, uintptr) 60116 }{testWindowStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 60117 f func(*libc.TLS, uintptr, int32, uintptr) 60118 }{testWindowInverse})), 60119 uintptr(0)) 60120 if !(rc != SQLITE_MISUSE) { 60121 goto __4 60122 } 60123 goto error 60124 __4: 60125 ; 60126 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60127 *(*uintptr)(unsafe.Pointer(&struct { 60128 f func(*libc.TLS, uintptr, int32, uintptr) 60129 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 60130 f func(*libc.TLS, uintptr, int32, uintptr) 60131 }{testWindowInverse})), 60132 uintptr(0)) 60133 if !(rc != SQLITE_MISUSE) { 60134 goto __5 60135 } 60136 goto error 60137 __5: 60138 ; 60139 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60140 *(*uintptr)(unsafe.Pointer(&struct { 60141 f func(*libc.TLS, uintptr, int32, uintptr) 60142 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), uintptr(0), 60143 uintptr(0)) 60144 if !(rc != SQLITE_MISUSE) { 60145 goto __6 60146 } 60147 goto error 60148 __6: 60149 ; 60150 return TCL_OK 60151 60152 error: 60153 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, ts+39355, -1)) 60154 return TCL_ERROR 60155 } 60156 60157 func sumintStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60158 var pInt uintptr 60159 60160 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apArg))) != SQLITE_INTEGER { 60161 sqlite3.Xsqlite3_result_error(tls, ctx, ts+39373, -1) 60162 return 60163 } 60164 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 60165 if pInt != 0 { 60166 *(*sqlite3_int64)(unsafe.Pointer(pInt)) += sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 60167 } 60168 } 60169 60170 func sumintInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60171 var pInt uintptr 60172 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 60173 *(*sqlite3_int64)(unsafe.Pointer(pInt)) -= sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 60174 } 60175 60176 func sumintFinal(tls *libc.TLS, ctx uintptr) { 60177 var res sqlite3_int64 = int64(0) 60178 var pInt uintptr 60179 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 60180 if pInt != 0 { 60181 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 60182 } 60183 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 60184 } 60185 60186 func sumintValue(tls *libc.TLS, ctx uintptr) { 60187 var res sqlite3_int64 = int64(0) 60188 var pInt uintptr 60189 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 60190 if pInt != 0 { 60191 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 60192 } 60193 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 60194 } 60195 60196 func test_create_sumint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60197 bp := tls.Alloc(4) 60198 defer tls.Free(4) 60199 60200 var rc int32 60201 60202 if objc != 2 { 60203 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60204 return TCL_ERROR 60205 } 60206 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 60207 return TCL_ERROR 60208 } 60209 60210 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39390, 1, SQLITE_UTF8, uintptr(0), 60211 *(*uintptr)(unsafe.Pointer(&struct { 60212 f func(*libc.TLS, uintptr, int32, uintptr) 60213 }{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 { 60214 f func(*libc.TLS, uintptr, int32, uintptr) 60215 }{sumintInverse})), 60216 uintptr(0)) 60217 60218 if rc != SQLITE_OK { 60219 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60220 return TCL_ERROR 60221 } 60222 return TCL_OK 60223 } 60224 60225 func test_override_sum(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60226 bp := tls.Alloc(4) 60227 defer tls.Free(4) 60228 60229 var rc int32 60230 60231 if objc != 2 { 60232 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60233 return TCL_ERROR 60234 } 60235 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*4))), bp) != 0 { 60236 return TCL_ERROR 60237 } 60238 60239 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39397, -1, SQLITE_UTF8, uintptr(0), 60240 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 60241 f func(*libc.TLS, uintptr, int32, uintptr) 60242 }{sumintStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintFinal}))) 60243 60244 if rc != SQLITE_OK { 60245 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60246 return TCL_ERROR 60247 } 60248 return TCL_OK 60249 } 60250 60251 func Sqlitetest_window_Init(tls *libc.TLS, interp uintptr) int32 { 60252 var i int32 60253 for i = 0; uint32(i) < uint32(unsafe.Sizeof(aObjCmd14))/uint32(unsafe.Sizeof(struct { 60254 FzName uintptr 60255 FxProc uintptr 60256 FclientData int32 60257 }{})); i++ { 60258 var c ClientData = uintptr(aObjCmd14[i].FclientData) 60259 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd14[i].FzName, aObjCmd14[i].FxProc, c, uintptr(0)) 60260 } 60261 return TCL_OK 60262 } 60263 60264 var aObjCmd14 = [4]struct { 60265 FzName uintptr 60266 FxProc uintptr 60267 FclientData int32 60268 }{ 60269 {FzName: ts + 39401, FxProc: 0}, 60270 {FzName: ts + 39432, FxProc: 0}, 60271 {FzName: ts + 39467, FxProc: 0}, 60272 {FzName: ts + 39486, FxProc: 0}, 60273 } 60274 60275 func init() { 60276 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 4)) = cfClose 60277 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 8)) = cfRead 60278 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 12)) = cfWrite 60279 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 16)) = cfTruncate 60280 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 20)) = cfSync 60281 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 24)) = cfFileSize 60282 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 28)) = cfLock 60283 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 32)) = cfUnlock 60284 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 36)) = cfCheckReservedLock 60285 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 40)) = cfFileControl 60286 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 44)) = cfSectorSize 60287 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 48)) = cfDeviceCharacteristics 60288 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 52)) = cfShmMap 60289 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 56)) = cfShmLock 60290 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 60)) = cfShmBarrier 60291 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 64)) = cfShmUnmap 60292 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 4)) = csvtabCreate 60293 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 8)) = csvtabConnect 60294 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 12)) = csvtabBestIndex 60295 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 16)) = csvtabDisconnect 60296 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 20)) = csvtabDisconnect 60297 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 24)) = csvtabOpen 60298 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 28)) = csvtabClose 60299 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 32)) = csvtabFilter 60300 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 36)) = csvtabNext 60301 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 40)) = csvtabEof 60302 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 44)) = csvtabColumn 60303 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 48)) = csvtabRowid 60304 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 4)) = csvtabCreate 60305 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 8)) = csvtabConnect 60306 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 12)) = csvtabBestIndex 60307 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 16)) = csvtabDisconnect 60308 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 20)) = csvtabDisconnect 60309 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 24)) = csvtabOpen 60310 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 28)) = csvtabClose 60311 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 32)) = csvtabFilter 60312 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 36)) = csvtabNext 60313 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 40)) = csvtabEof 60314 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 44)) = csvtabColumn 60315 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 48)) = csvtabRowid 60316 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 52)) = csvtabUpdate 60317 *(*func(*libc.TLS, ClientData, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 8)) = incrblobClose 60318 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 12)) = incrblobInput 60319 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 16)) = incrblobOutput 60320 *(*func(*libc.TLS, ClientData, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 20)) = incrblobSeek 60321 *(*func(*libc.TLS, ClientData, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 32)) = incrblobWatch 60322 *(*func(*libc.TLS, ClientData, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 36)) = incrblobHandle 60323 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 4)) = f5tCreateTokenizer 60324 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 16)) = f5tTokenizerReturn 60325 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 28)) = f5tTokenize 60326 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 40)) = f5tCreateFunction 60327 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 52)) = f5tMayBeCorrupt 60328 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 64)) = f5tTokenHash 60329 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 76)) = f5tRegisterMatchinfo 60330 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 88)) = f5tRegisterTok 60331 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 4)) = *(*uintptr)(unsafe.Pointer(&struct { 60332 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60333 }{db_enter})) 60334 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 12)) = *(*uintptr)(unsafe.Pointer(&struct { 60335 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60336 }{db_leave})) 60337 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 20)) = *(*uintptr)(unsafe.Pointer(&struct { 60338 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60339 }{sqlite3_mprintf_int})) 60340 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 28)) = *(*uintptr)(unsafe.Pointer(&struct { 60341 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60342 }{sqlite3_mprintf_int64})) 60343 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 36)) = *(*uintptr)(unsafe.Pointer(&struct { 60344 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60345 }{sqlite3_mprintf_long})) 60346 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 44)) = *(*uintptr)(unsafe.Pointer(&struct { 60347 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60348 }{sqlite3_mprintf_str})) 60349 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 52)) = *(*uintptr)(unsafe.Pointer(&struct { 60350 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60351 }{sqlite3_snprintf_str})) 60352 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 60)) = *(*uintptr)(unsafe.Pointer(&struct { 60353 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60354 }{sqlite3_mprintf_stronly})) 60355 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 68)) = *(*uintptr)(unsafe.Pointer(&struct { 60356 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60357 }{sqlite3_mprintf_double})) 60358 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 76)) = *(*uintptr)(unsafe.Pointer(&struct { 60359 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60360 }{sqlite3_mprintf_scaled})) 60361 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 84)) = *(*uintptr)(unsafe.Pointer(&struct { 60362 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60363 }{sqlite3_mprintf_hexdouble})) 60364 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 92)) = *(*uintptr)(unsafe.Pointer(&struct { 60365 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60366 }{test_mprintf_z})) 60367 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 100)) = *(*uintptr)(unsafe.Pointer(&struct { 60368 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60369 }{test_mprintf_n})) 60370 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 108)) = *(*uintptr)(unsafe.Pointer(&struct { 60371 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60372 }{test_snprintf_int})) 60373 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 116)) = *(*uintptr)(unsafe.Pointer(&struct { 60374 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60375 }{test_last_rowid})) 60376 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 124)) = *(*uintptr)(unsafe.Pointer(&struct { 60377 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60378 }{test_exec_printf})) 60379 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 132)) = *(*uintptr)(unsafe.Pointer(&struct { 60380 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60381 }{test_exec_hex})) 60382 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 140)) = *(*uintptr)(unsafe.Pointer(&struct { 60383 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60384 }{test_exec})) 60385 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 148)) = *(*uintptr)(unsafe.Pointer(&struct { 60386 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60387 }{test_exec_nr})) 60388 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 156)) = *(*uintptr)(unsafe.Pointer(&struct { 60389 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60390 }{test_get_table_printf})) 60391 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 164)) = *(*uintptr)(unsafe.Pointer(&struct { 60392 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60393 }{sqlite_test_close})) 60394 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 172)) = *(*uintptr)(unsafe.Pointer(&struct { 60395 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60396 }{sqlite_test_close_v2})) 60397 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 180)) = *(*uintptr)(unsafe.Pointer(&struct { 60398 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60399 }{test_create_function})) 60400 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 188)) = *(*uintptr)(unsafe.Pointer(&struct { 60401 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60402 }{test_create_aggregate})) 60403 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 196)) = *(*uintptr)(unsafe.Pointer(&struct { 60404 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60405 }{test_drop_modules})) 60406 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 204)) = *(*uintptr)(unsafe.Pointer(&struct { 60407 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60408 }{test_register_func})) 60409 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 212)) = *(*uintptr)(unsafe.Pointer(&struct { 60410 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60411 }{sqlite_abort})) 60412 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 220)) = *(*uintptr)(unsafe.Pointer(&struct { 60413 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60414 }{test_bind})) 60415 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 228)) = *(*uintptr)(unsafe.Pointer(&struct { 60416 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60417 }{test_breakpoint})) 60418 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 236)) = *(*uintptr)(unsafe.Pointer(&struct { 60419 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60420 }{test_key})) 60421 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 244)) = *(*uintptr)(unsafe.Pointer(&struct { 60422 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60423 }{test_rekey})) 60424 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 252)) = *(*uintptr)(unsafe.Pointer(&struct { 60425 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60426 }{test_interrupt})) 60427 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 260)) = *(*uintptr)(unsafe.Pointer(&struct { 60428 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60429 }{delete_function})) 60430 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 268)) = *(*uintptr)(unsafe.Pointer(&struct { 60431 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60432 }{delete_collation})) 60433 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 276)) = *(*uintptr)(unsafe.Pointer(&struct { 60434 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60435 }{get_autocommit})) 60436 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 284)) = *(*uintptr)(unsafe.Pointer(&struct { 60437 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60438 }{test_busy_timeout})) 60439 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 292)) = *(*uintptr)(unsafe.Pointer(&struct { 60440 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60441 }{test_printf})) 60442 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 300)) = *(*uintptr)(unsafe.Pointer(&struct { 60443 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60444 }{test_io_trace})) 60445 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 308)) = *(*uintptr)(unsafe.Pointer(&struct { 60446 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60447 }{clang_sanitize_address})) 60448 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 4)) = *(*uintptr)(unsafe.Pointer(&struct { 60449 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60450 }{pager_open})) 60451 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 12)) = *(*uintptr)(unsafe.Pointer(&struct { 60452 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60453 }{pager_close})) 60454 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 20)) = *(*uintptr)(unsafe.Pointer(&struct { 60455 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60456 }{pager_commit})) 60457 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 28)) = *(*uintptr)(unsafe.Pointer(&struct { 60458 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60459 }{pager_rollback})) 60460 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 36)) = *(*uintptr)(unsafe.Pointer(&struct { 60461 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60462 }{pager_stmt_begin})) 60463 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 44)) = *(*uintptr)(unsafe.Pointer(&struct { 60464 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60465 }{pager_stmt_commit})) 60466 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 52)) = *(*uintptr)(unsafe.Pointer(&struct { 60467 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60468 }{pager_stmt_rollback})) 60469 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 60)) = *(*uintptr)(unsafe.Pointer(&struct { 60470 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60471 }{pager_stats})) 60472 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 68)) = *(*uintptr)(unsafe.Pointer(&struct { 60473 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60474 }{pager_pagecount})) 60475 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 76)) = *(*uintptr)(unsafe.Pointer(&struct { 60476 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60477 }{page_get})) 60478 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 84)) = *(*uintptr)(unsafe.Pointer(&struct { 60479 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60480 }{page_lookup})) 60481 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 92)) = *(*uintptr)(unsafe.Pointer(&struct { 60482 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60483 }{page_unref})) 60484 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 100)) = *(*uintptr)(unsafe.Pointer(&struct { 60485 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60486 }{page_read})) 60487 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 108)) = *(*uintptr)(unsafe.Pointer(&struct { 60488 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60489 }{page_write})) 60490 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 116)) = *(*uintptr)(unsafe.Pointer(&struct { 60491 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60492 }{page_number})) 60493 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 124)) = *(*uintptr)(unsafe.Pointer(&struct { 60494 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60495 }{pager_truncate})) 60496 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 132)) = *(*uintptr)(unsafe.Pointer(&struct { 60497 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60498 }{fake_big_file})) 60499 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 140)) = *(*uintptr)(unsafe.Pointer(&struct { 60500 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60501 }{testBitvecBuiltinTest})) 60502 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 148)) = *(*uintptr)(unsafe.Pointer(&struct { 60503 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60504 }{testPendingByte})) 60505 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 156)) = *(*uintptr)(unsafe.Pointer(&struct { 60506 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60507 }{faultInstallCmd})) 60508 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 4)) = *(*uintptr)(unsafe.Pointer(&struct { 60509 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60510 }{btree_open})) 60511 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 12)) = *(*uintptr)(unsafe.Pointer(&struct { 60512 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60513 }{btree_close})) 60514 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 20)) = *(*uintptr)(unsafe.Pointer(&struct { 60515 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60516 }{btree_begin_transaction})) 60517 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 28)) = *(*uintptr)(unsafe.Pointer(&struct { 60518 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60519 }{btree_pager_stats})) 60520 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 36)) = *(*uintptr)(unsafe.Pointer(&struct { 60521 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60522 }{btree_cursor})) 60523 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 44)) = *(*uintptr)(unsafe.Pointer(&struct { 60524 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60525 }{btree_close_cursor})) 60526 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 52)) = *(*uintptr)(unsafe.Pointer(&struct { 60527 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60528 }{btree_next})) 60529 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 60)) = *(*uintptr)(unsafe.Pointer(&struct { 60530 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60531 }{btree_eof})) 60532 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 68)) = *(*uintptr)(unsafe.Pointer(&struct { 60533 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60534 }{btree_payload_size})) 60535 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 76)) = *(*uintptr)(unsafe.Pointer(&struct { 60536 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60537 }{btree_first})) 60538 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 84)) = *(*uintptr)(unsafe.Pointer(&struct { 60539 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60540 }{btree_varint_test})) 60541 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 92)) = *(*uintptr)(unsafe.Pointer(&struct { 60542 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60543 }{btree_from_db})) 60544 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 100)) = *(*uintptr)(unsafe.Pointer(&struct { 60545 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60546 }{btree_ismemdb})) 60547 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 108)) = *(*uintptr)(unsafe.Pointer(&struct { 60548 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60549 }{btree_set_cache_size})) 60550 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 4)) = *(*uintptr)(unsafe.Pointer(&struct { 60551 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60552 }{tcl_thread_create})) 60553 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 12)) = *(*uintptr)(unsafe.Pointer(&struct { 60554 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60555 }{tcl_thread_wait})) 60556 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 20)) = *(*uintptr)(unsafe.Pointer(&struct { 60557 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60558 }{tcl_thread_halt})) 60559 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 28)) = *(*uintptr)(unsafe.Pointer(&struct { 60560 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60561 }{tcl_thread_argc})) 60562 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 36)) = *(*uintptr)(unsafe.Pointer(&struct { 60563 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60564 }{tcl_thread_argv})) 60565 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 44)) = *(*uintptr)(unsafe.Pointer(&struct { 60566 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60567 }{tcl_thread_colname})) 60568 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 52)) = *(*uintptr)(unsafe.Pointer(&struct { 60569 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60570 }{tcl_thread_result})) 60571 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 60)) = *(*uintptr)(unsafe.Pointer(&struct { 60572 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60573 }{tcl_thread_error})) 60574 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 68)) = *(*uintptr)(unsafe.Pointer(&struct { 60575 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60576 }{tcl_thread_compile})) 60577 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 76)) = *(*uintptr)(unsafe.Pointer(&struct { 60578 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60579 }{tcl_thread_step})) 60580 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 84)) = *(*uintptr)(unsafe.Pointer(&struct { 60581 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60582 }{tcl_thread_finalize})) 60583 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 92)) = *(*uintptr)(unsafe.Pointer(&struct { 60584 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60585 }{tcl_thread_swap})) 60586 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 100)) = *(*uintptr)(unsafe.Pointer(&struct { 60587 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60588 }{tcl_thread_db_get})) 60589 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 108)) = *(*uintptr)(unsafe.Pointer(&struct { 60590 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60591 }{tcl_thread_db_put})) 60592 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 116)) = *(*uintptr)(unsafe.Pointer(&struct { 60593 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60594 }{tcl_thread_stmt_get})) 60595 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 4)) = *(*uintptr)(unsafe.Pointer(&struct { 60596 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60597 }{binarize})) 60598 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 12)) = *(*uintptr)(unsafe.Pointer(&struct { 60599 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60600 }{test_value_overhead})) 60601 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 20)) = *(*uintptr)(unsafe.Pointer(&struct { 60602 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60603 }{test_translate})) 60604 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 28)) = *(*uintptr)(unsafe.Pointer(&struct { 60605 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60606 }{test_translate_selftest})) 60607 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 4)) = *(*uintptr)(unsafe.Pointer(&struct { 60608 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60609 }{tcl_client_create})) 60610 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 12)) = *(*uintptr)(unsafe.Pointer(&struct { 60611 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60612 }{tcl_client_wait})) 60613 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 20)) = *(*uintptr)(unsafe.Pointer(&struct { 60614 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60615 }{tcl_client_halt})) 60616 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 28)) = *(*uintptr)(unsafe.Pointer(&struct { 60617 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60618 }{tcl_client_argc})) 60619 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 36)) = *(*uintptr)(unsafe.Pointer(&struct { 60620 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60621 }{tcl_client_argv})) 60622 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 44)) = *(*uintptr)(unsafe.Pointer(&struct { 60623 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60624 }{tcl_client_colname})) 60625 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 52)) = *(*uintptr)(unsafe.Pointer(&struct { 60626 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60627 }{tcl_client_result})) 60628 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 60)) = *(*uintptr)(unsafe.Pointer(&struct { 60629 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60630 }{tcl_client_error})) 60631 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 68)) = *(*uintptr)(unsafe.Pointer(&struct { 60632 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60633 }{tcl_client_compile})) 60634 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 76)) = *(*uintptr)(unsafe.Pointer(&struct { 60635 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60636 }{tcl_client_step})) 60637 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 84)) = *(*uintptr)(unsafe.Pointer(&struct { 60638 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60639 }{tcl_client_reset})) 60640 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 92)) = *(*uintptr)(unsafe.Pointer(&struct { 60641 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60642 }{tcl_client_finalize})) 60643 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 100)) = *(*uintptr)(unsafe.Pointer(&struct { 60644 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60645 }{tcl_client_swap})) 60646 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 4)) = test_multiplex_initialize 60647 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 12)) = test_multiplex_shutdown 60648 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 20)) = test_multiplex_control 60649 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 4)) = *(*uintptr)(unsafe.Pointer(&struct { 60650 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60651 }{test_shutdown})) 60652 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 12)) = *(*uintptr)(unsafe.Pointer(&struct { 60653 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60654 }{test_initialize})) 60655 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 20)) = *(*uintptr)(unsafe.Pointer(&struct { 60656 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60657 }{test_config})) 60658 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 28)) = *(*uintptr)(unsafe.Pointer(&struct { 60659 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60660 }{test_enter_static_mutex})) 60661 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 36)) = *(*uintptr)(unsafe.Pointer(&struct { 60662 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60663 }{test_leave_static_mutex})) 60664 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 44)) = *(*uintptr)(unsafe.Pointer(&struct { 60665 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60666 }{test_enter_db_mutex})) 60667 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 52)) = *(*uintptr)(unsafe.Pointer(&struct { 60668 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60669 }{test_leave_db_mutex})) 60670 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 60)) = *(*uintptr)(unsafe.Pointer(&struct { 60671 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60672 }{test_alloc_mutex})) 60673 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 68)) = *(*uintptr)(unsafe.Pointer(&struct { 60674 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60675 }{test_install_mutex_counters})) 60676 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 76)) = *(*uintptr)(unsafe.Pointer(&struct { 60677 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60678 }{test_read_mutex_counters})) 60679 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 84)) = *(*uintptr)(unsafe.Pointer(&struct { 60680 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60681 }{test_clear_mutex_counters})) 60682 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 4)) = test_quota_initialize 60683 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 12)) = test_quota_shutdown 60684 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 20)) = test_quota_set 60685 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 28)) = test_quota_file 60686 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 36)) = test_quota_dump 60687 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 44)) = test_quota_fopen 60688 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 52)) = test_quota_fread 60689 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 60)) = test_quota_fwrite 60690 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 68)) = test_quota_fclose 60691 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 76)) = test_quota_fflush 60692 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 84)) = test_quota_fseek 60693 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 92)) = test_quota_rewind 60694 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 100)) = test_quota_ftell 60695 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 108)) = test_quota_ftruncate 60696 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 116)) = test_quota_file_size 60697 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 124)) = test_quota_file_truesize 60698 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 132)) = test_quota_file_mtime 60699 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 140)) = test_quota_remove 60700 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 148)) = test_quota_glob 60701 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 156)) = test_quota_file_available 60702 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 164)) = test_quota_ferror 60703 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 4)) = sqlite3_amatch_init 60704 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 12)) = sqlite3_appendvfs_init 60705 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 20)) = sqlite3_carray_init 60706 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 28)) = sqlite3_closure_init 60707 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 36)) = sqlite3_csv_init 60708 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 44)) = sqlite3_decimal_init 60709 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 52)) = sqlite3_eval_init 60710 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 60)) = sqlite3_explain_init 60711 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 68)) = sqlite3_fileio_init 60712 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 76)) = sqlite3_fuzzer_init 60713 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 84)) = sqlite3_ieee_init 60714 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 92)) = sqlite3_nextchar_init 60715 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 100)) = sqlite3_percentile_init 60716 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 108)) = sqlite3_prefixes_init 60717 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 116)) = sqlite3_qpvtab_init 60718 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 124)) = sqlite3_regexp_init 60719 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 132)) = sqlite3_remember_init 60720 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 140)) = sqlite3_series_init 60721 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 148)) = sqlite3_spellfix_init 60722 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 156)) = sqlite3_totype_init 60723 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 164)) = sqlite3_unionvtab_init 60724 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 172)) = sqlite3_wholenumber_init 60725 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 8)) = decimalFunc 60726 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 20)) = decimalCmpFunc 60727 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 32)) = decimalAddFunc 60728 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 44)) = decimalSubFunc 60729 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 56)) = decimalMulFunc 60730 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 12)) = ieee754func 60731 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 28)) = ieee754func 60732 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 44)) = ieee754func 60733 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 60)) = ieee754func 60734 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 76)) = ieee754func_to_blob 60735 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 92)) = ieee754func_from_blob 60736 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 12)) = randStr 60737 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 28)) = test_destructor 60738 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 44)) = test_destructor16 60739 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 60)) = testHexToUtf16be 60740 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 76)) = testHexToUtf16le 60741 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 92)) = testHexToUtf8 60742 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 108)) = test_destructor_count 60743 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 124)) = test_auxdata 60744 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 140)) = test_error 60745 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 156)) = test_error 60746 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 172)) = test_eval 60747 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 188)) = test_isolation 60748 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 204)) = counterFunc 60749 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 220)) = real2hex 60750 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 236)) = test_decode 60751 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 252)) = test_extract 60752 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 268)) = test_zeroblob 60753 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 284)) = test_getsubtype 60754 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 300)) = test_setsubtype 60755 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 316)) = test_frombind 60756 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 4)) = test_sqlite3rbu 60757 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 12)) = test_sqlite3rbu_vacuum 60758 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 20)) = test_sqlite3rbu_create_vfs 60759 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 28)) = test_sqlite3rbu_destroy_vfs 60760 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 36)) = test_sqlite3rbu_internal_test 60761 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 4)) = test_sqlite3_db_config 60762 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 16)) = test_sqlite3_txn_state 60763 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 28)) = test_bad_behavior 60764 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 32)) = uintptr(unsafe.Pointer(&iZero)) 60765 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 40)) = test_register_dbstat_vtab 60766 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 52)) = get_sqlite_pointer 60767 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 64)) = test_intarray_addr 60768 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 76)) = test_int64array_addr 60769 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 88)) = test_doublearray_addr 60770 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 100)) = test_textarray_addr 60771 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 112)) = test_bind_int 60772 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 124)) = test_bind_zeroblob 60773 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 136)) = test_bind_zeroblob64 60774 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 148)) = test_bind_int64 60775 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 160)) = test_bind_double 60776 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 172)) = test_bind_null 60777 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 184)) = test_bind_text 60778 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 196)) = test_bind_text16 60779 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 208)) = test_bind_blob 60780 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 220)) = test_bind_value_from_select 60781 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 232)) = test_bind_value_from_preupdate 60782 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 244)) = test_carray_bind 60783 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 256)) = test_bind_parameter_count 60784 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 268)) = test_bind_parameter_name 60785 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 280)) = test_bind_parameter_index 60786 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 292)) = test_clear_bindings 60787 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 304)) = test_sleep 60788 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 316)) = test_errcode 60789 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 328)) = test_ex_errcode 60790 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 340)) = test_errmsg 60791 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 352)) = test_error_offset 60792 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 364)) = test_errmsg16 60793 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 376)) = test_open 60794 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 388)) = test_open16 60795 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 400)) = test_open_v2 60796 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 412)) = test_complete16 60797 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 424)) = test_normalize 60798 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 436)) = test_prepare 60799 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 448)) = test_prepare16 60800 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 460)) = test_prepare_v2 60801 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 472)) = test_prepare_v3 60802 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 484)) = test_prepare_tkt3134 60803 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 496)) = test_prepare16_v2 60804 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 508)) = test_finalize 60805 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 520)) = test_stmt_status 60806 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 532)) = test_reset 60807 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 544)) = test_expired 60808 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 556)) = test_transfer_bind 60809 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 568)) = test_changes 60810 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 580)) = test_step 60811 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 592)) = test_sql 60812 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 604)) = test_ex_sql 60813 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 616)) = test_next_stmt 60814 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 628)) = test_stmt_readonly 60815 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 640)) = test_stmt_isexplain 60816 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 652)) = test_stmt_busy 60817 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 664)) = uses_stmt_journal 60818 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 676)) = test_release_memory 60819 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 688)) = test_db_release_memory 60820 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 700)) = test_db_cacheflush 60821 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 712)) = test_system_errno 60822 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 724)) = test_db_filename 60823 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 736)) = test_db_readonly 60824 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 748)) = test_soft_heap_limit 60825 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 760)) = test_soft_heap_limit 60826 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 772)) = test_hard_heap_limit 60827 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 784)) = test_thread_cleanup 60828 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 796)) = test_pager_refcounts 60829 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 808)) = test_load_extension 60830 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 820)) = test_enable_load 60831 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 832)) = test_extended_result_codes 60832 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 844)) = test_limit 60833 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 856)) = test_dbconfig_maindbname_icecube 60834 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 868)) = save_prng_state 60835 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 880)) = restore_prng_state 60836 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 892)) = reset_prng_state 60837 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 904)) = prng_seed 60838 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 916)) = extra_schema_checks 60839 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 928)) = database_never_corrupt 60840 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 940)) = database_may_be_corrupt 60841 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 952)) = optimization_control 60842 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 964)) = runAsObjProc 60843 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 976)) = test_column_count 60844 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 988)) = test_data_count 60845 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1000)) = test_column_type 60846 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1012)) = test_column_blob 60847 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1024)) = test_column_double 60848 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1036)) = test_column_int64 60849 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1048)) = test_stmt_utf8 60850 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1052)) = *(*uintptr)(unsafe.Pointer(&struct { 60851 f func(*libc.TLS, uintptr, int32) uintptr 60852 }{sqlite3.Xsqlite3_column_text})) 60853 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1060)) = test_stmt_utf8 60854 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1064)) = *(*uintptr)(unsafe.Pointer(&struct { 60855 f func(*libc.TLS, uintptr, int32) uintptr 60856 }{sqlite3.Xsqlite3_column_name})) 60857 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1072)) = test_stmt_int 60858 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1076)) = *(*uintptr)(unsafe.Pointer(&struct { 60859 f func(*libc.TLS, uintptr, int32) int32 60860 }{sqlite3.Xsqlite3_column_int})) 60861 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1084)) = test_stmt_int 60862 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1088)) = *(*uintptr)(unsafe.Pointer(&struct { 60863 f func(*libc.TLS, uintptr, int32) int32 60864 }{sqlite3.Xsqlite3_column_bytes})) 60865 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1096)) = test_stmt_utf8 60866 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1100)) = *(*uintptr)(unsafe.Pointer(&struct { 60867 f func(*libc.TLS, uintptr, int32) uintptr 60868 }{sqlite3.Xsqlite3_column_decltype})) 60869 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1108)) = test_stmt_utf8 60870 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1112)) = *(*uintptr)(unsafe.Pointer(&struct { 60871 f func(*libc.TLS, uintptr, int32) uintptr 60872 }{sqlite3.Xsqlite3_column_database_name})) 60873 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1120)) = test_stmt_utf8 60874 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1124)) = *(*uintptr)(unsafe.Pointer(&struct { 60875 f func(*libc.TLS, uintptr, int32) uintptr 60876 }{sqlite3.Xsqlite3_column_table_name})) 60877 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1132)) = test_stmt_utf8 60878 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1136)) = *(*uintptr)(unsafe.Pointer(&struct { 60879 f func(*libc.TLS, uintptr, int32) uintptr 60880 }{sqlite3.Xsqlite3_column_origin_name})) 60881 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1144)) = test_stmt_int 60882 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1148)) = *(*uintptr)(unsafe.Pointer(&struct { 60883 f func(*libc.TLS, uintptr, int32) int32 60884 }{sqlite3.Xsqlite3_column_bytes16})) 60885 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1156)) = test_stmt_utf16 60886 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1160)) = *(*uintptr)(unsafe.Pointer(&struct { 60887 f func(*libc.TLS, uintptr, int32) uintptr 60888 }{sqlite3.Xsqlite3_column_text16})) 60889 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1168)) = test_stmt_utf16 60890 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1172)) = *(*uintptr)(unsafe.Pointer(&struct { 60891 f func(*libc.TLS, uintptr, int32) uintptr 60892 }{sqlite3.Xsqlite3_column_name16})) 60893 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1180)) = add_alignment_test_collations 60894 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1192)) = test_stmt_utf16 60895 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1196)) = *(*uintptr)(unsafe.Pointer(&struct { 60896 f func(*libc.TLS, uintptr, int32) uintptr 60897 }{sqlite3.Xsqlite3_column_decltype16})) 60898 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1204)) = test_stmt_utf16 60899 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1208)) = *(*uintptr)(unsafe.Pointer(&struct { 60900 f func(*libc.TLS, uintptr, int32) uintptr 60901 }{sqlite3.Xsqlite3_column_database_name16})) 60902 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1216)) = test_stmt_utf16 60903 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1220)) = *(*uintptr)(unsafe.Pointer(&struct { 60904 f func(*libc.TLS, uintptr, int32) uintptr 60905 }{sqlite3.Xsqlite3_column_table_name16})) 60906 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1228)) = test_stmt_utf16 60907 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1232)) = *(*uintptr)(unsafe.Pointer(&struct { 60908 f func(*libc.TLS, uintptr, int32) uintptr 60909 }{sqlite3.Xsqlite3_column_origin_name16})) 60910 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1240)) = test_create_collation_v2 60911 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1252)) = test_global_recover 60912 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1264)) = working_64bit_int 60913 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1276)) = vfs_unlink_test 60914 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1288)) = vfs_initfail_test 60915 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1300)) = vfs_unregister_all 60916 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1312)) = vfs_reregister_all 60917 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1324)) = file_control_test 60918 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1336)) = file_control_lasterrno_test 60919 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1348)) = file_control_lockproxy_test 60920 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1360)) = file_control_chunksize_test 60921 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1372)) = file_control_sizehint_test 60922 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1384)) = file_control_data_version 60923 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1396)) = file_control_persist_wal 60924 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1408)) = file_control_powersafe_overwrite 60925 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1420)) = file_control_vfsname 60926 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1432)) = file_control_reservebytes 60927 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1444)) = file_control_tempfilename 60928 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1456)) = file_control_external_reader 60929 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1468)) = vfs_list 60930 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1480)) = test_create_function_v2 60931 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1492)) = test_collate 60932 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1504)) = test_collate_needed 60933 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1516)) = test_function 60934 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1528)) = test_utf16bin_collate 60935 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1540)) = test_errstr 60936 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1552)) = tcl_variable_type 60937 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1564)) = test_enable_shared 60938 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1576)) = sqlite3BtreeSharedCacheReport 60939 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1588)) = test_libversion_number 60940 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1600)) = test_table_column_metadata 60941 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1612)) = test_blob_reopen 60942 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1624)) = test_pcache_stats 60943 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1636)) = test_unlock_notify 60944 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1648)) = test_wal_checkpoint 60945 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1660)) = test_wal_checkpoint_v2 60946 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1672)) = test_wal_autocheckpoint 60947 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1684)) = test_sqlite3_log 60948 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1696)) = test_print_eqp 60949 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1708)) = test_test_control 60950 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1720)) = test_getrusage 60951 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1732)) = tclLoadStaticExtensionCmd 60952 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1744)) = sorter_test_fakeheap 60953 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1756)) = sorter_test_sort4_helper 60954 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1768)) = vfsCurrentTimeInt64 60955 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1780)) = test_snapshot_get 60956 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1792)) = test_snapshot_open 60957 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1804)) = test_snapshot_free 60958 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1816)) = test_snapshot_cmp 60959 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1828)) = test_snapshot_recover 60960 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1840)) = test_snapshot_get_blob 60961 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1852)) = test_snapshot_open_blob 60962 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1864)) = test_snapshot_cmp_blob 60963 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1876)) = test_delete_database 60964 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1888)) = test_atomic_batch_write 60965 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1900)) = test_mmap_warm 60966 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1912)) = test_config_sorterref 60967 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1924)) = test_autovacuum_pages 60968 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1936)) = test_decode_hexdb 60969 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1948)) = test_write_db 60970 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1960)) = test_register_cksumvfs 60971 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1972)) = test_unregister_cksumvfs 60972 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 4)) = test_intarray_create 60973 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 16)) = test_intarray_bind 60974 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 4)) = test_malloc 60975 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 16)) = test_realloc 60976 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 28)) = test_free 60977 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 40)) = test_memset 60978 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 52)) = test_memget 60979 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 64)) = test_memory_used 60980 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 76)) = test_memory_highwater 60981 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 88)) = test_memdebug_backtrace 60982 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 100)) = test_memdebug_dump 60983 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 112)) = test_memdebug_fail 60984 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 124)) = test_memdebug_pending 60985 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 136)) = test_memdebug_settitle 60986 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 148)) = test_memdebug_malloc_count 60987 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 160)) = test_memdebug_log 60988 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 172)) = test_config_pagecache 60989 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 184)) = test_alt_pcache 60990 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 196)) = test_status 60991 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 208)) = test_db_status 60992 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 220)) = test_install_malloc_faultsim 60993 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 232)) = test_config_heap 60994 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 244)) = test_config_heap_size 60995 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 256)) = test_config_memstatus 60996 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 268)) = test_config_lookaside 60997 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 280)) = test_config_error 60998 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 292)) = test_config_uri 60999 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 304)) = test_config_cis 61000 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 316)) = test_config_pmasz 61001 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 328)) = test_db_config_lookaside 61002 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 340)) = test_dump_memsys3 61003 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 352)) = test_dump_memsys3 61004 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 364)) = test_install_memsys3 61005 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 376)) = test_vfs_oom_test 61006 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd12)) + 4)) = register_schema_module 61007 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd13)) + 4)) = register_tclvar_module 61008 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 4)) = test_create_window 61009 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 16)) = test_create_window_misuse 61010 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 28)) = test_create_sumint 61011 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 40)) = test_override_sum 61012 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 4)) = register_echo_module 61013 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 16)) = declare_vtab 61014 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 4)) = c_misuse_test 61015 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 16)) = c_realloc_test 61016 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 28)) = c_collation_test 61017 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd4)) + 4)) = register_tcl_module 61018 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 4)) = test_blob_open 61019 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 12)) = test_blob_close 61020 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 20)) = test_blob_bytes 61021 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 28)) = test_blob_read 61022 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 36)) = test_blob_write 61023 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd6)) + 4)) = register_fs_module 61024 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 4)) = autoinstall_test_funcs 61025 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 12)) = abuse_create_function 61026 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 20)) = install_fts3_rank_function 61027 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 4)) = hexio_read 61028 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 12)) = hexio_write 61029 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 20)) = hexio_get_int 61030 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 28)) = hexio_render_int16 61031 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 36)) = hexio_render_int32 61032 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 44)) = utf8_to_utf8 61033 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 52)) = read_fts3varint 61034 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 60)) = make_fts3record 61035 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 4)) = init_wrapper_install 61036 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 12)) = init_wrapper_query 61037 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 20)) = init_wrapper_uninstall 61038 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 28)) = init_wrapper_clear 61039 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 4)) = *(*uintptr)(unsafe.Pointer(&struct { 61040 f func(*libc.TLS, uintptr, int32, int32) int32 61041 }{ts_open})) 61042 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{ts_close})) 61043 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 44)) = *(*uintptr)(unsafe.Pointer(&struct { 61044 f func(*libc.TLS, uintptr, int32) int32 61045 }{ts_access})) 61046 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 64)) = *(*uintptr)(unsafe.Pointer(&struct { 61047 f func(*libc.TLS, uintptr, size_t) uintptr 61048 }{ts_getcwd})) 61049 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 84)) = *(*uintptr)(unsafe.Pointer(&struct { 61050 f func(*libc.TLS, uintptr, uintptr) int32 61051 }{ts_stat})) 61052 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 61053 f func(*libc.TLS, int32, uintptr) int32 61054 }{ts_fstat})) 61055 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 124)) = *(*uintptr)(unsafe.Pointer(&struct { 61056 f func(*libc.TLS, int32, off_t) int32 61057 }{ts_ftruncate})) 61058 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 144)) = *(*uintptr)(unsafe.Pointer(&struct { 61059 f func(*libc.TLS, int32, int32, uintptr) int32 61060 }{ts_fcntl})) 61061 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 164)) = *(*uintptr)(unsafe.Pointer(&struct { 61062 f func(*libc.TLS, int32, uintptr, size_t) int32 61063 }{ts_read})) 61064 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 61065 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 61066 }{ts_pread})) 61067 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 204)) = *(*uintptr)(unsafe.Pointer(&struct { 61068 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 61069 }{ts_pread64})) 61070 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 224)) = *(*uintptr)(unsafe.Pointer(&struct { 61071 f func(*libc.TLS, int32, uintptr, size_t) int32 61072 }{ts_write})) 61073 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 244)) = *(*uintptr)(unsafe.Pointer(&struct { 61074 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 61075 }{ts_pwrite})) 61076 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 61077 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 61078 }{ts_pwrite64})) 61079 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 284)) = *(*uintptr)(unsafe.Pointer(&struct { 61080 f func(*libc.TLS, int32, mode_t) int32 61081 }{ts_fchmod})) 61082 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 304)) = *(*uintptr)(unsafe.Pointer(&struct { 61083 f func(*libc.TLS, int32, off_t, off_t) int32 61084 }{ts_fallocate})) 61085 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 324)) = *(*uintptr)(unsafe.Pointer(&struct { 61086 f func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr 61087 }{ts_mmap})) 61088 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 344)) = *(*uintptr)(unsafe.Pointer(&struct { 61089 f func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr 61090 }{ts_mremap})) 61091 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 4)) = amatchConnect 61092 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 8)) = amatchConnect 61093 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 12)) = amatchBestIndex 61094 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 16)) = amatchDisconnect 61095 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 20)) = amatchDisconnect 61096 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 24)) = amatchOpen 61097 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 28)) = amatchClose 61098 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 32)) = amatchFilter 61099 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 36)) = amatchNext 61100 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 40)) = amatchEof 61101 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 44)) = amatchColumn 61102 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 48)) = amatchRowid 61103 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 52)) = amatchUpdate 61104 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 4)) = apndClose 61105 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 8)) = apndRead 61106 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 12)) = apndWrite 61107 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 16)) = apndTruncate 61108 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 20)) = apndSync 61109 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 24)) = apndFileSize 61110 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 28)) = apndLock 61111 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 32)) = apndUnlock 61112 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 36)) = apndCheckReservedLock 61113 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 40)) = apndFileControl 61114 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 44)) = apndSectorSize 61115 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 48)) = apndDeviceCharacteristics 61116 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 52)) = apndShmMap 61117 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 56)) = apndShmLock 61118 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 60)) = apndShmBarrier 61119 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 64)) = apndShmUnmap 61120 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 68)) = apndFetch 61121 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 72)) = apndUnfetch 61122 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 24)) = apndOpen 61123 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 28)) = apndDelete 61124 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 32)) = apndAccess 61125 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 36)) = apndFullPathname 61126 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 40)) = apndDlOpen 61127 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 44)) = apndDlError 61128 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 48)) = apndDlSym 61129 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 52)) = apndDlClose 61130 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 56)) = apndRandomness 61131 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 60)) = apndSleep 61132 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 64)) = apndCurrentTime 61133 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 68)) = apndGetLastError 61134 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 72)) = apndCurrentTimeInt64 61135 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 76)) = apndSetSystemCall 61136 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 80)) = apndGetSystemCall 61137 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 84)) = apndNextSystemCall 61138 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 8)) = carrayConnect 61139 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 12)) = carrayBestIndex 61140 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 16)) = carrayDisconnect 61141 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 24)) = carrayOpen 61142 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 28)) = carrayClose 61143 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 32)) = carrayFilter 61144 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 36)) = carrayNext 61145 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 40)) = carrayEof 61146 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 44)) = carrayColumn 61147 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 48)) = carrayRowid 61148 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 4)) = cksmClose 61149 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 8)) = cksmRead 61150 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 12)) = cksmWrite 61151 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 16)) = cksmTruncate 61152 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 20)) = cksmSync 61153 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 24)) = cksmFileSize 61154 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 28)) = cksmLock 61155 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 32)) = cksmUnlock 61156 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 36)) = cksmCheckReservedLock 61157 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 40)) = cksmFileControl 61158 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 44)) = cksmSectorSize 61159 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 48)) = cksmDeviceCharacteristics 61160 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 52)) = cksmShmMap 61161 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 56)) = cksmShmLock 61162 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 60)) = cksmShmBarrier 61163 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 64)) = cksmShmUnmap 61164 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 68)) = cksmFetch 61165 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 72)) = cksmUnfetch 61166 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 24)) = cksmOpen 61167 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 28)) = cksmDelete 61168 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 32)) = cksmAccess 61169 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 36)) = cksmFullPathname 61170 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 40)) = cksmDlOpen 61171 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 44)) = cksmDlError 61172 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 48)) = cksmDlSym 61173 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 52)) = cksmDlClose 61174 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 56)) = cksmRandomness 61175 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 60)) = cksmSleep 61176 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 64)) = cksmCurrentTime 61177 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 68)) = cksmGetLastError 61178 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 72)) = cksmCurrentTimeInt64 61179 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 76)) = cksmSetSystemCall 61180 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 80)) = cksmGetSystemCall 61181 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 84)) = cksmNextSystemCall 61182 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 4)) = closureConnect 61183 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 8)) = closureConnect 61184 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 12)) = closureBestIndex 61185 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 16)) = closureDisconnect 61186 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 20)) = closureDisconnect 61187 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 24)) = closureOpen 61188 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 28)) = closureClose 61189 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 32)) = closureFilter 61190 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 36)) = closureNext 61191 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 40)) = closureEof 61192 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 44)) = closureColumn 61193 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 48)) = closureRowid 61194 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 24)) = cfOpen 61195 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 28)) = cfDelete 61196 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 32)) = cfAccess 61197 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 36)) = cfFullPathname 61198 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 40)) = cfDlOpen 61199 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 44)) = cfDlError 61200 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 48)) = cfDlSym 61201 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 52)) = cfDlClose 61202 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 56)) = cfRandomness 61203 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 60)) = cfSleep 61204 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 64)) = cfCurrentTime 61205 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 68)) = cfGetLastError 61206 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 4)) = devsymClose 61207 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 8)) = devsymRead 61208 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 12)) = devsymWrite 61209 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 16)) = devsymTruncate 61210 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 20)) = devsymSync 61211 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 24)) = devsymFileSize 61212 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 28)) = devsymLock 61213 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 32)) = devsymUnlock 61214 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 36)) = devsymCheckReservedLock 61215 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 40)) = devsymFileControl 61216 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 44)) = devsymSectorSize 61217 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 48)) = devsymDeviceCharacteristics 61218 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 52)) = devsymShmMap 61219 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 56)) = devsymShmLock 61220 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 60)) = devsymShmBarrier 61221 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 64)) = devsymShmUnmap 61222 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 24)) = devsymOpen 61223 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 28)) = devsymDelete 61224 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 32)) = devsymAccess 61225 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 36)) = devsymFullPathname 61226 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 56)) = devsymRandomness 61227 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 60)) = devsymSleep 61228 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 64)) = devsymCurrentTime 61229 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 4)) = echoCreate 61230 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 8)) = echoConnect 61231 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 12)) = echoBestIndex 61232 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 16)) = echoDisconnect 61233 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 20)) = echoDestroy 61234 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 24)) = echoOpen 61235 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 28)) = echoClose 61236 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 32)) = echoFilter 61237 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 36)) = echoNext 61238 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 40)) = echoEof 61239 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 44)) = echoColumn 61240 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 48)) = echoRowid 61241 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 52)) = echoUpdate 61242 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 56)) = echoBegin 61243 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 60)) = echoSync 61244 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 64)) = echoCommit 61245 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 68)) = echoRollback 61246 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 72)) = echoFindFunction 61247 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 76)) = echoRename 61248 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 4)) = echoCreate 61249 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 8)) = echoConnect 61250 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 12)) = echoBestIndex 61251 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 16)) = echoDisconnect 61252 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 20)) = echoDestroy 61253 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 24)) = echoOpen 61254 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 28)) = echoClose 61255 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 32)) = echoFilter 61256 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 36)) = echoNext 61257 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 40)) = echoEof 61258 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 44)) = echoColumn 61259 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 48)) = echoRowid 61260 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 52)) = echoUpdate 61261 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 56)) = echoBegin 61262 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 60)) = echoSync 61263 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 64)) = echoCommit 61264 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 68)) = echoRollback 61265 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 72)) = echoFindFunction 61266 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 76)) = echoRename 61267 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 80)) = echoSavepoint 61268 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 84)) = echoRelease 61269 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 88)) = echoRollbackTo 61270 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 4)) = expertConnect 61271 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 8)) = expertConnect 61272 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 12)) = expertBestIndex 61273 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 16)) = expertDisconnect 61274 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 20)) = expertDisconnect 61275 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 24)) = expertOpen 61276 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 28)) = expertClose 61277 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 32)) = expertFilter 61278 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 36)) = expertNext 61279 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 40)) = expertEof 61280 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 44)) = expertColumn 61281 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 48)) = expertRowid 61282 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 52)) = expertUpdate 61283 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 8)) = explainConnect 61284 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 12)) = explainBestIndex 61285 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 16)) = explainDisconnect 61286 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 24)) = explainOpen 61287 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 28)) = explainClose 61288 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 32)) = explainFilter 61289 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 36)) = explainNext 61290 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 40)) = explainEof 61291 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 44)) = explainColumn 61292 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 48)) = explainRowid 61293 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 4)) = fsConnect 61294 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 8)) = fsConnect 61295 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 12)) = fsBestIndex 61296 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 16)) = fsDisconnect 61297 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 20)) = fsDisconnect 61298 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 24)) = fsOpen 61299 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 28)) = fsClose 61300 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 32)) = fsFilter 61301 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 36)) = fsNext 61302 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 40)) = fsEof 61303 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 44)) = fsColumn 61304 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 48)) = fsRowid 61305 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 4)) = fsClose1 61306 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 8)) = fsRead 61307 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 12)) = fsWrite 61308 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 16)) = fsTruncate 61309 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 20)) = fsSync 61310 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 24)) = fsFileSize 61311 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 28)) = fsLock 61312 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 32)) = fsUnlock 61313 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 36)) = fsCheckReservedLock 61314 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 40)) = fsFileControl 61315 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 44)) = fsSectorSize 61316 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 48)) = fsDeviceCharacteristics 61317 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 24)) = fsOpen1 61318 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 28)) = fsDelete 61319 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 32)) = fsAccess 61320 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 36)) = fsFullPathname 61321 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 40)) = fsDlOpen 61322 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 44)) = fsDlError 61323 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 48)) = fsDlSym 61324 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 52)) = fsDlClose 61325 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 56)) = fsRandomness 61326 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 60)) = fsSleep 61327 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 64)) = fsCurrentTime 61328 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 4)) = fsdirConnect1 61329 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 8)) = fsdirConnect1 61330 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 12)) = fsdirBestIndex1 61331 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 16)) = fsdirDisconnect1 61332 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 20)) = fsdirDisconnect1 61333 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 24)) = fsdirOpen1 61334 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 28)) = fsdirClose1 61335 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 32)) = fsdirFilter1 61336 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 36)) = fsdirNext1 61337 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 40)) = fsdirEof1 61338 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 44)) = fsdirColumn1 61339 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 48)) = fsdirRowid1 61340 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 8)) = fsdirConnect 61341 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 12)) = fsdirBestIndex 61342 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 16)) = fsdirDisconnect 61343 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 24)) = fsdirOpen 61344 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 28)) = fsdirClose 61345 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 32)) = fsdirFilter 61346 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 36)) = fsdirNext 61347 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 40)) = fsdirEof 61348 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 44)) = fsdirColumn 61349 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 48)) = fsdirRowid 61350 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 4)) = fstreeConnect 61351 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 8)) = fstreeConnect 61352 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 12)) = fstreeBestIndex 61353 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 16)) = fstreeDisconnect 61354 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 20)) = fstreeDisconnect 61355 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 24)) = fstreeOpen 61356 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 28)) = fstreeClose 61357 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 32)) = fstreeFilter 61358 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 36)) = fstreeNext 61359 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 40)) = fstreeEof 61360 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 44)) = fstreeColumn 61361 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 48)) = fstreeRowid 61362 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 4)) = fts5tokConnectMethod 61363 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 8)) = fts5tokConnectMethod 61364 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 12)) = fts5tokBestIndexMethod 61365 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 16)) = fts5tokDisconnectMethod 61366 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 20)) = fts5tokDisconnectMethod 61367 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 24)) = fts5tokOpenMethod 61368 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 28)) = fts5tokCloseMethod 61369 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 32)) = fts5tokFilterMethod 61370 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 36)) = fts5tokNextMethod 61371 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 40)) = fts5tokEofMethod 61372 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 44)) = fts5tokColumnMethod 61373 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 48)) = fts5tokRowidMethod 61374 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 4)) = fuzzerConnect 61375 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 8)) = fuzzerConnect 61376 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 12)) = fuzzerBestIndex 61377 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 16)) = fuzzerDisconnect 61378 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 20)) = fuzzerDisconnect 61379 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 24)) = fuzzerOpen 61380 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 28)) = fuzzerClose 61381 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 32)) = fuzzerFilter 61382 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 36)) = fuzzerNext 61383 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 40)) = fuzzerEof 61384 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 44)) = fuzzerColumn 61385 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 48)) = fuzzerRowid 61386 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 4)) = intarrayCreate 61387 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 8)) = intarrayCreate 61388 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 12)) = intarrayBestIndex 61389 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 16)) = intarrayDestroy 61390 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 20)) = intarrayDestroy 61391 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 24)) = intarrayOpen 61392 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 28)) = intarrayClose 61393 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 32)) = intarrayFilter 61394 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 36)) = intarrayNext 61395 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 40)) = intarrayEof 61396 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 44)) = intarrayColumn 61397 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 48)) = intarrayRowid 61398 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 4)) = jtClose 61399 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 8)) = jtRead 61400 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 12)) = jtWrite 61401 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 16)) = jtTruncate 61402 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 20)) = jtSync 61403 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 24)) = jtFileSize 61404 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 28)) = jtLock 61405 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 32)) = jtUnlock 61406 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 36)) = jtCheckReservedLock 61407 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 40)) = jtFileControl 61408 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 44)) = jtSectorSize 61409 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 48)) = jtDeviceCharacteristics 61410 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 24)) = jtOpen 61411 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 28)) = jtDelete 61412 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 32)) = jtAccess 61413 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 36)) = jtFullPathname 61414 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 40)) = jtDlOpen 61415 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 44)) = jtDlError 61416 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 48)) = jtDlSym 61417 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 52)) = jtDlClose 61418 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 56)) = jtRandomness 61419 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 60)) = jtSleep 61420 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 64)) = jtCurrentTime 61421 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 68)) = jtGetLastError 61422 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 72)) = jtCurrentTimeInt64 61423 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 8)) = prefixesConnect 61424 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 12)) = prefixesBestIndex 61425 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 16)) = prefixesDisconnect 61426 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 24)) = prefixesOpen 61427 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 28)) = prefixesClose 61428 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 32)) = prefixesFilter 61429 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 36)) = prefixesNext 61430 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 40)) = prefixesEof 61431 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 44)) = prefixesColumn 61432 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 48)) = prefixesRowid 61433 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&pzNeededCollation)) + 0)) = uintptr(unsafe.Pointer(&zNeededCollation)) 61434 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 8)) = qpvtabConnect 61435 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 12)) = qpvtabBestIndex 61436 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 16)) = qpvtabDisconnect 61437 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 24)) = qpvtabOpen 61438 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 28)) = qpvtabClose 61439 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 32)) = qpvtabFilter 61440 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 36)) = qpvtabNext 61441 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 40)) = qpvtabEof 61442 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 44)) = qpvtabColumn 61443 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 48)) = qpvtabRowid 61444 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 4)) = schemaCreate 61445 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 8)) = schemaCreate 61446 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 12)) = schemaBestIndex 61447 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 16)) = schemaDestroy 61448 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 20)) = schemaDestroy 61449 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 24)) = schemaOpen 61450 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 28)) = schemaClose 61451 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 32)) = schemaFilter 61452 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 36)) = schemaNext 61453 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 40)) = schemaEof 61454 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 44)) = schemaColumn 61455 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 48)) = schemaRowid 61456 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 8)) = seriesConnect 61457 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 12)) = seriesBestIndex 61458 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 16)) = seriesDisconnect 61459 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 24)) = seriesOpen 61460 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 28)) = seriesClose 61461 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 32)) = seriesFilter 61462 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 36)) = seriesNext 61463 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 40)) = seriesEof 61464 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 44)) = seriesColumn 61465 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 48)) = seriesRowid 61466 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 4)) = spellfix1Create 61467 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 8)) = spellfix1Connect 61468 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 12)) = spellfix1BestIndex 61469 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 16)) = spellfix1Disconnect 61470 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 20)) = spellfix1Destroy 61471 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 24)) = spellfix1Open 61472 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 28)) = spellfix1Close 61473 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 32)) = spellfix1Filter 61474 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 36)) = spellfix1Next 61475 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 40)) = spellfix1Eof 61476 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 44)) = spellfix1Column 61477 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 48)) = spellfix1Rowid 61478 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 52)) = spellfix1Update 61479 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 76)) = spellfix1Rename 61480 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 4)) = tclConnect 61481 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 8)) = tclConnect 61482 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 12)) = tclBestIndex 61483 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 16)) = tclDisconnect 61484 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 20)) = tclDisconnect 61485 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 24)) = tclOpen 61486 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 28)) = tclClose 61487 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 32)) = tclFilter 61488 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 36)) = tclNext 61489 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 40)) = tclEof 61490 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 44)) = tclColumn 61491 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 48)) = tclRowid 61492 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 4)) = tclvarConnect 61493 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 8)) = tclvarConnect 61494 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 12)) = tclvarBestIndex 61495 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 16)) = tclvarDisconnect 61496 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 20)) = tclvarDisconnect 61497 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 24)) = tclvarOpen 61498 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 28)) = tclvarClose 61499 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 32)) = tclvarFilter 61500 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 36)) = tclvarNext 61501 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 40)) = tclvarEof 61502 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 44)) = tclvarColumn 61503 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 48)) = tclvarRowid 61504 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 52)) = tclvarUpdate 61505 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 4)) = uintptr(unsafe.Pointer(&testpcacheGlobal)) 61506 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 8)) = testpcacheInit 61507 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 12)) = testpcacheShutdown 61508 *(*func(*libc.TLS, int32, int32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 16)) = testpcacheCreate 61509 *(*func(*libc.TLS, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 20)) = testpcacheCachesize 61510 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 24)) = testpcachePagecount 61511 *(*func(*libc.TLS, uintptr, uint32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 28)) = testpcacheFetch 61512 *(*func(*libc.TLS, uintptr, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 32)) = testpcacheUnpin 61513 *(*func(*libc.TLS, uintptr, uintptr, uint32, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 36)) = testpcacheRekey 61514 *(*func(*libc.TLS, uintptr, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 40)) = testpcacheTruncate 61515 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 44)) = testpcacheDestroy 61516 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 4)) = tmpClose 61517 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 8)) = tmpRead 61518 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 12)) = tmpWrite 61519 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 16)) = tmpTruncate 61520 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 20)) = tmpSync 61521 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 24)) = tmpFileSize 61522 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 28)) = tmpLock 61523 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 32)) = tmpUnlock 61524 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 36)) = tmpCheckReservedLock 61525 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 40)) = tmpFileControl 61526 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 44)) = tmpSectorSize 61527 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 48)) = tmpDeviceCharacteristics 61528 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 4)) = tvfsClose 61529 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 8)) = tvfsRead 61530 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 12)) = tvfsWrite 61531 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 16)) = tvfsTruncate 61532 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 20)) = tvfsSync 61533 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 24)) = tvfsFileSize 61534 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 28)) = tvfsLock 61535 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 32)) = tvfsUnlock 61536 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 36)) = tvfsCheckReservedLock 61537 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 40)) = tvfsFileControl 61538 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 44)) = tvfsSectorSize 61539 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 48)) = tvfsDeviceCharacteristics 61540 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 52)) = tvfsShmMap 61541 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 56)) = tvfsShmLock 61542 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 60)) = tvfsShmBarrier 61543 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 64)) = tvfsShmUnmap 61544 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 68)) = tvfsFetch 61545 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 72)) = tvfsUnfetch 61546 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 24)) = tvfsOpen 61547 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 28)) = tvfsDelete 61548 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 32)) = tvfsAccess 61549 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 36)) = tvfsFullPathname 61550 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 56)) = tvfsRandomness 61551 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 60)) = tvfsSleep 61552 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 64)) = tvfsCurrentTime 61553 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 4)) = unionConnect 61554 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 8)) = unionConnect 61555 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 12)) = unionBestIndex 61556 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 16)) = unionDisconnect 61557 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 20)) = unionDisconnect 61558 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 24)) = unionOpen 61559 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 28)) = unionClose 61560 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 32)) = unionFilter 61561 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 36)) = unionNext 61562 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 40)) = unionEof 61563 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 44)) = unionColumn 61564 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 48)) = unionRowid 61565 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 4)) = vfslogClose 61566 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 8)) = vfslogRead 61567 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 12)) = vfslogWrite 61568 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 16)) = vfslogTruncate 61569 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 20)) = vfslogSync 61570 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 24)) = vfslogFileSize 61571 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 28)) = vfslogLock 61572 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 32)) = vfslogUnlock 61573 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 36)) = vfslogCheckReservedLock 61574 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 40)) = vfslogFileControl 61575 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 44)) = vfslogSectorSize 61576 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 48)) = vfslogDeviceCharacteristics 61577 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 52)) = vfslogShmMap 61578 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 56)) = vfslogShmLock 61579 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 60)) = vfslogShmBarrier 61580 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 64)) = vfslogShmUnmap 61581 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 4)) = vlogConnect 61582 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 8)) = vlogConnect 61583 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 12)) = vlogBestIndex 61584 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 16)) = vlogDisconnect 61585 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 20)) = vlogDisconnect 61586 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 24)) = vlogOpen 61587 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 28)) = vlogClose 61588 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 32)) = vlogFilter 61589 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 36)) = vlogNext 61590 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 40)) = vlogEof 61591 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 44)) = vlogColumn 61592 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 48)) = vlogRowid 61593 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 24)) = vfslogOpen 61594 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 28)) = vfslogDelete 61595 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 32)) = vfslogAccess 61596 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 36)) = vfslogFullPathname 61597 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 40)) = vfslogDlOpen 61598 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 44)) = vfslogDlError 61599 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 48)) = vfslogDlSym 61600 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 52)) = vfslogDlClose 61601 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 56)) = vfslogRandomness 61602 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 60)) = vfslogSleep 61603 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 64)) = vfslogCurrentTime 61604 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 68)) = vfslogGetLastError 61605 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 72)) = vfslogCurrentTimeInt64 61606 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 4)) = wholenumberConnect 61607 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 8)) = wholenumberConnect 61608 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 12)) = wholenumberBestIndex 61609 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 16)) = wholenumberDisconnect 61610 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 20)) = wholenumberDisconnect 61611 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 24)) = wholenumberOpen 61612 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 28)) = wholenumberClose 61613 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 32)) = wholenumberFilter 61614 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 36)) = wholenumberNext 61615 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 40)) = wholenumberEof 61616 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 44)) = wholenumberColumn 61617 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 48)) = wholenumberRowid 61618 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 4)) = devsymClose 61619 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 8)) = devsymRead 61620 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 12)) = writecrashWrite 61621 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 16)) = devsymTruncate 61622 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 20)) = devsymSync 61623 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 24)) = devsymFileSize 61624 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 28)) = devsymLock 61625 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 32)) = devsymUnlock 61626 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 36)) = devsymCheckReservedLock 61627 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 40)) = devsymFileControl 61628 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 44)) = writecrashSectorSize 61629 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 48)) = writecrashDeviceCharacteristics 61630 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 52)) = devsymShmMap 61631 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 56)) = devsymShmLock 61632 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 60)) = devsymShmBarrier 61633 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 64)) = devsymShmUnmap 61634 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 24)) = writecrashOpen 61635 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 28)) = devsymDelete 61636 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 32)) = devsymAccess 61637 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 36)) = devsymFullPathname 61638 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 56)) = devsymRandomness 61639 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 60)) = devsymSleep 61640 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 64)) = devsymCurrentTime 61641 } 61642 61643 var ts1 = "%s\x00internal error!\x00SELECT * FROM main.%Q WHERE sample()\x00expert\x00PRAGMA table_xinfo=%Q\x00main\x00binary\x00, \x00%Q\x00 COLLATE %Q\x00 COLLATE %s\x00 DESC\x00PRAGMA index_list=%Q\x00PRAGMA index_xInfo=%Q\x00%s_idx_%08x\x00SELECT count(*) FROM sqlite_schema WHERE name=%Q AND type in ('index','table','view')\x00CREATE INDEX \"%w\" ON \"%w\"(%s)\x00CREATE INDEX %s ON %s(%s)\x00EXPLAIN QUERY PLAN %s\x00 USING INDEX \x00 USING COVERING INDEX \x00%s\n\x00%s;\n\x00SELECT 'CREATE TEMP' || substr(sql, 7) FROM sqlite_schema WHERE tbl_name = %Q AND type IN ('table', 'trigger') ORDER BY type;\x00ALTER TABLE temp.%Q RENAME TO %Q\x00INSERT INTO %Q VALUES(\x00%s?\x00\x00)\x00UPDATE %Q SET \x00%s%Q=?\x00DELETE FROM %Q\x00t592690916721053953805701627921227776\x00DROP TABLE t592690916721053953805701627921227776\x00SELECT type, name, sql, 1 FROM sqlite_schema WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%%' UNION ALL SELECT type, name, sql, 2 FROM sqlite_schema WHERE type = 'trigger' AND tbl_name IN(SELECT name FROM sqlite_schema WHERE type = 'view') ORDER BY 4, 1\x00CREATE TABLE x(\x00%s%Q COLLATE %s\x00CREATE VIRTUAL TABLE %Q USING expert(%Q)\x00SELECT max(i.seqno) FROM sqlite_schema AS s, pragma_index_list(s.name) AS l, pragma_index_info(l.name) AS i WHERE s.type = 'table'\x00%sx.%Q IS rem(%d, x.%Q) COLLATE %s\x00%s%d\x00SELECT %s FROM %Q x ORDER BY %s\x00SELECT %s FROM temp.t592690916721053953805701627921227776 x ORDER BY %s\x00%d\x00 %d\x00DROP TABLE IF EXISTS temp.t592690916721053953805701627921227776\x00CREATE TABLE temp.t592690916721053953805701627921227776 AS SELECT * FROM %Q\x00SELECT s.rowid, s.name, l.name FROM sqlite_schema AS s, pragma_index_list(s.name) AS l WHERE s.type = 'table'\x00SELECT name, coll FROM pragma_index_xinfo(?) WHERE key\x00INSERT INTO sqlite_stat1 VALUES(?, ?, ?)\x00ANALYZE; PRAGMA writable_schema=1\x00rem\x00sample\x00ANALYZE sqlite_schema\x00:memory:\x00SELECT sql FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%%' AND sql NOT LIKE 'CREATE VIRTUAL %%'\x00Cannot find a unique index name to propose.\x00%s;%s%s\n\x00 -- stat1: \x00no such handle: \x00sql\x00TABLE\x00analyze\x00count\x00report\x00STMT EREPORT\x00destroy\x00SUBCOMMAND ...\x00sub-command\x00indexes\x00plan\x00candidates\x00DB\x00sqlite3expert%d\x00out of memory\x00sqlite3_expert_new\x00SQLITE_DONE\x00SQLITE_ERROR\x00SQLITE_OK\x00SELECT fts5(?1)\x00error: \x00fts5_api_ptr\x00f5t_2_%lld\x00xColumnCount\x00xRowCount\x00xColumnTotalSize\x00COL\x00xTokenize\x00TEXT SCRIPT\x00xPhraseCount\x00xPhraseSize\x00PHRASE\x00xInstCount\x00xInst\x00IDX\x00xRowid\x00xColumnText\x00xColumnSize\x00xQueryPhrase\x00PHRASE SCRIPT\x00xSetAuxdata\x00VALUE\x00xGetAuxdata\x00CLEAR\x00xSetAuxdataInt\x00INTEGER\x00xGetAuxdataInt\x00xPhraseForeach\x00IPHRASE COLVAR OFFVAR SCRIPT\x00xPhraseColumnForeach\x00IPHRASE COLVAR SCRIPT\x00SUB-COMMAND\x00f5t_%lld\x00bytearray\x00boolean\x00double\x00wideInt\x00int\x00DB NAME SCRIPT\x00?-subst? DB NAME TEXT\x00-subst\x00unrecognized option: \x00no such tokenizer: \x00error in tokenizer.xCreate()\x00error in tokenizer.xTokenize()\x00document\x00aux\x00query\x00prefixquery\x00invalid\x00-colocated\x00sqlite3_fts5_token may only be used by tokenizer callback\x00?-colocated? TEXT START END\x00error in fts5_api.xCreateTokenizer()\x00NSLOT TOKEN\x00sqlite3_fts5_create_tokenizer\x00sqlite3_fts5_token\x00sqlite3_fts5_tokenize\x00sqlite3_fts5_create_function\x00sqlite3_fts5_may_be_corrupt\x00sqlite3_fts5_token_hash\x00sqlite3_fts5_register_matchinfo\x00sqlite3_fts5_register_fts5tokenize\x00unrecognized matchinfo flag: %c\x00pcx\x00matchinfo\x00CREATE TABLE x(input HIDDEN, token, start, end, position)\x00fts5tokenize\x00apndvfs\x00Start-Of-SQLite3-\x00apnd(%lld)/%z\x00SQLite format 3\x00%s: cost must be between 1 and %d\x00%s: maximum string length is %d\x00%s: iLang must be between 0 and %d\x00?\x00SELECT * FROM %Q.%Q\x00%s: %s\x00%s: %s has %d columns, expected 4\x00vocabulary_table\x00vocabulary_word\x00vocabulary_language\x00edit_distances\x00unrecognized argument: [%s]\n\x00no edit_distances table specified\x00CREATE TABLE x(word,distance,language,command HIDDEN,nword HIDDEN)\x000123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^abcdefghijklmnopqrstuvwxyz~\x00SELECT \"%w\" FROM \"%w\"\x00 WHERE \"%w\">=?1 AND \"%w\"=?2 ORDER BY 1\x00SELECT \"%w\" FROM \"%w\" WHERE \"%w\">=?1 ORDER BY 1\x00*\x00DELETE from %s is not allowed\x00UPDATE of %s is not allowed\x00INSERT INTO %s allowed for column [command] only\x00approximate_match\x00int32\x00int64\x00char*\x00CREATE TABLE x(value,pointer hidden,count hidden,ctype hidden)\x00carray-bind\x00carray\x00unknown datatype: %Q\x00inttoptr\x00cksmvfs\x00ZV-\x00checksum fault offset %lld of \"%s\"\x00checksum_verification\x00enable%\x00yes\x00on\x00page_size\x00cksm/%z\x00verify_checksum\x00tablename\x00idcolumn\x00parentcolumn\x00CREATE TABLE x(id,depth,root HIDDEN,tablename HIDDEN,idcolumn HIDDEN,parentcolumn HIDDEN)\x00SELECT \"%w\".\"%w\" FROM \"%w\" WHERE \"%w\".\"%w\"=?1\x00transitive_closure\x00rb\x00cannot open '%s' for reading\x00line %d: unescaped %c character\x00line %d: unterminated %c-quoted field\n\x00more than one '%s' parameter\x00true\x00no\x00off\x00false\x00header\x00more than one 'header' parameter\x00testflags\x00columns\x00more than one 'columns' parameter\x00column= value must be positive\x00bad parameter: '%s'\x00must specify either filename= or data= but not both\x00%sc%d TEXT\x00,\x00%s\"%w\" TEXT\x00bad schema: '%s' - %s\x00filename\x00data\x00schema\x00csv\x00csv_wr\x00decimal_sum\x00decimal\x00decimal_cmp\x00decimal_add\x00decimal_sub\x00decimal_mul\x00 \x00eval\x00CREATE TABLE x(addr,opcode,p1,p2,p3,p4,p5,comment,sql HIDDEN)\x00EXPLAIN %s\x00explain\x00wb\x00wrong number of arguments to function writefile()\x00failed to create symlink: %s\x00failed to create directory: %s\x00failed to write file: %s\x00CREATE TABLE x(name,mode,mtime,data,path HIDDEN,dir HIDDEN)\x00cannot read directory: %s\x00%s/%s\x00cannot stat file: %s\x00table function fsdir requires an argument\x00table function fsdir requires a non-NULL argument\x00fsdir\x00readfile\x00writefile\x00lsmode\x00%s: ruleset must be between 0 and %d\x00%s: wrong number of CREATE VIRTUAL TABLE arguments\x00CREATE TABLE x(word,distance,ruleset)\x00fuzzer\x00ieee754(%lld,%d)\x00ieee754\x00ieee754_mantissa\x00ieee754_exponent\x00ieee754_to_blob\x00ieee754_from_blob\x00BEGIN; SELECT * FROM %s%q%ssqlite_schema\x00'\x00'.\x00PRAGMA %s%q%spage_size\x00sqlite3_mmap_warm_cache: Warmed up %d pages of %s\x00END\x00AND (%s)\x00collate \"%w\"\x00SELECT %s FROM %s WHERE %s>=(?1 || ?2) %s AND %s<=(?1 || char(1114111)) %s %s ORDER BY 1 %s ASC LIMIT 1\x00next_char\x00NULL\x00is\x00not\x00in(\x00in(select\x00in(with\x00?,?,?\x002nd argument to percentile() is not a number between 0.0 and 100.0\x002nd argument to percentile() is not the same for all input rows\x001st argument to percentile() is not numeric\x00Inf input to percentile()\x00percentile\x00CREATE TABLE prefixes(prefix TEXT, original_string TEXT HIDDEN)\x00prefixes\x00prefix_length\x00vn\x00ix\x00cn\x00op\x00ux\x00rhs\x00a\x00b\x00c\x00d\x00e\x00flags\x00CREATE TABLE x( vn TEXT, ix INT, cn TEXT, op INT, ux BOOLEAN, rhs TEXT, a, b, c, d, e, flags INT HIDDEN)\x00%lld\x00%!f\x00x'\x00%02x\x00nConstraint,%d,,,,\n\x00aConstraint,%d,%s,%d,%d,\x00\n\x00nOrderBy,%d,,,,\n\x00aOrderBy,%d,%s,%d,,\n\x00rowid\x00sqlite3_vtab_distinct,%d,,,,\n\x00idxFlags,%d,,,,\n\x00colUsed,%d,,,,\n\x00idxNum,%d,,,,\n\x00orderByConsumed,%d,,,,\n\x00qpvtab\x00unknown \\ escape\x00afnrtv\\()*.+?[$^{|}]\x00\a\f\n\r\t\v\x00unmatched '('\x00'*' without operand\x00'+' without operand\x00'?' without operand\x00'{m,n}' without operand\x00unmatched '{'\x00n less than m in '{m,n}'\x00both m and n are zero in '{m,n}'\x00POSIX character classes not supported\x00unclosed '['\x00unrecognized character\x00regexp\x00regexpi\x00remember\x00CREATE TABLE x(value,start hidden,stop hidden,step hidden)\x00first argument to \"generate_series()\" missing or unusable\x00generate_series() requires SQLite 3.8.12 or later\x00generate_series\x00.ABCDHLRMY9 ?\x00non-ASCII input to editdist()\x00NULL input to editdist()\x00SELECT iLang, cFrom, cTo, iCost FROM \"%w\" WHERE iLang>=0 ORDER BY iLang\x00editdist3\x00DROP TABLE IF EXISTS \"%w\".\"%w_vocab\"\x00CREATE TABLE x(word,rank,distance,langid, score, matchlen, phonehash HIDDEN, top HIDDEN, scope HIDDEN, srchcnt HIDDEN, soundslike HIDDEN, command HIDDEN)\x00CREATE TABLE IF NOT EXISTS \"%w\".\"%w_vocab\"(\n id INTEGER PRIMARY KEY,\n rank INT,\n langid INT,\n word TEXT,\n k1 TEXT,\n k2 TEXT\n);\n\x00CREATE INDEX IF NOT EXISTS \"%w\".\"%w_vocab_index_langid_k2\" ON \"%w_vocab\"(langid,k2);\x00edit_cost_table=\x00bad argument to spellfix1(): \"%s\"\x00SELECT id, word, rank, coalesce(k1,word) FROM \"%w\".\"%w_vocab\" WHERE langid=%d AND k2>=?1 AND k2<?2\x00SELECT word, rank, NULL, langid, id FROM \"%w\".\"%w_vocab\"%s\x00 WHERE rowid=?\x00ROLLBACK\x00IGNORE\x00ABORT\x00REPLACE\x00DELETE FROM \"%w\".\"%w_vocab\" WHERE id=%lld\x00NOT NULL constraint failed: %s.word\x00reset\x00null\x00unknown value for %s.command: \"%w\"\x00INSERT INTO \"%w\".\"%w_vocab\"(rank,langid,word,k1,k2) VALUES(%d,%d,%Q,nullif(%Q,%Q),%Q)\x00INSERT OR %s INTO \"%w\".\"%w_vocab\"(id,rank,langid,word,k1,k2) VALUES(%lld,%d,%d,%Q,nullif(%Q,%Q),%Q)\x00UPDATE OR %s \"%w\".\"%w_vocab\" SET id=%lld, rank=%d, langid=%d, word=%Q, k1=nullif(%Q,%Q), k2=%Q WHERE id=%lld\x00ALTER TABLE \"%w\".\"%w_vocab\" RENAME TO \"%w_vocab\"\x00spellfix1_translit\x00spellfix1_editdist\x00spellfix1_phonehash\x00spellfix1_scriptcode\x00spellfix1\x00922337203685477580\x00tointeger\x00toreal\x00sql error: %s\x00_rowid_\x00integer\x00no such rowid table: %s%s%s\x00.\x00SELECT group_concat(quote(name) || '.' || quote(type)) FROM pragma_table_info(?, ?)\x00source table schema mismatch\x00swarmvtab: no such SQL parameter: %s\x00maxopen\x00swarmvtab: illegal maxopen value\x00missing\x00swarmvtab: duplicate \"missing\" option\x00SELECT \"%w\"(?%s)\x00,?\x00openclose\x00swarmvtab: duplicate \"openclose\" option\x00SELECT \"%w\"(?,?%s)\x00swarmvtab: unrecognized option: %s\x00SELECT \"%w\"(?)\x00swarmvtab: parse error: %s\x00swarmvtab\x00unionvtab\x00temp\x00%s tables must be created in TEMP schema\x00wrong number of arguments for %s\x00SELECT * FROM (%z) ORDER BY 3\x00rowid range mismatch error\x00no source tables configured\x00SELECT 'CREATE TABLE xyz(' || group_concat(quote(name) || ' ' || type, ', ') || ')',max((cid+1) * (type='INTEGER' COLLATE nocase AND pk=1))-1 FROM pragma_table_info(%Q, ?)\x00SELECT rowid, * FROM %Q %s %lld\x00WHERE _rowid_ <=\x00-- \x00%z%sSELECT rowid, * FROM %s%q%s%Q\x00 UNION ALL \x00%z WHERE rowid=%lld\x00WHERE\x00%z WHERE rowid>=%lld\x00AND\x00%z %s rowid<=%lld\x00CREATE TABLE x(value)\x00wholenumber\x00rbu_delta\x00step\x00close\x00create_rbu_delta\x00savestate\x00dbMain_eval\x00SQL\x00bp_progress\x00db\x00RBU\x00state\x00progress\x00close_no_error\x00temp_size_limit\x00LIMIT\x00temp_size\x00dbRbu_eval\x00METHOD\x00method\x00 - \x00oal\x00move\x00checkpoint\x00done\x00error\x00NAME TARGET-DB RBU-DB ?STATE-DB?\x00NAME TARGET-DB ?STATE-DB?\x00?-default? NAME PARENT\x00NAME\x00sqlite3rbu_db(0, 0)!=0\x00sqlite3rbu\x00sqlite3rbu_vacuum\x00sqlite3rbu_create_vfs\x00sqlite3rbu_destroy_vfs\x00sqlite3rbu_internal_test\x00%p\x00zero\x00user\x00user_is_zero\x00box\x00DB SCRIPT\x00partly\x00fully\x00aParam\x00aCoord\x00anQueue\x00iLevel\x00mxLevel\x00iRowid\x00rParentScore\x00eParentWithin\x00value\x00qbox\x00register_box_geom\x00register_box_query\x00DB SQL\x00error in sql_exec_changeset()\x00sqlite3session_streams\x00attach\x00changeset\x00delete\x00enable\x00BOOL\x00indirect\x00isempty\x00table_filter\x00SCRIPT\x00patchset\x00diff\x00FROMDB TBL\x00memory_used\x00changeset_size\x00object_config_size\x00CMD DB-HANDLE DB-NAME\x00n\x00i\x00f\x00t\x00FOREIGN_KEY\x00INSERT\x00UPDATE\x00DELETE\x00DATA\x00NOTFOUND\x00CONFLICT\x00CONSTRAINT\x00OMIT\x00-nosavepoint\x00-invert\x00?-nosavepoint? ?-inverse? DB CHANGESET CONFLICT-SCRIPT ?FILTER-SCRIPT?\x00DB CHANGESET CONFLICT-SCRIPT ?FILTER-SCRIPT?\x00DB CHANGESET\x00CHANGESET\x00LEFT RIGHT\x00-next\x00?-next? ?-invert? VARNAME CHANGESET SCRIPT\x00configure\x00REBASE-BLOB\x00rebase\x00OP VALUE\x00strm_size\x00sqlite3session\x00sqlite3session_foreach\x00sqlite3changeset_invert\x00sqlite3changeset_concat\x00sqlite3changeset_apply\x00sqlite3changeset_apply_v2\x00sqlite3changeset_apply_replace_all\x00sql_exec_changeset\x00sqlite3rebaser_create\x00sqlite3session_config\x00incrblob\x00incrblob_%d\x00sqlite_unlock_notify_arg\x00sqlite_unlock_notify_argcount\x00SQLITE_COPY\x00SQLITE_CREATE_INDEX\x00SQLITE_CREATE_TABLE\x00SQLITE_CREATE_TEMP_INDEX\x00SQLITE_CREATE_TEMP_TABLE\x00SQLITE_CREATE_TEMP_TRIGGER\x00SQLITE_CREATE_TEMP_VIEW\x00SQLITE_CREATE_TRIGGER\x00SQLITE_CREATE_VIEW\x00SQLITE_DELETE\x00SQLITE_DROP_INDEX\x00SQLITE_DROP_TABLE\x00SQLITE_DROP_TEMP_INDEX\x00SQLITE_DROP_TEMP_TABLE\x00SQLITE_DROP_TEMP_TRIGGER\x00SQLITE_DROP_TEMP_VIEW\x00SQLITE_DROP_TRIGGER\x00SQLITE_DROP_VIEW\x00SQLITE_INSERT\x00SQLITE_PRAGMA\x00SQLITE_READ\x00SQLITE_SELECT\x00SQLITE_TRANSACTION\x00SQLITE_UPDATE\x00SQLITE_ATTACH\x00SQLITE_DETACH\x00SQLITE_ALTER_TABLE\x00SQLITE_REINDEX\x00SQLITE_ANALYZE\x00SQLITE_CREATE_VTABLE\x00SQLITE_DROP_VTABLE\x00SQLITE_FUNCTION\x00SQLITE_SAVEPOINT\x00SQLITE_RECURSIVE\x00????\x00SQLITE_DENY\x00SQLITE_IGNORE\x00RELEASE _tcl_transaction\x00COMMIT\x00ROLLBACK TO _tcl_transaction ; RELEASE _tcl_transaction\x00option\x00?CALLBACK?\x00?DATABASE? FILENAME\x00cannot open target database: \x00backup failed: \x00CALLBACK\x00cache option ?arg?\x00flush\x00size\x00size n\x00cannot convert \"\x00\" to integer\x00bad option \"\x00\": must be flush or size\x00NAME SCRIPT\x00?OPTION? ?BOOLEAN?\x00unknown config option: \"\x00\"\x00CONFLICT-ALGORITHM TABLE FILENAME ?SEPARATOR? ?NULLINDICATOR?\x00\t\x00Error: non-null separator required for copy\x00rollback\x00abort\x00fail\x00ignore\x00replace\x00Error: \"\x00\", conflict-algorithm must be one of: rollback, abort, fail, ignore, or replace\x00SELECT * FROM '%q'\x00Error: no such table: \x00Error: \x00Error: can't malloc()\x00INSERT OR %q INTO '%q' VALUES(?\x00Error: cannot open file: \x00BEGIN\x00Error: %s line %d: expected %d columns of data but found %d\x00, failed while processing line: \x00?DATABASE? VALUE\x00-maxsize\x00-readonly\x00unknown option: \x00unable to set MEMDB content\x00extension loading is turned off at compile-time\x00-withoutnulls\x00unknown option: \"\x00?OPTIONS? SQL ?ARRAY-NAME? ?SCRIPT?\x00NAME ?SWITCHES? SCRIPT\x00-argcount\x00option requires an argument: \x00number of arguments must be non-negative\x00-deterministic\x00-directonly\x00-innocuous\x00-returntype\x00real\x00text\x00blob\x00any\x00type\x00\": must be -argcount, -deterministic, -directonly, -innocuous, or -returntype\x00?-readonly? ?DB? TABLE COLUMN ROWID\x00NULLVALUE\x00N CALLBACK\x00KEY\x00cannot open source database: \x00restore failed: \x00restore failed: source database busy\x00?DATABASE?\x00(step|sort|autoindex)\x00sort\x00autoindex\x00vmstep\x00bad argument: should be autoindex, step, sort or vmstep\x00MILLISECONDS\x00?CALLBACK? ?MASK?\x00trace type\x00SAVEPOINT _tcl_transaction\x00[TYPE] SCRIPT\x00transaction type\x00BEGIN EXCLUSIVE\x00BEGIN IMMEDIATE\x00?SCRIPT?\x00SUB-COMMAND ?ARGS?\x00hook ?SCRIPT?\x00INDEX\x00-use-legacy-prepare\x00-last-stmt-ptr\x00unknown argument: \x00authorizer\x00backup\x00bind_fallback\x00busy\x00cache\x00changes\x00collate\x00collation_needed\x00commit_hook\x00complete\x00config\x00copy\x00deserialize\x00enable_load_extension\x00errorcode\x00erroroffset\x00exists\x00function\x00interrupt\x00last_insert_rowid\x00nullvalue\x00onecolumn\x00preupdate\x00profile\x00rekey\x00restore\x00rollback_hook\x00serialize\x00status\x00timeout\x00total_changes\x00trace\x00trace_v2\x00transaction\x00unlock_notify\x00update_hook\x00version\x00wal_hook\x00defensive\x00dqs_ddl\x00dqs_dml\x00enable_fkey\x00enable_qpsg\x00enable_trigger\x00enable_view\x00fts3_tokenizer\x00legacy_alter_table\x00legacy_file_format\x00load_extension\x00no_ckpt_on_close\x00reset_database\x00trigger_eqp\x00trusted_schema\x00writable_schema\x00statement\x00row\x00deferred\x00exclusive\x00immediate\x00depth\x00hook\x00new\x00old\x00HANDLE ?FILENAME? ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN? ?-nofollow BOOLEAN? ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN?\x00-version\x00-sourceid\x00-has-codec\x000\x00-key\x00-vfs\x00-create\x00-nofollow\x00-nomutex\x00-fullmutex\x00-uri\x00-translatefilename\x00sqlite3\x00sqlite\x003.39.3\x00if {[llength $argv]>=1} {\nset argv0 [lindex $argv 0]\nset argv [lrange $argv 1 end]\nsource $argv0\n} else {\nset line {}\nwhile {![eof stdin]} {\nif {$line!=\"\"} {\nputs -nonewline \"> \"\n} else {\nputs -nonewline \"% \"\n}\nflush stdout\nappend line [gets stdin]\nif {[info complete $line]} {\nif {[catch {uplevel #0 $line} result]} {\nputs stderr \"Error: $result\"\n} elseif {$result!=\"\"} {\nputs $result\n}\nset line {}\n} else {\nappend line \\n\n}\n}\n}\n\x00SQLITE_DEBUG_BREAK\x00attach debugger to process %d and press any key to continue.\n\x00utf-8\x00argc\x00argv0\x00argv\x00errorInfo\x00%s: %s\n\x00SQLITE-CONNECTION\x00command not found: \x00error code %s (%d) does not match sqlite3_errcode %s (%d)\x00OMIT_MISUSE\x00wrong # args: should be \"\x00 DB FORMAT STRING\x00 DB HEX\x00 DB\x00 DB SQL\x00%z%s%s\x00%s%n\x00abcdefghijklmnopqrstuvwxyz\x00 DB FORMAT STRING ?COUNT?\x00 DB\"\x00 FILENAME\"\x00%04x\x00tkt2213 is not fixed\x00text16\x00bytes\x00bytes16\x00noop\x00x_coalesce\x00hex8\x00hex16\x00tkt2213func\x00pointer_change\x00counter1\x00counter2\x00intreal\x00x_sqlite_exec\x00value of 40 handed to x_count\x00x_count totals to 42\x00x_count\x00legacy_count\x00 TEXT\"\x00 FORMAT INT INT INT\"\x00argument is not a valid 64-bit integer\x00 FORMAT INT INT ?STRING?\"\x00 INT FORMAT INT INT ?STRING?\"\x00N must be non-negative\x00 FORMAT INT INT DOUBLE\"\x00 FORMAT DOUBLE DOUBLE\"\x00 FORMAT STRING\"\x00%08x%08x\x002nd argument should be 16-characters of hex\x00?BOOLEAN?\x00DB BOOLEAN\x00DB dbname tblname colname\x00CHANNEL ROWID\x00DB-HANDLE NAME CMP-PROC DEL-PROC\x00sqlite3_create_collate_v2() failed to detect an invalid encoding\x00utf8\x00utf16\x00utf16le\x00utf16be\x00DB NAME NARG ENC SWITCHES...\x00encoding\x00-func\x00-step\x00-final\x00-destroy\x00switch\x00DB-HANDLE FILE ?PROC?\x00this build omits sqlite3_load_extension()\x00DB-HANDLE ONOFF\x00string\x00first argument should be one of: int int64 string double null value\x00 DB FUNCTION-NAME\x00 <STMT>\x00STMT PARAMETER RESETFLAG\x00SQLITE_STMTSTATUS_FULLSCAN_STEP\x00SQLITE_STMTSTATUS_SORT\x00SQLITE_STMTSTATUS_AUTOINDEX\x00SQLITE_STMTSTATUS_VM_STEP\x00SQLITE_STMTSTATUS_REPREPARE\x00SQLITE_STMTSTATUS_RUN\x00SQLITE_STMTSTATUS_MEMUSED\x00NBYTE\x00DB DBNAME\x00DB DBNAME SNAPSHOT\x00SNAPSHOT\x00SNAPSHOT1 SNAPSHOT2\x00bad SNAPSHOT\x00FILE\x00PATH\x00 DB STMT\x00 STMT\x00 FROM-STMT TO-STMT\x00 VM IDX VALUE (null|static|normal)\"\x00static\x00static-nbytes\x00normal\x00blob10\x00abc\x00xyz\x00pq\x004th argument should be \"null\" or \"static\" or \"normal\"\x00(%d) \x00test_collate\x00UTF-8\x00UTF-16LE\x00UTF-16BE\x00 <DB> <utf8> <utf16le> <utf16be>\x00utf16bin\x00utf16_unaligned\x00utf16_aligned\x00test_function\x00<error code>\x00STMT IDX N\x00 STMT N VALUE\x00NaN\x00SNaN\x00-NaN\x00-SNaN\x00+Inf\x00-Inf\x00Epsilon\x00-Epsilon\x00NaN0\x00-NaN0\x00 STMT N\x00 STMT N VALUE BYTES\x00 STMT N DATA BYTES\x00cannot use %d blob bytes, have %d\x00STMT N NEW|OLD IDX\x00expected new or old, got: \x00STMT N SELECT\x00error in SQL: \x00error runnning SQL: \x00-transient\x00-static\x00-int32\x00-int64\x00-double\x00-text\x00--\x00text data must be either -static or -transient\x00cannot be both -static and -transient\x00[OPTIONS] STMT IDX VALUE ...\x00STMT\x00STMT N\x00STMT NAME\x00 DB sql bytes ?tailvar?\x00 DB sql bytes tailvar\x00 DB sql bytes flags tailvar\x00\x00SELECT 1\x00 filename options-list\x00FILENAME FLAGS VFS\x00SQLITE_OPEN_READONLY\x00SQLITE_OPEN_READWRITE\x00SQLITE_OPEN_CREATE\x00SQLITE_OPEN_DELETEONCLOSE\x00SQLITE_OPEN_EXCLUSIVE\x00SQLITE_OPEN_AUTOPROXY\x00SQLITE_OPEN_MAIN_DB\x00SQLITE_OPEN_TEMP_DB\x00SQLITE_OPEN_TRANSIENT_DB\x00SQLITE_OPEN_MAIN_JOURNAL\x00SQLITE_OPEN_TEMP_JOURNAL\x00SQLITE_OPEN_SUBJOURNAL\x00SQLITE_OPEN_SUPER_JOURNAL\x00SQLITE_OPEN_NOMUTEX\x00SQLITE_OPEN_FULLMUTEX\x00SQLITE_OPEN_SHAREDCACHE\x00SQLITE_OPEN_PRIVATECACHE\x00SQLITE_OPEN_WAL\x00SQLITE_OPEN_URI\x00SQLITE_OPEN_EXRESCODE\x00flag\x00<utf-16 sql>\x00 STMT column\x00FLOAT\x00TEXT\x00BLOB\x00 DB function-name\x00VARIABLE\x00?N?\x001234567890000000\x00__one\x00__two\x00notadatabase\x00Unexpected non-zero errno: \x00DB [DBNAME]\x00%u\x00DB DBNAME SIZE\x00 DB PWD\x00 DB FLAG\x00%d %d\x00 DB ?AUXDB?\x00DB N\x00 DB ID VALUE\x00unknown limit type: \x00SQLITE_LIMIT_LENGTH\x00SQLITE_LIMIT_SQL_LENGTH\x00SQLITE_LIMIT_COLUMN\x00SQLITE_LIMIT_EXPR_DEPTH\x00SQLITE_LIMIT_COMPOUND_SELECT\x00SQLITE_LIMIT_VDBE_OP\x00SQLITE_LIMIT_FUNCTION_ARG\x00SQLITE_LIMIT_ATTACHED\x00SQLITE_LIMIT_LIKE_PATTERN_LENGTH\x00SQLITE_LIMIT_VARIABLE_NUMBER\x00SQLITE_LIMIT_TRIGGER_DEPTH\x00SQLITE_LIMIT_WORKER_THREADS\x00SQLITE_LIMIT_TOOSMALL\x00SQLITE_LIMIT_TOOBIG\x00SEED ?DB?\x00BOOLEAN\x00current\x00max\x00min\x00recyclable\x00DB ?NAME?\x00passive\x00full\x00restart\x00truncate\x00DB MODE ?NAME?\x00mode\x00DB VALUE\x00COMMAND ...\x00command has no objProc: \x00%d %d %d %s\n\x00SQLITE_TESTCTRL_LOCALTIME_FAULT\x00SQLITE_TESTCTRL_SORTER_MMAP\x00SQLITE_TESTCTRL_IMPOSTER\x00SQLITE_TESTCTRL_INTERNAL_FUNCTIONS\x00VERB ARGS...\x00VERB\x000|1|2\x00DB LIMIT\x00DB dbName onOff tnum\x00ru_utime=%d.%06d ru_stime=%d.%06d ru_minflt=%d ru_majflt=%d\x00DB OPT BOOLEAN\x00unknown optimization - should be one of:\x00all\x00none\x00query-flattener\x00groupby-order\x00factor-constants\x00distinct-opt\x00cover-idx-scan\x00order-by-idx-join\x00transitive\x00omit-noop-join\x00stat4\x00skip-scan\x00push-down\x00balanced-merge\x00DB NAME ...\x00no such extension: \x00initialization of \x00 failed: \x00amatch\x00appendvfs\x00closure\x00fileio\x00nextchar\x00series\x00spellfix\x00totype\x00DB SQL1 NSTEP SQL2\x00data error: (a!=b)\x00checksum mismatch\x00sql error: \x00TYPE\x00Deliberate panic\x00DB SETTING [VALUE]\x00SQLITE_*\x00DBCONFIG_*\x00ENABLE_*\x00unknown sqlite3_db_config setting\x00FKEY\x00TRIGGER\x00FTS3_TOKENIZER\x00LOAD_EXTENSION\x00NO_CKPT_ON_CLOSE\x00QPSG\x00TRIGGER_EQP\x00RESET_DB\x00DEFENSIVE\x00WRITABLE_SCHEMA\x00LEGACY_ALTER_TABLE\x00DQS_DML\x00DQS_DDL\x00LEGACY_FILE_FORMAT\x00DB ?SCHEMA?\x00icecube\x00DB ?DBNAME?\x00DB OFFSET DATA\x00HEXDB\x00| size %d pagesize %d\x00bad 'pagesize' field\x00bad 'size' field\x00| page %d offset %d\x00| %d: %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\x00DB ?SCRIPT?\x00sqlite3_autovacuum_pages() returns %d\x00sqlite_search_count\x00sqlite_found_count\x00sqlite_sort_count\x00sqlite3_max_blobsize\x00sqlite_like_count\x00sqlite_interrupt_count\x00sqlite_open_file_count\x00sqlite_current_time\x00sqlite3_xferopt_count\x00sqlite3_pager_readdb_count\x00sqlite3_pager_writedb_count\x00sqlite3_pager_writej_count\x00unaligned_string_counter\x00sqlite_last_needed_collation\x00sqlite_query_plan\x00sqlite_opentemp_count\x00sqlite_static_bind_value\x00sqlite_static_bind_nbyte\x00sqlite_temp_directory\x00sqlite_data_directory\x00bitmask_size\x00longdouble_size\x00sqlite_sync_count\x00sqlite_fullsync_count\x00db_enter\x00db_leave\x00sqlite3_mprintf_int\x00sqlite3_mprintf_int64\x00sqlite3_mprintf_long\x00sqlite3_mprintf_str\x00sqlite3_snprintf_str\x00sqlite3_mprintf_stronly\x00sqlite3_mprintf_double\x00sqlite3_mprintf_scaled\x00sqlite3_mprintf_hexdouble\x00sqlite3_mprintf_z_test\x00sqlite3_mprintf_n_test\x00sqlite3_snprintf_int\x00sqlite3_last_insert_rowid\x00sqlite3_exec_printf\x00sqlite3_exec_hex\x00sqlite3_exec\x00sqlite3_exec_nr\x00sqlite3_get_table_printf\x00sqlite3_close\x00sqlite3_close_v2\x00sqlite3_create_function\x00sqlite3_create_aggregate\x00sqlite3_drop_modules\x00sqlite_register_test_function\x00sqlite_abort\x00sqlite_bind\x00breakpoint\x00sqlite3_key\x00sqlite3_rekey\x00sqlite3_interrupt\x00sqlite_delete_function\x00sqlite_delete_collation\x00sqlite3_get_autocommit\x00sqlite3_busy_timeout\x00printf\x00sqlite3IoTrace\x00clang_sanitize_address\x00sqlite3_db_config\x00sqlite3_txn_state\x00bad_behavior\x00register_dbstat_vtab\x00sqlite3_connection_pointer\x00intarray_addr\x00int64array_addr\x00doublearray_addr\x00textarray_addr\x00sqlite3_bind_int\x00sqlite3_bind_zeroblob\x00sqlite3_bind_zeroblob64\x00sqlite3_bind_int64\x00sqlite3_bind_double\x00sqlite3_bind_null\x00sqlite3_bind_text\x00sqlite3_bind_text16\x00sqlite3_bind_blob\x00sqlite3_bind_value_from_select\x00sqlite3_bind_value_from_preupdate\x00sqlite3_carray_bind\x00sqlite3_bind_parameter_count\x00sqlite3_bind_parameter_name\x00sqlite3_bind_parameter_index\x00sqlite3_clear_bindings\x00sqlite3_sleep\x00sqlite3_errcode\x00sqlite3_extended_errcode\x00sqlite3_errmsg\x00sqlite3_error_offset\x00sqlite3_errmsg16\x00sqlite3_open\x00sqlite3_open16\x00sqlite3_open_v2\x00sqlite3_complete16\x00sqlite3_normalize\x00sqlite3_prepare\x00sqlite3_prepare16\x00sqlite3_prepare_v2\x00sqlite3_prepare_v3\x00sqlite3_prepare_tkt3134\x00sqlite3_prepare16_v2\x00sqlite3_finalize\x00sqlite3_stmt_status\x00sqlite3_reset\x00sqlite3_expired\x00sqlite3_transfer_bindings\x00sqlite3_changes\x00sqlite3_step\x00sqlite3_sql\x00sqlite3_expanded_sql\x00sqlite3_next_stmt\x00sqlite3_stmt_readonly\x00sqlite3_stmt_isexplain\x00sqlite3_stmt_busy\x00uses_stmt_journal\x00sqlite3_release_memory\x00sqlite3_db_release_memory\x00sqlite3_db_cacheflush\x00sqlite3_system_errno\x00sqlite3_db_filename\x00sqlite3_db_readonly\x00sqlite3_soft_heap_limit\x00sqlite3_soft_heap_limit64\x00sqlite3_hard_heap_limit64\x00sqlite3_thread_cleanup\x00sqlite3_pager_refcounts\x00sqlite3_load_extension\x00sqlite3_enable_load_extension\x00sqlite3_extended_result_codes\x00sqlite3_limit\x00dbconfig_maindbname_icecube\x00save_prng_state\x00restore_prng_state\x00reset_prng_state\x00prng_seed\x00extra_schema_checks\x00database_never_corrupt\x00database_may_be_corrupt\x00optimization_control\x00tcl_objproc\x00sqlite3_column_count\x00sqlite3_data_count\x00sqlite3_column_type\x00sqlite3_column_blob\x00sqlite3_column_double\x00sqlite3_column_int64\x00sqlite3_column_text\x00sqlite3_column_name\x00sqlite3_column_int\x00sqlite3_column_bytes\x00sqlite3_column_decltype\x00sqlite3_column_database_name\x00sqlite3_column_table_name\x00sqlite3_column_origin_name\x00sqlite3_column_bytes16\x00sqlite3_column_text16\x00sqlite3_column_name16\x00add_alignment_test_collations\x00sqlite3_column_decltype16\x00sqlite3_column_database_name16\x00sqlite3_column_table_name16\x00sqlite3_column_origin_name16\x00sqlite3_create_collation_v2\x00sqlite3_global_recover\x00working_64bit_int\x00vfs_unlink_test\x00vfs_initfail_test\x00vfs_unregister_all\x00vfs_reregister_all\x00file_control_test\x00file_control_lasterrno_test\x00file_control_lockproxy_test\x00file_control_chunksize_test\x00file_control_sizehint_test\x00file_control_data_version\x00file_control_persist_wal\x00file_control_powersafe_overwrite\x00file_control_vfsname\x00file_control_reservebytes\x00file_control_tempfilename\x00file_control_external_reader\x00sqlite3_vfs_list\x00sqlite3_create_function_v2\x00add_test_collate\x00add_test_collate_needed\x00add_test_function\x00add_test_utf16bin_collate\x00sqlite3_test_errstr\x00tcl_variable_type\x00sqlite3_enable_shared_cache\x00sqlite3_shared_cache_report\x00sqlite3_libversion_number\x00sqlite3_table_column_metadata\x00sqlite3_blob_reopen\x00pcache_stats\x00sqlite3_unlock_notify\x00sqlite3_wal_checkpoint\x00sqlite3_wal_checkpoint_v2\x00sqlite3_wal_autocheckpoint\x00test_sqlite3_log\x00print_explain_query_plan\x00sqlite3_test_control\x00getrusage\x00load_static_extension\x00sorter_test_fakeheap\x00sorter_test_sort4_helper\x00vfs_current_time_int64\x00sqlite3_snapshot_get\x00sqlite3_snapshot_open\x00sqlite3_snapshot_free\x00sqlite3_snapshot_cmp\x00sqlite3_snapshot_recover\x00sqlite3_snapshot_get_blob\x00sqlite3_snapshot_open_blob\x00sqlite3_snapshot_cmp_blob\x00sqlite3_delete_database\x00atomic_batch_write\x00sqlite3_mmap_warm\x00sqlite3_config_sorterref\x00sqlite3_autovacuum_pages\x00decode_hexdb\x00test_write_db\x00sqlite3_register_cksumvfs\x00sqlite3_unregister_cksumvfs\x00*** OBSOLETE VARIABLE ***\x00 FILENAME N-PAGE\"\x00 ID\"\x00ref\x00page\x00err\x00hit\x00miss\x00ovfl\x00 ID PGNO\"\x00 PAGE\"\x00 PAGE DATA\"\x00 N-MEGABYTES FILE\"\x00open failed: \x00Hello, World!\x00write failed: \x00 PENDING-BYTE\"\x00fault simulator script failed: [%s]\x00 SCRIPT\"\x00 SIZE PROGRAM\"\x00sqlite_io_error_pending\x00sqlite_io_error_persist\x00sqlite_io_error_hit\x00sqlite_io_error_hardhit\x00sqlite_diskfull_pending\x00sqlite_diskfull\x00sqlite_pending_byte\x00pager_open\x00pager_close\x00pager_commit\x00pager_rollback\x00pager_stmt_begin\x00pager_stmt_commit\x00pager_stmt_rollback\x00pager_stats\x00pager_pagecount\x00page_get\x00page_lookup\x00page_unref\x00page_read\x00page_write\x00page_number\x00pager_truncate\x00fake_big_file\x00sqlite3BitvecBuiltinTest\x00sqlite3_test_control_pending_byte\x00sqlite3_test_control_fault_install\x00 FILENAME NCACHE FLAGS\"\x00read\x00write\x00 ID TABLENUM WRITEABLE\"\x00 START MULTIPLIER COUNT INCREMENT\"\x00putVarint returned %d - should be between 1 and 9\x00putVarint returned %d and getVarint returned %d\x00Wrote 0x%016llx and got back 0x%016llx\x00putVarint returned %d and GetVarint32 returned %d\x00Wrote 0x%016llx and got back 0x%016llx from GetVarint32\x00 DB-HANDLE ?N?\"\x00No such db-handle: \"\x00 BT NCACHE\"\x00?-intkey? CSR KEY VALUE\x00btree_insert\x00btree_open\x00btree_close\x00btree_begin_transaction\x00btree_pager_stats\x00btree_cursor\x00btree_close_cursor\x00btree_next\x00btree_eof\x00btree_payload_size\x00btree_first\x00btree_varint_test\x00btree_from_db\x00btree_ismemdb\x00btree_set_cache_size\x00thread ID must be an upper case letter\x00 ID FILENAME\x00thread \x00 is already running\x00failed to create the thread\x00 ID\x00no such thread\x00 ID N\x00column number out of range\x00no database is open\x00 ID SQL\x00no virtual machine available\x00 IDL\x00 ID1 ID2\x00 ID DB\x00thread_create\x00thread_wait\x00thread_halt\x00thread_argc\x00thread_argv\x00thread_colname\x00thread_result\x00thread_error\x00thread_compile\x00thread_step\x00thread_finalize\x00thread_swap\x00thread_db_get\x00thread_db_put\x00thread_stmt_get\x00 <repeat-count> <do-calls>\x00hello world\x00UTF8\x00UTF16LE\x00UTF16BE\x00UTF16\x00No such encoding: \x00 <string/blob> <from enc> <to enc>\x00binarize\x00test_value_overhead\x00test_translate\x00translate_selftest\x00out of memory in the crash simulator\n\x00atomic\x00atomic512\x00atomic1k\x00atomic2k\x00atomic4k\x00atomic8k\x00atomic16k\x00atomic32k\x00atomic64k\x00sequential\x00safe_append\x00powersafe_overwrite\x00batch-atomic\x00-sectorsize\x00-characteristics\x00Bad option: \"\x00\" - must be \"-characteristics\" or \"-sectorsize\"\x00Option requires an argument: \"\x00no such flag\x00ENABLE ?DEFAULT?\x00crash\x00?OPTIONS? DELAY CRASHFILE\x00Filename is too long: \"\x00NWRITE\x00?-default? PARENT-VFS\x00-default\x00\": must be -default\x00Error in jt_register\x00sqlite3_crash_enable\x00sqlite3_crashparams\x00sqlite3_crash_now\x00sqlite3_simulate_device\x00sqlite3_crash_on_write\x00unregister_devsim\x00register_jt_vfs\x00unregister_jt_vfs\x00client_create\x00client_wait\x00client_halt\x00client_argc\x00client_argv\x00client_colname\x00client_result\x00client_error\x00client_compile\x00client_step\x00client_reset\x00client_finalize\x00client_swap\x00echo_module_fail(%s,%s)\x00echo-vtab-error: %s\x00SELECT * FROM %Q\x00PRAGMA index_list(%s)\x00PRAGMA index_info(%s)\x00echo_module\x00SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = ?\x00%s%s\x00xCreate\x00CREATE TABLE %Q(logmsg)\x00xConnect\x00xDisconnect\x00xDestroy\x00DROP TABLE %Q\x00xOpen\x00xNext\x00xColumn\x00xFilter\x00, *\x00%z, %s\x00%z, NULL\x00echo_module_ignore_usable\x00xBestIndex\x00echo_module_cost\x00SELECT count(*) FROM %Q\x00SELECT rowid%z FROM %Q\x00=\x00<\x00>\x00<=\x00>=\x00LIKE\x00like\x00glob\x00 %s %s LIKE (SELECT '%%'||?||'%%')\x00 %s %s %s ?\x00DESC\x00ASC\x00 ORDER BY %s %s\x00xUpdate\x00 SET\x00UPDATE %Q\x00 SET rowid=?1 \x00%s %Q=?%d\x00 WHERE rowid=?%d\x00DELETE FROM %Q WHERE rowid = ?1\x00INSERT INTO %Q (\x00%s%Q\x00%s?%d\x00) VALUES(\x00echo(%s)\x00xBegin\x00echo_module_begin_fail\x00xSync\x00echo_module_sync_fail\x00xCommit\x00xRollback\x00::echo_glob_overload\x00xRename\x00ALTER TABLE %s RENAME TO %s%s\x00function_that_does_not_exist_0982ma98\x00echo\x00echo_v2\x00register_echo_module\x00sqlite3_declare_vtab\x00N/A\x00sqlite3_create_collation\x00Error testing function: \x00sqlite3_malloc\x00sqlite3_realloc\x00c_misuse_test\x00c_realloc_test\x00c_collation_test\x00sqlite3_reset_auto_extension\x00npage\x00finish\x00remaining\x00pagecount\x00CMDNAME DESTHANDLE DESTNAME SRCHANDLE SRCNAME\x00sqlite3_backup_init() failed\x00sqlite3_backup\x00wrong number of arguments\x00unexpected: %s\x00eq\x00gt\x00le\x00lt\x00ge\x00match\x00ne\x00isnot\x00isnotnull\x00isnull\x00limit\x00offset\x00column\x00usable\x00desc\x00constraints\x00orderby\x00mask\x00distinct\x00in\x00rhs_value\x00INDEX BOOLEAN\x00INDEX ?DEFAULT?\x00bestindex%d\x00cost\x00idxnum\x00idxstr\x00rows\x00use\x00omit\x00unexpected: %d\x00tcl\x00register_tcl_module\x00incrblob_\x00DB DATABASE TABLE COLUMN ROWID FLAGS VARNAME\x00HANDLE\x00CHANNEL OFFSET N\x00out of memory in testdata/sqlite-src-3390300/src/test_blob.c\x00HANDLE OFFSET DATA ?NDATA?\x00sqlite3_blob_open\x00sqlite3_blob_close\x00sqlite3_blob_bytes\x00sqlite3_blob_read\x00sqlite3_blob_write\x00sqlite_options\x00malloc_usable_size\x001\x00rowid32\x00casesensitivelike\x00configslower\x001.0\x00curdir\x00win32malloc\x00debug\x00default_ckptfullfsync\x00direct_read\x00dirsync\x00lfs\x00pagecache_overflow_stats\x00mmap\x00worker_threads\x008\x00memdebug\x008_3_names\x00cursorhints\x00hiddencolumns\x00mathlib\x00mem3\x00mem5\x00offset_sql_func\x00snapshot\x00mutex\x00mutex_noop\x00altertable\x00api_armor\x00atomicwrite\x00geopoly\x00json1\x00has_codec\x00like_match_blobs\x00auth\x00autoinc\x00autoreset\x00autovacuum\x00default_autovacuum\x00between_opt\x00builtin_test\x00bloblit\x00cast\x00check\x00cte\x00columnmetadata\x00oversize_cell_check\x00compileoption_diags\x00compound\x00conflict\x00crashtest\x00datetime\x00decltype\x00deprecated\x00diskio\x00floatingpoint\x00foreignkey\x00fts1\x00fts2\x00fts3\x00fts5\x00fts3_unicode\x00fts4_deferred\x00gettable\x00icu\x00icu_collations\x00integrityck\x00legacyformat\x00like_opt\x00load_ext\x00localtime\x00lookaside\x00long_double\x00memorydb\x00memorymanage\x00mergesort\x00null_trim\x00or_opt\x00rbu\x00pager_pragmas\x00pragma\x00reindex\x00rtree\x00rtree_int_only\x00schema_pragmas\x00schema_version\x00session\x00stmtvtab\x00scanstatus\x00lock_proxy_pragmas\x00prefer_proxy_locking\x00shared_cache\x00subquery\x00tclvar\x00threadsafe\x00threadsafe1\x00threadsafe2\x00tempdb\x00trigger\x00truncate_opt\x00vacuum\x00view\x00vtab\x00wal\x00wsd\x00update_delete_limit\x00fast_secure_delete\x00secure_delete\x00userauth\x00multiplex_ext_overwrite\x00yytrackmaxstackdepth\x00sqllog\x00uri_00_error\x00normalize\x00windowfunc\x00SQLITE_MAX_LENGTH\x00SQLITE_MAX_COLUMN\x00SQLITE_MAX_SQL_LENGTH\x00SQLITE_MAX_EXPR_DEPTH\x00SQLITE_MAX_COMPOUND_SELECT\x00SQLITE_MAX_VDBE_OP\x00SQLITE_MAX_FUNCTION_ARG\x00SQLITE_MAX_VARIABLE_NUMBER\x00SQLITE_MAX_PAGE_SIZE\x00SQLITE_MAX_PAGE_COUNT\x00SQLITE_MAX_LIKE_PATTERN_LENGTH\x00SQLITE_MAX_TRIGGER_DEPTH\x00SQLITE_DEFAULT_CACHE_SIZE\x00SQLITE_DEFAULT_PAGE_SIZE\x00SQLITE_DEFAULT_FILE_FORMAT\x00SQLITE_DEFAULT_SYNCHRONOUS\x00SQLITE_DEFAULT_WAL_SYNCHRONOUS\x00SQLITE_MAX_ATTACHED\x00SQLITE_MAX_DEFAULT_PAGE_SIZE\x00SQLITE_MAX_WORKER_THREADS\x00TEMP_STORE\x00__GNUC__\x00%s-journal\x00%s-wal\x00%s-shm\x00%s%03d\x00%s-journal%03d\x00%s-wal%03d\x00devsym\x00writecrash\x00CREATE TABLE xyz(dir, name);\x00CREATE TABLE xyz(path, size, data);\x00WITH r(d) AS ( SELECT CASE WHEN dir=?2 THEN ?3 ELSE dir END || '/' || name FROM fsdir WHERE dir=?1 AND name NOT LIKE '.%' UNION ALL SELECT dir || '/' || name FROM r, fsdir WHERE dir=d AND name NOT LIKE '.%') SELECT d FROM r;\x00/\x00CREATE TABLE x(path TEXT, data TEXT)\x00SELECT * FROM %Q.%Q WHERE rowid=?\x00fs\x00fstree\x00register_fs_module\x00abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-!,:*^+=_|?/<> \x00sqlite3_prepare_v2() error: %s\x000123456789abcdef\x00test_agg_errmsg16\x00randstr\x00test_destructor\x00test_destructor16\x00hex_to_utf16be\x00hex_to_utf16le\x00hex_to_utf8\x00test_destructor_count\x00test_auxdata\x00test_error\x00test_eval\x00test_isolation\x00test_counter\x00real2hex\x00test_decode\x00test_extract\x00test_zeroblob\x00test_getsubtype\x00test_setsubtype\x00test_frombind\x00tx\x00funcxx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789\x00nullx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789\x00sqlite3_create_function abused test failed\x00invalid matchinfo blob passed to function rank()\x00wrong number of arguments to function rank()\x00rank\x00autoinstall_test_functions\x00abuse_create_function\x00install_fts3_rank_function\x000123456789ABCDEF\x00FILENAME OFFSET AMT\x00r\x00cannot open input file \x00FILENAME OFFSET HEXDATA\x00r+b\x00r+\x00cannot open output file \x00HEXDATA\x00[utf8_to_utf8] unavailable - SQLITE_DEBUG not defined\x00BLOB VARNAME\x00LIST\x00hexio_read\x00hexio_write\x00hexio_get_int\x00hexio_render_int16\x00hexio_render_int32\x00utf8_to_utf8\x00read_fts3varint\x00make_fts3record\x00mem\x00pcache\x00Unknown argument: \"\x00init_wrapper_install\x00init_wrapper_query\x00init_wrapper_uninstall\x00init_wrapper_clear\x00CREATE TABLE x(value INTEGER PRIMARY KEY)\x00CREATE VIRTUAL TABLE temp.%Q USING %Q\x00INTARRAY\x00SQLITE_NOMEM\x00sqlite3_intarray_create\x00sqlite3_intarray_bind\x00jt\x00-journal\x00NBYTES\x00PRIOR NBYTES\x00bad pointer: \x00PRIOR\x00ADDRESS SIZE HEX\x00size must be positive\x00no data\x00ADDRESS SIZE\x00?RESET?\x00DEPT\x00FILENAME\x00COUNTER ?OPTIONS?\x00-repeat\x00-benigncnt\x00TITLE\x00SUB-COMMAND ...\x00start\x00stop\x00dump\x00clear\x00sync\x00SIZE N\x00INSTALLFLAG DISCARDCHANCE PRNGSEEED HIGHSTRESS\x00discard-chance should be between 0 and 100\x00SIZE COUNT\x00BUFID SIZE COUNT\x00illegal arguments - see documentation\x00NBYTE NMINALLOC\x00[DB]\x00sqlite3_db_config(db, 99999) does not return SQLITE_ERROR\x00sqlite3_config(99999) does not return SQLITE_ERROR\x00PARAMETER RESETFLAG\x00SQLITE_STATUS_MEMORY_USED\x00SQLITE_STATUS_MALLOC_SIZE\x00SQLITE_STATUS_PAGECACHE_USED\x00SQLITE_STATUS_PAGECACHE_OVERFLOW\x00SQLITE_STATUS_PAGECACHE_SIZE\x00SQLITE_STATUS_SCRATCH_USED\x00SQLITE_STATUS_SCRATCH_OVERFLOW\x00SQLITE_STATUS_SCRATCH_SIZE\x00SQLITE_STATUS_PARSER_STACK\x00SQLITE_STATUS_MALLOC_COUNT\x00DB PARAMETER RESETFLAG\x00SQLITE_\x00DBSTATUS_\x00LOOKASIDE_USED\x00CACHE_USED\x00SCHEMA_USED\x00STMT_USED\x00LOOKASIDE_HIT\x00LOOKASIDE_MISS_SIZE\x00LOOKASIDE_MISS_FULL\x00CACHE_HIT\x00CACHE_MISS\x00CACHE_WRITE\x00DEFERRED_FKS\x00CACHE_USED_SHARED\x00CACHE_SPILL\x00?INTEGER?\x00sqlite3_free\x00memset\x00memget\x00sqlite3_memory_used\x00sqlite3_memory_highwater\x00sqlite3_memdebug_backtrace\x00sqlite3_memdebug_dump\x00sqlite3_memdebug_fail\x00sqlite3_memdebug_pending\x00sqlite3_memdebug_settitle\x00sqlite3_memdebug_malloc_count\x00sqlite3_memdebug_log\x00sqlite3_config_pagecache\x00sqlite3_config_alt_pcache\x00sqlite3_status\x00sqlite3_db_status\x00install_malloc_faultsim\x00sqlite3_config_heap\x00sqlite3_config_heap_size\x00sqlite3_config_memstatus\x00sqlite3_config_lookaside\x00sqlite3_config_error\x00sqlite3_config_uri\x00sqlite3_config_cis\x00sqlite3_config_pmasz\x00sqlite3_db_config_lookaside\x00sqlite3_dump_memsys3\x00sqlite3_dump_memsys5\x00sqlite3_install_memsys3\x00sqlite3_memdebug_vfs_oom_test\x00%05u\x00 FILENAME [OFFSET AMT]\"\x00unable to open file \"\x00\" for reading\x00md5\x00md5-10x8\x00md5file\x00md5file-10x8\x00md5sum\x00%03d\x00multiplexor.xAccess failure on %s\x00multiplexor.xOpen failure on %s\x00multiplex_control\x00chunksize\x00multiplex_\x00multiplex_truncate\x00multiplex_enabled\x00multiplex_chunksize\x00multiplex_filecount\x00multiplex/%z\x00multiplex\x00NAME MAKEDEFAULT\x00-force\x00?-force?\x00chunk_size\x00max_chunks\x00HANDLE DBNAME SUB-COMMAND INT-VALUE\x00expected database handle, got \"\x00sqlite3_multiplex_initialize\x00sqlite3_multiplex_shutdown\x00sqlite3_multiplex_control\x00fast\x00recursive\x00static_main\x00static_mem\x00static_open\x00static_prng\x00static_lru\x00static_pmem\x00static_app1\x00static_app2\x00static_app3\x00static_vfs1\x00static_vfs2\x00static_vfs3\x00mutex counters are \x00already installed\x00not installed\x00singlethread\x00multithread\x00serialized\x00mutex name\x00disable_mutex_init\x00disable_mutex_try\x00sqlite3_shutdown\x00sqlite3_initialize\x00sqlite3_config\x00enter_static_mutex\x00leave_static_mutex\x00enter_db_mutex\x00leave_db_mutex\x00alloc_dealloc_mutex\x00install_mutex_counters\x00read_mutex_counters\x00clear_mutex_counters\x00\x00\x00\x00\x00\x00\x00\x00vfslog/%z\x00sqlite_ostrace1.....\x00xClose\x00xRead\x00xWrite\x00xTruncate\x00xFilesize\x00xLock\x00xUnlock\x00xCheckResLock\x00xFileControl\x00xSectorSize\x00xDeviceChar\x00xDelete\x00xAccess\x00xFullPathname\x00xRandomness\x00xSleep\x00xCurrentTime\x00xShmUnmap\x00xShmLock\x00xShmBarrier\x00xShmMap\x00annotation\x00CREATE TABLE xxx(event, file, click, rc, size, offset)\x00vfslog\x00VFS\x00failed\x00VFS PARENT LOGFILE\x00bad sqlite3 handle: \x00annotate\x00finalize\x00register\x00quota/%z\x00quota\x00::piLimit_\x00PATTERN LIMIT SCRIPT\x00FILENAME MODE\x00HANDLE SIZE NELEM\x00HANDLE SIZE NELEM CONTENT\x00HANDLE ?HARDSYNC?\x00HANDLE OFFSET WHENCE\x00SEEK_SET\x00SEEK_CUR\x00SEEK_END\x00WHENCE should be SEEK_SET, SEEK_CUR, or SEEK_END\x00HANDLE SIZE\x00PATTERN TEXT\x00sqlite3_quota_initialize\x00sqlite3_quota_shutdown\x00sqlite3_quota_set\x00sqlite3_quota_file\x00sqlite3_quota_dump\x00sqlite3_quota_fopen\x00sqlite3_quota_fread\x00sqlite3_quota_fwrite\x00sqlite3_quota_fclose\x00sqlite3_quota_fflush\x00sqlite3_quota_fseek\x00sqlite3_quota_rewind\x00sqlite3_quota_ftell\x00sqlite3_quota_ftruncate\x00sqlite3_quota_file_size\x00sqlite3_quota_file_truesize\x00sqlite3_quota_file_mtime\x00sqlite3_quota_remove\x00sqlite3_quota_glob\x00sqlite3_quota_file_available\x00sqlite3_quota_ferror\x00cube\x00circle\x00Qcircle\x00breadthfirstsearch\x00register_cube_geom\x00register_circle_geom\x00CREATE TABLE x(database,tablename,cid,name,type,not_null,dflt_value,pk)\x00SELECT name FROM sqlite_temp_schema WHERE type='table'\x00SELECT name FROM %Q.sqlite_schema WHERE type='table'\x00PRAGMA %Q.table_info(%Q)\x00PRAGMA database_list\x00register_schema_module\x00PRAGMA main.journal_mode\x00CMDNAME PATH ?VFS? ?BUSY-HANDLER-SCRIPT?\x00sqlite3demo_superlock\x00open\x00access\x00getcwd\x00stat\x00fstat\x00ftruncate\x00fcntl\x00pread\x00pread64\x00pwrite\x00pwrite64\x00fchmod\x00fallocate\x00mremap\x00SYSCALL-LIST\x00system-call\x00?COUNT PERSIST?\x00EACCES\x00EINTR\x00EIO\x00EOVERFLOW\x00ENOMEM\x00EAGAIN\x00ETIMEDOUT\x00EBUSY\x00EPERM\x00EDEADLK\x00ENOLCK\x00SYSCALL ERRNO\x00errno\x00PGSZ\x00getpagesize\x00pgsz out of range\x00fault\x00install\x00uninstall\x00list\x00defaultvfs\x00pagesize\x00VFS does not support xSetSystemCall\x00test_syscall\x00load_testfixture_extensions\x00SLAVE\x00CREATE TABLE x( name TEXT, arrayname TEXT, value TEXT, fullname TEXT PRIMARY KEY) WITHOUT ROWID\x00array names\x00tclvar_filter_cmd\x00%s(%s)\x00expr {[info exists ::tclvar_set_omit] && $::tclvar_set_omit}\x00the 'fullname' column must be TEXT\x00prohibited TCL variable change\x00proc like {pattern str} {\n set p [string map {% * _ ?} $pattern]\n string match $p $str\n}\nproc tclvar_filter_cmd {eq match glob regexp like} {\n set res {}\n set pattern $eq\n if {$pattern=={}} { set pattern $match }\n if {$pattern=={}} { set pattern * }\n foreach v [uplevel #0 info vars $pattern] {\n if {($glob=={} || [string match $glob [uplevel #0 set $v]])\n && ($like=={} || [like $like [uplevel #0 set $v]])\n && ($regexp=={} || [regexp $regexp [uplevel #0 set $v]])\n } {\n lappend res $v\n }\n }\n set res\n}\n\x00register_tclvar_module\x00clock_seconds\x00sqlthread\x00sqlite3_blocking_step\x00sqlite3_blocking_prepare_v2\x00sqlite3_nonblocking_prepare_v2\x00set\x00Error in Tcl_CreateThread()\x00no parent thread\x00parent\x00spawn\x00VARNAME SCRIPT\x00DBNAME\x00id\x00%s \x00SQLITE_IOERR\x00SQLITE_LOCKED\x00SQLITE_BUSY\x00SQLITE_READONLY\x00SQLITE_READONLY_CANTINIT\x00SQLITE_NOTFOUND\x00SQLITE_OMIT\x00normal|dataonly\x00full|dataonly\x00xCheckReservedLock\x00BEGIN_ATOMIC_WRITE\x00COMMIT_ATOMIC_WRITE\x00ZIPVFS\x00anon\x00SQLITE_ACCESS_EXISTS\x00SQLITE_ACCESS_READWRITE\x00SQLITE_ACCESS_READ\x00xShmOpen\x00 lock\x00 unlock\x00 shared\x00 exclusive\x00shm\x00filter\x00ioerr\x00fullerr\x00cantopenerr\x00script\x00devchar\x00sectorsize\x00subcommand\x00FILE ?VALUE?\x00failed to get full path: \x00no such file: \x00unknown method: \x00?CNT PERSIST?\x00default\x00undeletable_when_open\x00immutable\x00?ATTR-LIST?\x00bad flags: \x00?VALUE?\x00-noshm\x00-szosfile\x00-mxpathname\x00-iversion\x00-fullshm\x00VFSNAME ?-noshm BOOL? ?-fullshm BOOL? ?-default BOOL? ?-mxpathname INT? ?-szosfile INT? ?-iversion INT?\x00shared\x00lock\x00unlock\x00DB DBNAME (shared|exclusive) (lock|unlock) OFFSET N\x00ARG\x00DB DBNAME SLOT ?VALUE?\x00*-shm is not yet mapped\x00testvfs\x00vfs_shmlock\x00vfs_set_readmark\x00DB NAME XSTEP XFINAL XVALUE XINVERSE\x00fff\x00misuse test error\x00invalid argument\x00sumint\x00sum\x00sqlite3_create_window_function\x00test_create_window_function_misuse\x00test_create_sumint\x00test_override_sum\x00" 61644 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data